Swift + ObjCプロジェクトをXcode 8(Swift 2.3)に更新した後、Xcodeがインクリメンタルビルドではなくプロジェクトの完全な再構築を行う時間の50%以上が見つかりました。
行われた変更は、単純な印刷ステートメントの追加です。完全な再構築を実行するタイミングに関するロジックはないようです。
これは、これを決定する「依存関係の確認」フェーズに表示されます。 Xcode 7では、これは問題ではないようでした。
他の誰かがこれに遭遇しましたか?
私はこれが一貫して動作することを発見しましたが、ブリッジヘッダーに含まれるヘッダーを変更するとSwiftファイルをコンパイルします。gitブランチを切り替えると完全なコンパイルも行います。
まず、デバッグの最適化レベルがNone(モジュール全体の最適化ではない)に設定されていることを確認します
次に、 https://forums.developer.Apple.com/thread/62737 Apple Staff(ddunbar):
私たちはその設定を信じています:
HEADERMAP_USES_VFS = YES
プロジェクト(またはすべてのターゲット)でtrueにすると、多くの人々にとって効果的な回避策になる可能性があります。これは動作することが保証されていません(これがデフォルトで既にオンになっていない理由です)が、ほとんどのプロジェクトで動作するはずです。
これは、ターゲットのビルド設定の下にある「ユーザー定義設定の追加」を介して追加する必要があります。
。
さて、なぜそれが起こっているのかについての答えがありますが、私は解決策を知りません。 "Other Swift Flag" -driver-show-incremental Xcodeを使用すると、依存関係に基づいてコンパイルする必要があると判断したものが出力されます。次のようなものが表示されます。
Queuing EditProfileViewController.Swift because of dependencies discovered later
Queuing ChangePasswordViewController.Swift because of dependencies discovered later
Queuing JoinViewController.Swift because of dependencies discovered later
Queuing JoinProfileViewController.Swift because of dependencies discovered later
Queuing FormViewBuildable.Swift because of dependencies discovered later
Queuing RadioTextFormView.Swift because of dependencies discovered later
Queuing TextFieldFormView.Swift because of dependencies discovered later
Queuing AccountProfileViewController.Swift because of dependencies discovered later
これがSwift 3の問題かどうか疑問に思っています。なぜなら、変換する前にこの問題を抱えていなかったからです。
FileAにはFileBからのものが含まれ、FileCからのものが含まれます
また、どこでも使用されていないFileCにファイルのプライベート変更を追加すると、依存関係のためにFileA、FileB、およびFileCがコンパイルのためにキューに入れられます。本日、Xcode 7でこの例をテストして、何が起こるかを確認します。
したがって、Swift 3の依存関係の解決はうまく機能していません。他の2つのSwift 3プロジェクトが動作し、同じどんなファイルでも変更を加えると、すべてのファイルがコンパイルされます。約15,000行程度のコードでプロジェクトに着手するまで遅く感じることはありません。 Swift 3アプリの場合、インクリメンタルな合併症が適切に機能していないことに気付かないかもしれません。詳細がわかったら更新します。
Appleは昨日(11月14日)Xcodeの新しいベータ版をリリースしました
Xcode 8.2 beta 2
また、この問題はリリースノートで解決済みとしてマークされています。
ビルドシステム
•Xcodeは、わずかな変更のみが発生した場合、ターゲット全体を再構築しません。 (28892475)
それは私のために働いています。ビルド速度はいつものように戻りました。この問題に直面しているすべての人は、それを試してみるべきです!
[スキームの編集]> [スキーム]> [ビルド]タブの[暗黙的な依存関係の検索]のチェックを外すと、プロジェクトファイルの問題が修正されました。 「コピーSwift=標準ライブラリ」はまだ時間がかかります。