こんにちは。趣味グラマのNobu(@nm_aru)です。
Flutterで個人開発しているアプリですが、遂にアプリ本体は完成し、リリースのための準備に入りました。
今回は欲張って日英中韓の4ヶ国語対応を行ったのですが、リリース準備の段階で地獄を見る事に…。
その中の試行錯誤で、iOSのスクリーンショットを効率的に取る方法を編み出した(?)ので共有したいと思います。
iOSは用意するスクリーンショットの種類が多い
Appleのドキュメントにある通り、App Storeでアプリを配信するために用意しなければいけないスクリーンショットは、2021年6月現在で最低以下の4種類が必要になります。
- 6.5インチ iPhone用(例:iPhone12 Pro Max)
- 5.5インチ iPhone用(例:iPhone8 Plus)
- 12.9インチ iPad Pro(第3〜4世代)
- 12.9インチ iPad Pro(第2世代)
この4種類だけなら、地道に取得すれば良いのですが、これに多言語対応が入ってくると途端に地獄になりました…。
多言語対応の時のスクショ取得の問題点
多言語対応アプリのスクリーンショットを取る場合、以下の手順を各言語毎に繰り返す必要があります。
- iOSシミュレータの言語設定を対象言語に変更する
- アプリを起動する
- 各言語に対応したコンテンツを登録する(必要な場合)
- スクリーンショットを取得する
ここで問題になるのが、3の「各言語に対応したコンテンツを登録する」です。
先に示した通り、App Store用のスクリーンショットは4種類の端末分取得する必要があります。
そこに多言語対応を掛け合わせると、対応言語数 × 4端末になり、例えば私の今回のアプリの場合、4ヶ国語(日英中韓)× 4端末で16回の取得が必要になり、上記の3の作業も16回行う必要が出てきます。
これは大変な苦痛です(少なくとも私にとっては)
試行錯誤の結果、編み出した解決策
問題は、4種類のシミュレータ毎に各言語のコンテンツを登録しなければいけない事でした。
登録したコンテンツはSQLiteに保存しており、SQLiteのファイルは、何も指定しなければ以下のようにシミュレータ配下(?)に作られます。
/Users/hoge/Library/Developer/CoreSimulator/Devices/06B8EF5B-B6C4-4834-85F0-2F39B069E172/data/Containers/Data/Application/54DF4742-6F30-45B9-987F-A0D5987FADE1/Documents/database.sqlite
シミュレータが変わればDevicesの後ろのIDが変わり、アプリを再インストールすれば、Applicationの後ろのIDが変わります。
そして、このパスを見ていてふと気付きました。
言語毎に別の場所(/tmp配下とか)にSQLiteのファイルを用意し、4種類のシミュレータから同じSQLiteファイルにアクセスすれば良いのでは?と。
言語毎にSQLiteファイルを用意する
早速、以下のように言語毎にSQLiteファイルの保存先を指定し、1つのシミュレータでアプリからコンテンツを登録後、残り3種類のシミュレータを同時に起動してみたところ、見事に同じコンテンツを各シミュレータで確認する事が出来ました。
スクリーンショットはコマンドラインで取得する
複数のシミュレータでスクリーンショットを取得する場合、以下のようにコマンドラインから取得した方が楽です。
xcrun simctl io [device] screenshot --mask alpha screenshot.png
[device]の部分は、flutter devicesを実行する事で取得できます。
[hoge@:~]$ flutter devices
3 connected devices:
iPhone 8 Plus (mobile) • 07B8EF5B-B6C4-4834-85F0-2F39B069E172 • ios • com.apple.CoreSimulator.SimRuntime.iOS-14-5 (simulator)
iPhone 12 Pro Max (mobile) • 2A3CDA6C-CB34-4B1A-AA5E-4BBF927A333C • ios • com.apple.CoreSimulator.SimRuntime.iOS-14-5 (simulator)
Chrome (web) • chrome • web-javascript • Google Chrome 91.0.4472.77
この中の07B〜、2A3〜の部分です。
私の場合は、[device]を固定した上で、アプリを画面遷移させたら、ファイル名だけ変えてコマンド実行という形で取得していました。
まとめ
多言語対応には、色々と地道な作業があるんだなと実感…。
企業で出す場合は、誰かがやってくれている事でも、個人開発だと全て自分で行う必要があるので、勉強になりますね(前向き)
コメント