M1 MacでiOSアプリをXcodeから走らせる
M1 MacでiPadアプリが動かせるようになって、iOSアプリの新たなプラットフォームとなりました。
基本的にはほとんどiPadと同様の動きのようですが、一部そうではないようです。
iPadで問題なく動作するのにM1 Macでは死ぬ
iPadで問題なく動作するのにM1 Macでアプリがクラッシュする事象が発生しました。
私がクラッシュに直面したのは以下のコードです。
let appearance = UIToolbarAppearance()
if #available(iOS 15.0, *) {
self.toolbar.scrollEdgeAppearance = appearance // ここで死ぬ
}
どうやらUINavigationControllerのツールバーにsetScrollEdgeAppearance:というセレクタが無いことが原因のようです。
このコードの解決策は
let appearance = UIToolbarAppearance()
if #available(iOS 15.0, *) {
if (!ProcessInfo.processInfo.isiOSAppOnMac) { // macOSじゃないよ
self.toolbar.scrollEdgeAppearance = appearance
}
}
でした。
ProvisioningにM1 MacのiPad環境をどう含める?
XcodeからM1マックでdebugする際に少し手間取りました。
Apple DeveloperサイトにM1 MacのハードウェアUUIDを登録していたので、iOSアプリのDevelopment Provisioningにデバイスを追加しようとしたのにDevicesの欄にM1 Macの名前が現れません。
実はMacのシステムレポートのハードウェアUUIDの下にプロビジョニングUUIDというものがあって、これをApple Developerサイトにデバイスとして登録しないとならないようです。
以下の画面で
Platform は iOS, tvOS, watchOS、
Device Name は適当な名前、
Device ID(UDID) は先程のプロビジョニングUUID
をそれぞれ入力します。
iPodとして登録されるんですね。
これで目的のiOSアプリのプロビジョニングの編集画面のDevices一覧に出現しますので修正登録して、ダウンロードしてXcodeのプロジェクトに登録してやると、XcodeからM1 Macを実行対象デバイスとしてビルド・デバッグが可能となります。