static libraryをつかったマルチモジュール環境でCocoaPodsとSwiftPackageManagerを混在させる
このようにアプリの一部のモジュールをstatic libraryに切り出し、それぞれでCocoaPods経由でライブラリを使っているケースで、Swift Package Manager経由でライブラリを使いたいときの対処法です。
モジュール分割したどちらか一方でのみSwift Package Manager経由でライブラリを追加する場合は普通にXcodeのPackage Dependenciesを使えばよいです。
上の図のライブラリBように複数のtargetから使われているライブラリをSwift Package Managerにしたい場合、XcodeのPackage Dependenciesで複数のtargetに追加すると duplicate symbols for architecture..
となってしまったりする場合があると思います。
対策
そういった場合はライブラリをラップするフレームワークをつくり、そのフレームワークを各モジュールから使うようにするとうまくいきます。
例えばTCAを全Targetから使いたい場合ですが、
まずラップするフレームワークとしてtargetにPackageContainerというフレームワークを追加し、そのフレームワークにSPMで追加したTCAをFramework&Libraryで追加します。
そして各targetのFramework&LibraryにPackageContainerを追加すれば完了です。
すべてSwift Package Managerにすることはできず、一部CocoaPodsにしないといけない場合などにどうぞ。