Carthageでつらい事
Swiftのバージョンが頻繁に上がる時期だったり、
何らかの理由で特定のライブラリだけバイナリから上手く使えなかったりするときに、
それらのライブラリだけは、ソースからビルドしてもらうために--no-use-binaries
をつけてupdateしなければならない時が結構あります。
個人で開発しているときは、あまりインストールすることがなかったり、情報伝達のコストは当然かからないので楽なのですが、チームで開発しているときには、それを周知するコストが掛かったりします。
なので、できれば公式にCarthageがCartfileに依存ライブラリごとのオプションを何らか記録できたら良いのですが、現在はサポートされていません。同じことで困っている人もいるようです。
Cartfile support for --no-use-binaries per dependency
Barca
なので、Carthageをラップして、サポートした設定ファイルを扱うツールを自作しました。
Barcafile
BarcaはCarthageと同様に、カレントディレクトリにBarcafileを設置して使います
BarcafileはCarthageと同じ限定されたOGDL形式で、Carthageと異なるのは、リポジトリにオリジンの末尾にno-use-bin
をつけられるようになっているところです。コレをつけておくと、その依存ライブラリはソースからビルドされるようになります。
github "ishkawa/APIKit" ~> 3.0
github "SnapKit/SnapKit" ~> 3.0.2
github "cbpowell/MarqueeLabel"
github "ikesyo/Himotoki" == 3.0.0
github "pubnub/objective-c" ~> 4.5
github-no-use-bin "robrix/Either" "master"
github "ReactiveX/RxSwift" ~> 3.0
github "intercom/intercom-ios" ~> 3.0
github "MoZhouqi/KMPlaceholderTextView" ~> 1.3
github "marketplacer/swift-badge" ~> 3.0
github "mixpanel/mixpanel-swift" ~> 2.1
github "realm/realm-cocoa" "v2.1.2"
Barcaの挙動
Barcaはcarthageのupdate
とbootstrap
コマンドをラップしています。
起動時にBarcafile
を開きパースした後、Cartfile
をカレントディレクトリに吐き出します。(Cartfile
が上書きされるので気をつけて下さい)
そして、パースした結果から、ソースでビルドしなくてはならないものと、そうでないライブラリとに対象ライブラリを分け、それぞれのグループについてcarthage
のコマンドを実行します。
例えば、上のBarcafile
ならば
carthage update [...それ以外のライブラリ...]
と
carthage update Either --no-use-binaries
が順番に実行されます。
また、依存ライブラリ名以外に与えたフラグはそのまま実行されるコマンドの最後に追加されます。
また、ラップしていないupdate
,bootstrap
以外のコマンドやフラグは直接carthageに渡されるので透過的に使うことができます。