プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

(Mac) Flutter SDK のアップグレード, 3.7.12 -> 3.22.2

こちらの記事で、 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 でビルドしてみます。

すると

のようなエラーが出てきます。これググると

【Xcode】ビルドエラー解決方法 ‘DT_TOOLCHAIN_DIR cannot be used to evaluate LIBRARY_SEARCH_PATHS, use TOOLCHAIN_DIR instead’ | LAND HIGHESTの技術系メモ

にあるように、 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 % 

となりました。

「pod install」したら、「CocoaPods could not find compatible versions for pod "Firebase/Auth"」というエラー | halzo appdev blog

とあるので、 --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 のバージョンとかもうちょっと早く気が付い方かもしれませんね。ま、なんにせよ、ビルドできるようになったのでよしとします。

ア○ミツ に勝手に掲載されてました

先日、自分の web サイトから問い合わせメールが来ました。まあ、スパムなんかもよく送られてくるので、またか、と思って、一応確認してみると、日本語の営業メールでした。

営業メールもたまに来るので、ざっと読んで興味がないのでほっとこうとおもったら、書き出しに、

アイ○ツに掲載されているのを拝見して ご連絡させていただきました、○○と申します。

とあります。

『アイミ○』?なんだそれ?

最近はあんまりやってないですが、昔、いくつかの仕事関係のサイトに掲載していたことがあるんですが、○イミツ、というところは使ったことがありません。

で、調べてみると、

とまあこんな感じに載ってるではないですか。

いやー、びっくり。

よく、食○ロ○なんかで飲食店さんが勝手に掲載されていたなんて話も聞きますが、まさか自分が同じような目にあうとは思ってもみませんでした。

会社紹介の文章なんか、よく作ってるなという感じです。もっとも、自分で書いたことのないこともまで、書いてるのはこの手のサイトのあるあるなんでしょうかね?

削除依頼を出すこともできるんでしょうが、それもそれでめんどそうです。それに、企業情報を掲載する分には文句言えないっぽいですしね(勝手に紹介文書くのはどうかと思いますが)。なので、しばらくは様子見にしておきます。

最後に、記念のスクショをひとつ。

どうも私はフリーランスなのに 1905 年に創業したらしいです。いったい何歳だ?

VirtualBox の Windows で IDE につないだストレージを SATA につなぎ換える

こちらの記事で VirtualBox の Windows を 10 から 11 にアップグレードする話を書きました。で、同じことを別の ゲスト Windows 10 にもやっておこうとおもったら、こちらはストレージが

  • IDE 接続
  • 仮想ディスクが VMDK 形式

となってました(当然 MBR です)。

なので、 WIndows 11 にアップグレードする前に、 SATA に VDI 形式のディスクとしてつなぎ換えたので、その作業をメモっておきます。

なお、この仮想マシンの場合は、アップグレードにいろいろと苦労しました。一連の作業は下記のとおりです。

VMDK から VDI へ変換

まず、 VMDK 形式のディスクを VDI 形式に変換します。仮想メディアマネージャで確認すると、下記のように複数のスナップショットに対応してディスクが分かれて存在していました。

このままスナップショットがわかれていると作業がうまく進むか不安だったので、いったん、すべてのスナップショットを削除しておきます。

次に、仮想メディアマネージャーで、 VMDK の仮想ディスクを選択して、『コピー』を選択します。この時に、ディスク形式が選択できるので、 VDI 形式を選んでおきます。

次に、仮想ディスクのイメージファイルは可変サイズのままとしておきます。

最後に、新しい仮想ディスクのファイル名を指定します。

なお、この時、ディスクサイズも入力できますが、コピーの場合は反映されませんでした。なので、ディスク容量を増やしたい場合はコピー後に作業してください。

『完了』ボタンを押して、しばらく待つと、無事に、 VDI 形式の仮想ディスクが作成できました。

ディスク容量を増やすなら、この変換後の VDI 形式のディスクに対して行っておきます。

SATA へつなぎ換え

実は、ここで、ちょっと乱暴な方法を取ってしまいました。なので、できるかもしれないけどあんまりおすすめの方法ではないです。

まず、仮想マシンを選択して、『設定』画面から『ストレージ』を選択します。

現状はこんな感じになってました。

次に、『コントローラを追加』アイコンをクリックして、

『AHCI(SATA)』を追加します。

名前が『AHCI』になってるので、わかりやすいように『SATA』に変えておきます。

続いて、追加した SATA コントローラを選択し、『ハードディスクの追加』アイコンをクリックすると、

のような選択画面が表示されるので、さきほど VDI に変換した仮想ディスクを選択して、追加します。

同様に、SATAコントローラに光学ドライブも追加しておきます。光学ドライブを追加する際に選択するメディアが特になかったので、 VBoxGuestAdditions を選んでおきました。

最後に、IDE配下の既存のストレージ(VMDK形式のやつ)および光学ドライブの割り当てを除去し、IDE コントローラもいらないので除去しておきます。

起動とリカバリー

ここまでできたら、仮想マシンを起動します。ですが、残念ながら青い画面が表示され、エラーになりました。

その後何度か、再起動して、自動修復を試みてくれます(もし、再起動しない場合は、リセットを行って、もう一度起動します)。

ですが、自動修復に失敗したようで、下記のような画面になりました。

今回の場合は、『詳細オプション』が表示されたので、それをクリックします。

オプションの選択が表示されるので、『トラブルシューティング』をクリックします。

再度、メニューが表示されるので、『詳細オプション』を選択します。

いくつかオプションがあるのですが、起動時のストレージコントローラ関連の問題なので、『スタートアップ修復』を選んでみます。

『診断中』と表示後、

と表示されます。しばらくするとさらに、

とメッセージが変化して、さらに待つと、作業が完了して、再度 Windows が立ち上がります。なんと無事にWindows が起動できました。

本当は

本来は、下記の記事にあるように、あらかじめ SATA コントローラをインストールさせておけば、こんな綱渡りしなくても済んだんでしょうね。

VirtualBoxでWindowsの入ったストレージをSATAにつなぎかえる #VirtualBox - Qiita

まとめ

いずれにせよ、無事に起動するようになったので、あとは前回の記事と同じ手順で、 WIndows 11 にアップグレードしておきます。