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
SSL_CERT_FILE=/usr/local/share/cacert.pem export SSL_CERT_FILE
これらの対処を行うことにより、正常にpod installできるようになった。