我有一个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
的内容。这样就可以在构建时将其编译为该值,但是没有双精度值。我尝试了此操作,但不幸的是,它似乎无法正常工作。
答案 0 :(得分:1)
应用程序捆绑包是只读的。 Info.plist位于应用捆绑包中
答案 1 :(得分:1)
您可以通过以下方式访问构建目录
$CONFIGURATION_BUILD_DIR/$CONTENTS_FOLDER_PATH
答案 2 :(得分:0)
(Xcode 11.2)
可以按照您的要求进行操作:
您可以在Info.plist
上获取应用包的${TARGET_BUILD_DIR}/${INFOPLIST_PATH}
的路径。
但是:在新构建系统中,所有自定义构建步骤都将在新构建系统的Process .../Info.plist
步骤之前运行,因此您无法通过“运行脚本”步骤来编辑应用程序包的plist以构建阶段,因为您的更改将被覆盖:
Product > Scheme > Edit Scheme... > Build > Post-actions
如果要引用任何构建系统环境变量(例如BUILT_PRODUCTS_DIR
或INFOPLIST_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}"