2017-06-15 106 views
1

我为我的iOS应用程序使用了fastlane。在这种情况下,我有一个Xcode项目与多个目标。因此,我想在fastlane中使用一些不同的变量。但是变量不会被初始化。Fastlane不初始化环境变量--env

我已经为每个目标设置了自定义的.env文件。例如目标1的.ENV文件:

ENV_TARGET_NAME=MyAppName 
ENV_TARGET_NAME_SHORT=MyAppNameShort 

的.ENV文件名为.env.Target1并在FASTLANE文件夹设置。我已经尝试通过将文件放在我的项目的根文件夹中来查看这是否正在工作。

我FASTLANE文件如下所示:

fastlane_version "1.109.0" 

before_all do 
    ensure_git_status_clean 
    skip_docs 
end 

lane :QA_all do 
    sh "fastlane QA --env Target1" 
    sh "fastlane QA --env Target2" 
    sh "fastlane QA --env Target3" 
end 

lane :accept_all do 
    sh "fastlane QA --env Target1" 
    sh "fastlane QA --env Target2" 
    sh "fastlane QA --env Target3" 
end 

lane :live_all do 
    sh "fastlane QA --env Target1" 
    sh "fastlane QA --env Target2" 
    sh "fastlane QA --env Target3" 
end 

desc "Builing version with TEST environment" 
lane :QA do |options| 
    target_name = ENV['ENV_TARGET_NAME'] 


/* Rest of the file */ 

- 更新

使用 选项[:TARGET_NAME] 越来越目标名称。但是,我将此发送到一个.sh文件移动到IPA到正确的文件夹。

sh "sh ./scripts/ipa_deployment.sh #{version_number} #{target_name} 

当我设置硬编码,如“MyAppName”的TARGET_NAME我会看到.SH文件中的变量。但是,当我从选项[:target_name]中设置变量为空时。有人知道为什么会发生这种情况?

+1

我真的不明白你的目标是什么,但在我看来,你应该只需要调用带有你想要的选项的':QA'车道。例如, '道:QA_all做 QA {TARGET_NAME:目标1} QA {TARGET_NAME:目标2} QA {TARGET_NAME:Target3} 结束 道:QA做|选项| 将“使用#{options [:target_name}”做任何想做的事“ end' –

+0

我的目标是使用应用程序中的目标名称将.ipa文件写入文件夹,具体取决于此值。因此,每个目标都将.ipa文件放在名为目标的文件夹中。我的代码在设置target_name硬编码时工作,但没有从环境文件中获取值。 据我所知可以使用类似 '#{options [:target_name}'来获得目标名称? 我会尝试一下,并在这里再次评论 – Maurice

+0

顺便说一句,我错误的类型如何做到这一点,要获得代码中的选项,你只需要'options [:target_name]'。 '#{options [:target_name]}'是将它放入Ruby字符串中。 –

回答

0

你做错了。 作为文档说https://docs.fastlane.tools/advanced/#environment-variables 它的负载第一.env,然后你.env.myTarget

不过看你在做什么,你跑fastlane QA_all(f.ex.)FASTLANE的这个实例没有env可言!这就是为什么你有一个空字符串。

即使当你在做sh ...这会在另一个上运行,我不确定,过程?,输出将不会与你开始fastlane的相同。

如果你想运行3个构建/部署脚本3个不同的目标(我明白的应用程序)。您应该更好地使用脚本,并将其称为3快车道配置。

我还没有尝试过,但应该在脚本上序列化,启动你的第一个fastlane Target1,当它完成时,运行2等...但更好地测试这个。

我希望这会帮助你;)。