Bitriseできっとライズ

Bitriseに関する役立つ情報を共有します。弊社ブログに掲載してもいいという方はご一報ください!

ビルド作業を60%速く

ビルド作業を60%速く:

Force Xcode to use cashing! 

新しいステップを使って、Xcodeビルドを最大60%速くしよう!

exportコマンドを実行する場合を除き、Xcodeはすべてのビルド関連のキャッシュファイルとその他のデータをderived dataフォルダー(〜/ Library / Developer / Xcode / DerivedData)に保存して使用します。しかし、Xcodeのキャッシュはプロジェクトの形とファイルの変更時刻、内容などのすべてのプロパティに依存するため、このパスをキャッシュすることだけが必要なわけではありません。

 

ビルドのためにBitriseにリポジトリをクローンすると、すべてのファイルの修正時刻は現在の時刻(git cloneの時刻)に設定されるので、すべてのファイルは新しいビルドごとに変更されたとみなされます。内容はビルド間で変わりません。

 

ファイルの修正時間が変更されないように、Recursive Touch for Cacheという新しいステップを作成しました。

2 inputs:

  1. a path for a directory  ディレクトリのパス (by default: “$BITRISE_SOURCE_DIR”)
  2. a time 時間  (by default: “2017–09–01T15:00:00+00:00”) input field

 

このステップでは、指定されたディレクトリの下にあるすべてのファイル変更時刻が設定されるため、開始した後のビルドでもファイルの変更時刻は同じになります。

 

セットアップ

適切なXcodeキャッシュを使用したい場合は、2つのステップを設定する必要があります。

  1. RecursiveTouch for Cacheステップ - ビルド間のプロジェクトファイルの修正時間を保存します。Xcode Unit Testステップの直前に行われるはずです。
  2. Cache:Pull、Cache:Push  - Derived dataパスをキャッシュします(下記のパスをCache:Pushステップのキャッシュパスに入力し、パス入力を省略します:〜/ Library / Developer / Xcode / DerivedData)

Proof

キャッシュが期待どおりに機能しているかどうか、どうやって確認できますか?

 

 

以下がログがキャッシュされる前の様子です。

 

 

 

次にこれがキャッシュが機能している時です。

 

=== BUILD TARGET ios-simple-objc OF PROJECT ios-simple-objc WITH CONFIGURATION Debug ===

Check dependencies

=== BUILD TARGET ios-simple-objcTests OF PROJECT ios-simple-objc WITH CONFIGURATION Debug ===

Check dependencies

** BUILD SUCCEEDED **

  

 

最後に、サンプルの構成を見てみましょう。

 

  - activate-ssh-key@3.1.1:

      run_if: '{{getenv "SSH_RSA_PRIVATE_KEY" | ne ""}}'

  - git-clone: {}

  - cache-pull@1.0.0: {}

  - certificate-and-profile-installer: {}

  - recursive-touch: {}

  - xcode-test:

      title: 'Xcode: Unit Test'

      inputs:

      - simulator_device: iPhone 5s

      - output_tool: xcodebuild

  - cache-push@1.1.4:

      inputs:

      - cache_paths: "~/Library/Developer/Xcode/DerivedData"

      - ignore_check_on_paths: "~/Library/Developer/Xcode/DerivedData"

  before_run:

  after_run:

trigger_map:

- push_branch: "*"

workflow: primary




これらでderivedDataフォルダをキャッシュしてテストを実行したところ、ビルド時間が最大60%短縮されました。

 

注:アーカイブコマンドは常にクリーンなリ-ビルドを行うので、キャッシュを使用してもアーカイブを高速化することはできません。 (これはXcodeのバグです。)

 

 英語のブログ:

https://medium.com/@bitrise/60-faster-builds-force-xcode-to-use-caching-on-bitrise-af8979ca39a6