2017-12-05 4 views
0

Ich habe ein sehr einfaches Framework-Projekt, MyFramework, das erfolgreich erstellt. Das Framework definiert eine einzelne globale Funktion, myFunction. Das Framework definiert auch zwei globale Variablen: MyFrameworkVersionNumber und MyFrameworkVersionString (Diese zwei Variablen wurden von Xcode für mich erstellt)Warum kann ich mein benutzerdefiniertes Framework nicht einbetten?

Ich habe eine sehr einfache Anwendung Projekt, MyApplication. Ich füge das Framework dem Anwendungsprojekt hinzu, indem ich das Framework-Paket (das MyFramework.framework in DerivedData, das beim Erstellen des Frameworks erzeugt wurde) per Drag-and-Drop auf den Xcode Navigator und dann im Bereich Embedded Binaries des Projekts auf das Framework setze Tab.

Wenn ich Code zu MyApplication hinzufüge, der auf die Variable MyFrameworkVersionNumber verweist, kann ich MyApplication erfolgreich erstellen und ausführen.

Wenn ich Code zu MyApplication hinzufüge, der auf die Funktion myFunction verweist, kann ich MyApplication nicht erstellen.


Erste Aktualisierung


erinnerte ich mich plötzlich, dass Karthago tut genau das, was ich zu tun versuchen. Also habe ich Karthago benutzt, um MyFramework und Voila zu bauen! - Ich kann den Carthage-Build des Frameworks in das Anwendungsprojekt ziehen/ablegen und erfolgreich verwenden. Jetzt ist meine Anfrage geworden: Was weiß Karthago, dass ich nicht weiß?

Antwort

0

Oh um Himmels Willen! Es stellte sich heraus, dass es so einfach war. MyFramework wurde für ein generisches iOS-Gerät (arm64-Architektur) erstellt. MyApplication wurde für einen Simulator (x86_64-Architektur) erstellt. Sobald ich diese beiden zusammengebracht hatte, war alles in Ordnung. Der Grund dafür, dass die Carthage-Builds so gut funktionierten, ist, dass sie eine universelle Binärdatei erzeugen (d. H. Eine, die beide Architekturen enthält).

Ich verstehe immer noch nicht, warum die globale Variable MyFrameworkVersionNumber unabhängig von der Architektur zugegriffen werden konnte. Aber ich bin in Ordnung, wenn ich dieses kleine Geheimnis als etwas Geheimnisvolles ausspreche, das sich in der Güte der Zeit zeigen wird (vielleicht etwas, dass es in einem Header ist, der für beide Architekturen gleich aufgebaut ist).

Verwandte Themen