Why & How to Distribute Your App Outside the Mac App Store

Table of Contents
  1. You’re not alone
  2. Consider the App Store’s pros and cons
  3. Sell your products with FastSpring
  4. A FastSpring Guide: Sell licenses and integrate verification in your app in a day
  5. Free Code: How to protect your app with license codes
  6. Need help?
  7. Links & Resources
  8. Posts on the topic

Starting with a macOS app business is no easy task. It’s a trial by fire. A lot of questions cycle through your mind:

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.

This is how one of my customized FastSpring web stores look.

A couple of highlights of FastSpring for me:

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

It also comes with a ton of contextual tips and bonus material like in-app purchase setups.

book cover

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

Example of a license code form

TrialLicensing: A set of libraries for macOS apps to implement time-based trial and license verification code in your app.

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:

Posts on the topic