Submitting Your WatchKit App
(Originally published at FiveMinuteWatchKit.com, before the release of watchOS 2)
Now that submissions are open for WatchKit extensions, many developers are running into issues and bugs that didn’t present themselves when working in the simulator. This post is an attempt to aggregate tips and solutions to common problems. Of course, be sure to check out Apple’s official guidelines.
Many of these tips are gleaned from posts in the dev forums and my own experience submitting a WatchKit app. I’ll update the list as time goes on. Have something to add? Give me a shout.
- The section for uploading your Apple Watch screenshots and app icon will only appear once you have uploaded your first WatchKit build.
- Ensure your screenshots are 312x390px.
- Screenshots should depict only your app’s interface — and use the entire space to do so.
- Do not frame your screenshots in an Apple Watch “frame” or image.
- Do not refer to your Apple Watch app in your iPhone app screenshots.
- Do not add additional text/promo material to your Watch screenshots.
- Despite the earlier requirement for screenshots to be taken only on device, you can now submit screenshots from the simulator. To do so, simply hit ⌘ + S or File > Save Screen Shot. The resulting images will be saved to your desktop, by default. Thanks to reader Jeff Rames for prompting this tip.
- Ensure your app icon does not include an alpha channel. This will result in an automatic rejection during validation and produces a cryptic error message for some.
- If you encounter the error file names must match pattern “*
@, ensure your Watch app icon is contained in an asset catalog included with the Watch app target. You cannot share an asset catalog between your iPhone app and your Watch app. x.png”
- Make sure your icon does not contain a black background. This will cause it to blend into the background on the phone and has been a source of rejections for some.
- While your iPhone app may support versions of iOS lower than 8.2, your WatchKit extension’s deployment target must be 8.2 or higher.
- If you employ a framework in your WatchKit extension, your iPhone app’s deployment target must be 8.0 or higher. This is due to your WatchKit extension being bundled with your host app.
- If your build process happens outside of Xcode, or you have a custom build script, be sure your final zipped IPA follows the conventions described in this dev forums post.
Version & Build Numbers, Bundle Identifiers
- Ensure the build and version number for your iPhone app, WatchKit extension, and Watch app are exactly the same.
- Your WatchKit extension’s bundle identifier should use the bundle identifier for your iPhone app as a prefix. For example: if your iPhone app’s bundle identifier is com.company.AppName, your WatchKit extension’s bundle identifier should be something along the lines of com.company.AppName.watchkitextension.
- David Olesch, iOS Lead at Jackrabbit Mobile, adds: “also make sure your app target and watch app target have the same display name. I got rejected because I forgot the other.”
- An Tran adds: Ensure your WatchKit app does not include “WatchKit” or “Apple Watch” in the name.
- Remember that your WatchKit extension requires its own app ID and provisioning profile.
- From the ever-awesome Nick Arnott: If your WatchKit app fails to code sign with Xcode 6.3, you now need a profile for the WatchKit app in addition to the WatchKit extension.
App Store Description
- If you reference the Apple Watch in your App Store description, be sure to follow Apple’s guidelines for capitalization and such. A few developers have faced rejections due to not following the guidelines.
- As a quick reference, Apple Watch should always be written in English with an uppercase A and an uppercase W. It should not be UPPERCASE, lowercase, or use the Apple logo in place of the word “Apple”.
- Ensure, as much as possible, that your app feels responsive in the simulator. If it feels at all sluggish in the simulator, it will be doubly so on device. At least one developer has been rejected for this.
- If you are making use of openParentApplication:reply: I strongly suggest you follow the advice given in this post. In my testing with an actual Watch, openParentApplication:reply: was extremely unreliable without using the tips in that post. Another Watch labs participant has confirmed that to be the case for them as well. At least one developer has had their app rejected due to openParentApplication:reply: calls being killed on device before completion.
- If you use Swift in your iPhone app, be sure to set the “Embedded Content Contains Swift” build setting to NO for your frameworks and extensions and YES for your iPhone app target.
- Duplicating the functionality of a clock face, or displaying the time in a way that could be confused with one, will result in a rejection. Judging by the posts in the developer forums, this rule was supposed to appear in the HIG but was missed. It will be added soon.
- Looking at this post in the dev forums, it appears your Watch app cannot exceed 50mb in size.