目的

iOSアプリで使うライブラリ管理ツールとしてCocoapodsが有名ですが、その双璧をなすものに Carthage があります。

この記事はそのCarthageについてのメモです。
インストール方法などは巷に溢れかえっているので、ここでは記載しません。


読み方

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

メリット!!とデメリット!?

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用のみインストールという意味です。
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:

Task failed with exit code 64はネットでも事例がなく、対応がキツイです。

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


上記エラーの対応

上記、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が最新であること。

などを確認する。

Carthage攻略としては以上です。


[改訂新版]Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 WEB+DB PRESS plus