概要
こちらの記事はXcodeの自動テストツールであるfastlaneの導入手順に関する手引書になっています。
元記事はこちらの記事になります。
fastlane Tutorial: Getting Started
こう見るとやはり最初の導入時点での作業はかなりあります。ですが、これだけの作業量でもチーム開発でしている場合にはメリットがかなりあります。そのため大体のアプリの現場ではfastlaneを導入してテストの自動化、アプリのアップロードの自動化を図っています。
なのでもうfastlaneの実装方法は分かりませんでは話しにならないケースが増えてきているためこれを機械にfastlaneを再度見直すためにこちらでまとめて(翻訳)みました。翻訳の許可を頂いてます。
はじめに
このfastlaneのチュートリアルでは、fastlaneを使用してAppをApp Storeにプロビジョニングや、スクリーンショット作成・構築・アップロードする方法を学びます。
素晴らしい瞬間ですね。数日、数週間、場合によっては数か月もの時間をかけてアプリを作成し、世界にシェアする準備が整いました。あと最後にしなければならないのはApp Storeに開発したアプリを提出することだけです。それはどれほど難しいでしょう?
厄介な仕事の山を手がかりにしましょう:たくさんのスクリーンショットをキャプチャし、あなたのアプリケーションをApple DeveloperとApp Store Connectのサイトに追加し、バイナリとメタデータをアップロードし、そして他の無意味な仕事をします! あー面倒ですね!
もっと良い方法はありませんか。サポートされているすべての言語で、サポートされているすべてのデバイスですべてのスクリーンショットを自動的に取得する単一のコマンドを実行できさえすればどんなに楽なことか。これらのスクリーンショットをアップロードするためのコマンドが1つしかないなら、アプリをAppleのデベロッパーサイトに追加してすべて送信します。あなたが保存したいと思うすべての時間を考えてください!
さて、幸運なことがあります。作成者のFelix Krauseとlead maintainerのJosh Holtzのおかげで、これ以上のことを行うことができるツールがあります。 これはfastlanedと呼ばれます。 このチュートリアルでは、fastlaneを使ってApp Storeにアプリをデプロイする方法を学びます。 きっとあなたの新しい親友になるでしょう。 Googleも2017年に買収してfastlaneと提携しました。
このチュートリアルでは、あなたが有料のApple Developerアカウントを持っていること、およびcommand line、Xcode、そしてアプリ送信プロセスについての基本的な知識があることを前提としています。 アカウントを持っていない場合は、このチュートリアルが役立ちます。
Getting Started
まず、このページの上部または下部にあるDownload Materialsボタンを使用してこのチュートリアルの材料をダウンロードしてから、適切な場所に保存します。
このチュートリアルのサンプルアプリ、mZone Pokerは、ノーリミットテキサスホールデムのトーナメント用のポーカー計算機です。 それはあなたのチップ数と現在のビッグブラインドレベルに基づいて推奨される行動を表示します。
XcodeでmZoneプロジェクトを開き、ビルドして実行し、チェックアウトします。
Setting Up fastlane
ツールであるfastlaneはRubyスクリプトの集まりなので、正しいバージョンのRubyがインストールされている必要があります。 お使いのOSにはデフォルトでRuby 2.0が付属している可能性がありますが、ターミナルを開いて次のように入力すると、そうであるかどうかを確認できます。
ruby -v
インストールされていない場合、最も簡単な方法は、HomeOSのmacOS用パッケージマネージャのHomebrewを使うことです。
次のターミナルコマンドを入力して自作をインストールします。
/usr/bin/ruby -e \
"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
それから、Rubyをインストールします。
brew update && brew install ruby
brew link --overwrite ruby
を実行するか、Homebrewから指示された場合は新しいターミナルセッションを開きます。
Xcode Command Line Tools(CLT)も必要です。 確実にインストールするため、「ターミナル」を使います。
xcode-select --install
Xcode CLTがすでにインストールされている場合は、このエラーが発生します。xcode-select: error: command line tools are already installed, use "Software Update" to install updates
そうでない場合は、プロンプトが表示されたらインストールを続行します。
これでfastlaneをインストールする準備が整いました! 次のコマンドを入力してください。
sudo gem install -n /usr/local/bin fastlane --verbose
Homebrewを使用したい場合は、次のコマンドを入力してください。
brew cask install fastlane
El Capitanとともに、OS XはRootlessとも呼ばれるSystem Integrity Protectionを導入しました。 /usr/local/binはまだ書き込み可能なので、そこにfastlaneをインストールします。
システムパスワードを入力すると、ターミナルにインストールが進行中であることを示す一連のアクティビティが表示されます。 これには数分かかることがあるので、コーヒーを飲んだり、犬の散歩をしたり、ゾンビと戦う戦術を磨いたりして暇を潰してください(笑)。
インストールが完了したら、プロジェクトにfastlaneを設定する準備が整いました。ですが、あなたがそうする前にここにfastlaneツールのハイレベルな外観があります。
The fastlane Toolchain
その魔法が機能するために、fastlaneは以下のツールのセットをすべて一つのroof下に持ってきます:
- produceは、App Store ConnectとApple Developer Portalの両方に新しいiOSアプリケーションを作成します。
- certはiOSコード署名証明書を自動的に作成して管理します。
- sighは、プロビジョニングプロファイルを作成、更新、ダウンロード、および修復します。
- snapshotはあなたのiOSアプリのローカライズされたスクリーンショットをすべての機器で自動化します。
- frameitはあなたのスクリーンショットを正しいデバイスのframeに入れます。
- gymはあなたのiOSアプリをビルドしてパッケージ化します。
- deliverはスクリーンショット、メタデータ、そしてあなたのアプリをApp Storeにアップロードします。
- pemはあなたのプッシュ通知プロファイルを自動的に生成して更新します。
- spaceshipは、AppleデベロッパーセンターとApp Store Connect APIにアクセスできるRubyライブラリです。
- pilotはTestFlightの展開を自動化し、ベータテスターを管理します。
- boardingはベータテスターを招きます。
- matchはGitを使ってあなたのチーム全体で証明書とプロビジョニングプロファイルを同期させます。
- scanはアプリのテストを実行します。
今日はこれらのツールをいくつか使用します。今のところ理論としては十分です。このチュートリアルを実行して、早い段階で作業を開始しましょう。
Adding fastlane to Your Project
ターミナルを開き、cd
コマンドでmZone starter projectに移動します。たとえば、デスクトップにmZone_Sample_Projectフォルダを追加した場合は、次のように入力します。
cd ~/Desktop/mZone_Sample_Project/mZone
mZone starter projectを作業ディレクトリとして設定します。
そして、次のように入力しましょう。
fastlane init
fastlaneを初期化します。
「permission denied」というエラーが出た場合は、このコマンドの前に
sudo
を付けてください。
出力後、ファストレーンは「What would you like to use fastlane for?」と尋ねます。
fastlaneでは「recommend[s] automating one task first,」が、この1つのチュートリアルで複数の自動化されたアクションを実装するので手動設定を開始するには4を入力します。outputを読み、プロンプトが出されたらEnterを押します。
mZoneフォルダーに戻ると、いくつかの新しいことがわかります。Gemfileには、プロジェクト依存関係としてのfastlane gemと、次のものを含むfastlaneフォルダーが含まれています。
- Appfile : アプリの識別子、Apple ID、およびfastlaneがアプリを設定するために必要なその他の識別情報を格納します。
- Fastfile: fastlaneアクションを呼び出すために作成するlanesを管理します。
選択したテキストエディタでFastfileを開き、テキストエディタでsmart quotesがサポートされている場合はsmart quotesを無効にしてから、ファイルの内容を次のように置き換えます。
Fastfile
default_platform(:ios)
platform :ios do
# 1
desc "Create app on Apple Developer and App Store Connect sites"
# 2
lane :create_app do
# 3
produce
end
end
あなたがRubyをこれまで見たことがないなら、これはあなたにとってちんぷんかんぼうに見えるかもしれません。 このコードの動作は次のとおりです。
- laneの説明を入力します。 (laneは連続したタスクのワークフローです)。
- このレーンに
create_app
という名前を付けます。 - 開発者ポータルとApp Store Connectの両方にアプリを追加するためにproduceを使用します。
これで、一番最初のlaneを作成しました。
Fastfileを保存してからAppfileを開きます。 ポンド記号(#)を削除してapple_idで始まる行のコメントを外し、**[[APPLE_ID]]**を実際のApple IDのユーザー名に置き換えます。 この情報を今すぐ設定することで、fastlaneは後でそれを繰り返し要求する必要がなくなります。
App Store ConnectとApple Developer Portalのユーザー名が異なる場合は、apple_idの行を次のように置き換えます。
apple_dev_portal_id("[[APPLE_DEVELOPER_ACCOUNT_USERNAME]]")
itunes_connect_id("[[APP_STORE_CONNECT_ACCOUNT_USERNAME]]")
> 次に、各username placeholderをそれぞれのusernameに置き換えます。
閉じる前に**Appfile**を保存してください。
## Creating Your App
プロジェクトフォルダ内で「Terminal」を開き、次のように入力します。
```sh
fastlane create_app
これは作成したばかりのcreate_app
laneを走らせます。
このようなものが見えるはずです。
その出力の先頭で、fastlaneはgemバンドルのコンテキストでfastlaneをより速く起動するために、fastlaneコマンドの前に「bundle exec」を付けることを提案してきます。今後はそうすることができます。
プロンプトが表示されたら、App Store Connectのパスワードを入力します。 デベロッパーポータルに複数のチームがある場合は、mZone Pokerアプリに使用するチームに対応する番号を入力してください。
最終的には、商品はあなたのアプリのbundle IDを入力するように頼みます。作成する時が来ました。
bundle IDは、App Store Connectでこれまでに使用されたことのある他のすべてのバンドルIDとは異なるものにする必要があります。次の形式を使用して、ユニークなバンドルidentifierを入力してください。
com.mZone-Poker.[Insert your email address minus “@” and “.”]
(Insert your email address minus “@” and “.” = メールアドレスの逆ドメイン)
バンドルIDがすでに取得されている場合は、それを編集してユニークなIDになるまで送信をやり直してください。
次にアプリ名を送信するように求められたら、それもユニークにする必要があります。次の形式を試してください。
mZone Poker [Insert your email address minus “@” and “.”]
アプリ名は30文字を超えることはできません。必要に応じて切り捨ててください。
App Store Connectアカウントに複数のチームがある場合は使用するチームに対応する番号を入力してください。
Apple Developerアカウントに問題があることを示すエラーが表示された場合(たとえば、新しいプログラム契約に同意する必要がある場合など)、問題を解決してからproduce
をもう一度実行してください。
アプリ名が利用できない場合、プロセスはそこでエラーで終了します。もう一度produce
を実行し、Apple IDと作成したばかりのBundle IDを再入力してから、クリエイティブマッスルを曲げてユニークなIDを作成するか、この段落の先頭に戻って繰り返します。イライラすることはわかっていますが無限ループを解消できると確信しています。
Apple Developer CenterとApp Store Connectにログインします。するとあなたのアプリはすでに両方に追加されています。なんてクールなんでしょう。
Appfileを再度開き、app_identifierで始まる行のコメントを外し、**[[APP_IDENTIFIER]]**を作成したばかりのバンドルIDに置き換えます。
早くチームを選ばなければならなかった場合、lanesを走らせるときに再び入力する必要がないようにチームの名前を追加します。 Developer Portal/App Store Connect team nameを指定するには、以下を追加します。
team_name ("[[TEAM_NAME]]")
[[TEAM_NAME]]をあなたのチームの名前に置き換えます。
Generating the Deliverfile
ターミナルに戻って、入力しましょう
bundle exec fastlane deliver
fastlaneから「Do you want to setup deliver?」と質問された時にはyと入力して答えましょう。
次は「Would you like to use Swift instead of Ruby?」と質問されます。このチュートリアルの執筆時点では、iOS開発者としてはおそらくSwiftの方が快適ですが、fastlane.swiftはまだベータ版です。 fastlaneファイルでRubyを使用するには、nを入力します。
配信が正常に完了したら、FinderでmZone/fastlaneに戻ると、新しいことがいくつかわかります。
- metadataディレクトリ。アプリのメタデータの大部分を保持します。
- Deliverfile、残りのいくつかのメタデータを保持します。
- screenshotsディレクトリ。アプリのスクリーンショットが含まれる。
metadataディレクトリには、説明、キーワード、カテゴリなどの一般的なApp Storeアイテムにちなんで名前が付けられたテキストファイルがたくさんあります。Fastlaneは、これらのファイルを使ってApp Store Connectにアプリのメタデータ情報を送信します。
en-US/description.txtを開き、以下を追加します。
mZone is a simple poker calculator for No Limit Texas Hold 'Em tournaments that displays a recommended course of action based on your chip count and the current big blind level.
keywords.txtに追加:
Poker, Cards, Gambling
name.txtにすでにアプリの名前が含まれていることを確認してから、privacy_url.txtとsupport_url.txtの両方にhttps://www.raywenderlich.com
を追加します。
このアプリはフランス語と英語の両方をサポートしていますが、en-USフォルダのみが存在します。これを修正するには、同じディレクトリにen-USフォルダのコピーを作成し、fr-FRという名前を付けます。 このfastlaneチュートリアルを短くするために、メタデータをフランス語に翻訳する必要はありません…今回はですが。
次に、メタデータフォルダーに:
-
copyright.txtに
Copyright(c)2019 Razeware LLC
を追加してください。 -
primary_category.txtに
Game
を追加します。 -
primary_first_sub_category.txtに
Card
を追加します。 -
primary_second_sub_category.txtに
Casino
を追加します。
次に、同じフォルダー内で好みのtext/codeエディターを使用して、app_store_rating_config.jsonという名前のJSONファイルを作成します。
{
"CARTOON_FANTASY_VIOLENCE": 0,
"REALISTIC_VIOLENCE": 0,
"PROLONGED_GRAPHIC_SADISTIC_REALISTIC_VIOLENCE": 0,
"PROFANITY_CRUDE_HUMOR": 0,
"MATURE_SUGGESTIVE": 0,
"HORROR": 0,
"MEDICAL_TREATMENT_INFO": 0,
"ALCOHOL_TOBACCO_DRUGS": 0,
"GAMBLING": 2,
"SEXUAL_CONTENT_NUDITY": 0,
"GRAPHIC_SEXUAL_CONTENT_NUDITY": 0,
"UNRESTRICTED_WEB_ACCESS": 0,
"GAMBLING_CONTESTS": 0
}
この評価設定はアプリが「frequent/intense」擬似ギャンブル(つまり、値= 2)を持ち、他のリストされたコンテンツのどれも持っていないことを示します。 このファイルは適切な年齢評価を割り当てるために必要な情報をアップルに提供します。
そして最後に、review_informationフォルダで、メールアドレスをemail_address.txtに、名前をfirst_name.txtに、姓をlast_name.txtに、電話番号をphone_number.txtにそれぞれ追加します。電話番号の前に「+」と国コードを続けます。たとえば+44 844 209 0611と言ったように。
おめでとうございます。 送信に必要なすべてのメタデータを追加しました。
ここにメタデータオプションとDeliverfile設定の完全なリストがあります。
Automating Screenshots
スクリーンショットを撮るのは面倒です。アプリがサポートするデバイスと言語が多ければ多いほど、書き込み時間は長くなります。辛いですね!
mZone Pokerは2つの言語と2つのiPhoneのアスペクト比をサポートしています。 あなたがそれぞれの言語とスクリーンのアスペクト比のためにデバイスごとに5つのスクリーンショットを撮らなければならなかったならば、それは20枚のスクリーンショットになるでしょう!ただし、fastlaneを使用すると、単一のコマンドを実行することでこれをすべて実行できます。
「Terminal」に入力して、スナップショット用にプロジェクトを設定します。
fastlane snapshot init
Snapfileファイルがfastlaneフォルダに表示されます。それを開きファイルの内容を次のファイルで置き換えます。
# 1 - A list of devices you want to take the screenshots from
devices([
"iPhone 8 Plus",
"iPhone SE"
])
# 2 - A list of supported languages
languages([
'en-US',
'fr-FR'
])
# 3 - The name of the scheme which contains the UI Tests
scheme("mZone Poker UITests")
# 4 - Where should the resulting screenshots be stored?
output_directory "./fastlane/screenshots"
# 5 - Clears previous screenshots
clear_previous_screenshots(true)
ここでは次のように指定します。
- fastlaneにスクリーンショットを取り込ませたいデバイス。
- あなたがキャプチャーしたローカライズ言語。
- スクリーンショットの自動化を実行するためにすぐに作成するXcodeスキームの名前。
- スクリーンショットの出力ディレクトリ。
- そのfastlaneは新しいものをキャプチャする前に出力ディレクトリ内のすべてのスクリーンショットを消去する必要があります。
閉じる前にファイルを保存してください。
ターミナルに戻ってfastlane snapshot init
を実行した後に現れた指示に注意してください:
それがあなたが次にすることです。
Creating a Test Target
XcodeでmZone Poker.xcodeprojを開き、次にFile▸New▸Targetに移動します。iOSタブのTestセクションで、iOS UI Testing Bundleを選択してからNextをクリックします。
Product NameフィールドにmZone Poker UITestsと入力し、Finishをクリックします。
mZone Poker UITestsフォルダーがXcodeの左側のナビゲーターメニューに表示されます。
targetの全般ページに移動します。mZone Poker targetの下には、mZone Poker UIテストは表示されません。mZone Poker UITestsを選択し、Signing for “mZone Poker UITests” requires a development teamというエラーが表示された場合は、チームを選択してください。
fastlaneのディレクトリに戻り、SnapshotHelper.swiftをXcodeのプロジェクトナビゲータのmZone Poker UITestsフォルダの下にドラッグします。Choose options for adding these filesウィンドウが表示されたら、次のように選択します。
- Copy items if needed.
- Create groups.
- mZone Poker UITests.
Finishをクリックする前に、mZone Poker targetの選択を解除してください。
次に、mZone Poker UITestsでmZone_Poker_UITests.swiftを開きます。setUp()
とtearDown()
の両方を削除してから、testExample()
の内容を次のように置き換えます。
// 1
let app = XCUIApplication()
setupSnapshot(app)
app.launch()
// 2
let chipCountTextField = app.textFields["chip count"]
chipCountTextField.tap()
chipCountTextField.typeText("10")
// 3
let bigBlindTextField = app.textFields["big blind"]
bigBlindTextField.tap()
bigBlindTextField.typeText("100")
// 4
snapshot("01UserEntries")
// 5
app.buttons["what should i do"].tap()
snapshot("02Suggestion")
このコードの動作は次のとおりです。
- スナップショットを撮るための設定をして、アプリを起動します。
- chip Countテキストフィールド(ストーリーボードでaccessibility identifierが「chip count」に事前設定されていることを確認する事)をタップし、そのフィールドに10を入力します。
- Big Blindテキストフィールドをタップして100を入力します。
- スナップショットを作成してアプリがuser entriesをどのように表示するかを示します。
- **What Should I Do?**をタップします。ボタンを押すと、別のスクリーンショットが表示され、警告が表示されます。
テキサスホールデムにはプレイヤーの位置によってボタン・ザガン・SB・BBと言ったポジションがあります。Big Blind(ビッグブラインド)というのはそのポジションをさしています。
次に、mZone Poker UITestsスキームを作成するには、実行ボタンと停止ボタンのすぐ右にあるボタンをクリックして、Manage Schemes…を選択します。fastlaneのアクセスを許可するには、mZone Poker UITestsの横にあるShowと両方のターゲットの横にある[Shared]を選択します。 次に、mZone Poker UITestsの行とEditをクリックします。
スキームが表示されない場合は、" + "をクリックしてTargetドロップダウンからmZone Poker UITestsを選択します。
スキームエディタの左側のメニューでBuildをクリックします。 次に、mZone Poker UITestsターゲットの横にあるTestとRunオプションを選択してからCloseをクリックして変更を保存します。
XcodeのままにしてFastfileを開き、create_app
laneの下に次の行を追加します。
desc "Take screenshots"
lane :screenshot do
snapshot
end
このscreenshot
laneは、Snapfileの設定に従ってスクリーンショットを撮るためにスナップショットを使用します。
Fastfileを保存し、ターミナルに戻って次のように入力します。
bundle exec fastlane screenshot
今、みてください…スクリーンショットは、あなたが特に何もせずともキャプチャされています!不気味な仕事をスキップする喜びに浸ってください。
スナップショットが完了すると、スクリーンショットのHTMLプレビューが自動的に開きます。
snapshotはSnapfileにリストされているシミュレータにアクセスする必要があります。そのリストから1つもデバイスが見つからない場合は、Window▸Devicesの順に選択して、それらをXcodeに追加してください。 次に、+ をクリックして新しいシミュレータを追加します。
あいまいなシミュレータ名に関する警告が表示された場合は、重複するシミュレータを削除するか、Snapfile内の名前と一致するようにシミュレータ名を変更する必要があります。
たった1つのコマンドで、すべてのデバイスのスクリーンショットを英語とフランス語の両方で作成できます - 因みにそれ以上うまくいきません。
Creating the IPA File
アプリを構築してアップロードすることも時間のかかるプロセスです。 fastlaneがgymのツールを使ってこれを実現できるのです。
XcodeのmZone Pokerターゲットにbundle identifierとsigning identityを設定していることを確認してください。
ターミナルで以下を実行します。
fastlane gym init
するとGymfileが作成されます。
Gymfileを開き、その内容を次のファイルで置き換えます。
# 1
scheme("mZone Poker")
# 2
output_directory("./fastlane/builds")
# 3
include_bitcode(false)
# 4
include_symbols(false)
#5
export_xcargs("-allowProvisioningUpdates")
このコードは以下のことをしています。
- mZone Pokerのschemeを指定します。
- fastlaneが.ipaアプリのバイナリファイルを保存する場所を指定します。
- ビルドからBitcodeを除外します。Bitcodeを使用すると、Appleはあなたのアプリを最適化することができますが、今はビルドをスピードアップするためにそれを除外します。
- ビルドからsymbolsを除外します。symbolsを含めると、Appleはアプリのデバッグ情報にアクセスできるようになりますが、今はビルドをスピードアップするために除外します。
- Xcodeが自動プロビジョニングを使用できるようにします。
Fastfileを開き、screenshotのlaneの下に以下を追加します。
desc "Create ipa"
lane :build do
# 1
enable_automatic_code_signing
# 2
increment_build_number
# 3
gym
end
これはbuildlaneです:
- Xcodeで自動プロビジョニングを有効にします。
- ビルド番号を1つ増やします(各ビルド番号はApp Store Connectのアップロード要件ごとにユニークです)。
- 署名付き**.ipa**ファイルを作成します。
Fastfileを保存してから、ターミナルでビルドを実行します。
bundle exec fastlane build
fastlaneからcertificatesにアクセスするためにkeychainのパスワードを入力するように求められた場合は、入力してください。同じ許可を繰り返し付与したくない場合は、Allow Alwaysを選択します。 ビルドが正常に完了すると、署名された**.ipaがfastlane/build**に表示されます。
Uploading to App Store Connect
スクリーンショット、メタデータ、および.ipaファイルをApp Store Connectにアップロードするには、deliverを使用します。
まず、Deliverfileの内容を次のように置き換えます。
# 1
price_tier(0)
# 2
submission_information({
export_compliance_encryption_updated: false,
export_compliance_uses_encryption: false,
content_rights_contains_third_party_content: false,
add_id_info_uses_idfa: false
})
# 3
app_rating_config_path("./fastlane/metadata/app_store_rating_config.json")
# 4
ipa("./fastlane/builds/mZone Poker.ipa”)
# 5
submit_for_review(true)
# 6
automatic_release(false)
ここでは、
- 価格帯を0に設定します。これは無料アプリです。
- レビューのために手動で送信する際にAppleがあなたに提示する質問に答えてください。
- アプリ評価設定の場所を指定します。
- .ipaファイルの場所を指定します。
- 審査のためにアプリを自動的に送信するには、
submit_for_review
をtrue
に設定します。 -
automatic_release
をfalse
に設定すると、アプリの審査で承認された後にアプリを手動でリリースする必要があります。
Fastfileを開きます。build
laneの後に、次を追加してください。
desc "Upload to App Store"
lane :upload do
deliver
end
次に、fastlaneでメタデータのプレビューを作成するには、Terminalを開いて次のコマンドを実行します。
bundle exec fastlane upload
すべて問題なければ、Terminalにyと入力して承認します。
laneが完成したら、App Store Connectにログインします。スクリーンショット、メタデータ、およびビルドがあるはずです。レビューを待ってください。
Putting It All Together
アプリの作成、スクリーンショットの作成・構築・アップロードのためのlaneが別々に用意されました。それらを1つずつ呼び出すことはできますがあまりしたくないですね。
本当は、、、あなたはすべてを1つのコマンドでしたいはずです。
Fastfileを開きます。upload
laneの後に、以下を追加します。
desc "Create app, take screenshots, build and upload to App Store"
lane :do_everything do
create_app
screenshot
build
upload
end
するとdo_everything
がすべての面倒をみてくれます。
さらに、laneを完全にハンズフリーにするには、Deliverfileを開き最後に以下を追加します。
force(true)
これによりfastlaneはスクリーンショットとメタデータの承認をスキップします。
そしてfastlaneにすべての重い作業をやらせるには次のコマンドを実行します。
bundle exec fastlane do_everything
Supporting Multiple Targets
mZone_Sample_ProjectのMultiple_Targetsフォルダーを参照してください。XcodeでMultiple_Targets/mZone-2/mZone Poker.xcodeprojを開きます。 mZone Poker Pro と mZone Poker Pro UITestという2つの新しいtargetを除いて、このプロジェクトは最初のプロジェクトとよく似ているはずです。
実行中のmZone PokerとmZone Poker Proを切り替えるには、RunボタンとStopボタンのすぐ右側にあるボタンをクリックしてから、実行するアプリのスキームを選択します。
mZone Poker Proをビルドして実行します。 これはmZone Pokerとほぼ同じですが、より詳細な提案を返します。
Generalページで、mZone PokerのバンドルIDを以前に作成したものに設定します。
それから、mZone Poker Proの仮の新しいバンドルIDを設定します。 例えば:
com.mZone-Poker-Pro.[Insert your email address minus “@” and “.”]
それでは、Finderに戻ってください。GemfileとfastlaneディレクトリをmZoneからmZone-2にコピーして貼り付けます。次にmZone-2/fastlane/SnapshotHelper.swiftを新しいプロジェクトにドラッグします。Choose options for adding these filesのウィンドウが表示されたら、以下を選択します。
- Copy items if needed.
- Create groups.
- mZone Poker UITests.
- mZone Poker Pro UITests.
それから、Finishをクリックします。
Setting Up Multiple Environments
環境(.env)ファイルには、実行中にアプリがさまざまにアクセスできる構成設定が含まれています。このプロジェクトでは、2つの環境を作成します。各アプリケーションターゲットに対して1つずつです。
お気に入りのテキストエディタを開き、smart quotesを無効にして次のように入力します。
SCHEME = "mZone Poker"
TEST_SCHEME = "mZone Poker UITests"
BUNDLE_IDENTIFIER = "[[YOUR UNIQUE BUNDLE IDENTIFIER]]"
APP_NAME = "[[YOUR UNIQUE APP NAME]]"
この環境は、mZone Pokerの環境スキーム、テストスキーム、バンドルID、およびアプリ名を保持しています。 [[YOUR UNIQUE BUNDLE IDENTIFIER]]をmZone PokerのバンドルIDに置き換え、[[YOUR UNIQUE APP NAME]]をアプリケーションのユニークな名前に置き換えます。
ファイルを**.env.mZone_PokerとしてmZone-2/fastlane**に保存します(ファイル拡張子は付けません)。デフォルトでは.env変数が隠しファイルになっているので、Finderで.env.mZone_Pokerが表示されない場合は、Shiftキー+Commandキーを押しながらFinderで隠しファイルを表示します。
同様に、次のものを含む2番目のファイルを作成します。
SCHEME = "mZone Poker Pro"
TEST_SCHEME = "mZone Poker Pro UITests"
BUNDLE_IDENTIFIER = "[[YOUR UNIQUE BUNDLE IDENTIFIER]]"
APP_NAME = "[[YOUR UNIQUE APP NAME]]"
[[YOUR UNIQUE BUNDLE IDENTIFIER]]にmZone Poker Proの現在のバンドルIDを置き換えてください。 次に、仮のユニークのアプリ名を作成します。
mZone Poker Pro [Insert your email address minus “@” and “.”]
アプリ名は30文字を超えることはできないため、必要に応じて切り捨ててください。
同じディレクトリに**.env.mZone_Poker_Pro**としてファイルを保存します。
これで、スキームを切り替えるときに変数を使用して現在の設定にアクセスできるようになります。
まず第一に、Appfileを開き、app_identifier行のコメントを外して、次のように置き換えます。
app_identifier("[[APP_IDENTIFIER]]")
を
app_identifier(ENV['BUNDLE_IDENTIFIER'])
に。
“ENV['BUNDLE_IDENTIFIER']”は、あなたが現在の環境に設定した方からバンドルIDを取得するようにfastlaneに指示します。
Deliverfileで.ipa行を次のように置き換えます。
ipa("./fastlane/builds/#{ENV['APP_NAME']}.ipa")
Gymfileで、scheme行を次のように置き換えます。
scheme(ENV['SCHEME'])
Snapfileで、schemeとoutput_directoryの行を次のように置き換えます。
scheme(ENV['TEST_SCHEME'])
の部分と
output_directory "./fastlane/screenshots/#{ENV['SCHEME']}"
ですね。
それぞれ。
最後に、新しいmetadataディレクトリに戻ります。すべてのコンテンツを選択して、それらをmZone Pokerという名前の新しいフォルダーに配置します。
それからそのフォルダを複製しその複製にmZone Poker Proと名付けます。
mZone Poker Pro/ja-jp/name.txt と mZone Poker Pro/fr-FR/name.txtの内容を新しいアプリの名前に変更します。簡単にするために、他のすべてのメタデータは今のところ同じにしておきます。
2番目のtargetに対してすべてのコマンドを実行するには次のように入力します。
bundle exec fastlane do_everything --env mZone_Poker_Pro
これは、.env.mZone_Poker_Proの変数を使用してdo_everything
を実行します。
しかし、すべてのtargetに対してすべてのコマンドを一度に実行したい場合はどうなりますか?
Fastfileを開きます。 do_everything
の下に、以下を追加します。
def execute_for_all_envs
# 1
schemeList = Dir.glob(".env.*”)
# 2
schemeList.each do |file|
# 3
Dotenv.overload(file)
# 4
yield
end
end
このメソッドは、
- 現在のディレクトリの .env.ファイルを配列に入れます。
- 各.envファイルをループします。
- 現在の.envファイルで
ENV
をoverloadします。 -
execute_for_all_envs
の呼び出しに続いてブロックを実行します。
次に、do_everything
からexecute_for_all_envs
を呼び出すには、do_everything
の内容を次のように置き換えます。
if ENV['SCHEME'] != nil
create_app
screenshot
build
upload
else
execute_for_all_envs{ do_everything }
end
ここでコマンドラインで環境を指定しないと、ENV ['SCHEME'] == nilが実行され、execute_for_all_envs
が実行されます。execute_for_all_envs
はENVを最初の環境に設定し、呼び出し側ブロックに戻ります。その後、呼び出し側ブロックはdo_everything
を再実行します。
do_everything
がその環境のすべてを実行した後、execute_for_all_envs
内のループが続行され、次の環境に戻ります。
以上です。
これで実行できます。
bundle exec fastlane do_everything
あなたが座ってリラックスしている間にfastlaneが両方のtargetにすべての重い処理をします。
注意:fastlane実装前と比較して、あなたに長い時間を費やしてしまうことは奇妙に感じるかもしれませんが、私たちを信頼してください。