仕事でcocos2d-xのアプリを開発していた際に、プロジェクトに組み込んだフレームワークと、CocoaPodsでインストールしたフレームワークで競合が発生してしまいました。
今回はCocoaPodsで競合が発生した時の対処法に関するメモです。
iOS CocoaPodsで競合発生
状況としては下記のような感じです。
- プロジェクトにGoogle Mobile Ads Framework(AdMob)を追加済み
- MoPubのAdMobアダプターを導入する為にCocoaPodsで「MoPub-AdMob-Adapters」をインストール
- 「MoPub-AdMob-Adapters」は「Google Mobile Ads Framework」に依存しているので、CocoaPodsが「Google Mobile Ads Framework」もインストールする(結果Google Mobile Ads Frameworkが2つになる)
- 一応、デバッグビルドは通るけど、リリースビルドで同じファイルが存在するエラーが出る
アプローチ1.CocoaPodsの「Google Mobile Ads Framework」を削除してみる
とりあえず、Google Mobile Ads Frameworkは既に入れているので、新たに追加されたGoogle Mobile Ads Frameworkを削除してみることにしました。
削除してビルドしてみると、「MoPub-AdMob-Adapters」のフレームワークの参照エラーが出てしまうので、この方法はダメっぽい(設定を色々変更したらできるかもだけど)
アプローチ2.プロジェクトにある「Google Mobile Ads Framework」を削除してみる
次に、プロジェクトにあるGoogle Mobile Ads Frameworkを削除してみました。
こちらも同様に参照エラーが出そうな気がしたのですが、一応、うまく行ったらしく、デバッグビルドもリリースビルドも通るようになりました。
もっと良い方法はありそうだけどとりあえず解決したからよしとする
Androidの場合など、gradleの設定で、依存を無視する設定ができたりもするので、おそらくCocoaPodsでも同じように依存関係を解決する方法はありそうです。
ただ、今回はここにあまり時間を割きたくなかったので、フレームワーク削除という力技を使いました。
今後もう少し時間に余裕がある時にCocoaPodsの依存関係の設定周りを学んでおきたいなと思います。