LoginSignup
16
9

More than 1 year has passed since last update.

Xcode 14.3 をインストールした環境で、Xcode 14.1 で Rosetta を有効にしてビルドする

Last updated at Posted at 2023-04-07

Xcode 14.3 から Rosetta のサポートはなくなりました。

Xcode isn’t supported under Rosetta. See Developer Technote “Resolving architecture build errors on Apple silicon“ for more information. (92772361)

これは Xcode 自体が Rosetta をサポートしないだけで、手順は異なりますが、これまで通りに Rosetta を利用したビルドは有効です。メニュー Product から Destination → Destination Architectures → Show both を選ぶと、Rosetta なシミュレーターが追加されます。それを選択してビルドします。リリースノートが言葉足らずのように感じます。

大きな問題が隠れている

良かった、問題ないね!と言いたいところですが、大きな問題があります。なぜか、Xcode 14.3 をインストールすると、14.2 以下の Xcode で Rosetta を使ったビルドが失敗するようになります。なにかしら、14.3 が影響をもたらしていると思われますが、詳しい理由はわかりません。この問題は beta からありましたが、修正されていません(仕様かもしれません)。

なお、beta 時でこの症状になった場合、/Library/Developer を削除する、それでも治らなければ OS を入れ替えるという力技で対応してました。いまは正規リリースされたので、この方法で対応は現実的ではないですね。

Xcode 14.3 がインストールされた環境でも Xcode 14.1 の Rosetta を動かしたい

アプリ開発を行っていると、複数バージョンの Xcode を利用することがあります。14.3 をインストールした環境で、14.1 で Rosetta が必要なプロジェクトがビルドできないのは不便です。逆に 14.1 + Rosetta のため、14.3 をインストールできないのは避けたいです。どうにかビルドしたい。今回はこのアプローチで対応してみました。

シミュレーター向けのアーキテクチャを変更する

プロジェクト内のシミュレーター向けのビルドをすべて x86_64 に変更します。

  • CocoaPods を利用していたので、Podfile を編集しました
Podfile
installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
+     config.build_settings["ARCHS[sdk=iphonesimulator*]"] = "x86_64"
    end
  end
  • ターゲットすべてにおいて、debug.xcconfig に ARCHS[sdk=iphonesimulator*] = x86_64 を追記、または Build Settings を変更しました

arch.png

上記の設定をしたところ、無事にビルドできました。本当に良かった。しかし、まだ気になる点も残っています。

  • 自環境だとダイアログが出てこなかった
    • 事前に Rosetta を利用してたから?
  • Xcode 14.1 の Rosetta チェックあり・なしでもビルドできた

まとめ

macOS の仮想化を利用して、14.2 以下専用の環境を構築しようかと思いましたが、ひとまず回避策があったので安堵しました。ただ、対症療法的で不安が残っています。別に良い対応方法があれば知りたいです。

その他、FAQ

  • プロジェクトを Rosetta 不要にすべきでは?
    • まったく、その通りです。ぐうの音も出ません。
  • プロジェクトを Xcode 14.3 に対応すべきでは?
    • まったく、その通りです。ぐうの音も出ません。
  • SPMを利用してますが
    • 対応わかっていません
  • Carthageを利用してますが
    • まずCarthageの利用をやめましょう

追加検証(追記: 2023/04/11)

気になったので、Xcode 14.3 を一度もインストールしてない環境にて、次の準備をしました。

  • Xcode 14.1 の Rosetta をオフにする
  • シミュレーター向けの設定を x86_64 にする(上述通り)

この条件でビルドすると、本来は Rosetta が必要なプロジェクトにも関わらず、ビルドができました。

Simulator は Xcode 14 の時点で、アーキテクチャの指定が可能になりました。これが、Xcode の Rosetta なしでもビルドができた理由かもしれません(推測です)。

You can now boot simulator devices using universal runtimes as x86_64 on a Mac with Apple silicon by using the new --arch command-line argument to simctl boot. (88278366) (FB9860747)

外部発表(追記: 2023/04/12)

こちらの内容を YUMEMI.grow Mobile #2 で発表しました。

16
9
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
16
9