Spotifyのブログで、iOSのビルド作業において、XCodeが実行する間の待ち時間を短縮する取組みを紹介しています。背景ソースコードをいじった後、XCodeでRunボタンを押してからシミュレータで結果を確認できるまでの時間は、自宅のiMacで平均82秒かかっていた。コマンドラインで確認したところ、linkingで29秒、dSYMファイルの生成で25秒。SpotifyのiOSクライアントのコードベースはかなり大きく、linkerが2,000のオブジェクトファイルをまとめる必要があるので、おそらく取組みがいがあると判断。つくることで回避したのがはじまり。Linking少し古いがAppleはld64のソースコードを公開しているので、プロファイルをチェックしてみた。ld64のパイプラインのResolvingステージに対応している、つまりこのステージは各オブジェクトファイルのグラフを大きなグローバルグラフにもっていく役割を担っている。(ld64のドキュメント)各オグジェクとファイルのグラフを読み込むのは早めの段階でおきるので、resolveにコストがかかり、実行時間の多くを占めるというのは解せない。bitcodeファイルを扱ってるということになる。よって、このbitcodeは高い抽象化レベルのプログラムとしてLTOをするが、一方副作用として、ネイティブコードに翻訳される必要があるので、linkに余計な処理時間がかかってしまう。変更し、linkerは51%スピード改善。10m/developer/daySpotifyのようにiOSエンジニアが多い所帯だと、1年トータルでそれなりに時間の節約効果はでるのではないか。linkingに挑戦して、更なる改善を図りたい。ブランチを頻繁に変更し、都度ビルドを強いられるエンジニアもいるが、AppleはXCode4.3で分散ビルドのサポートを取りやめている。hashを利用したオブジェクト/ライブラリストレージなどのアイデアも話している。次はAndroidビルドの業務改善に取り組みたい。#コーディングBack。