iOS の家計簿アプリをつくる(スクショ編)

advent_calendar アドベントカレンダー

はじめに

こちらは個人開発アプリができるまで by am10 Advent Calendar 2024の 22 日目の記事です。

22 日目は App Store 用のスクリーンショットを作成します。

2024 年 12 月時点では下記を見ると iPhone 用に 6.9 インチ(iPhone 16 Pro Max など)と iPad 用に 13 インチ(iPad Pro (M4)など)の 2 つがあればいいようです。

Screenshot specifications - Reference - App Store Connect - Help - Apple Developer
Screenshot size

やること

ローカライズもあるので毎回手動で作成するのはなかなかの手間です。なので Swift Testing を使ってある程度自動化します。

こういうのを作成します。

1

処理の流れは下記です。

  1. 対象の SwiftUI の View(画面)を生成する
  2. UIHostingController を使って ViewController を生成する
  3. ViewController の View を UIImage で書き出す
  4. スクショ用の各端末のベゼルをつけた SwiftUI の View に UIImage をわたす
  5. 生成した SwiftUI の View で再度 1 ~ 3 を実行する

上記を Swift Testing で書いて testplan で各言語ごとに configuration を作ればテスト実行で各言語のスクショを作成してくれるようになります。

作成するのは年画面、月画面、登録画面の日本語と英語のスクショです。

各画面の UIImage 作成

まずは各画面の UIImage を作成します。現状だと月画面が表示できないので ContentView を少し修正します。

これで初期表示を月画面にできるようになりました。登録画面もリスト表示できるようにしたいので下記のように修正します。

これで準備ができました。Test ターゲットに ScreenshotTests.swift ファイルを作成し下記のように実装します。

これで各画面の UIImage が生成できるようになりました。UIImage よりも Data の方が扱いやすかったので pngData() で Data に変換しています。

スクショ用 View 作成

続いてスクショ用の View を作成します。下記サイトで必要な端末のベゼル画像を取得します。

Appleのデザインリソース
Sketch用とPhotoshop用のテンプレート、プラグイン、事前設定済みのUI要素などを活用して、アプリをスピーディにデザインしましょう。

ベゼル付き View の表示はこちらを参考にしました。

AppStore向けPreview画像を半自動生成してくれるツール作った

Test ターゲットに Assets.xcassets を追加して取得したベゼル画像を追加します。

assets

ScreenshotView.swift ファイルを作成し下記のように実装します。

ScreenshotTests に下記を追加すればベゼル付きスクショを作成できます。

注意点としてはテスト起動時は iPhone 16 Pro Max か iPad Pro 13-inch(M4)を選択し下記の device をそれぞれ合ったものに変更する必要があります。

ローカライズ

続いてスクショのローカライズをします。
Test ターゲットに Localizable.xcstrings ファイルを追加しそれぞれのスクショに表示する文言を設定します。

下記のように ScreenshotTests を修正すればローカライズできます。

つづいてローカライズ分も一気にスクショを作成するために TestPlan.xctestplan ファイルを追加します。

3

Tests > Choose Targets... でターゲットを追加します。

4

必要なのは ScreenShotTests のみなので他のチェックは外します。

5

Configurations で日本語と英語用に ja, en を追加します。Target for Variable Expansion と Application Language を変更します。
(Target for Variable Expansion は Shared Settings の方で変えても OK です)

6

これで ScreenShotTests を実行すると日本語用と英語用で 2 回実行されるようになりました。

スクショを保存

あとは生成した画像を任意のディレクトリに保存するだけです。

TestPlan > Configurations > Shared Settings > Arguments > Environment Variables に下記のように値を追加します。

7

プロジェクトのルートに Screenshots ディレクトリを追加します。

8

ScreenShotTests を下記のように修正します。

これでプロジェクトルートの Screenshots ディレクトリに iPhone と iPad にディレクトリをわけてスクショが保存されるようになりました!

生成したスクショはこんな感じです。

日本語 英語
ja_JP_1 en_JP_1
ja_JP_2 en_JP_2
ja_JP_3 en_JP_3
日本語 英語
ja_JP_1 en_JP_1
ja_JP_2 en_JP_2
ja_JP_3 en_JP_3

おわりに

iPhone 用と iPad 用で 2 回テストを実行する必要はありますが手動でやるよりははるかに楽でしょう!
ストア用のスクショも作成できたのでリリースももうすぐできそうです!!

明日はプライバシーマニュフェスト対応をします。

Amazon.co.jp

コメント

タイトルとURLをコピーしました