【发布时间】:2014-11-05 19:48:54
【问题描述】:
在我的 Xcode 项目中,我有 4 种不同的方案(prod、dev、staging、staging2),它们会更改安装到手机上的应用程序的包标识符。这样我就可以并排安装所有 4 个版本,类似于 this technique。
现在我正在为 iOS 8 构建一个 Today Extension。它是一个新的 Target,需要它自己的包标识符。
扩展的Bundle Identifier必须以Parent App的Bundle Identifier为前缀,否则会抛出警告:
error: Embedded binary's bundle identifier is not prefixed with the parent app's bundle identifier.
Embedded Binary Bundle Identifier: com.company.app.TodayExtension
Parent App Bundle Identifier: com.company.app.staging
在这种情况下,嵌入式二进制包标识符必须是com.company.app.staging.TodayExtension。
有没有一种方法可以通过首先查看父目标的捆绑标识符来配置我的 Today Extension 目标以设置其捆绑标识符?也许通过自定义运行脚本构建阶段?
【问题讨论】:
-
你能更详细地解释一下你是如何解决这个问题的吗?在下面 Jafar 的回答中,您是否能够通过切换方案以某种方式设置 PARENT_APP_BUNDLE_IDENTIFIER,如果可以,如何设置?或者您在每个目标(包括扩展目标)中为捆绑 ID 和 PARENT_APP_BUNDLE_IDENTIFIER 指定了什么?谢谢!
-
在项目设置中 |构建设置 |用户定义,创建一个名为 PARENT_APP_BUNDLE_ID 的新条目。我有 4 个配置,我为每个配置添加一个值(com.company.app.staging、com.company.app.development 等)。在 Main App Target 的 Info.plist 中,将 Bundle Identifier 设置为 $(PARENT_APP_BUNDLE_ID)。在您的 Extension Target 的 Info.plist 中,将其 Bundle Identifier 设置为 $(PARENT_APP_BUNDLE_ID).NameOfYourExtension。
-
啊哈,完全错过了这样一个事实,即您通过额外的自定义构建配置(项目 | 信息 | 配置)并在项目级别为每个配置设置不同的 PARENT_APP_BUNDLE_ID 值,而不是认为你以某种方式通过覆盖单个目标设置来做到这一点。所以你仍然可以切换方案来构建 w/不同的包 id,因为每个方案使用不同的构建配置集。很酷,对我有用,可以帮助我清理重复的目标和 plist 文件!
-
当您在项目级别将 PARENT_APP_BUNDLE_ID 添加到您的构建设置中时,您应该通过单击左侧的三角形来查看下方的所有配置。在我的应用程序中,我有 4 个配置(dev、prod、staging、staging2)。创建用户定义的构建设置后,我看到了所有 4 个配置,并且可以为每个配置分配不同的值。
-
如果我的扩展嵌入到多个目标怎么办?
标签: ios objective-c xcode ios-app-extension xcode-build-settings