※fastlaneの初期化は済んでいる想定です
↓この方の記事がとても分かりやすいので先にご覧ください!
FastlaneとGitlabRunnerでCI/CDパイプラインを構築する
はじめに
iosアプリをApp Storeに配信するとなると
アプリのビルドやその他諸々の情報だけでなく
アプリケーションのスクリーンショットを撮影して
併せてAppStoreにアップロードしなければなりません
fastlane Snapshotは
App Storeのために異なるデバイスタイプと言語用にローカライズされた
iOS、tvOS、およびwatchOSのスクリーンショットを生成し
fastlane Deliverを使用してAppStoreConnectにアップロードすることができます
アップデートの度にいちいち手動でスクショなんか撮ってられないですよね
Snapshotはその悩みを解決してくれます
その手順を説明していきます
Snapshotを初期化する
◯ プロジェクトのルートディレクトリで下記コマンドを実行する
$ fastlane snapshot init
Root/fastlane/
直下に下記が生成されます
-
Snapfile
:snapshotの設定ファイル -
SnapshotHelper.swift
:UITestでsnapshotを生成するためのヘルパー関数群
Root/
直下に下記が生成されます
-
/screenshots
:snapshotが保存されるディレクトリ
◯ SnapshotHelper.swiftを移動・ターゲットに追加
initでこのファイルを生成しただけではUITestで読み込めないので
ディレクトリを移動しつつ、UITestのターゲットに追加します
(移動せずそのままターゲットに追加でも大丈夫です)
最終的に TERGETS
> AppUITests
> Build Phases
> Compile Sources
に
SnapshotHelper.swift
があればOKです
UITestを書く
スクリーンショットを自動で撮影するために、UITestをひと工夫します
◯ 全体像
import XCTest
final class CounterUITests: XCTestCase {
override func setUp() {
super.setUp()
continueAfterFailure = false
let app = XCUIApplication()
setupSnapshot(app)
app.launch()
}
func test_sxample() {
snapshot("LaunchScreen")
}
}
◯ 詳細
setUpメソッドの中でsnapshotを取るための設定をします
continueAffterFailure
はTestが失敗した時に実行を継続するかどうかを設定します
デフォルトはtrue
です
Errorやテスト失敗時にそのまま動いてしまうのでfalse
に設定して
スクショを想定通りに撮れなかった時にDeliverをストップできるようにします
continueAfterFailure = false
アプリケーションを初期化し
let app = XCUIApplication()
SnapshotHelper.swift
のsetupSnapshot
メソッドを使ってSnapshotをセットアップし
setupSnapshot(app)
appを起動します
app.launch()
各テストではsnapshot
メソッドを使ってスクショを撮影します
snapshot("LaunchScreen")
Snapfileを編集する
下記のように編集します
# A list of devices you want to take the screenshots from
devices([
"iPhone 8 Plus",
"iPhone 13 Pro Max",
])
languages([
"en-US",
"ja",
])
# Automatically erase previously generated screenshots before taking a snapshot
clear_previous_screenshots(true)
# The name of the scheme which contains the UI Tests
scheme("Counter")
# Where should the resulting screenshots be stored?
output_directory("./fastlane/screenshots")
この後のステップでfastlane snapshot run
を実行しますが
output_directory("パス")
で指定した場所にscreenshots/
が生成されますが
後々 fastlane Deliver
を使ってAppStoreにデリバーする際に
Sapshotで生成したスクショを読み込もうとするパスが
./fastlane/screenshots
なので
パスをここに指定しておくとあとあと楽です
Snapshotを単体実行する
$ fastlane snapshot run
指定した言語ごとにディレクトリが生成され
デバイスごとにスクリーンショットが保存されたらOKです!
Fastfileを編集してレーンを作る
下記レーンを追加します
desc "Take screenshots"
lane :screenshot do
snapshot
end
下記コマンドでも実行できるようになります
$ fastlane screenshot
おわりに
これを使わずしてiOS開発は無理ですね!
他のfastlaneの機能も記事にしていこうと思います!