Help us understand the problem. What is going on with this article?

Cocoaのライブラリ管理ツール「CocoaPods」のセットアップ&操作方法

More than 1 year has passed since last update.

「CocoaPods」とは?

Cocoa(iOSやmacOSなど)のライブラリ管理ツールです。
Carthageが台頭するまではCocoaPods一択でしたが、今はプロジェクトによってCarthageのみを使ったり、両方を併用して使ったりすることが多いと思います。

Carthageとの主な違いについてはこちらに書いています。

環境

  • OS:macOS Mojave 10.14
  • Xcode:10.0 (10A255)
  • Swift:4.2
  • RubyGems:2.7.1
  • CocoaPods:1.5.3

CocoaPodsのセットアップ

RubyGemsの更新

まずはRubyGemsを更新します。

$ sudo gem update --system

私の環境では以下のエラーが発生しました。

$ sudo gem update --system
Password:
Updating rubygems-update
Fetching: rubygems-update-3.0.0.gem (100%)
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /usr/bin directory.

RubyGemsが /usr/bin にインストールされていて、アクセス権限がないのが原因です。

$ which gem
/usr/bin/gem

usr/local/bin にインストールし直せば解決できると思いますが、手間がかかるので現状のバージョンのままとしました。

CocoaPodsのインストール

RubyGemsからインストールします。

$ sudo gem install -n /usr/local/bin cocoapods

sudo gem install cocoapods でインストール先を指定せずにインストールすると、 -bash: pod: command not found となり pod コマンドが使えないので注意してください。

CocoaPodsのセットアップ

pod setup コマンドでCocoaPodsの環境をセットアップします。

$ pod setup

セットアップが完了しない場合、以下を実行し、再度 pod setup を実行するとうまくいくことがあります。
git clone に時間がかかるので注意です。

$ cd ~/.cocoapods/repos/
$ rm -rf master/
$ git clone https://github.com/CocoaPods/Specs.git master

ライブラリのセットアップ

カレントフォルダの変更

まずはプロジェクトのルートフォルダに移動します。

$ cd {.xcodeprojファイルがあるフォルダ}

Podfileの作成

pod init コマンドを実行すると、カレントフォルダに Podfile というファイルが作成されます。

$ pod init

Podfileの編集

PodfileをVimなどのテキストエディタで開きます。

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

target '{製品ターゲット名}' do
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

  # Pods for {製品ターゲット名}

  target '{テストターゲット名}' do
    inherit! :search_paths
    # Pods for testing
  end

end

すでにテンプレートが記述されていることがわかるので、1つずつ編集していきます。

対象プラットフォームの指定

コメントに記述されている通り、platformをコメントインして対象のプラットフォームを指定します。

例:
対象OS:iOS
対象バージョン:10.0以上

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

プラットフォームを指定しない場合、 pod update 時などに以下の警告が出力されます。

[!] Automatically assigning platform `ios` with version `12.0` on target `{プロジェクト名}` because no platform was specified. Please specify a platform for this target in your Podfile. See `https://guides.cocoapods.org/syntax/podfile.html#platform`.

簡単に訳すと「Podfileにプラットフォームが指定されていないから、勝手にiOSの12.0にしたよ」ということです。

ライブラリの指定

使いたいライブラリを target '{製品ターゲット名}' do の中に記述していきます。
フォーマットは pod '{ライブラリ名}' '{記号} {バージョン}' です。

例:
バージョン6.0と互換性のあるGoogleTagManagerを指定

target '{製品ターゲット名}' do
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

  # Pods for {製品ターゲット名}
+ pod 'GoogleTagManager', '~> 6.0'

end

記号の意味は以下の通りです。

記号 意味
> 1.0 1.0より大きい最新バージョン
>= 1.0 1.0以降の最新バージョン
< 1.0 1.0より小さいバージョン
<= 1.0 1.0以前のバージョン
~> 1.0 1.0と互換性がある最新バージョン
なし 最新バージョン

ライブラリをテストターゲットに追加

TARGETSでテストターゲットを選択 > Build Settings - Framework Search Paths

$(inherited) を全てのテストターゲットに記述します。
Carthageなどですでに記述している場合、半角スペース区切りで追加すればOKです。

スクリーンショット_2019-01-05_17_05_59.jpg

こちらを記述しないと単体テストの実行時に以下のビルドエラーが発生することがあります。

ld: framework not found {ライブラリ名}
clang: error: linker command failed with exit code 1 (use -v to see invocation)

ビルドエラー以外にも pod update 時などに以下の警告が出力されます。

[!] The `{プロジェクト名}Tests [Debug]` target overrides the `FRAMEWORK_SEARCH_PATHS` build setting defined in `Pods/Target Support Files/Pods-{プロジェクト名}Tests/Pods-{プロジェクト名}Tests.debug.xcconfig'. This can lead to problems with the CocoaPods installation
  - Use the `$(inherited)` flag, or
  - Remove the build settings from the target.

[Debug] or [Release]×Unit Tests or UITestsで計4つも似たような警告が出力されます。

ユーザーデータの削除

$(inherited) の追加時に「No Scheme」となってビルドできなくなることがあります。
その場合、プロジェクトからユーザーデータを削除することでスキーマが復活します。

{プロジェクト名}.xcodeprojを右クリック > パッケージの内容を表示
スクリーンショット_2019-01-05_17_21_21.jpg

xcuserdata > {ユーザー名}.xcuserdatadをフォルダごと削除
スクリーンショット_2019-01-05_17_25_30.jpg

ライブラリのインストール

Xcodeを終了し、以下のコマンドを実行します。

$ pod install

インストールが完了すると {プロジェクト名}.xcworkspace というファイルが作成されるので、{プロジェクト名}.xcodeproj ではなくこちらを開くようにします。
スクリーンショット 2018-12-22 14.17.39.png

Podfile.lockというファイルも作成されます。
こちらのファイルには実際にインストールしたライブラリのバージョンが記述されています。

Podfile.lockが存在するときに pod install を実行すると、 Podfileを見ずにPodfile.lockのみを見てライブラリをインストール します。
開発者同士でライブラリのバージョンを合わせるときに使います。

ライブラリの更新

pod update コマンドを実行すると、Podfileに記述した全てのライブラリが更新されます。

$ pod update

Podfile.lockも更新されます。

特定のライブラリのみ更新したい場合、半角スペース区切りでライブラリを指定することで行えます。

$ pod update {ライブラリ名1} {ライブラリ名2} ...

バージョン管理から無視する

インストールされたライブラリは Pods フォルダ内に格納されます。

サイズが大きいため、 Pods フォルダごとバージョン管理の対象外にすべきです。
Gitを使っている場合、以下を .gitignore に追加するのみでOKです。

.gitignore
Pods

CocoaPodsのバージョンアップ

RubyGemsからバージョンアップします。

$ sudo gem update -n /usr/local/bin cocoapods

おわりに

これでライブラリが使えるようになります!
GTMやCrashlyticsなど、公式がCocoaPodsからのインストールのみを紹介しているライブラリはまだ多いので、Carthageとうまく併用しつつ、素晴らしいライブラリライフを送りましょう:relaxed:

参考リンク

uhooi
iOSアプリ開発とSwiftが好きです✨ 趣味:テニス、アナログゲーム
https://theuhooi.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away