FlutterでAndroidとiOSのバージョンを別々に管理する方法
はじめに:Flutterのバージョン管理の基本
Flutterでは、アプリのバージョンをpubspec.yamlで一括管理するのが基本。ただし、これが適用されるのは主にiOSだけ。Androidではbuild.gradle側の設定が優先されるため、バージョン番号を個別に管理できる。
えっ、pubspec.yamlのバージョンってAndroidには効かないの?
その通り。Flutterのpubspec.yamlのversionは、iOSビルド時のCFBundleShortVersionStringやCFBundleVersionに反映されるけど、Androidではandroid/app/build.gradleのversionCodeとversionNameが使われる。
つまり、Androidだけビルド番号を上げたいときは、Flutterのversionは触らずにbuild.gradleだけいじればOK。
iOSのバージョン設定方法
pubspec.yamlのバージョンは次のように定義する:
version: 1.0.0+1
このとき、1.0.0はCFBundleShortVersionString、1はCFBundleVersionとして扱われる。
iOS側でバージョンを上げるときはこの数字を更新すればいいんだね?
そう。FlutterでiOSビルドしたとき、自動的にInfo.plistに反映されるから、特にXcodeで手動設定する必要はない。
ただしiOSだけビルド上げたい場合は、Android用のbuild.gradleは触らずにこのversionだけ更新すればいいぞ。
Androidのバージョン設定方法
android/app/build.gradle内にある以下の設定が有効:
defaultConfig {
versionCode 5
versionName "1.0.4"
}
versionCodeはGoogle Play Consoleで必須の連番。versionNameは表示上のバージョンで、pubspec.yamlとは無関係に自由に設定できる。
Androidだけでビルドを上げたいとき、ここのversionCodeだけ変更すればOKってこと?
まさにその通り!これでiOSのバージョンは維持しつつ、Androidだけバージョンアップが可能になる。
Flutterで「iOSとAndroidのバージョンは独立して管理」が基本スタンスだと思っとくといいぞ。
バージョン管理の運用Tips
・CIでビルド番号を自動インクリメントしたい場合、AndroidとiOSで別処理にする必要あり。
・iOSのCFBundleVersionとAndroidのversionCodeはPlay StoreやApp Storeのアップロード制限のため連番必須。
・Flutterのpubspec.yamlはあくまで”デフォルト”設定。iOSでは有効だが、Androidには影響しないことを忘れずに。
CI対応ってことは、プラットフォームごとにスクリプト分ける感じ?
うん。GitHub ActionsやBitrise使ってるなら、ビルドごとにそれぞれの設定ファイルを書き換えるステップを挟むのがベター。
手動より確実でミスも減るぞ! [/gorilla> まとめ Flutterではpubspec.yamlのバージョン設定がiOSにのみ影響するため、Androidはbuild.gradleで個別に管理する必要がある。ビルド番号や表示バージョンは別々に設定・更新可能なので、リリースの柔軟性が高まる。 [gorilla] iOS用→pubspec.yaml、Android用→build.gradle、この住み分けを覚えとけ!


コメント