Swift Package Manager対応フレームワークをCarthageにも対応させる

Swift Package Managerについて

Swiftが標準で提供しているライブラリ管理ツール。SPMとも略される。
フレームワークを配布するには、Package.swiftフレームワークの依存関係などを書いてSources/ソースコードを置く。さらにそのディレクトリをgithubにあげる。公式README

  • Project Directory
    • Package.swift
    • Sources/
    • Tests/

github.com

Carthageについて

こちらも有名どころのライブラリ管理ツール。プロジェクトのビルドが早くなることから好む人も多いと思う。フレームワークを配布するには、まず プロジェクト名.xcodeprojを置き、そのなかでフレームワークSchemeのSharedにチェックを入れる。そして、それをgithubにあげる。 公式README

f:id:culumn:20171207205410p:plain

github.com

SPM → Carthageの問題

SPMはSources/ソースコード置くだけで.xcodeprojが存在しないためCarthage対応させることができない。

SPM → Carthageの解決

つまりはSPMのソースに対して.xcodeprojを作れば良い。
SPMにはソースから.xcodeprojを生成するコマンドが標準であるのでそれを使う。

$ swift package generate-xcodeproj

それからSchemeの設定をしてgithubにあげれば終わりです。

まとめ

自分はよくCarthageを使っていて、githubで使いたいフレームワークを見つけてもCarthage対応してないものを見つけては残念に思っていました。解決できないかなーと公式のREADMEを読んで今回の方法を思いつきました。

また、今回の方法を用いて人生で初めてOSSにプルリク作ってみました。 IdleHandsApps/IHKeyboardAvoiding#45

ちなみにCocoapodsに関しては知識がないので今回触れてません。m(__)m

参考

GitHub - apple/swift-package-manager: The Package Manager for the Swift Programming Language

GitHub - Carthage/Carthage: A simple, decentralized dependency manager for Cocoa

CocoaPods.org