どうもこんにちは!
サバ缶(@tech_begin)です。
iOSアプリ開発で必須とも言える「CocoaPods」。
現場ではよく「ポッズ」と略されて呼ばれることが多いですね。
意外とあまり知らずに使っているCocoaPodsについて、徹底的に調べました!
- CocoaPodsの概要
- CocoaPodsの導入手順
- 「pod install」と「pod update」の違い
- PodfileとPodfile.lockの違い
- Podfile.lockを使う理由について
- CocoaPods導入後の取り扱い方
CocoaPodsとは
CocoaPodsとは、iOSアプリ開発で使用するライブラリの管理を簡単にするためのツールです。
CocoaPods公式サイトより引用します。
[原文]
CocoaPods is a dependency manager for Swift and Objective-C Cocoa projects.
It has over 91 thousand libraries and is used in over 3 million apps. CocoaPods can help you scale your projects elegantly.[日本語訳]
CocoaPods公式サイト[WHAT IS COCOAPODS]より
CocoaPodsは、SwiftおよびObjective-C Cocoaプロジェクトの依存関係マネージャーです。
91,000を超えるライブラリがあり、300万を超えるアプリで使用されています。
CocoaPodsは、プロジェクトをエレガントにスケーリングするのに役立ちます。
要するに、『ライブラリ管理が簡単にできるツールだよ』ということですね。
「エレガントにスケーリング」というのは、「すっきりと拡張できる」という意味合いがあります。
CocoaPodsの導入方法
CocoaPodsをインストールし、実際のプロジェクトで使用する手順を解説します。
まずは図で全体像を理解しておきましょう。
Ruby言語のgemをアップデートし、最新の状態にする
$ sudo gem update --system
gemを使ってCocoaPodsをインストールする
図の①に該当します。
$ sudo gem install cocoapods
上記コマンドで上手くいかなければ、下記のコマンドを実行しましょう。
$ sudo gem install -n /usr/local/bin cocoapods
上手くいかなった理由については、こちら(Qiita)の記事をご参照ください。
リポジトリ情報のセットアップ
図の②に該当します。
$ pod setup
インストール後、初期設定をしなければなりません。
初期設定自体はCocoaPods内部で実行されるので、特に面倒な作業はないです。
インストールされているか確認
こちらも図の②に該当します。
$ pod --version
バージョンが表示されたらOKです!
プロジェクトに移動する
$ cd Users/sabacan/projects/iOS/TestApp
ライブラリを使いたいプロジェクトに移動します。上記のパスは例です。
Podfileを作成する
図の③に該当します。
$ pod init
上記のコマンドを実行すると、Podfileの雛形が自動で作成されます。
作成されたPodfileに、使用したいライブラリを記述して管理します。
コマンド実行時にXcodeを起動しているとエラーが起きてしまう恐れがあります。
Xcodeは閉じておくように注意してくださいね。
ライブラリをインストールする
図の④に該当します。
Podfileが生成されたら、自分が使いたいライブラリを記載します。Podfileの書き方については後述しています。
$ pod install
Podfileに記載したライブラリをインストールします。
エラーが起きた場合は、Xcodeを閉じてもう一度試してみましょう。
CocoaPods導入後の取り扱い方
ここまでは、いったんCocoaPodsの導入方法をご紹介してきました。
導入後の注意点や忘れがちなことをご紹介します。
プロジェクトを開くとき
CocoaPods導入後、プロジェクトファイル内に「プロジェクト名.xcworkspace」というファイルが生成されます。
今後は、そのファイルを実行してプロジェクトを開く必要があります。
Xcodeで開くと、画面左側のNavigatorに「Pods」が追加されているはずです!
参考ページ:Is the project.xcworkspace file important?(stackoverflow)
『pod install』と『pod update』の違い
複数の記事を参考にしたのですが、ほとんどが以下のような解釈でした。
- pod install
- プロジェクトを最初に設定するときのみ使用する
- pod update
- install以降の新規インストールでも使用する
しかし、これは間違いのようです。
CocoaPodsの公式サイトでも言及されています。
正しくは下記のような使い分けです。
- pod install
- Podfileを編集しPodsを追加・削除・更新するたびに使用する
- Podfile.lockを参照し、インストールされていないものだけ依存性を解決する。
- 逆にインストールされているものは、新しいバージョンなど関係なしにPodfile.lockに記載されているバージョンをダウンロードする。
- pod update
- Podfile.lockは参照せず、Podfileに記載されている全てのPodsを最新バージョンにアップデートする
- pod update [Pod名]と指定することも可能
ちなみに、『pod outdated
』を実行すればアップデート可能なPodsをリストアップしてくれるようです。
改めて整理すると『pod install』と『pod update』の違いは以下のようになります。
PodfileとPodfile.lockの違い
上の項目でPodfile.lockという言葉が出てきましたね。
CocoaPodsでは「Podfile」と「Podfile.lock」というファイルの2つを取り扱います。
混同してしまいそうですが、注意してくださいね。
参考ページ:【Swift】PodfileとPodfile.lockの使い分け【CocoaPods】(note.com)
Podfile.lockを使う理由について
ひとことでまとめると「他の人とライブラリのバージョンを揃えるため」です。
なぜPodfile.lockを使用するのか、その理由について図解を交えて解説していきますね。
こちらの解説は、以下の動画を参考に作成いたしました。
動画の方がイメージしやすいと思うので、こちらもご覧ください(自動翻訳で見るのがオススメ)。
Podfileの書き方
Podfile の初期状態から少しだけ修正し、必要最低限の記載にしています。
上記は『SwiftyJSONの最新版』と、『Alamofireのバージョン3.0以上4.0未満』を使うように指定した書き方の例です。
target 'MyApp' do
use_frameworks!
pod 'SwiftyJSON'
pod 'Alamofire', '~> 3.0'
end
記述例 | 意味 |
---|---|
> 0.1 | 0.1 より後のバージョン |
>= 0.1 | 0.1以降のバージョン |
< 0.1 | 0.1 より前のバージョン |
<= 0.1 | 0.1 およびそれ以前のバージョン |
~> 0.1.2 | 0.1.2 および 0.2 までのバージョン (0.2 以降を除く) |
~> 0.1 | 0.1 および 1.0 までのバージョン (1.0 以降を除く) |
~> 0 | 0 および 1.0 までのバージョン (1.0 以降を除く) |
参考ページ:【Swift】ライブラリをインストールする際のPodfileファイルの書き方(note.com)
参考ページ:CocoaPods公式サイト[The Podfile]
CocoaPodsの定番ライブラリ
よく使われているライブラリを(私自身の備忘録も兼ねて)ご紹介します!
そのほかにもありましたら、Twitterで教えてください!
ライブラリ名 | 特徴 |
---|---|
Alamofire | HTTP通信を行うための定番ライブラリ |
CryptoSwift | 暗号化関連のライブラリ |
Firebase | Firebaseの機能を簡単に実装できるライブラリ |
FlexLayout | CSSのプロパティの一つであるFlex-Boxを踏襲し、 直感的にレイアウトを構築することができるライブラリ |
KeychainAccess | KeychainAPIの実装が簡単になるライブラリ |
Nuke | アプリで画像を取得→読み込み→表示までを効率的に実装できるライブラリ |
ObjectMapper | モデルオブジェクト(クラスと構造体)と、JSON間のデータ変換を簡単にするライブラリ |
PinLayout | 自動レイアウトなしの非常に高速なレイアウトライブラリ 高速、簡単、直感的、など利点が多い。 |
SwiftyGif | GIF画像を読み込むことができるライブラリ |
Toast-Swift | UIViewオブジェクトクラスにトースト通知を追加することができるライブラリ |
XLPagerTabStrip | 横スライドできるページャーを実装できるライブラリ |
TOCropViewController | 画像を回転したり、切り取ったりする際に便利なライブラリ |
Firebaseとは、Googleが提供しているGCPというクラウドサービスを、アプリ開発向けに特化し集約したプラットフォームのことです。
ユーザの管理や認証、アプリクラッシュの管理やPUSH通知など様々な機能を提供しています。
Keychain(キーチェーン)とは、ユーザIDやパスワード、クレジットカード情報といった機密情報を集中管理するしくみのことです。
iOSアプリの多くはこの機能に対応しており、キーチェーンに直接アクセスできるため、ログインが必要なサービスのユーザID/パスワードやクレジットカード番号の入力欄を自動的に埋めることができます。
このKeychainを使用するためには「KeychainAPI」が必要になります。
まとめ
上記以外にもCocoaPodsの使い方、注意点などについて幅広く触れてご紹介してきました。
実際のiOSアプリ開発では、Xcodeと一緒に使うのでまだまだ使い方は奥深いです。
私も使いこなせているわけではないので、もっと勉強していきます💪
もし「ここ違うよ〜」といった指摘箇所があれば、お気軽にTwitterでご連絡ください!
まず初めに、Podfile.lockが無い世界を見てみましょう。
ライブラリの最新バージョンが1.3.3だった場合、 Podfileを元に取得してくるので、最新バージョンを取得してきます。
つまりインストール済みのライブラリは1.3.3となります。