LoginSignup
15

More than 5 years have passed since last update.

pod install でライブラリの最新バージョンが入らないときの対処

Posted at

トラブルシューティングのお手伝いで CocoaPods や TravisCI まわりに関して調べたので、その内容を記録しておく。

CocoaPods とは

Swift や Object-C 開発で利用されるライブラリ管理ツール。
24000 以上のライブラリがリポジトリ上で管理されており、インターネット環境を通して登録ライブラリを簡単にインストールできる。
さらに、プロダクトに必要なライブラリやバージョンを明記したファイル(Podfile と呼ばれる)をリポジトリのルートディレクトリに配置しておくことで、開発環境の準備作業を自動化できる。
具体的には、CocoaPods が提供する pod コマンドを実行することで、ワンオペレーションで必要な依存ライブラリがインストールと、XCode のプロジェクトファイルの作成が実行される。

$ pod install

CocoaPods のライブラリ管理

各ライブラリのメタ情報を管理するリポジトリは GitHub 上にホスティングされている。(https://github.com/CocoaPods/Specs)
/Specs/{ライブラリ名}/{バージョン番号} 以下に配置されている podspec ファイルに JSON 形式で記載されている。
例として、https://github.com/CocoaPods/Specs/blob/master/Specs/Nimble/5.0.0/Nimble.podspec.json を引用する。

Nimble.podspec.json
{
  "name": "Nimble",
  "version": "5.0.0",
  "summary": "A Matcher Framework for Swift and Objective-C",
  "description": "Use Nimble to express the expected outcomes of Swift or Objective-C expressions. Inspired by Cedar.",
  "homepage": "https://github.com/Quick/Nimble",
  "license": {
    "type": "Apache 2.0",
    "file": "LICENSE.md"
  },
  "authors": "Quick Contributors",
  "platforms": {
    "ios": "8.0",
    "osx": "10.10",
    "tvos": "9.0"
  },
  "source": {
    "git": "https://github.com/Quick/Nimble.git",
    "tag": "v5.0.0"
  },
  "source_files": "Sources/**/**/*.{swift,h,m}",
  "private_header_files": "Sources/NimbleObjectiveC/CurrentTestCaseTracker.h",
  "exclude_files": "Sources/Nimble/Adapters/NonObjectiveC/*.swift",
  "weak_frameworks": "XCTest",
  "requires_arc": true,
  "pod_target_xcconfig": {
    "ENABLE_BITCODE": "NO",
    "OTHER_LDFLAGS": "-weak-lswiftXCTest",
    "FRAMEWORK_SEARCH_PATHS": "$(inherited) \"$(PLATFORM_DIR)/Developer/Library/Frameworks\""
  }
}

CocoaPods 自体のバージョンはどう管理するの?

CocoaPods 自体は RubyGems 上で提供される Ruby ライブラリである。
なので、Ruby のライブラリ管理ツールである Bundler を使う方法が知られている。

要点は以下の3つ。

  • Bundler に読ませる設定はルートディレクトリの Gemfile に書く
  • Gemfile はこんな風に書く
Gemfile
source "https://rubygems.org"
gem 'cocoapods', '1.0.1'
  • Bundler を利かせるためには、pod コマンドを直接使わずに bundler コマンドを咬ませる。
$ bundle exec pod install

どうして最新バージョンが入らないときがあるのか?

pod コマンドはライブラリのメタ情報をローカルにキャッシュする。
あるライブラリの新しいバージョンがリリースされたとしても、このキャッシュが古い情報のままインストールを実行すると、この新しいバージョンが見えない。
自分が担当したトラブルシューティングでは、TravisCI 上で発生していた。

問題の対処法

pod repo update を実行することで、任意のタイミングでキャッシュを更新することが出来る。
リリース済みのバージョンであるにもかかわらず、Podfile 上で指定されたバージョンのライブラリが見つからない、もしくは最新のバージョンが入らない(Podfile 上でバージョンの指定がない場合には、そのライブラリの最新バージョンが取得される)場合には、これによって対処できるかもしれない。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15