EY-Office ブログ

CocoaPodsからSwift Package Managerに移行するのに少しつまずいた

先週の自分専用Web記事保存アプリのサムネイル画像がへんだ!に書いたiOSアプリですが、FiresBaseライブラリーはCocoaPodsを使っていますが、FiresBaseライブラリーはSwift Package Managerにも対応しているので置き換えてみる事にしました。

Swift Package Manager

Swift Package Managerとは

JavaScriptにはnpm、RubyにはGemなどの標準のパッケージ(ライブラリー)を管理システムがありますが、昔iOSにはパッケージを管理システムがありませんでした。😲

私がiOSの開発を始めたiPhoneOS3の頃には全くパッケージを管理システムは無くて、ライブラリーはソースコードまたはヘッダー(.h)とコンパイルされたライブラリー(.a)を手動でプロジェクトに追加して使っていました😅
しかし、2011年にCocoaPodsが登場しOSSのライブラリーがとても使いやすくなりました。その後CocoaPodsよりも高速にビルドできるCarthageなどのパッケージ管理システムも登場しました。

そして、Swift言語の進歩に合わせ、2017年にApple公式のSwift Package Managerがリリースされました。2017年時点ではXcodeに統合されていませんでしたが、2019年にリリースされたXcode 11.0で統合されApple公式のパッケージを管理システムとしての地位をたかめ、対応ライブラリーも増えてきています。

これらのパッケージを管理システムの歴史や仕組みについては 振り返りながら学ぶPackage Managerに詳しく書かれているので興味がある方は読んでみて下さい。

移行作業

まずはCocoaPodsを削除

ネット上の情報を参考に、

  1. CocoaPodsのpod deintegrateコマンドを実行
  2. .xcworkspace、Podfile、Podfile.lockファルを削除

ここで、XcodeのClean Build Folder、Buildを実行しエラーになることで、Firebaseが無くなった事を確認。

Swift Package Managerでライブラリーをインストール

手順はFirebaseの公式ページのSwift Package Manager で Firebase をインストールするに書かれています。

しかし!

Xcode で、[File] > [Swift Packages] > [Add Package Dependency]に移動して

と書かれていますが、Swift Packagesメニューがありません!! Xcodeのバージョンアップでメニューが変わったようです。正しくは

Xcode で、[File] > [Add Swift Package] に移動して

です。

さて、これで終わりかなと思いましたがBuildするとエラーになります!

なんとFirebaseライブラリ https://github.com/firebase/firebase-ios-sdk.git にはGoogle認証用UIのFirebaseGoogleAuthUI等は含まれてないようです!?

いろいろ調べたところ、https://github.com/firebase/firebase-ios-sdk.git はFirebaseAPIを使うためのライブラリーで、UIは別の https://github.com/firebase/FirebaseUI-iOS.gitにあるようです。
そこで、XcodeのAdd Swift Packageメニューを使いfirebase-ios-sdk.gitを追加しましたが、Conflictエラーになってしまいました。

FirebaseUI-iOS.gitはfirebase-ios-sdk.gitに依存していますが、そのバージョンは8.11.0で、最初に追加した最新バージョン8.12.1のfirebase-ios-sdk.gitとConflictしているようです。

そこで、いったん最新firebase-ios-sdk.gitは外し、FirebaseUI-iOS.gitを追加しなおし、Clean Build Folder、BuildするとFirebaseGoogleAuthUIのエラーは無くなりましたが、Firestore, Storageのところでエラーになります。
FirebaseUI-iOS.gitはfirebase-ios-sdk.gitに依存しているのでfirebase-ios-sdk.gitの実体は取り込まれているようですがコンパイル用の情報がないのかもしれないので、下の画像のように FirebaseStorageUI, FirebaseFirestoreUIをリンクしたところ、コンパイルエラーは無くなり、アプリも動くようになりました。

すこし、モヤモヤしますが今回はこれで良い事にしました。😊

- about -

EY-Office代表取締役
・プログラマー
吉田裕美の
開発者向けブログ