こちらの記事で、 Windows での Flutter SDK のアップグレードについて書きましたが、今度は同じことを Mac でやりましたので、それをまとめておきます。
こんな環境です。
- Mac mini (2018), Intel Processor
- macOS Sonoma 14.5
更新したい SDK のダウンロード
Mac でも最初にやることは、更新したいバージョンの SDK をダウンロードしてくることになります。というわけで、現時点の最新版 3.22.2 をダウンロードしてきます。
今の Safari って、ダウンロード後自動的に解凍してしまうんですね。なので、ダウンロードフォルダにある一式を、 SDK を保存したいフォルダに移動しておけば完了です。
環境変数を設定
パスを通しておきます。 Mac の場合は、シンボリックリンクを貼っていたので、それを付け替えるだけになります。
mor@Junichi-MORI-Mac-mini bin % ls flutter flutter-3.22.2-stable flutter-3.7.12-stable mor@Junichi-MORI-Mac-mini bin % ls -laF total 0 drwxr-xr-x 5 mor staff 160 7 12 15:37 ./ drwxr-x---+ 31 mor staff 992 7 12 15:17 ../ lrwxr-xr-x 1 mor staff 21 5 8 2023 flutter@ -> flutter-3.7.12-stable drwxr-xr-x@ 27 mor staff 864 6 6 09:51 flutter-3.22.2-stable/ drwxr-xr-x@ 27 mor staff 864 4 19 2023 flutter-3.7.12-stable/ mor@Junichi-MORI-Mac-mini bin % rm flutter mor@Junichi-MORI-Mac-mini bin % ln -s flutter-3.22.2-stable flutter mor@Junichi-MORI-Mac-mini bin % mor@Junichi-MORI-Mac-mini bin % ls -l total 0 lrwxr-xr-x 1 mor staff 21 7 12 15:39 flutter -> flutter-3.22.2-stable drwxr-xr-x@ 27 mor staff 864 6 6 09:51 flutter-3.22.2-stable drwxr-xr-x@ 27 mor staff 864 4 19 2023 flutter-3.7.12-stable mor@Junichi-MORI-Mac-mini bin %
Xcode のアップデート
Xcode も 14.3 と古かったので、最新版(15.4)にアップデートしておきます。
ビルド
さて、Flutter の プロジェクト自体は Windows 上のアップグレードの際に修正済みなので、これで SDK アップグレードも完了のはずです。ということで、一度、プロジェクトを開いて XCode でビルドしてみます。
すると
のようなエラーが出てきます。これググると
にあるように、 CocoaPods のバージョンをアップデートすれば解決するようです。
CocoaPods のアップデート
やってみます。
mor@Junichi-MORI-Mac-mini ios % pod --version Ignoring ffi-1.15.5 because its extensions are not built. Try: gem pristine ffi --version 1.15.5 1.12.1 mor@Junichi-MORI-Mac-mini ios %
確かに、古いですね。
mor@Junichi-MORI-Mac-mini ios % sudo gem install cocoapods Password: Ignoring ffi-1.15.5 because its extensions are not built. Try: gem pristine ffi --version 1.15.5 Fetching cocoapods-1.15.2.gem Fetching xcodeproj-1.24.0.gem Fetching cocoapods-core-1.15.2.gem Fetching cocoapods-downloader-2.1.gem Successfully installed xcodeproj-1.24.0 Successfully installed cocoapods-downloader-2.1 Successfully installed cocoapods-core-1.15.2 Successfully installed cocoapods-1.15.2 Parsing documentation for xcodeproj-1.24.0 Installing ri documentation for xcodeproj-1.24.0 Parsing documentation for cocoapods-downloader-2.1 Installing ri documentation for cocoapods-downloader-2.1 Parsing documentation for cocoapods-core-1.15.2 Installing ri documentation for cocoapods-core-1.15.2 Parsing documentation for cocoapods-1.15.2 Installing ri documentation for cocoapods-1.15.2 Done installing documentation for xcodeproj, cocoapods-downloader, cocoapods-core, cocoapods after 3 seconds 4 gems installed mor@Junichi-MORI-Mac-mini ios %
これで一段落かなと思い、確認してみると
mor@Junichi-MORI-Mac-mini ios % gem list *** LOCAL GEMS *** activesupport (6.1.7.3) (略) cocoapods (1.15.2, 1.12.1) cocoapods-core (1.15.2, 1.12.1) (略)
あれ?複数バージョンが残ったままになってます。
複数バージョンの削除
これもググってみると、
gem list で複数バージョン表示される場合は gem cleanup する | DriftwoodJP
などのように、古いバージョンを削除する方法があるようなのでやっておきます。
mor@Junichi-MORI-Mac-mini ios % sudo gem cleanup Password: Cleaning up installed gems... Attempting to uninstall cocoapods-1.12.1 Successfully uninstalled cocoapods-1.12.1 Attempting to uninstall xcodeproj-1.22.0 Successfully uninstalled xcodeproj-1.22.0 Attempting to uninstall cocoapods-downloader-1.6.3 Successfully uninstalled cocoapods-downloader-1.6.3 Attempting to uninstall cocoapods-core-1.12.1 Successfully uninstalled cocoapods-core-1.12.1 Clean up complete mor@Junichi-MORI-Mac-mini ios %
gem list を見ても、バージョンが一つだけ表示されます。
mor@Junichi-MORI-Mac-mini ios % gem list *** LOCAL GEMS *** activesupport (6.1.7.3) (略) cocoapods (1.15.2) cocoapods-core (1.15.2) (略)
ついでに、バージョンを確認してみると
mor@Junichi-MORI-Mac-mini ios % pod --version 1.15.2 mor@Junichi-MORI-Mac-mini ios %
となり、アップデートされてるのが確認できました。
なお、最初は sudo をつけずにやったら、
mor@Junichi-MORI-Mac-mini ios % gem cleanup Cleaning up installed gems... Attempting to uninstall cocoapods-1.12.1 Unable to uninstall cocoapods-1.12.1: Gem::FilePermissionError: You don't have write permissions for the /Library/Ruby/Gems/2.6.0 directory. Attempting to uninstall xcodeproj-1.22.0 Unable to uninstall xcodeproj-1.22.0: (略)
のように権限がないと怒られたので、
rubygems - Uninstall old versions of Ruby gems - Stack Overflow
これなどを参考にして sudo つきでやりました。
pod install を実行
CocoaPods のアップデートができたので、続きの作業を進めます。
mor@Junichi-MORI-Mac-mini ios % rm -rf Pods mor@Junichi-MORI-Mac-mini ios % pod install Analyzing dependencies cloud_firestore: Using Firebase SDK version '10.7.0' defined in 'firebase_core' firebase_auth: Using Firebase SDK version '10.7.0' defined in 'firebase_core' firebase_core: Using Firebase SDK version '10.7.0' defined in 'firebase_core' Downloading dependencies Installing AppAuth (1.6.2) (略) Installing Firebase (10.7.0) Installing FirebaseAuth (10.7.0) Installing FirebaseCore (10.7.0) Installing FirebaseCoreInternal (10.9.0) Installing FirebaseFirestore (10.7.0) (略) Installing GoogleMaps (7.4.0) (略) Installing firebase_auth (4.4.1) Installing firebase_core (2.9.0) (略) Installing google_maps_flutter_ios (0.0.1) (略) Generating Pods project Integrating client project Pod installation complete! There are 19 dependencies from the Podfile and 44 total pods installed. [!] CocoaPods did not set the base configuration of your project because your project already has a custom config set. In order for CocoaPods integration to work at all, please either set the base configurations of the target `Runner` to `Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig` or include the `Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig` in your build configuration (`Flutter/Release.xcconfig`). mor@Junichi-MORI-Mac-mini ios %
最後に警告が出てきましたが、すでに設定済みでしたので、これでOKそうです。
XCode で再ビルド
最初のエラーへの対応ができたので、もう一度 XCode で、ビルドしてみます。
あれ?なんかエラーが出てますね。画面撮り忘れましたが、 main.dart で NUll Safety が無効になっているような内容のエラーでした。
これも、ググると、
android - Flutter - Error: Null safety features are disabled for this library - Stack Overflow
のような記事が出てきます。どうも、 flutter clean, flutter pub get で解決できるようです。
mor@Junichi-MORI-Mac-mini sample_app % flutter clean Cleaning Xcode workspace... 10.4s Deleting build... 115ms Deleting .dart_tool... 6ms Deleting Generated.xcconfig... 0ms Deleting flutter_export_environment.sh... 0ms Deleting Flutter.podspec... 0ms Deleting .flutter-plugins-dependencies... 0ms Deleting .flutter-plugins... 0ms mor@Junichi-MORI-Mac-mini sample_app % mor@Junichi-MORI-Mac-mini sample_app % flutter pub get Resolving dependencies... (4.8s) Downloading packages... (3.8s) _flutterfire_internals 1.3.38 (1.3.39 available) (略) Got dependencies! Dependencies are affected by security advisories: [^0]: https://github.com/advisories/GHSA-9v85-q87q-g4vg [^1]: https://github.com/advisories/GHSA-r285-q736-9v95 69 packages have newer versions incompatible with dependency constraints. Try `flutter pub outdated` for more information. mor@Junichi-MORI-Mac-mini sample_app %
これで、もう一度ビルドしてみると、
のようなエラーになります。これも調べてみると、
flutter - How to resolve an error: The sandbox is not in sync with the Podfile.lock - Stack Overflow flutter iosでrunすると'pod install' or update your CocoaPods installation.というエラーが出る #iOS - Qiita
のように pod update すれば良いようです。やってみると、
mor@Junichi-MORI-Mac-mini ios % pod update Update all pods Updating local specs repositories Analyzing dependencies cloud_firestore: Using Firebase SDK version '10.27.0' defined in 'firebase_core' firebase_auth: Using Firebase SDK version '10.27.0' defined in 'firebase_core' firebase_core: Using Firebase SDK version '10.27.0' defined in 'firebase_core' [!] CocoaPods could not find compatible versions for pod "google_maps_flutter_ios": In Podfile: google_maps_flutter_ios (from `.symlinks/plugins/google_maps_flutter_ios/ios`) Specs satisfying the `google_maps_flutter_ios (from `.symlinks/plugins/google_maps_flutter_ios/ios`)` dependency were found, but they required a higher minimum deployment target. mor@Junichi-MORI-Mac-mini ios %
あれれ?バージョン間で問題があるようです。仕方ないので pod install も試してみると、
mor@Junichi-MORI-Mac-mini ios % pod install Analyzing dependencies cloud_firestore: Using Firebase SDK version '10.27.0' defined in 'firebase_core' firebase_auth: Using Firebase SDK version '10.27.0' defined in 'firebase_core' firebase_core: Using Firebase SDK version '10.27.0' defined in 'firebase_core' [!] CocoaPods could not find compatible versions for pod "Firebase/CoreOnly": In snapshot (Podfile.lock): Firebase/CoreOnly (= 10.7.0) In Podfile: firebase_core (from `.symlinks/plugins/firebase_core/ios`) was resolved to 3.1.1, which depends on Firebase/CoreOnly (= 10.27.0) You have either: * out-of-date source repos which you can update with `pod repo update` or with `pod install --repo-update`. * changed the constraints of dependency `Firebase/CoreOnly` inside your development pod `firebase_core`. You should run `pod update Firebase/CoreOnly` to apply changes you've made. mor@Junichi-MORI-Mac-mini ios %
となりました。
とあるので、 --repo-update 付きでやってみたのですが、やっぱり、エラーになります。
mor@Junichi-MORI-Mac-mini ios % pod install --repo-update Updating local specs repositories Analyzing dependencies cloud_firestore: Using Firebase SDK version '10.27.0' defined in 'firebase_core' firebase_auth: Using Firebase SDK version '10.27.0' defined in 'firebase_core' firebase_core: Using Firebase SDK version '10.27.0' defined in 'firebase_core' [!] CocoaPods could not find compatible versions for pod "Firebase/CoreOnly": In snapshot (Podfile.lock): Firebase/CoreOnly (= 10.7.0) In Podfile: firebase_core (from `.symlinks/plugins/firebase_core/ios`) was resolved to 3.1.1, which depends on Firebase/CoreOnly (= 10.27.0) You have either: * changed the constraints of dependency `Firebase/CoreOnly` inside your development pod `firebase_core`. You should run `pod update Firebase/CoreOnly` to apply changes you've made. mor@Junichi-MORI-Mac-mini ios %
バージョンが合わないのはなぜ? pod repo update, pod install も試してみましたが、
mor@Junichi-MORI-Mac-mini ios % pod repo update Updating spec repo `trunk` mor@Junichi-MORI-Mac-mini ios % pod install Analyzing dependencies cloud_firestore: Using Firebase SDK version '10.27.0' defined in 'firebase_core' firebase_auth: Using Firebase SDK version '10.27.0' defined in 'firebase_core' firebase_core: Using Firebase SDK version '10.27.0' defined in 'firebase_core' [!] CocoaPods could not find compatible versions for pod "Firebase/CoreOnly": In snapshot (Podfile.lock): Firebase/CoreOnly (= 10.7.0) In Podfile: firebase_core (from `.symlinks/plugins/firebase_core/ios`) was resolved to 3.1.1, which depends on Firebase/CoreOnly (= 10.27.0) You have either: * out-of-date source repos which you can update with `pod repo update` or with `pod install --repo-update`. * changed the constraints of dependency `Firebase/CoreOnly` inside your development pod `firebase_core`. You should run `pod update Firebase/CoreOnly` to apply changes you've made. mor@Junichi-MORI-Mac-mini ios %
同じですね。
ios - CocoaPods could not find compatible versions for pod "Firebase/CoreOnly" - Stack Overflow
とあったので、これも試してみます。
mor@Junichi-MORI-Mac-mini ios % rm Podfile.lock mor@Junichi-MORI-Mac-mini ios % pod install Analyzing dependencies cloud_firestore: Using Firebase SDK version '10.27.0' defined in 'firebase_core' firebase_auth: Using Firebase SDK version '10.27.0' defined in 'firebase_core' firebase_core: Using Firebase SDK version '10.27.0' defined in 'firebase_core' [!] CocoaPods could not find compatible versions for pod "google_maps_flutter_ios": In Podfile: google_maps_flutter_ios (from `.symlinks/plugins/google_maps_flutter_ios/ios`) Specs satisfying the `google_maps_flutter_ios (from `.symlinks/plugins/google_maps_flutter_ios/ios`)` dependency were found, but they required a higher minimum deployment target. mor@Junichi-MORI-Mac-mini ios %
困ったな。
解決
ここで表示されていた google_maps_flutter_ios についてのエラーメッセージを調べてみると、
Flutter google_maps_flutter error! · Issue #147130 · flutter/flutter · GitHub
というのがありました。どうも、 PodFile で指定している iOS のバージョンの問題ということのようです。
なので、 PodFile を修正してから、もう一度試します。
mor@Junichi-MORI-Mac-mini ios % pod install Analyzing dependencies cloud_firestore: Using Firebase SDK version '10.27.0' defined in 'firebase_core' firebase_auth: Using Firebase SDK version '10.27.0' defined in 'firebase_core' firebase_core: Using Firebase SDK version '10.27.0' defined in 'firebase_core' Downloading dependencies Installing AppAuth (1.7.5) (略) Installing Firebase (10.27.0) Installing FirebaseAppCheckInterop (10.29.0) Installing FirebaseAuth (10.27.0) Installing FirebaseCore (10.27.0) Installing FirebaseCoreExtension (10.29.0) Installing FirebaseCoreInternal (10.29.0) Installing FirebaseFirestore (10.27.0) (略) Installing GoogleMaps (8.4.0) (略) Installing firebase_auth (5.1.1) Installing firebase_core (3.1.1) (略) Installing google_maps_flutter_ios (0.0.1) (略) Generating Pods project Integrating client project Pod installation complete! There are 20 dependencies from the Podfile and 49 total pods installed. [!] CocoaPods did not set the base configuration of your project because your project already has a custom config set. In order for CocoaPods integration to work at all, please either set the base configurations of the target `Runner` to `Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig` or include the `Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig` in your build configuration (`Flutter/Release.xcconfig`). mor@Junichi-MORI-Mac-mini ios %
ここで気が付いたのですが、画面の表示をよく見ると、最初に pod install をやったときは FirebaseCore が 10.7.0 だったのが、 PodFile 修正後は 10.27.0 になっています。これでいけそうですね。
ということで、改めて XCode でビルドしてみます。ビルド途中で、 codesign がやたらとキーチェーンアクセスのパスワードを聞いてくるというのがありましたが、一応無事にビルドが完了し、実機での動作確認までできました。
ビルドの確認に時間取られましたが、とりあえずはこれで OK ですね。
まとめ
あとから気がついたのですが、最初に flutter doctor やってれば、 CocoaPods のバージョンとかもうちょっと早く気が付い方かもしれませんね。ま、なんにせよ、ビルドできるようになったのでよしとします。