Xcode 8 Objective-C-Kategorie Warnung

56

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.

    
jherg 23.09.2016, 16:58
quelle

8 Antworten

37

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:

%Vor%

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.

    
juanjo 25.11.2016 20:10
quelle
18

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 ):

%Vor%     
Hejazi 11.10.2016 10:37
quelle
8

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%     
Groot 02.02.2017 19:45
quelle
7

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.

    
Renato Ioshida 08.11.2016 18:44
quelle
4

In meinem Fall war es eine Klassenvariable.

%Vor%

Das Hinzufügen von @nonobjc hat geholfen.

    
Bogdan 06.02.2017 14:23
quelle
3

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.

    
JAL 14.10.2016 16:15
quelle
1

Ich konnte mein Problem lösen, als ich die class var in class func änderte:

Es gab:

%Vor%

Wurde zu:

%Vor%

Quelle: Ссылка

    
A.Kant 17.07.2017 14:17
quelle
0

Anstatt jedes Mitglied einzeln als @nonobjc zu markieren, können Sie stattdessen die gesamte Erweiterung als @nonobjc :

markieren %Vor%     
Adam Sharp 06.07.2017 14:45
quelle

Tags und Links