Swift用依存管理マネージャのCarthageを導入する
Swift用依存管理マネージャのCarthageを導入する
前回のCocoaPodsは結局採用せずCarthageを採用した理由は以下の通り。
- 元々のxcodeprojを使えないので、何かあった時に情報が少なそう(Carthageは元のxcodeprojを使うのでシンプル)
- xcworkspaceについての情報が少ない(Carthageはxcodeprojのまま)
- AlamofireがCarthageに対応している
Carthageとは?
CocoaPodsと同様に、Cocoaライブラリ依存管理ツールです。下記の2記事が最も詳しく解説されています。
(ちなみにCarthageとググるとカルタゴが出てきますが、チュニジア共和国の古代都市国家だそうで。何故この名前になったのだろう。)
Carthageの仕組み
上記にも言及されていますが、Carthageはdynamic frameworkを作成するとのこと。
一方、CarthageはリポジトリのXcodeプロジェクトの情報をそのまま利用してdynamic frameworkを作成します。
dynamic framework は iOS8以上 対応なのでそれ以下は導入できないらしい。 これ以下のiOSに対応する事はできないので注意が必要。
dynamic frameworkってつまり何?と思ってググると、dynamic library とかstatic library とかがごちゃ混ぜになりつつ、わかってる体で話が進んでいる記事が多いので、 dynamic frameworkとはなんぞや、から探してみると、stackoverflowがヒット。
ios - Library? Static? Dynamic? Or Framework? Project inside another project - Stack Overflow
libraryはコードのみ、frameworkはassetsを含められる。staticはコンパイル時、dynamicはランタイム時ということらしい。static/dynamicはごく普通なので問題なかったですが、framework/libraryの違いがわかってよかった。
Carthageのインストール
homebrewでインストールできる。
$ brew update $ brew install carthage
以上。
Cartfileを作成
BundlerでいうGemfileみたいな感じで依存性をCartfile
というファイルに書いていく。
OriginとVersion requirementを追加
Originはgithubリポジトリとして書くか、gitのrepositoryパスを指定する。 Version requirementはバージョン番号のほか、gitのbranch名やcommitのhashを指定できる。
今回は前回のCocoaPodsの時と同様に、Alamofireを導入する。
$ cat Cartfile github "Alamofire/Alamofire" >= 1.2
カンタン!
carthage updateを実行
Cartfileに追加したライブラリを実際に利用できるようにする。
$ carthage update *** Cloning Alamofire *** Checking out Alamofire at "1.2.2" *** xcodebuild output can be found in /var/folders/2s/zm_3tqmd2kl9dfk44q55g0s00000gn/T/carthage-xcodebuild.uyO8hk.log *** Building scheme "Alamofire iOS" in Alamofire.xcworkspace *** Building scheme "Alamofire OSX" in Alamofire.xcworkspace
carthage update
を叩くとCarthage/Checkouts
ディレクトリが作成され、利用するそれぞれのライブラリ名でcloneされる。
$ ls Carthage/Checkouts/Alamofire Alamofire.playground Alamofire.xcodeproj CHANGELOG.md Carthage LICENSE Source iOS Example.xcodeproj Alamofire.podspec Alamofire.xcworkspace CONTRIBUTING.md Example README.md Tests
また、前述したようにdynamic frameworkとしてbuildされる。 ここまで自動でやってくれるので非常に便利。
$ ls Carthage/Build/iOS/Alamofire.framework Alamofire Headers Info.plist Modules _CodeSignature
Xcodeに設定を追加
ライブラリを使えるよう、Xcodeでも設定を追加します。
- “General” -> “Linked Frameworks and Libraries” から、"+“をクリックし先ほどビルドした
Carthage/Build/iOS/Alamofir.framework
を追加 - “Build Phases” -> “+” -> “New Run Script Phase” から、Scriptとして下記を追加
/usr/local/bin/carthage copy-frameworks
これだけでうごく!と思いきやエラーが。 同じエラーが出ている人もいるようで見てみる。
どうも皆 “General” -> “Embedded Binaries"にも追加しているので、やってみると成功した。 これでswfitから
import Alamofire
とすれば利用できます。
まとめ
- CocoaPodsに比べると導入がちょっと手間がかかるけど、管理とかハマりを考えたら楽だと思う。
- Carthageカンタン便利!対応しているならどんどん使っていくと良いと思う。
- CarthageのついでにReactiveCocoaとか面白そうだけど、しょっぱなからこれはどうだろうという思いと、趣味だしいいんじゃねーの感の葛藤がある