Ich habe Xcode 8.0 installiert und Swift 2.2 auf 3.0 konvertiert (dieser Vorgang hat auch viel Zeit in Anspruch genommen, ich habe meinen Mac die ganze Nacht laufen gelassen). Ich habe kein großes Projekt (ca. 20 Dateien). Ich benutze auch Pods
. Die Indexierung der vorherigen Xcode-Version (<8.0) hat sich schnell bewährt, aber nach dem Upgrade hängt die Fortschrittsleiste an einer Position (ich warte bereits auf eine Stunde).
Dinge, die ich ausprobiert habe, haben mir nicht geholfen:
DerivedData
-Ordner wurde gesäubert und der Xcode neu gestartetPods
-Verzeichnis mit <project>.xcworkspace
gelöscht und dann erneut installiertEs ist wirklich nicht cool, solche Softwareversionen zu erstellen, wenn Entwickler Stunden damit verbringen müssen, solche lächerlichen Probleme zu lösen. Es ist sehr enttäuschend ... Irgendwelche Ideen, wie man das beheben kann?
Ich löste das Problem, indem ich alle Dateien kommentierte und Kommentare nacheinander entfernte. Ich habe festgestellt, dass das Problem immer noch in der Arraydeklaration wie hier beschrieben ist.
Ich hatte einen solchen Code und das Projekt indizierte nicht:
class {
var first: String!
var second: String!
var third: String!
var fourth: String!
var fifth: String!
func abc() -> [String] {
var array = [first, second, third, fourth, fifth]
}
}
Ich habe es geändert und die Indizierung funktionierte:
class {
var first: String!
var second: String!
var third: String!
var fourth: String!
var fifth: String!
func abc() -> [String] {
var array = [first]
array.append(second)
array.append(third)
array.append(fourth)
array.append(fifth)
}
}
Gehen Sie zu den Projekteinstellungen und dann zu Editor> Build-Einstellungen hinzufügen> Benutzerdefinierte Einstellungen hinzufügen. Fügen Sie Folgendes hinzu:
Swift_WHOLE_MODULE_OPTIMIZATION = YES
Durch das Hinzufügen dieses Kennzeichens fielen unsere sauberen Kompilierzeiten für ein 40KLOC Swift-Projekt auf wundersame Weise von 7 Minuten auf 65 Sekunden. Außerdem kann bestätigt werden, dass 2 Freunde ähnliche Verbesserungen bei Unternehmensprojekten gesehen haben.
Ich kann nur annehmen, dass dies eine Art Fehler in Xcode 8.0 ist
Ich hatte das gleiche Problem erst seit dem Upgrade auf Swift 3/XCode 8 und scheint auf große Array-Literale zurückzuführen zu sein.
Ich konnte das Problem beheben, indem ich den Variablen, die dem Arrayliteral zugewiesen wurden, Typanmerkungen hinzufügte, z.
let array: Array<String> = ["1", "2", "3", "4", "5", "6", "7", "8"]
anstatt
let array = ["1", "2", "3", "4", "5", "6", "7", "8"]
Ich hatte ein ähnliches Problem und folgte dieser Anleitung zum Debuggen: http://irace.me/Swift-profiling Mein Problem war, dass ich in einigen Strings keinen Koaleszenzoperator hatte:
let name = "\(someString ?? "")"
und vier Methoden führten zu einer zusätzlichen Bauzeit von 2 Minuten.
Ich hatte das gleiche Problem und löste es, indem ich mühsam meinen Code Zeile für Zeile durchging. Es stellt sich heraus, dass Swift 3 die Interpolation von Strings bevorzugt, anstatt das Symbol + zu verwenden, d. H.
let url = "http://yahoo.com" + "someWebPage" + "whereItsInteresting"
Wenn Sie den obigen Code verwendet haben, ersetzen Sie ihn durch;
let url = "http://yahoo.com\(someWebPage)\(whereItsInteresting)"
Und Ihre Bauzeit wird sofort wieder normal sein.
für diejenigen, die herausfinden wollen, wo der Compiler "erwischt" wird
Zu Other Swift Flags
hinzufügen -Xfrontend -warn-long-function-bodies=50
vollständige Antwort prüfen hier
Ich hatte eine Funktion, die mehr als eine Minute zum Kompilieren brauchte, und nach einiger Untersuchung stellte ich fest, dass der Übeltäter nach einem gespeicherten Datum gesucht hatte, ob genug Zeit vergangen war:
let myStoredDate: Double = // Double representing a time in the past
// if at least one week (60 * 60 * 24 * 7 seconds) has passed since myStoredDate
if Date().timeIntervalSince1970 - myStoredDate > (60 * 60 * 24 * 7){
// do stuff
}
Die Kompilierung dieses Codes würde über 10 Sekunden dauern. Wenn dieser Code mehrmals mit verschiedenen Nummern wiederholt wird, dauert die Kompilierung viel zu lange. Ich konnte dies durch Vorberechnung des Intervalls beheben
let myStoredDate = // Double representing a time in the past
//it is important to explicitly specify that the variable is a Double
let interval: Double = 60 * 60 * 24 * 7
if Date().timeIntervalSince1970 - myStoredDate > interval{
// do stuff
}
Nachdem ich dies bei den ca. 10-maligen Überprüfungen gemacht hatte, wurde die Kompilierzeit von über einer Minute auf wenige Millisekunden reduziert.
Es ist sehr wahrscheinlich, dass dieses Problem auch bei der Kombination von Typinferenz und Mathematik an anderer Stelle auftritt. Stellen Sie also sicher, dass an keiner anderen Stelle Ihres Codes so etwas passiert.
Ich glaube nicht, dass dies mit OPs Thema zusammenhängt, aber XCode 8 ist für mich kürzlich zum Stillstand gekommen. Ich fand schließlich, dass es mein Fehler war (und ich erinnere mich, dass ich es versehentlich getan habe) - ich habe XCode.app als Referenz für das Framework hinzugefügt. Dies führte im Wesentlichen dazu, dass XCode den gesamten Ordner XCode.app durchsucht und indiziert. Sobald ich den Fehler sah und das Framework entfernte, kam es wieder gut :)
Mein Problem war das Wörterbuch. Ich hatte ein großes Wörterbuch.
let values = ["address":addressTextField.text,"city":cityTextField.text,"zipCode":zipCodeTextField.text,"state":stateTextField.text,"pet":answerLabel.text,"rentStart":rentStartTextField.text,"rentEnd":rentEndTextField.text,"rent":rentTextField.text,"phone":phoneTextField.text,"email":emailTextField.text,"status":leaseStatusTextField.text,"bedrooms":bedroomTextField.text,"parking":parkingLabel.text,"furnish":furnishLabel.text,"utilities":utilitiesTextField.text,"laundry":laundryTextField.text,"paymentCycle":paymentCycleTextField.text,"note":noteTextView.text]
Ich habe es aufgeschlüsselt zu:
var values = ["address":addressTextField.text]
values["city"] = cityTextField.text
values["zipCode"] = zipCodeTextField.text
values["state"] = stateTextField.text
values["pet"] = answerLabel.text
values["rentStart"] = rentStartTextField.text
values["rentEnd"] = rentEndTextField.text
values["rent"] = rentTextField.text
values["phone"] = phoneTextField.text
values["email"] = emailTextField.text
values["status"] = leaseStatusTextField.text
values["bedrooms"] = bedroomTextField.text
values["parking"] = parkingLabel.text
values["furnish"] = furnishLabel.text
values["utilities"] = utilitiesTextField.text
values["laundry"] = laundryTextField.text
values["paymentCycle"] = paymentCycleTextField.text
values["note"] = noteTextView.text
values["owner"] = userID
Ich hatte das gleiche Indizierungsproblem. Es trat jedoch nur auf, wenn ich auf einem Gerät ausgeführt/debuggen und dann zu einem anderen Gerät in der oberen linken Werkzeugleiste (Ziel> iPhone) gewechselt bin.
Keine der oben genannten Lösungen hat für mich funktioniert.
Meine Lösung: Ich habe meine Arbeitskopie entfernt und eine neue aus meinem 'Origin' geklont.
(In den Ordnern xcuserdata/shared/session usw. befinden sich einige "magische" Dateien, die dieses Problem verursacht haben können.)
Es handelt sich um einen Xcode-Fehler (Xcode 8.2.1). Dieser Fehler tritt auf, wenn Sie ein großes Wörterbuchliteral oder ein verschachteltes Wörterbuchliteral haben. Sie müssen Ihr Wörterbuch in kleinere Teile aufteilen und mit der Anfügemethode hinzufügen, bis Apple den Fehler behoben hat.
Dies funktioniert für mich in Xcode 8.2.1 und Swift 3, wenn "Indexing" feststeckt:
Ich habe immer zwei Projekte offen, ein Dummy-Projekt und das Projekt, an dem ich arbeite. Ich habe auch ein iPad Air-Gerät angeschlossen, auf dem ich meine Projekte ausführen kann. Wenn mein Projekt beim "Indexieren" hängen bleibt, wechsle ich zu meinem Dummy-Projekt und führe mein Projekt auf meinem angeschlossenen iPad Air-Gerät aus. Dann stoppe ich das Projekt Und wechsle wieder zu dem Projekt, an dem ich gerade arbeite, und die "Indizierung" ist magisch abgeschlossen. Dies sollte auch nur mit dem Simulator funktionieren, wenn kein physikalisches Gerät angeschlossen ist.
Nachdem Sie die Einstellung hinzugefügt haben,
Swift_WHOLE_MODULE_OPTIMIZATION = YES
unser Projekt erstellt kompilierte Zeiten von 1200 bis 180 für 650 Swift-Dateien. Dies führt jedoch zu einem Fehler beim Kompilieren. Für jede Änderung sind 180s zum Kompilieren erforderlich, wenn das Erhöhen der Kompilierung nur 60s erfordert
Sichern Sie Ihr Projekt, löschen Sie das letzte Update-Projekt nach dem Sichern und starten Sie Xcode dann einfach neu :-)