環境
xcode8.1
swift2.3
optimization Level None [-o0]
iMac5kのフルスペック
課題
- クリーンからビルドして、平均
10分
かかり、開発の進捗に影響がでているので改善したい
方針
- ビルド時間の平均を
5分
を目標にする(5分くらいならストレスが溜まらないと思い目標にした)
改善策
CocoaPodsからCarthageに置き換える
利点
- CocoaPods の場合はライブラリをアプリ本体と一緒に都度ビルドしますが、Carthage の場合はライブラリ導入時にのみビルドするのでライブラリのビルド時間分だけ短縮される
導入方法
注意点
- Carthageに対応してないライブラリがあるとCocoaPodsと二重管理になる
- Carthageで管理しているライブラリを頻繁にアップデートするとパッケージのビルド時間が多くなるのでトータルのビルド時間が多くなる
carthageのビルド時間のトータルは使い方次第
Embedded Frameworkの導入
利点
- アプリのコードをターゲットに分割して、Frameworkとして扱うことができる
- コードが分割されるので差分コンパイルがききやすくなる
- Frameworkに分割することで依存関係がはっきりする
- Frameworkごとにテストを行える
導入方法
- File → New → TargetでCocoa Touch Frameworkを選ぶと
Embeed Framework用のターゲットが追加される - メインターゲットで使用したいクラスでimportすれば使えます
[Embedded Framework使いこなし術] (http://qiita.com/mono0926/items/e29cd17789fd1d1548aa)
導入したプロジェクトでの分け方
Network層
- Networkに依存したクラスを定義
永続化層
- DataBase、UserDefault関連
- Modelとの依存関係が強いものもここに含まれる
イベントトラッキング層
- GoogleAnalyticsなどの計測まわりのクラスを定義
ライブラリ層
- 依存関係を持たず、使い回すクラスやメソッドを定義
- アプリで使うkeyなどもここに定義されている
注意点
- Embedded Framework同士で依存関係がある場合は
build Phases
のTarget dependencies
に含めて設定をする - Embedded Frameworkのターゲットで使用したライブラリはメインターゲットにもインストールが必要です(CocoaPodsやCarthgeを使うときに注意)
結果
- クリーンした状態からのビルドが改善する前は
10分
かかっていたのが
5分
に短縮!! - アーカイブの時間も
20分
から10分
に短縮することに成功
感想
- 今回やってみて、既存のプロジェクトのコードを
Embedded Framework
に対応させるために多くの書き直しが必要になりました. - 最初の段階でEmbedded Frameworkに対応しておくのをおすすめします(1週間ぐらいかかりました
)
- Frameworkに分割するために依存関係を整理できたのでコードが読みやすくなった
- 差分ビルドがききやすくなったのでビルド時間によるストレスがなくなった
- Embedded Frameworkの設定でつまずいたら、mozilla-mobile/firefox-iosのプロジェクトを確認することで解決することができた
- Firefoxは偉大