Bitriseで iOSアプリのビルドが遅いのは Firebase SDKが原因なのか検証しました。
検証した理由としては、CocoaPods経由でしかインストールできない Firebase SDK を頑張ってCarthage経由にした場合にどれくらいビルド時間を短縮できるのかのおおまかな指標が欲しかったためです。
Bitriseでのビルドを高速化するには
BitriseでのiOSアプリのビルド時間を短縮したいのであれば、キャッシュを有効活用することです。これはとても簡単で下記の3点を実施することであっという間に高速化することができるでしょう。
- Carthage対応のライブラリはCarthageを使う
- carthageステップの
GITHUB_TOKEN
を指定する - CocoaPodsのみ対応のライブラリはcocoapods-binaryを使う
これだけでビルド時間は驚くほど短縮できます。
プロダクトにもよるでしょうが、ライブラリをCocoaPods経由でインストールしていたプロジェクトをすべてCarthage経由に変えただけで、20分かかっていたビルド時間が 8分まで短縮できました。
iOSアプリのビルドが遅い原因は Firebase SDKなのか?
Carthage非対応で*1、cocoapods-binary非対応のライブラリに Firebase SDK があります。
個人的には Firebase SDK が原因でビルド速度が遅くなっている肌感覚なのですが、実際にどれくらいビルド時間が変わるのかを検証したいと考えました。
そこで、ほとんど何も実装していないスケルトンアプリを用意して、Firebase SDKの有無でビルド時間を比較してみることにしました。用意したプロジェクトの Cartfile
と Podfile
は以下のようになっています。
github "SVProgressHUD/SVProgressHUD" github "TimOliver/TOCropViewController" github "realm/realm-cocoa" github "dzenbot/DZNEmptyDataSet" github "NYTimes/NYTPhotoViewer" github "yhirano/LicensePlistViewController"
plugin 'cocoapods-binary' # Uncomment the next line to define a global platform for your project # platform :ios, '9.0' enable_bitcode_for_prebuilt_frameworks! keep_source_code_for_prebuilt_frameworks! target 'Soukanzu' do # Comment the next line if you don't want to use dynamic frameworks use_frameworks! # Pods for Soukanzu pod 'R.swift', :binary => true pod 'LicensePlist', :binary => true pod 'UIDeviceIdentifier', :binary => true # Firebase pod 'Firebase/Analytics' pod 'Firebase/Crashlytics' pod 'Google-Mobile-Ads-SDK' end
このアプリをBitriseでビルドさせるとキャッシュが効いた状態で 11.4分 かかります。通信状況に影響の受けやすい App Store Connectへのバイナリアップロード時間を除くと 9分 です。
Firebase SDKを取り除いてビルドする
さて、Firebase SDKを取り除いてビルドしてみます。Podfile
からこれらのふたつのライブラリを取り除きました。
# Firebase # pod 'Firebase/Analytics' # pod 'Firebase/Crashlytics' pod 'Google-Mobile-Ads-SDK'
pod install
したところ、下記のframeworkが減りました。
- Firebase
- FirebaseAnalytics
- FirebaseAnalyticsInterop
- FirebaseCore
- FirebaseCoreDiagnostics
- FirebaseCoreDiagnosticsInterop
- FirebaseCrashlytics
- FirebaseInstallations
- GoogleDataTransport
- GoogleDataTransportCCTSupport
この状態で Bitriseでビルドさせるとキャッシュが効いた状態で 8.9分 になりました。通信状況に影響の受けやすい App Store Connectへのバイナリアップロード時間を除くと 5.7分 です。
まとめ
本記事では Firebase SDKの有無で Bitriseでのビルド時間にどこまで影響があるかを検証してみました。
- Firebase SDKがある時のビルド時間:9分
- Firebase SDKがない時のビルド時間:5.7分
結果としては、3.3分の差がありました。
ここではゼロサムで比較した結果なので、Firebase SDKをCocoaPodsからCarthageに変更した場合でも単純に3分も差ができるとは思えません。それでも Firebase SDKをCarthage経由にすることを検討した方が良さそうです……
*1:厳密にはCarthageバイナリは提供されているが公式手順としてはCocoaPodsのみとなっている