23

在我的 Xcode 项目中,我有 4 种不同的方案(prod、dev、staging、staging2),它们更改了安装到手机上的应用程序的包标识符。这样我就可以并排安装所有 4 个版本,类似于这种技术

现在我正在为 iOS 8 构建一个 Today Extension。它是一个新的 Target,需要它自己的包标识符。

Extension 的 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 目标以设置其捆绑标识符?也许通过自定义运行脚本构建阶段?

4

3 回答 3

32

目标的构建设置不适用于其他目标。但是,可以使用 PROJECT 的构建设置。

因此,您可以在项目中添加用户定义的构建设置并将其命名为 PARENT_APP_BUNDLE_IDENTIFIER 并为所有方案设置正确的包 ID。

然后在应用程序扩展目标的信息选项卡中将捆绑 ID 设置为

$(PARENT_APP_BUNDLE_IDENTIFIER).$(PRODUCT_NAME:rfc1034identifier)

它对我来说非常好。

于 2014-09-30T12:22:16.800 回答
4

我有 Siri 扩展和多个目标,因此为了避免为每个目标重复扩展,我在构建之前向每个更改扩展 plist 的 BundleId 的方案添加了预操作:

  1. 选择“编辑方案”
  2. 单击“构建”附近的三角形
  3. 选择“预操作”
  4. 单击“+”,选择“新建运行脚本操作”
  5. 选择目标以提供构建设置
  6. 在脚本字段中粘贴您的 BundleId 和扩展文件夹
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier 
YourDesiredBundleId" "$PROJECT_DIR/YourExtensionFolder/Info.plist"

它就像一个魅力!您需要为每个方案配置它。

于 2019-08-12T13:46:47.260 回答
3

在我的项目中,我需要构建不同版本的应用程序(细节不同,例如每个应用程序都带有不同的徽标)。

假设有大约 10 个“应用程序”目标,我无法想象为每个主要目标添加通知内容和通知服务扩展(在这种情况下,我将总共维护 30 个目标 - 疯狂)。

我在“嵌入应用程序扩展”阶段之后运行了一个脚本(https://gist.github.com/damian-rzeszot/0b23ad87e5ab5d52aa15c095cbf43c59 )。它会覆盖应用扩展 plist 中的捆绑包 ID 并重新签署捆绑包。

于 2020-04-20T00:02:10.313 回答