👻

CocoaPodsを廃止した

2023/06/29に公開

特に深い理由はなかったが、廃止し移行した経緯です。

現状のCocoaPods

iOSアプリの依存管理ツールは有名なところで3つあります。

  • CocoaPods
  • Carthage
  • Swift Package Manager(SPM)

CocoaPodsは最も古くからある依存管理ツールで、Carthageが登場し、ついにはApple純正のSPMが登場した。CocoaPodsはメンテナンスはされているものの古いこともあり新しい開発は積極的には行われていない。これは悪いと言うことではなく単純にこれ以上やることがないと言ったものだと思われる。

移行したSwift Package Manager

Apple純正のSPMは特別良い依存管理ツールとは思ってはいない。それでも移行した理由は2つある。

* Apple純正である
* Xcodeのみで完結し、Xcode以外への依存を減らせる

Apple純正であることは、少なくともAppleが潰れるや代替手段ができるまではサポートされると思われる。継続的な改善もそれなりに期待できる。
CocoaPodsはRubyで動いており、Rubyを管理するためのrbenvやGemに依存する。これは地味に面倒である。リポジトリを落としてきた後に入れるものが大量にあると言うのは結構大変なものである。その点、Xcodeのみで動くSPMはトラブルがあった場合でも解決しやすい。

移行方法

SPMで小さいパッケージを入れる

CocoaPodsとSPMを同時に使ったとしても壊れることはない。それぞれに依存関係のないパッケージをSPMで追加してみて様子を見ることにした。一つ入れてみれば入れ方やgitへの依存していることやgitconfigでの問題は解決すると思われる。

CocoaPodsの小さなパッケージをSPMに移行する

SPM単体で入れた後は、CocoaPodsで追加しているパッケージをCocoaPodsから外して、SPMで追加して変更前と同様に動くことを確認した。ここで移行するパッケージはそれ単体のみで動作するもの(別のパッケージに依存していないもの)を選ぶことをお勧めする。

順次移行する

小さなパッケージを移行できれば大抵の問題は解決すると思われる。ただ、複数のパッケージが一つのパッケージに依存している場合は、まとめて移行しなくてはいけない場合ある。ある程度覚悟を持って一気に行ったものもある。
ひたすらに繰り返して、CocoaPodsに依存しているパッケージがなくなるまでおこなった。

CocoaPodsを廃止する

最後に残っているCocoaPodsに依存している全て一度に修正する

  • Podsfileの削除
  • .xcworkflow の削除
  • XcodeにBuild Phasesに挿入されている処理の削除
  • CIの修正
  • Gemfileでのcocoapodsのインストールをやめる

これでCocoaPodsを廃止することができた。

終わりに

移行の経験によって、SPMの使用方法や依存関係の解決策に慣れていくことができ、徐々にCocoaPodsからSPMへの移行が進められました。ただし、移行作業はプロジェクトの規模や依存関係の複雑さによって異なるため、個々のプロジェクトに応じて柔軟に対応する必要があります。

Discussion