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)から教えてもらいました。
「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のバージョンアップは今まで使えてたものが突然使えなくなるようなことも起こりえるので、そんな問題が起きた時にどう対処するか考えることが大切な気がします。