Xcode 6错误:"嵌入式二进制文件的包标识符未以父应用程序的包标识符为前缀。"

93
我正在尝试构建一个扩展项目,但Xcode不断抛出主题中的错误。
无需多言,扩展的捆绑标识已经以应用程序的捆绑标识为前缀。
产品名称:ro.chitza.TodayPics.$(TARGET_NAME:rfc1034identifier 我尝试过清理构建文件夹并重新构建,但没有成功。有趣的是整个项目已经成功构建了几次,但在进行一些代码和UI更改后就开始失败了。即使我创建新的项目,在大约5-6次构建之后也会发生同样的情况。
是否还有其他人遇到过这个错误?您有解决方案或解决方法的任何提示吗?
26个回答

77

对于xCode v12,我通过一个点击解决了这个问题:

TARGETS(目标) -> Build Phases(构建阶段) -> Embed App Extensions(嵌入应用程序扩展)

然后勾选:只有在安装时复制

输入图像描述


4
帮助我! - Leon Jakonda
1
这对我也是解决方案。但是你能解释一下为什么这个方法有效吗? - G Chris DCosta
1
启用此设置使我能够运行我的 macOS Safari 扩展程序,该扩展程序因“不允许附加到进程”而失败。 - arsenius
1
对我来说很有效,谢谢。 - Kavindu Dissanayake
1
仍在使用XCode 15.0 beta 8版本进行开发工作。 - undefined
显示剩余2条评论

40

看起来 WatchOS 2 推出后,捆绑 ID 的行为发生了变化。

之前我的扩展捆绑标识符是这样的:

com.mycompany.myappname.watchkitextension

在Stackoverflow的其他地方提到扩展包标识符应该是这种格式,但无论我尝试什么,Xcode都会抛出错误。

唯一可能的解决方案是将扩展包标识符更改为:

com.mycompany.myappname.watchkitapp.watchkitextension

我很确定这在WatchOS 1应用程序中不是这种情况。由于这种更改而引起的问题是,您实际上无法为捆绑标识符com.mycompany.myappname.watchkitextension生成应用程序ID。这并非必要,只需将构建设置中的所有配置文件都设置为自动,并且不要忘记为发布/自定义/调试方案使用正确的代码签名证书即可。

我发现这种方法有效是因为Xcode建议修复问题,并且这就是它所做的。


1
我尝试了这个,但现在无法提交到iTunes Connect,因为我收到了错误消息,指出找不到具有与我的WatchKit扩展签名文件相关联的应用程序组权限的供应配置文件,而此前的包标识符(com.mycompany.myname.watchkitextension)与之不匹配...我们该如何解决这个问题并成功地提交到iTunes Connect? - jayant rawat
这里也有同样的问题.. 有解决方法吗? - Ramya
它也解决了我的问题,谢谢。这在第一个watchOS版本中并不是这样的。 - Medhi
1
在我的iOS应用程序小部件/手表扩展中起作用了,非常感谢! - Supertecnoboff
这是对我有效的方法。我有开发和生产方案,因此必须匹配小部件扩展中的方案捆绑标识符。谢谢! - cherucole

33

在构建之前尝试进行清理。这对我解决了问题(Xcode 6b2)。


1
问题已经在Xcode 6b2中解决,构建非常顺利。只是启动应用程序时会崩溃 :) - chitza
运行 Clean 修复了我类似的问题;在我的情况下,它抱怨 bundle identifier 不是嵌入应用程序的子集。 - Mikrasya
这也解决了我的问题。 - Dan Leveille
2
@chitza明确表示:“我已经尝试清理构建文件夹并重新构建,但没有运气。” 我也遇到了chitza的问题,在Xcode 9.3中清理无法解决该问题。 - Michael
2
建议删除DerivedData并进行清理。以下是步骤: Xcode文件->工作区设置->单击直接按钮(高级按钮上方)转到/Users/{YourName}/Library/Developer/Xcode/DerivedData ->删除DerivedData下的所有内容。 - Zgpeace
显示剩余2条评论

27
我进行了如下更改:
主应用包标识:com.myapp.testapp 扩展应用包标识:com.myapp.testapp.myextension
现在它可以运行了!

我们需要为主应用和扩展应用分别拥有两个不同的配置文件和包标识符吗?还是只需为主应用使用一个包标识符,然后在其基础上添加“.whateverextension”作为扩展应用的标识符即可? - Ganesh G
是的,Ganesh,如果应用程序具有推送通知功能或需要唯一标识符,则我们需要为主应用程序和扩展应用程序提供两个不同的配置文件。 - Sandip Patel - SM

14

目标->常规-->嵌入式二进制文件 中删除旧版本并选择新版本,这是我解决该问题的方法。在此输入图片描述


在手表应用目标上进行以上更改。 - Suraj Mirajkar
哇,谢谢。这么简单的解决方案,解决了困扰我长达3天的问题。 - Kodie Grantham

14

我不得不在扩展的info.plist中手动更改BundleID以符合我的需求。

我已经提交了一个雷达问题:rdar://17487465


1
我们的构建在这个更改后成功了。我们info.plist文件中的BundleId是${PRODUCT_NAME}。所以对于OP的示例,我们会在扩展的info.plist文件中使用ro.chitza.TodayPics.$(TARGET_NAME:rfc1034identifier)作为BundleId。 - Pete
@SushiGrass Jacob(Y) - iPC

13

这个对我很有帮助:

扩展需要使用父应用程序的Bundle ID作为前缀。

例如,如果您的应用程序的Bundle ID是com.ronnathan.myapp,则您的扩展必须是com.ronnathan.myapp.today。您已经重命名了应用程序目标,现在进入扩展目标并更改名称以匹配它。

摘自这里


5

我遇到了相同的错误,你可能添加了一个类似于今日小部件的扩展程序,由于扩展程序本身也是一个二进制文件,因此它具有自己的属性列表。请确保在扩展程序的属性列表中,bundle id 前缀与应用程序的 bundle id 相同。希望这能帮到你。


很遗憾,这并没有帮助。我已经说明了它是一个扩展(“我正在尝试构建一个扩展项目”),并且bundle ID是正确的(“不用说,扩展的bundle ID以应用程序的bundle ID为前缀”)。 - chitza
我的扩展和应用具有完全相同的ID,您尝试过清理项目吗?或者删除派生数据? - coolbeet
1
是的,我试过了,不幸的是它没有解决问题:“我尝试清理构建文件夹并重新构建,但没有运气”。 - chitza

4
在我的情况下,当我更改App的bundle标识符时,出现了这个错误。我的项目中还有WatchKit App。
要解决这个问题,请使用应用程序的新bundle id更新WatchKit Extension和WatchKit App bundle Id前缀。检查两个目标的info.plist文件。
同样需要更新以下内容 -
将以下内容与新的Watch App bundle id进行更新。 WatchKit Extension> Info.plist - NSExtension-> NSExtensionAttributes-> WKAppBundleIdentifier 将以下内容与新的应用程序id进行更新。 WatchKit App > Info.plist - WKCompanionAppBundleIdentifier 在更改所有值后,不要忘记清除产品。

3

Xcode编译时错误

error: Embedded binary's bundle identifier is not prefixed with the parent app's bundle identifier

扩展应用程序[关于] ID 应该扩展一个包含应用程序的ID

//for example
//Extension App id
com.company

//Containing App id
com.company.extension

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