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

STEP
アプリのターゲットの設定の「Build Settings」タブを開きます。
STEP
「Architectures」の「Excluded Architectures」の「Debug」を選択します。
STEP
「Debug」欄に表示された「+」ボタンをクリックします。「Any SDK」が追加されます。
「+」をクリックする
「+」をクリックする
STEP
追加された「Any SDK」を「Any iOS Simulator SDK」に変更します。
STEP
「Any iOS Simulator SDK」の設定に「arm64」を入力します。これにより、iOSシミュレーター用のデバッグビルドではarm64でビルドしないようになります。
STEP
手順(4)と(5)と同様に操作して、「Release」ビルドにもarm64を設定します。
リリースビルド用にも設定する
リリースビルド用にも設定する

著書紹介

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Akira Hayashi (林 晃)のアバター Akira Hayashi (林 晃) Representative(代表), Software Engineer(ソフトウェアエンジニア)

アールケー開発代表。Appleプラットフォーム向けの開発を専門としているソフトウェアエンジニア。ソフトウェアの受託開発、技術書執筆、技術指導・セミナー講師。note, Medium, LinkedIn
-
Representative of RK Kaihatsu. Software Engineer Specializing in Development for the Apple Platform. Specializing in contract software development, technical writing, and serving as a tech workshop lecturer. note, Medium, LinkedIn

目次