2016年8月17日水曜日

CocoaPods で undefined method inherit が出た場合の対処方法

オフィス狛 技術部です。

今回は iOS のライブラリ管理ツールである CocoaPods で発生したエラーについて書いてみます。

※CocoaPods とは、Androidでいうところの Gradle みたいなもので、
ライブラリ管理においては、非常に有用なツールです。


弊社のGit管理上、Pods 以下は gitignoreに入れています。
その為、Gitからプロジェクトをクローンして、最初にやるのが、ターミナルでの
pod update
になります。

今回も、意気揚々とコマンド入力したら・・・

[!] Invalid `Podfile` file: undefined method `inherit!' for #. Updating CocoaPods might fix the issue.

 #  from /Users/officekoma/testproj/Podfile:18
 #  -------------------------------------------
 #    target 'SampleTests' do
 >      inherit! :search_paths
 #      # Pods for testing
 #  -------------------------------------------

[!] Your Podfile has had smart quotes sanitised. To avoid issues in the future, you should not use TextEdit for editing it. If you are not using TextEdit, you should turn off smart quotes in your editor of choice.

あらら。「inherit なんてメソッド知らない!」と怒られてしまいました。
調べてみると、inherit は「cocoapods-1.1.0.beta.1」より追加されたメソッドのようです。
という訳で、ターミナルで
pod --version
と打ってみます。
結果は・・・1.0.1

どうやら、このプロジェクトを作成した端末の CocoaPods と、
私の端末の CocoaPods はバージョン違っているようです。

では、バージョンアップしようという事で、今度はターミナルで、
sudo gem install cocoapods --pre
と打ってみます。(「--pre」はbeta版をインストールする為に必要となります。)

ERROR:  While executing gem ... (Errno::EPERM)
    Operation not permitted - /usr/bin/xcodeproj

またエラー・・・

ただ、このエラーは割と有名です。
mac の OS が El Capitan 以降の場合、セキュリティ上の仕様で、
「/usr/bin」にはroot権限でもアクセス制限が掛かってしまいます。

インストールディレクトリを変える必要があるので、ターミナルで、
sudo gem install -n /usr/local/bin cocoapods --pre
と入力し、今度こそ 1.1.0.beta.1 のインストールに成功。

「pod setup」で、セットアップを行い、バージョンを確認すると・・・1.0.1
・・・あれ?確かにインストールは成功したのに・・・。
デフォルトで適用されるものを最新バージョンで差し替えてくれる訳では無いのですね。
(まあ、そりゃそうですよね。)

という訳で、ターミナルで
sudo gem uninstall cocoapods
と入力し、

Select gem to uninstall:
 1. cocoapods-0.39.0
 2. cocoapods-1.0.1
 3. cocoapods-1.1.0.beta.1

1.1.0.beta.1 以外のバージョンを削除します。
これで無事に「pod update」まで出来ました。

後書き

上記はあまり良い方法とは言えませんのでご注意下さい。
複数メンバーで開発していると、 CocoaPods のバージョンが異なる事はよくあります。
(今回は、undefined method でそれが発覚しました)

通常は、それを避ける為に bundler を導入します。

・・・が、そもそも、
CocoaPodsの開発元は、Pods 以下は gitignoreに入れない事を推奨しています。

CocoaPods Guides -Using CocoaPods

確かに、Gitからクローンしただけで、ビルド出来るのが最適ですからね。

0 件のコメント:

コメントを投稿