在构建之后(但在安装之前)向 Info.plist 数组添加值

Add value to Info.plist array after building (but before installing)

我有一个 Xcode 项目,它使用不同的配置构建到几个不同的应用程序(白标签)中。 对于新的付款方式,我需要每个应用程序都具有唯一的 CFBundleURLScheme.

我在"Build Phases".

之前Compile Sources写了下面的"Run Script"
INFO_PLIST="${PROJECT_DIR}/${INFOPLIST_FILE}"
plutil -insert CFBundleURLTypes.0.CFBundleURLSchemes.0 -string "swish${PRODUCT_BUNDLE_IDENTIFIER//.}" $INFO_PLIST

这将添加值 swishourbundleidentifier。 (所以,swish + our.bundle.identifier,但没有点)

这目前改变了实际 Info.plist。我想要的是它更改应用程序构建到的文件夹中的 Info.plist,以便每次都被覆盖(因此没有双精度值)并且附加值不会显示在git.

我该怎么做?我想它只是在改变 "${PROJECT_DIR}/${INFOPLIST_FILE}",但是改变什么?

如果需要更多信息,请告诉我。

编辑:实际上,如果可能的话,更好的解决方案是在 Info.plist 的 URL 方案中添加类似 swish${PRODUCT_BUNDLE_IDENTIFIER//.} 的内容。所以它在构建时被编译成那个,但没有双精度值。我试过了,但不幸的是,它似乎并没有那样工作。

应用程序包是 read-only。 Info.plist 在应用程序包中

您可以使用

访问构建目录
$CONFIGURATION_BUILD_DIR/$CONTENTS_FOLDER_PATH

参考:https://help.apple.com/xcode/mac/10.2/#/itcaec37c2a6

(Xcode11.2)

可以按照您的要求进行操作:

  • 您可以在 ${TARGET_BUILD_DIR}/${INFOPLIST_PATH}.

  • 获取应用程序包 Info.plist 的路径
  • 但是:在 新构建系统 中,任何自定义构建步骤都将 运行 新构建系统的 Process .../Info.plist 步骤,因此您 不能 通过 运行 脚本步骤编辑应用程序包的 plist 到构建阶段,因为您的更改将被覆盖:

  • 运行 shell 脚本在 Xcode 完成构建后,您可以将其作为构建 post-action 添加到您的方案中:

Product > Scheme > Edit Scheme... > Build > Post-actions

  • 如果您要引用任何构建系统环境变量(例如 BUILT_PRODUCTS_DIRINFOPLIST_PATH),请确保您 select 您的应用目标位于 .

  • 提供构建设置
  • 添加您的 shell 脚本,但请记住,如果您编辑应用程序包中的任何文件(即 Info.plist),您将需要重新签署应用程序.将此添加到您的脚本中:

export CODESIGN_ALLOCATE=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate
/usr/bin/codesign --force --sign - --entitlements "${TARGET_TEMP_DIR}/${FULL_PRODUCT_NAME}.xcent" --timestamp=none "${CODESIGNING_FOLDER_PATH}"