酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Bitriseで iOSアプリのビルドが遅い原因は Firebase SDKなのか検証する

Bitriseで iOSアプリのビルドが遅いのは Firebase SDKが原因なのか検証しました。

検証した理由としては、CocoaPods経由でしかインストールできない Firebase SDK を頑張ってCarthage経由にした場合にどれくらいビルド時間を短縮できるのかのおおまかな指標が欲しかったためです。

Bitriseでのビルドを高速化するには

BitriseでのiOSアプリのビルド時間を短縮したいのであれば、キャッシュを有効活用することです。これはとても簡単で下記の3点を実施することであっという間に高速化することができるでしょう。

これだけでビルド時間は驚くほど短縮できます。

プロダクトにもよるでしょうが、ライブラリをCocoaPods経由でインストールしていたプロジェクトをすべてCarthage経由に変えただけで、20分かかっていたビルド時間が 8分まで短縮できました。

iOSアプリのビルドが遅い原因は Firebase SDKなのか?

Carthage非対応で*1、cocoapods-binary非対応のライブラリに Firebase SDK があります。

個人的には Firebase SDK が原因でビルド速度が遅くなっている肌感覚なのですが、実際にどれくらいビルド時間が変わるのかを検証したいと考えました。

そこで、ほとんど何も実装していないスケルトンアプリを用意して、Firebase SDKの有無でビルド時間を比較してみることにしました。用意したプロジェクトの CartfilePodfile は以下のようになっています。

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分 です。

f:id:ch3cooh393:20200513233714p:plain

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分 です。

f:id:ch3cooh393:20200514002248p:plain

まとめ

本記事では Firebase SDKの有無で Bitriseでのビルド時間にどこまで影響があるかを検証してみました。

  • Firebase SDKがある時のビルド時間:9分
  • Firebase SDKがない時のビルド時間:5.7分

結果としては、3.3分の差がありました。

ここではゼロサムで比較した結果なので、Firebase SDKをCocoaPodsからCarthageに変更した場合でも単純に3分も差ができるとは思えません。それでも Firebase SDKをCarthage経由にすることを検討した方が良さそうです……

*1:厳密にはCarthageバイナリは提供されているが公式手順としてはCocoaPodsのみとなっている