What's included
| License key generation |
Unique keys created on every purchase or subscription. |
| In-app checkout |
Customers pay in a sheet inside your app and the license activates itself. |
| Hosted success page |
Customers see their key immediately after checkout. |
| Email delivery |
Keys and receipts sent automatically. |
| Customer portal |
Self-serve access at my.amore.computer/portal. |
| Swift SDK |
Drop-in AmoreLicensing package for your app. |
| Activation & validation |
Server-side checks so keys can't be shared without limit. |
| Merchant of record |
Optional. Stripe takes on VAT and sales tax for you. |
Built for trust
Most license SDKs phone home on every launch and bind hardware with checks that take minutes to bypass. AmoreLicensing is different.
| Signed JWTs |
Every license is a cryptographically signed token. Tamper with it, the signature breaks. |
| Hardware-bound |
The device ID is baked into the signed token. Copy it to another machine, it stops working. |
| Offline-first |
Validation happens locally on the customer's Mac. No server round-trip per launch. |
| Outage-resilient |
Configurable grace period keeps customers running if the licensing server is briefly unreachable. |
| Replay-proof |
Client-generated nonces signed into each token prevent MITM and replay attacks. |
For the full technical breakdown, see Architecture & Security.
A few lines of Swift
Initialize the SDK with your public key, then activate a license when the customer enters their key.
import AmoreLicensing
let licensing = try AmoreLicensing(publicKey: "your-public-key")
try await licensing.activate(licenseKey: "XXXX-XXXX-XXXX")
AmoreLicensing is @Observable, so SwiftUI views react automatically when the license status changes.
switch licensing.status {
case .valid(let license):
case .gracePeriod(let license):
case .invalid:
case .unknown:
}
See the licensing guide for the full integration.
Sell without sending anyone to a browser
The usual way to sell a Mac app outside the App Store asks a lot: leave the app, pay in a browser, wait for an email, find the key, paste it back. Four chances to lose the sale, and the ones who get through still write to you when the email lands in spam.
AmoreCheckout collapses that into a sheet. Your customer clicks buy, pays without leaving your app, and the license activates itself. If the app quits mid-purchase, one call at launch resolves it, and nobody gets charged twice.
import AmoreCheckout
let checkout = AmoreCheckout(licensing: licensing)
One modifier turns any button into a purchase. The license activates itself when payment clears.
@State private var buying: Product?
Button("Buy Pro") { buying = product }
.amoreCheckout(item: $buying, checkout: checkout)
Bring your own paywall, success screen, or container, or hand the URL to the browser instead. See in-app purchases.
Stripe can be your merchant of record
You don't need Paddle, Lemon Squeezy, or any other reseller to get out of tax paperwork. Switch on Stripe Managed Payments and Stripe becomes the merchant of record for your sales: it calculates, collects, and remits VAT and sales tax worldwide, and takes on fraud and chargebacks with it.
It's a setting in your own Stripe account, and Amore licensing works with it out of the box. If you'd rather sell directly and handle tax yourself, that works too. Nothing in your app or your integration changes either way.
Pricing
Start for free, and only pay in months you earn over $1,000. After that, it's 1.5% of your total monthly tracked revenue (MTR).
License purchases are processed through your own Stripe account.
How it fits with Amore+
Licensing is its own product, independent of Amore+. Activate it on its own with the 1.5% usage fee, no other subscription required.
Pairs well with Amore+ if you also want unlimited releases, no DMG watermark, custom domains, and analytics for distributing your app.
Get started
Integrate the AmoreLicensing SDK and connect your Stripe account. The licensing guide walks you through every step.
Enterprise
Custom
tailored to your needs
For high-volume apps or unique requirements. Includes custom integrations, dedicated onboarding, priority support, and flexible billing terms.
Get in touch to discuss your needs.