Xcode 8 kompiliert jedes Mal den vollständigen Code neu

131

Bei jeder Änderung des Codes (obwohl sich die Datei nicht in .pch befindet) wird das vollständige Projekt jedes Mal neu kompiliert.

Mahvish
quelle
31
Warum wird das abgelehnt?! Dies ist ein legitimes Problem. Das Kompilieren dauert jedes Mal 4 Minuten und hat die gesamte Teamproduktivität beeinträchtigt.
Josh
1
Ich bekomme auch dieses Problem.
AJ9
3
Ändern Sie xib / storyboards mit einigen IBDesignable-Dingen?
Larme
1
Verwandte Apple Forum Thread: forums.developer.apple.com/thread/62737 . Noch keine Problemumgehung.
ldiqual
1
Stellen Sie sicher, dass Sie einen Fehlerbericht öffnen, wie im Apple-Forum vorgeschlagen.
Leo Natan

Antworten:

34

Update 2017/1/2

Dieses Problem wurde in Xcode 8.2.1 (für mein Projekt) nicht behoben.

Wie man überlebt?

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

Update 17.12.2016

Dieses Problem wurde bei Xcode 8.2 nicht behoben.

Update 12.12.2016

Atom zum Codieren und Befehlszeile zum Erstellen und Debuggen ist jetzt meine Wahl. Hoffe, Apple wird diesen legitimen Fehler bald beheben.

Update 2016/12/04

Dieses Problem scheint mit Xcode 8.2 (Beta 2) behoben zu sein .

Aber für mich ist es nicht zu lösen, ich bin mit diesem Problem konfrontiert, auch wenn ich Xcode 8.2 verwende. Sie können es versuchen (Xcode8.2 Beta2 hier herunterladen )

System erstellen • Xcode erstellt nicht das gesamte Ziel neu, wenn nur kleine Änderungen vorgenommen wurden. (28892475)


Alte Antwort: Dies ist eine Problemumgehung:

Geben Sie hier die Bildbeschreibung ein Registerkarte "Build Setting" -> "C Language Dialect" -> Ändern Sie es in "Compiler Default".

Als Referenz :

Der "C Language Dialect" wurde auf "GNU99" anstelle von "Compiler Default" gesetzt. Früher war der Standard GNU99, jetzt aber nicht mehr. Irgendwann hat Xcode die Einstellungen des Bibliotheksprojekts nicht korrekt migriert und wurde daher auf GNU99 gesetzt. Sobald ich es auf GNU99 geändert habe, wurde mein gesamter Code jedes Mal neu kompiliert!

Nhat Dinh
quelle
1
So weit, ist es gut!!! Gib mir eine Stunde und das Kopfgeld gehört dir, wenn es mithält.
Adam Waite
7
Argh es ist zurück, um alles neu zu kompilieren
Adam Waite
1
Ich habe das gleiche Verhalten. Wenn ich die abgeleiteten Daten lösche (oder den Dialekt der C-Sprache ändere), funktioniert dies für ungefähr 10 Builds. Danach fällt es zurück, um alles wieder aufzubauen.
Bluebamboo
1
Xcode 8.2 (Beta 2) funktioniert für 10 Builds und erstellt dann alles von Grund auf neu, aber immer noch besser als das vorherige.
Markus
3
Leider besteht das Problem in Xcode 8.3 Beta 2 weiterhin (zumindest für uns). In unserem Projekt kann keine spürbare Verbesserung gemessen werden.
Kasper Munck
20

Gehen Sie zu Produkt -> Schema -> Schema bearbeiten. Wählen Sie In linker Spalte erstellen und deaktivieren Sie " Implizite Abhängigkeiten suchen ".

Dieses Flag sollte jedoch aktiviert bleiben, wenn Sie das Projekt zum ersten Mal erstellen.

Madhuri Mähne
quelle
@Josh, verwenden Sie mehrere Projekte in Ihrem Projekt (z. B. Teilprojekt oder enthalten)? Und sind Sie sicher, wenn Sie sich Ihre Build-Ausgabe ansehen, dass sie wirklich alles neu erstellt?
Mobile Ben
3
Es ist ein grundlegender Arbeitsbereich mit Cocoapods und dem Hauptprojekt. CocoaPods bleibt erstellt, aber das Hauptprojekt erstellt jede Datei neu. Beobachten Sie die Build-Ausgabe und die Wiederherstellung aller über 100 Dateien.
Josh
1
Update: Es scheint, dass diese Lösung für einige Builds danach funktioniert, aber auch für die Bereinigung des gesamten Projekts und die Neuerstellung. Beim 2-8. Mal wird jedoch alles neu kompiliert. Irgendwelche Ideen? Mehr als frustrierend.
Josh
Dies funktioniert nicht, zumindest nicht mit einem CocoaPods-Arbeitsbereich. Alles baut sich jedes Mal auf. Super nervig, zumal Apple Jahre hatte, um dieses Problem zu beheben.
Womble
7

