Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WatchKit Extension bundle identifiers

I am trying to build my app but it failed. I am shown the message below.

error: WatchKit Extension doesn't contain any WatchKit apps whose bundle identifiers match "com.domain.appname.watchkitapp". Verify that the value of WKAppBundleIdentifier in your WatchKit Extension's Info.plist matches the value of CFBundleIdentifier in your WatchKit App's Info.plist.

I have recently changed "com.domain.appname.watchkitapp" to "com.domain.differentappname.watchkitapp".

I cannot find where to change this.

like image 520
Tom Coomer Avatar asked May 12 '15 23:05

Tom Coomer


People also ask

What do you put in a bundle identifier?

To create a unique bundle identifier, you append the name of the application to the reversed domain, for example, com. cocoacasts. scribbles . Remember that you choose the bundle identifier.

What is a WatchKit extension?

Your WatchKit extension connects to controls and views in the storyboard using WKInterfaceObject subclasses such as WKInterfaceButton and WKInterfaceLabel . These interface objects act as proxies for your storyboard elements. Use the interface elements to configure the elements in code.

What is bundle name in Xcode?

Bundle name - is folder name, where your app (including executable file and all resources) will be stored (Cool Program.


2 Answers

You have to be careful when changing the bundle identifiers, and here's how they should be set (you need to change each identifier in the Info.plist for the iPhone app, for the Watchkit Extension and for the Watchkit App):

iPhone Application Info.plist:

Set any bundle identifier as you like (the "Bundle identifier" property).

Example:

Bundle identifier: com.fruitcompany.orange 

WatchKit App Info.plist

The bundle identifier here must be prefixed with the identifier of the iPhone application, like this(example):

Bundle identifier: com.fruitcompany.orange.watchkit 

You also need to change the WKCompanionAppBundleIdentifier which must match with the iPhone application bundle identifier, like this:

WKCompanionAppBundleIdentifier: com.fruitcompany.orange 

WatchKit Extension Info.plist:

The bundle identifier here must be prefixed with the identifier of the iPhone application, like this(example):

Bundle identifier: com.fruitcompany.orange.watchkit.extension 

You also need to set the WKAppBundleIdentifier under the NSExtension attribute.

WKAppBundleIdentifier

The WKAppBundleIdentifier identifier must match with the WatchKit app bundle identifier like this:

WKAppBundleIdentifier: com.fruitcompany.orange.watchkit 

Don't forget to check that your Bundle ID in project target is the same as in Info.plist!

like image 132
Dejan Skledar Avatar answered Sep 20 '22 11:09

Dejan Skledar


First, let me highlight the excellent answer on this page by @DejanSkledar, as all of the locations noted in the answer are important.

That said, the precise setup in that answer was not sufficient for me. I'd like to supplement this answer and point out that since watchkit 2, there appears to be a hierarchy required as you work from the app, to the watch app, and then finally to the app extension in terms of the bundle id's.

Here are the settings in each of their corresponding info.plist files that worked for me after I found edwardmp's answer on a related issue.

iPhone App's Bundle Id: com.domain.yourapp

Watch App's Bundle Id: com.domain.yourapp.watchkit

Watchkit's Extension Bundle Id: com.domain.yourapp.watchkit.extension

As you can see, an iPhone app has a watchkit app, which itself happens to have a watchkit extension, and each of these levels must be reflected in each of their respective bundle id's.

Completing the relationships, the watch app must point to the iPhone app to which it belongs using it's (WKCompanionAppBundleIdentifier), and the watch extension must point to the watch app to which it belongs (WKAppBundleIdentifier.)

Watch App's WKCompanionAppBundleIdentifier: com.domain.yourapp

Watch App's Extension WKAppBundleIdentifier: com.domain.yourapp.watchkit

Hopefully this saves someone some time, as I had to struggle on this for a few hours :(

like image 28
AdamJonR Avatar answered Sep 18 '22 11:09

AdamJonR