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
でビルドしないように設定します。次のように操作します。