Documentation Archive Developer
Search

Prepare for Mac App Store Submission

Most of your time is spent on coding tasks, but to develop for the Mac App Store, you need to perform a number of administrative tasks, using Xcode and other tools. You’ll do this throughout the lifetime of your app. The Mac App Store is a curated store and restricts which apps may be sold. Apple does this to provide the best experience possible for users. For example, apps that are sold on the Mac App Store must not crash or exhibit other major bugs.

image: ../Art/administration_tasks.png

Apple provides the tools you need to develop, test, and submit your app to the Mac App Store. All apps submitted to the store need to be code signed. If you use certain technologies—such as iCloud storage or In-App Purchase—there are additional configuration and administrative tasks you need to perform. There are tasks you perform to manage a team of developers as well. You also need to provide information about your app that the Mac App Store displays to customers, and you need to upload screenshots. Then you submit the app to Apple for approval. After the app is approved, you set the date when the app should appear for sale in the Mac App Store. Finally, you use Apple’s tools to monitor the sales of the app, customer reviews, and crash reports. You repeat the entire process again to submit updates to your app.

Enroll in the Mac Developer Program

To develop for the Mac App Store, you first need to join the Mac Developer Program. After you enroll in the program, you have access to all the resources and tools that you need to manage your account and begin using certain technologies.

You become the primary contact for Apple, sign legal agreements, create your assets, and market your app. You’ll be asked if you are an individual developer or a company. If you are a company, you may add others to your team and grant some of them privileges to manage your account as well. If you use certain technologies—such as iCloud storage—individuals who need to run the app during development need to be added to your team to do so.

You administer your account with these Mac Developer Program web tools:

  • Member Center. The tool to manage developer program accounts. Member Center is also a gateway to other resources and tools, including iTunes Connect.

  • iTunes Connect. The marketing and business tool used to check the status of your contracts, set up tax and banking information, obtain sales and finance reports, and manage metadata about the app.

You can perform some of the Member Center administrative tasks using Xcode and return as needed by going to Member Center at http://developer.apple.com/membercenter. These administrative tasks are necessary for security to ensure that your app is not distributed prematurely.

image: ../Art/1_membercenter.png

Create Your Project and Configure It for the Mac App Store

When you create an Xcode project from a template, some of the Mac App Store configuration is completed for you. Xcode prompts you to enter the product name and company identifier. The bundle ID, which is used throughout the system to identify your app, is derived from these two properties. For example, in the TrackMix project, the product name is TrackMix and the default company identifier is com.MyCompany. Therefore, the default bundle ID is com.myCompany.TrackMix. You just need to replace the company name in the Bundle Identifier field with your name.

Xcode uses reasonable defaults for other values as well. Carefully consider the template you use to create an app and the settings used to configure the project; starting with the right template helps speed the development process. If you want to change these settings later, or use iCloud storage, you’ll find most of these settings on the target’s Summary pane in Xcode.

All apps submitted to the Mac App Store need to have an app icon (it appears in the Mac OS X Application Target section) and need to enable app sandboxing (in the Entitlements section). Entitlements give your app permission to perform certain functions. A sandbox is a set of fine-grained controls that limit an app’s access to files, preferences, network resources, hardware, and so on.

image: ../Art/2_configureapp.png

Provision Your Mac for iCloud and Other Technologies

If you use certain technologies, you need to perform additional administrative tasks and configure your app accordingly. Here are some technologies that require provisioning your Mac for development:

  • Game Center. A social gaming service allows players to share information about the games they are playing and to join other players in multiplayer matches.

  • iCloud. An iCloud storage and cloud computing service allows you to share the user’s data among multiple instances of your app running on different iOS and OS X devices.

  • In-App Purchase. Embedding a store directly into your app allows you to connect to the Mac App Store and securely process payments from the user.

  • Push notifications. This service allows an app not running in the foreground to notify the user that it has information for the user.

Fortunately, Xcode creates some team assets—the Mac Team Provisioning Profile and the Xcode Wildcard App ID—to simplify the provisioning process. For example, using the Mac Team Provisioning Profile, your team can begin using iCloud storage immediately. Some technologies need to be enabled using Certificates, Identifiers & Profiles within Member Center in order for you to use them. If you use iCloud storage, you also need to configure iCloud under Entitlements in the target’s Summary pane in Xcode. If you don’t use any of these technologies, you can can skip this step.

Read App Distribution Guide to learn more about provisioning systems for development.

Configure App Data in iTunes Connect

When an app is sold on the Mac App Store, the store displays a lot of information about the app, including its name, a description, an icon, screenshots, and contact information for your company. To provide that information, you log in to iTunes Connect, create a record for the app, and fill in some forms. The record in iTunes Connect includes a field for a bundle ID; the value you place in this field must exactly match the bundle ID for the app. The app name and version need to match the Xcode project configuration as well. The artwork that the Mac App Store needs to present your app to customers needs to be uploaded to pass validation tests.

