71

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

Xcode 日志错误

不用说,扩展的 bundle id以 app 的 bundle id为前缀。

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

扩展包 ID

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

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

4

21 回答 21

36

WatchOS 2 到来时,捆绑 ID 的行为似乎发生了变化。

以前我有一个像这样的扩展包标识符:

com.mycompany.myappname.watchkitextension

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

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

com.mycompany.myappname.watchkitapp.watchkitextension

我很确定 WatchOS 1 应用程序不是这种情况。由于此更改,一个问题是您实际上无法为 bundle identifier 生成应用程序 id com.mycompany.myappname.watchkitextension。这不是必需的,只需将构建设置中的所有配置文件设置为自动,并且不要忘记为您的发布/临时/调试方案使用正确的代码签名证书。

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

于 2015-09-30T22:09:02.653 回答
33

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

于 2014-06-19T15:16:23.490 回答
22

我做了如下改变:

主应用程序包 ID: com.myapp.testapp

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

及其作品!!!

于 2017-01-03T10:28:50.157 回答
15

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

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

并检查:Copy only when installing

在此处输入图像描述

于 2020-11-17T12:03:22.563 回答
14

我必须手动将扩展的 info.plist 中的 BundleID 更改为我需要的。

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

于 2014-06-27T19:12:56.167 回答
14

Target->General->Embedded Binaries 删除旧的并选择新的,这就是我解决这个问题的方法 在此处输入图像描述

于 2015-11-27T04:11:29.830 回答
13

这对我有帮助:

扩展需要以父级的捆绑 ID 作为其前缀。

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

取自这里

于 2015-05-18T12:03:45.547 回答
5

我遇到了同样的错误,你可能添加了一个像 Today 小部件这样的扩展,因为扩展本身也是一个二进制文件,所以它有自己的 plist,并确保在扩展的 plist 中,bundle id 以应用程序的 bundle id 为前缀。希望这可以帮助。

于 2014-06-12T22:04:55.570 回答
4

就我而言,当我更改应用程序包标识符时发生了此错误。我的项目中也有 WatchKit App。

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

还要更新以下内容 -

使用新的 Watch App bundle id 更新以下内容。WatchKit 扩展 > Info.plist - NSExtension->NSExtensionAttributes->WKAppBundleIdentifier

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

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

于 2015-07-06T11:57:41.603 回答
3

您可能已经复制了目标以执行克隆应用程序。例如,您选择了每个目标并复制它们。当您克隆 watchkit 扩展目标时,它的目标成员可能会自动分配给原始手表应用程序。

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

于 2016-03-16T21:28:36.027 回答
2

确保您的:

目标应用 A -> 构建设置 -> 代码签名 -> 发布

与以下内容相同:

目标应用 A(扩展)-> 构建设置-> 代码签名-> 发布

于 2015-02-24T11:00:29.223 回答
1

编译错误:嵌入式二进制文件的包标识符没有以父应用的包标识符为前缀

Extension Appid 应该扩展一个Containing Appid

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

//Containing App id
com.company.extension
于 2021-03-06T18:14:41.367 回答
1

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

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

我所做的只是

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

  2. 在代码签名中,使其成为所有目标和项目的 iOS 开发人员。

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

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

它解决了我的错误。我不知道苹果什么时候会解决这些类型的问题。它吃了很多小时。

编辑:我也在使用这个答案,我的目标包 idcom.companyname.projectname扩展包 id com.companyname.projectname.myextension

于 2018-07-05T08:35:43.403 回答
0

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

在此处输入图像描述

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

在此处输入图像描述

于 2014-07-20T20:43:39.403 回答
0

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

于 2015-05-04T17:27:22.630 回答
0

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

包含 App Bundle ID:com.alphabet.gmail

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

但是为什么要加前缀呢?

因为 Apple 希望应用程序之间的通信通过包含应用程序的 bundleId 进行,并避免开发人员不得不四处走动并向应用程序 Extension的 bundleID 发送消息。

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

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

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

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

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

  • 有一个以example 为前缀的 BundleId com.alphabet.gmail:Extension app bundle id:com.alphabet.gmail.notification
  • 有一个NSExtensionPointIdentifier设置为com.apple.usernotifications.service。你不应该触及这个值。这只是 Apple 预先定义的值。

在此处输入图像描述

于 2020-06-10T04:06:38.220 回答
0

转到每个目标>构建设置>产品捆绑标识符>(重命名为任何内容)

于 2016-11-22T17:43:43.783 回答
0

确保 Extension 的包标识符以应用包标识符为前缀。如果它相同并且仍然给出错误,则转到扩展名的 .plist 文件并更改其捆绑标识符。

于 2018-04-11T08:14:01.217 回答
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

于 2019-12-02T05:56:29.880 回答
0

我只是清理派生文件夹,它在这些情况下对我有帮助。

于 2016-01-12T20:06:29.493 回答
0

这对我很有帮助:

我得到:

Xcode 找不到任何匹配的 iOS 应用程序开发配置文件

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

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

于 2018-01-06T02:17:25.747 回答