UKey's Labo

CocoaPodsの使い方-入門編

本家サイト

CocoaPodsとは

iOS開発のライブラリ管理ツール。
CentOSでいう、yumコマンドと近い認識。

外部ライブラリとの依存関係を管理してくれる。

CocoaPodsの公式リポジトリ

CocoaPodsを利用して管理するライブラリは、リポジトリに登録されています。
公式のリポジトリは、Specsリポジトリとなっています。

CocoaPodsの導入

gemコマンドを利用する。
gemコマンドの解説、インストール方法は、ここでは割愛します。

gemコマンドの最新化

sudo gem update --system

CocoaPodsのインストール

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

セットアップ

pod setup

setup実行後、github上の管理情報がローカルに展開されます。
展開先は、~/.cocoapods/repos/
デフォルトのリポジトリ、Specsリポジトリの情報は以下に格納されます。
~/.cocoapods/repos/master/Specs/

Specsリポジトリのライブラリ一覧

pod list

でローカルに展開されている~/.cocoapods/repos/master/Specs/のライブラリ一覧が表示されます。
実行に結構時間がかかるので、注意が必要。
また、結構な量が出力されるので、grep, more等のコマンドとの併用がいいかと思います。

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

ライブラリをインストールしたいプロジェクトまで移動する。
そして、PodsFileの作成。

pod init

プロジェクト直下にPodFileが生成されます。

pod initでエラーが出る場合

こんなエラー

――― MARKDOWN TEMPLATE ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――

### Command

    ```
/usr/local/bin/pod init
    ```

### Report

* What did you do?

* What did you expect to happen?

* What happened instead?


### Stack

    ```
   CocoaPods : 1.4.0
        Ruby : ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18]
    RubyGems : 2.7.4
        Host : Mac OS X 10.14 (18A391)
       Xcode : 10.0 (10A255)
         Git : git version 2.17.1 (Apple Git-112)
Ruby lib dir : /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib
Repositories : master - https://github.com/CocoaPods/Specs.git @ ca7c4d3dbed0409ae8ae9c8054017a4736cc5b15
    ```

### Plugins

    ```
cocoapods-deintegrate : 1.0.2
cocoapods-plugins     : 1.0.0
cocoapods-search      : 1.0.0
cocoapods-stats       : 1.0.0
cocoapods-trunk       : 1.3.0
cocoapods-try         : 1.1.0
    ```

### Error

    ```
RuntimeError - [Xcodeproj] Unknown object version.
/Library/Ruby/Gems/2.3.0/gems/xcodeproj-1.5.4/lib/xcodeproj/project.rb:217:in `initialize_from_file'
/Library/Ruby/Gems/2.3.0/gems/xcodeproj-1.5.4/lib/xcodeproj/project.rb:102:in `open'
/Library/Ruby/Gems/2.3.0/gems/cocoapods-1.4.0/lib/cocoapods/command/init.rb:41:in `validate!'
/Library/Ruby/Gems/2.3.0/gems/claide-1.0.2/lib/claide/command.rb:333:in `run'
/Library/Ruby/Gems/2.3.0/gems/cocoapods-1.4.0/lib/cocoapods/command.rb:52:in `run'
/Library/Ruby/Gems/2.3.0/gems/cocoapods-1.4.0/bin/pod:55:in `<top (required)>'
/usr/local/bin/pod:23:in `load'
/usr/local/bin/pod:23:in `<main>'
    ```

――― TEMPLATE END ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――

[!] Oh no, an error occurred.

Search for existing GitHub issues similar to yours:
https://github.com/CocoaPods/CocoaPods/search?q=%5BXcodeproj%5D+Unknown+object+version.&type=Issues

If none exists, create a ticket, with the template displayed above, on:
https://github.com/CocoaPods/CocoaPods/issues/new

Be sure to first read the contributing guide for details on how to properly submit a ticket:
https://github.com/CocoaPods/CocoaPods/blob/master/CONTRIBUTING.md

Don't forget to anonymize any private data!

Looking for related issues on cocoapods/cocoapods...
 - RuntimeError - [Xcodeproj] Unknown object version.
   https://github.com/CocoaPods/CocoaPods/issues/7697 [closed] [30 comments]
   4 days ago

 - Pod Update: RuntimeError - [Xcodeproj] Unknown object version. Xcode Beta 5
   https://github.com/CocoaPods/CocoaPods/issues/8003 [closed] [17 comments]
   7 weeks ago

 - RuntimeError - [Xcodeproj] Unknown object version.
   https://github.com/CocoaPods/CocoaPods/issues/7458 [closed] [15 comments]
   30 Jul 2018

