しおメモスマートフォン用の表示で見るしおメモ雑多な技術系ブログです。Systemになってから、全体的にビルド時間は短くなりました。それでも諸々の原因によりビルドがめちゃくちゃ遅い場合があります。そんな場合でも、キレずに冷静に改善する方法紹介します。Summaryを実行します。xcodebuildの場合は、-showBuildTimingSummaryをつけます。-showBuildTimingSummary出力はこのようになります。**大まかにどこに時間がかかっているかがわかります。Systemの利用Xcode10から新しいビルドシステムが採用されているので、そちらを利用します。旧来のビルドシステムとは違い、並列ビルドをしてくれるので、IDEBuildOperationMaxNumberOfConcurrentCompileTasksの指定は不要になります。こちらをすでに設定している場合、そちらが優先されてしまうので、無効にしておきます。IDEBuildOperationMaxNumberOfConcurrentCompileTasksCocoaPodsのライブラリも並列ビルドしてくれます。Levelは-O0にします。ライブラリ管理の見直しCocoaPodsからCarthageに移行するCocoaPodsを使っている場合、Carthageに切り替えることで、ライブラリのfetchと同時にframeworkのビルドを行ってくれるため、その分の時間を節約できます。クリーンビルドの場合、CocoaPodsで導入したライブラリは、再度ビルドし直しになってしまうので、かなり時間がかかってしまいます。CocoaPodsのプレビルドライブラリが多すぎて断念しましたが、Carthageが使えないライブラリの場合、Pods.xcodeprojを別にビルドして、framework化してリンクする方法もあります。未使用コードの削除peripheryというOSSで、Swift限定ですが、使われていないコードを検知することが出来ます。Hierarchyやシンボル検索でたどっていくことをおすすめします。未使用アセットの削除こちらもFengNiaoというOSSで検知することができます。github.comやはりこちらも誤検出があるので、確認が必要です。バイナリサイズも小さくなります。コードの書き方の改善Swiftは言語として非常に高機能ですが、便利な機能とトレードオフでビルド時間が増加することがあります。型推論は時間がかかることが多く、演算の途中では型が確定しないような書き方をすると遅くなることがあります。CompileSwiftに時間が取られている場合、ここを改善することで多少ビルド時間が短くなることがあります。-debug-time-function-bodiesを追加します。-debug-time-function-bodies"で計測することが出来ます。計測した時間を集計するには、xcactivitylogから拾ってくるか、xcodebuildを使う必要があります。operator、genericsなどはコンパイルが長くなる場合があります。以下、遅くなるようなコードの例です。operatorと組み合わせると遅くなるので、一気に結合しないほうがよいです。CGFloatのようにあらかじめ型を明示することで改善することが多いです。Hogeのように戻り値の型明示すると改善します。そもそもビルドしない最近良くやりますが、ちょっとの修正の場合、毎回ビルドしないで、LLDBで書き換える方法もあります。Requestを投げた際に...2019-10-27VSCodeでSwift5.1のSourceKit-LSPを動かすSwiftPMも本格的に使えそうなので、SourceKit-LSPを試してみま...2019-02-05Boostのsplit覚え書きboost::algorithm::splitの使い方です。はてなブログProiOSエンジニアです。