2017-06-15 275 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等...但更好地測試這個。

我希望這會幫助你;)。