LoginSignup
14
12

More than 1 year has passed since last update.

M1 MacでiOSアプリをXcodeから走らせる

Last updated at Posted at 2021-10-18

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サイトにデバイスとして登録しないとならないようです。
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f33313639362f31333062323462612d613565302d363933382d353061302d6431666633633536643138612e706e67.png

以下の画面で
Platform は iOS, tvOS, watchOS、
Device Name は適当な名前、
Device ID(UDID) は先程のプロビジョニングUUID
をそれぞれ入力します。
register_device.png

iPodとして登録されるんですね。

これで目的のiOSアプリのプロビジョニングの編集画面のDevices一覧に出現しますので修正登録して、ダウンロードしてXcodeのプロジェクトに登録してやると、XcodeからM1 Macを実行対象デバイスとしてビルド・デバッグが可能となります。

14
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
12