目的

iOSアプリで使うライブラリ管理ツールとして(Cocoapodsの他に)「Carthage」があります。
そのCarthageについてのメモ。


読み方

日本語読みはカルタゴとのことです。
カーセッジって呼ぶ人が多くて、カルタゴだとv通じなくて困ってます。

メリット

Cocoapodsと比べて、

  • ライブラリを事前にビルドするので、アプリのコンパイルの時間が短くなる。
  • CIツールで利用しやすくなるみたい。
  • Cocoapodsのxcworkspaceのような勘違いしやすい構造を取らない。

などのメリットがあると言われています。


ちなみに個人的には、Cocoapodsの方が好きです。

  • 理由として。。
    • あくまで体感だが、そこまでコンパイルが早くなったとは思えない。
    • CIツールがっつり使ってない
    • Carthageもライブラリの導入の部分がちょっと面倒
    • ビルド長い
    • Cocoapodsでしか提供していないライブラリもある
    • XcodeやSwiftのバージョン依存してて、ライブラリのアップデート時に意味不明なエラーで悩まされる

などがあります。


ライブラリの記載

Cartfileを作成し、以下のようにライブラリを記載します。バージョン指定も可能です。

$ github "jdg/MBProgressHUD" ~> 1.0.0

~> 1.0.0 は 1.0.X系のみインストールする。
== 1.0.0 は 1.0.0をインストールする。



ライブラリ導入

以下のコマンドで、ライブラリをインストール・アップデートできます。
--platform iOSはiOS用のみインストールという意味

$ carthage update --platform iOS


ライブラリ1つずつ指定でき、初期導入以外は絶対こちらの方がおすすめです。

// RxSwiftのみ更新
$ carthage update --platform iOS RxSwift



アップデート時のエラーについて

carthage update時にエラーとなって、進めないことがよくある。
エラーの種類としては以下。

Task failed with exit code 64:
Task failed with exit code 65:

code 64がネットでも事例がなくキツイ。

あくまでイメージだけど、
code 64はライブラリが最新すぎて、OSとかXcodeとかSwiftが対応しきれていない(古いOSとか)ものを使っているエラー
code 65はライブラリが古いエラー
という印象を持っている。


エラー対応

上記、code 64とcode 65のエラー対応として、以下を確認していく。

  • CartfileCartfile.privateに記載されているライブラリにバージョン指定されている場合、削除してアップデートしてみる。
  • iOSが対象の場合、$ carthage update --platform iOSでiOSオプションを正しく指定してアップデートすること。
  • XcodeのCommend Line Toolsが正しく設定されているか、最新のが設定されていること。
  • $ swift --versionコマンドでSwiftの導入しているSwiftのバージョンが正しく表示されていること。
  • swiftenvツールを導入している場合、$ swiftenv versionsコマンドでSwiftバージョンが正しく表示されていること。
  • Swiftが最新であること。
  • Xcodeが最新であること。
  • MacOSが最新であること。

などを確認する。