MacBook Air (2013) にmacOS VenturaをインストールしてWindowsから.NET MAUIを動かす
お久し振りです。
知人から古いMacBook Airを譲り受けたので.NETのマルチプラットフォーム系フレームワークのビルドマシンにしようと四苦八苦したお話をしようと思います。
その1 MacBookが起動できない
MacBookは初期化された状態で私のもとへ渡ってきました。
ので、まずはOSのインストール、セットアップ作業からしないといけなかったのですが、如何せんMacなるものを触るのがほぼ人生初でしたゆえ「まぁとりあえず起動したらBIOSくらい立ち上がってくるやろ」の精神で向き合ってエラい目に逢いました。
普通に電源アイコンのキーを押しただけで一瞬バックライトが点いて \(゜∀゜)/ジャーン という起動音はするんですが、以下それを無限ループするという恐怖の状態に。
これは結局 command (⌘) + R を同時押ししながら起動、で解決しました(復旧システムから起動)。
macOS を再インストールする方法 – Apple サポート (日本)
その2 再インストールされたmacOSが古い
「その1」で順当に再インストール作業を進めたところ、OS X 10.9 (Mavericks) がインストールされました。
おそらくこれが工場出荷時のOSなんだと思いますが、調べたところこの世代のMBAは macOS 11 (Big Sur) までは上げられるということが分かり、そこからOSをアップグレードする方法が分からず(確かAppStoreからインストールできなかった)、結局また初期化することになりました。
以下のサイトを参考にさせていただきました。
MacBook Air Mid 2013 を中古で購入して、Big Sur を入れてみた – シンプルシンプルデザイン 徒然なままに
なぜ順当にアップグレードできなかったのだろう?と不思議に思いましたが、このサイトに書かれているおそらくこれが答えでした。
7. ポップアップ画面が表示されるので、名前はそのまま、フォーマットの形式は「APFS」を選択する
(「APFS」を選択することが重要。これを選択しないとmacOS Big Sur はインストールできない。ちなみにLionで起動している状態でフォーマットしようとしても、APFSの選択肢は表示されない)
とりあえずここも事なきを得、無事 Big Sur まで上がります。
その3 AppStoreからXcodeがインストールできない
macOSやiOSといったAppleネイティブのアプリケーション開発を行う場合、ほぼ必須となるのがXcodeなる純正IDEなわけですが、たいていAppStoreで配布しているバージョンが最新メジャーバージョンのmacOSにしか対応しておらず、古いOSにインストールする時はDeveloperサイトからダウンロードしてくる必要がある、ということを事前に知っていました。
それが以下のページ。Apple IDでのログインが必要。
More – Downloads – Apple Developer
その4 WindowsのVS2022からMacに接続できない!
最近のVisual StudioにはAndroidやiPhoneといった端末でリモートデバッグする機能が備わっており、常々それをやれる環境を整えたいと思っていました。
Androidは普通にWindows上でエミュレータが起動するので何ら問題はないのですが、iPhoneに関してだけは忌まわしきApple社(失礼)のおそらく諸々利権の関係上、実機のMacがなければビルドすらできないという課題があったのです。
Microsoftはそれを織り込み、同一ネットワークにあるMacにSSH接続し、そのマシンリソースを使ってビルド、エミュレータ上への配置とデバッグを行うことができる神すぎるにも程がある機能をVSに搭載してしまいました。確か2019辺りからだったと思います。
で、適当な.NET MAUIプロジェクトを作って早速Macとペアリングをしようとしたのですが……ここからが地獄の始まり。
Xamarin.Messaging.Integration.State.ServerStateContext Error: 0 : dotnet の検証に失敗しました。予期しないエラーが発生しました
Xamarin.Messaging.Exceptions.ReceiverNotFoundException: トピック xvs/idb/initialize-dotnet-sdk のレシーバーが見つかりませんでした
場所 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
場所 Xamarin.Messaging.Client.ApplicationMessageExtensions.<>c__DisplayClass10_0`1.<OfResponse>b__1(MqttApplicationMessage m) 場所 D:\a\_work\1\s\src\Xamarin.Messaging.Client\Extensions\ApplicationMessageExtensions.cs:行 194
場所 System.Reactive.Linq.ObservableImpl.Select`2.Selector._.OnNext(TSource value) 場所 /_/Rx.NET/Source/src/System.Reactive/Linq/Observable/Select.cs:行 39
--- 直前に例外がスローされた場所からのスタック トレースの終わり ---
場所 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
場所 Xamarin.Messaging.Client.MessagingClient.<PostAsync>d__21`2.MoveNext() 場所 D:\a\_work\1\s\src\Xamarin.Messaging.Client\MessagingClient.cs:行 208
--- 直前に例外がスローされた場所からのスタック トレースの終わり ---
場所 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
場所 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
場所 Xamarin.VisualStudio.IOS.Messaging.DotNetSdkValidator.<ExecuteValidationAsync>d__7.MoveNext() 場所 D:\a\_work\1\s\src\Core\VisualStudio.IOS\Messaging\DotNetSdkValidator.cs:行 87
--- 直前に例外がスローされた場所からのスタック トレースの終わり ---
場所 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
場所 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
場所 Xamarin.VisualStudio.IOS.Messaging.DotNetValidator.<ValidateAsync>d__10.MoveNext() 場所 D:\a\_work\1\s\src\Core\VisualStudio.IOS\Messaging\DotNetValidator.cs:行 69: 12/17/2022 14:40:03Z
DateTime=2022-12-17T14:40:03.4301617Z: 12/17/2022 14:40:03Z
Xamarin.Messaging.Integration.State.ServerStateContext Error: 0 : !dotnet の検証に失敗しました。予期しないエラーが発生しました: 12/17/2022 14:40:03Z
DateTime=2022-12-17T14:40:03.4301617Z: 12/17/2022 14:40:03Z
何やら initialize-dotnet-sdk というところでコケているようなんですが、日本語でも英訳してもこのエラー文言では根本原因を掴むことができませんでした。一応、それらしいIssueも見つけたんですが… orz
Pair to Mac fails iOS workload install since 6.0.101 · Issue #13611 · xamarin/xamarin-macios
結局、古いXcodeを自前で入れたからどっかで不整合起こってんじゃね?の疑念を払拭しきれず、macOSの最新化に乗り切りました。
その5 macOS Venturaインストール。そして…
今年リリースされたばかりのOSを、果たして9年も前のマシンに入れてまともに動くのかどうか怪しいところではありましたが、ネットで調べる限り動かしている人はいそうだ、ということで、最悪文鎮化する覚悟でやることにしました。
参考にさせていただいたのは以下のサイトです。多分カタギのやり方じゃないのでやる人は自責でやってください。
macOS VenturaをインストールできないMacにOpenCore Legacy Patcherを使用してインストールする(メディア作成編) – あの角を曲がれば、かぼしー
これも何だかんだありましたが気合いで乗り切りました。何だかんだというか主に媒体作成で引っかかったんですが、とりあえず外付けHDDとかに焼き込むことはできないみたいなので16GB以上のUSBメモリをご用意ください。
で、再び同じことをします。
Xamarin.Messaging.Integration.State.ServerStateContext Error: 0 : 1 つ以上のエラーが発生しました。既知の場所から SSH キーを使用することはできません
Xamarin.Messaging.Integration.MessagingConfigurationException: 1 つ以上のエラーが発生しました。既知の場所から SSH キーを使用することはできません ---> Xamarin.Messaging.Exceptions.MessagingException: 1 つ以上のエラーが発生しました。既知の場所から SSH キーを使用することはできません
場所 Xamarin.Messaging.Ssh.SshInformationProvider.CheckSshProvider() 場所 D:\a\_work\1\s\src\Xamarin.Messaging.Ssh\SshInformationProvider.cs:行 82
場所 Xamarin.Messaging.Ssh.SshInformationProvider.<GetPassPhraseAsync>d__12.MoveNext() 場所 D:\a\_work\1\s\src\Xamarin.Messaging.Ssh\SshInformationProvider.cs:行 58
--- 直前に例外がスローされた場所からのスタック トレースの終わり ---
場所 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
場所 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
場所 Xamarin.Messaging.Integration.State.ConfiguringState.<GetSshConnectionAsync>d__17.MoveNext() 場所 D:\a\_work\1\s\src\Xamarin.Messaging.Integration\State\ConfiguringState.cs:行 209
--- 直前に例外がスローされた場所からのスタック トレースの終わり ---
場所 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
場所 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
場所 Xamarin.Messaging.Integration.State.ConfiguringState.<GetSshConnectionAsync>d__17.MoveNext() 場所 D:\a\_work\1\s\src\Xamarin.Messaging.Integration\State\ConfiguringState.cs:行 213
--- 直前に例外がスローされた場所からのスタック トレースの終わり ---
場所 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
場所 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
場所 Xamarin.Messaging.Integration.State.ConfiguringState.<GetSshConnectionAsync>d__15.MoveNext() 場所 D:\a\_work\1\s\src\Xamarin.Messaging.Integration\State\ConfiguringState.cs:行 122
--- 内部例外スタック トレースの終わり ---
場所 Xamarin.Messaging.Integration.State.ConfiguringState.<GetSshConnectionAsync>d__15.MoveNext() 場所 D:\a\_work\1\s\src\Xamarin.Messaging.Integration\State\ConfiguringState.cs:行 137
--- 直前に例外がスローされた場所からのスタック トレースの終わり ---
場所 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
場所 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
場所 Xamarin.Messaging.Integration.State.ConfiguringState.<OnExecutingAsync>d__14.MoveNext() 場所 D:\a\_work\1\s\src\Xamarin.Messaging.Integration\State\ConfiguringState.cs:行 70: 12/18/2022 02:22:33Z
DateTime=2022-12-18T02:22:33.5336944Z: 12/18/2022 02:22:33Z
Xamarin.Messaging.Integration.State.ServerStateContext Error: 0 : !1 つ以上のエラーが発生しました。既知の場所から SSH キーを使用することはできません: 12/18/2022 02:22:33Z
DateTime=2022-12-18T02:22:33.5341949Z: 12/18/2022 02:22:33Z
Macのペアリングで怒られました。おそらくMacをアプデする前と後で同じSSHキーを見に行こうとしているか何かのエラーと思います。確かVSの再起動で解消したと思います(うろ覚え)。
で。再実行。
Xamarin.Messaging.Integration.State.ServerStateContext Error: 0 : 接続されている Mac で、リモート エラーが発生しました
Xamarin.Messaging.Exceptions.MessagingRemoteException: /Library/Developer/CommandLineTools で Xcode が見つかりませんでした。[ツール] > [オプション] > [Xamarin] > [iOS Settings (iOS の設定)] で Visual Studio 内の正しい場所を指定するか、既定の場所 ('/Applications/Xcode.app') に正しくインストールされていることを確認してください。
at Xamarin.Messaging.IDB.IDBAgent.InitializeOnMainThreadAsync () [0x0002d] in <e5136e8fae034d3e8cc6ab9e4e6284a4>:0
at Xamarin.Messaging.Client.AgentBase.StartAsync () [0x001b8] in <ffdbf3e35f1c49e3895962c6326aa4af>:0 : 12/17/2022 13:35:36Z
DateTime=2022-12-17T13:35:36.2406395Z: 12/17/2022 13:35:36Z
Xamarin.Messaging.Integration.State.ServerStateContext Error: 0 : !接続されている Mac で、リモート エラーが発生しました: 12/17/2022 13:35:36Z
DateTime=2022-12-17T13:35:36.2406395Z: 12/17/2022 13:35:36Z
Xamarin.Messaging.Ssh.MessagingService Information: 0 : エージェント IDB 17.4.0.301 は実行中です: 12/17/2022 13:35:36Z
DateTime=2022-12-17T13:35:36.2576616Z: 12/17/2022 13:35:36Z
Xamarin.Messaging.Windows.ErrorsManager Error: 0 : /Library/Developer/CommandLineTools で Xcode が見つかりませんでした。[ツール] > [オプション] > [Xamarin] > [iOS Settings (iOS の設定)] で Visual Studio 内の正しい場所を指定するか、既定の場所 ('/Applications/Xcode.app') に正しくインストールされていることを確認してください。
Xamarin.Messaging.Exceptions.MessagingRemoteException: /Library/Developer/CommandLineTools で Xcode が見つかりませんでした。[ツール] > [オプション] > [Xamarin] > [iOS Settings (iOS の設定)] で Visual Studio 内の正しい場所を指定するか、既定の場所 ('/Applications/Xcode.app') に正しくインストールされていることを確認してください。
at Xamarin.Messaging.IDB.IDBAgent.InitializeOnMainThreadAsync () [0x0002d] in <e5136e8fae034d3e8cc6ab9e4e6284a4>:0
at Xamarin.Messaging.Client.AgentBase.StartAsync () [0x001b8] in <ffdbf3e35f1c49e3895962c6326aa4af>:0 : 12/17/2022 13:35:36Z
DateTime=2022-12-17T13:35:36.2581620Z: 12/17/2022 13:35:36Z
Xamarin.Messaging.Windows.ErrorsManager Error: 0 : !/Library/Developer/CommandLineTools で Xcode が見つかりませんでした。[ツール] > [オプション] > [Xamarin] > [iOS Settings (iOS の設定)] で Visual Studio 内の正しい場所を指定するか、既定の場所 ('/Applications/Xcode.app') に正しくインストールされていることを確認してください。: 12/17/2022 13:35:36Z
DateTime=2022-12-17T13:35:36.2581620Z: 12/17/2022 13:35:36Z
また怒られます。これは割と親切なメッセージだと思っていて、VS2022の設定を見直します。
↓の「Apple SDK」のパスが違っていたのでデフォルトに戻しました。
再実行。
4~5分待って……
無事起動しました!!!