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の場所や、導入方法についてはコチラの記事にまとめています。よろしければどうぞ。
おまけ
Xcode上では↑のようにエラーを教えてくれますが、もっと詳細を見るときは、右クリックしてReveal in Logをクリックすると良いです。
以上です。
参考
- 自作ライブラリのリンク時に Undefined symbols for architecture エラーが発生する。
- 【iOS】ライブラリが「arm64」に対応していないから? - ものぐさ日記(仮)
- Undefined symbols for architecture arm64
- iOS - ignoring file ~と Undefined symbols for architecture arm64というエラーについて|teratail
- undefined symbols for architecture arm64のエラー - Qiita
- 自作ライブラリのリンク時に Undefined symbols for architecture エラーが発生する。
- Linker command failed with exit code 1でハマりまくったお話 - Qiita