English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

IOS CocoaPodsの詳細解説 - 高級編

一、Podfile.lockファイル
前述の通り、CocoaPodsを使用し、pod installを実行した後、Podfile.lockファイルが生成されます。このファイルは私たちとは関係がないように見えますが、実際には絶対に無視すべきではありません。
このファイルは、既にインストールされたPods依存関係のバージョンを保存するために使用されており、CocoaPodsでSBJson、AFNetworking、Reachabilityの3つのPods依存関係をインストールした後、対応するPodfile.lockファイルの内容は以下の通りです:

PODS:
 - AFNetworking (2.1.0):
  - AFNetworking/NSURLConnection
  - AFNetworking/NSURLSession
  - AFNetworking/Reachability
  - AFNetworking/Security
  - AFNetworking/Serialization
  - AFNetworking/UIKit
 - AFNetworking/NSURLConnection (2.1.0):
  - AFNetworking/Reachability
  - AFNetworking/Security
  - AFNetworking/Serialization
 - AFNetworking/NSURLSession (2.1.0):
  - AFNetworking/NSURLConnection
 - AFNetworking/Reachability (2.1.0)
 - AFNetworking/Security (2.1.0)
 - AFNetworking/Serialization (2.1.0)
 - AFNetworking/UIKit (2.1.0):
  - AFNetworking/NSURLConnection
 - Reachability (3.0.0)
 - SBJson (4.0.0)
DEPENDENCIES:
 - AFNetworking (~> 2.0)
 - Reachability (~> 3.0.0)
 - SBJson (~> 4.0.0)
SPEC CHECKSUMS:
 AFNetworking: c7d7901a83f631414c7eda1737261f696101a5cd
 Reachability: 500bd76bf6cd8ff2c6fb715fc5f44ef6e4c024f2
 SBJson: f3c686806e8e36ab89e020189ac582ba26ec4220
COCOAPODS: 0.29.0

Podfile.lockファイルの最大の利点は、複数人での開発です。PodfileでPods依存ライブラリのバージョンを指定していない書き方の例です:

pod 'SBJson'

この文は、現在のSBJsonというPods依存ライブラリの最新バージョンを取得するために使用されます。
チームメンバーの一人がpod installコマンドを実行した後、生成されたPodfile.lockファイルにはその時点で最新のPods依存ライブラリのバージョンが記録されます。他のチームメンバーがこのPodfile.lockファイルを含むプロジェクトをチェックアウトし、pod installコマンドを実行すると、取得したPods依存ライブラリのバージョンは最初のユーザーが取得したバージョンと一致します。Podfile.lockファイルがなければ、pod installコマンドを実行するすべてのユーザーが最新バージョンのSBJsonを取得することになります。これは、チーム内で依存ライブラリのバージョンが一致しないという問題を引き起こし、チームでの協力にとって大災害となります。
この場合、チームが最新バージョンのSBJson依存ライブラリを使用したい場合、2つの方法があります:
Podfileを変更し、最新バージョンのSBJson依存ライブラリに切り替えます;
pod updateコマンドを実行します;
Podfile.lockファイルがチームでの協力において非常に重要であることを考慮して、それをバージョン管理に追加する必要があります。

二、Podfileファイル
普通のユーザーにとって、CocoaPodsを使用する際に最もよく対面するのはPodfileファイルです。CocoaPodsはRubyで実装されており、Podfileファイルの構文はRubyの構文です。以下の点からPodfileについて説明します:
1、Podfileファイルの配置場所
これは前回の記事で残された問題です。通常、Podfileファイルをプロジェクトのルートディレクトリに配置することをお勧めします。以下の図を参照してください:

事実、Podfileファイルは任意のディレクトリに配置できます。必要なのはPodfileでプロジェクトのパスを指定することです。従来のものと比較して、Podfileファイルは最初の位置に一行追加されました。具体的には以下の通りです:

xcodeproj \/Users/wangzz/Desktop/CocoaPodsTest/CocoaPodsTest.xcodeproj
platform :ios 
pod 'Reachability', '~> 3.0.0' 
pod 'SBJson', '~> 4.0.0' 
platform :ios, '7.0' 
pod 'AFNetworking', '~> 2.0' 

指定されたパスはxcodeprojキーワードを使用しています。
その後、Podfileファイルがあるディレクトリに移動し、pod installコマンドを実行すると、前と同様にこれらのPods依存ライブラリをダウンロードし、関連するファイルはPodfileのディレクトリ以下に配置されます。以下の図を参照してください:

前と同様に、ここで生成されたworkspaceファイルでプロジェクトを開く必要があります。

2、Podfileとターゲット
Podfileは本質的にXcodeプロジェクトのターゲットを記述するために使用されます。Podfileに対応するターゲットを明示的に指定しない場合、CocoaPodsは名前がdefaultの暗黙のターゲットを作成し、プロジェクトの最初のターゲットに対応します。言い換えれば、Podfileに指定しない場合、プロジェクト内の最初のターゲットのみがPodfileで記述されたPods依存ライブラリを使用できます。
Podfileでプロジェクトの複数のターゲットを同時に記述する場合は、必要に応じて異なる実装方法ができます。問題を説明するために、元のプロジェクトにSecondという名前のターゲットを作成します。現在のプロジェクトには以下のターゲットが含まれています:

①複数のターゲットで同じPods依存ライブラリを使用する
例えば、CocoaPodsTestとSecondのターゲットの両方でReachability、SBJson、AFNetworkingの3つのPods依存ライブラリを使用する必要がある場合、link_withキーワードを使用して、Podfileを以下のように書きます:

link_with 'CocoaPodsTest', 'Second'
platform :ios 
pod 'Reachability', '~> 3.0.0' 
pod 'SBJson', '~> 4.0.0' 
platform :ios, '7.0' 
pod 'AFNetworking', '~> 2.0' 

この書き方でCocoaPodsTestとSecondの2つのターゲットが同じPods依存ライブラリを共有することができます。
②異なるターゲットで完全に異なるPods依存ライブラリを使用する
CocoaPodsTestこのターゲットはReachability、SBJson、AFNetworkingの3つの依存ライブラリを使用していますが、SecondこのターゲットはOpenUDIDの1つの依存ライブラリのみを使用する必要があります。この場合、targetキーワードを使用することができます。Podfileの記述方法は以下の通りです:

target :'CocoaPodsTest' do
platform :ios 
pod 'Reachability', '~> 3.0.0' 
pod 'SBJson', '~> 4.0.0' 
platform :ios, '7.0' 
pod 'AFNetworking', '~> 2.0'
end
target :'Second' do
pod 'OpenUDID', '~> 1.0.0'
end

その中で、do/endが開始および終了識別子として使用されます。
3、Podfileを使用してPods依存ライブラリのバージョンを管理する
依存ライブラリを再引入する場合、明示的または暗黙的に依存ライブラリのバージョンを指定する必要があります。具体的な書き方と意味は以下の通りです:

pod 'AFNetworking'   //依存ライブラリのバージョンを明示的に指定しない場合、常に最新バージョンを取得することを示します。
pod 'AFNetworking', ''2.0'   //ただし、使用する2.0バージョン
pod 'AFNetworking', '>' 2.0'   //使用する場合、0以上のバージョンを使用します。2.0のバージョン
pod 'AFNetworking', '>=' 2.0'   //使用する場合、0以上または0以下を使用します。2.0のバージョン
pod 'AFNetworking', '<' 2.0'   //使用する場合、0以下を使用します。2.0のバージョン
pod 'AFNetworking', '<=' 2.0'   //使用する場合、0以下または0以上を使用します。2.0のバージョン
pod 'AFNetworking', '~> 0.'1.2'   //使用する場合、0以上を使用します。1.2しかし、0以下では2のバージョン
pod 'AFNetworking', '~>0.'1'   //使用する場合、0以上を使用します。1しかし、0以下では1.0のバージョン
pod 'AFNetworking', '~>0'   //0以上のバージョンでは、この制限を書かない場合と何も書かない場合と同じ効果で、最新バージョンを使用することを示します。

三、CocoaPodsの常用コマンド
1、pod install
Podfileファイルで指定された内容に基づいて依存ライブラリをインストールします。Podfile.lockファイルがある場合で、対応するPodfileファイルが変更されていない場合、Podfile.lockファイルで指定されたバージョンにインストールされます。
Podfileファイルを更新したら、このコマンドを再実行する必要があります。これにより、Pods依存ライブラリが再インストールされます。
2、pod update
Podfileに指定された依存ライブラリのバージョンが固定されていない場合、依存ライブラリが更新された場合、Podfile.lockファイルがあってもなくても、Podfileファイルで指定された最新の依存ライブラリバージョンを取得します。
3、pod search
コマンド形式は以下の通りです:

$ pod search OpenUDID

後ろのOpenUDIDが引数です。
コマンド名からわかるように、このコマンドは使用可能なPods依存関係を名前で検索するために使用されます。実行結果は以下の通りです:

-> OpenUDID (1.0.0)
  iOS用のユニバーサルで持続可能なUDIDソリューションのためのオープンソースイニシアティブ。
  pod 'OpenUDID', '~> 1.0.0'
  - ホームページ: http://OpenUDID.org
  - ソース: https://github.com/ylechelle/OpenUDID.git
  - バージョン: 1.0.0 [master repo]

ここで、使用可能なデータが見つかりました。その中にはOpenUDIDライブラリの簡単な情報が含まれています。実際に必要なのは、上記の結果の3行目です:

pod 'OpenUDID', '~> 1.0.0'

これがPodfileファイルに追加する必要があることがわかります。
このコマンドを使うことで、必要なPods依存関係を簡単かつ迅速に見つけることができます。
4、pod setup
コマンド形式は以下の通りです:

$ pod setup

実行完了後、以下のように表示されます:

CocoaPods マスターリポジトリのセットアップ
Updating 7cd4668..f3d3ced
Fast-forward

次に多くの更新情報が表示されます。
このコマンドは、ローカルのコンピュータ上に保存されているPods依存関係のtreeを更新するために使用されます。毎日多くの人々がPods依存関係を作成または更新するため、このコマンドを実行すると非常に遅くなるため、ご耐心をお願いします。このコマンドは頻繁に実行する必要があります。新しいPods依存関係がある場合、pod searchコマンドを実行しても検索できません。

第4章 参考文書

http://guides.cocoapods.org/using/index.html

おすすめ