Fix für mich war nur das Schließen des Storyboards, ich hatte die Quelldatei mit dem unterstützten Editor geöffnet und die Storyboard-Datei auch geöffnet (Schließen des Storyboards --- da ich keine Änderungen daran vorgenommen habe), um alle unnötigen Kompilierungen zu entfernen

Emilio Concepcion
quelle
1
Ha es kann so einfach sein :)
manmal
5

AKTUALISIERT

Die größte Verbesserung, die ich erzielen konnte, war die Modularisierung meines Projekts. Spezielle Modularisierung der ORM-Schicht, die in fast jeder anderen Klasse verwendet wird. Durch Verschieben dieses Codes in ein separates Ziel in meinem Projekt und Importieren als Modul konnte ich die Kompilierungszeiten erheblich verbessern. Xcode entscheidet sich nicht mehr dafür, unnötige Dateien neu zu kompilieren, wenn ich einen Build durchführe.

Jetzt verwende ich die Single File Compilation-Methode für schnelle inkrementelle Debug-Builds.

Es gibt einige andere gute Vorschläge in diesem Link, einschließlich Code-Refactoring, https://medium.com/rocket-fuel/optimizing-build-times-in-swift-4-dc493b1cc5f5

ALT

Mit Xcode 9 war ich immer noch ein ständiges Problem. Wie viele von Ihnen arbeite ich an einem großen, schnellen 4 / Cocoapods- Projekt mit vielen Quelldateien und kompiliere jede Datei jedes Mal neu, was ärgerlich ist.

Bisher erhalte ich mit den folgenden Einstellungen die besten Ergebnisse. Ich schlage vor, Sie probieren es aus und sehen, wie es bei Ihnen funktioniert.

  • Schema -> Erstellen -> "Implizite Abhängigkeiten suchen" = TRUE
  • Build-Einstellungen -> Link-Time-Optimierung = Inkrementell
  • Build-Einstellungen -> Optimierungsstufe (Debug) = Keine [-OO]
  • Build-Einstellungen -> Optimierungsstufe (Release) = Schnellste, Kleinste [-Os]
  • Build-Einstellungen -> Freigabe vorkompilierter Header erhöhen = JA
  • Build-Einstellungen -> Inkrementelle Destillation aktivieren = JA

Benutzerdefinierte benutzerdefinierte Build-Einstellungen hinzugefügt,

  • Build-Einstellungen -> HEADERMAP_USERS_VFS = YES

Hinweis: Ich habe nicht die benutzerdefinierte Einstellung für die Optimierung des gesamten Moduls.

anders
quelle
3

Ich habe mit meinem Code einige Dinge bezüglich des Präfix-Headers geändert, die dieses Problem anscheinend behoben haben. Ich weiß nicht, wer den Trick tatsächlich gemacht hat, aber ich werde sie alle in der Hoffnung teilen, dass es jemand anderem da draußen hilft. Wenn Sie keinen Präfix-Header festgelegt haben, ist dies vermutlich nicht das Problem (oder das Problem ist vielfältig).

  1. Entfernen Sie alle Importe aus dem Präfix-Header, bei denen es sich um Dateien aus dem Verzeichnis der erstellten Produkte handelt, damit Sie die Build-Einstellung für dieses Verzeichnis ("Vorkompilierter Header verwendet Dateien aus dem Build-Verzeichnis") in "Nein" ändern können. Stellen Sie sicher, dass es nicht auch indirekt über andere Importe importiert wird.
  2. Entfernen Sie alle Importe aus dem Präfix-Header, die Clang-Module verwenden (Bibliotheken oder Frameworks, deren Header-Verzeichnis eine module.modulemap-Datei enthält, damit Sie Code wie schreiben können @import MyModule). (Für mich waren dies und Schritt 1 ein und dasselbe.)
  3. Setzen Sie die Build-Einstellung für die Freigabe von Präfix-Headern auf "Ja". (Ich denke nicht, dass dies notwendig ist, und es sollte keine Auswirkungen auf mein eigenes Projekt haben. Ich sage dies nur, weil ich es geändert habe, weil ich bereit war, alles zu versuchen. :))
  4. Beenden Sie Xcode und löschen Sie Ihr DerivedData / ModuleCache-Verzeichnis (konfiguriert, wenn ich mich richtig erinnere, unter ~ / Library / Developer).

