Help us understand the problem. What is going on with this article?

xcodeのbuildは非常に遅くとてもイライラします。

More than 3 years have passed since last update.

私は個人的にRailsのプロジェクトも担当していますが、Railsで変更をしたら大概の場合ファイルをsaveするだけで変更が反映されるのに対し、iOS開発では一旦ビルドし直さないといけません。しかもそのビルド時間は数分かかり、集中力が途切れ非常に公立の悪さを感じていました。そこでXcodeプロジェクトのビルド時間短縮を試みて様々な方法があることがわかったのでまとめたいと思います。

全ての下準備: ビルド時間を計測できるようにする

以下のコマンドを打ってから、Xcodeを再起動するとビルド時間が表示されるようになります。

$ defaults write com.apple.dt.Xcode ShowBuildOperationDuration YES

ちなみに私の環境でとあるプロジェクトのビルド時間は179秒でした。一回のビルドにこれだけ時間がかかっていれば集中力が無くなってしまします。

Kobito.SsoWyF.png

処理を並列化する

デフォルトの環境だとXcodeでのビルドは並列処理されないのですが、設定することで並列処理することができます。

下準備: MacのCore数を確認する

下記のCore数を確認できます。

$ system_profiler SPHardwareDataType

Kobito.J8g1Nj.png

これでCore数は2だということが分かりました。

並列数の設定

次に以下のコマンドでコンパイルの同時実行数を2にします

$ defaults write com.apple.dt.Xcode IDEBuildOperationMaxNumberOfConcurrentCompileTasks 2

すると114秒となり約65秒も短縮できました。
Kobito.w1BUsf.png

ただし、並列タスク数を上げればいいというわけでもないらしく、並列数をこれ以上上げても芳しい結果は得られませんでした。

並列数4
Kobito.AsWaCr.png

並列数5
Kobito.2S9UII.png

並列数16
Kobito.78JOfo.png

結論としてはコア数と同じが良いということですね。

参考:
http://llcc.hatenablog.com/entry/2016/01/15/235114
http://qiita.com/rizumita/items/913b05d799b3712260f6

dSYMファイル

Xcode7.1からはデフォルトでこの設定になっているのですが、それ以前からあるプロジェクトではそうなっていません。ここで、その設定をしましょう。・・・・・・

結果
[Failed to upload Kobito.qhxzKr.png: Unknown error]()

参考:
http://fnet-tech.blogspot.jp/2016/05/xcode.html

CocoaPodsのコンパイルをスキップする

あまり推奨できる方法ではないですがCocoaPodsでダウンロードしたモノはあまり更新するわけではないのでビルドの度にコンパイルするのは効率的ではありません。そこでこの設定です。
・・・・・・・・・・・・・・

Carthageを導入する

ライブラリ管理にはCarthageもあります。仕組みの違い上Carthageの方が早いので対応しているライブラリはCarthageに移行するのも良いでしょう。

参考: http://qiita.com/nori0620/items/b81ae171f0e82b0c2d8a

他に

コンパイルに時間がかかっているファイルを特定し、改善する

コンパイルに時間がかかっているファイルがあったらそれを改善して早くするというのがあります。
私の場合はこの手法で上手く行く箇所が見つけられませんでしたが、型推論を明示的にすることでコンパイル時間の短縮になることが多いようです。

参考: http://qiita.com/rizumita/items/913b05d799b3712260f6

他にもあれば教えて下さい。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away