【submoduleの導入】例:BlocksKit

submoduleと言う機能がgitにはあります。

そのsubmoduleの導入の仕方を忘備録として書いておきます。

と言うか、BlocksKitを入れる時に2回位つまづいている印象なので書きたくなっただけです。

1.サブモジュールのクローン
git submodule add <submoduleのurl> <保存先>
例:git submodule add https://github.com/pandamonia/BlocksKit.git submodules/BlocksKit

でサブモジュールをダウンロードして来ます。

2.サブモジュールが使っているサブモジュールのクローン
git submodule --init --recursive

これが、意外と大事でここではまってました。
BlocksKitはlibffiと言うのを使っておりこれが最初のクローンだけでは入っておらず空の状態です。

3.プロジェクトに追加。

まぁ、これは普通に追加して下さい。

※ここからは、Xcodeのプロジェクトファイルの設定になります。

4.リンカフラグ-ObjC,-all_load(または-force_load)の追加。

Xcodeのバグでカテゴリを用いている静的ファイルを自動でロードしてくれません。
そのために、

○-ObjC
○-all_loadないし-force_load

をXcodeのBuild Settings内のOther Linker Flagsに追加しなければなりません。

-all_loadと-force_loadの違いは、-all_loadは全てをロードするのに対し、-force_loadはロードすべきファイル等を引数に取り、そのファイルのみをロードするリンカフラグです。-all_loadで全てを展開するとファイルサイズがむやみやたらに大きくなってしまったりするので時と場合で使い分けましょう。

5.Target Dependenciesに静的ライブラリを(あれば)追加する

スクリーンショット 2013-06-16 19.39.00
ここに+ボタンを押して追加しましょう。

6.Link Binary With Librariesにも同様に追加。

スクリーンショット 2013-06-16 19.39.07
こちらも同様です。

7.Header Search Pathsに導入したsubmoduleのメインフォルダへのパスを追加。

#import <サブモジュール>
をするにはプロジェクトがサブモジュールファイルのヘッダを検索出来なければいけません。
そのために、Header Search Pathsに導入したsubmoduleのメインフォルダへのパスを追加します。

僕は、Xcodeのトップフォルダにsubmodulesと言うフォルダを作成し、そこに全てsubmoduleを導入する様にしているので添付画像の様な形で対応しています。

スクリーンショット 2013-06-16 19.47.24

※ここからはBlocksKit独自のものになります。

8.”-lz”, “-Wl,-no_compact_unwind”をリンカフラグに追加

詳しくは調べてないです、すみません。
調べます。

と言う感じです。質問等あればコメントでどうぞ。

誰かのお役に立てば。

コメント

タイトルとURLをコピーしました