目的
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のエラー対応として、以下を確認していくと良いかもしれません。
-
Cartfile
やCartfile.private
に記載されているライブラリにバージョン指定されている場合、削除してアップデートしてみる。 -
iOSが対象の場合、
$ carthage update --platform iOS
でiOSオプションを正しく指定してアップデートすること。 -
Xcodeの
Commend Line Tools
が正しく設定されているか、最新が設定されていること。 -
$ swift --version
コマンドでSwiftの導入しているSwiftのバージョンが正しく表示されていること。 -
swiftenvツールを導入している場合、
$ swiftenv versions
コマンドでSwiftバージョンが正しく表示されていること。 -
Swiftが最新であること。
-
Xcodeが最新であること。
-
MacOSが最新であること。
などを確認する。
Carthage攻略としては以上です。