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

时间:2014-06-04 18:56:18

标签: ios8 xcode6 ios-app-extension

我正在尝试构建一个扩展项目,Xcode不断将错误抛给主题。

Xcode log error

无论何时,扩展程序的附件ID 都以app的捆绑ID为前缀。

产品名称:ro.chitza.TodayPics.$(TARGET_NAME:rfc1034identifier

Extension bundle id

我已经尝试清理构建文件夹并重建,没有运气。有趣的是,整个项目已经构建了几次,但在一些代码和UI更改后,它开始失败。即使我创建了新项目,在5-6次构建之后也会发生同样的事情。

有没有其他人遇到此错误?有关解决方案或解决方法的任何提示吗?

22 个答案:

答案 0 :(得分:31)

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

答案 1 :(得分:29)

当WatchOS 2到达时,看起来捆绑ID行为已经改变。

以前我有一个扩展包标识符,如下所示:

com.mycompany.myappname.watchkitapp.watchkitextension

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

唯一可行的解​​决方案是将扩展束标识符更改为:

com.mycompany.myappname.watchkitextension

我很确定这不是WatchOS 1应用程序的情况。由于此更改而导致的问题是,您实际上无法为包标识EXPath packages that incorporate Java libraries may no longer work with eXist 3.0 and may need to be recompiled for our API changes; packages should now explicitly specify the eXist versions that they are compatible with. 生成应用ID。这不是必需的,只需将构建设置中的所有配置文件设置为自动,并且不要忘记为发布/ ad-hoc /调试方案使用正确的代码签名证书。

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

答案 2 :(得分:17)

我做了如下修改:

主要应用包ID: com.myapp.testapp

扩展应用包ID: com.myapp.testapp.myextension

及其作品!!!

答案 3 :(得分:14)

我不得不手动将扩展名的info.plist中的BundleID更改为我需要的内容。

我提交了雷达:rdar:// 17487465

答案 4 :(得分:12)

这对我有所帮助:

扩展程序需要将父ID的包ID作为其前缀。

例如,如果您的应用是com.ronnathan.myapp,那么您的扩展名必须是com.ronnathan.myapp.today。您重命名了应用目标,现在进入扩展目标并更改名称以匹配。

taken from here

答案 5 :(得分:8)

Target-> General - >嵌入式二进制文件删除旧的并选择新的这是我如何解决这个问题 enter image description here

答案 6 :(得分:4)

我遇到了同样的错误,您可能会添加像今日小部件一样的扩展程序,因为扩展程序本身也是一个二进制文件,因此它有自己的plist,并确保在扩展程序的plist中,包ID以app&为前缀#39;捆绑ID。希望这会有所帮助。

答案 7 :(得分:4)

在我的情况下,当我更改应用程序包标识符时发生此错误。我的项目中也有WatchKit App。

要解决此问题,请使用应用的新捆绑ID更新WatchKit Extension和WatchKit App捆绑包ID前缀。检查两个目标中的info.plist。

同时更新以下内容 -

使用新的Watch App捆绑包ID更新以下内容。 WatchKit Extension> Info.plist - NSExtension-> NSExtensionAttributes-> WKAppBundleIdentifier

使用新的应用ID更新以下内容。 WatchKit App> Info.plist - WKCompanionAppBundleIdentifier

更改所有值后,不要忘记清洁产品一次。

答案 8 :(得分:3)

您可能碰巧复制了目标以执行克隆应用。例如,您选择了每个目标并复制它们。当您克隆watchkit扩展目标时,其目标成员资格可以自动分配给原始监视应用程序。

要解决此问题,您需要在Project Navigator中找到原始的“WatchKit extension.appex”文件,并取消选择File Inspector中的Target Membership作为新克隆监视应用目标。您应该对重复的“Watchkit extension-copy.appex”执行相反的操作,并确保它只在那里选择了重复的“watch app-copy”目标。

答案 9 :(得分:2)

对于xCode v12,我一键解决了该问题:

目标->构建阶段->嵌入应用扩展

并检查:Copy only when installing

enter image description here

答案 10 :(得分:2)

确保你的:

目标应用A - >内置设置 - >代码签名 - >释放

与:

相同

目标应用A(扩展) - >内置设置 - >代码签名 - >释放

答案 11 :(得分:1)

我尝试了此处给出的大多数解决方案,但并没有帮助我解决Xcode 9.4中的问题

This SO Answer帮助我解决了这个问题。

我所做的只是

  1. 取消选中所有目标和项目的自动管理签名

  2. 通过代码签名使它成为所有目标和项目的iOS Developer。

  3. 清洁项目,然后关闭项目并打开它。

  4. 现在启用对目标的自动管理签名并选择开发者帐户。然后建立它。

它解决了我的错误。我不知道苹果何时会解决这些问题。它要花很多时间。

编辑:我也使用This answer,我的目标捆绑包ID com.companyname.projectname ,而扩展捆绑包ID < / strong> com.companyname.projectname.myextension

答案 12 :(得分:0)

Extension App id 应该扩展一个 Containing App id

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

//Containing App id
com.company.extension

答案 13 :(得分:0)

该解决方案已经包含了很多答案:

包含应用捆绑包ID:com.alphabet.gmail

扩展应用程序捆绑包ID:com.alphabet.gmail.notificationServiceExtension

但是为什么要加上前缀?

因为Apple希望应用程序之间的通信通过包含应用程序的bundleId来避免,开发人员不必四处走动并将消息发送到应用程序扩展程序的bundleID

例如,您的服务器必须发送一个名为apns-topic的字段才能向APNS发送推送通知,以便该应用可以下载图像。该主题的值是bundleID。

但这不是服务扩展的捆绑软件ID。它是主应用程序本身的bundleId。

但是,在实际的物理电话上,两个bundleID(com.alphabet.gmail.notificationServiceExtensioncom.alphabet.gmail都存在)。

那么操作系统如何将通知传递到应用扩展而不是主应用?

我的理解是,操作系统正在寻找一个目标:

  • 具有一个带有com.alphabet.gmail前缀的 的BundleId,例如:扩展应用程序捆绑包ID:com.alphabet.gmail.notification
  • 已将NSExtensionPointIdentifier设置为com.apple.usernotifications.service。您不应触摸此值。这只是Apple的预定义值。

enter image description here

答案 14 :(得分:0)

当我们开发手表应用程序时,有3个与该应用程序相关的目标。他们的目标必须具有以下样式的包标识符。

  • iPhone的目标:com.company.app
  • iWatch的目标:com.company.app.watch
  • iWatch扩展的目标:com.company.app.watch.extension

在观看目标的info.plist中,它必须具有

  

WKCompanionAppBundleIdentifier = com.company.app

并在info.plist中用于观看应用扩展程序,它必须具有

  

NSExtension> NSExtensionAttributes> WKAppBundleIdentifier =   com.company.app.watch

答案 15 :(得分:0)

确保Extension的bundle标识符以app bundle标识符为前缀。 如果相同且仍然给出错误,则转到Extension的.plist文件并更改其Bundle Identifier。

答案 16 :(得分:0)

这对我很有帮助:

我得到了:

  

Xcode找不到匹配的任何iOS App Development配置文件

所以我将Bundle Identifier名称更改为com.example.somethingcom.example.something1,然后清除了构建。

确保您也更改了所有依赖的捆绑包ID .njoy !!

答案 17 :(得分:0)

转到每个目标&gt;构建设置&gt;产品包标识符&gt; (重命名为)

答案 18 :(得分:0)

我只是清理派生文件夹,它可以帮助我解决这些问题。

答案 19 :(得分:0)

我遇到了同样的问题。将我的WatchKit扩展的CFBundleIdentifier更改为我第一次添加WatchKit扩展时使用的原始值以外的其他值,并重新设置我的共享应用程序组权限,为我修复了它。

答案 20 :(得分:0)

只需从〜/ Library / MobileDevice / Provisioning Profiles中删除应用程序配置文件,重新加载Xcode并在Xcode提示时解决问题(或从iOS开发中心手动下载)。

为我解决了这个问题。

答案 21 :(得分:0)

问题可能是您在将项目添加到项目时使用“创建文件夹引用”添加了一个文件夹(就像我一样)。 @ Jacob的修复对我不起作用:(

enter image description here

我必须删除我添加到项目中的文件夹引用,然后清理并构建,并为我修复它。

enter image description here