【问题标题】:Increment xcode project User-Defined Variable through Script通过脚本增加xcode项目用户定义的变量
【发布时间】:2014-11-12 17:43:15
【问题描述】:

我想增加 xcode 项目中的用户定义变量。是否有任何脚本来增加用户定义的变量。

我有一个用户定义的变量“PATCH”。在 info.plist 中,我将此变量分配给 Bundle 版本。

我希望这个用户定义的变量在我使用不同的配置归档项目时自动递增。

我附上截图,希望它能帮助你轻松理解我的问题:

Xcode 截图:

Plist 截图:

我也浏览了这些链接:

Xcode AutoIncrement Build Version.

StackOverflow Question

但这些问题/链接不符合我的要求。我只需要通过脚本访问用户定义的变量。如果有人有解决方案,请帮助。任何帮助表示赞赏。

【问题讨论】:

  • 一句警告;一旦您弄清楚如何在 info.plist 中设置所需的值,请确保您使用 External Build System 模板将脚本实现为单独的目标,并使您的应用程序目标依赖于该目标。作为正常构建过程的一部分,您不想弄乱info.plist。有龙!
  • 我正在通过 jenkins CI 构建我的项目,并且针对不同的配置我有不同的工作。我需要的是增加我的变量,这样我就不会手动增加构建版本。它也将自动完成。我的上述解决方案有什么缺点。你能解释一下吗?
  • 您仍然可以从命令行构建中使用单独的目标方法,但是在使用单独的目标时检测是否正在归档可能会遇到问题(我不记得老实说)。
  • 你能解决这个问题吗?我也在追求同样的事情。谢谢!
  • 还没有!! :( 我手动增加变量。

标签: ios xcode bash shell run-script


【解决方案1】:

谢谢@Philippe,我制作了一个 bash 脚本:

# - RELEASE EBF737881ECAECD400F5A5DF
# - DEBUG EBF737871ECAECD400F5A5DF

currentVersion=$(/usr/libexec/PlistBuddy -c "print :objects:EBF737871ECAECD400F5A5DF:buildSettings:FC_VERSION" ../FormaCar.xcodeproj/project.pbxproj)
newVersion="${currentVersion%.*}.$((${currentVersion##*.}+1))"
/usr/libexec/PlistBuddy -c "set :objects:EBF737871ECAECD400F5A5DF:buildSettings:FC_VERSION $newVersion" ../FormaCar.xcodeproj/project.pbxproj
/usr/libexec/PlistBuddy -c "set :objects:EBF737881ECAECD400F5A5DF:buildSettings:FC_VERSION $newVersion" ../FormaCar.xcodeproj/project.pbxproj
echo "Old version: $currentVersion. Version bumped to: $newVersion"

其中FC_VERSION 是用户定义的参数并保存x.x.x 格式的版本。

Fastfile

lane :bumpMinorVersionNumber do
  sh "./bumpMinorVersionNumber.sh"
end

此脚本会影响 FC_VERSION 设置的次要版本,并通过 fastlane ?

更新:

不幸的是,PlistBuddy format .pbxproj 转换为 xml 格式的 plist,因此源代码控制获取堆栈并且信息丢失。所以我不能使用这个解决方案(

感谢https://stackoverflow.com/a/56179405/5790492https://nshipster.com/xcconfig/
我创建了 xcconfig 文件,将其添加到 Info 选项卡中的项目中。为 fastlane 添加了 this 插件以使用 xcconfig。现在车道看起来像:

currentBuildNumber = get_xcconfig_value(path: 'fastlane/VersionsConfig.xcconfig',
                                        name: 'FC_BUILD')
newBuildNumber = currentBuildNumber.to_i + 1
update_xcconfig_value(path: 'fastlane/VersionsConfig.xcconfig',
                      name: 'FC_BUILD',
                      value: newBuildNumber.to_s)
UI.important("Old build number: #{currentBuildNumber}. Build number bumped to: #{newBuildNumber}")

它就像一个魅力!

【讨论】:

    【解决方案2】:

    您需要更新 *.xcodeproj/ 中的文件 project.pbxproj

    例如,如果您需要更新 PATCH 的 Debug 内部版本号。首先在project.pbxproj 中找到Debug 构建的标识符,你应该得到类似13B07F941A680F5B00A75B9A 的东西。然后就可以了

    /usr/libexec/PlistBuddy -c "print :objects:13B07F941A680F5B00A75B9A:buildSettings:PATCH" project.pbxproj
    # which should give 90
    

    然后你可以更新它(先备份project.pbxproj):

    /usr/libexec/PlistBuddy -c "set :objects:13B07F941A680F5B00A75B9A:buildSettings:PATCH 91" project.pbxproj
    

    再次验证:

    /usr/libexec/PlistBuddy -c "print :objects:13B07F941A680F5B00A75B9A:buildSettings:PATCH" project.pbxproj
    # which should give 91
    

    同时签入 xcode。

    【讨论】:

    • 不幸的是,PlistBuddy 将 .pbxproj 格式转换为 xml 格式的 plist,因此源代码控制获取堆栈并且信息丢失。所以我不能使用这个解决方案(
    • @NikKov getting stack 是什么意思?
    • 表示改动太多。因为PlistBuddy set之后的project.pbxproj完全不同了。查看stackoverflow.com/a/69519219/5790492 了解该怎么做。
    【解决方案3】:

    我建议您使用类似 fastlane 的方法来完成此操作(有一个名为 increment_build_number 的操作专门执行此操作,更多信息请参见 actions page)。
    从代码的角度来看,如果您需要访问该变量,我使用类似:
    NSString *buildVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"BUILD_VERSION"];

    另外,我注意到在 plist 文件中您使用 ${PATCH} ...我认为它应该与您项目中的用户定义变量具有相同的名称。

    【讨论】:

      猜你喜欢
      • 2014-09-20
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 2013-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-26
      相关资源
      最近更新 更多