生成ライブラリのTarget Platformの注意 – Undefined Symbols for arm xxx

Xcodeでライブラリを作って,いざ,Unityに取り込むときに失敗する事があります.

原因は,Xcodeで生成したライブラリはarm系アーキテクチャに対応する様に設定しているにもかかわらず,対応していない事が原因です.

生成ライブラリの対応アーキテクチャ(例:armv7, i386, x86_64など)は,XcodeでLibraryのTarget Platform(例:実機 / iOSシミュレータ / Generic iOS Device)の選択で変化する事に注意が必要です.

Xcodeで実機 又は Generic iOS Deviceを選択してビルドすると,arm64, armv7, armv7sアーキテクチャ対応ライブラリ(Static Libで.a拡張子)となりました.(対応アーキテクチャはXcodeの"Valid architectures"に記述したアーキテクチャに対応するかもしれません)

Unityへ取り込む時は,上記設定で生成したライブラリである必要があります.


 

一方,Simulator(例:iPhoneXシミュレータ)を選択してビルドすると,i386, x86_64アーキテクチャ対応なライブラリとなるようです.

Unityでビルドする,すなわち,実機でのテストを意味するのでarmアーキテクチャでなければならないにもかかわらずPC向けCPUアーキテクチャ用に生成したライブラリで取り込みが失敗する.

注意追記

私の環境は,Xcode9のせいか,"Build Activate Architecture Only"をNoにしても,期待した効果は得られず,上記の説明した設定に従う必要がありました.