2016-07-15 2 views
0

Dieses Problem trat auf A SpriteKit Xcode ProjektMein Xcode 7.3 Compiler ist ständig brechen und verursacht extrem lange Erstellen und Übersetzen mal

Ich habe ein Problem mit Swift, wo einmal mein Projekt ein gewisses Maß an Komplexität erreicht, wo Ich habe Tonnen von Klassen und Methoden herum, meine Autovervollständigung bricht, so dass "Jump To Definition" aufhört zu arbeiten und meine IDE auf den Nutzen eines grundlegenden TextEditor/Notepad reduziert wird.

Die Farbe meines Codes wird komplett weiß, was meine Augen stark belastet, und dies scheint nur dann zu passieren, wenn ich große Codeblöcke entferne und hinzufüge, während ich meine CPU-Aktivität auf 75% steigern sehe auf allen CPU-Kernen.

Ich denke, das begann, als ich das Ziel iOS von 9.3 auf 8.0 wechselte. Ist das ein Problem mit dem Compiler, der versucht, die alte Swift-Syntax zu interpretieren?

Ich werde auch Fälle haben, in denen ich zwei Minuten auf geringfügige Änderungen warten, um zu kompilieren, nur für den Build fehlschlagen aufgrund "Linker-Befehl mit Exit-Code fehlgeschlagen", der durch zweimaliges Kompilieren behoben werden kann.

Hier ist meine Brille:

OS X 10.11.4

Core i7 Skylake 4.0GHz

16 GB DDR4 RAM

256GB SSD

Ich denke über Gebäude ein System, auf dem OS X mit Dual-Prozessoren läuft, was das Problem mildern könnte, da es mehr als 2 Minuten dauern kann, nur um Code zu kompilieren, der um 1 Zeile unterschiedlich ist .

+0

Haben Sie einen Fehlerbericht mit Apple-Datei? - Verwenden Sie die Toolchain? Dieses Verhalten ist mit Xcode 7.3 und einer heruntergeladenen Swift-Toolchain völlig normal. – matt

+0

Ich begann und schrieb Swift seit dem ersten Tag, finde sogar meinen Weg, eine App zu veröffentlichen, die mit Swift 1.0 Beta geschrieben wurde, bevor Apple es sogar erlaubt. Aber am Ende gab es auf wichtige Projekte zu verwenden. Obwohl es besser und besser wird und Apple es sich zum Ziel gemacht hat, es zu einem der Hauptspieler zu machen, ist es immer noch viel zu "neu" im Vergleich zu Objective-C. Ja, es hat viele Vorteile, aber insgesamt fühle ich mich nicht so, als wäre es die Mühe wert, da Apple die Syntax viel zu oft ändert und Dinge ständig bricht. Mit einem Quad-Core-iMac mit 24 GB RAM fühle ich immer noch, dass Xcode bei Objective-C langsam ist, ganz zu schweigen von Swift. –

Antwort

0

Willkommen bei Swift! Tolle Sprache, schreckliches Werkzeug.

Scherz beiseite, es gibt ein paar Probleme im Spiel hier. Zuallererst verschwindet Syntax-Hervorhebung, wenn SourceKit abstürzt. SourceKit ist die Bibliothek, die Swift on-the-fly analysiert, so dass Xcode Dinge wie Indexierung, Syntaxhervorhebung und Code-Vervollständigung durchführen kann. Es ist viel besser als früher (mit Swift 1.0 in Xcode war manchmal fast komisch), aber es ist noch lange nicht perfekt. Bis sich SourceKit verbessert, werden Sie keinen großen Unterschied sehen.

Wie für Ihre Build-Zeiten, lohnt es sich, etwas wie die Swift Build Time Analyzer zu versuchen, um zu sehen, welche Funktionen eine besonders lange Zeit zum Kompilieren benötigen. Ich habe die Kompilierzeit des Projekts, an dem ich arbeite, halbiert, indem ich alle faulen vars, die über Schließungen gesetzt wurden, entfernt habe. Eine kürzliche Compiler-Änderung machte die Art der Schlussfolgerung für diese Arten von Schließungen unglaublich langsam, so dass jeder ~ 6 Sekunden zum Kompilieren benötigte.

0

Okay, ich habe eine Lösung gefunden, die mein Problem gelöst hat.

Alle Emojis entfernen Von Variablennamen & .Swift Dateinamen

Im Gegensatz zu Apples offiziellen Swift 2.0 Lehrbuch, Verwenden Sie keine Art von Emoji ist für Dinge wie Variablennamen und Swift Dateinamen SOFERN Sie wissen, dass das Emoji, das Sie verwenden, ein sehr altes Emoji ist (aber selbst dann würde ich es nicht empfehlen).Nach dem Öffnen meines Projekts in AppCode hatte AppCode Unicode-Probleme mit Dateinamen wie: foobar.swift. Es war sehr fehlerhaft und es würde später Xcode beschädigen, wenn ich ein Projekt mit bereits existierenden Emojis in AppCode öffnen und speichern würde.

vermeiden So Emojis in Ihrem Code verwenden, wenn es für Streicher ist wie:

let someString = "⬛️" 
Verwandte Themen