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

初心者向けCocoaPodsで最低限必要な用語の解説とTips

More than 5 years have passed since last update.

CocoaPodsはiOSのライブラリ管理ツールです。
CocoaPodsのインストール自体は簡単なのですが、各用語の関係を把握するのが取っ付きづらいので運用する際に覚えなければいけない最低限の用語をまとめてみました。

インストールについてはここここなどがわかりやすかったです。

用語解説

用語

  • Podfile (テキストファイル)
  • podspec (テキストファイル)
  • Specs (複数のpodspecの集まり)
  • CocoaPods/Specs <公式のSpecs>

Specs

  • [SPEC_NAME].podspecを持つ、決められたディレクトリ構成のGitリポジトリ
├── Specs
    └── [SPEC_NAME]
        └── [VERSION]
            └── [SPEC_NAME].podspec

CocoaPods/Specs

公式のSpecsリポジトリ

  • CocoaPodsをインストールした時にデフォルトでクローンされるリポジトリ。保存先は~/.cocoapods/repos/master
  • 他のSpecsリポジトリを追加したい場合は$ pod repo add REPO_NAME SOURCE_URLでクローンの保存先は~/.cocoapods/repos/REPO_NAME

podspec

  • ファイル名は [SPEC_NAME].podspec
  • どのGitリポジトリのどのファイルをインストールすればいいかを記載したテキストファイル
  • 主にtagでバージョンを管理
Pod::Spec.new do |spec|
  spec.name         = 'Reachability'
  spec.version      = '3.1.0'
  spec.license      = { :type => 'BSD' }
  spec.homepage     = 'https://github.com/tonymillion/Reachability'
  spec.authors      = { 'Tony Million' => 'tonymillion@gmail.com' }
  spec.source       = { :git => 'https://github.com/tonymillion/Reachability.git', :tag => 'v3.1.0' }
  spec.source_files = 'Reachability.{h,m}'
  spec.framework    = 'SystemConfiguration'
  spec.requires_arc = true
end

Podfile

  • xcodeprojと同じディレクトリに置く
  • どのライブラリをインストールするかを記載するテキストファイル
  • ライブラリ名だけを記載した場合、~/.cocoapods/repos/にクローンしてあるSpecsから一致するものが探される
platform :ios,'5.0'
pod 'JSONKit'
pod 'Reachability'
pod 'AFNetworking'

Gitリポジトリを直接指定する方法

pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git'

pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :branch => 'dev'

pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :tag => '0.7.0'

pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :commit => '082f8319af'

[注意] 指定したリポジトリに[SPEC_NAME].podspecファイルが存在する必要がある

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

Podfileを置いたディレクトリで$ pod installを実行する。

ざっくり以下の様なことが実行される

1. podfileを検証
2. ~/.cocoapods/repos/ や 直接GitリポジトリにPodfileに記載されたSpec名の[SPEC_NAME].podspecがあるか
3. [SPEC_NAME].podspecに従いライブラリをインストール
4. xcworkspeceを作成

用語まとめ

  • Podfile (テキストファイル)

    -> どのライブラリをインストールするかを記載

  • podspec (テキストファイル)

    -> どのGitからどのファイルをインストールすればいいかが記載

  • Specs (複数のpodspecファイルの集まり)

    -> 決められたディレクトリ構成で各ライブラリのpodspecを持っている

  • CocoaPods/Specs <公式のSpecs>

    -> インストール時にクローンされるSpecs

関係

  1. Specsは各ライブラリのpodspecファイルを持っている
  2. podspecファイルはそのライブラリのGitリポジトリのURLとインストールに必要なファイルが記載されている
  3. $pod installをするとPodfileに記載されたライブラリのpodspecファイルSpecsから探し取得することにより、各ライブラリをインストールすることができる

Tips

導入時に実際につまづいたことの解決です。

Pod files推奨ディレクトリ構成

自身のライブラリをpodspecに対応させる場合の推奨ディレクトリ構成

├── Assets
├── CHANGELOG.md
├── Classes
    └── ios        <- iOS用のpodspecのspec.source_filesを指定するディレクトリ
    └── osx        <- OSX用のpodspecのspec.source_filesを指定するディレクトリ
├── Example
    └── Podfile    <- xcodeprojがあるディレクトリ
├── LICENSE
├── README.md
├── Rakefile
└── NAME.podspec

Podfileのテンプレート

xcodeprojがあるディレクトリで$ pod initを実行するとテンプレートを元にしたPodfileが作成されます。そのカスタマイズ。

自前のSpecsの作り方

自前のライブラリ(podspec)をCocoaPods/SpecsにPull Request

pod pushについて

podspecの書き方例

AFNetworkingが実用的で参考になると思います。(subspecの書き方とか)

@importを使用している場合、podspecに追加するフラグ

s.compiler_flags = '-fmodules'

プロジェクトからCocoaPodsを削除する

何か問題があってプロジェクトを$ pod installする前の状態に戻したい場合に単純にPodfilePodfile.lockxcworkspaceを削除するだけではだめです。xcodeprojに追加されたスクリプトなども削除しないとビルドが通りません。

まとめ

自身のライブラリをCocoaPodsに対応させないのであればpodspecを作ることはないです。
公式のCocoaPods/Specsにあるライブラリをインストールしたいだけなら、xcodeprojと同じディレクトリにインストールしたいライブラリ名を記載したPodfileを作成し、$ pod installするだけになります。

がっつり導入する場合にはpodspecやPodfileの書き方など覚えることが多く非常に導入コストがかかると思いますが、それ以上の多大なる恩恵が得られるツールです。最近ではCocoaPodsに対応してないライブラリは導入しないくらいです。
特に一番助かったことは自分のプライベートなライブラリの保守性が非常に高まったことです。

Why do not you register as a user and use Qiita more conveniently?
  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
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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