Launching an app and making that first dollar from it is an unforgettable experience. Getting there? It can feel intimidating. This guide is here to help you get started from step one to shipping. Here, we'll cover in the most simple terms how to:
Create a new Apple developer account.
Create a new app in App Store Connect.
Create subscriptions products in App Store Connect.
Display them in your app with Superwall.
Test them out before launching via TestFlight.
How to get them ready to submit to App Store review.
And, how to get them live in the App Store.
Before we dive in, here's what I expect you are comfortable with:
You know what Xcode is. You know how to build and run an app in the iOS simulator.
You have an app you've been working on.
Finally, this is not a programming guide. This post is to get your app you've been working on in a testable state with real products. Then, if you so choose, it details how to get it live on the App Store.
If you haven't done this process before, you can open up this post on one side of your screen — and then use a new window to perform the tasks, side-by-side, on the other side. Let's get started.
Create a developer account with Apple
If you don't have an active developer account, you need to create one. To do that, go sign up and then come back to this post.
Sign into Xcode
First, make sure you're signed in with your developer account inside of Xcode. Also, keep in mind that if you've done any of these steps (i.e., you already signed into Xcode with your developer account), you can skip to the next part and continue on.
Open Xcode Preferences: Go to Xcode > Preferences.
Navigate to Accounts: Click the "Accounts" button.
If you aren't signed in, click Add Account and follow the prompts.
Once signed in, make sure your app is open in Xcode. In its Signing & Capabilities section, you should have your developer team selected there. Here's what mine looks like in Xcode...

Creating an app in App Store Connect
Now that you're signed up with Apple and signed in on Xcode, you'll head to App Store Connect and create a new app:
Click on Apps
Click on the blue plus button at the top left:

Then, fill in all of the metadata in the resulting modal. Make sure you check iOS under Platforms:

I want to call out the Bundle ID section. You'll need to create a new bundle ID in the Certificates, Identifiers & Profiles section. This bundle ID is what connects your app from App Store Connect to Xcode. Recall the last screen shot. In App Store Connect, the bundle ID for my app, Scores for NCAA, is com.daywellspent.scoresforncaa
— and it's also the same here in Xcode for my project. For a refresher:

...which matches what's in App Store Connect:

When you visit the Certificates, Identifiers & Profiles, Apple will walk you through the steps of creating all of the things you need for a new app — and then you'll go right back to this modal and the bundle ID will be selectable.
Creating subscriptions in App Store Connect
Now, it's time to make some products users can purchase and subscribe to.
Create a subscription group
Your first stop is to create the subscriptions within App Store Connect. To do that, we'll need a subscription group — which are used to organize your app’s subscriptions. Typically, each group (you can use just one, or as many as you need) contains different levels of subscription options. For example, a monthly plan, a yearly plan, or a premium plan might be in one group.
Here's some important bits to remember about them:
Users can only subscribe to one product in a group at a time.
They can upgrade, downgrade, or switch between subscriptions within the same group.
If you want totally separate subscriptions, you would put them in different groups.
This last part is important! Users can subscribe to more than one subscription group, but only one subscription within a group.
Subscription groups are like a restaurant menu. Someone picks one item off of it, but they can swap it later if they want.
Select your app and create a subscription group, where you'll add one or more subscriptions in the next step:
Open your app in App Store Connect.
In the left sidebar under App Store --> Monetization, click on Subscriptions.
Under Subscription Groups, click the create button.

Name your subscription group and create it.

Create a subscription
Next, create one or more subscriptions within the group. This is what your users will see on your paywalls:
Click on Create under Subscriptions.
Add a Reference Name and Product ID.
For Reference Name, use something that you can easily understand when seeing it in a UI. You'll see this in App Store Connect reporting — it won't show on the App Store.
For Product ID, I find it helps to name it in a way that conveys what the plan, price and trials duration offer. This value isn't user facing.

Here is an example from one of my apps:

Fill in subscription details
Next up, you'll set the price, duration, and fill in similar metadata for the subscription on this page:

