webentwicklung-frage-antwort-db.com.de

Xcode 8 führt eine vollständige Projektwiederherstellung durch

Nachdem ich das Swift + ObjC-Projekt auf Xcode 8 (Swift 2.3) aktualisiert habe, stellte ich fest, dass Xcode in mindestens 50% der Fälle eine vollständige Neuerstellung des Projekts anstelle einer inkrementellen Erstellung durchführt.

Durch die vorgenommenen Änderungen werden einfache Druckanweisungen hinzugefügt. Es scheint keine Logik zu geben, wann ein vollständiger Neuaufbau durchgeführt wird.

Es erscheint in der Phase "Abhängigkeiten prüfen", in der es dies entscheidet. Auf Xcode 7 schien dies kein Problem zu sein.

Hat jemand dies angetroffen?

50
Vlad

Ich habe festgestellt, dass dies konsistent funktioniert. Es werden jedoch Swift Dateien kompiliert, wenn Sie einen Header im Bridging-Header ändern. Es wird auch vollständig kompiliert, wenn Sie Git-Zweige hin und her schalten.

Stellen Sie zunächst sicher, dass die Optimierungsstufe für das Debugging auf Keine gesetzt ist (keine vollständige Moduloptimierung) enter image description hereenter image description here

Dann laut https://forums.developer.Apple.com/thread/62737 Apple Staff (ddunbar):

Wir glauben, dass Einstellung:

HEADERMAP_USES_VFS = YES

in Ihrem Projekt (oder für alle Ihre Ziele) wahr zu sein, kann für viele Menschen eine effektive Umgehung sein. Es ist nicht garantiert, dass dies funktioniert (weshalb es nicht standardmäßig aktiviert ist), aber es sollte für die meisten Projekte funktionieren.

Dies sollte durch "Benutzerdefinierte Einstellung hinzufügen" unter den Build-Zieleinstellungen hinzugefügt werden.

enter image description here

.

enter image description here

33
Vlad

Ok, hier ist eine Antwort, warum es passiert, aber ich kenne die Lösung nicht. Wenn Sie das "Other Swift Flag" -Treiber-show-incremental-Xcode verwenden, wird das ausgegeben, was es aufgrund seiner Abhängigkeiten kompilieren muss.

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

Ich frage mich, ob dies ein Swift= 3 Problem ist, weil ich dieses Problem vor der Konvertierung nicht hatte. Ich habe ein kleines Beispielprojekt gemacht, in dem

FileA schließt eine Sache von FileB ein, schließt eine Sache von FileC ein

das Hinzufügen einer privaten Dateiänderung zu FileC, die nirgendwo verwendet wird, führt dazu, dass FileA, FileB und FileC aufgrund von Abhängigkeiten zur Kompilierung in die Warteschlange gestellt werden. Ich werde dieses Beispiel später in Xcode 7 testen, um zu sehen, was passiert.

Es sieht also so aus, als ob die Abhängigkeitsauflösung von Swift 3 nicht sehr gut funktioniert. Ich habe dies an 2 anderen Swift 3 Projekten bei der Arbeit getestet, und dasselbe Wenn Sie Änderungen an einer Datei vornehmen, wird jede Datei kompiliert. Erst wenn Sie mit Projekten mit etwa 15.000 Codezeilen beginnen, wird sie langsam. Deshalb spricht möglicherweise niemand viel darüber. Es sei denn, Sie Habe eine etwas mittelgroße Swift 3 App, du wirst wahrscheinlich nicht einmal bemerken, dass inkrementelle Komplikationen nicht richtig funktionieren. Ich aktualisiere, wenn ich mehr erfahre.

12
Andrew Carter

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

Xcode 8.2 beta 2

Und dieses Problem wurde in der Release-Information als behoben markiert.

System erstellen

• Xcode erstellt kein gesamtes Ziel neu, wenn nur kleine Änderungen vorgenommen wurden. (28892475)

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

https://developer.Apple.com/download/

10
Johnny

Das Deaktivieren der Option "Implizite Abhängigkeiten suchen" unter "Schema bearbeiten"> "Schema"> Registerkarte "Erstellen" hat für mich die Fehlerbehebung für Projektdateien behoben. "Kopieren Swift Standardbibliotheken" dauert immer noch ewig ..

8
Kurt J