2017-06-15 14 views
1

私のiOSアプリケーションにfastlaneを使用しています。この場合、私は複数のターゲットを持つxcodeプロジェクトを持っています。そのため、私はファストレーンでいくつかの異なる変数を使いたいと思っています。ただし、変数は初期化されていません。Fastlaneが環境変数を初期化していません--env

ターゲットごとにカスタム.envファイルを設定しました。例えば、ターゲット2の.envファイル:

ENV_TARGET_NAME=MyAppName 
ENV_TARGET_NAME_SHORT=MyAppNameShort 

は.envファイルが.env.Target1と呼ばれ、fastlaneフォルダに設定されています。私はすでに、プロジェクトのルートフォルダにファイルを置いて、これが動作しているかどうかを確認しようとしました。

私fastlaneファイルは、次のようになります。 - [:TARGET_NAME] は、ターゲット名を取得している

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 */ 

オプションを使用して

を更新します。しかし私は正しいフォルダにipaに移動するためにこれを.shファイルに送ります。

「MyAppName」のようにtarget_nameをハードコードに設定すると、変数が.shファイル内に表示されます。しかし、オプション[:target_name]から変数を設定すると、変数は空になります。なぜこれが起こっているのか誰かのアイデア?

+1

あなたの目標は本当に分かりませんが、希望するオプションを使って ':QA'レーンを呼び出すだけでいいと思います。例えば、 'レーン: QA {TARGET_NAME:ターゲット2}: QA {ターゲット2 TARGET_NAMEを}行うQA_all QA {TARGET_NAME:Target3} 端レーン:QAを行う|オプション| puts "#{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 それはfastlaneのこのインスタンスは、まったくenvを持っていない!.env最初にして、あなたの.env.myTarget

しかし、あなたは何をしている見て、あなたの実行fastlane QA_all(f.ex.)ロードだと言いますだからあなたは空の文字列を持っているのです。

でも、あなたがsh ...を実行しているときに、これは別のプロセスで実行されますが、私は確かではありませんか?プロセスは?¿?、出力はfastlaneを開始したものと同じではありません。

3つの異なるターゲットに対して3つの構築/展開スクリプトを実行する場合(私は理解しています)。 3つのファストレーン構成を呼び出すスクリプトの方がよいでしょう。

私は試していませんが、スクリプトでシリアル化して、最初のファストレーンTarget1を起動し、終了したら2などを実行してください。

これがあなたに役立つことを望みます。

関連する問題