Ich verwende Xcode 8 und Swift 3.0. Was bedeutet diese Fehlermeldung?
ld: warning: Einige Objektdateien haben inkompatible Objective-C-Kategoriedefinitionen. Einige Kategorie-Metadaten können verloren gehen. Alle Dateien, die Objective-C-Kategorien enthalten, sollten mit demselben Compiler erstellt werden.
Ich hatte dieses Problem auch in einer UIColor
Erweiterung, meine App wurde komplett mit swift erstellt, außer für einige Frameworks, die Objective-c verwenden, so dass ich kein Problem damit habe var
als @nonobjc
zu deklarieren:
Aus der Apple-Dokumentation:
Das nonobjc-Attribut weist den Compiler an, die Deklaration in Objective-C-Code nicht verfügbar zu machen ...
Da dieser Code für Objective-C nicht verfügbar ist, verschwindet die Warnung.
In meinem Fall war der Grund die berechnete Typeigenschaft in einer Erweiterung:
%Vor% Nicht sicher, was der genaue Grund dafür ist, aber um die Warnung loszuwerden, musste ich die berechnete Typeigenschaft ( class var
) in eine Typmethode konvertieren ( class func
):
Diese Warnung wurde in meinem Projekt angezeigt, nachdem ich ein Framework hinzugefügt hatte, das Objective-C in meiner Anwendung verwendete und ansonsten Swift 3 vollständig verwendete.
Durch die Deklaration aller statischen Funktionen und statischen Variablen in allen Erweiterungen als @nonobjc
ist diese Warnung weggefallen.
Zum Beispiel
%Vor%oder
%Vor%Google Analytics Pod
In Build-Einstellungen - & gt; Andere Linker-Flags Wenn Sie das -ObjC auf -l "GoogleAnalytics" -Flag haben, wird diese Warnung angezeigt. Ich weiß nicht warum oder wie ich es lösen kann, aber es kann auch dein Problem sein.
Für mich war das Problem, dass ich ein Framework von Drittanbietern von einem Hersteller mit Xcode 7 in meiner mit Xcode 8 erstellten Swift 3-Anwendung verwendete. Da das Framework eine kompilierte Binärdatei war, bestand die einzige Option darin, nachzufragen Mein Anbieter für ein neues Framework, das mit der neuesten Version von Xcode erstellt wurde.
Anstatt jedes Mitglied einzeln als @nonobjc
zu markieren, können Sie stattdessen die gesamte Erweiterung als @nonobjc
:
Tags und Links objective-c ios xcode swift xcode8