CocoaPodsで入れたライブラリを更新しようとターミナルで

pod update

と打ったら、「pod: command not found」と出てアップデートができなくなってしまいました。

つい何日か前は普通に使えてたのに。

ターミナルで

gem list

と打つと、

cocoapods (0.38.2)
cocoapods-core (0.38.2)
cocoapods-downloader (0.9.3)
cocoapods-plugins (0.4.2)
cocoapods-stats (0.5.3)
cocoapods-trunk (0.6.4)
cocoapods-try (0.4.5)

cocoapods関連のものがしっかり入っていました。

「pod: command not found」の原因

「入ってるのになんでー?」と調べてみるとMacBook Proに入れているOSをEl Capitan(OS X 10.11)にアップデートしたことが原因ぽいことがわかりました。

AppleはEl Capitanのインストーラーに新たに導入されたシステム整合性保護(SIP)機能"Rootless"に関する面白い機能を実装しているようです。
「El Capitanのインストーラーには、古いOSからアップデートするさい、Appleが新たに導入するSIPで保護するディレクトリから非Apple製のファイルを探しだし” QuarantineRoot”というディレクトリに移動させる」
via:OS X 10.11 El Capitanのインストーラーには"/bin"や"/usr"などシステム保護ディレクトリにある非Apple製ファイルを移動してしまう機能があるので注意。

また、Githubのissueに解決法があがっていることをSlackであきおさん(@akio0911)から教えてもらいました。

Builds fails with OS X El Capitan 10.11 Beta (15A244d) | Xcode Version 7.0 beta 4 (7A165t) · Issue #3970 · CocoaPods/CocoaPods

「cocoapods (0.38.2)」というのだけが入っていない状態

ただ残念なことに、このissueにたどり着く前に

gem uninstall cocoapods
gem install cocoapods

とかして、issueに書いてあることをやってもうまくいかない状態になっちゃってました。。

現状を把握するためにターミナルで

gem list

と打つと、

cocoapods-core (0.38.2)
cocoapods-downloader (0.9.3)
cocoapods-plugins (0.4.2)
cocoapods-stats (0.5.3)
cocoapods-trunk (0.6.4)
cocoapods-try (0.4.5)

となっていて、「cocoapods (0.38.2)」というのだけが入っていない状態でした。

最終手段、全部消して入れ直す

どうやって対処すればいいかなーとググってたらこんなページを発見。

各プロジェクト内のPodfileさえ無事なら、podコマンドがどうなろうが影響ないはずなので、最終手段は全部やりなおし。
via:CocoaPodsでError出た時の対処法 - 銀の人のメモ帳

というわけで、全部やり直ししてみたら無事

pod update

が使えるようになりました!

「rm -rf」は恐ろしい呪文

中途半端に残っていたのも一緒にアンインストールしたのですが、

rm -rf

恐ろしい呪文だと教えられていたので、リンク先のページに書いてあった次の2行

rm -rf ~/.cocoapods
rm -rf ~/Library/Caches/CocoaPods

は実行しませんでした。

キャッシュフォルダっぽいところを確認しても何も入っていなかったので、実際にはこんな風に実行しました。

sudo gem uninstall cocoapods cocoapods-core cocoapods-downloader cocoapods-plugins cocoapods-stats cocoapods-trunk cocoapods-try
sudo gem install -n /usr/local/bin cocoapods
pod --version

これで最後に「0.38.2」と表示されて無事CocoaPodsが使えるようになりました。

さいごに

El Capitanにアップデートした影響でCocoaPodsが使えなくなるとは思いませんでした。
ただOSのバージョンアップは今まで使えてたものが突然使えなくなるようなことも起こりえるので、そんな問題が起きた時にどう対処するか考えることが大切な気がします。