Xcode中多个目标的自动增量内部版本号

时间:2013-07-28 18:35:08

标签: iphone xcode ipad bash xcode4

我的应用程序有“免费”和“付费”版本,我想同时自动增加两个版本号,因为有时我会使用“免费”版本进行测试,有时我会使用“付费”进行测试“版本取决于我在做什么。这些基本上是相同的代码库,我只有两个目标,其中一个预处理器指令定义了“付费”版本来解锁某些东西。

我正在使用此问题中的代码: 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的路径?

4 个答案:

答案 0 :(得分:7)

最新Xcode的更新,首先将所有目标的“版本系统”更改为“构建设置”选项卡中的“ Apple通用”。 versioning system: Apple Generic

并在“构建阶段”标签的“运行脚本”中为所有目标添加以下行:

agvtool next-version -all

agvtool increments build number for all targets agvtool将为您完成增量工作!

答案 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 服务器中增加内部版本号

  1. 设置:当前项目版本 = 1版本系统 = Apple 通用。可以在 Apple documentation 中找到更多信息。
  2. 右键单击机器人并选择编辑机器人...
  3. 打开触发器标签并添加预集成脚本
  4. 给出一个名称(例如:设置构建版本)并编写脚本:
<块引用>
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

Build number incremental using Xcode Bot