Apple Silicon MacでiOSシミュレータを実行できないときの対応方法(arm64バイナリのエラー)

Apple Silicon Macで組み込んだフレームワークによっては、次のようなエラーが起きてiOSシミュレーターが実行できなくなることがあります。

ld: in /Volumes/Data/src/RK/TechGakuWebSite/SampleCodes/OpenCVTest_iOS/common/opencv2.framework/opencv2(ios_conversions.o), building for iOS Simulator, but linking in object file built for iOS, for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

このエラー出力の例はOpenCV 4.6.0で発生するものです。この記事では対応方法を紹介します。

スポンサーリンク

エラー原因

Apple Silicon Mac上でiOSシミュレーター用にarm64でアプリがビルドされたときに、組み込んだフレームワークがXcode 12以降のアーキテクチャやApple Silicon対応が不十分な場合に、iOSシミュレーター用のビルドにiOSデバイス用のフレームワークがリンクされてしまったことが原因のようです。

対応方法

Apple Silicon MacにはRosetta2があるので、x86_64版でビルドしたバイナリでもiOSシミュレータやXcodeのSwiftUIのプレビューで使用可能です。

iOSシミュレーター用にビルドするときに、arm64でビルドしないように設定します。次のように操作します。

(1) アプリのターゲットの設定の「Build Settings」タブを開きます。

(2) 「Architectures」の「Excluded Architectures」の「Debug」を選択します。

(3) 「Debug」欄に表示された「+」ボタンをクリックします。「Any SDK」が追加されます。

「+」をクリックする
「+」をクリックする

(4) 追加された「Any SDK」を「Any iOS Simulator SDK」に変更します。

(5) 「Any iOS Simulator SDK」の設定に「arm64」を入力します。これにより、iOSシミュレーター用のデバッグビルドではarm64でビルドしないようになります。

(6) 手順(4)と(5)と同様に操作して、「Release」ビルドにもarm64を設定します。

スポンサーリンク
最新情報をチェックしよう!