Why & How to Distribute Your App Outside the Mac App Store
Starting with a macOS app business is no easy task. It’s a trial by fire. A lot of questions cycle through your mind:
- “Is the Mac App Store worth the fee?”
- “How can I explore new business models with my apps?”
- “How can I better protect my app from piracy?”
- “How should I process payments?”
- “Am I doing this right?”
You’re not alone
That’s where I come in: I went through all this time and again. I asked around in the community and assembled best practices to distribute your macOS apps on your own. Lots of nice folks have solved these kind of problems in the past decades, and I helped them share their approaches.
I want to help you with your indie business, because I believe the community at large and all macOS users benefit when developers can operate more freely. The App Store is not a good choice for everyone, and you should not be intimidated by the prospect of figuring out things on your own. You can get rolling and become independent rather quickly and grow your passive income through indie macOS app development.
Here’s how.
Consider the App Store’s pros and cons
I collected honest arguments pro and con the Mac App Store you might want to read if you are note certain whether the App Store is for you or not. Direct customer contact is one very important motivator for me to favor direct sales over the App Store. Upgrade pricing and new business models might be worth considering, too.
I think it’s a very good strategy to sell your app on the Mac App Store and outside of it, in parallel. By being present on your page and in the App Store, you can continue market your app the same way, so no changes on that front.
Meanwhile, you increase optionality for customers: they can choose the store platform, and thus decide if they e.g. want to benefit from upgrade pricing in the future by buying from you directly. You also increase resilience for your business: if you are locked-out of the App Store, your business doesn’t crumble.
Sell your products with FastSpring
There are a ton of services to sell your app. To keep things simple, I recommend FastSpring. I have sold my own apps and ebooks on FastSpring stores for years. Here are some highlights of their service:
See a comparison of different e-commerce platforms if you want to have a look at different services and their type of services: from mere payment processors like PayPal, to shared e-commerce platform stores like Gumroad, to creating your own e-commerce platform with FastSpring, to using licensing-as-a-service providers.
A couple of highlights of FastSpring for me:
-
Low Transaction Fees: Their rates are attractively low, especially compared to Apple’s 30% price cut before taxes. FastSpring takes a 8% fee for each transaction only. That’s on par with a lot of other e-commerce and online shop solutions.
-
Super-Highly Customizable: You can theme FastSpring’s own storefronts. You don’t even need a website for this. Or you implement your own shop and storefront on your site and merely “remote-control” the customer’s shopping basket hosted by FastSpring.
-
Upgrade Pricing, Subscriptions, Discounts: Rolling your own store means you control the business model. Want to offer upgrade pricing? No problem. You can also implement the model of subscription of “buy 1 year of updates and keep the latest version forever”, made popular by Sparkle. They use FastSpring, too, by the way.
-
Value-Added Tax (VAT) Included: Compared to handling sales with PayPal or Stripe on your own, FastSpring handles taxes for you. If you have customers in Europe, this will save you a lot of headache.
-
Easy for accounting: Bi-monthly payouts were always punctual for me, even though I receive the money on my German bank account from California. Generating monthly payment stats is also very simple for your taxes.
A FastSpring Guide: Sell licenses and integrate verification in your app in a day
If you want to get started with a FastSpring integration on your own, I wrote a complete guide on the topic. This is especially handy if you don’t have the budget to hire me to help you with the setup.
This book teaches you all I know about
- how to set up your product for sale on FastSpring,
- generate personalized licenses for each purchase,
- and verify license codes in your app.
It also comes with a ton of contextual tips and bonus material like in-app purchase setups.
Make Money Outside the Mac App Store
Own your products and know your customers: sell outside the Mac App Store. In a few hours, you'll have in-app purchases, a trial mode, and piracy protection all set. The book includes fully functional sample projects and code ready to be copied into your app.
- 2nd edition: expanded to twice the features and details!
- Swift 5
- PDF, EPUB, and Kindle download
- Lifetime updates
Free Code: How to protect your app with license codes
TrialLicensing: A set of libraries for macOS apps to implement time-based trial and license verification code in your app.
- Protect your app from piracy by locking features with a license code.
- Reach more people by distributing your app bundle with a time-limited trial mode.
Here’s a short sample. (Click/tap to expand the steps.)
Step 1: Configure the library with a few simple steps during app launch.
import TrialLicense
let publicKey = [
"-----BEGIN DSA PUBLIC KEY-----\n",
// ...
"-----END DSA PUBLIC KEY-----\n"
].join("")
let configuration = LicenseConfiguration(appName: "YourAmazingApp!", publicKey: publicKey)
let trialDuration = Days(30)
class AppDelegate: NSApplicationDelegate, AppLicensingDelegate {
func applicationDidFinishLaunching(_ aNotification: Notification) {
AppLicensing.setUp(
configuration: configuration,
initialTrialDuration: trialDuration,
// Set up event callbacks:
licenseChangeBlock: licenseDidChange(licenseInfo:),
invalidLicenseInformationBlock: didEnterInvalidLicenseCode(name:licenseCode:),
// Get notified about initial state to unlock the app immediately:
fireInitialState: true)
}
}
Step 2: React to change events.
func licenseDidChange(licenseInformation: LicenseInformation) {
switch licenseInformation {
case .onTrial(_):
// Initial event, the default state of your app.
// Changing back to trial may be possible if you support unregistering
// form the app (and the trial period is still good.)
return
case .registered(_):
// For example:
// displayThankYouAlert()
// unlockAppFunctionality()
case .trialUp:
// For example:
// displayTrialUpAlert()
// lockAppFunctionality()
// showRegisterAppPrompt()
}
}
func didEnterInvalidLicenseCode(name: String, licenseCode: String) {
// Show an alert, color the window red, or whatever you like
}
Need help?
If you still find yourself in a situation where you prefer someone with experience to set up the integration for you, I’m happy to help!
We can set up your very own FastSpring Store and integrate license activation into your app:
- Product setup on FastSpring, ready for sale when you say “Go!”
- Time-limited trial in your app; you pick for how long it runs
- License verification in the app to unlock features
Links & Resources
- Code: see the TrialLicensing library on GitHub.
- Book details: the “Make Money Outside the Mac App Store” page tells you more about the book.
- Store demos: FastSpringExamples.com shows off a lot of the integrated store features. I wrote about it with more links.
- Watch the webinar: there’s a recording of “Beyond the Mac App Store: A Practical Guide to Go From Code to Cash” (slides) in the webinar series “More Money, More Control: Selling Your App Outside the App Store”.
- Hire me: If you want to work with me, see my rates and details.