Android
iOS
Flutter

Flutterで作ったアプリをストア公開するときの手間取った話

先日初めてFlutterで作成したアプリをiOSおよびAndroidのストアに公開しました.公開手順は公式ドキュメントに従っていれば基本的に問題はないですが,手間取ったところをまとめました.

なお,私は日頃からiOSアプリをネイティブで開発しており,ストア公開の経験もあります.Androidアプリに関しては数年に一度作成して遊ぶ程度で,Playストアに公開は今回が初めてです.

今回のFlutterの環境は以下の通りです.

$ flutter doctor

Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, v1.5.4-hotfix.2, on Mac OS X 10.14.5 18F132, locale
ja-JP)

[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
[✓] iOS toolchain - develop for iOS devices (Xcode 10.2.1)
[✓] Android Studio (version 3.4)
[✓] VS Code (version 1.34.0)
[✓] Connected device (1 available)

• No issues found!


Androidアプリ

公式ドキュメント


Proguard

ソースコード難読化のProguardで,一部のサードライブラリが機能しなくなりました.そこで,そのサードライブラリを対象から外しました.サードライブラリのパッケージはそのドキュメントを見るか,実際にAndroidプロジェクトを開けば,分かりました.

-keep class hogehoge.piyopiyo.**  { *; }

この確認作業はリリースビルドと実機インストールで念入りに確認しました.

$ flutter build apk --release

$ flutter install -d {device_id}

なお,device_id は flutter install をオプションなしで打てば一覧表示されます.


Androidアプリの64bit対応

ストアに提出するには,32bitおよび64bitに対応する必要があります.推奨される app bundle (aab) でビルドするコマンドが用意されています.

$ flutter build appbundle

しかしながら,現状 (ver 1.5.4-hotfix.2, channel stable) だと,そのaabには64bitは含まれていません.すでにissueが立っており,ver 1.7 で対応予定だそうです.なお,dev channel に切り替えて使ってみましたが,Playストアからダウンロードするとクラッシュする不具合がまだ残っていました.

そこで,32bitおよび64bitそれぞれのapkを作成して,それら2つで申請しました.

(0) android/app/build.gradleに各アーキテクチャの設定を加える.

defaultConfig {

ndk.abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
}

(1) 32bitアプリをビルドする

$ flutter build apk --release --target-platform=android-arm

(2) ビルドした 32bit アプリを Google Play Console にアップロードする

(3) versionCode を増やす

(4) 64bit アプリをビルドする

$ flutter build apk --release --target-platform=android-arm64

(5) ビルドした 64bit アプリを Google Play Console にアップロードする

Play Consoleにアップロードすると「aabを使って」など警告が表示されますが,仕方ないのでそのままで公開しました.


iOS アプリ

公式ドキュメント

基本的にFlutterのビルドコマンドを行うだけで,後は通常のiOSアプリのリリース作業と同じです.

 $ flutter build ios

以下を忘れずに


  • バンドルIDや表示名を書き換える

  • 証明書関連を設定する

なお,アーカイブ時に結構の数の warning が表示されてましたが,アプリ審査は無事に通りました.



参照