Ich habe ein vollständig in Swift geschriebenes Framework und es ist in einer App enthalten, die eine Mischung aus Objective-C und Swift verwendet, d. h.
%Vor% Wenn Swift 3 @objc inference
für das Framework-Ziel ON
ist, dann wird alles kompiliert und läuft gut. Wenn Swift 3 @objc inference
auf OFF
gestellt wird, kompiliert das Framework selbst, aber die Datei, in der es enthalten ist, spuckt eine Reihe von Fehlern aus:
Unknown type name 'NSArray'
oder Unknown type name 'NSError'
Die Importe in der Objective-C-Datei, in der ich versuche, dieses Framework zu verwenden, sehen im Wesentlichen so aus (d. h. Foundation wird importiert, bevor versucht wird, das schnelle Framework zu importieren):
%Vor%Wenn ich die Header-Datei öffne, die Xcode generiert, gibt es einen Abschnitt ungefähr 150 Zeilen unten, der so aussieht:
%Vor%Und wenn ich es manuell ändere, wird es kompiliert und ausgeführt.
%Vor%Offensichtlich ist das keine wirkliche Lösung, da es jedes Mal überschrieben wird, wenn Xcode diesen Header neu generiert, aber ich kann nicht verstehen, warum das Ausschalten von @objc-Inferenz dazu führt, dass der Import verschwindet. Ich habe bestimmte Methoden manuell als @objc markiert, alle Klassen in der Framework-Unterklasse NSObject und jede Datei importiert Foundation.
Ich dachte, das könnte ein Bug sein, aber das passiert sowohl mit Xcode 9.2 als auch mit 9.3, und natürlich können Leute @objc-Inferenz abschalten, da es jetzt eine empfohlene Einstellung ist. Aber ich bin wirklich ratlos.
Das klingt so, als ob Sie @import Foundation;
in Ihrem ObjC vor:
ObjC Dateien sollten @import Foundation;
selbst sein. Dies wird oft aus Performancegründen auch in den vorkompilierten Header (.pch) eingefügt, aber jeder .m
sollte immer noch alles importieren, was er benötigt, einschließlich Foundation.
Normalerweise empfehle ich das folgende Layout für .m
files: