Static Library の作成について - ArtefactGitHub/I_T_iOSPractice GitHub Wiki
◆ プロジェクト作成
http://daybysay.hatenablog.com/entry/2015/12/20/140429
を参考に、「Cocoa Touch Static Library」を選んで作成。
〜.h と 〜.m が作成されるが、
https://kerry.lothrop.de/c-libraries/
を参考に、h と cpp へ置き換える。
設定の変更
http://nerd0geek1.hatenablog.com/entry/2013/09/23/205246
を参考に、Derived Dataを"Default"から"Relative"に変更する。
ビルド
ビルドすると、プロジェクト下に DerivedData/〜/〜.a ライブラリが作成される。
Fat ライブラリ作成について
https://www.youtube.com/watch?v=_lqSXKOH5g8
mtouch 引数の設定例
プロジェクトのオプション>「ビルド」>「iOSビルド」
// デバッグビルド用
-gcc_flags "-L${ProjectDir}/XXXX/DerivedData/XXXX/Build/Products/Debug-iphoneos -lXXXX -force_load ${ProjectDir}/XXXX/DerivedData/XXXX/Build/Products/Debug-iphoneos/libXXXX.a"
// リリースビルド用
-gcc_flags "-L${ProjectDir}/XXXX/DerivedData/XXXX/Build/Products/Release-iphoneos -lXXXX -force_load ${ProjectDir}/XXXX/DerivedData/XXXX/Build/Products/Release-iphoneos/libXXXX.a"
◆ エラー
"iOS Deployment Target"
was built for newer iOS version (11.2) than being linked (11.0)
https://qiita.com/mo12ino/items/cc0b7929653640dc3117 を参考に、Info.plist「iOS Deployment Target」を11.2に変更して対応。
アーキテクチャの設定
Undefined symbols for architecture arm64:
"_clib_add", referenced from:
-u command line option
(maybe you meant: _clib_add_internal)
https://ez-net.jp/article/0A/7RrII9dI/1LhpEKH-QiM8/
https://qiita.com/yimajo/items/df7264d7dcc78a57a75d
を参考に、Build Active Architecture Only で、Debug の設定を No に変更。
http://monogusa.hatenablog.com/entry/2014/06/30/204940
を参考に、ectures -> Architectures の値を「$(ARCHS_STANDARD)」から「armv7, armv7s」に変更。
アーキテクチャの設定
Showing Recent Issues Invalid iOS deployment version '-miphoneos-version-min=11.2', iOS 10 is the maximum deployment target for 32-bit targets
http://korechipostit.hatenablog.com/entry/2017/10/31/203952
ターゲットを iOS11.2 にしていたので、むしろ arrmv7 が入れたのがまずいということで arm64 だけに変更。
最小限、何が必要か検証
・Binding ライブラリも作成して試したが、バインディング無しで問題無かった。
ネイティヴ呼び出しのシグニチャを、どこかで正しく定義出来ていれば良さそう。
・静的ライブラリ(*.a)をプロジェクトに配置しなくて良い
構成の mtouch 引数で指定する。
"-cxx"のオプションも不要(C++ ライブラリの場合は必要?)
[memo]
バインディングライブラリーの作成
https://qiita.com/iseebi/items/36c4fe2bd0c996163db5
http://mattsudev.hatenablog.com/entry/2015/09/26/140222
作成について
https://msdn.microsoft.com/ja-jp/library/ez524kew.aspx
公式の「プロジェクト間参照」について
https://www.youtube.com/watch?time_continue=280&v=ZUoPLcmnf1o
公式Youtube動画
・アプリのプロジェクトに lib~.a を配置し、ビルドアクションを「Bundle Resource」に設定する。
(アプリ側はライブラリ配置するだけ)
・アプリのソリューション下にバインディング用プロジェクトを配置する。
バインディングライブラリー作成後、アプリプロジェクトの「参照」>「プロジェクト」で指定する。