Xcode 8は毎回完全なコードを再コンパイルします


131

コードが変更されると(ファイルは.pchにありません)、プロジェクト全体が毎回再コンパイルされます。


31
なぜこれが反対投票されたのですか?これは正当な問題です。毎回コンパイルするのに4分かかり、すべてのチームの生産性が低下します。
Josh

1
私もこの問題を抱えています。
AJ9 2016

3
xib /ストーリーボードをいくつかのIBDesignableで変更していますか?
Larme、2016

1
関連するアップルフォーラムスレッド:forums.developer.apple.com/thread/62737。まだ回避策はありません。
ldiqual 2016

1
Appleフォーラムで提案されているように、必ずバグレポートを開いてください。
Leo Natan 2016

回答:


34

2017/1/2アップデート

この問題はXcode 8.2.1では解決されていません(私のプロジェクト用)

生き残る方法?

Code IDE: Xcode/Atom
Build: xcrun
Debug: Xcode (Control + Command + R)

アップデート2016/12/17

この問題はXcode 8.2では解決されていません。

アップデート2016/12/12

コーディングするアトムとビルドしてデバッグするコマンドラインは、私の選択です。Appleがこの正当なバグをすぐに修正することを願っています。

アップデート2016/12/04

この問題はXcode 8.2(beta 2)で解決されたようです。

しかし、私にとっては解決されていないため、Xcode 8.2を使用してもこの問題に直面します。あなたはそれを試すことができます(Xcode8.2ベータ2をここからダウンロードしてください

ビルドシステム•小さな変更のみが発生した場合、Xcodeはターゲット全体を再ビルドしません。(28892475)


古い答え: これは回避策です:

ここに画像の説明を入力してください 「ビルド設定」タブ→「C言語方言」→「コンパイラデフォルト」に変更。

参考までに

「C言語方言」が「コンパイラデフォルト」ではなく「GNU99」に設定されていました。以前の標準はGNU99でしたが、現在はそうではありません。ある時点で、Xcodeはライブラリプロジェクト設定を正しく移行しなかったため、GNU99に設定されました。それをGNU99に変更すると、毎回すべてのコードの再コンパイルが停止しました。


1
ここまでは順調ですね!!!それが続くならば、私に1時間と賞金はあなたのものです。
Adam Waite 2016年

7
すべての再コンパイルに戻ります
アダムウェイト

1
私も同じように振る舞います。派生データをクリアすると(またはC言語の方言を変更すると)、約10ビルドで機能します。その後、すべてを再構築するためにフォールバックします。
bluebamboo 2016年

1
Xcode 8.2(ベータ2)は10ビルドで動作し、すべてを最初から再ビルドしますが、以前のものよりも優れています。
マーカス

3
残念ながら、この問題はXcode 8.3ベータ2でも持続します(少なくとも私たちにとっては)。このプロジェクトでは、目立った改善は測定できません。
Kasper Munck 2017

20

[製品]-> [スキーム]-> [スキームの編集]に移動します。左側の列にビルドを選択し、チェックを外し、「暗黙の依存関係を検索します

ただし、プロジェクトを初めてビルドするときは、このフラグをチェックしたままにする必要があります。


@Josh、プロジェクト内で複数のプロジェクトを使用していますか(例:サブプロジェクトまたはインクルード)。そして、ビルドの出力を見て、本当にすべてを再ビルドしていることを確信していますか?
モバイルベン

3
ココアポッドとメインプロジェクトを備えた基本的なワークスペース。CocoaPodsはビルドされたままですが、メインプロジェクトはすべてのファイルを再ビルドします。ビルドの出力と、間違いなくすべての100以上のファイルの再構築を監視しています。
Josh

1
更新:このソリューションは、実行後にいくつかのビルドで機能するようですが、プロジェクト全体をクリーンアップして再ビルドします。ただし、2〜8回目の再構築までに、すべての再コンパイルが再開されます。何か案は?イライラを超えて。
Josh

これは、少なくともCocoaPodsワークスペースでは機能しません。いつでもすべてが構築されます。特にAppleがこの問題を修正するために何年も持っているので、非常に迷惑です。
ウォンブル、

7

私の修正は、ストーリーボードを閉じるだけでした。ソースファイルをアシストエディターで開き、ストーリーボードファイルも開きました(ストーリーボードを閉じていました-変更を加えていなかったため)不要なコンパイルをすべて削除しました


1
それはとても簡単
かもしれません

5

更新しました

私が行うことができた単一の最大の改善は、プロジェクトのモジュール化でした。他のほとんどすべてのクラスで使用されているORMレイヤーを具体的にモジュール化します。そのコードをプロジェクト内の別のターゲットに移動し、それをモジュールとしてインポートすることで、コンパイル時間を大幅に改善することができました。Xcodeは、ビルドを行うときに不要なファイルを再コンパイルすることを決定しなくなりました。

次に、高速増分デバッグビルドに単一ファイルコンパイル方法を使用します。

このリンクには、コードのリファクタリング、https: //medium.com/rocket-fuel/optimizing-build-times-in-swift-4-dc493b1cc5f5など、他にもいくつかの良い提案があり ます。

古い

それでもXcode 9で常に問題が発生しています。多くの人と同じように、多くのソースファイルを含む大規模なSwift 4 / cocoapodsプロジェクトに取り組んでおり、毎回すべてのファイルを再コンパイルすることに腹を立てています。

これまでのところ、私は次の設定で最良の結果を得ています。私はあなたがそれを試してみて、それがあなたのためにどのように機能するか見ることを勧めます。

  • スキーマ->ビルド-> 「暗黙的な依存関係を見つける」= TRUE
  • ビルド設定-> リンク時最適化=インクリメンタル
  • ビルド設定-> 最適化レベル(デバッグ)=なし[-OO]
  • ビルド設定-> 最適化レベル(リリース)=最速、最小[-Os]
  • ビルド設定-> プリコンパイル済みヘッダーの共有を増やす= YES
  • ビルド設定-> 増分蒸留を有効にする= YES

カスタムのユーザー定義ビルド設定を追加しました、

  • ビルド設定-> HEADERMAP_USERS_VFS = YES

注:モジュール全体を最適化するためのカスタムユーザー定義設定はありません。


3

この問題を修正したと思われるプレフィックスヘッダーに関するコードをいくつか変更しました。実際にどれがトリックを実行したかはわかりませんが、他の誰かを助けることを期待して、それらすべてを共有します。プレフィックスヘッダーが設定されていない場合、これは問題ではありません(または問題は多面的です)。

  1. ビルドされた製品ディレクトリのファイルであるプレフィックスヘッダーからインポートを削除して、これのビルド設定(「プリコンパイル済みヘッダーがビルドディレクトリのファイルを使用する」)を「いいえ」に変更できるようにします。他のインポートを通じて間接的にインポートされないようにしてください。
  2. Clangモジュール(Headersディレクトリにmodule.modulemapファイルを持つライブラリまたはフレームワーク)を使用するプレフィックスヘッダーからインポートを削除し、のようなコードを記述できるようにします@import MyModule。(私にとって、これとステップ1は同じものでした。)
  3. プレフィックスヘッダー共有のビルド設定を「はい」に設定します。(私はこれが必要だとは思いませんし、私自身のプロジェクトでは何の影響もないはずです。私は何でもしようと思って変更したので、これを述べています。:))
  4. Xcodeを終了し、DerivedData / ModuleCacheディレクトリを削除します(覚えている場合は〜/ Library / Developerに設定されています)。

