web-dev-qa-db-ja.com

劇的に長いSwiftコンパイル時間

私はAppleとその機能が好きですが、Swift...OH GOD!

`Swift`のコンパイル時間に問題があります。

構成:

  • MacBook Pro(Retina、13インチ、2014年半ば)
  • 2,6 GHz Intel Core i5
  • 8 GB 1600 MHz DDR3
  • SSD 256(最大800MB /秒)
  • 1kクラス
  • 10ポッド

コンパイル時間:3分.

新しくて素晴らしいSwift、夢」のように見えますが、この構成では不十分であり、_Google Chrome_ --InfiniteLoop(find free memory - eat)のように機能します。


コンパイル時間を短縮するために、さまざまな方法を試しました。

  • _HEADERMAP_USES_VFS_をYESに設定します(変更なし)

enter image description here

  • _Build Settings / Architectures / Build Active Architecture Only_をYESに設定します(多少の改善)

enter image description here

  • _defaults write com.Apple.Xcode PBXNumberOfParallelBuildSubtasks 4_(8)を設定します(場合によってはさらに悪化します)

  • 最適化レベルを_-Onone_に設定します(大きな改善はありません)

enter image description here

  • デバッグ情報の形式を設定します-_DWARF with dSYM File_の代わりにDWARF

enter image description here

  • スキームから_Find implicit dependencies_を無効にします(大きな改善はありません)

enter image description here

  • 新しいプロジェクトを作成し、すべてのファイルを新しいプロジェクトに移動しました(時間がかかりすぎて時間の改善が少ししかありません)

  • compilatorをデフォルトから利用可能な他のコンパイラに変更します(さらに悪いことに)

  • 高速コンパイルされたSwiftコード(詳細は以下)の書き方に関する厳格なルール

私は人々が同じ問題を説明しているいくつかの投稿を見つけました: ここここ

私は誰もが新しい_Xcode 8.2 beta 2_を待っていると思いますここで:

小さな変更のみが発生した場合、Xcodeはターゲット全体を再構築しません。 (28892475)

しかし、これは部分的にしか当てはまりません。コンパイル時間はまだ長く、6〜12分から3〜8分に移動しました。これの詳細な説明は見つけることができます ここ および ここ

また、コードの記述中は、次のすべてのルールに従いました。

  • 連鎖機能の削減
  • オプションの開梱
  • オブジェクトの暗黙的な入力(特に辞書)
  • 回避??オペレーター(これは非常に空腹です!!)
  • 回避?:演算子

言い換えれば、「新しいクールな機能」は使用しないでください。何年も待つことになります。

もう1つの試み-説明されている回避策です ここ

「製品」->「スキーム」->「スキームの編集」に移動します。左側の列で[ビルド]を選択し、[暗黙の依存関係を検索]をオフにします。ただし、プロジェクトを初めてビルドするときは、このフラグをオンのままにしておく必要があります。

しかし、この回避策は私が探しているものではなく、これは一時的な解決策としても使用できます。

Swiftは、書くのが難しいからではなく、(少なくとも一部のマシンでは)使いにくいために苦痛です。

比較のために:私は_Objective-C_に2kクラスと11ポッドのプロジェクトを持っています-クリーンコンパイル時間は約30秒です。

また、Swiftパフォーマンス:

  • SR-2461
  • SR-1465
  • SR-1707
  • SR-66
  • そして他の多くの人は、リストが長すぎて、それらのいくつかは数年前に開かれました

私の質問は:

Swiftのコンパイル時間を改善するための解決策はありますか?

19
gbk

この問題は私にとっても非常にイライラする。私たちはあなたが言及したいくつかの解決策を試しましたが、どれもうまくいきませんでした。

コンパイル時間が大幅に改善されたのは、Whole Module Optimization-Ononeを追加しながらOther Swift Flagsをオンにすることです。
これを参照してください--- スピードアップSwiftコンパイル

Swift 3Xcode 8.3を使用しています。

7
Forge

Cocoapodsの代わりにCarthageを使用してサードパーティのライブラリを含めることで、コンパイル時間を大幅に改善しました。

2
Sebastian Boldt

コードの最適化がオンになっている可能性がありますが、これはリリースバージョンをビルドするために必須ですが、開発ビルドの場合は特に重要ではありません。

コード最適化が行うことは、まさにそれが言うことです。それは、生成される最終バイナリをより小さくするためにコードを最適化します。変数/メソッドの名前を1文字に変更するなどの処理を行います。前述のように、アプリストアに送信するときに明らかにこれが必要ですが、開発中にアプリが大きくてもかまわない場合があります。

プロジェクト設定>ビルド設定に移動し、「optim」を検索して、開発ビルドのコード最適化をオフにできます。Swiftコンパイラ-コード生成は、デバッグビルドの最適化レベルをなし[-Onone]に設定します。 。

これにより、ビルド時間が大幅に改善されます。

2
Jacob King

デバッグ制限のないモジュール全体の最適化

Swift_WHOLE_MODULE_OPTIMIZATIONuser-defined設定として値[〜#〜] yes [〜#〜]そしてコンパイル時間は大幅に改善されるはずです。

enter image description here

この修正は、Zalandoの開発者によって導入されました。彼らに叫びなさい。 https://jobs.zalando.com/tech/blog/improving-Swift-compilation-times-from-12-to-2-minutes/?gh_src=4n3gxh1

1
Sebastian Boldt