42
50

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

iOSエンジニアならもはや必須になるつつあるfastlaneで自動テストしてみよう

Last updated at Posted at 2019-03-06

概要

こちらの記事は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と提携しました。

default_icon_record.jpg

このチュートリアルでは、あなたが有料のApple Developerアカウントを持っていること、およびcommand line、Xcode、そしてアプリ送信プロセスについての基本的な知識があることを前提としています。 アカウントを持っていない場合は、このチュートリアルが役立ちます。

Getting Started

まず、このページの上部または下部にあるDownload Materialsボタンを使用してこのチュートリアルの材料をダウンロードしてから、適切な場所に保存します。

このチュートリアルのサンプルアプリ、mZone Pokerは、ノーリミットテキサスホールデムのトーナメント用のポーカー計算機です。 それはあなたのチップ数と現在のビッグブラインドレベルに基づいて推奨される行動を表示します。

XcodeでmZoneプロジェクトを開き、ビルドして実行し、チェックアウトします。

mzonestarter-278x500.gif

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_init_output.png

fastlaneでは「recommend[s] automating one task first,」が、この1つのチュートリアルで複数の自動化されたアクションを実装するので手動設定を開始するには4を入力します。outputを読み、プロンプトが出されたらEnterを押します。

mZoneフォルダーに戻ると、いくつかの新しいことがわかります。Gemfileには、プロジェクト依存関係としてのfastlane gemと、次のものを含むfastlaneフォルダーが含まれています。

  • Appfile : アプリの識別子、Apple ID、およびfastlaneがアプリを設定するために必要なその他の識別情報を格納します。
  • Fastfile: fastlaneアクションを呼び出すために作成するlanesを管理します。

fastlane_init_files.jpg

選択したテキストエディタで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をこれまで見たことがないなら、これはあなたにとってちんぷんかんぼうに見えるかもしれません。 このコードの動作は次のとおりです。

  1. laneの説明を入力します。 (laneは連続したタスクのワークフローです)。
  2. このレーンに create_appという名前を付けます。
  3. 開発者ポータルとApp Store Connectの両方にアプリを追加するためにproduceを使用します。

これで、一番最初のlaneを作成しました。

creature_panda-beachball.png

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_applaneを走らせます。

このようなものが見えるはずです。

fastlane_create_app.png

その出力の先頭で、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 “.” = メールアドレスの逆ドメイン)

create_bundle_id-1.png

バンドルIDがすでに取得されている場合は、それを編集してユニークなIDになるまで送信をやり直してください。

次にアプリ名を送信するように求められたら、それもユニークにする必要があります。次の形式を試してください。

mZone Poker [Insert your email address minus “@” and “.”]

アプリ名は30文字を超えることはできません。必要に応じて切り捨ててください。

App Store Connectアカウントに複数のチームがある場合は使用するチームに対応する番号を入力してください。

Apple Developerアカウントに問題があることを示すエラーが表示された場合(たとえば、新しいプログラム契約に同意する必要がある場合など)、問題を解決してからproduceをもう一度実行してください。

アプリ名が利用できない場合、プロセスはそこでエラーで終了します。もう一度produceを実行し、Apple IDと作成したばかりのBundle IDを再入力してから、クリエイティブマッスルを曲げてユニークなIDを作成するか、この段落の先頭に戻って繰り返します。イライラすることはわかっていますが無限ループを解消できると確信しています。

image.png

Apple Developer CenterとApp Store Connectにログインします。するとあなたのアプリはすでに両方に追加されています。なんてクールなんでしょう。

apple_dev_and_connect-575x500.png

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を入力します。

fastlane_deliver.png

配信が正常に完了したら、FinderでmZone/fastlaneに戻ると、新しいことがいくつかわかります。

  • metadataディレクトリ。アプリのメタデータの大部分を保持します。
  • Deliverfile、残りのいくつかのメタデータを保持します。
  • screenshotsディレクトリ。アプリのスクリーンショットが含まれる。

