WatchKit扩展包标识符

64

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

错误:WatchKit扩展不包含任何Bundle标识符与“com.domain.appname.watchkitapp”匹配的WatchKit应用程序。请验证您的WatchKit Extension的Info.plist中的WKAppBundleIdentifier值是否与WatchKit应用程序的Info.plist中的CFBundleIdentifier值相匹配。

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

我找不到在哪里进行更改。

5个回答

209

在更改捆绑标识符时,您需要小心,并且以下是设置它们的方法(您需要为iPhone应用程序Watchkit扩展Watchkit应用程序中的每个标识符更改Info.plist中的标识符):

iPhone应用程序Info.plist:

将任何捆绑标识符设置为所需(“Bundle identifier”属性)。

例如:

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

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

WKAppBundleIdentifier: com.fruitcompany.orange.watchkit

别忘了检查你在项目目标中的 Bundle ID 和 Info.plist 中的是否相同


3
我按照相同的步骤操作,但是出现了“嵌入式二进制文件的捆绑标识符未以父应用程序的捆绑标识符为前缀”的错误提示。 - Syed Ismail Ahamed
2
扩展程序包标识符应该是com.fruitcompany.watchkit.entension吗? - Syed Ismail Ahamed
1
当我使用 com.fruitcompany.orange.watchkit.entension 创建了另一个应用ID时,它能够正常工作。我很好奇是什么原因导致了这种情况。 - Syed Ismail Ahamed
20
WKAppBundleIdentifier 嵌套在 NSExtension 中隐藏,但错误信息只提到其未作用域处理是十分恶劣的。我只是猜测它缺失了并手动添加到了根目录,结果自然是相同的错误和很多挫败感。感谢您传播真相! - Ohad Schneider
1
我认为这不正确。文档说明(https://developer.apple.com/library/content/documentation/IDEs/Conceptual/AppDistributionGuide/ConfiguringYourApp/ConfiguringYourApp.html)指出,手表应用程序的bundle id应该像com.fruitcompany.orange.watchkitapp而不是com.fruitcompany.organe.watchkitapp。对于扩展,我们将使用com.fruitcompany.orange.watchkitextension而不是com.fruitcompany.orange.watchkit.extension。您能否调整您的答案? - Renato Stauffer
显示剩余4条评论

20

首先,我要强调这个页面上@DejanSkledar的精彩答案,因为答案中提到的所有位置都很重要。

尽管如此,在那个答案中的具体设置对我来说不够充分。我想补充这个回答并指出自watchkit 2以来,在从应用程序到手表应用程序,最后到应用程序扩展的过程中,需要有一个层次结构。

以下是它们各自对应的info.plist文件中的设置,这些设置对我有效,我在edwardmp在相关问题上的回答上找到了答案

iPhone应用程序的Bundle Id: com.domain.yourapp

Watch App的Bundle Id: com.domain.yourapp.watchkit

Watchkit扩展的Bundle Id: com.domain.yourapp.watchkit.extension

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

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

Watch App的WKCompanionAppBundleIdentifier: com.domain.yourapp

Watch App的Extension WKAppBundleIdentifier: com.domain.yourapp.watchkit

希望这可以为某些人节省时间,因为我不得不花费几个小时来解决这个问题 :(


观察应用程序的扩展WKAppBundleIdentifier在Info.plist文件中位于NSExtension下。 - Michael N

2

您可能还需要在项目的iOS配套应用程序info.plist中更改WKCompanionAppBundleidentifier键,以匹配watch kit扩展信息.plist中的WKAppBundleIdentifer键。我发现当我复制早期的watch kit项目并将watch kit扩展信息.plist中的WKAppBundleIdentifier更改为与watch kit info.plist中的bundle标识符匹配时,仍然出现了相同的错误。您需要前往Finder,定位iOS配套项目info.plist,然后双击它,如果需要,更改WKCompanionAppBundleIdentifer键。我无法通过在Xcode中查看info.plist来看到这个键。


2
实际上,您需要使用TextEdit打开info.plist并更改密钥。您还需要在watch kit扩展info.plist中进行相同的更改。我验证了这个方法可以用于一个项目,在此项目中,我更改了iOS target、watch kit target和watch kit extension target的bundle identifier。 - Nelson Capes

0

因此,当您只想在测试设备上运行时,不一定需要更改任何内容。但是,为了测试手表应用程序,您确实需要请求两个额外的配置文件。这两个附加标识符可以从扩展目标和手表应用程序目标中获取。当您想要上传手表应用程序到App Store时,也需要执行相同的操作。


我已经创建了三个配置文件,一个是应用程序的,一个是扩展的,另一个是手表应用程序的。这就是我不得不更改标识符的原因。然而,其中一个位置似乎没有更改。 - Tom Coomer
实际上,在添加这两个监视目标后,无需进行更改。因为XCode会自动为您生成两个不同的标识符。因此,下次只需要复制并粘贴它即可创建应用程序ID。如果您已更改了这两个目标的标识符,则确实需要相应地更改info.plist中的标识符。希望这能让您感到方便。 - Lucas Huang

0
在 WatchKit Extension 的 info.plist 文件中,有一个名为 NSExtension 的条目。展开它,你会发现一个关键字 WKAppBundleIdentifier,它引用了 WatchApp 的 bundle identifier。
可以尝试看看苹果的这个链接: https://developer.apple.com/forums/thread/5956?login=true

虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。如果链接页面更改,仅有链接的答案可能会失效。-【来自审查】 - Bert Blommers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接