将内部版本号传递给 Fastlane/Gym 中的 xcargs

Posted

技术标签:

【中文标题】将内部版本号传递给 Fastlane/Gym 中的 xcargs【英文标题】:Passing a Build Number to xcargs in Fastlane/Gym 【发布时间】:2018-08-10 21:32:01 【问题描述】:

我有一个带有一些应用扩展的应用。为了保持应用扩展和主应用使用相同的版本和内部版本号,我配置了一个用户定义的变量,例如“MY_BUILD_NUMBER”和“MY_VERSION”。在我的应用程序和我的扩展 Info.plist 文件中,我只需通过 $MY_BUILD_NUMBER$MY_VERSION 加载这些变量。

这个过程非常适合保持我的版本和构建同步。我现在正在尝试研究是否可以通过健身房将 Jenkins 的内部版本号传递到 fastlane 并更新我的 xcargs。但是,我一直未能正确使用所需的引号。

例子表明我需要这样设置:

gym(xcargs: "my_build_number='123'")

但是当我尝试将其作为选项传入时,我可以传入“123”的内部版本号。但我正在努力解决如何在 xcargs "my_build_number='123'" 中插入我需要的字符串。

有没有人成功地完成了这样的事情,可以提供一些见解?我需要以某种方式转义引号吗?

【问题讨论】:

【参考方案1】:

我们在fastlanegym之前同时设置应用和扩展的捆绑版本:

set_info_plist_value(
  key: 'CFBundleVersion',
  value: build_number,
  path: info_plist_file
)

version_string = get_info_plist_value(
  key: 'CFBundleShortVersionString',
  path: info_plist_file
)

update_info_plist(
  xcodeproj: project_filepath,
  plist_path: notification_service_info_plist_relpath,
  block: lambda do |plist|
    plist['CFBundleVersion'] = build_number
    plist['CFBundleShortVersionString'] = version_string
  end
)

【讨论】:

【参考方案2】:

我可以使用以下语法将变量作为 xcarg 传递:

变量 -> @build_number

xcargs: "BUILD_VERSION='#@build_number'"

~或~

变量 -> ENV["BUILD_NUMBER"]

xcargs: "BUILD_VERSION='#ENV["BUILD_NUMBER"]'"

完整示例:

@build_number = latest_testflight_build_number(app_identifier: @AppBundleID) + 1
increment_build_number(build_number: @build_number)
build_app(scheme: "Release", export_method: "app-store", xcargs: "BUILD_VERSION='#@build_number'")

【讨论】:

这应该是公认的答案

以上是关于将内部版本号传递给 Fastlane/Gym 中的 xcargs的主要内容,如果未能解决你的问题,请参考以下文章

Fastlane Gym 配置 Ad Hoc Distribution

捕获唯一的 Maven SNAPSHOT 内部版本号

将外部选择行变量传递给oracle中的内部选择

避免 nodeJs 中的回调地狱/将变量传递给内部函数

无法将值传递给 mvc 5 中的内部类属性

将 $@ 传递给 shell 脚本中的函数