WatchKit 扩展包标识符

WatchKit Extension bundle identifiers

我正在尝试构建我的应用程序,但失败了。我看到了下面的消息。

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.

我最近将 "com.domain.appname.watchkitapp" 更改为 "com.domain.differentappname.watchkitapp"

我找不到在哪里更改它。

因此,如果您只想 运行 在测试设备上进行更改,则不必进行任何更改。但是您确实需要再请求两个配置文件才能测试手表应用程序。这两个额外的标识符可以从扩展目标和手表应用目标中获取。当您想将手表应用程序上传到 App Store

时,这也是您需要做的事情

更改包标识符时必须小心,下面是它们的设置方式(您需要为 iPhone 应用程序更改 Info.plist 中的每个标识符,对于 Watchkit ExtensionWatchkit App):

iPhone 申请 Info.plist:

根据需要设置任何捆绑标识符(“捆绑标识符”属性)。

示例:

Bundle identifier: com.fruitcompany.orange

WatchKit 应用程序 Info.plist

这里的包标识符必须以iPhone应用程序的标识符为前缀,像这样(例子):

Bundle identifier: com.fruitcompany.orange.watchkit

您还需要更改 WKCompanionAppBundleIdentifier 必须 与 iPhone 应用程序包标识符匹配,如下所示:

WKCompanionAppBundleIdentifier: com.fruitcompany.orange

WatchKit 扩展 Info.plist:

这里的包标识符必须以iPhone应用程序的标识符为前缀,像这样(例子):

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

您还需要在 NSExtension 属性下设置 WKAppBundleIdentifier

WKAppBundleIdentifier 标识符 必须 与 WatchKit 应用程序包标识符匹配,如下所示:

WKAppBundleIdentifier: com.fruitcompany.orange.watchkit

不要忘记检查项目目标中的 Bundle ID 是否与 Info.plist!

中的相同

您可能还必须更改项目 iOS 配套应用信息 p.list 中的 WKCompanionAppBundleidentifier 密钥,以匹配手表套件扩展 info.plist 中的 WKAppBundleIdentifer 密钥。当我复制一个早期的手表套件项目并更改手表套件扩展 info.plist 中的 WKAppBundleIdentifier 以匹配手表套件 info.plist 中的包标识符时,我发现了这一点,但该项目仍然出现相同的错误。您需要转到 Finder,找到 iOS 配套项目 info.plist,然后在其上找到 double-click,然后根据需要更改 WKCompanionAppBundleIdentifer 密钥。通过查看 Xcode.

中的 info.plist,我无法看到此密钥

首先,让我强调@DejanSkledar 在本页上的出色回答,因为回答中提到的所有位置都很重要。

也就是说,该答案中的精确设置对我来说还不够。我想补充这个答案并指出,自 watchkit 2 以来,从应用程序到手表应用程序,最后到应用程序扩展程序的 bundle id,似乎需要一个层次结构。

以下是在我找到 edwardmp's answer on a related issue 后对我有用的每个相应 info.plist 文件中的设置。

iPhone 应用程序包 ID: com.domain.yourapp

观看应用程序的捆绑 ID: com.domain.yourapp.watchkit

Watchkit 的扩展包 ID: com.domain.yourapp.watchkit.extension

如您所见,iPhone 应用程序有一个 watchkit 应用程序,它本身恰好有一个 watchkit 扩展,并且每个级别都必须反映在它们各自的 bundle id 中。

完成关系后,手表应用必须使用它的 (WKCompanionAppBundleIdentifier) 指向它所属的 iPhone 应用,并且手表扩展必须指向它所属的手表应用 (WKAppBundleIdentifier)。

观看应用程序的 WKCompanionAppBundleIdentifier: com.domain.yourapp

观看应用程序的扩展 WKAppBundleIdentifier: com.domain.yourapp.watchkit

希望这可以节省一些时间,因为我不得不为此苦苦挣扎了几个小时:(

In the WatchKit Extension info.plist is an entry NSExtension. Exand it and you'll find a key WKAppBundleIdentifier which is a reference to the bundle identifier of the WatchApp

从 Apple 试试这个: https://developer.apple.com/forums/thread/5956?login=true