image: ../Art/13_itunesconnectrecord.png

Normally, you create your iTunes Connect app record late in the development process because there’s a time limit from when you create the record to when you must submit your app. Some Apple technologies, including Game Center and In-App Purchase, require that an iTunes Connect record to be created earlier. For example, with In-App Purchase, you need to create the app record so that you can add the details of the items you want to sell. This content needs to be created before the development process is complete so that you can use it to test the code you added to implement In-App Purchase.

Code Sign Your App

Your app needs to be signed before it is submitted to the Mac App Store. By signing your app, you certify that the app is released by you. Because the app is signed with a private key that only you possess, Mac OS X can distinguish between legitimate and modified copies of your app.

There are many different types of signing certificates, used for specific purposes, that Xcode creates for you. You sign the entire Xcode project using a Mac Submission certificate, and you sign the installer package using a Mac Installer certificate. (You’ll create an installer package as part of the submission process.) If you use certain technologies—for example, iCloud storage and push notifications—you need a Mac Development certificate and provisioning profile too. If you want to distribute your app outside of the Mac App Store, you sign it using a Developer ID certificate. Mac Development certificates are owned by individuals and the others are shared by the team.

The first time you refresh your provisioning profiles in Xcode, it offers to request different types of signing certificates for you. To start this process, open the Organizer window, select Devices, select Provisioning Profiles in the Library section, and click Refresh. Log in with your Mac Developer Program username and password. If you are an individual developer, Xcode creates development and distribution certificates. If you don’t have permission to submit your app to the Mac App Store, Xcode only creates a Mac Development certificate for your.

image: ../Art/4_teamcertificates.png

When a dialog appears at the end of the refresh process asking whether you want to save your developer profile, click Export. Since the private keys for these certificates are stored on your system, you need to save them as a backup or export them in order to move them to another Mac. Export your certificates even if you don’t use all of them.

You sign your app by setting the Code Signing Identity build setting for your project to one of these certificates. When you enable entitlements in the target’s Summary pane in Xcode, this build setting defaults to your Mac Development certificate. Before submitting to the Mac App Store, set this build setting to your Mac Submission certificate. You select the Mac Installer certificate later, when you actually submit an archive of your app in the Archives organizer.

image: ../Art/5_codesigningmenu.png

Submit to the Mac App Store

Submitting your app to the Mac App Store is a multistep process involving several tools.

  1. First, log in to iTunes Connect and change the state of your app record to “Waiting for Upload” or later.

  2. If you don’t already have a Mac Submission certificate, refresh your provisioning profiles to create it.

  3. Using Xcode, create an archive, validate it, and submit it to the Mac App Store.

  4. When your app is approved, use iTunes Connect to set the date when the app will be available to customers.

You use the Archives organizer in Xcode to validate and submit your app. First, you create an archive and sign it with the Mac Submission certificate. Then you validate the archive, which performs an automated check against the app in the archive as well as the information you provided in your iTunes Connect record. If problems are found during validation, you need to fix them before continuing.

Before you submit the app, you should read App Store Review Guidelines for Mac Apps to avoid problems. When you click the Distribute button and select “Submit to the Mac App Store,” Xcode transmits the archive to Apple, where it is examined to determine whether it conforms to the guidelines. If the app is rejected, correct the problems that were brought up during app approval and resubmit it.

image: ../Art/submit_to_macappstore.png

Use iTunes Connect to set a date when the app will be released to the Mac App Store. For example, you can choose a date that immediately releases the app to the Mac App Store after it is approved, or you can set a later date for sometime in the future. Using a later release date allows you to arrange other marketing activities around the launch of the app.

Respond to User Issues

You can’t just submit the app to the Mac App Store and forget about it. You should expect to manage the app records and maintain the app throughout its lifetime. After your app is available on the Mac App Store, you need to monitor it, respond to user issues, and submit updates as needed.

You want to pay attention to how users perceive the app. Customer ratings and reviews on the Mac App Store can have a big effect on the success of the app; if users run into problems, work quickly to determine the bug and submit a new version of the app through the approval process.

iTunes Connect provides data to help you determine how successful the app is, including sales and financial reports, customer reviews, and crash logs submitted to Apple by users. Crash logs are particularly important, because they represent significant problems users are seeing in the app. You should make investigating these reports a high priority.

All crash logs contain stack traces for each thread at the time of termination. To view a crash log, you need to open it from the Xcode Organizer window. As long as your Mac has the archive corresponding to the version of the app that generated the crash log, Xcode automatically resolves any addresses in the crash log with the actual classes and functions in the app.