美しい海は美しい空から来る
ついに私たちの《虾票票》入門 iOS シリーズの最後のセクション——CocoaPods の紹介と使用がやってきました。
多くを語らず、上記のアウトラインの 4 つのステップに従って説明を始めます。
何か、なぜ、どう使う?#
CocoaPods とは❓
公式の説明によれば、これは iOS アプリケーションを開発するためのサードパーティライブラリ依存管理ツールです。
なぜそれを使用するのか❓
それは、サードパーティのオープンソースライブラリを自動的に、集中して、直感的に管理できるからです。これは gradle や npm などに例えることができます。
PS:iOS でよく使われるフレームワークの統合方法の比較は以下の通りで、《極客時間》を参考にしています。
どう使うのか❓
- まずインストールします~
- 前提条件 --Ruby をインストール:
brew install ruby
、CocoaPods は Ruby を基に構築されています; - CocoaPods をインストール:
sudo gem install -n /usr/local/bin cocoapods
、gem
は Ruby モジュールのパッケージ管理ツールです; - spec リポジトリ❗️をローカルにインストール:
pod setup
、spec リポジトリは大きいため、☕️を飲みながら待ちましょう~
- 前提条件 --Ruby をインストール:
- 使用手順は以下の通りです:
cd [プロジェクトルートディレクトリ]
- pod を初期化:
pod init
、これで Podfile ファイルが生成されます; - Podfile を編集❗️
- プロジェクトに対応するコードライブラリ❗️を統合:
pod install
- 使用時には、
#import <ヘッダファイル>
で OK です。
注意深いあなたは上記の 3 つの❗️に気づくかもしれません。これは今日のポイント🎺🎺🎺です。以下の 2 つの質問を持って続きを見ていきましょう:
- Podfile をどう編集するのか?
- spec リポジトリとコードライブラリとは何か、それらの違いは?一時的に説明書と実物と理解しても良いでしょう。
まず最初の質問を見てみましょう:Podfile をどう編集するのか?
Podfile の編集#
Podfile の基本テンプレートは以下の通りです:
platform :ios, '9.0' # デバイスプラットフォーム「iOS」と最低サポートバージョン「9.0」を指定
inhibit_all_warnings! # すべての警告を禁止
use_frameworks! # 動的ライブラリを使用、そうでなければ静的ライブラリを使用
target 'MyApp' do # targetは対象のtarget名を指定
pod 'Masonry', # Masonryの最新バージョンをインポート
pod 'YYModel', '1.0.4' # YYModelの1.0.4バージョンをインポート
pod 'ObjectiveSugar', '>= 0.5.2' # ObjectiveSugar>=0.5.2の最新バージョンをインポート
target 'MyAppTests' do # ネストされたテストのtarget
inherit! :search_paths # 上記の検索パスを継承(少なくとも上記のサードパーティライブラリを含む)
pod 'OCMock', '~> 2.0.4' # OCMock>=2.0.4かつ<2.1の最新バージョンをインポート
end
end
- バージョン番号の一致ルール、ネストされた target を書くことで pod の重複を減らすテクニックに注意してください。詳細はコメントを参照してください。
簡単な Podfile の書き方を学んだので、次に《虾票票》で使用されているサードパーティライブラリを見てみましょう👇
- Masonry:UI レイアウト制約
- AFNetworking:ネットワークリクエスト
- SDWebImage:画像ダウンロード / キャッシュ / デコード
- YYModel:モデル変換(json と model)
- MJRefresh:プルダウンリフレッシュ、プルアップロード
- MBProgressHUD:loading インタラクション
あなたは Podfile の形を想像できますか?👇
source 'https://github.com/CocoaPods/Specs.git' # specリポジトリのアドレスを手動で指定できます
platform :ios, '9.0'
use_frameworks!
target 'ShoPiaoPiao_Example' do
pod 'ShoPiaoPiao', :path => '../' # :path=>を設定してローカルライブラリを引き出す
pod 'Masonry' # 上記の6つのサードパーティライブラリ
pod 'AFNetworking'
pod 'SDWebImage'
pod 'YYModel'
pod 'MJRefresh'
pod 'MBProgressHUD'
end
- 手動で指定された spec リポジトリは、会社または個人のプライベート Git リポジトリである可能性があります。⚠️:他のライブラリを手動で指定した場合、使用するすべての spec リポジトリを指定する必要があります。つまり、デフォルトの spec リポジトリ(最初にインストールしたもの)も指定する必要があります。上記のコードを参照してください。
=> を設定してローカルライブラリを引き出すことができ、主にそのライブラリの開発に使用されます。 - ここでのサードパーティライブラリはすべて最新バージョンを使用することがデフォルトです。
温かい補足🎺:ここであなたは ShoPiaoPiao が何のサードパーティライブラリなのか疑問に思うかもしれません。それは《虾票票》に属するサードパーティライブラリです。それがなぜローカルでインポートされる形で pod されているのか?実は私はサードパーティライブラリの開発方法を用いて《虾票票》このプロジェクトを開発しています。会社ではこの方法で開発することが多く、SDK 開発に似ています。以下の一般的なコマンドのセクションでもCocoaPods に基づくサードパーティライブラリの作成方法について触れます。
図解原理#
インターネット上の 3 つの図を借りて CocoaPods の基本原理を説明します。
前述の 2 つ目の質問に答えましょう:spec リポジトリとコードライブラリとは何か、それらの違いは?
図を見てください:
1) pod setup
を通じて spec リポジトリをローカルにインストールすることは、実際にはリモートの CocoaPods 公式インデックスリポジトリをローカルに引き出すことを意味します。このインデックスリポジトリには、各サードパーティライブラリの説明情報が保存されており、それぞれがspec ファイルに保存されており、そこにはサードパーティライブラリのこれらの情報が含まれています:
- ライブラリ名
- バージョン番号
- 説明情報
- ソースコードのアドレス❗️
- ...
2)私たちが Podfile を作成し、 pod install
を実行すると、CocoaPods は各ライブラリのソースコードのアドレスに基づいてソースコードを引き出してプロジェクトに統合します。(もちろん、このソースコードはキャッシュされます)
これで spec リポジトリとコードライブラリの違いを理解できるでしょうか?
次に、 pod install
のプロセスに関する 2 つの図を見てみましょう:
番号と矢印に従って pod install
のプロセスを理解してみてください。上記の説明を理解できれば、これらの 2 つの図を理解するのは問題ないでしょう~🤔
よく使うコマンド#
よく使うコマンドの図を整理しました。ツール図として保存できます。
🥩追加の食事: pod install
VS. pod update
この 2 つの違いは何でしょうか?これは CocoaPods を初めて使用する際に最も一般的な疑問の 1 つです。
共通点:
- 目的はプロジェクト依存のコードライブラリを引き出すことです
- Podfile.lock を更新します
相違点:
- 前者は Podfile.lock に制約され、後者は制約されません
- 後者はローカルの spec リポジトリを更新します
プロセスの詳細:
pod install
Podfile.lockに Podfile のライブラリがすでに含まれているかを確認します;
(一)もし含まれていれば、Podfile に指定されたバージョンがあるかを判断します:1)指定されたバージョンがあれば、Podfile.lock に保存されたバージョンが Podfile に指定されたものと同じかどうかを確認します。同じであればスキップし、異なれば Podfile に指定されたものに更新します;2)指定されたバージョンがなければ、更新を確認せずにスキップします;
(二)もしそのライブラリが含まれていなければ、そのライブラリをダウンロードし、バージョンを Podfile.lock ファイルに保存します。
PS:Podfile.lock は通常、Podfile がバージョンを指定していないプロジェクトに適用されます。
pod update
Podfile.lock の記録を無視し、まず spec リポジトリを更新し、その後直接 Podfile ファイル内の依存ライブラリの指定されたバージョンを探します。指定がなければ、最新バージョンを探します。
PS:pod update [PODNAME] で特定の Pod ライブラリを更新できます。
参考#
何か、なぜ、どう使う?
How do I install CocoaPods?——stackOverflow
CocoaPods Guides—— 公式
文書から CocoaPods の Podspec を理解する—— 簡書
Podfile の編集
本当に Podfile を書けますか—— 掘金
inherit!—— 公式
よく使うコマンド
pod install と pod update の違い—— 簡書
終わりに#
約 1 ヶ月の時間をかけて《虾票票入門 iOS》シリーズを書き終えました。ここまで読んでくださったあなたが何かを得られたり、《虾票票》を自分で実装できたりすることを願っています。成果を共有していただければ嬉しいです~
今後、私は《虾票票》のソースコードを掲載するためのポータルを整理し、まとめを作成する予定です✅。