見出し画像

既存アプリにfastlaneを導入して申請を楽にする

fastlane はiOS/Androidの自動化のためのプラットフォームです。

僕はiOSアプリ開発で数年使っていますが、fastlane以前にはもう戻れません。申請まわりの面倒な部分を自動化することで、大事な開発にフォーカスすることができます。

この記事では「iOSアプリ作っててこれまでは手動でアプリの申請とかしてきたけど、そろそろfastlane導入してみようかなぁ」という人向けに書いてみます。

・コマンド一発でアプリを申請(メタデータとスクショも)
・既存アプリにfastlaneを導入

あたりについて書きます。

fastlaneをインストール

fastlaneはruby製です。僕はgemとしてインストールしていますが、その他にもいろいろなインストール方法が用意されています。

好きな方法で入れましょう。

https://docs.fastlane.tools/getting-started/ios/setup/

セットアップ

fastlaneをセットアップします。

アプリのディレクトリ内で以下のコマンドを実行します。

$ fastlane init

聞かれた質問に答えていくと、↓のようなファイル・ディレクトリが生成されているはずです。

画像1

簡単に説明します。

Fastfile - 最も重要。ここにいろいろなコマンドを用意していく
Appfile - アプリ全体のパラメータ(アカウントとか)を定義する
Deliverfile - deliver(アプリの情報をApp Store Connectに登録・申請するコマンド)のパラメータを定義する
metadata - App Store Connectに登録するメタデータを書く場所
・screenshots - App Store Connectに登録するスクリーンショットを書く場所

基本的な使い方Fastfileにコマンドを書いて、それを実行する形です。

アプリ申請を自動化する

iOSの申請周りはかなり簡単になりましたが、それでも面倒に感じる部分はまだ多いです。

アプリによって書き方は異なると思いますが、自分のアプリの例だとこのように書いています。

lane :release do
  # ライブラリのインストール
  cocoapods
 
  # ビルド番号あげる
  increment_build_number

  # アプリをビルド
  build_app(scheme: "MichiNoEki", xcargs: "-allowProvisioningUpdates")
  
  # App Store Connectにアップロード
  deliver(
    submit_for_review: true,
    force: true,
    submission_information: {
      add_id_info_uses_idfa: true,
      add_id_info_limits_tracking: true,
      add_id_info_serves_ads: true,
      add_id_info_tracks_action: false,
      add_id_info_tracks_install: false,
    }
  )
 
  # git commit
  git_commit(path: ".", message: "Update version")
 
  # git push origin master
  push_to_git_remote(
    remote: "origin",
    local_branch: "master",
    remote_branch: "master",
    force: true,
    tags: false
  )
  
  # Slackに完了通知
  post_slack(message: "審査に提出しました!")
end

lane :post_slack do |options|
   slack(
     message: options[:message], 
     default_payloads: [],
     slack_url: "<SLACK HOOK URL>")
end

このlaneを実行するには以下のコマンドを打ちます。

$ fastlane release

この release lane では、
・CocoaPodsでライブラリをインストールして、
・ビルド番号を自動でインクリメントする。
・アプリをビルドして、審査に提出
・変更(バージョンの更新など)をコミットして、
・GitHubにpushする
・完了したらSlacjに通知

という一連の処理が実行されます。便利ですね!

各コマンド、パラメータの詳細が知りたい方は以前書いた↓の記事を参考にしてください。

fastlaneで既存のメタデータ・スクリーンショットを利用する

fastlaneでメタデータ・スクリーンショットを管理するのは良いとして、まずは今ストアにある情報をfastlaneのmetadataに反映させたいですよね。

もしかしたら fastlane init のときに良い感じに応答すればやってくれるのかもしれませんが自分は分からなかったのでコマンドで実行する方法を書きます。

まず、メタデータのダウンロードです。

$ fastlane deliver download_metadata

これでApp Store Connectに登録している情報を fastlane/metadata 配下のファイルに反映してくれます。
各ファイルの詳細はこちらで確認できます

続いてスクリーンショットのダウンロードです。

$ fastlane deliver download_screenshots

実行するとApp Store Connectに登録しているスクリーンショットがダウンロードされます。

アプリを多言語対応している場合、メタデータ・スクリーンショットともに言語ごとのディレクトリに別れて保存されます。App Store Connectでポチポチ言語を切り替えて更新する必要がなくなります。

一度この状態を作っておけば、基本的にApp Store Connectで操作する必要はなく、fastlane 配下のファイルをいじってコマンドを打てば申請できます。

※iPadのスクリーンショットについて

fastlaneはスクリーンショットの解像度をみて自動で対応する場所にスクリーンショットをアップロードしてくれます(神!)。

ただ、「iPad Pro」と「iPad Pro 3rd generation」は解像度が異なるため、明示的にファイル名で指定する必要があります。この場合「iPad Pro 3rd generation」のスクショのファイル名に「ipadPro129」というキーワードを含めておけば判断してくれます。(ドキュメント

fastlaneコマンドのオプションの使い方

fastlaneコマンドは自由度が高く、いろいろなオプション/パラメータを指定することができます。

例えばアプリをApp Store Connectにアップロードする deliver というコマンドを使うことを考えます。

fastlane docs で deliver を検索すると、様々なパラメータがあることがわかります。この説明をよく読み、必要なパラメータを指定しましょう。

fastlaneコマンドのパラメータの指定方法

fastlaneでのパラメータの指定方法です。

fastfileに記述

fastfileでlaneを呼び出すときに指定する方法です。laneの引数にパラメータを指定します。

# Fastfile

deliver(
  force: true
)

大体の場合はこれで良いのですが、上述の通り deliver は指定できる項目が多く、引数が膨れ上がって Fastfile の可読性が低くなっていきます。そういう場合は Deliverfile を使います。

Deliverfileに記述

# Deliverfile

## メタデータ・スクリーンショットの事前チェックをスキップ
force true

## 段階リリースをON
phased_release true

## 自動リリースはOFF
automatic_release false

## ipaアップロード後は自動で審査に提出する
submit_for_review true
submission_information({
  add_id_info_uses_idfa: true,
  add_id_info_serves_ads: true,
  add_id_info_tracks_install: true,
  add_id_info_tracks_action: true
})

このようにパラメータを列挙しておくと、 deliver コマンドが実行されるときに読み込んで使ってくれます。

deliver に対応して Deliverfile があるように、scan では Scanfile、build_app(gym) では Gymfile にパラメータを書くことができます。

まとめ

既存のiOSアプリにfastlaneを導入し、申請をかんたんにする方法について書きました。

どなたかのお役に立てば幸いです。

この記事が気に入ったらサポートをしてみませんか?