XcodeプロジェクトでCocoaPodsを使っていると、Unable to find a specification for と表示されてPodをインストールできないことがあります。
このエラーは、指定したPodや依存ライブラリのspecをCocoaPodsが現在参照しているリポジトリやCDNから見つけられない場合に発生します。
主な原因
- Pod名やバージョン指定の誤り
- ローカルのspec情報が古い
- Podfileで指定しているsourceが不適切
- 対象PodがPrivate Specs Repositoryにしか存在しない
- 依存関係が要求するバージョンとPodfileの条件が一致していない
- ネットワーク障害やCDNへの接続失敗
代表的な発生状況
[!] Unable to find a specification for `ExamplePod`
新しいPodを追加した直後、Podのバージョンを変更した直後、別のMacでプロジェクトを開いたとき、Private Podを含むプロジェクトをセットアップしたときなどに発生しやすいエラーです。
確認手順
1. Pod名とバージョンを確認する
まずPodfileの記述ミスを確認します。スペルや大文字・小文字、バージョン条件が正しいかを見直してください。
pod 'ExamplePod'
pod 'ExamplePod', '~> 1.2'
2. CocoaPodsからPodを検索する
pod search ExamplePod
検索結果に出ない場合は、spec情報が古い、sourceが不足している、Pod名が誤っているなどの可能性があります。
3. Podfileのsourceを確認する
source 'https://cdn.cocoapods.org/'
Private Specs Repositoryを使う場合は、そのsourceもPodfileに追加されている必要があります。
解決方法1:リポジトリ情報を更新する
まずはspec情報を更新してから再度インストールします。
pod repo update
pod install
または、インストール時にリポジトリ更新を同時に行います。
pod install --repo-update
新しく公開されたPodや新しいバージョンが見つからない場合は、この方法で解決することがあります。
解決方法2:Podfileの名前・バージョン指定を修正する
存在しないバージョンを指定している場合、利用可能なバージョンへ修正します。
pod 'ExamplePod', '~> 1.2'
一度バージョン指定を外し、依存関係が解決できるか確認する方法もあります。
pod 'ExamplePod'
解決方法3:Private Specs Repositoryを追加する
Private Podを利用している場合は、Podfileの先頭付近に必要なSpecs Repositoryを追加します。
source 'https://github.com/your-company/specs.git'
source 'https://cdn.cocoapods.org/'
必要に応じてローカルへrepoを追加します。
pod repo add company-specs https://github.com/your-company/specs.git
pod repo update
解決方法4:Podfile.lockとの整合性を確認する
依存関係の状態が古い場合は、対象Podを更新します。
pod update ExamplePod
すべてのPodを無条件に更新すると依存バージョンが大きく変わる可能性があるため、まず対象Podだけを指定する方法が安全です。
解決方法5:CocoaPodsの環境を確認する
CocoaPodsのバージョンを確認します。
pod --version
複数のRuby環境やCocoaPodsが混在している場合は、実行中のpodコマンドの場所も確認します。
which pod
注意点
- Podfile.lockを削除する方法は依存ライブラリのバージョンを変化させる可能性があります。最初の対処として安易に削除しない方が安全です。
- Private Podでは認証設定やリポジトリへのアクセス権も確認してください。
- CI環境だけで発生する場合は、CI側にPrivate Specs Repositoryや認証情報が設定されているか確認してください。
- CocoaPodsを使うプロジェクトでは、通常は.xcodeprojではなく.xcworkspaceを開いて作業します。
まとめ
CocoaPodsの「Unable to find a specification for」は、指定されたPodのspecをCocoaPodsが見つけられないときに発生するエラーです。まずPod名・バージョン・sourceを確認し、pod install --repo-updateやpod repo updateでspec情報を更新してください。Private Podの場合は専用のSpecs Repositoryとアクセス権の確認も重要です。