Wenn dies immer noch nicht funktioniert, können Sie versuchen, weitere Importe aus Ihrem Präfix-Header zu entfernen. Es könnte etwas auslösen ...

Christopher Rogers
quelle
3

Sieht so aus, als würden sie laut https://forums.developer.apple.com/thread/62737 aktiv daran arbeiten, aber eine Problemumgehung ist hinzuzufügen

HEADERMAP_USES_VFS = YES

unter den Build-Einstellungen Ihres Ziels (Projekt -> Ziel -> Build-Einstellungen -> Benutzerdefiniert).

Diese Lösung hat heute jedes Mal für mich funktioniert, nachdem im letzten Monat keine andere Lösung konsequent funktioniert hat.

BEARBEITEN: Manchmal wird immer noch alles neu kompiliert, obwohl es mit dieser definierten Einstellung viel seltener zu tun scheint.

Josh
quelle
Ich habe diesen Wert ebenfalls hinzugefügt. Die Erstellungszeit ist schneller, aber der inkrementelle Build wurde nicht gelöst. Ich habe den Swift Compiler - Codegenerierung / Debugging auf schnelle, vollständige Moduloptimierung geändert ... ist das bisher beste Ergebnis
Antonio Junior
Ich kann nicht einmal User Defined finden)
David Seek
2
@ DavidSeek ist ganz unten in den Build-Einstellungen
Laser Hawk
1
Wenn Sie es nicht sehen, dann lesen Sie diese meandmark.com/blog/2011/03/xcode-4-accessing-build-settings
Laser Hawk
3

Überprüfen Sie Ihren gesamten Code in @IBDesignableDirektiven in meinem speziellen Xcode-Build-Projekt die ganze Zeit, da ich einige Ansichten in meinem Storyboard hatte, die diese @IBDesignableAttribute enthielten . Zweitens habe ich mein Storyboard auch in einem separaten Fenster (nicht auf einer Registerkarte) geöffnet, in dem mein Xcode für alle Simulatoren für immer erstellt wird.

ua24
quelle
Wir verwenden eine ganze Reihe von @IBDesignableRichtlinien ... gibt es etwas Besonderes, nach dem wir suchen sollten?
Stan
Ich denke, dass es möglich ist, sie zu finden, indem man sie einzeln ausschließt und das Ergebnis überprüft. In meinem Fall waren es nur zwei von @IBDesignable-Direktiven im gesamten Projekt.
ua24
2

Madhuri Mane hat diesbezüglich vollkommen recht. Um ein wenig mehr Klarheit zu schaffen, sind einige wichtige Punkte zu beachten:

Dies gilt NUR, wenn Sie implizite Abhängigkeiten von Bibliotheken / Frameworks haben, auf die sich Ihr Ziel stützt.

Wenn "Implizite Abhängigkeiten suchen" deaktiviert ist:

Ergebnis: Die Bibliothek wird vor dem Erstellen des Anwendungsziels nicht erstellt. Das Anwendungsziel kann nicht erstellt werden.

Fix: Um sicherzustellen, dass das zweite Szenario nicht auftritt, müssen Sie die erforderlichen Ziele zur Zielliste hinzufügen und korrekt sortieren.

Quelle und weiterführende Literatur zum Thema: https://pewpewthespells.com/blog/managing_xcode.html#scheme-action

Wenn sich Ihr gesamtes Projekt in einem Ziel befindet und das Kompilieren 4 Minuten dauert, können Sie nicht viel dagegen tun, außer es in Frameworks aufzuteilen, um die oben genannten Vorteile zu nutzen oder herauszufinden, wo die Kompilierung nachlässt. Wenn Sie so etwas wie PaintCode verwenden oder große Teile des UIKit-Codes schnell haben, ändern Sie ihn in Objective-c, der viel schneller kompiliert wird

pflous
quelle
2

Gehen Sie zu den Build-Einstellungen Ihres Ziels und setzen Sie Defines Moduleauf Yes.

Ich habe für ein paar Builds für mich gearbeitet, zu früh, um zu behaupten, dass dies eine endgültige Problemumgehung ist, aber zumindest versuchen wir es.

ldiqual
quelle
2

Apple hat gestern (14. November) eine neue Beta-Version von Xcode veröffentlicht.

Xcode 8.2 beta 2

Und dieses Problem wurde im Versionshinweis als behoben markiert.

System erstellen

• Xcode erstellt nicht das gesamte Ziel neu, wenn nur kleine Änderungen vorgenommen wurden. (28892475)

