CocoaPodsからSwift Package Managerへ移行するには
XcodeでiOSアプリを開発する際、様々なライブラリを使用していると思います。
初期の頃はZipなどで配布されていたライブラリをダウンロードし、自分でプロジェクトに組み込み、設定ファイルを書き換えて入れていました。
私も教科書的な本を買い、導入に一苦労していた一人です、なつかしいですね。
そしてライブラリを集中管理する仕組みが提供され、ライブラリの管理は加速度的に楽になりました。
CocoaPods や Carthage といった、非ネイティブなソリューション管理システムの登場です。
やがてXcode11になると、ソリューション管理は公式より提供されました。
そう、 Swift Package Manager(以下SwiftPM) です。
今回は CocoaPods を例に、SwiftPMへの移行について、記載していきたいと思います。
余談ですが、冒頭のメッセージは 「WWDC風」 な言い回しを意識してみました。
もうしません、多分。
はじめに
今回は すでにCocoaPodsでライブラリを導入しているXcodeプロジェクト(ワークスペース)のライブラリ管理を、SwiftPMへと移行する という目的の記事です。
「CocoaPodsって何?」 という方に向けた記事ではありません、ご注意ください。
プロジェクトからCocoaPodsを削除する
まずはCocoaPodsで使用していたファイルを消しましょう。
ターミナルでプロジェクトディレクトリまで移動し、コマンド pod deintegrate を実行します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ pod deintegrate Deintegrating `[プロジェクト名].xcodeproj` Deleted 1 'Check Pods Manifest.lock' build phases. Deleted 1 'Embed Pods Frameworks' build phases. - Pods_[プロジェクト名].framework - Pods-[プロジェクト名].debug.xcconfig - Pods-[プロジェクト名].release.xcconfig Deleted 1 empty `Pods` groups from project. Deleted 1 empty `Frameworks` groups from project. Removing `Pods` directory. Project has been deintegrated. No traces of CocoaPods left in project. Note: The workspace referencing the Pods project still remains. |
これでプロジェクトとCocoaPodsの結合を解除できます、簡単ですね。
ただ、ログにも書いてありますが、一部のファイル(.xcworkspace、Podfile、Podfile.lock)がまだ残ったままなので削除しましょう。
プロジェクトからファイルの除外ができれば、CocoaPodsの影響はなくなります。
Podfileには使用していたライブラリの情報が入っています。
ライブラリの詳細を事前に控えていない場合、退避してあとで確認できるようにしておくと良いでしょう。
CocoaPodsでライブラリを追加する以外の目的で.xcworkspaceファイルを使用している場合(ビルドと同時にBashでファイル操作をしている場合など)、削除すると問題が出る可能性があります。
その場合、退避してあとで確認できるようにしておくと良いでしょう。
Xcode11でSwiftPMを使う
現在、更新が滞っているものを除けば、多くのライブラリがSwiftPMをサポートしています。
[File] -> [Swift Packages] -> [Add Package Dependency] の順に選択していきます。
出てきたウィンドウにある Search or enter package repository URL の入力領域に、ライブラリのリポジトリを入力しましょう。
ほとんどの場合はGithubのURLになると思いますが、URLがわからない場合、CocoaPods.orgでライブラリを検索し、詳細画面の「GitHub Repo」がリポジトリのURLになってます。
ライブラリがSwiftPMに対応しているかわからない場合、リポジトリに 「Package.swift」 があるかどうかである程度判断できます。
チェックアウト画面にはバージョン、ブランチ、コミットなどで取得するライブラリを指定できます。
ライブラリを設定するターゲットを指定してFinish。
PROJECT の Swift Package タブを見てみると、先ほど選択したライブラリが入っています。
これでライブラリがSwiftPMで管理されるようになりました。
もしライブラリがSwiftPMに対応してなかったら
使用していたライブラリがまだSwiftPMに対応していない時もあると思います。
そういう時は、下記のような手段を試してみましょう。
- 対象のリポジトリをフォーク
- パッケージ記述ファイル(Package.swift)を追加
- 変更をコミットしてプッシュ
- Xcodeで独自の分岐リポジトリURLを使用
- プルリクエストを作成
これである程度の場合、対応することが可能です。
なお、Package.swiftの例は下記のとおりです。
こちらはコピペでは動きませんので、適宜状況によって読み替えてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
// swift-tools-version:5.1 import PackageDescription let package = Package( name: "TargetLibrary", platforms: [ .iOS(.v13), ], products: [ .library( name: "TargetLibrary", targets: ["TargetLibrary"]), ], dependencies: [ // no dependencies ], targets: [ .target( name: "TargetLibrary", dependencies: []), .testTarget( name: "TargetLibraryTests", dependencies: ["TargetLibrary"]), ] ) |
さいごに
これでSwiftPMに無事移行できることがわかりました。
ただ、この記事を読んで試される方は必ずバックアップを取っていただき、すべての機能が無事稼働することを確認してください。
移行は100%成功するものではありませんし、適宜改修が必要になることもしばしばです。
皆さんのアプリ開発ライフが少しでも良いものになりますように。
- おすすめ記事
POPULAR
のえる
Full-stack Developer