构建后(但在安装之前)为Info.plist数组增加价值

时间:2019-05-14 13:13:32

标签: ios xcode info.plist

我有一个Xcode项目,可以使用不同的配置将其构建到几个不同的应用程序(whitelabel)中。 对于一种新的付款方式,我需要每个应用程序都具有唯一的CFBundleURLScheme

我在“构建阶段”中的{em> Compile Sources之前编写了以下“运行脚本”。

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}",但更改为什么?

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

编辑:实际上,如果可能的话,更好的解决方案是在swish${PRODUCT_BUNDLE_IDENTIFIER//.}的URL方案中添加类似Info.plist的内容。这样就可以在构建时将其编译为该值,但是没有双精度值。我尝试了此操作,但不幸的是,它似乎无法正常工作。

3 个答案:

答案 0 :(得分:1)

应用程序捆绑包是只读的。 Info.plist位于应用捆绑包中

答案 1 :(得分:1)

您可以通过以下方式访问构建目录

$CONFIGURATION_BUILD_DIR/$CONTENTS_FOLDER_PATH

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

答案 2 :(得分:0)

(Xcode 11.2)

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

  • 您可以在Info.plist上获取应用包的${TARGET_BUILD_DIR}/${INFOPLIST_PATH}的路径。

  • 但是:在新构建系统中,所有自定义构建步骤都将在新构建系统的Process .../Info.plist步骤之前运行,因此您无法通过“运行脚本”步骤来编辑应用程序包的plist以构建阶段,因为您的更改将被覆盖:

I stole this image from https://stackoverflow.com/a/54232034/969305

  • 要在Xcode完成构建后运行Shell脚本,可以将其作为构建后操作添加到方案中:

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

  • 如果要引用任何构建系统环境变量(例如BUILT_PRODUCTS_DIRINFOPLIST_PATH),请确保在提供构建设置来源

  • 添加您的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}"