Es funktioniert für mich. Die Build-Geschwindigkeit kam wie gewohnt zurück. Jeder, der mit diesem Problem konfrontiert ist, sollte es versuchen!

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

Johnny
quelle
2

Bitte gehen Sie zur Build-Einstellung des Projekts und ändern Sie den "C Language Dialect".

Der "C Language Dialect" wird beim Aktualisieren der xcode-Version auf "GNU99" anstelle von "Compiler Default" gesetzt. Irgendwann hat Xcode die Einstellungen des Bibliotheksprojekts nicht korrekt migriert und wurde daher auf GNU99 gesetzt. Dies wird das Problem lösen

Samarth Kejriwal
quelle
1

Wenn Sie Änderungen an der Swift-Datei vorgenommen haben, starten Sie die Erstellung der App, gehen Sie zur letzten Registerkarte und klicken Sie auf das Erstellungsprotokoll. Während der Phase "Abhängigkeiten prüfen" beenden Sie die Erstellung und führen Sie sie erneut aus. Beim zweiten Durchlauf sollten nur die von Ihnen geänderten Dateien erstellt werden. Wenn es richtig gemacht wurde, habe ich festgestellt, dass es jedes Mal funktioniert. Es müssen keine Änderungen an den Projekteinstellungen vorgenommen werden.

Dies scheint ein Fehler in Xcode zu sein.

Geben Sie hier die Bildbeschreibung ein

Wenn Sie sehen, dass die App einen vollständigen Build ausführt, stoppen Sie den Build und versuchen Sie diesen Trick erneut.

Wenn Sie keine Änderungen am Code vorgenommen haben, können Sie CMD + STRG + R ausführen, ohne die App zu erstellen, die den Debugger anfügt. Erstellt keine App, kann aber unnötige Zeit sparen.

Vlad
quelle
Dies funktioniert wirklich, aber manchmal schlägt XCode mit Code 1 fehl und Sie müssen einen sauberen Build erstellen. Es ist ein Albtraum
Antonio Junior
Es gibt andere Szenarien, in denen Xcode immer vollständig erstellt wird. Ich habe festgestellt, dass beim Ändern der im Bridging-Header enthaltenen .h-Datei alle Swift-Dateien neu erstellt werden. Möglicherweise gibt es andere Szenarien, die nicht mit dem Xcode-Fehler zusammenhängen.
Vlad
Es gibt Szenarien, in denen die einzige Änderung darin besteht, eine Funktion umzubenennen oder eine neue Eigenschaft zu einer vorhandenen Klasse / Struktur hinzuzufügen, die zu einer vollständigen Neuerstellung führt.
Antonio Junior
Beziehen Sie sich auf diese Frage / Antwort, dieser Thread ist ein Duplikat davon: Haben Sie eine Lösung, die besser funktioniert: stackoverflow.com/questions/39456223/…
Vlad
1

Das Problem von meiner Seite wurde behoben, indem das Kontrollkästchen auf die Lösung "Implizite Abhängigkeiten suchen" angewendet wurde.

ABER denken Sie daran, wenn Sie Cocoapods verwenden, diese Einstellungen auch auf Ihr Pod-Projekt anzuwenden, indem Sie es auswählen

Produkt -> Schema -> Pods- "yourProjectName"

gelten auch in:

Produkt -> Schema -> "IhrProjektname"

Es hilft mir, also hoffe ich, dass dieser Hinweis jemand anderem hilft.

Vielen Dank

Mazen Sa.
quelle
1

Versuchen Sie Folgendes: 1. Navigieren Sie zu Projekt. 2. Klicken Sie auf Build Settings. 3. Überprüfen Sie, ob OptimizationLevel zum Debuggen auf None festgelegt ist. 4. Klicken Sie auf Benutzerdefinierte Einstellung hinzufügen. 5. Setzen Sie SWIFT_WHOLE_MODULE_OPTIMIZATION auf YES.

Geben Sie hier die Bildbeschreibung ein

Naloiko Eugene
quelle
nichts zu arbeiten kompiliere es noch, wenn ich einen einzelnen Brief schreibe.
Chandni
-2

Um die Kompilierungszeit von xcode zu verkürzen, kann IRAMDISK (Virtual Memory Disk) verwendet werden. Sehr nützliche und effektive Mittel, um die Kompilierungszeit zu verkürzen.

Kann auch verwendet werden, um häufig verwendete Anwendungen zu beschleunigen.

Informationen zum Herunterladen und Verwenden finden Sie unter folgendem Link: http://iramdisk.findmysoft.com/mac/

Mahvish
quelle
Dies beschleunigt die Kompilierung nicht, wenn Sie bereits eine SSD-Festplatte haben.
Jano