甘いものが好きです

iOS App開発時に感じた疑問や課題、その他の雑感などを書いていきます。

pod installがSSLErrorで失敗したときの対処方法

以前は成功していたのに……

数ヶ月前に開発が一段落ついたプロジェクトに久々に手を加えようとして、再びローカルに開発環境を整えようとしたのだが、pod installを実行してみると次のようなエラーが出て外部ソースの読み込みに失敗してしまうことがあった。

OpenSSL::SSL::SSLError - SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

以前pod installが成功したときからPodfileの内容に変わりはないのに……。

失敗時の環境は次のとおり。

CocoaPods : 0.20.2
Ruby : ruby 2.0.0p195 (2013-05-14 revision 40734) [x86_64-darwin12.4.0]
RubyGems : 2.0.2
Host : Mac OS X 10.8.4 (12E55)
Xcode : 4.6.3 (4H1503)
Ruby lib dir : /usr/local/Cellar/ruby/2.0.0-p195/lib
Repositories : master - https://github.com/CocoaPods/Specs.git @ b709a858859c0e38ed0a3563f5ee06a86d64d244

問題発生条件

pod installに--verboseオプションをつけて実行してみると、

Fetching external sources

の後、GitHub上にある(PodfileからURLで指定されている)podspecファイルを読もうとしているところでエラーが出ているようだ。

試しに、Podfileの中の

pod '...' :podspec => 'https://raw.github.com/...'

の形で宣言されている部分をコメントアウトしてからpod installを実行してみるとエラーは発生せず、インストールは正常に行われた。

CocoaPodsプロジェクトのIssueに解決の糸口が

GitHub上のCocoaPodsのプロジェクトで関連Issueがないか調べてみたら、少々古い*1が同様のエラーメッセージが出たことに関するIssueがあり、そこでのコメントにこの問題を解決するための手がかりがあった。

結局の対処方法

上記コメント内容を微修正しつつまとめると、対処方法は次のようになる。

  • CA証明書をダウンロードする
sudo curl http://curl.haxx.se/ca/cacert.pem -o /usr/local/share/cacert.pem
  • ダウンロードしたCA証明書を使うように環境変数を設定する*2
SSL_CERT_FILE=/usr/local/share/cacert.pem
export SSL_CERT_FILE

これらの対処を行うことにより、正常にpod installできるようになった。

*1:現在から約9ヶ月前にOpenされたIssue。CocoaPods: 0.14.0, Ruby: ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin11.4.0]での実行結果に関するもの。

*2:私は.bash_profileに書いてみた。