2019年1月18日金曜日

fastlane 入門 (スクリーンショットを自動で取得してみる)

概要

fastlane は iOS/Android 用に作られたワークフローツールです
アプリのビルドからリリースまでを一貫して行えます
今回はインストールと簡単な動作確認を行ってみました

環境

  • macOS 10.14.2
  • fastlane

fastlane インストール

  • brew cask install fastlane
  • export PATH="$HOME/.fastlane/bin:$PATH"

他にも rubygems でインストールしたり xcode-select でもインストールできます
お好きな方法でインストールしてください
brew インストールの場合は PATH に fastlane コマンドを追加します

初期化

  • cd /path/to/project
  • fastlane init

で対話式の初期化が始まります
今回はスクリーンショットを自動で取得するレーンを作成しました
以下はログです

[11:27:24]: Created new folder './fastlane'.
[11:27:24]: Detected an iOS/macOS project in the current directory: 'ios-200s-games.xcodeproj'
[11:27:24]: -----------------------------
[11:27:24]: --- Welcome to fastlane  ---
[11:27:24]: -----------------------------
[11:27:24]: fastlane can help you with all kinds of automation for your mobile app
[11:27:24]: We recommend automating one task first, and then gradually automating more over time
[11:27:24]: 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
?  1
[11:27:32]: -------------------------------------------------------                                                            
[11:27:32]: --- Setting up fastlane to automate iOS screenshots ---                                                            
[11:27:32]: -------------------------------------------------------                                                            
[11:27:32]: fastlane uses UI Tests to automate generating localized screenshots of your iOS app                                
[11:27:32]: fastlane will now create 2 helper files that are needed to get the setup running                                   
[11:27:32]: For more information on how this works and best practices, check out                                               
[11:27:32]:     https://docs.fastlane.tools/getting-started/ios/screenshots/                                                   
[11:27:32]: Continue by pressing Enter
[11:28:46]: Parsing your local Xcode project to find the available schemes and the app identifier
[11:28:46]: $ xcodebuild -showBuildSettings -project ios-200s-games.xcodeproj
   Successfully created SnapshotHelper.swift './fastlane/SnapshotHelper.swift'
   Successfully created new Snapfile at './fastlane/Snapfile'
-------------------------------------------------------
Open your Xcode project and make sure to do the following:
1) Add a new UI Test target to your project
2) Add the ./fastlane/SnapshotHelper.swift to your UI Test target
   You can move the file anywhere you want
3) Call `setupSnapshot(app)` when launching your app

  let app = XCUIApplication()
  setupSnapshot(app)
  app.launch()

4) Add `snapshot("0Launch")` to wherever you want to trigger screenshots
5) Add a new Xcode scheme for the newly created UITest target
6) Add a Check to enable the `Shared` box of the newly created scheme

More information: https://docs.fastlane.tools/getting-started/ios/screenshots/
[11:28:48]: If you want more details on how to setup automatic screenshots, check out
[11:28:48]:     https://docs.fastlane.tools/getting-started/ios/screenshots/#setting-up-snapshot
[11:28:48]: Continue by pressing Enter
[11:29:14]: Which is your UI Testing scheme? If you can't find it in this list, make sure it's marked as `Shared` in the Xcode scheme list
1. ios-200s-games
?  1
[11:29:37]: ------------------------------------
[11:29:37]: --- Automatically upload to iTC? ---
[11:29:37]: ------------------------------------
[11:29:37]: Would you like fastlane to automatically upload all generated screenshots to App Store Connect
[11:29:37]: after generating them?
[11:29:37]: If you enable this feature you'll need to provide your App Store Connect credentials so fastlane can upload the screenshots to App Store Connect
[11:29:37]: Enable automatic upload of localized screenshots to App Store Connect? (y/n)
n
[11:35:46]: It looks like your project isn't set up to do automatic version incrementing
[11:35:46]: To enable fastlane to handle automatic version incrementing for you, please follow this guide:
[11:35:46]:     https://developer.apple.com/library/content/qa/qa1827/_index.html
[11:35:46]: Afterwards check out the fastlane docs on how to set up automatic build increments
[11:35:46]:     https://docs.fastlane.tools/getting-started/ios/beta-deployment/#best-practices
[11:35:46]: --------------------------------------------------------
[11:35:46]: ---    Successfully generated fastlane configuration ---
[11:35:46]: --------------------------------------------------------
[11:35:46]: Generated Fastfile at path `./fastlane/Fastfile`
[11:35:46]: Generated Appfile at path `./fastlane/Appfile`
[11:35:46]: Gemfile and Gemfile.lock at path `Gemfile`
[11:35:46]: Please check the newly generated configuration files into git along with your project
[11:35:46]: This way everyone in your team can benefit from your fastlane setup
[11:35:46]: Continue by pressing Enter
[11:36:06]: fastlane will collect the number of errors for each action to detect integration issues
[11:36:06]: No sensitive/private information will be uploaded, more information: https://docs.fastlane.tools/#metrics
[11:36:06]: ----------------------
[11:36:06]: --- fastlane lanes ---
[11:36:06]: ----------------------
[11:36:06]: fastlane uses a `Fastfile` to store the automation configuration
[11:36:06]: Within that, you'll see different lanes.
[11:36:06]: Each is there to automate a different task, like screenshots, code signing, or pushing new releases
[11:36:06]: Continue by pressing Enter
[11:36:18]: --------------------------------------
[11:36:18]: --- How to customize your Fastfile ---
[11:36:18]: --------------------------------------
[11:36:18]: Use a text editor of your choice to open the newly created Fastfile and take a look
[11:36:18]: You can now edit the available lanes and actions to customize the setup to fit your needs
[11:36:18]: To get a list of all the available actions, open https://docs.fastlane.tools/actions
[11:36:18]: Continue by pressing Enter
[11:36:25]: ------------------------------
[11:36:25]: --- Where to go from here? ---
[11:36:25]: ------------------------------
[11:36:25]: Learn more about how to automatically generate localized App Store screenshots:
[11:36:25]:             https://docs.fastlane.tools/getting-started/ios/screenshots/
[11:36:25]: Learn more about distribution to beta testing services:
[11:36:25]:             https://docs.fastlane.tools/getting-started/ios/beta-deployment/
[11:36:25]: Learn more about how to automate the App Store release process:
[11:36:25]:             https://docs.fastlane.tools/getting-started/ios/appstore-deployment/
[11:36:25]: Learn more about how to setup code signing with fastlane
[11:36:25]:             https://docs.fastlane.tools/codesigning/getting-started/
[11:36:25]: 
[11:36:25]: To try your new fastlane setup, just enter and run
[11:36:25]: $ fastlane screenshots