それでもうまくいかない場合は、プレフィックスヘッダーからインポートをいくつか削除してみてください。何かがトリップしている可能性があります...


3

https://forums.developer.apple.com/thread/62737によると、彼らは積極的に取り組んでいるようですが、回避策は

HEADERMAP_USES_VFS = YES

ターゲットのビルド設定の下(プロジェクト->ターゲット->ビルド設定->ユーザー定義)。

このソリューションは、私にとって今日は常に機能しましたが、先月は他のソリューションが一貫して機能していませんでした。

編集:それでも時にはすべてを再コンパイルしますが、この設定を定義すると、実行頻度が大幅に低下するようです。


この値も追加しました。ビルド時間は速くなりますが、増分ビルドは解決されませんでした。Swiftコンパイラを変更しました-コード生成/デバッグを高速なモジュール全体の最適化に変更しました...これが今までで最高の結果です
Antonio Junior

私もユーザー定義を見つけることができません)
デビッドシーク

2
@DavidSeekはビルド設定の一番下にあります
Laser Hawk

1
表示されない場合は、meandmark.com / blog / 2011/03 / xcode
Laser Hawk

3

@IBDesignable私の特定のケースのXcodeビルドプロジェクトで、ディレクティブに関するすべてのコードを常にチェックしてください。 ストーリーボードにこの@IBDesignable属性が含まれているビューがあったためです。もう1つは、ストーリーボードを別のウィンドウ(タブではなく)で開いて、すべてのシミュレーターのXcode makeビルドを永久にプッシュすることです。


かなりの数の@IBDesignableディレクティブを使用しています...特に注意すべき点はありますか?
スタン

1つずつ除外してそれらを見つけて結果を確認することは可能だと思います。私の場合、プロジェクト全体で@IBDesignableディレクティブの2つだけでした。
ua24 2017

2

