Carthageとは?
こんにちはVASILYでiOSエンジニアをしているニコラスです。
今回はCarthageの紹介をしたいと思います。
CarthageはiOS / OS X開発のための分散型の (decentralized) パッケージマネージャーです。 既にプロジェクトでCocoaPodsを使っていても、同じプロジェクトでCarthageを使うことができます。 CarthageはCocoaPodsと違って中央レポジトリ型ではないので高速です。 また、100%Swiftで作られているため信頼性が高く、欧米のプログラマーコミュニティで特に盛んに利用されています。 Carthageの基本を学べば(たった5分で)すぐ使えるようになります。
Carthageを使うメリット
- コミュニティの活発さ
Carthageのコミュニティはとても活発で、バグがあればだいたい1日以内に修正のPRが送られています。 - 環境依存性の低さ
Carthageは100%Swiftでできているので、CocoaPodsと違って、環境ごとのRubyバージョンの違いによる問題に悩まされることがありません。
Swiftでできているので、Rubyが書けなくてもiOS開発者がOSSに貢献することができます。 (私もPull Requestを送りました。) - シンプルさ
Carthageはダウンロードしたらすぐに使うことができます。CocoaPodsの場合はRubyやRubyGemの依存関係により、CocoaPodsのコマンド実行に失敗することがあります。
インストール
Homebrewでインストールする方法
Carthageをインストールする一番簡単な方法は Homebrewです。
[bash] $ brew install carthage [/bash]
直接ダウンロードする
Homebrewがなくても、GitHubから carthage.pkg をダウンロードすることができます。 Releases Page
ソースコードからインストール
最新の開発バージョンをインストールすることもできます。
[bash] $ git clone git@github.com:Carthage/Carthage.git $ cd Carthage $ make install [/bash]
ライブラリをインストール
Cartfileを作成
Cartfileに含めたいライブラリを書いてください。 CartfileはCocoaPodsのPodfileやBundlerのGemfileと似たようなものです。
データフォーマット
CocoaPodsではインストールするライブラリのリストをPodfileというRubyのDSLで管理します。 Carthageでは、Cartfileというファイルに記述します。 これはOGDLというデータフォーマットで書かれていて、
Cartfileの文法
- 一つ目のキーワードに
github かgit を指定します。 - GitHubでホストされている場合は
github を使い、それ以外でホストされている場合は、git を使います。 github キーワードでは、ブランチ名の指定やバージョンを制限することができます。
[bash] github "Username/RepositoryName" "BRANCH_NAME" OR == / >= / <= / ~> [VERSION_NUMBER] [/bash]
実例
[bash] github "ReactiveCocoa/ReactiveCocoa" "master" #最新のmasterブランチをインストール github "rs/SDWebImage" ~> 3.7 #v3.7.xx の最新版をインストール github "realm/realm-cocoa" == 0.96.2 #v0.96.2をインストール [/bash]
コマンドを実行してライブラリをインストール
プロジェクトのルートディレクトリで下記のコマンドを実行してください。
[bash] $ carthage bootstrap #ios, mac, watchos, tvosなど、プラットフォームを指定することもできます。 $ carthage bootstrap --platform ios [/bash]
正常に完了すると、[bash] Carthage/Build , Carthage/Checkouts [/bash]という2つのフォルダが作成されます。
Carthage/Build
.framework
,.framework.dySYM
がここに生成されます。
Carthage/Checkouts
- ライブラリのソースコードファイルがここにダウンロードされます。
Xcode設定
Run Script Phase を追加する
- プロジェクトファイルを開く
- TARGETS内のプロジェクト名を選択
- Build Phasesを選択
- 左上の「+」ボタンをクリックから"New Run Script Phase"を選択
- コマンド入力欄に
/usr/local/bin/carthage copy-frameworks
と入力 - Input Filesのところにインストールするフレームワークを追加します。
.frameworkをリンクする
- プロジェクトファイルを選択
- Generalを選択
- Linked Frameworks and LibrariesにCarthageフォルダからフレームワークを選択して追加します。
これでライブラリのインストールが完了し、アプリをビルドすることができます。
Git管理 - Carthage運用のコツ
- 基本的にgitにコミットするべきものは
Cartfile
とCartfile.resolved
とCarthage
フォルダです。 - その理由として、いくつかのメリットがあります。
git clone
した時や、ブランチを切り替えるたびにcarthage update
をする必要がありません。- また、プロジェクトに新しいメンバーが入った時など、
carthage update
するタイミングごとにCartfileのバージョンが違ってしまうといったことが避けられます。
まとめ
今回はCarthageの導入方法を紹介しました。
CocoaPodsは根強い人気がありますが、個人的にはiOS開発の本質とは関係ないところでいろいろ問題がありました。
(RubyGemsのバージョンごとのコンフリクトであったり、CocoaPods自身のアップデートでPodsのレポジトリが破損したりなど)
CarthageはSwiftで作られているため、Swiftのライブラリしか依存関係がありません。
CocoaPodsの運用で苦労している方は、ぜひCarthageを使ってみてください。