我的应用程序有“免费”和“付费”版本,我想同时自动增加两个版本号,因为有时我会使用“免费”版本进行测试,有时我会使用“付费”进行测试“版本取决于我在做什么。这些基本上是相同的代码库,我只有两个目标,其中一个预处理器指令定义了“付费”版本来解锁某些东西。
我正在使用此问题中的代码: Version vs build in XCode
#!/bin/bash
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"
我想我只需要添加两行,指定另一行$INFOPLIST_FILE
的路径:
"Print CFBundleVersion" "NEW_PATH/$INFOPLIST_FILE"
并递增它,但是当我构建另一个目标时,如何获得一个目标Plist的路径?
答案 0 :(得分:7)
最新Xcode的更新,首先将所有目标的“版本系统”更改为“构建设置”选项卡中的“ Apple通用”。
并在“构建阶段”标签的“运行脚本”中为所有目标添加以下行:
agvtool next-version -all
答案 1 :(得分:4)
我明白了。您需要使用SRCROOT
变量。这将为您提供项目的基本目录。从那里,您需要手动指定要使用的info.plist文件的位置,并使用该路径运行PlistBuddy -c
命令。
这是一个示例,首先递增“免费”版本,然后递增“付费”版本:
#!/bin/bash
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$SRCROOT/Pro-Info.plist")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$SRCROOT/Pro-Info.plist"
您需要确保为每个目标反转脚本,因此它使用当前目标上的$INFOPLIST_FILE
变量,并指定其他目标的位置。您可以将它们存储在自定义变量中,或者指定每个变量而不是使用$INFOPLIST_FILE
变量,但它们基本上都是相同的。
答案 2 :(得分:0)
如果有人遇到avgtool的问题,请检查此答案
https://stackoverflow.com/a/60073040/208308
我已经解决了上面的链接中共享的脚本的问题,而没有使用avgtool。
答案 3 :(得分:0)
在我使用的 Xcode 服务器中增加内部版本号
cd $XCS_PRIMARY_REPO_DIR # Change directory to project path
xcrun agvtool new-version -all $XCS_INTEGRATION_NUMBER # Set build version same as integration number