Madhuri Maneはこれに関して完全に正しいです。もう少し明確にするために、注意すべきいくつかの重要なポイント:

これは、ターゲットが依存するライブラリ/フレームワークに暗黙的な依存関係がある場合にのみ適用されます。

「暗黙的な依存関係の検索」が無効になっている場合:

結果:アプリケーションターゲットをビルドする前にライブラリはビルドされません。アプリケーションターゲットをビルドできません。

修正:2番目のシナリオが発生しないようにするには、必要なターゲットをターゲットリストに追加して、正しく順序付けする必要があります。

トピックの出典と詳細:https : //pewpewthespells.com/blog/managing_xcode.html#scheme-action

プロジェクト全体が1つのターゲット内にあり、コンパイルに4分かかる場合、フレームワークに分割して上記を活用するか、コンパイルがどこで遅れるかを理解する以外は、これについてできることはほとんどありません。PaintCodeのようなものを使用しているか、UIKitコードの大きなチャンクをすばやく持っている場合は、Objective-cに変更すると、コンパイルがはるかに速くなります


2

ターゲットのビルド設定に移動し、に設定Defines ModuleYesます。

いくつかのビルドで私のために働いたが、これが決定的な回避策であると主張するには早すぎるが、少なくとも私たちは試みている。


2

Appleは昨日Xcodeの新しいベータ版をリリースしました(11月14日)

Xcode 8.2 beta 2

また、この問題はリリースノートで解決済みとしてマークされています。

ビルドシステム

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

それは私のために働いています。ビルド速度はいつものように戻ってきました。この問題に直面しているすべての人は、それを試してみてください!

https://developer.apple.com/download/


2

プロジェクトのビルド設定に行き、「C言語方言」を変更してください。

xcodeのバージョンを更新すると、「C言語の方言」が「コンパイラのデフォルト」ではなく「GNU99」に設定されます。ある時点で、Xcodeはライブラリプロジェクト設定を正しく移行しなかったため、GNU99に設定されました。これは問題を解決します


1

Swiftファイルに変更を加えた場合は、アプリのビルドを開始します。最後のタブに移動し、ビルドログをクリックします。「依存関係の確認」の段階でビルドを停止し、再度実行します。2回目の実行では、変更したファイルのみがビルドされます。正しく行われれば、それは毎回機能することがわかりました。プロジェクト設定を変更する必要はありません。

これはXcodeのバグのようです。

ここに画像の説明を入力してください

アプリがフルビルドを実行しているのを確認したら、ビルドを停止して、このトリックを再試行してください。

コードに変更を加えていない場合は、CMD + CTRL + Rを使用して、デバッガーをアタッチするアプリをビルドせずに実行します。アプリを作成しませんが、不要な時間を節約できます。


これは実際に機能しますが、XCodeがコード1で失敗することがあり、クリーンビルドを作成する必要があります。それは悪夢です
アントニオ・ジュニア

Xcodeが常にフルビルドを行うシナリオは他にもあります。ブリッジングヘッダーに含まれている.hファイルを変更すると、すべてのSwiftファイルが再構築されます。Xcodeのバグとは無関係のシナリオが他にもある場合があります。
2016年

唯一の変更は、関数の名前変更または既存のクラス/構造体に追加された新しいプロパティであり、結果として全体が再構築されるシナリオです。
アントニオジュニア

この質問/答えを参照してください、このスレッドは、このの複製である:良い作品持っているソリューション:stackoverflow.com/questions/39456223/...
ヴラド

1

「暗黙の依存関係を見つける」ソリューションのチェックを外すことで解決した私の側の問題。

ただし、cocoapodsを使用している場合は、この設定をポッドプロジェクトにも適用するには、

製品->スキーム->ポッド-"yourProjectName"

以下にも適用されます:

製品->スキーム-> "yourProjectName"

それは私を助けるので、このヒントが他の誰かを助けることを願っています。

ありがとう


1

1.プロジェクトに移動します2.ビルド設定をクリックします3.デバッグのためにOptimizationLevelがNoneに設定されていることを確認します。4.「ユーザー定義設定の追加」をクリックします。5. SWIFT_WHOLE_MODULE_OPTIMIZATIONをYESに設定します。

ここに画像の説明を入力してください


何も動作しないので、1文字書いてもコンパイルされます。
チャンドニ2018

-2

xcodeのコンパイル時間を増やすには、IRAMDISK(仮想メモリディスク)を利用できます。コンパイル時間を短縮するための非常に便利で効果的な手段。

また、頻繁に使用するアプリケーションの高速化にも使用できます。

ダウンロードして使用するには、次のリンクを参照してください:http : //iramdisk.findmysoft.com/mac/


SSDディスクが既にある場合、これはコンパイルをスピードアップしません。
Jano
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.