概要
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
を配置します
そして UITests のテストコード setup を以下のように変更します
override func setUp() {
continueAfterFailure = false
let app = XCUIApplication()
setupSnapshot(app)
app.launch()
}
更にテスト実行時にスクリーンショットを取得したい箇所で screenshot
メソッドをコールします
スクリーンショットを取得した画面分挿入してあげると良いでしょう
0Launch の部分は好きな名前を入力することができます
func testExample() {
snapshot("0Launch")
}
これでスクリーンショットを取得するための準備は完了です
実行
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 件のコメント:
コメントを投稿