8

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

我在这个问题中使用代码: 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

4 回答 4

12

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

并在所有目标的“构建阶段”选项卡的“运行脚本”中添加这一行:

agvtool next-version -all

agvtool 为所有目标增加内部版本号 agvtool 将为您完成增量工作!

于 2019-10-04T13:24:17.217 回答
5

我想到了。您需要使用该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变量,但它们基本上都做同样的事情。

于 2013-07-28T19:16:50.270 回答
0

如果有人遇到 avgtool 问题,请查看此答案

https://stackoverflow.com/a/60073040/208308

我已经用上面链接中共享的脚本解决了我的问题,而没有使用 avgtool。

于 2020-09-22T13:52:04.103 回答
0

在我正在使用的 Xcode 服务器中增加内部版本号

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

使用 Xcode Bot 递增内部版本号

于 2021-05-07T11:22:07.870 回答