Ich erreichte dies durch ein bisschen wie ein Workaround.
Wenn eine statische Bibliothek/ein Framework in ein anderes Framework/eine statische Bibliothek kompiliert wird, sind ihre Symbole immer noch verfügbar (überprüfen Sie durch nm <binary> | grep <symbol>
). Das bedeutet, dass Sie nur Ihren App-Code benötigen, um über diese Symbole Bescheid zu wissen - d. H. Einschließlich des Headers für Klasse C in Framework A.
In Ihren Headern in Framework A müssen Sie den Header der Klasse C einfügen. Wenn Sie das Framework kompilieren, müssen Sie "ClassC.h"
verwenden, aber wenn das Framework verwendet wird, benötigen Sie <FrameworkName/ClassC.h>
, da dies der Speicherort in dem Framework ist, das in der App enthalten ist. Verwenden Sie dazu ein Makro, das in einer Run-Script-Phase entfernt wird.
im Rahmen So wird ein Soll-Build-Phasen, stellen Sie sicher, dass Ihre Header für die Klasse C ist in der ‚Öffentlichkeit‘ Abschnitt Ihrer Kopie Header Phase, dann eine ‚Run Script‘ Phase hinzufügen und fügen Sie den folgenden:
TARGET_MACRO="TARGET_FRAMEWORK"
cd -P "$BUILT_PRODUCTS_DIR/$WRAPPER_NAME/Headers/"
perl -0pi -e "s/\#if ${TARGET_MACRO}.*?\#else\r?\n?(.*?)\r?\n?\#endif/\1/sg" *.h
ändern `TARGET_FRAMEWORK“ zu sein, was auch immer, oder es verlassen.
in Framework Ein Einstellungen bauen, unter Präprozessormakros, fügen TARGET_FRAMEWORK=1
für alle Konfigurationen bauen.
Dann in Ihrem Framework Ein Header, die enthalten Klasse C, verwenden:
#if TARGET_FRAMEWORK
#import "ClassC.h"
#else
#import <FrameworkA/ClassC.h>
#endif
Erstellen Sie eine Kopfzeile für den Import von B und C, dann importieren Sie es in A? – antonio081014
Ich kann die Kopfzeile Geldstrafe importieren, es macht es öffentlich in A, das mich Probleme verursacht. – Nick