metadata_directory-650x183.png

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.txtsupport_url.txtの両方にhttps://www.raywenderlich.comを追加します。

このアプリはフランス語と英語の両方をサポートしていますが、en-USフォルダのみが存在します。これを修正するには、同じディレクトリにen-USフォルダのコピーを作成し、fr-FRという名前を付けます。 このfastlaneチュートリアルを短くするために、メタデータをフランス語に翻訳する必要はありません…今回はですが。

次に、メタデータフォルダーに:

  • copyright.txtCopyright(c)2019 Razeware LLCを追加してください。
  • primary_category.txtGameを追加します。
  • primary_first_sub_category.txtCardを追加します。
  • primary_second_sub_category.txtCasinoを追加します。

次に、同じフォルダー内で好みのtext/codeエディターを使用して、app_store_rating_config.jsonという名前のJSONファイルを作成します。

app_store_rating_config.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フォルダに表示されます。それを開きファイルの内容を次のファイルで置き換えます。

Snapfile.txt
# 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)

ここでは次のように指定します。

  1. fastlaneにスクリーンショットを取り込ませたいデバイス。
  2. あなたがキャプチャーしたローカライズ言語。
  3. スクリーンショットの自動化を実行するためにすぐに作成するXcodeスキームの名前。
  4. スクリーンショットの出力ディレクトリ。
  5. そのfastlaneは新しいものをキャプチャする前に出力ディレクトリ内のすべてのスクリーンショットを消去する必要があります。

閉じる前にファイルを保存してください。

ターミナルに戻ってfastlane snapshot initを実行した後に現れた指示に注意してください:

fastlane_snapshot_init.png

それがあなたが次にすることです。

Creating a Test Target

XcodeでmZone Poker.xcodeprojを開き、次にFile▸New▸Targetに移動します。iOSタブのTestセクションで、iOS UI Testing Bundleを選択してからNextをクリックします。

create_uitest_target.png

Product NameフィールドにmZone Poker UITestsと入力し、Finishをクリックします。

create_uitest_target_2.png

mZone Poker UITestsフォルダーがXcodeの左側のナビゲーターメニューに表示されます。

targetの全般ページに移動します。mZone Poker targetの下には、mZone Poker UIテストは表示されません。mZone Poker UITestsを選択し、Signing for “mZone Poker UITests” requires a development teamというエラーが表示された場合は、チームを選択してください。

test_target_general-1-650x255.png

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の選択を解除してください。

add_snapshot_helper.png

次に、mZone Poker UITestsmZone_Poker_UITests.swiftを開きます。setUp()tearDown()の両方を削除してから、testExample()の内容を次のように置き換えます。

mZone_Poker_UITests.swift
// 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")   

このコードの動作は次のとおりです。

  1. スナップショットを撮るための設定をして、アプリを起動します。
  2. chip Countテキストフィールド(ストーリーボードでaccessibility identifierが「chip count」に事前設定されていることを確認する事)をタップし、そのフィールドに10を入力します。
  3. Big Blindテキストフィールドをタップして100を入力します。
  4. スナップショットを作成してアプリがuser entriesをどのように表示するかを示します。
  5. **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を選択します。

manage_schemes.png

スキームエディタの左側のメニューでBuildをクリックします。 次に、mZone Poker UITestsターゲットの横にあるTestRunオプションを選択してからCloseをクリックして変更を保存します。

edit_test_scheme_2.png

XcodeのままにしてFastfileを開き、create_applaneの下に次の行を追加します。

Fastfile.txt
  desc "Take screenshots"
  lane :screenshot do
    snapshot
  end

このscreenshotlaneは、Snapfileの設定に従ってスクリーンショットを撮るためにスナップショットを使用します。

Fastfileを保存し、ターミナルに戻って次のように入力します。

bundle exec fastlane screenshot

今、みてください…スクリーンショットは、あなたが特に何もせずともキャプチャされています!不気味な仕事をスキップする喜びに浸ってください。

スナップショットが完了すると、スクリーンショットのHTMLプレビューが自動的に開きます。

