SourceKitService verbraucht CPU und bringt Xcode zum Stillstand

108

Dies ist KEIN Beta-Problem. Ich bin auf Xcode 6.0.1, Produktionsversion. Das Problem, das ich habe, ist, dass Xcode beim Erstellen oder Ausführen des Codes, an dem ich arbeite, für längere Zeit nicht mehr reagiert und der SourceKitService mehr als 400% der CPU verbraucht (laut Aktivitätsmonitor). Dieses Problem ist seit einigen Tagen neu, obwohl ich seltsamerweise seit der offiziellen Veröffentlichung am 17. September auf Xcode 6.0 war. Ich habe auf 6.0.1 aktualisiert und gehofft, dass es eine Lösung für dieses Problem enthält.

Irgendeine Idee, was das Problem sein könnte?

Zeeple
quelle
Haben Sie den Speicherverbrauch überprüft? Ich hatte dieses Problem eine Weile nicht mehr, aber es war wirklich schlecht in den Betas, in denen es den gesamten RAM und dann HCF verbrauchen würde. Dies war im Allgemeinen auf längere Rechenzeilen zurückzuführen, insbesondere bei Indizes. Sie müssen sich teilen und erobern, um den beleidigenden (aber legalen) Code zu finden. Wenn Sie die Linie gefunden haben, versuchen Sie bitte, sie auf dem Spielplatz zu reproduzieren, und senden Sie einen Fehlerbericht.
Chris Conover
Siehe auch diese zugegebenermaßen datierten Beiträge: stackoverflow.com/questions/24873219/… und stackoverflow.com/questions/24873219/…
Chris Conover
Es gibt immer noch einige bekannte Fehler, wie Sie in mehreren Threads in den Apple-Entwicklerforen lesen können. Xcode 6.1 Beta 3 behebt den hohen CPU-Verbrauch, führt jedoch andere ein. Sehr enttäuschend.
Klaas
1
Ich habe ein ähnliches Problem. Ich hatte das Problem mit Xcode 7 und jetzt mit 8. Das einzige, was sich ändert, ist der Code, der in Ihren Xcode eingeht. Ich vermute, dass eine Neuindizierung oder neuer Code die Hauptursache ist. Geschieht dies normalerweise, wenn Sie Code aus Ihrem Upstream abrufen?
Honig

Antworten:

150

Ich bin heute Nachmittag auf dieses Problem mit Xcode 6.1.1 gestoßen (keine Beta, offizielle veröffentlichte Version). Ich hatte auf dem Spielplatz Code ausgeführt und vermutete, dass dies die Ursache war. Die CPU war zu fast 100% gebunden, und Xcode konnte keine Builds abschließen.

Also hier ist was ich getan habe:

1. Öffnen Sie "Activity Monitor", in dem SourceKitService als Haupt-CPU-Schwein angezeigt wird.

2. Doppelklicken Sie in "Activity Monitor" auf den SourceKitService und dann auf "Open Files and Ports" (Dateien und Ports öffnen), um anzuzeigen, dass er für Dateien im Verzeichnis / Users / myname / Library / Developer / Xcode / DerivedData / ModuleCache / funktioniert für einen bestimmten Ordner.

3. Löschen Sie den angegebenen Ordner (über eine Befehlszeile mit rm -rf). Der Cache wird basierend auf neu generiert. Kann ich den Inhalt des Xcode Derived-Datenordners sicher löschen?.

4. Verwenden Sie Activity Monitor erneut, und beenden Sie SourceKitServer. Ich sah das allzu vertraute Schild in Xcode, das besagte, dass SourceKitService abgestürzt war (deshalb kam mir SourceKitService bekannt vor!).

5. Wiederholen Sie Schritt 3.

Der Mac ist wieder friedlich. Es gingen keine Daten verloren und Xcode musste nicht einmal neu gestartet werden (was ich erfolglos versucht hatte). Fazit ist, dass ModuleCache SourceKitService in eine Schleife zu bekommen scheint und das Löschen des Ordners es zu beheben scheint. Hoffe das funktioniert auch bei dir.