and 42 more at:
https://github.com/cocoapods/cocoapods/search?q=[Xcodeproj]%20Unknown%20object%20version.&type=Issues&utf8=✓

cocoapodsのバージョンが古いようなので、updateする

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

updateが成功したら、再度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 [プロジェクト名]

end

こんな形式になっています。

サポートplatformの指定

必須ではないようですが、明示的にサポートplatformを指定したい場合は、以下のようにします。
指定しない場合は、ライブラリインポート先のプロジェクトのplatformが自動で割り当てられます。

platformを指定していない場合は、こんな感じで警告が出ます。

[!] Automatically assigning platform `ios` with version `11.4` 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`.

※google翻訳

プラットフォームが指定されていないため、ターゲット `[プロジェクト名]`にプラットフォーム` ios`にバージョン `11.4`を自動的に割り当てます。
Podfileにこのターゲットのプラットフォームを指定してください。
`https:// guides.cocoapods.org / syntax / podfile.html#platform`を参照してください。

platformのバージョンを指定する場合は、2行目の、

# platform :ios, '9.0'

のコメントをはずし(行頭の#を削除)ます。

任意のバージョンを指定してください。

ライブラリの追加

ライブラリの追加は、以下のように記述します。

target '[プロジェクト名]' do

    pod '[ライブラリ名]'
end

使用ライブラリのバージョン指定

以下のパターンで記述することが可能です。

パターン 意味
'1.0' 特定のバージョンを指定
'> 1.0' 特定のバージョンより上のバージョンを指定
'>= 1.0' 特定のバージョン以上のバージョンを指定
'< 1.0' 特定のバージョン未満のバージョンを指定
'<= 1.0' 特定のバージョン以下のバージョンを指定
'~> 1.0' 1.0のバージョンを指定

記述例

target '[プロジェクト名]' do
    # RealmSwift1.0系を使用する
    pod 'RealmSwift', '~> 1.0'
end

ライブラリ取得先の指定

以下のように指定が可能。指定しない場合は、管理情報(~/.cocoapods/repos/master/Specs/)を元に取得先を決める

パターン 意味
:path => '[ローカルパス]' ローカルのフォルダを指定
:git => '[URL]' git上のmasterブランチを指定
:git => '[URL]', :branch => '[ブランチ名]' 特定のブランチを指定
:git => '[URL]', :tag => '[タグ]' 特定のタグを指定
:git => '[URL]', :commit => '[コミットID]' 特定のコミットを指定

記述例

target '[プロジェクト名]' do
    pod 'RealmSwift', :git => 'https://github.com/realm/realm-cocoa.git', :tag => 'v3.8.0'
end

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

pod installコマンドを使用します。

Podfileを編集し終わったら、pod installを実行

※RealmSwiftのbranch、3.1.2を指定してinstallしてみました

>pod install
Analyzing dependencies
Pre-downloading: `RealmSwift` from `https://github.com/realm/realm-cocoa.git`, branch `3.1.2`
Downloading dependencies
Installing Realm (3.1.1)
Installing RealmSwift (3.1.1)
Generating Pods project
Integrating client project

[!] Please close any current Xcode sessions and use `[プロジェクト名]` for this project from now on.
Sending stats
Pod installation complete! There is 1 dependency from the Podfile and 2 total pods installed.

プロジェクト配下に、以下が作成、ダウンロードされます。

Podfile.lock

Podsフォルダにダウンロードしたライブラリの実際のバージョンが記載されています。

Podsフォルダ

ライブラリ群が格納されています。

xcworkspace

外部ライブラリをプロジェクトで使用する際は、 xcodeprojファイルではなく、xcworkspaceファイルをxcodeで開きます。

workspaceファイル名をオリジナル名にする

workspaceファイルはデフォルトでは、[プロジェクト名].xcworkspaceとなりますが、この[プロジェクト名]の部分を任意の名前に変更することができます。 以下のようにPodfileに記載します。

workspace '[任意の名前]`

例)

workspace 'Original'

pod install or pod updateを実行すると、Original.xcworkspaceファイルが作成されます。

updateする

ライブラリをアップデートしたい場合は、pod updateコマンドを実行します。

ライブラリを削除する

インストール済みのライブラリを削除する場合は、Podfileから、該当のライブラリをインポートしている部分を削除します。
編集完了後に、pod updateを実行で、削除されます。

※以下、RealmSwiftを削除後、updateしてみました。

>pod update

Update all pods
Updating local specs repositories
Analyzing dependencies
Removing Realm
Removing RealmSwift
Downloading dependencies
Generating Pods project
Integrating client project
Sending stats
Pod installation complete! There are 0 dependencies from the Podfile and 0 total pods installed.

[!] The Podfile does not contain any dependencies.