screenshot_html-1-483x500.png

snapshotSnapfileにリストされているシミュレータにアクセスする必要があります。そのリストから1つもデバイスが見つからない場合は、WindowDevicesの順に選択して、それらをXcodeに追加してください。 次に、+ をクリックして新しいシミュレータを追加します。

あいまいなシミュレータ名に関する警告が表示された場合は、重複するシミュレータを削除するか、Snapfile内の名前と一致するようにシミュレータ名を変更する必要があります。

たった1つのコマンドで、すべてのデバイスのスクリーンショットを英語とフランス語の両方で作成できます - 因みにそれ以上うまくいきません。

Creating the IPA File

アプリを構築してアップロードすることも時間のかかるプロセスです。 fastlaneがgymのツールを使ってこれを実現できるのです。

XcodeのmZone Pokerターゲットにbundle identifierとsigning identityを設定していることを確認してください。

ターミナルで以下を実行します。

fastlane gym init

するとGymfileが作成されます。

Gymfileを開き、その内容を次のファイルで置き換えます。

Gymfile.txt
# 1
scheme("mZone Poker")
# 2
output_directory("./fastlane/builds")
# 3
include_bitcode(false)
# 4
include_symbols(false)
#5
export_xcargs("-allowProvisioningUpdates")

このコードは以下のことをしています。

  1. mZone Pokerのschemeを指定します。
  2. fastlaneが.ipaアプリのバイナリファイルを保存する場所を指定します。
  3. ビルドからBitcodeを除外します。Bitcodeを使用すると、Appleはあなたのアプリを最適化することができますが、今はビルドをスピードアップするためにそれを除外します。
  4. ビルドからsymbolsを除外します。symbolsを含めると、Appleはアプリのデバッグ情報にアクセスできるようになりますが、今はビルドをスピードアップするために除外します。
  5. Xcodeが自動プロビジョニングを使用できるようにします。

Fastfileを開き、screenshotのlaneの下に以下を追加します。

Fastfile.txt
  desc "Create ipa"
  lane :build do
    # 1
    enable_automatic_code_signing
    # 2
    increment_build_number
    # 3
    gym
  end

これはbuildlaneです:

  1. Xcodeで自動プロビジョニングを有効にします。
  2. ビルド番号を1つ増やします(各ビルド番号はApp Store Connectのアップロード要件ごとにユニークです)。
  3. 署名付き**.ipa**ファイルを作成します。

Fastfileを保存してから、ターミナルでビルドを実行します。

bundle exec fastlane build

fastlaneからcertificatesにアクセスするためにkeychainのパスワードを入力するように求められた場合は、入力してください。同じ許可を繰り返し付与したくない場合は、Allow Alwaysを選択します。 ビルドが正常に完了すると、署名された**.ipafastlane/build**に表示されます。

ipa_directory.png

Uploading to App Store Connect

スクリーンショット、メタデータ、および.ipaファイルをApp Store Connectにアップロードするには、deliverを使用します。

まず、Deliverfileの内容を次のように置き換えます。

Deliverfile.txt
# 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)

ここでは、

  1. 価格帯を0に設定します。これは無料アプリです。
  2. レビューのために手動で送信する際にAppleがあなたに提示する質問に答えてください。
  3. アプリ評価設定の場所を指定します。
  4. .ipaファイルの場所を指定します。
  5. 審査のためにアプリを自動的に送信するには、submit_for_reviewtrueに設定します。
  6. automatic_releasefalseに設定すると、アプリの審査で承認された後にアプリを手動でリリースする必要があります。

Fastfileを開きます。buildlaneの後に、次を追加してください。

Fastfile.txt
  desc "Upload to App Store"
  lane :upload do
    deliver
  end

次に、fastlaneでメタデータのプレビューを作成するには、Terminalを開いて次のコマンドを実行します。

bundle exec fastlane upload

すべて問題なければ、Terminalにyと入力して承認します。

laneが完成したら、App Store Connectにログインします。スクリーンショット、メタデータ、およびビルドがあるはずです。レビューを待ってください。