Bootnote:

Die Ursache für das SourceKitService-Problem war übrigens, dass ich in meiner Swift-Klasse eine zu lange Array-Deklaration hatte. Ich hatte über 200 Einträge in einem Array. Reduzierte es auf 30 und der Fehler ging weg. Das Problem ist möglicherweise auf einen Stapelüberlauf im Apple-Code zurückzuführen (Wortspiel beabsichtigt).

LNI
quelle
Danke für deine Antwort. Sie sollten Ihre Antwort jedoch bearbeiten, anstatt sie selbst zu kommentieren.
Axalo
3
Ich hatte ein ähnliches Problem mit einer langen Array-Deklaration in Swift, die sich bei ihrer Initialisierung auf Typinferenz stützte. Ich fand, dass durch explizite Annotation des Typs das Problem behoben wurde.
Jay492355
2
Gleiches Problem. großes Array mit Wörterbüchern. Ich habe einfach alle Daten in eine .PLIST-Datei geschrieben und gelesen.
Bruno Paulino
64
Stört es noch jemanden, dass wir 2016 kein Array mit 200 Elementen verarbeiten können? Ich habe in den 80ern längere Arrays in BASIC auf einem Atari 600 verwendet.
Eddie Sullivan
2
Ich hatte jetzt das gleiche Problem und wie @ jay492355 erwähnt, müssen Sie Ihr Array explizit eingeben.
Guy Kogus
23

Ich habe das Problem gesehen, weil ich ein Array mit ungefähr 60 Elementen deklariert habe, das so aussah:

let byteMap = [

["ECG" : (0,12)],
["PPG" : (12,3)],
["ECG" : (15,12)],
["PPG" : (27,3)],
["ECG" : (30,12)]

Indem Sie den Typ explizit wie folgt kommentieren:

let byteMap : [String: (Int, Int)] = [

["ECG" : (0,12)],
["PPG" : (12,3)],
["ECG" : (15,12)],
["PPG" : (27,3)],
["ECG" : (30,12)],

Ich konnte es zum Stillstand bringen. Ich denke, es muss etwas mit Swifts Typinferenz und Typprüfung zu tun haben, die dazu führt, dass es in eine Schleife gerät, wenn es auf ein längeres Array stößt.

Dies war in Xcode 6.2. Ich habe auch den ModuleCache wie oben beschrieben gelöscht und jetzt ist alles gut.

jay492355
quelle
2
Ja, dieses Problem ist berühmt spin.atomicobject.com/2016/04/26/swift-long-compile-time
onmyway133
1
Ähnliches Problem für mich auf Xcode 8.1. Ich habe ein Array von NSConstraintLayout-Objekten. Funktionierte gut mit 4. Funktioniert gut mit 6. Nicht so gut mit 7 und überhaupt nicht mit 8. Ich habe zwei Arrays mit jeweils 4 Objekten erstellt und es funktioniert gut.
Dan Loughney
@ onmyway133 Ich frage mich, warum es nicht die ganze Zeit passiert und es nur gelegentlich passiert
Honey
Denken Sie, wenn Sie so etwas wie return ["a", "b", "c", "d", "e", "f"]eine Funktion hätten, die zurückgibt [String], würde es immer noch Probleme mit der Typinferenz geben?
Shim
10

Dieses Problem trat 10 Mal auf, 8 Mal, wenn ich ein tatsächliches Gerät angeschlossen und den Simulator nicht durchlaufen habe.

Ich bin mir nicht sicher, ob meine Lösung gut ist, aber ich glaube, das Problem war auf den Wechsel zwischen Simulator und einem tatsächlichen Gerät zurückzuführen. Es mag seltsam klingen, aber es war, als würde es Interferenzen zwischen Cache-Dateien verursachen .

Was hat mein Problem gelöst:

  • Clean Build Folder: (auf Xcode)Alt + Shift + Command + K
  • Inhalt und Einstellungen zurücksetzen: (im Simulator) Command + Shift + K.
  • Wartete etwas länger als normal und überlastete Xcode mit konstanten Klicks

Bevor Sie also versuchen, auf einem neuen Gerät ausgeführt zu werden, löschen Sie einfach den Cache.

BEARBEITEN

Ich hatte gerade das Problem ohne Geräteverbindung. Ich habe Xcode einfach beendet und wieder geöffnet und das Problem war behoben. Nicht sicher , meine Vermutung ist es könnte einige Neuindexierung Problem sein , nachdem Sie holen / Pull Merge neuen Code.

Honig
quelle
Ich wünschte wirklich, das würde funktionieren, weil ich verzweifelt bin. Leider gerät es kurz nach dem Codieren wieder außer Kontrolle.
Herr T
Ich bin mir nicht sicher, aber manchmal hat nur das Wechseln der Zweige, das Ziehen vom Upstream, mein Problem gelöst. Mein Punkt ist, dass ich nicht tue, was die akzeptierte Antwort vorschlägt, und dennoch ist mein Problem irgendwie gelöst, das ich noch nicht geknackt habe: /
Honey
4

Ich habe ein anderes Problem behoben, das dazu führte, dass SourceKitService bis zu 13 GB Arbeitsspeicher verwendete ...

Ich hatte String (Formatzeile mit vielen Argumenten:

return String(format: "%d,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f", samples.count,sum1.x,sum1.y,sum1.z,sum1.rx,sum1.ry,sum1.rz,sum2.x,sum2.y,sum2.z,sum2.rx,sum2.ry,sum2.rz,sum3.x,sum3.y,sum3.z,sum3.rx,sum3.ry,sum3.rz)

wenn es durch dieses ersetzt wurde, funktionierte es einwandfrei (kein Speicheraufbau und normaler CPU-Verbrauch)

    var output: String = ""

    output += String(format: "%d,", samples.count)
    output += String(format: "%.3f,%.3f,%.3f,", sum1.x, sum1.y, sum1.z)
    output += String(format: "%.3f,%.3f,%.3f,", sum1.rx, sum1.ry, sum1.rz)
    output += String(format: "%.3f,%.3f,%.3f,", sum2.x, sum2.y, sum2.z)
    output += String(format: "%.3f,%.3f,%.3f,", sum2.rx, sum2.ry, sum2.rz)
    output += String(format: "%.3f,%.3f,%.3f,", sum3.x, sum3.y, sum3.z)
    output += String(format: "%.3f,%.3f,%.3f", sum3.rx, sum3.ry, sum3.rz)

    return output
Matej Ukmar
quelle
4
Wie haben Sie herausgefunden, dass dieser Code das Problem ist?
KK
3

Ich bin mit Xcode 9 auf dieses Problem gestoßen und habe verschiedene Lösungen untersucht. Für mich schien das Deaktivieren der Quellcodeverwaltung den Trick zu tun.

Xcode -> Preferences -> Source Control -> uncheck "Enable Source Control"

Wenn dies nicht funktioniert, würde ich empfehlen, den Befehl renice am Terminal zu verwenden . Mehr dazu hier

Deaktivieren der Quellcodeverwaltung

Andere Schritte, die ich versucht habe, aber nicht geholfen habe:

  1. Schließen Sie Xcode -> Abgeleitete Daten löschen
  2. Fahrradmaschine
  3. "sauberes" Projekt
mhit0
quelle
2

Bei mir hat es funktioniert, die abgeleiteten Daten zu löschen. Wählen Sie 'Produkt' aus dem Menü und halten Sie die Alt-Taste gedrückt und wählen Sie 'Clean Build Folder'. Kurztaste: Alt + Umschalt + Befehl + K.

Roland Keesom
quelle
2
  1. Beenden Sie Xcode
  2. Im Terminal ausführen:

rm -rf ~/Library/Developer/Xcode/DerivedData/ModuleCache/*


Beachten Sie den Unterschied zwischen der von LNI akzeptierten Antwort und dieser:

  1. Es ist immer besser, nicht abzustürzen als abzustürzen. Besonders wenn es um Xcode Prozesse / Komponenten geht.
  2. Ich bin kein Apple-Entwickler, aber das teilweise Löschen des Caches kann seine Integrität beeinträchtigen. Ich habe nach dem Bereinigen des gesamten Caches keine nennenswerten Verzögerungen festgestellt.
Dmitry Isaev
quelle
2

Ich verbringe 4 Stunden damit, Probleme in einer langen Zusammenstellung meines Projekts herauszufinden. Der erste Versuch dauert 42 Minuten, um zu kompilieren.

/Users/myname/Library/Developer/Xcode/DerivedData/ModuleCache/Nach dem Neustart lösche ich den gesamten Cache von @LNI SourceKitServiceund wende einige Änderungen für den Code an:

1 zu

    var initDictionary:[String:AnyObject] = [
                    "details" : "",
                    "duration" : serviceDuration,
                    "name" : serviceName,
                    "price" : servicePrice,
                    "typeId" : typeID,
                    "typeName" : typeName,
                    "url" : "",
                    "serviceId" : serviceID,
                    "imageName" : ""
                ]

Von

    var initDictionary= [
                    "details" : "",
                    "duration" : serviceDuration,
                    "name" : serviceName,
                    "price" : servicePrice,
                    "typeId" : typeID,
                    "typeName" : typeName,
                    "url" : "",
                    "serviceId" : serviceID,
                    "imageName: "" ]

2) Zu

            if let elem = obj.property,
                let elem2 = obj.prop2,
                etc
                 {
                 // do stuf here
            }

Von

           let value1 = obj.property ?? defaultValue

3)

Zu

           let serviceImages = images.filter { $0.serviceId == service.id }
           let sorted = serviceImages.sort { $0.sort > $1.sort }

Von

            let serviceImages = images.filter { $0.serviceId == service.id }. sort { $0.sort > $1.sort }

Als Ergebnis Kompilierungszeit - 3 min, nicht so schnell, aber besser für 42 min.

Als Ergebnis SourceKitServicenehmen Sie vor - ~ 5,2 GB Speicher und nach ~ 0,37 GB Speicher

Geben Sie hier die Bildbeschreibung ein

gbk
quelle
2

Ich hatte das gleiche Problem mit SourceKitService.

I löste. NIEMALS SUBVIEWS MIT FOR LOOP HINZUFÜGEN.

Um ein Problem zu erkennen, verwende ich: https://github.com/RobertGummesson/BuildTimeAnalyzer-for-Xcode

Zhanserik
quelle
Wie hast du gelöst? Ich habe meine Unteransichten mit for-Schleife hinzugefügt und jetzt behebt das Reinigen des Cache @Zhanserik
10donovanr
1
@ 10donovanr NIEMALS SUBVIEWS MIT FOR LOOP HINZUFÜGEN. Versuchen Sie danach, den App-Cache mit CMD + SHITF + K zu bereinigen
Zhanserik
2

Erstellen Sie kein schnelles Wörterbuch ohne Angabe von Datentypen oder mit [String: Any]

Wenn wir den Typ 'Any' verwenden, stößt der Compiler möglicherweise auf eine Endlosschleife, um den Datentyp zu überprüfen.

Es wird kein Kompilierungsfehler erstellt, und unser Mac friert beim Kompilieren schneller Quelldateien ein, wenn er viel Speicher für die Aufgaben "swift" und "SourceKitService" erhält.

ak_ninan
quelle
2

Ich habe mich einem solchen Problem gestellt. Der Source Kit-Service verwendete 10 GB. Der schnelle Prozess im Aktivitätsmonitor erreicht eine Auslastung von über 6 GB. Ich habe folgenden Code verwendet:

var details: [String: Any] = ["1": 1, "2": 2, "3": 3, "4": 4, "5": 5, "6": 6, "7": 7, "8": 8, "9": 9, "10": 10, "11": 11, "12": 12, "13": 13, "14": 14, "15": 15, "16": 16]

Ich habe den Code wie folgt geändert, um dieses Problem zu beheben:

var details: [String: Any] = [:]

Details ["1"] = 1

Details ["2"] = 2

Details ["3"] = 3

Details ["4"] = 4

Details ["5"] = 5

Details ["6"] = 6

Details ["7"] = 7

Details ["8"] = 8

Details ["9"] = 9

Details ["10"] = 10

Details ["11"] = 11

Details ["12"] = 12

Details ["13"] = 13

Details ["14"] = 14

Details ["15"] = 15

Details ["16"] = 16

Jignesh Patel
quelle
Mann ... wer hätte das gedacht ... ich hatte genau einen ähnlichen Code und SourceKitService saugte das Leben aus der CPU. Das Ändern des Codes hat ihn einfach verschwinden lassen.
AnBisw
2

Das Problem tritt weiterhin in XCode 10.0 auf. Sie können das Problem beheben, indem Sie "Quellcodeverwaltungsänderungen anzeigen" in den Quellcodeverwaltungsoptionen deaktivieren.

Geben Sie hier die Bildbeschreibung ein

DennyDog
quelle
Cool, aber weniger als nötig, wenn der Xcode zum Stillstand kommt.
Shayne
1

Konfrontiert das gleiche Problem auf Xcode 7.2 (7C68)

Die Lösung bestand darin, eine Methode eines Protokolls zu implementieren, die meine Klasse in der Definition hatte.

Dmitry Kurilo
quelle
1

Dies ist immer noch ein Problem in xcode Version 7.3.1 (7D1014). Die Ursache für mich war, wie LNI betonte, ein zu langes Array, eigentlich nicht so lang. Ich habe mein Problem behoben, indem ich das Array in verschiedene Arrays wie folgt aufgeteilt habe:

let firstLevel = [
            [1, 0, 1, 0, 1],
            [0, 0, 0, 0, 0],
            [1, 0, 1, 0, 1],
            [0, 0, 0, 0, 0],
            [1, 0, 1, 0, 1],
            [0, 0, 0, 0, 0]
        ]
        let secondLevel = [
            [0, 0, 0, 0, 0],
            [0, 1, 0, 1, 0],
            [0, 0, 0, 0, 0],
            [0, 1, 0, 1, 0],
            [0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0]
        ]
        let thirdLevel =     [
            [0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0],
            [0, 0, 1, 0, 0],
            [0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0]
        ]
        let map = [firstLevel, secondLevel, thirdLevel]
Tharak
quelle
1

Ich hatte das gleiche Problem mit XCode 8.2.1 (8C1002) und dem folgenden Code:

import UIKit
import AVFoundation
import Photos
import CoreMotion
import Foundation


class TestViewController: UIViewController
{
    let movieFileOutput = AVCaptureMovieFileOutput()


var anz_total_frames = 0, anz_total_miss = 0

@IBOutlet weak var tfStatistics: UITextView!


func showVideoStatistics()
{
    let statisticText:String =             "frames: \(self.anz_total_frames)" + String.newLine +

        "frames/s: \(self.anz_total_frames / self.movieFileOutput.recordedDuration.seconds)" + String.newLine +

        "miss: " + formatText4FramesPercent(self.anz_total_miss) + String.newLine +
    "nicht erkannt: " + formatText4FramesPercent(self.anz_total_miss) + String.newLine +
        "nicht erkannt: " + formatText4FramesPercent(self.anz_total_miss) + String.newLine +
        "nicht erkannt: " + formatText4FramesPercent(self.anz_total_miss) + String.newLine +
        "nicht erkannt: " + formatText4FramesPercent(self.anz_total_miss) + String.newLine +
        "nicht erkannt: " + formatText4FramesPercent(self.anz_total_miss) + String.newLine +
        "nicht erkannt: " + formatText4FramesPercent(self.anz_total_miss) + String.newLine +
        "nicht erkannt: " + formatText4FramesPercent(self.anz_total_miss) + String.newLine +
        "nicht erkannt: " + formatText4FramesPercent(self.anz_total_miss) + String.newLine +
        "nicht erkannt: " + formatText4FramesPercent(self.anz_total_miss) + String.newLine +
        "nicht erkannt: " + formatText4FramesPercent(self.anz_total_miss) + String.newLine


    self.tfStatistics.text = statisticText
}

func formatText4FramesPercent(_ anz:Int) -> String
    {
        let perc = Double(anz)*100.0/Double(anz_total_frames)
        return String(perc.format(".1") + "%")
    }
}

und diese Erweiterungen:

extension String {
    var localized: String {
        return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "")
    }

    static var newLine: String {
        return "\r\n"
    }
}

extension Int {
    func format(_ f: String) -> String {
        return String(format: "%\(f)d", self)
    }
}

extension Double {
    func format(_ f: String) -> String {
        return String(format: "%\(f)f", self)
    }
}

Ich habe es gelöst, indem ich diese Zeile in TestViewController kommentiert habe:

        "frames/s: \(self.anz_total_frames / self.movieFileOutput.recordedDuration.seconds)" + String.newLine +

Ich habe mehr als eine Stunde gebraucht, um es zu finden. Ich hoffe, ich kann jemand anderem Zeit sparen. Ich habe einen Fehlerbericht bei Apple mit der Nummer 30103533 eingereicht

Werner Kratochwil
quelle
1

Ich hatte das gleiche Problem, nachdem ich das Projekt auf Swift 3 migriert hatte. Finden Sie heraus, dass die Lösung aufgrund von Wörterbüchern und Arrays, die ohne Datentyp erstellt wurden, einige Zeit in Anspruch nahm.

Vijay Pal
quelle
1

Dieses Verhalten trat in meinem Projekt auf, als ich versehentlich eine Klasse deklarierte, die von sich selbst geerbt hatte. Xcode 8.2.1 mit Swift 3.

zath
quelle
1

Ich hatte auch dieses Problem, in meinem Fall habe ich ein großes Array wie dieses deklariert:

var myArray: [(String, Bool?)]?
myArray = [("someString", someBool),
("someString", someBool),
("someString", someBool),
("someString", someBool),
("someString", someBool)
.
.
("someString", someBool)]

Ich habe das Problem gelöst, indem ich die Elemente 1 pro Zeile anstelle aller gleichzeitig hinzugefügt habe:

var myArray = [(String, Bool?)]()
myArray.append(("someString", someBool))
myArray.append(("someString", someBool))
myArray.append(("someString", someBool))
myArray.append(("someString", someBool))
myArray.append(("someString", someBool))
.
.
.

Dies hat das Problem behoben.

Chuy47
quelle
1

Für Objective-C-Projekte:

Ich hatte das gleiche Problem und es gibt keinen Swift-Code in unserem Projekt, also war es nicht die Typinferenzprüfung.

Ich habe hier jede andere Lösung ausprobiert und nichts hat funktioniert - was ich ENDLICH behoben habe, war, den Computer im Wiederherstellungsmodus neu zu starten und die Festplattenreparatur auszuführen. Ich kann endlich wieder in Frieden arbeiten!

Ich vermute, dass es aufgrund einiger defekter Symlinks passiert ist, die wahrscheinlich aufeinander zeigen und den Dienst in einer Endlosschleife herumlaufen lassen.

Accatyyc
quelle
1

Ich habe ein ähnliches Problem mit Xcode 8.2.1 - mit einem Abschnitt von mehr als 1.000 Codezeilen, die über / * * / auskommentiert wurden. Das Auskommentieren des Abschnitts verursachte das Problem, und das Entfernen des auskommentierten Codes behebt es.

KGBlacksmith
quelle
1

Ich bin auf etwas Ähnliches gestoßen, das mehrere kombiniert? Operatoren, um einen Standardwert für optionale Zeichenfolgenwerte anzugeben.

Ich habe mit dem folgenden Debug-Code experimentiert, als der Lüfter meines vertrauenswürdigen MacBook Pro Mitte 2010 anfing, hart zu laufen. SourceKitService saugte jeden CPU-Zyklus auf, den es bekommen konnte. Das Kommentieren und Kommentieren der beleidigenden Zeile machte sehr deutlich, woran SourceKitService erstickte. Es sieht aus wie mit mehr als einem? Der Bediener, der einen Standardwert angibt, ist ein Problem auf einem alten Computer. Die Arbeit ist einfach nicht zu tun. Teilen Sie es in mehrere Zuweisungen auf, wodurch hässlicher Debug-Code noch hässlicher wird.

placeMark ist eine Instanz von CLPlacemark. Die hier verwendeten Eigenschaften geben optionale Zeichenfolgen zurück.

Ich habe Xcode Version 8.3.2 (8E2002) unter OS 10.12.4 (16E195) verwendet.

// one term is not an issue
let debugString1 = (placeMark.locality ?? "")

// two terms pushes SourceKitService CPU use to 107% for about 60 seconds then settles to 0%
let debugString1 = (placeMark.locality ?? "")  + ", " +  (placeMark.administrativeArea ?? "") 

// three terms pushes SourceKitService CPU use to 187% indefinitely 
let debugString1 = (placeMark.locality ?? "")  + ", " +  (placeMark.administrativeArea ?? "")  + (placeMark.postalCode ?? "")

// ugly but it's safe to use
var debugString1 = placeMark.locality ?? ""
debugString1 = debugString1 + ", " +  (placeMark.administrativeArea ?? "")
debugString1 = debugString1 + " " + (placeMark.postalCode ?? "")
Positron
quelle
Ich glaube, dies ist ein Problem mit der Verkettung von Zeichenfolgen und nicht? Es lohnt sich "\() \()" stattdessen , es mit (String-Interpolation) zu versuchen
Brooks DuBois
1

Das Konvertieren langer Arrays in Funktionen scheint das Problem für mich zu lösen:

var color: [UIColor] {
    return [
        UIColor(...),
        UIColor(...),
        ...
    ]
}

zu:

func color() -> [UIColor] {
    return [
        UIColor(...),
        UIColor(...),
        ...
    ]
}
nefarianblack
quelle
1

im Terminal ausführen:

killall Xcode
rm -rf ~/Library/Developer/Xcode/DerivedData/ModuleCache
open /Applications/Xcode.app

Mit diesem Alias ​​können Sie auch einen Terminalbefehl erstellen:

echo alias xcodeFix='killall Xcode;rm -rf ~/Library/Developer/Xcode/DerivedData/ModuleCache;open /Applications/Xcode.app' >> ~/.profile
source ~/.profile

und dann einfach rennen

xcodeFix
Dmitry Kozlov
quelle
0

https://www.logcg.com/de/archives/2209.html

SourceKitService übernahm die Inferenzarbeit von Swift.

private lazy var emojiFace = ["?", "?", "?", "?"]

zum expliziten Typ ändern

private lazy var emojiFace:[String] = ["?", "?", "?", "?"]

Die CPU-Auslastung von SourceKitService fällt sofort ab。

lbsweek
quelle
0

Ist mir unter XCode 11.4.1 passiert, als ich @dynamicMemberLookup-Indizes in einem SwiftUI @ ViewBuilder-Block aufgerufen habe.

Objectif
quelle
0

Ich hatte das gleiche Problem und es wurde durch einen Programmierfehler verursacht.

In meinem Fall implementierte ich die vergleichbaren und gleichwertigen Protokolle und die lhs.param und rhs.param stimmten nicht mit den Parametern der Klassen lhs und rhs überein.

rockdaswift
quelle