在构建之后(但在安装之前)向 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
(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_DIR
或 INFOPLIST_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}"
我有一个 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
(Xcode11.2)
可以按照您的要求进行操作:
您可以在
${TARGET_BUILD_DIR}/${INFOPLIST_PATH}
. 获取应用程序包 但是:在 新构建系统 中,任何自定义构建步骤都将 运行 在 新构建系统的
Process .../Info.plist
步骤,因此您 不能 通过 运行 脚本步骤编辑应用程序包的 plist 到构建阶段,因为您的更改将被覆盖:
Info.plist
的路径
- 运行 shell 脚本在 Xcode 完成构建后,您可以将其作为构建 post-action 添加到您的方案中:
Product > Scheme > Edit Scheme... > Build > Post-actions
如果您要引用任何构建系统环境变量(例如
BUILT_PRODUCTS_DIR
或INFOPLIST_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}"