Öffentliche und private Umbrella Header in Objective C

9

Ich habe diese Codebasis, die Objective C und Swift mix ist. An manchen Orten verwendet Swift Objective und umgekehrt. Ich muss jetzt ein Framework erstellen, das auf dieser Codebasis basiert, aber ich möchte nicht alle objektiven c-Dateien in meinen Schirmkopf aufnehmen. Hier ist mein Problem:

In meinem Framework muss ich noch in der Lage sein, swift von objc zu verwenden und umgekehrt; aber nicht alle Objc-Dateien, die intern von Swift-Klassen verwendet werden. Bridging-Header ist in Frameworks nicht erlaubt, daher müssen alle Header, die von swift benötigt werden, in den Regenschirm-Header gehen.

Ich frage mich, ob es möglich ist, alle objc-Header, die der interne swift-Code benötigt, in eine Datei zu bekommen, die mein privater Regenschirm-Header ist und alle Dateien, die ich enthüllen muss, in den öffentlichen Regenschirm-Header gehen würde. p>

Irgendwelche Vorschläge?

    
puru020 17.11.2015, 02:40
quelle

1 Antwort

0

Ich verwende erfolgreich explizit deklarierte Module als Lösung für dieses Problem für die Objective-C - & gt; Schneller Fall. Ich habe die Moduldeklaration nicht in eine separate private Modulzuordnung getrennt, sondern sowohl das Framework-Modul als auch ein explizites Modul innerhalb derselben Modulmap aufgrund der in einem der Kommentare zu der Frage aufgeworfenen Bedenken erklärt (ich war mir nicht sicher, ob oder wie) Es ist möglich, den Header zu verwenden, der von der privaten Modulkarte innerhalb desselben Frameworks erzeugt wird).

Hier ist ein Auszug der Modulmap, die ich für meine MPFoundation.framework definiert habe, die ein explizites Modul MPManuscriptCompiler_Protected enthält, das den Header "MPManuscriptCompiler+Protected.h" importiert, der nicht in der Schirmüberschrift für das Framework enthalten ist:

%Vor%

Ich verwende dann dieses explizite Modul MPManuscriptCompiler_Protected in meiner Swift-Unterklasse, das im selben Framework wie folgt vorhanden ist:

%Vor%

Meine Lösung ist eigentlich nur ein Workaround: Damit dies funktioniert, kann "MPManuscriptCompiler+Protected.h" im Framework als Header für private oder Projektebenen markiert werden, sodass es nicht in der Schirmüberschrift angezeigt wird und nicht verfügbar ist Header basiert importiert mit seinem Dateinamen. Also, das funktioniert um diesen Header in den Schirm-Header zu integrieren.

Allerdings wird das so erstellte Modul im Framework öffentlich zugänglich gemacht und steht für Augen zur Verfügung, die es nicht sehen sollten. Ich habe das nicht näher untersucht, da dies praktisch das Problem gut löst (es gibt noch keine Probleme, bei denen ich versehentlich den geschützten Header importiert hätte, wo er nicht importiert werden sollte).

    
mz2 27.04.2016 00:14
quelle

Tags und Links