gpt4 book ai didi

ios - 您可以将环境变量传递给 xcodebuild 吗?

转载 作者:可可西里 更新时间:2023-11-01 05:50:05 24 4
gpt4 key购买 nike

我有两个运行功能测试的 Jenkins 作业。一个作业用于每当提交代码审查的内容时,另一个作业在将内容推送到 master 时运行。

因为这些是功能测试,所以它们测试最终修改用户状态的应用程序的整个流程。我们遇到的问题是每个作业都使用相同的帐户,因此每当两个 Jenkins 作业并行运行时,它们都会修改同一个帐户,这可能会使它们处于意外状态并导致测试失败。

我的计划是使用 Jenkins 的 BUILD_NUMBER 环境变量,并通过对它应用一些算法,我可以为该作业提供一个有保证的唯一编号。然后可以将这个唯一编号作为环境变量传递到 xcodebuild 中,测试可以使用这个编号来确保每个 Jenkins 都在一个唯一的帐户上工作。

问题是我找不到任何方法将环境变量传递给 xcodebuild。我知道您可以通过 xcodebuild(或 xcargs,如果您使用的是 FaSTLane)传递用户定义的build设置,但这些值似乎无法作为环境变量访问。预处理器可以访问它们,因此您可以使用它将值导出到您的 Info.plist,然后从那里读取它。但是你已经将这些值烘焙到你的二进制文件中,除非你重建它,否则它不能改变,这是不理想的。同样在这个时间点,我可以让 Jenkins 写入磁盘上的文件并从中读取测试。它本质上是相同的功能,使我不必传递build设置。

最佳答案

我记得使用类似 GCC_PREPROCESSOR_DEFINITIONS 的东西来传递我自己的 var

我不得不对引号进行 shell 转义。我最终将其编码到我的 faSTLane 构建文件中。

在 ruby 中它看起来像这样:

tmp_other_flags = {
GCC_PREPROCESSOR_DEFINITIONS: '"DISABLE_PUSH_NOTIFICATIONS=1"',
TARGETED_DEVICE_FAMILY: '1',
DEBUG: '1'
}
other_flags = tmp_other_flags.map do |k, v|
"#{k.to_s.shellescape}=#{v.shellescape}"
end.join ' '
puts "___ Custom Flags also know as xcargs:"
puts other_flags

gym(
clean: true,
silent: false,
project: proj_xcodeproj_file,
archive_path: "build-ios-xcarchive",
destination: 'generic/platform=iOS',
use_legacy_build_api: true,
output_directory: 'build-ios',
output_name: "MyApp.ipa",
export_method: 'ad-hoc',
codesigning_identity: 'iPhone Distribution: company (12345)',
provisioning_profile_path: './dl_profile_com.company.myapp.iphone.prod_ad_hoc.mobileprovision',
scheme: 'MyApp',
configuration: 'Debug',
xcargs: other_flags
)

它最终在 shell 中被这样调用:

set -o pipefail && xcodebuild -scheme 'MyApp' -project 'platforms/ios/MyApp.xcodeproj' -configuration 'Debug' -destination 'generic/platform=iOS' -archivePath 'build-ios-xcarchive.xcarchive' GCC_PREPROCESSOR_DEFINITIONS=\"DISABLE_PUSH_NOTIFICATIONS\=1\" TARGETED_DEVICE_FAMILY=1 DEBUG=1 clean archive CODE_SIGN_IDENTITY='iPhone Distribution: My Company (Blah)' | tee '/Users/andxyz/Library/Logs/gym/MyApp-MyApp.log' | xcpretty

xcodebuild - how to define preprocessor macro?

所以,也许您可​​以在 faSTLane 中使用 ruby​​ 引入您自己的环境变量。通过将您的 var 添加到 GCC_PREPROCESSOR_DEFINITIONS 部分

ruby可以访问环境,例如:

ENV.fetch('TERM_PROGRAM') #returns "iTerm.app" on my machine

所以跟着上面的:

tmp_other_flags = {
GCC_PREPROCESSOR_DEFINITIONS: "MY_VARIABLE=#{ENV.fetch('MY_VARIABLE')}" ,
TARGETED_DEVICE_FAMILY: '1',
DEBUG: '1'
}

HTH

关于ios - 您可以将环境变量传递给 xcodebuild 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39478895/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com