酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

CocoaPodsをv1.0.0にアップデートしたら「TypeError - Unable to convert Ruby value "FBSDKCoreKit" into a CFTypeRef.」がでてpod installが失敗するようになった

pod installできない系の問題に結構ぶつかってる気がする。今回は「TypeError - Unable to convert Ruby value `"FBSDKCoreKit"' into a CFTypeRef.」とエラーが出てJenkinsのビルドジョブが途中でabortしてしまう現象についてです。

CocoaPodsはここ数ヶ月間しばらくアップデートされない状態になっていました。そのおかげもあってか全プロジェクトがv0.39.0で統一されていたので問題は起こっていませんでした。

CocoaPods v1.0.0の正式リリースに伴って、プロジェクトAでは「CocoaPods v0.39.0」を、もうひとつのプロジェクトBでは「CocoaPods v1.0.0」を使わないといけない状況になりました。

メンバーの助言でbundlerを使って切り替えるようにしたのですが、bundler & CocoaPods v1.0.0の環境だとTypeError - Unable to convert Ruby value xxx into a CFTypeRef.とエラーがでてしまう問題があるようです。

結果を書くと、bundler経由でCocoaPods v1.0.0を使う場合にはRuby 2.3.0を使わない表題のエラーがでてしまうようでした。

CocoaPods v1.0を使うだけでよければRuby 2.3.0を入れれば良いのでしょう。しかし、Ruby 2.3.0を入れるとCocoaPods 0.39.0でトラブルが発生してしまったことがあったので、「Ruby 2.3.0とCocoaPods 0.39.0の組み合わせ」では使いたくありません。

……ということで、rbenvを使ってプロジェクトごとに使用するRubyのバージョンを変更しつつ、Gemfileの設定を変更しました。

ビルドスクリプト

# ruby
rbenv local 2.3.0
rbenv rehash

# cocoapods
bundle install --path vendor/bundle
bundle exec pod install

# build project
xcodebuild xxx

Gemfile

source 'https://rubygems.org'
ruby '~>2.3'
gem 'cocoapods', '1.0.0'

参考

CocoaPodsのIssuesに同じ現象について書かれていたので参考にしました。

github.com