背景#
以前はCocoaPods
を使用していましたが、今回はコンパイル時間の最適化を行う際に、いくつかの Pod 依存のライブラリをCarthage
依存に変更しました。ここではCarthage
の使用について記録します。
使用#
インストール#
brew
を使用してインストールします。簡単で便利です。
brew install carthage
使用#
プロジェクトのあるフォルダ、つまり.xcodeproj があるフォルダでCartfile
を作成します。
touch Cartfile
次に Cartfile を開きます。
open Cartfile -a Xcode
依存するサードパーティライブラリを追加します。依存バージョンの指定に注意してください。指定バージョンと指定範囲の書き方は以下の通りです。
github "krzyzanowskim/CryptoSwift" ~> 1.4.0
github "evgenyneu/keychain-swift" ~> 19.0
github "ibireme/YYKit"
github "ReactiveX/RxSwift" "6.5.0"
github "onevcat/Kingfisher" "version6-xcode13"
github "alibaba/HandyJSON" ~> 5.0.2
github "https://github.com/antitypical/Result.git"
github "pkluz/PKHUD" ~> 5.0
github "Moya/Moya" ~> 15.0
注意が必要なのは、Carthage
の中には全ての SDK がコンパイルされるものもあり、実際の必要に応じてプロジェクトにインポートできます。例えばRxSwift
やMoya
などです。
最後のステップはインストールです。以下のいくつかの方法の違いに注意してください。
# すべてのプラットフォームをコンパイルします。例えばtvOS、iOS、macOSなど
carthage update --use-xcframeworks
# iOSのライブラリのみをコンパイルします
Carthage update --platform ios --use-xcframeworks
# iOSのライブラリのみをコンパイルし、もしコンパイルのキャッシュが存在する場合は再コンパイルしません
Carthage update --platform ios --use-xcframeworks --cache-builds
# 参考:https://stackoverflow.com/questions/41442601/whats-the-purpose-of-no-use-binaries-in-carthage
carthage build --platform ios --use-xcframeworks --no-use-binaries
コンパイル後に生成されたxcframework
をプロジェクトにインポートします。プロジェクトの General タブのFrameworks, Libraries, and Embeded Content
でEmbeded & Sign
のチェックを切り替える必要があります。以下のように:
もしSwiftLint
を使用している場合、コンパイル後にエラーが発生することがあります。その場合は.swiftlint.yml
にCarthage
を除外する設定を追加します。以下のように:
excluded:
- Pods
- Carthage
最後に、Carthage プロジェクトをコミットした後、他の人がこのプロジェクトをクローンした場合、以下のコマンドを実行して Carthage フレームワークを同期する必要があります。
carthage bootstrap