Change before you have to.

androidアプリ開発、iosアプリ開発、rails、deep learning .etc.を使った社会実験。

【fastlane】テスト、profileの選択、ビルド、(crashlyticsやdeploygate)配布、デプロイ全て一度に出来るCIツール

先日fastlane開発者KrauseFx氏(github)のmeet-upに参加してきました。

f:id:ichonol:20150626194152j:plain


当日はfastlaneの概要や使い方の説明から、どうやっているかなどの内部仕様的な話まで幅広くお話を聞くことができました。
だいぶ遅くなりましたが、この場を借りてお礼申し上げます。
ありがとうございました。
thank you for splendid speach @krausefx !! :)

 

https://fastlane.tools/assets/img/logo-desktop-large.png 



fastlane便利!

前からCIについて調べて、fastlane自体はかなり前から知っていましたが、日本語の記事がないこと、archiveする際にxcodeのショートカットで割り当てを行っていたこともあり、crashlyticsでの配布自体にそこまで負担がなかったので切迫した必要性を感じていませんでした。

 


ただ、配布する時にrelease, adhoc(時にはdevelopも)用に用意するのはそれなりに時間がかかるし、特にapple watch対応アプリでは純粋にその3倍(メインターゲットに加えて、watchkit app, extionsionの2ターゲット分)の設定は面倒でした。


何よりもその作業を開発者自身が行うのは無駄だなーと思っていました。

加えて、たまになんですが配布がうまくいかないことがあり、Apple Developer ポータルに行くと、必要なprofileがinvalidになっていることもあって、いちいち確認しなくてはいけなかったのも面倒でした。

 

標題の通り、fastlaneにはテスト、ビルド、配布、デプロイメント作業の他にも便利な機能があり、その一つがprofileのチェックとvalidationの自動化でした。

 

使い方

それではざーっと書いていきます。

fastlane自体はrubyで書かれていて、

最初にインストールする時もgemを使います。

 

sudo gem install fastlane

 

 fastlaneを使う場合は最初にプロジェクトファイルで、初期化するため以下実行します

fastlane init

 

そうするといろいろ聞かれますが、最初は全てyesで返します。(yと入力します)
途中でapple idに登録しているアカウントやbundle idも聞かれるので、正しく入力してください。


結果、プロジェクトファイル内にfastlaneというディレクトリができるので

cd fastlane


で移動し、以下で設定を編集します。

vim fastfile


少し見るとわかりますが、rubyで書かれていますので、フロントしか書いたことがない人は慣れましょうw

fastlaneは実行するの単位がブロックごとになっていて、

最初に実行するブロックが

    
  before_all do
    # ENV["SLACK_URL"] = "https://hooks.slack.com/services/..."

    # cocoapods

    # increment_build_number

    ipa # Build your app - more options available

    # xctool # run the tests of your app
  end


最後に実行するブロックが、

  after_all do |lane|
    # This block is called, only if the executed lane was successful
    
    # slack(
    #   message: "Successfully deployed new App Update."
    # )
  end

です。

 

例えば、最初のブロック(before_all do)で

ipaとあるのは、(与えられた設定で)アーカイブしてipaファイルを作成してくれます。

デフォルトでは コメントアウト(#)されていることがありますが、

cocoapodをコメントインすれば、対応しているライブラリを自動でアップデートしてくれます。

 

increment_build_numberとあるのはバージョンの自動インクリメントです。

 

 

以上だけでもめちゃくちゃ便利なのですが、snapshotというコードがあって、

(若干時間かかりますが)シミュレータを自動起動し、画面遷移ごとにスクショを撮ってくれます。

これはテストやデバッグにも使えますが、ストアにsubmitするときのスクショにもそのまま使えるので、もう一画面ごとに手動で画面コピーする必要もありません。

submitといえば、面倒な作業の一つにprovisioning profileの更新、キーチェーンへの登録、xcode上での登録というのがありますが、これも自動でやってくれます。

 

sighというのがそれです。

 

これはデベロッパー管理画面に行って、profileをダウンロードしてキーチェーン登録、xcodeの登録を自動でやってくれます。

たまにある、アーカイブする時に訳わからんエラーになった時にありがちな、profileが自動的に無効になっている場合、わざわざprofile管理画面に行って有効化しなくてはいけなかったのですが、これがあればもうその必要はありません。

 

他にもcrashlyticsやdeploygateでチーム内の同僚や他のテスターに配布してくれる機能もあるのですが、これは次回。

一通り編集が終わったらもう一度コマンドライン上で

lane :test

を実行します。

 

 

デフォルトでは、testがsnapshotのみなのでシミュレータが自動的に起動してスクショを撮ってくれます。
test が終了するとfastlaneディレクトリのscreenshotsサブディレクトリができていて、その中に各言語環境で適切サイズごとにスナップショットが保存されています(感動)。

しかも、その間バックグラウンドで実行してくれるので、他の作業ができます。めちゃくちゃ便利w


将来的には、profile登録→ビルド→テスト→自動インクリメント→配布→デプロイを一通り自動化したいと思っています。

あとは、バージョンインクリメントした後、配布する前にgithubと連携して、現状のブランチをプッシュするところもやりたいです。

今回は疲れたので、以上です。