search
LoginSignup
1
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

Carview Advent Calendar 2020 Day 2

posted at

updated at

FastlaneでiOSアプリの審査提出を自動化する

Carview Advent Calender 2日目の記事を担当しますnbappsです。
1日目の@zwtinくんがいい記事を書いてハードルを上げてくれたので、ハードルを下げる役を担いたいと思ってます。

本題

アプリの審査提出って地味に時間がかかりますよね。
ビルドして、アップロードして、ストアから選択して、リリースノート書いて、提出して。。
作業と待ち時間が交互に繰り返されるので全部終わるまで地味に時間がかかります。

この記事ではそんな課題を解決すべく、「Macのターミナルでコマンドを一つ打つだけで、ビルドして審査提出までしてくれる」ところまでを解説します。

Fastlaneとは、「iOS/Androidアプリのリリースに関わるあれこれを自動化してくれる」便利なライブラリで、証明書やプロビジョニングプロファイルの更新、ベータ配布、テスト、ビルドバージョン管理などもFastlaneで自動化できます。
Fastlane 公式 : https://docs.fastlane.tools/

検証環境

  • Mac OS - 10.15.7 〜 11.0.1
  • Ruby - 2.6.3 (2.6.0だとfastlaneインストール失敗しました)
  • Fastlane - 2.166.0

セットアップ

さっそくですが、導入手順を説明します。

1. CommandLine Toolをインストール

$ xcode-select --install
$ sudo xcode-select --reset

CommandLineツールはiOS開発者ならインストール済みの方も多いと思います。
--resetを行うのは以下記事と同じエラーに遭遇したので念のためです。
https://qiita.com/tototti/items/52e19efcb2e3a22484d9

2. Rubyのバージョン確認

$ ruby -v

Rubyのバージョンが2.6.3未満の場合はfastlaneのインストールに失敗したので、以下の手順でrbenvをインストールしてruby2.6.3をインストールしておきます。

$ brew install rbenv ruby-build
$ echo 'if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi' >> ~/.bash_profile 
$ rbenv install 2.6.3
$ rbenv global 2.6.3

ここで、一度ターミナルを再起動してrbenvの設定を反映します。

3. Fastlaneをインストール

プロジェクトフォルダにて、以下を実行しGemfileを生成します

$ bundle init

Gemfileが生成されるので、末尾にgem 'fastlane'を追加します

Gemfile
source "https://rubygems.org"

git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }

gem 'fastlane' # ここを追加

Gemfileの指定内容に沿ってfastlaneをインストールします。

$ sudo gem update --system
$ bundle install --path vendor/bundle

これでFastlaneがインストールできました。

4. Fastlaneの初期設定

続いてFastlaneの初期設定を行います。
対象のプロジェクトフォルダ内にて以下を実行しFastfileを生成します。

$ fastlane init

実行するといろいろ質問されるので素直に答えます。

# 何を自動化したいか聞かれる (今回は審査提出なので3を選択)
> What would you like to use fastlane for?
> 1. 📸  Automate screenshots
> 2. 👩‍✈️  Automate beta distribution to TestFlight
> 3. 🚀  Automate App Store distribution
> 4. 🛠  Manual setup - manually setup your project to automate your tasks
→ {3を選択}

# iOSプロジェクトにSchemeが複数ある場合は審査提出用のスキームを聞かれる
> Select Scheme: 
> 1. myproject-release
> 2. myproject-staging
> 3. myproject-development
→ {1を選択}

# Appleアカウントを聞かれる
> Please enter your Apple ID developer credentials
> Apple ID Username:
→ {Appleアカウントを入力}
> Password (for aaaa@bbbb.com):
→ {パスワードを入力}

# 2要素認証のコードを入力
> Please enter the 6 digit code:
→ {******}

# ストアの掲載情報をファイル管理するかどうか
> Would you like fastlane to manage your app's metadata? (y/n)
 → {yesを選択} 
(Appsotoreの掲載情報を全てファイル管理でき、今のストアの情報を元にmetadataを作ってくれる)

質問の内容はXcodeのプロジェクトファイルから自動でカスタマイズされているようです。

Fastlane、賢い・・・。

全て完了すると./fastlaneフォルダ内にFastfileが生成されています。

Fastfileとは

Fastfileとは、fastlaneで行うビルド、審査提出、といった処理の順番を指定する設定ファイルのことで、laneと呼ばれるメソッドの中に実行すべき処理が書かれています。
ちなみにRubyで書かれているので、IF文などはRubyの文法がそのまま使えます。
以下が、セットアップで自動生成されたFastfileです

fastlane/Fastfile
platform :ios do
  desc "Push a new release build to the App Store"
  # この中に処理を書く
  lane :release do
    # ビルド番号を自動でインクリメント
    increment_build_number(xcodeproj: "myproject.xcodeproj")
    # ビルドしてipaを生成
    build_app(workspace: "myproject.xcworkspace", scheme: "myproject-release") 
    # 審査提出
    upload_to_app_store 
  end
end

build_appやupload_to_app_storeのパラメータを指定することでカスタマイズが可能です。
パラメータ一覧はFastlaneの公式ドキュメントから確認できます。
build_app
upload_to_app_store

審査提出

審査提出時は以下のコマンドを叩くだけでOKです。
ビルドが開始され、AppStoreへのアップロードまでやってくれます。

$ bundle exec fastlane release

releaseの部分がFastlileのlane名に対応しており、独自のlaneを作成した際はここを書き換えて呼び出せます。

注意点としてはXcodeのBuildSettingsからProvisioningProfileの設定でAdHoc用のプロビジョニングプロファイルを設定していると、ビルド時にエラーになるため、AppStore用のプロビジョニングを設定しておく必要があります。

あとがき

Fastlaneをセットアップして審査提出のコマンドを叩くところまでを解説しました。
ここまで比較的少ないステップで構築できるので、導入のコスパはいいのではないかと思います。

カービューではこのFastlaneのコマンドを叩く部分をCircleCIというCIサービス上で行っています。
サーバー上の外部のマシンに証明書やProvisioninProfileをインストールする必要がありますが、これもFastlaneのmatchという機能で自動で管理してくれます。
また、ベータ配布や自動テストもCircleCI上で同時に行っていて、Gitプッシュするだけで、ビルドベータ配布自動テスト審査提出を行える環境となっています。

今回、これらの解説は長くなるので割愛しましたが、証明書の管理方法や、ベータ配布、自動テストツールについてもまた機会があればご紹介したいと思います。

最後までお読みいただき、ありがとうございました。
次回はいつも服からベロが出ているデザイナーの@yamaberoさんがJavascriptのTipsを紹介してくれるようです。

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
What you can do with signing up
1
Help us understand the problem. What are the problem?