SwiftPMで、ローカルにあるSwift Packageをプロジェクトへ追加したい場合があります。例えば、プロジェクトと依存パッケージを単一のリポジトリで扱いたい場合などです(モノレポ)。
SwiftPMの主要開発者の回答によると、プロジェクトへパッケージをドラッグアンドドロップすればOKとのことですが、少なくとも私の環境ではうまくいかない状況でした(この回答が「あるべき動き」だろうから、今後のアップデートで解消されていくとは思われますが)
この記事では、私の環境における現状(2020/11/15)のワークアラウンドをまとめます。
環境
- MacBook Pro (Retina, 15-inch, Mid 2015)
- macOS Catalina 10.15.7
- Xcode 12.0
手順
- 追加したいSwift Packageを、ローカルのgitリポジトリにする。このgitリポジトリはあとで消すので、やり方は適当で構いません(
git init; git add . ;git commit -m "init"
する) - 追加したいSwift Packageのディレクトリを、プロジェクトフォルダ内のどこかに置きます。
- 追加したいSwift Packageのディレクトリを、Xcodeプロジェクトにドラッグ&ドロップします。
- Xcodeのメニューから、[File] - [Swift Package] - [Add Package Dependency] と進み、当該のSwift Packageのパスを指定します。「file:// + フルパス」の形です。例えば
file:///Users/n/d/expProject/expdat/swiftPackage
などとなります。 - パスを修正します。テキストファイルとして.pbxprojを開き、
file://
で検索
して4.で指定したパスを見つけ、相対パスに置き換えます。例えば./expdat/swiftPackage
などとします。 - Swift Packageのディレクトリから
.git
ディレクトリを削除します。
4.
の時点で、すでにプロジェクトへの追加は完了していますが、ローカルでしか扱えず、Gitとかにpushができない状態になります。それを解消するために5.
、6.
の手順を行っています。
以上です。