waiting_for_review.png

Putting It All Together

アプリの作成、スクリーンショットの作成・構築・アップロードのためのlaneが別々に用意されました。それらを1つずつ呼び出すことはできますがあまりしたくないですね。

本当は、、、あなたはすべてを1つのコマンドでしたいはずです。

Fastfileを開きます。uploadlaneの後に、以下を追加します。

  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を開き最後に以下を追加します。

Deliverfile.txt
force(true)

これによりfastlaneはスクリーンショットとメタデータの承認をスキップします。

そしてfastlaneにすべての重い作業をやらせるには次のコマンドを実行します。

bundle exec fastlane do_everything

Supporting Multiple Targets

mZone_Sample_ProjectMultiple_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ボタンのすぐ右側にあるボタンをクリックしてから、実行するアプリのスキームを選択します。

switch_schemes.png

mZone Poker Proをビルドして実行します。 これはmZone Pokerとほぼ同じですが、より詳細な提案を返します。

mZone_and_mZone_Pro.gif

Generalページで、mZone PokerのバンドルIDを以前に作成したものに設定します。

それから、mZone Poker Proの仮の新しいバンドルIDを設定します。 例えば:

com.mZone-Poker-Pro.[Insert your email address minus “@”  and “.”]

それでは、Finderに戻ってください。Gemfilefastlaneディレクトリを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をクリックします。

add_snapshot_helper-multiple_targets (1).png

Setting Up Multiple Environments

環境(.env)ファイルには、実行中にアプリがさまざまにアクセスできる構成設定が含まれています。このプロジェクトでは、2つの環境を作成します。各アプリケーションターゲットに対して1つずつです。

お気に入りのテキストエディタを開き、smart quotesを無効にして次のように入力します。

.env
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番目のファイルを作成します。

.env
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行のコメントを外して、次のように置き換えます。

Appfile.txt
app_identifier("[[APP_IDENTIFIER]]")

Appfile.txt
app_identifier(ENV['BUNDLE_IDENTIFIER'])

に。

“ENV['BUNDLE_IDENTIFIER']”は、あなたが現在の環境に設定した方からバンドルIDを取得するようにfastlaneに指示します。

Deliverfileで.ipa行を次のように置き換えます。

Deliverfile.txt
ipa("./fastlane/builds/#{ENV['APP_NAME']}.ipa")

Gymfileで、scheme行を次のように置き換えます。

Gymfile.txt
scheme(ENV['SCHEME'])

Snapfileで、schemeとoutput_directoryの行を次のように置き換えます。

Snapfile.txt
scheme(ENV['TEST_SCHEME'])

の部分と

Snapfile.txt
output_directory "./fastlane/screenshots/#{ENV['SCHEME']}"

ですね。

それぞれ。

最後に、新しいmetadataディレクトリに戻ります。すべてのコンテンツを選択して、それらをmZone Pokerという名前の新しいフォルダーに配置します。

duplicate_metadata_1.png

それからそのフォルダを複製しその複製にmZone Poker Proと名付けます。

duplicate_metadata_2.png

mZone Poker Pro/ja-jp/name.txtmZone 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の下に、以下を追加します。

Fastfile.txt
  def execute_for_all_envs
    # 1
    schemeList = Dir.glob(".env.*”)
    # 2
    schemeList.each do |file|
      # 3
      Dotenv.overload(file)
      # 4
      yield
    end
  end

このメソッドは、

  1. 現在のディレクトリの .env.ファイルを配列に入れます
  2. 各.envファイルをループします。
  3. 現在の.envファイルでENVをoverloadします。
  4. execute_for_all_envsの呼び出しに続いてブロックを実行します。

次に、do_everythingからexecute_for_all_envsを呼び出すには、do_everythingの内容を次のように置き換えます。

Fastfile.txt
    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実装前と比較して、あなたに長い時間を費やしてしまうことは奇妙に感じるかもしれませんが、私たちを信頼してください。

42
50
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
42
50

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?