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
を設定します。
