現在2.10.5を使用していて、3.13.6にアップグレードを行う。
公式サイトだと、以下のように実行すると書いてある。
$ flutter channel stable
$ flutter upgrade
しかし、実行してみると、
$ fvm flutter channel stable
$ fvm flutter upgrade
You should not upgrade a release version. Please install a channel instead to upgrade it.
エラーが表示されアップグレードできない。
fvmでバージョン管理している場合は、fvmコマンドで新しいバージョンをインストールしていく。
Flutter 3.13.6にアップグレードする
fvmでFlutter 3.13.6をインストール
リリースされているバージョンを確認
$ fvm releases
Sep 13 23 │ 3.13.3
Sep 13 23 │ 3.13.4
Sep 15 23 │ 3.15.0-15.1.pre
Sep 20 23 │ 3.13.5
--------------------------------------
Sep 21 23 │ 3.15.0-15.2.pre beta
--------------------------------------
--------------------------------------
Sep 27 23 │ 3.13.6 stable
--------------------------------------
3.13.6がstableバージョンなので、3.13.6にアップグッレードする
$ fvm use 3.13.6
Installing version: 3.13.6...
...
Flutter 3.13.6 • channel stable • https://github.com/flutter/flutter.git
Framework • revision ead455963c (12 days ago) • 2023-09-26 18:28:17 -0700
Engine • revision a794cf2681
Tools • Dart 3.1.3 • DevTools 2.25.0
Project now uses Flutter [3.13.6]
ついでにfvmも2.4.1にアップグレード
fvmのバージョンも2.4.1に上げれるみたいなので、アップグレードしておく。
$ pub global activate fvm
Installed executable fvm.
Activated fvm 2.3.1.
しかし、メッセージ通りのコマンドを実行しても上がらない。
正解はfvm内の dart pub
使う。
$ fvm dart pub global activate fvm
Installed executable fvm.
Activated fvm 2.4.1.
dartパッケージをアップグレード
Flutterのバージョンだけでなく、dartパッケージをアップグレードしていく。
まずは、マイナーバージョンをアップグレード
$ fvm flutter pub upgrade
メジャーバージョンのアップグレードを確認
$ fvm flutter pub outdated
Package Name Current Upgradable Resolvable Latest
direct dependencies:
bonsoir *1.0.1+2 *1.0.1+2 2.0.0 2.0.0
device_info_plus *3.2.4 *3.2.4 4.1.2 4.1.2
file_picker *4.6.1 *4.6.1 5.0.1 5.0.1
flutter_launcher_icons *0.9.3 *0.9.3 0.10.0 0.10.0
freezed_annotation *1.1.0 *1.1.0 2.1.0 2.1.0
package_info_plus *1.4.2 *1.4.2 1.4.3+1 1.4.3+1
permission_handler *9.2.0 *9.2.0 10.0.0 10.0.0
メジャーバージョンの変更は破壊的変更があるため、ひとつずつ確認していく。
パッケージのpubspec.yamlを見て、flutterのバージョンが3.13に対応しているか確認する。
それからCHANGELOG.mdから破壊的変更を見て、修正箇所を事前に確認しておく。
例えば、
device_info_plusを3.2.4→4.1.2にアップグレードできる。
CHANGELOG.mdを確認すると、4.0.0でAndroidIdという項目が削除されると書いてあり、自分のコードで利用しているのでここはあとで修正が必要だなと確認しておく。
他に、package_info_plusを10.0.0にアップグレードする際に、CHANGELOG.mdに、compileSdkVersionを33に書き換える必要があると書いてあった。
When updating to version 10.0.0 make sure to update the android/app/build.gradle file and set the compileSdkVersion to 33.
なので、android/app/build.gradle内のcompileSdkVersionを書き換える。
android {
compileSdkVersion 33
問題なければ、自分のpubspec.yamlを書き換えていく。
- device_info_plus: ^3.2.4
+ device_info_plus: ^4.1.2
またFlutterのバージョンも最新だけに対応していれば良いので、書き換えておく。
environment:
flutter: ">=3.13.6"
VSCodeが勝手にpub getしてくれているが、念の為手動でpub getを実行する。
$ fvm flutter pub get
VSCodeを再起動
VSCodeが認識しているFlutterのバージョンが変わらなかった。
setting.jsonでも、
"dart.flutterSdkPath": ".fvm/flutter_sdk",
sdkの位置を指定しており、そのファイルを確認すると、3.13.6に変更されていた。
どうしようもなく一旦VSCodeを再起動してみたら、無事3.13.6に変わった。
コードの修正
dartパッケージをアップグレードするといくらかエラーが出たので修正していく。
動作確認&修正
Androidでの動作確認
Androidデバイスで起動を試みる
$ fvm flutter run -d ANDROID_DEVICE
e: Incompatible classes were found in dependencies. Remove them from the classpath or use '-Xskip-metadata-version-check' to suppress errors
e: /Users/.../.gradle/caches/transforms-3/3eb6c3f03955a7bda7310b4d29667dba/transformed/jetified-kotlin-stdlib-jdk7-1.7.10.jar!/META-INF/kotlin-stdlib-jdk7.kotlin_module: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.7.1, expected version is 1.5.1.
...
エラー文が大量に出力
見た感じkotlinのバージョンが不適切。
kotlinをリリースされている最新のバージョン1.7.10にする。
https://kotlinlang.org/docs/releases.html#release-details
android/app/build.gradle
buildscript {
ext.kotlin_version = '1.7.10'
無事起動は完了した。
iOSでの動作確認
iOSデバイスで起動を試みる
$ fvm flutter run -d IOS_DEVICE
[!] CocoaPods could not find compatible versions for pod "Firebase/CoreOnly":
In snapshot (Podfile.lock):
Firebase/CoreOnly (= 8.15.0)
In Podfile:
firebase_core (from `.symlinks/plugins/firebase_core/ios`) was resolved to 1.22.0, which depends on
Firebase/CoreOnly (= 9.5.0)
Specs satisfying the `Firebase/CoreOnly (= 8.15.0), Firebase/CoreOnly (= 9.5.0)` dependency were found, but they required a higher minimum deployment target.
エラーがでた。
firebase_coreパッケージをpubでアップグレードしたせいで、Firebase/CoreOnlyが9.5.0に依存するはずなのに8.15.0になっている。
Podfileを再インストールする。
$ cd ios
$ rm -f Podfile.lock
$ pod repo update
$ pod install
完了したら、再度起動を試みる。
$ fvm flutter run -d IOS_DEVICE
起動できた!