【问题标题】:Xcode 6 error: "Embedded binary's bundle identifier is not prefixed with the parent app's bundle identifier."Xcode 6 错误:“嵌入式二进制文件的包标识符未以父应用程序的包标识符为前缀。”
【发布时间】:2014-07-25 13:47:15
【问题描述】:

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

今天不用,扩展程序的捆绑包 ID 以应用的捆绑包 ID 为前缀。

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

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

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

【问题讨论】:

    标签: ios8 xcode6 ios-app-extension


    【解决方案1】:

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

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

    com.mycompany.myappname.watchkitextension
    

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

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

    com.mycompany.myappname.watchkitapp.watchkitextension
    

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

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

    【讨论】:

    • 我试过了,但现在我无法提交到 itunesconnect,因为我收到错误,因为没有发现任何配置文件具有与我的 watchkit 扩展配置文件相关联的应用程序组的权利和以前的捆绑 ID( com.mycompany.myname.watchkitextension)...我们如何解决这个问题并成功提交到 intunesconnect?
    • 同样的问题..有解决办法吗?
    • 它也解决了我的问题,谢谢这与第一个 watchOS 不同
    • 为我的 iOS 应用小部件/手表扩展工作,非常感谢!
    【解决方案2】:

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

    【讨论】:

    • Xcode 6b2 解决的问题,构建得很好。只是它在启动应用程序时崩溃:)
    • Running Clean 修复了我类似的问题;就我而言,它抱怨捆绑标识符不是嵌入应用程序的子集。
    • 这也解决了我的问题。
    • @chitza 明确表示“我已经尝试清理构建文件夹并重建,但没有运气。”我也遇到了 chitza 的问题,清理并不能解决 Xcode 9.3 中的问题。
    • 建议删除 DerivedData,并清理。下面的步骤:Xcode File -> 工作区设置 -> 点击直接按钮(Just Upside the Advanced 按钮)去/Users/{YourName}/Library/Developer/Xcode/DerivedData -> 删除DerivfedData下面的所有东西
    【解决方案3】:

    我做了如下更改:

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

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

    及其作品!!!

    【讨论】:

    • 我们是否需要为主应用程序和扩展应用程序提供两个具有两个不同配置文件的捆绑包 ID?还是只为主应用程序提供一个捆绑标识符,然后通过将 .whateverextension 附加到主应用程序捆绑包 id 来为扩展应用程序使用相同的标识符?
    • 是的 Ganesh,如果应用具有推送通知功能或需要唯一标识符,我们需要两个不同的配置文件用于主应用和扩展应用。
    【解决方案4】:

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

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

    【讨论】:

    • 我们的构建成功完成了这一更改。我们的 info.plist 文件中的 BundleId 是 ${PRODUCT_NAME}。因此,对于 OP 的示例,我们将在扩展的 info.plist 文件中使用 ro.chitza.TodayPics.$(TARGET_NAME:rfc1034identifier) 作为 BundleId。
    • @SushiGrass Jacob (Y)
    【解决方案5】:

    Target->General-->Embedded Binaries 删除旧的并选择新的,这就是我解决这个问题的方法

    【讨论】:

    • 在Watch App Target上做上述修改。
    • 哇,谢谢。对于一个连续困扰我 3 天的问题,这样一个简单的解决方案。
    【解决方案6】:

    这对我有帮助:

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

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

    taken from here

    【讨论】:

      【解决方案7】:

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

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

      并检查:Copy only when installing

      【讨论】:

      • 帮帮我!
      【解决方案8】:

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

      【讨论】:

      • 不幸的是它没有帮助。我已经说过它是一个扩展(“我正在尝试构建一个扩展项目”)并且捆绑 ID 是正确的(“今天不需要,扩展的捆绑 ID 以应用的捆绑 ID 为前缀”)。
      • 我的扩展和应用的id完全一样,你试过清理项目吗?还是删除派生数据?
      • 是的,我做到了,不幸的是它没有解决问题:“我已经尝试清理构建文件夹并重建,没有运气”
      【解决方案9】:

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

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

      同时更新以下内容 -

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

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

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

      【讨论】:

        【解决方案10】:

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

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

        【讨论】:

          【解决方案11】:

          确保您的:

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

          与以下相同:

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

          【讨论】:

            【解决方案12】:

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

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

            我所做的只是

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

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

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

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

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

            编辑:我也在使用This answer,我的目标捆绑包IDcom.companyname.projectname并且对于扩展捆绑包ID com.companyname.projectname.myextension

            【讨论】:

              【解决方案13】:

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

              Extension App id 应该扩展 Containing App id

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

              【讨论】:

                【解决方案14】:

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

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

                【讨论】:

                  【解决方案15】:

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

                  【讨论】:

                  • 更改捆绑 ID 很好......但是我的 watchkit 扩展配置文件有我的旧捆绑 ID,所以我无法使用新捆绑 ID 将我的应用程序提交到 itunesconnect,因为我收到错误没有配置文件支持应用程序组..你是如何重置你的共享组权利的?
                  【解决方案16】:

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

                  【讨论】:

                    【解决方案17】:

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

                    【讨论】:

                    • 我有一个包含多个项目的工作区。使用 Xcode 的搜索功能和 Build Settings 搜索功能,我能够找到需要更改的每个实例。完美运行!
                    【解决方案18】:

                    这对我很有帮助:

                    我得到了:

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

                    所以我将捆绑标识符名称(即com.example.something)更改为com.example.something1,然后清理构建。

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

                    【讨论】:

                      【解决方案19】:

                      确保 Extension 的包标识符以应用包标识符为前缀。 如果还是一样,还是报错,那就去 Extension 的 .plist 文件,修改它们的 Bundle Identifier。

                      【讨论】:

                        【解决方案20】:

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

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

                        在info.plist for watch target中,必须有

                        WKCompanionAppBundleIdentifier = com.company.app

                        在 info.plist 中用于手表应用扩展,它必须有

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

                        【讨论】:

                          【解决方案21】:

                          很多答案已经涵盖了解决方案:

                          包含 App Bundle 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 预先定义的值。

                          【讨论】:

                            猜你喜欢
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 2011-08-29
                            • 2012-07-28
                            • 2011-01-22
                            • 1970-01-01
                            • 2011-01-19
                            相关资源
                            最近更新 更多