速度差を測定してみるXcodeの仕様変更に影響しにくいCarthageの欠点Carthageを導入するCarghageをインストールCartfileを用意してライブラリを記入Cartfile作成Cartfile編集コマンドでインストールするプロジェクトにフレームワークをリンクするフレームワークをリンクするまとめて指定も可能デバッグについてCartfileの記法についてライブラリのバージョン指定GitHub以外からライブラリインストールテスト環境限定のライブラリインストールgit管理についてまとめライブラリ管理ツールとして市民権を得て暫く経つCarthageですが、iOS/Swiftに入門したばかりの人や使う機会がなかった人などもいると思います。そんな人たち向けに改めてCarthageとは何か?どう便利なのか?どう使うのか?についてまとめてみました。iOSアプリに主軸を置いて説明しています。CarthageとはSwift製ライブラリ管理ツールCarthageとは、Swift製のライブラリ管理ツールです。CocoaPodsと同様の立ち位置で、ライブラリ管理に便利なツールとなります。プロジェクトに対してオプション更新をしたりと、導入が楽になっているかわりに高機能となっています。その中にライブラリとなるソースコードが含まれています。ビルドすることでPodsプロジェクト内のソースコードも一緒にビルドされて、対象プロジェクトにはフレームワークとしてリンクされます。リンク処理も全てCocoaPodsが自動で行ってくれます。CarthageCarthageは最低限のライブラリからフレームワークの作成・更新のみとなります。ワークスペースを作成したり、フレームワークをプロジェクトにリンクしたりはしません。リンク処理は自分で行う必要があります。Carthageの利点ビルド時間の短縮フレームワークのリンク構築を自分で行う必要がある、Carthageの利点はビルド時間の短縮になります。Carthageはコマンド実行するとライブラリをインストールしてフレームワークを作成します。事前にフレームワークを作っておくことで、プロジェクトに対してのビルド時間が短くできます。速度差を測定してみるここでそれぞれのビルド時間を測定してみました。測定は最初の5回は慣らし、5回目から数回測定。測定ではRebuild(Clean+Build)で測定する。インストールライブラリはSwiftJSON。1.04967s効果としては期待どおりで、ビルド時間短縮を目的とするには、十分効果があると見てよいと思います。ときとして動かないケースに出くわします。この場合、CocoaPodsが対応してくれるまで待ったあとにバージョンを上げる必要があります。開発安定性はCocoaPodsより勝っているとも言えます。対応ライブラリがCocoaPodsより少ない初期導入が少々面倒フレームワークの削除が少々面倒の2つを上げておきます。フレームワークの削除は、リンクを外す処理が必要になるため、その手間分面倒ということになります。CocoaPodsの場合、Podfileから削除してインストールするだけで自動でリンクを外してくれます。対応ライブラリが少ないというのは、今の所一番痛い課題かと思います。これに関しては今後時間による量が増えるのを期待するしかなさそうです。Carthageを導入するではCarthageの概要や利点について説明したので、実際に導入する手順について説明します。CarghageをインストールCartfileにインストールしたいライブラリを記入コマンド実行リンク設定になります。Carghageをインストール最も手軽なHomebrewでインストールします。実行後の再実行してみてください。Cartfileを用意してライブラリを記入Cartfileファイルの用意Cartfileの編集の順番でCartfileを作成します。Cartfileという名前のファイルを作るだけのコマンドです。Cartfile編集テキストエディタでインストールしたいライブラリを追記します。あれば次のようにします。githubのSwiftyJSONユーザーのSwiftyJSONレポジトリーを指しています。"SwiftyJSON/SwiftyJSON"コマンドでインストールする記入が終わったら保存して下記コマンドを実行します。iOSというオプションは作成するフレームワークをiOSのみに指定するオプションです。これがない場合、ライブラリによっては、OSXやwatchOS用もビルドが走ります。今回は使わないのでiOS指定をしています。下記は、自分の環境で実行したときの結果です。SwiftyJSON.xcworkspaceプロジェクトにフレームワークをリンクするコマンドによってフレームワークが作成されますが、まだプロジェクトにはリンクされていません。プロジェクトに対してフレームワーク使うよう設定する必要があります。ボタンを押してください。ボタンを押してください。ここで先程作成したフレームワークを指定します。SwiftyJSON.framework.dSYMに作成されています。次の図のように追加されていればOKです。Scriptフェイズが作成されるので、中にコマンドと、コマンドに渡す引数としてフレームワークのパスを指定します。実行しなかった場合、ビルドは通りますが、実行すると次のエラーが起きます。foundまとめて指定も可能Inputfilesに各フレームワーク毎にパス追記せずとも、xcfilelistという拡張子で指定することで一律管理も可能です。手順は公式に記載されています。番号5~9になります。英語ですが、英語読めなくとも手順は読み取れると思います。デバッグについて事前に構築されたフレームワークは、フレームワークが構築されたPC以外でのステップ実行などはできません。name>で解決することができます。revision"のように指定が可能です。repositoriesテスト環境限定のライブラリインストールテストでしか使用しないフレームワークは通常のCartfileではなくCartfile.privateファイルを用意して、インストールします。Cartfile.private中身の書き方は通常のCartfileと変わりません。注意点としては、プロジェクトへのリンク設定で、ターゲットをテストに対して行うことを忘れずに。git管理について作成されたフレームワークやその他データに関して全てのgit管理する必要はありません。使うのはフレームワーク成果物だけで、それ以外の途中データは、再現可能なデータであるため.gitignoreに追加しても大丈夫です。私の環境では次のようにしています。CarthageCarthage/Checkouts!Carthage/Buildまとめ以上がCarthageの入門記事になります。他にも色々な機能や仕様を含んでおりますが、全部を紹介すると、入門として知っても慣れず、腹落ちしにくいかと思うので省きました。当然ながら、公式には記載がされているので暇があったら少しずつ追うのもいいかもしれません。README.mdだけでなくDocumentationもあるので見落とさず。Carthageシンプルなまま対応ライブラリが増えるといいですね。mothuleこのページはmothuleの技術ブログになります。当サイトに記載された情報により損害が発生しましても、責任は致しかねません。