search
LoginSignup
3

More than 1 year has passed since last update.

posted at

updated at

Organization

Carthageで不要なフレームワークのビルドを除外してビルド時間を短縮する

はじめに

Carthage はビルド時にXcodeプロジェクトに含まれる全ての共有スキームをビルドするようになっています。そのため、アプリから依存することのないフレームワークのスキームもビルドすることになり、無駄な時間がかかってしまいます。

例えば RxSwift ですと、次の5つのフレームワークのビルドが走ることになりますが、アプリから使用しているのが RxSwift 単体の場合は、無駄に4つのフレームワークをビルドすることになってしまうのです。

  • RxSwift
  • RxBlocking
  • RxRelay
  • RxCocoa
  • RxTest

この記事では、不要なフレームワークをビルドを除外する方法を紹介します。

ビルドの前に任意の処理を実行する

Carthageで bootstrap もしくは update コマンドを実行すると、以下のような 1~3 の手順でビルド処理が進みますが、手順2の後にプロジェクトから不要な共有スキームを取り除くことでビルドをスキップすることができます。

  1. 依存パッケージのリポジトリをクローン
  2. ビルド対象となるコミットをチェックアウト 👈 この後に不要な共有スキームを取り除く!
  3. プロジェクトの各共有スキームのビルド

Carthage の bootstrap / update コマンドでは前述の手順1~3が全て実行されますが、--no-build オプションを加えることで手順3をスキップすることができます。
また、build コマンドでは手順3のみを実行することができます。

carthage bootstrap --no-build
# ここで不要な共有スキームを取り除く
carthage build

carthage bootstrap --no-builds 相当の処理は carthage checkout でも実行できます。

不要な共有スキームを取り除く

Xcodeプロジェクトの共有スキームは以下のパスにファイルとして存在しているので、このファイルを削除するだけでビルドから除外することができます。

{package}.xcodeproj/xcshareddata/xcschemes/{scheme}.xcscheme

RxSwift の RxCocoa のビルドをスキップしたい場合はこうなります。

rm -f ./Carthage/Checkouts/RxSwift/Rx.xcodeproj/xcshareddata/xcschemes/RxCocoa.xcscheme

まとめ

ここまでの内容で必要なものは全て揃いましたので、あとはシェルスクリプトやMakefileでまとめておきましょう。

./Makefile
.PHONY: carthage_bootstrap carthage_update

carthage_bootstrap:
    carthage bootstrap --no-build
    ./bin/exclude_carthage_unused_schemes.sh
    carthage build --platform iOS --cache-builds --no-use-binaries --use-xcframeworks

carthage_update:
    carthage update --no-build
    ./bin/exclude_carthage_unused_schemes.sh
    carthage build --platform iOS --cache-builds --no-use-binaries --use-xcframeworks
./bin/exclude_carthage_unused_schemes.sh
#!/bin/sh
# Carthageの依存パッケージの不要なスキームはビルドしないように除外する

CARTHAGE_CHECKOUTS=$(cd $(dirname $0);cd ../Carthage/Checkouts;pwd)

# ReactiveX/RxSwift の不要なスキームを削除
SCHEMES_DIR="${CARTHAGE_CHECKOUTS}/RxSwift/Rx.xcodeproj/xcshareddata/xcschemes"
rm -f "${SCHEMES_DIR}/RxCocoa.xcscheme"
rm -f "${SCHEMES_DIR}/RxRelay.xcscheme"

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
3