To The App Store
Sep 01, 2020. Aug 12, 2020. App Store server notifications include refund notifications for all types of in‑app purchases. You can use this information to take action in response — for example, adjusting a user’s currency balance in a game, or restricting access to content unlocked by an in‑app purchase. If you choose to take action, inform the user of any changes.
Offer customers extra content and features using in‑app purchases — including premium content, digital goods, and subscriptions — directly within your app. You can even promote and offer in‑app purchases directly on the App Store.
Overview
In‑app purchases can be used to sell a variety of content, including subscriptions, new features, and services. There are four types of in‑app purchases. Users can make in‑app purchases on iOS, iPadOS, macOS, watchOS, and tvOS.
Consumable
Users can purchase different types of consumables, such as lives or gems in a game, to further their progress through an app. Consumable in‑app purchases are used once, are depleted, and can be purchased again.
Non‑Consumable
Users can purchase non‑consumable, premium features within an app. Non‑consumables are purchased once and do not expire, such as additional filters in a photo app. Apple can host content associated with your non‑consumable in‑app purchases.
Auto‑Renewable Subscriptions
Users can purchase access to services or periodically updated content, such as monthly access to cloud storage or a weekly subscription to a magazine. Users are charged on a recurring basis until they decide to cancel.
Non‑Renewing Subscriptions
Users can purchase access to services or content for a limited duration, such as a season pass to streaming content. This type of subscription does not renew automatically, so users need to renew each time.
Videos New
Watch WWDC session videos to learn the latest on in‑app purchases, including updates to refund handling, App Store server notifications, StoreKit, subscriptions, and more.
watchOS Apps
Now you can offer in‑app purchases directly in your watchOS apps, so users can access premium content, all right from their wrist. Get started with Xcode 11.4 and watchOS 6.2.
Freemium Business Model
In‑app purchases are often used with the freemium business model. Learn how developers across a range of categories approach using this model in their apps.
Preparing
Before offering in‑app purchases, you’ll need to sign the Paid Applications Agreement and set up your banking and tax information.
App Store Connect Help: Agreements, tax, and banking overviewSet Up Xcode Configurations
Use Xcode to enable the in‑app purchase service for your app.
Xcode Help: Add a capability to a targetCreate Your In‑App Purchases in App Store Connect
Configure your in‑app purchases in App Store Connect, and include details such as name, pricing, and description that highlights the features and functionality of your in‑app purchase. You can also create and maintain your in‑app purchases using XML.
App Store Connect Help: Create an in‑app purchaseDesigning and Building
Design Your In‑App Purchase Experience
The user interface for your in‑app purchase should fit well with the rest of your app and effectively showcase your products.
Implement Your In‑App Purchases
Apple Store Games
Use the StoreKit Framework to embed the in‑app purchase into your app and securely process purchases of content and services. Make sure to complete the steps in the implementation checklist.
Validate Receipts
Receipts provide a valuable record of the sale. Consider using receipt validation code to protect your content and prevent unauthorized purchases.
App Store ReceiptsApp Store Server NotificationsValidating Receipts with the App StoreManage Refunds
App Store server notifications include refund notifications for all types of in‑app purchases. You can use this information to take action in response — for example, adjusting a user’s currency balance in a game, or restricting access to content unlocked by an in‑app purchase. If you choose to take action, inform the user of any changes and let them know if there’s anything they need to do in response.
If you offer auto-renewable subscriptions, use App Store server notifications with receipt validation to understand a subscriber’s status. To learn more, see Using Receipts to Retain Subscribers.
Enabling Server-to-Server NotificationsHandling Refund NotificationsTesting
Test Transactions
Use the Apple sandbox testing environment to test your in‑app purchases without incurring charges.
App Store Connect Help: Create a Sandbox Tester AccountTesting In‑App Purchase TransactionsTest the Full User Experience
Use TestFlight to gain valuable feedback on your app and in‑app purchases from a wider audience before releasing your app on the App Store. Invite users on your team in App Store Connect, and up to 10,000 external testers using a public link or their email address. All in‑app purchases are free during the beta testing period, and will not carry over when the testing period is over.
Learn more about TestFlightPublishing
Submit Your In‑App Purchases for Review
Once you’ve completed testing, verify that you’ve followed the App Review Guidelines and implementation checklist, then submit using App Store Connect.
App Store Review GuidelinesApp Store Connect Help: Submit an in‑app purchasePromote Your In‑App Purchases on the App Store
You can choose to promote up to 20 in‑app purchases at a time on your product page, increasing discoverability for content previously only found inside your app. Users can browse in‑app purchases directly on the App Store and start a purchase even before downloading your app.
Promoting Your In‑App PurchasesDistribute Promo Codes
Give press and influencers early access to your app’s in‑app purchases with promo codes from App Store Connect. You can give away up to 100 promo codes for each in‑app purchase item, up to a maximum of 1,000 codes per app.
App Store Connect Help: Promo codes overviewTerritory-specific Pricing
Apps with auto-renewable subscriptions can offer territory-specific prices. You can choose from 200 price points across all available currencies and price tiers to offer appropriate pricing for each location.
Customer Payment Methods
The App Store handles payment processing, so it’s easy to offer your content to users around the world. Users pay for your apps and in‑app purchases with credit or debit cards, carrier billing, digital wallets, or App Store and iTunes gift cards, depending on regional availability.
Learn more
To publish an app to the App Store,an app developer must first submit it – along with screenshots, adescription, icons, and other information – to Apple for review. Afterapproving the app, Apple places it on the App Store, where users canpurchase it and install it directly from their iOS devices.
This guide describes the steps to follow to prepare an app for the AppStore and send it to Apple for review. In particular, it describes:
- Following the App Store Review Guidelines
- Setting up an App ID and entitlements
- Providing an App Store icon and app icons
- Setting up an App Store provisioning profile
- Updating the Release build configuration
- Configuring your app in iTunes Connect
- Building your app and submitting it to Apple
Important
Apple has indicated thatstarting in March 2019, all apps and updates submitted to the App Storemust have been built with the iOS 12.1 SDK or later, included in Xcode 10.1 or later.Apps should also support the iPhone XS and 12.9' iPad Pro screen sizes.
App Store guidelines
Before submitting an app for publication in the App Store, make sure thatit meets the standards defined by Apple's App Store ReviewGuidelines.When you submit an app to the App Store, Apple reviews it to make surethat it meets these requirements. If it does not, Apple will reject it –and you will need to address the cited problems and resubmit.Therefore, it is a good idea to become familiar the guidelines as earlyas possible in the development process.
A couple of things to watch out for when submitting an app:
- Make sure the app’s description matches its functionality.
- Test that the app doesn’t crash under normal usage. This includes usage on every iOS device it supports.
Also take a look at App Store-related resourcesthat Apple provides.
Set up an App ID and entitlements
Every iOS app has a unique App ID, which has an associated set ofapplication services called entitlements. Entitlements allow apps to dovarious things such as receive push notification, access iOS featuressuch as HealthKit, and more.
To create an App ID and select any needed entitlements, visit theApple Developer Portal and followthese steps:
- Login to the Apple Developer Portal. If you don't already have an Apple ID, create an Apple ID first.
- Go to the Certificates, IDs & Profiles section, and then to the Identifiers section.
- Click the + button next to the Identifiers heading at the top of the page.
- Select App IDs and click Continue.
- Select App and then click Continue.
- Enter a Description and Bundle ID for the new application, and select any Capabilities that will be required by your Xamarin.iOS application. App Services are further described in the Working with capabilities in Xamarin.iOS guide. When you finish making your selections, click Continue.
- Click the Register button to complete the process for creating the new App ID.
In addition to selecting and configuring the required applicationservices when defining your App ID, you must configure the App ID andentitlements in your Xamarin.iOS project by editing the Info.plistand Entitlements.plist files. For more information, take a look atthe Working with Entitlements inXamarin.iOS guide, whichdescribes how to create an Entitlements.plist file and the meaning ofthe various entitlement settings it contains.
Include an App Store icon
When you submit an app to Apple, be sure that it includes an assetcatalog that contains an App Store icon. To learn how to do this, take alook at the App Store icons inXamarin.iOS guide.
Set the apps icons and launch screens
For Apple to make an iOS app available on the App Store, it must have proper icons and launch screens for all of the iOS devices on which it can run. For more information about setting up app icons and launch screens, read the following guides:
Create and install an App Store provisioning profile
iOS uses provisioning profiles to control how a particular application build can be deployed. These are files that contain information about the certificate used to sign an app, the App ID, and where the app can be installed. For development and ad hoc distribution, the provisioning profile also includes the list of allowed devices to which you can deploy the app. However, for App Store distribution, only certificate and App ID information are included since the only mechanism for public distribution is the App Store.
To create and install an App Store provisioning profile, follow these steps:
- Login to the Apple Developer Portal.
- Go to the Certificates, IDs & Profiles section, and then to the Profiles section.
- Click the + button, select iOS App Development and App Store, and click Continue.
- Select your app's App ID from the list and click Continue.
- Select a signing certificate and click Continue.
- Select devices to include in this profile and click Continue.
- Enter a Provisioning Profile Name and click Generate to generate the profile.
- Use Xamarin's Apple Account Management tools to download the newly-created provisioning profile to your Mac. If you're on a Mac, you can also download the provisioning profile directly from the Apple Developer Portal and double-click on it to install.
For detailed instructions, see the Creating a distribution profile and Selecting a distribution profile in a Xamarin.iOS project.
Update the Release build configuration
New Xamarin.iOS projects automatically set up Debug and Releasebuild configurations. To properly configure the Release build, follow these steps:
From the Solution Pad, open Info.plist file located inside the iOS project.
Make sure you're in Application view. This can be set by clicking on the option in the bottom navigation bar.
Select Manual Provisioning as the Signing option. Save and close the file.
Right-click on the Project Name in the Solution Pad, select Options, and navigate to the iOS Build tab.
Set Configuration to Release and Platform to iPhone.
To build with a specific iOS SDK, select it from the SDK version list. Otherwise, leave this value at Default.
Linking reduces the overall size of your application by stripping out unused code.
- In most cases, Linker Behavior should be set to the default value of Link Framework SDKs only.
- Using the Don't Link option can cause Apple to reject the app due to the presence of non-public iOS APIs in Xamarin.iOS that would be linked out with the Link Framework SDKs only option
- Link All should be used with care as it will strip code from all assemblies in the project, including 3rd party libraries. It can strip out code that the 3rd party library may only use via reflection that the linker cannot detect, as it does static code analysis to determine what library code is being used. Use Link All with care as you may have to manually preserve some classes and/or methods to avoid runtime failures due to missing code.
- For more information, refer to the Linking Xamarin.iOS apps guide.
For iOS 11, select one of the device architectures that supports ARM64. For more information on building for 64-bit iOS devices, please see the Enabling 64-Bit Builds of Xamarin.iOS Apps section of the 32/64-bit platform considerations documentation.
You may wish to use the LLVM compiler to build smaller and faster code. However, this option increases compile times.
Check Optimize PNG images to further decrease your application's size.
Debugging should not be enabled, as it will make the build unnecessarily large.
Based on your application's needs, you may also wish to adjust the type of Garbage Collection being used and setup for Internationalization.
After setting the options as described above, your build settings shouldlook similar to this:
Also take a look at the iOS build mechanics guide, which further describes build settings.
Navigate to the iOS Bundle Signing tab. If the options here are not editable, ensure that Manual Provisioning is selected in the Info.plist file.
Make sure that Configuration is set to Release and Platform is set to iPhone.
Set Signing Identity to Distribution (Automatic).
For Provisioning Profile, select the App Store provisioning profile created above.
Your project's bundle signing options should now look similar to this:
Click OK to save changes to the project properties.
Make sure that Visual Studio 2019 has been paired to a Mac build host. Works for mac.
Right-click on the Project Name in the Solution Explorer, select Properties.
Navigate to the iOS Build tab and set Configuration to Release and Platform to iPhone.
To build with a specific iOS SDK, select it from the SDK Version list. Otherwise, leave this value at Default.
Linking reduces the overall size of your application by stripping out unused code.
- In most cases, Linker Behavior should be set to the default value of Link Framework SDKs only.
- Using the Don't Link option can cause Apple to reject the app due to the presence of non-public iOS APIs in Xamarin.iOS that would be linked out with the Link Framework SDKs only option
- Link All should be used with care as it will strip code from all assemblies in the project, including 3rd party libraries. It can strip out code that the 3rd party library may only use via reflection that the linker cannot detect, as it does static code analysis to determine what library code is being used. Use Link All with care as you may have to manually preserve some classes and/or methods to avoid runtime failures due to missing code.
- For more information, refer to the Linking Xamarin.iOS apps guide.
For iOS 11, select one of the device architectures that supports ARM64. For more information on building for 64-bit iOS devices, please see the Enabling 64-Bit Builds of Xamarin.iOS Apps section of the 32/64-bit platform considerations documentation.
You may wish to use the LLVM compiler to build smaller and faster code. However, this option increases compile times.
Check Optimize PNG images to further decrease your application's size.
Debugging should not be enabled, as it will make the build unnecessarily large.
Based on your application's needs, you may also wish to adjust the type of Garbage Collection being used and setup for Internationalization.
After setting the options described above, your build settings shouldlook similar to this:
Also take a look at the iOS build mechanics guide, which further describes build settings.
Navigate to the iOS Bundle Signing tab. Make sure that Configuration is set to Release, Platform is set to iPhone, and that Manual Provisioning is selected.
Set Signing Identity to Distribution (Automatic).
For Provisioning Profile, select the App Store provisioning profile created above.
Your project's bundle signing options should now look similar to this:
Save the build configuration and close it.
Make sure that Visual Studio 2017 has been paired to a Mac build host.
Right-click on the Project Name in the Solution Explorer, select Properties.
Navigate to the iOS Build tab and set Configuration to Release and Platform to iPhone.
To build with a specific iOS SDK, select it from the SDK Version list. Otherwise, leave this value at Default.
Linking reduces the overall size of your application by stripping out unused code.
- In most cases, Linker Behavior should be set to the default value of Link Framework SDKs only.
- Using the Don't Link option can cause Apple to reject the app due to the presence of non-public iOS APIs in Xamarin.iOS that would be linked out with the Link Framework SDKs only option
- Link All should be used with care as it will strip code from all assemblies in the project, including 3rd party libraries. It can strip out code that the 3rd party library may only use via reflection that the linker cannot detect, as it does static code analysis to determine what library code is being used. Use Link All with care as you may have to manually preserve some classes and/or methods, etc., to avoid runtime failures due to missing code.
- For more information, refer to the Linking Xamarin.iOS apps guide.
For iOS 11, select one of the device architectures that supports ARM64. For more information on building for 64-bit iOS devices, please see the Enabling 64-Bit Builds of Xamarin.iOS Apps section of the 32/64-bit platform considerations documentation.
You may wish to use the LLVM compiler to build smaller and faster code. However, this option increases compile times.
Check Optimize PNG images to further decrease your application's size.
Debugging should not be enabled, as it will make the build unnecessarily large.
Based on your application's needs, you may also wish to adjust the type of Garbage Collection being used and set up for Internationalization.
After setting the options described above, your build settings shouldlook similar to this:
Also take a look at the iOS build mechanics guide, which further describes build settings.
Navigate to the iOS Bundle Signing tab. Make sure that Configuration is set to Release, Platform is set to iPhone, and that Manual Provisioning is selected.
Set Signing Identity to Distribution (Automatic).
For Provisioning Profile, select the App Store provisioning profile created above.
Your project's bundle signing options should now look similar to this:
Navigate to the iOS IPA Options tab.
Make sure that Configuration is set to Release and Platform is set to iPhone.
Check the Build iTunes Package Archive (IPA) checkbox. This setting will cause each Release build (since that is the selected configuration) to generate an .ipa file. This file can be submitted to Apple for release on the App Store.
Note
iTunes Metadata and iTunesArtwork are not necessary for AppStore releases. For more information, take a look atThe iTunesMetadata.plist file in Xamarin.iOS appsand iTunes Artwork.
To specify an .ipa filename that differs from the Xamarin.iOS project name, enter it in the Package Name field.
Save the build configuration and close it.
Configure your app in iTunes Connect
iTunes Connect is a suite of web-based tools for managing your iOS applications on the App Store. Your Xamarin.iOS application must be properly configured in iTunes Connect before it can be submitted to Apple for review and released on the App Store.
To learn how to do this, read the Configuring an app in iTunes Connect guide.
Build and submit your app
With your build settings properly configured and iTunes Connect awaiting your submission, you can now build your app and submit it to Apple.
In Visual Studio for Mac, select the Release build configuration and a device (not a simulator) for which to build.
From the Build menu, select Archive for Publishing.
Once the archive has been created, the Archives view will be displayed. Click Sign and Distribute.. to open the publishing wizard.
Note
By default the Archives view only shows archives for the opensolution. To see all solutions that have archives, check the Show allarchives checkbox. It is a good idea to keep old archives so that thedebug information they include can be used to symbolicate crash reportsif necessary.
Select the App Store distribution channel. Click Next.
Select Upload as the destination. Click Next.
In the Provisioning profile window, select your signing identity, app, and provisioning profile. Click Next.
In the App Store Connect information window, select an Apple ID username from the menu and enter an app-specific password. Click Next.
Verify the details of your package and click Publish. After selecting a location to save the .ipa file, the wizard will upload your app to App Store Connect.
Note
Apple may reject apps with the iTunesMetadata.plist included in the.ipa file, resulting in an error such as the following:
ERROR: ERROR ITMS-90047: 'Disallowed paths ( 'iTunesMetadata.plist' ) found at: Payload/iPhoneApp1.app'
For a workaround to this error, take a look at this post in the Xamarin Forums.
Note
Publishing to the App Store is supported in Visual Studio 2019 version 16.3 and higher.
Make sure that Visual Studio 2019 is paired to a Mac build host.
Select Release from the Solution Configurations dropdown, and iPhone from the Solution Platforms dropdown.
From the Build menu, select Archive... This will open the Archive Manager and begin creating an archive.
Once the archive has been created, click Distribute.. to open the publishing wizard.
Select the App Store distribution channel.
Select your signing identity and provisioning profile. Click Upload to Store.
Enter your Apple ID and an app-specific password. Click OK to begin uploading your app to App Store Connect.
Note
Visual Studio 2017 does not support the full publishing workflow found in Visual Studio for Mac and Visual Studio 2019.
The steps below are for Xcode 10.
You can still follow the steps below to build an .IPA file, but to deploy to the App Store using Xcode 11 (which is required for iOS 13 support) you should use Visual Studio for Mac. Best free mac apps reddit.
Make sure that Visual Studio 2017 has been paired to a Mac build host.
Select Release from the Visual Studio 2017 Solution Configurations dropdown, and iPhone from the Solution Platforms dropdown.
Build the project. This creates an .ipa file.
Note
The Update the Release build configurationsection of this doc configured the app's build settings to create an.ipa file for each Release build.
To find the .ipa file on the Windows machine, right-click on the Xamarin.iOS project name in the Visual Studio 2019 or Visual Studio 2017 Solution Explorer and choose Open Folder in File Explorer. Then, in the just-opened Windows File Explorer, navigate to the bin/iPhone/Release subdirectory. Unless you have customized the .ipa file output location, it should be in this directory.
To instead view the .ipa file on the Mac build host, right-click the Xamarin.iOS project name in the Visual Studio 2019 or Visual Studio 2017 Solution Explorer (on Windows) and select Show IPA File on Build Server. This will open a Finder window on the Mac build host with the .ipa file selected.
Tip
The following steps are only valid if you're using Xcode 10, and building for iOS 12 and earlier.
To deploy to the App Store using Xcode 11 (for iOS 13), you should use Visual Studio for Mac to build and upload your app. Application Loader will not be available for Xcode 11.
On the Mac build host, open Application Loader. In Xcode, select Xcode > Open Developer Tool > Application Loader.
Note
For more information about the tool, take a look at Apple's docs about Application Loader.
Log in to Application Loader (note that you must create an app-specific password for your Apple ID).
Select Deliver Your App and click the Choose button:
Select the .ipa file created above and click OK.
The Application Loader will validate the file:
Click the Next button and the application will be validated against the App Store:
Click the Send button to send the application to Apple for review.
The Application Loader will inform you when the file has been successfully uploaded.
Note
Apple may reject apps with the iTunesMetadata.plist included in the.ipa file, resulting in an error such as the following:
ERROR: ERROR ITMS-90047: 'Disallowed paths ( 'iTunesMetadata.plist' ) found at: Payload/iPhoneApp1.app'
For a workaround to this error, take a look at this post in the Xamarin Forums.
iTunes Connect status
To see the status of your app submission, log in to iTunes Connect andselect your app. The initial status should be Waiting For Review,though it may temporarily read Upload Received while it is being processed.
Tips and tricks
Customize the .ipa location
An MSBuild property, IpaPackageDir
, makes it possible to customize the .ipa file output location. If IpaPackageDir
is set to a custom location, the .ipa file will be placed in that location instead of the default timestamped subdirectory. This can be useful when creating automated builds that rely on a specific directory path to work correctly, such as those used for Continuous Integration (CI) builds.
There are several possible ways to use the new property. For example, to output the .ipa file to the old default directory (as in Xamarin.iOS 9.6 and lower), you can set the IpaPackageDir
property to $(OutputPath)
using one of the following approaches. Both approaches are compatible with all Unified API Xamarin.iOS builds, including IDE builds as well as command-line builds that use msbuild or mdtool:
The first option is to set the
IpaPackageDir
property within a<PropertyGroup>
element in an MSBuild file. For example, you could add the following<PropertyGroup>
to the bottom of the iOS app project .csproj file (just before the closing</Project>
tag):A better approach is to add a
<IpaPackageDir>
element to the bottom of the existing<PropertyGroup>
that corresponds to the configuration used to build the .ipa file. This is better because it will prepare the project for future compatibility with a planned setting on the iOS IPA Options project properties page. If you currently use theRelease|iPhone
configuration to build the .ipa file, the complete updated property group might look similar to the following:
An alternate technique for msbuild command-line builds is to add a /p:
command line argument to set the IpaPackageDir
property. In this case note that msbuild does not expand $()
expressions passed in on the command line, so it is not possible to use the $(OutputPath)
syntax. You must instead provide a full path name.
How To Connect To The App Store
Or the following on Mac:
With your distribution build created and archived, you are now ready to submit your application to iTunes Connect.
How To Get The App Store On Kindle
Summary
This article described how to configure, build, and submit an iOS app forrelease on the App Store.