こんにちは、Unityエンジニアのオオバです。

お悩みさん
お悩みさん
  • XcodeのARM64関連のエラーを解決したい
  • Xcodeビルドを成功させたい
  • オオバ
    オオバ
    本記事ではこれらの悩みを解決します。

    XcodeでビルドしたときARM64関連のエラーが出るときありませんか?具体的には以下のようなエラーです。

    Undefined symbols for architecture arm64  
    

    ARM64アーキテクチャ?と言われても... 」と困っているあなたの悩みを解決する記事です。

    「Undefined symbols for architecture arm64」は参照エラーだった

    結論から話すと、Unityプロジェクトに「MessageUI.framework」を追加することで解決しました。

    今回のケースではiOS向けのネイティブプラグインを開発した際のエラーでした。ネイティブプラグインとは Unityが提供しないOSの機能を使えるようにする拡張 です。iOS向けのネイティブプラグインの場合はではC++やObjective-Cなどの言語を使います。

    エラーの原因は ネイティブプラグインに必要なファイルが足りなかったということ です。 つまり単純な参照エラーだったのです。

    しかしエラー文から本当の原因を読み解くことは難しいですよね。この記事では 「Undefined symbols for architecture arm64」エラーを解決に導く2つの方法を紹介 します。

    仮に原因が参照エラー場合、プラグインに必要なファイルの探し方も分かりやすく解説しています。 Xcodeのビルドエラーで困っている方の助けになれば幸いです。 ぜひ最後まで読んでみてください。

    →11万文字で徹底解説した「DOTweenの教科書」Unityアニメーションの超効率化ツールはこちら

    そもそもARM64とは?

    エラー「Undefined symbols for architecture arm64」の 「ARM64」 とは何でしょうか。

    ARM64とはArm社が開発している CPUのアーキテクチャの1つ です。「CPUアーキテクチャ」とはCPUの基本設計のこと。CPUアーキテクチャに対応したパーツを使用することでパソコンやスマホが動くのです。本題の「ARM64」はデータを64ビット単位で処理することができます。また、現在の スマホのほとんどはARMを採用している ということを覚えておきましょう。

    【Unity】「Undefined symbols for architecture arm64」Xcodeエラーの対応方法_0

    ちなみにUnityのPlayer SettingsからCPUアーキテクチャを設定できます。スマホの場合はARMv7またはARM64の2択です。今はARMv7のシェア率、端末が低性能な点から ARM64だけ選択することが多くなりました。

    Xcodeエラー「Undefined symbols for architecture arm64」で試したい2つの方法

    ここから本題のXcodeエラー「Undefined symbols for architecture arm64」の直し方を解説します。試したい方法が2つあります。

    Undefined symbols for architecture arm64を直す2つの方法

    方法①XcodeのClean Build Folderを試す

    方法②必要なファイルが欠損していないか参照エラーを疑う

    方法①XcodeのClean Build Folderを試す

    まず試してもらいたいことの1つ。Xcodeの「Clearn Build Folder」です。

    【Unity】「Undefined symbols for architecture arm64」Xcodeエラーの対応方法_1

    メニューProduct > Clean Build Folder から選択します。これで直るケースもあります。短時間で試せるため「Undefined symbols for architecture arm64」に遭遇した際は、最初に試しておきましょう。

    方法②必要なファイルが欠損していないか参照エラーを疑う

    今回の原因だった参照エラーの解決方法です。本来必要なファイルが欠損しているのではないか疑ってみましょう。とはいっても、手がかりが思いつかないですよね。

    まずやるべきことは Xcodeが出力するエラー文を隅から隅まで読んでみる のです。

    エラー解決の基本は「エラー文を全部読むこと」

    プログラミング全般に言えることですが、エラーを解決するための最短距離は「 エラーを読むこと 」です。もちろん全て英語で読みづらいのはわかります。しかし、 エラー文は解決の大きな手がかり です。

    今回出力した「Undefined symbols for architecture arm64」エラーの前後を全て読んでみましょう。重要なエラーは以下の部分です。

    Xcodeから出力されたエラー全文
    Undefined symbols for architecture arm64:  
      "_OBJC_CLASS_$_MFMailComposeViewController", referenced from:  
          objc-class-ref in CustomPlugin.o  
    ld: symbol(s) not found for architecture arm64  
    clang: error: linker command failed with exit code 1 (use -v to see invocation)  
    

    このエラー文は、まず1行目の内容が気になると思います。

    Undefined symbols for architecture arm64:  
    

    一見、ARM64に対応しないといけない感じがしますが、エラーを読み進めるとそうではないことがわかります。

    単純な参照エラーでした

    エラーの先を読んでみましょう。解決の手がかりは以下の部分です。

    "_OBJC_CLASS_$_MFMailComposeViewController", referenced from:  
          objc-class-ref in CustomPlugin.o  
    

    今回開発した 「CustomPlugin」が使用する「MFMailComposeViewController」がエラーを起こしている ということが読み取れます。

    「MFMailComposeViewController」をインターネットで検索すると「MessageUI.framework」が必要だということがわかりました。つまり MessageUI.frameworkをXcodeビルドに含めないといけなかった ということです。

    📚 参考サイト : Apple Developer Documentation

    Unityプロジェクトに必要なフレームワークファイルを追加で解決

    必要なフレームワークファイルをUnityプロジェクトに格納することで 自動的にXcodeプロジェクトに追加 されます。Plugins/iOS/MessageUI.framework とUnityプロジェクト内に「MessageUI.framework」を配置しましょう。これでUnityからXcode書き出しをしたときに自動でXcodeプロジェクトに含まれます。

    「そもそもMessageUI.frameworkはどこにあるのか?」 と困っている方もいますよね。こちらの記事で詳しく解説していますのであわせて読んでみてください。

    まとめ : Undefined symbols for architecture arm64の直し方

    記事の内容を簡単にまとめます。

    Undefined symbols for architecture arm64の直し方
    • とりあえずClean Build Folderを試す
    • 64bitアーキテクチャが問題ではない
    • エラー文は済から済まで読んで本当の原因を突き止める
    • Unityプロジェクトにフレームワークを入れると自動でXcodeビルドに含めてくれる

    こんな感じです。

    Xcodeビルドにまつわるトラブルは絶えません。 Xcodeのバージョンが上がるとまた新しいトラブルが待っています。 本ブログではXcode系のトラブルも随時共有していますので、iOS向けの開発をしている方はぜひチェックしておいてください。

    こちらの記事ではXcodeを使ったiOS実機ビルドの際に発生したエラーをまとめてみました。本記事とあわせて読んでみてください。

    この記事があなたのアプリ開発に少しでもお役に立てたら嬉しいです。

    「Unity初心者大学」というUnity初心者向けのYouTube始めました!!
    ぜひチャンネル登録をお願いします!

    最後まで読んでいただきありがとうございました!
    すばらしいXcodeライフをお過ごしください。

    オススメ記事
    検証環境