渋谷ほととぎす通信

新しいこと、枯れたこと問わず大庭が興味を持ったものを調査、生活の効率を求める完全趣味の技術ブログ

Unity Undefined symbols for architecture arm64というエラーがXcodeで吐かれたときの対応


iOS向けネイティブプラグインを書いて、Unityでビルドしたらこのようなエラーに見舞われました。その備忘録です。

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)

arm64に対応していないっぽい

Undefined symbols for architecture arm64:

このエラー内容からarm64に対応していないように受け取れます。 自分が作成したプラグインが、arm64に対応していないというネイティブ知識がほぼない僕にとって、かなりきついエラー内容ですが、本題はここでは無くその先にあります。

単純な参照エラーである

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

この辺りに答えが書いてあります。 CustomPlugin.oが、MFMailComposeViewControllerを参照できていないというのが今回のエラーの原因です。 MFMailComposeViewControllerを検索するとMessageUI.frameworkが必要なようです。
参考 : iphone - MFMailComposeViewController doesn't link for simulator - Stack Overflow

Plugins/iOS/MessageUI.frameworkという形でUnityプロジェクト内に配置してあげれば、Xcode書き出し時に自動で含めてくれます。

frameworkの場所や、導入方法についてはコチラの記事にまとめています。よろしければどうぞ。

おまけ

f:id:esakun:20190404123137p:plain

Xcode上では↑のようにエラーを教えてくれますが、もっと詳細を見るときは、右クリックしてReveal in Logをクリックすると良いです。


以上です。

参考