wake-up-neo.com

Wie verwende ich Cocoapods in einem eingebetteten Framework?

Ich verwende ein eingebettetes Framework für meine benutzerdefinierten Ansichten in einem neuen Projekt, um die neuen @IBDesignable-Funktionen in Xcode 6 zu nutzen, und möchte diese Ansichten mit Facebooks Pop animieren. Ich habe Pop mit Cocoapods zum Projekt hinzugefügt, aber das eingebettete Framework hat keinen Zugriff auf diese Dateien ('POP/pop.h' file not found).

Ich habe versucht, die mit Cocoapods zusammenhängenden Build-Phasen vom App-Ziel auf das benutzerdefinierte Framework-Ziel zu kopieren, aber sie funktionieren nicht wie sie sind. Was macht funktioniert, ist das direkte Kopieren des Pop-Ordners in das eingebettete Framework, aber dann sagt mir Xcode, dass ich alle spitzen Klammern ändern muss <POP/pop.h> zu Anführungszeichen "POP/pop.h". Ich gehe davon aus, dass es einen besseren Weg gibt, und ich mache mir nichts daraus.

36
richrad

Angenommen, Sie verwenden in Ihrem Podfile das link_with 'MyCustomFramework', wobei 'MyCustomFramework' der Name Ihres eingebetteten Frameworks ist und pod install. Wählen Sie Ihre Projektdatei (blau oben rechts) und gehen Sie zu "Build Settings". Suchen Sie dann 'Nicht modulare Includes in Framework-Modulen zulassen' und setzen Sie es für beide Projektdateien (blau) auf YES ) und das Custom Framework-Ziel (z. B. MyCustomFramework - orangefarbenes "Lunchbox-Fall" -Symbol).

Setting build settings for non-modular includes

Dann können Sie Kakaofrüchte in Ihre Hauptdatei MyCustomFramework.h aufnehmen. Including CocoaPods in CustomFramework

Dann importiere einfach '@import MyCustomFramework;' in Ihrem Anwendungsziel, und Sie erhalten den Rest der CocoaPods zu Ihrer Verfügung. (Bsp. Zugriff von ObjectiveSugar auf "jeden"). Importing CustomFramework into AppDelegate

Ob Sie dies tun sollten oder nicht, ist ein separates Problem, aber dies ermöglicht es Ihrem benutzerdefinierten Framework, die CocoaPods-Bibliotheken in sich selbst einzubeziehen, wodurch das Anwendungsziel nur Ihr benutzerdefiniertes Framework einbeziehen kann und auch alle CocoaPods erhält.

Sorry für die vielen Bilder, aber ich bin gerne visuell.

51
Anthony Persaud

Ich vermute, Sie ändern das Framework, um Pop zu verwenden. In diesem Fall müssen Sie auch den Pfad der Pop-Header zu den Suchheaderpfaden der Framework-Build-Einstellungen hinzufügen.

Wenn Sie jedoch das Framework ändern, können Sie auch ein podspec erstellen und CocoaPods alles erledigen lassen (und eine Pull-Anfrage an den Ersteller senden?).


Was die Kopfgeldfrage betrifft.

Ein Framework sollte niemals andere Bibliotheken einbetten. Wenn Sie zum Beispiel AFNetworking in Ihrer Bibliothek verwenden möchten:

  • Geben Sie an, dass AFNetworking in Ihren eigenen Anweisungen zur Framework-Installation erforderlich ist.
  • Wenn Sie Binärdateien verteilen, erstellen Sie diese nur lokal anhand der AFNetworking-Header. Benutzer müssen beim Verknüpfen ihrer App ihr eigenes AFNetworking bereitstellen.
  • Wenn Sie Quellcode mit Ihrem Framework verteilen (wenn Benutzer ihn selbst erstellen müssen), müssen Sie in Ihren Installationsschritten den Pfad für die AFNetworking-Header in Ihren Framework-Suchpfaden für Build-Einstellungen festlegen und ihn auf allgemeine Pfade wie POD_ROOT, etc.

Dann funktioniert es, aber Sie haben komplexe Installationsanweisungen. Benutzer müssen ggf. manuell Ressourcen hinzufügen. Es ist schwierig, die von Benutzern hinzugefügte AFNetworking-Version zu steuern, und die meisten werden Ihr Framework niemals aktualisieren, da dies zu einem Absturz des Setups führen kann. Alles gute Gründe, um CocoaPods durch die Erstellung einer Podspec zu unterstützen (Sie können das Framework-/statische Bibliotheksprojekt beibehalten, wenn Sie dies wirklich möchten).

3
Rivera