途中で iTunesConnect にアップロードするか聞かれますがそれは NO にしました

Xcode 側の準備

init 時にコード側で設定してほしいことが表示されているのでそれを設定するだけです
必要なファイルを配置したりコードを変更します

まず UITests のグループ配下に生成された fastlane/SnapshotHelper.swift を配置します
fastlane1.png

そして UITests のテストコード setup を以下のように変更します

override func setUp() {
    continueAfterFailure = false
    let app = XCUIApplication()
    setupSnapshot(app)
    app.launch()
}

更にテスト実行時にスクリーンショットを取得したい箇所で screenshot メソッドをコールします
スクリーンショットを取得した画面分挿入してあげると良いでしょう
0Launch の部分は好きな名前を入力することができます

func testExample() {
    snapshot("0Launch")
}

fastlane2.png

これでスクリーンショットを取得するための準備は完了です

実行

  • fastlane screenshots

でスクリーンショットの取得が開始されます
デフォルトでは以下のデバイスのスクリーンショットが取得されます

  • iPhone 7
  • iPhone 7 Plus
  • iPhone 8
  • iPhone 8 Plus
  • iPhone X
  • iPhone XS
  • iPhone XS Max
  • iPhone XR
  • iPad (5th generation)
  • iPad Pro (9.7-inch)
  • iPad Pro (12.9-inch)
  • iPad Pro (10.5-inch)
  • iPad (6th generation)
  • iPad Pro (11-inch)
  • iPad Pro (12.9-inch) (3rd generation)

実行中はヘッドレスでシミュレーターが起動するのでマシンに結構な負荷がかかるのでご注意ください

かなりログが表示されるので省略しますが以下のように時間が表示されれば完了です

[11:19:32]: fastlane.tools just saved you 14 minutes!

HTML ファイルとスクリーンショットは fastlane/screenshots/en-US/ に保存されブラウザで結果を表示してくれます

レーンを独自に定義する

fastlane/ ディレクトリ配下に各種設定ファイルがあります

Appfile
Fastfile
Snapfile
SnapshotHelper.swif

これをカスタマイズすることでスクリーンショットを取得する以外のことができるようになります
ちなみに今回は fastlane screenshots コマンドを定義しまし実行しましたが実行可能なコマンドの一覧を表示するには

  • fastlane list

を実行します
また DSL として実際に使えるアクションの一覧を表示する方法は

  • fastlane actions

で表示できます
この一覧に capture_screenshots というアクションがありこれを fastlane/Fastfile で使って lane: screenshots として DSL で定義することでコマンドが使えるようになります

最後に

fastlane でスクリーンショットを自動取得してみました
init コマンドを使えば雛形は作成してくれるので簡単に始められます

あとはドキュメントとアクションを見ながら自分で Fastfile をカスタマイズすれば好きなビルドフローを作成することができます
slack というアクションもあるのでフロー終了後に通知したりすることもできます

Xcode Server などを個別で立ててやるよりも fastlane 対応すれば Travis CI や Circle CI でも動かすことができるので将来的にも幸せになれると思います

参考サイト

0 件のコメント:

コメントを投稿