Set a subscription duration. Pick an option from the toggle found in the top right of the page.
Click on Setup Availability and either choose Done from the modal to make it available in all territories, or select the individual ones where it should be available.
Now, click on Add Subscription Price and choose a price for your subscription (optionally, customize the price per region). Click Confirm at the end. You will be able to set a free trial or paid introductory offer in a minute.
Finally, click on Add Localization and fill in the display name and description.
At the top right, click on Save.
Adding a free trial or introductory offer
If you want to add a free trial, or introductory offer (i.e. $10 for the first year, renews at $15):
Click on the + button next to "Subscription Prices" and choose "Create Introductory Offer":
Click Next to select the applicable territories.
Choose a start and end date. For free trials, most likely you'll just choose the start date as today, and don't choose an end date. Then, click Next.
Now, you'll choose the type of introductory offer you want to use. You have three options:
Pay as you go: Let subscribers pay periodically (e.g., monthly or yearly) at a discounted rate during the introductory period, while renewing at your standard rate.
Pay up front: Similar to pay as you go, except subscribers pay the total discounted price for the entire introductory period in advance. Then, they'll renew at the standard rate.
Free: This create a free trial (X days free, then $Y per (month, year, etc).
Choose the territories, and click Confirm.
Repeat these steps for any of the subscriptions you want to offer. Before you go any further, now is the time to create your free Superwall account if you haven't yet, and add your new iOS app to it.
Adding subscriptions in Superwall
At this point, you could add your products into your iOS app in several different ways (such as StoreKit). Here, I'll show how quick and easy it is using Superwall — which is the fastest route to launching and monetizing.
Here are two super short videos I've put together to show you all that you need to know:
At this point:
You have created subscriptions.
You’ve added your products into Superwall. Behind the scenes, Superwall also created a default entitlement for you. An entitlement is simply a way of saying, “this person can access this part of my app.” You can create multiple entitlements if you need them, but in most cases — like in our example — one is enough. (For example, if someone has an active subscription, they can access all the features of your app with one active entitlement.)
And, you've setup an entire stack to present paywalls, and offer products to purchase.
If you aren't one for watching videos, I've written to-the-point documentation here on how to add products to Superwall. Please follow those steps and return back here when you're done.
Configure the Superwall SDK
When you created your app in Superwall, you might've already done this step. But, just in case you haven't, go ahead and get Superwall installed and configured:
If you need Superwall to interface with another third party service, such as RevenueCat, you can certainly do that! You'll use something we call a PurchaseController
, which is just a fancy way of saying "Hey Superwall, use this code for buying subscriptions instead of your own. Also, I want to manually set whether or not they are a paid user based off another service." Instructions for that can be found right here.
Testing a purchase in the simulator or device
Next, we're going to add a StoreKit Configuration file. I've got all that steps outlined right here. Come back once you've done that. In short, a StoreKit Configuration file allows you to test purchases quickly before they are live in the App Store.
StoreKit Configuration files are an indispensable tool. They make it quick to test things when you're not yet launched or you're creating new products to test out which haven't been approved by App Store review. Here, you've added (or automatically synced) the same products you added in App Store Connect. And, you've put those same ones on a Superwall paywall, so you're all set now.
Here comes the fun part — showing a paywall! Assuming you didn't edit the default Superwall campaign, you can add this code anywhere in your app (like in a button press) to show a paywall:
Superwall.shared.register(placement: "campaign_trigger") {
print("Unlock feature.")
}
swift
At this point, a paywall will appear with your products. Go ahead and purchase one, and just like that — you just made your first purchase!
Testing a purchase in TestFlight beta builds
Now, let's test your app on TestFlight. Here's a critical reminder — none of your subscriptions should be in the "Missing Metadata" phase here. Here's an example:

If they are in this state, they won't work in TestFlight or during app review. This is the most common problem new (and existing!) developers face. Your products must be in "Ready to Submit" or "Approved" state. If this is a brand new app that's launching, then the state we need is "Ready to Submit", and the blue banner at the top of the subscription hints at that. It's basically telling you that, for the app's first launch, you'll submit all your new subscriptions for review alongside your app.
So, again, to test in TestFlight, subscriptions must be in the "Ready to Submit" phase. To get them there before launch:
Make sure all localization fields are filled out.
All developer agreement forms are active and filled out.
Tax and banking info has been submitted and completed.
As part of this, you need a screenshot of the subscription. Remember how we tested out our subscriptions locally before? Simply run the simulator again, and press ⌘+S on your keyboard to save a screenshot of the subscription showing on a paywall. Then, upload that and you'll be set here:
Open the subscription that's in the "Missing Metadata" state.
Under Review Information, upload the screenshot:

Once you're products are in the "Ready to Submit" phase, you're ready to continue. Let's package up the app and send it to TestFlight.
Archiving a build
Archiving and uploading your build allows it to be available for testing via TestFlight, which is Apple's service for beta testing.
In Xcode, go to Product --> Archive:

Once it's archived, Xcode's Organizer will open up. Select the archive, and click on Distribute App:

Choose App Store Connect on the next screen, and then click Distribute:

Once it's done finished, you should get a modal letting you know it's uploaded to App Store Connect successfully:

Making a public test build via TestFlight
Now, back in App Store Connect, open up your app and go to the TestFlight tab. You should see your archive you just uploaded. Note that it may be in a "Processing" phase, and that's normal — usually it only takes around 5-10 minutes to complete. Once it's in "Ready to Submit", we can test it:

On the left-hand side, click on the plus button next to EXTERNAL TESTING. If you've already made a public testing group, you can skip this step. Otherwise, name the group and save it. You can also enable a public testing link on the resulting page if you want. Here, I've already made a group called "Public Testers":

On the left-hand side, under Builds, click on iOS.
Then, for your build that you uploaded, click the plus button and choose the public testing group you just made under GROUPS:

Fill out the release notes, and submit it for review:

At this point, your build will be in "Waiting for Review" status. If it passes review, congratulations! You can publicly test your app and perform purchases.
Launching your first app and products
If everything goes well in testing, you're ready to ship. At the top of App Store Connect, choose Distribution:

Filling out release data
Here, you'll need to fill in all of the metadata about the release. Things like:
App Store screenshots.
Keywords.
Product details, etc.
Take your time figuring out which keywords make sense, what to name your app, picking out a great subtitle, and more. All of that plays heavily into "ASO", which stands for "App Store Optimization" — or put simply, how well your app performs in the search rankings. You can also change most of this between releases, too. Try not to overthink things too hard here, there's no better motivation than shipping — and you can always improve things like screenshots later if you need to.
Sending a build and subscriptions to review
After all of the metadata is taken care of, under Build, choose the build you've been testing with (or perhaps another one, if you've made some fixes or changes and have uploaded another archived build). The build shows up as a result of uploading an archived build to App Store Connect, which we did earlier. This is what will go to App Review, and ultimately, release:

In the example above, I've already shipped an initial version of this app — so that's why we are seeing "Version 1.0.1", yours will read "Version 1.0". Once you have that all finished, you get to press the Add for Review button:

Follow the prompts, and you're all set! Your subscription products should also show here to add for review, but if they don't — you can open them up individually and submit them to app review. When Apple has your build and products, they'll start the review process. It'll either go live once approved, or according to whatever you've chosen under App Store Version Release on that same page:

Don't be discouraged if your first submission is rejected. That's fairly normal, and most fixes and tweaks are quite easy to make. In fact, I don't think I've ever had an app approved on the first try, so don't get discouraged.
And, you're live!
At this point, you're app will be shipped and off to the App Store! Getting the first one out the door is, by far, the hardest this process will ever be. Once you've done it a few times, you'll get the hang of it. So stick with it, and ask questions if you get stuck somewhere along the way.
If you've followed along here, you've got an app with Superwall in production. Now, you can take things to the next level and start running paywall experiments, price tests, and more. I hope this guide has useful, and if you ever need any help — we're always one ping away on X or email.