Carthage: Swift対応の新しいライブラリ管理
iOS, OSXで利用できるライブラリ管理ツールといえばCocoaPodsが有名ですが、 それとはまた違った方針のCarthageというライブラリ管理ツールがリリースされました。 GitHubのデベロッパーを中心としたチームで開発が進められているようです。
https://github.com/Carthage/Carthage
インストール方法
Releasesからpkgをダウンロードして、インストーラーを実行します。
使い方
- Cartfileを書く
carthage update
を実行する- Carthage.buildに作成された.frameworkをXcodeに追加する
Cartfileではgithub
, git
の2種類のキーワードが利用でき、以下のように書きます。
github "ishkawa/ISMemoryCache" ~> 0.1.1
git "https://github.com/ishkawa/ISMemoryCache.git" ~> 0.1.1
サポート対象
Carthageはdynamic frameworkのみをサポートするため、Carthageを利用するアプリはiOS 8以降かOS Xで動作する必要があります。 また、Carthage経由でインストールされるライブラリには.frameworkをビルドするスキームが用意されている必要があります(例: ReactiveCocoa)。
CocoaPodsとの違い
CocoaPodsはpodspecの情報とリポジトリのソースコードを元にstatic libraryをビルドするXcodeプロジェクトを自動生成するという方式でした。 一方、CarthageはリポジトリのXcodeプロジェクトの情報をそのまま利用してdynamic frameworkを作成します。 Carthageはdynamic frameworkを作成するスキームを自動的に作成してくれるわけではないので、 ライブラリの提供者がリポジトリのXcodeプロジェクトにdynamic frameworkをビルドするスキームを用意する必要があります。 その代わり、podspecのようなメタ情報を用意する必要はありません。
いますぐ使えるか?
残念ながらいますぐ全てのライブラリをCarthageでインストールすることはできません。 理由はライブラリの提供者がリポジトリのXcodeプロジェクトにdynamic frameworkをビルドするスキームを用意する必要があるからです。 しかし、Xcode 6以降ではライブラリの開発用のXcodeプロジェクトでdynamic frameworkをビルドすることは自然なこととなったので、 今後導入できるようになるライブラリは増えていくかと思われます。
ライブラリをCarthageでインストールできるようにするには?
- リポジトリにXcodeプロジェクトを用意し、dynamic frameworkをビルドするスキームを追加する
- Semantic Versioningに沿ったgit tagを打つ
自分が使いたいライブラリがこうなっていない場合にはpull requestを送るといいかもしれません(受け入れてくれるかはわかりません)。
私見
Carthageは単にライブラリをクローンしてビルドをするだけなので、CocoaPodsと比べると無理のない方式でライブラリをインストールできるのが魅力的だと思いました。 iOS開発ではdynamic frameworkがまだ新しい概念なので導入できるライブラリは少ないのが現状ですが、今後は増えて行くと思うので期待しています。