iOS

【CarthageとCocoapods】 2種類のライブラリ管理ツールの使い方とその使い分けについて解説

iOS開発では2種類のライブラリのビルドツールがありますが両者の仕様とうまい使い分けについて触れつつ、詳しい使い方を解説しています。

使い分け

まず両者の運用やパフォーマンスについての要点を簡単にまとめるこうなります

  • CocoaPodsとCarthageは併用可能
  • CocoaPods・Carthageどちらかでしかインストールできないライブラリも存在する
  • Carthageの方がCocoaPodsと比較して軽量である

Carthageで導入できるライブラリは優先的にCarthageで導入し、それ以外はCocoaPodsで導入する」という使い分けがデファクトとされている印象です。

導入

CarthageはHomebrew、CocoaPodsはGemでインストールします。

・Carthageの導入

brewコマンドが使えない場合はhomebrewの解説を参考にインストールを済ませましょう。

brew install carthage

・CocoaPodsの導入

CocoaPodsはgemを使ってインストールする。gemコマンドが使えない場合は、

sudo gem install cocoapods
pod setup

付随してコマンドラインツールのインストールも必要です

xcode-select --install
各ツールの詳しい仕様と使い方

CocoaPodsの仕様と使い方

CocoaPodsはCarthageと比べて比較的楽に導入できます。

CocoaPodsの仕様

まずCocoaPodsの主な仕様をまとめます

  • 導入するライブラリの情報はPodfileに記述する
  • 各ライブラリのバージョン情報はインストール時に自動生成されるPodfile.lockに保存されている
  • インストール時に拡張子.xworkspaceのファイルが自動生成される。CocoaPodsでインストールしたライブラリをインポートし使うことができる
  • ライブラリのソースファイルはPods/内に保存されるが、gitの管理対象からは外す

CocoaPodsの使い方

仕様がわかったところで次に実際の使い方について説明します

1. Podfileの編集

まずプロジェクトのルートディレクトリ下で以下のコマンドを実行します

pod init

するとPodfileというファイルが自動生成されるよ。このPodfileにインポートしたいライブラリの情報を記述します。例えば定番ライブラリのRealmSwiftをインストールしたい時はPodfileはこのようになります

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'Sample' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!

  # Pods for Sample
  pod 'RealmSwift'  #追記
end

2. インストール

Podfileの編集が完了したら、以下のコマンドでライブラリのインストールを行います

pod install

インストールが終了すると拡張子が.xcworkspaceというファイルが自動生成されます。以後、cocoapodsでインストールしたライブラリを使って開発する際はこのファイルをプロジェクトファイルとして使います。

3. .gitignoreファイルを編集し、gitの管理対象から外す

最後にインストールが完了するとPodsというフォルダが生成されています。このフォルダの中にはライブラリのソースファイルが格納されているけど、このソースファイルはgitの管理対象から外します。
ではどうするかというと.gitignoreを編集し、「Pods」以下のファイル群はgit管理下から外しておけばおkだよ。その代わりにライブラリとそのバージョン情報が記述されているPodfilePodfile.lock のみを管理します。

vim .gitignore

等のコマンドでエディタを開いて追記

Pods/*

Carthageの仕様と使い方

続いてCarharthageの仕様と使い方について説明します。Cocoapodsと比べると若干工数がかかります余談ですがXCode12でライブラリがインストールできない場合はこちらを参照で解決できます。

Carthageの仕様

まずCarthageの主な仕様をまとめるとこうなります

  • 導入するライブラリの情報はCartfileに記述する
  • 各ライブラリのバージョン情報はライブラリのビルド時に自動生成されるCartfile.resolvedに保存される
  • ライブラリのソースファイルたちはCarthage/内に保存されるが、gitの管理対象からは外す

Carthageの使い方

続いてCarthageの使い方について説明します。まずプロジェクトファイルのルートディレクトリに移動します。

1. Cartfileの作成と記述

touchコマンドでCartfileを作成します。

touch Cartfile

Cartfileには下のように導入したいライブラリのgithubレポジトリ名を記述します。

github "ishkawa/APIKit"
github "onevcat/Kingfisher"

2. ビルド

Cartfileへの記述が終わったら次はビルドコマンドを打ち込みます

carthage update --platform iOS --no-use-binaries

ビルドする際はcarthage updateにオプションを2つつけておくと良いです。簡単に解説すると

  • --platform iOSのように対象のデバイスを指定することでビルド時間を短縮できます。
  • --no-use-binariesを付けるとバイナリデータからのビルドではなく、ソースコードからコンパイルすることでビルドを行うことができます。そこそこ時間がかかります。カルタゴの「—no-use-binaries」の目的は何ですか

3. Build Phasesの設定で.frameworkファイルのインポートを行う

CocoaPodsと違いCarthageでビルドしたライブラリをインポートするためにはxcodeでプロジェクトファイルを選択し「TARGETS」→「Build Phases」の項目にいくつか設定を追加する必要があります。

「Link Binary with Libaries」の欄を選択し、「+ボタン」→「add other…」→「add Files」と進み、「Carthage/Build/iOS」フォルダ内にある拡張子が.frameworkのものを選択します。下の画像を例にするとAPIKit.frameworkというライブラリが追加されているのがわかると思います

import framework file

続いて左上の「+ボタン」→「New Run Script Phase」を選択します。すると「Run Script」という項目が追加されるので、まずShellの欄に以下のスクリプトを記入します

/usr/local/bin/carthage copy-frameworks

次に「Input files」の欄でファイルパスを記入します。hogehoge.frameworkのところは導入するライブラリに応じて適宜変更してください。

$(SRCROOT)/Carthage/Build/iOS/hogehoge.framework

例えばAPIKitというライブラリを導入したい時は下のように設定します。 input files example

4 .gitignoreファイルの編集

最後に、ビルドが完了するとCarthageというフォルダが生成されているはず。このフォルダの中にはライブラリのソースファイルが格納されているけど、このソースファイルをgitで管理しないよ。.gitignoreを編集し、**Carthage以下のファイル群はgit管理下から外しておけばおkです。その代わりにライブラリの情報が記述されているCartfileCartfile.resolved のみを管理するようにします。

vim .gitignore

等のコマンドでエディタを開いて以下を追記

Carthage/*

まとめ

  • CarthageはCocoapodsに比べて軽量。よってCarthageでインストールできるライブラリはCarthageを使う
  • 両者共通してビルドされたライブラリの自体はgitの管理下から外す
  • その代わりにCartfilePodfileのような各ライブラリのバージョン情報が記述されたファイルのみを管理する

おまけ: 両者の比較表

項目carthagecocoapods
インストールhomebrewでインストールgemでインストール
ライブラリCartfile/Cartfile.resolvedPodfile/Podfile.lock
ビルド先Carthage/Builds/Pods/
ビルドコマンドcarthage updatepod install
工数多い少ない

読んでいただきありがとうございます!!

記事として取り上げたトピックを体系化してまとめた内容を電子書籍として販売しています。購入していただくことで執筆の応援ができます。詳細はこちらから