2014-10-19 2 views
6

Ich bin auf der Suche nach einer Möglichkeit, Frameworks, die Sub-Frameworks haben, die sich zur Laufzeit nicht stören. Die Abbildung unten beschreibt die Idee am besten.Nested Cocoa Touch-Frameworks

enter image description here

Angenommen, jede Version von JSON-Parser-Framework ist unvereinbar mit der anderen Seite.

Ich habe eine Menge Ansätze versucht, um das oben genannte zu erreichen, aber jedes Mal gescheitert. Die vielversprechendsten waren Umbrella-Frameworks, aber nicht nur, dass Apple ihre Verwendung abschwächt (es ist mir nicht klar, warum), sondern sie scheinen auch nicht wie erwartet zu funktionieren.

Was passiert, ist, wenn ich eine App mit einem eingebetteten Rahmen schaffen A die sich JSON-Parser Framework v1.0 eingebettet, die alle ganz gut zu funktionieren scheint. Aber sobald ich JSON-Parser Framework v3.0 zum App hinzufügen und verbinden die App dagegen, Rahmen A beginnt zu verwenden, um die JSON-Parser Framework v3.0 zur Laufzeit statt v1.0 die liegt in ihm. Und unter der Annahme, dass sie nicht miteinander kompatibel sind, kann dies Framework A brechen.

Das gleiche gilt für das Hinzufügen Framework B, aber welche Implementierung zur Laufzeit gewählt wird scheint zufällig zu sein.

Ist es möglich, ein Rahmen das hat eine eingebettete JSON-Parser Framework v1.0 zu erstellen und ist sicher in einem solchen Szenario zu benutzen? Ich finde es schwer zu glauben, dass es keinen Weg gibt, das zu erreichen, aber ich kann keinen Weg finden, es zum Laufen zu bringen und frage mich, ob es tatsächlich möglich ist :(

+0

auf Empfänger-Framework Ich habe 'Embedded Binaries' nicht nur in der Empfänger-App gefunden, wie haben Sie dieses Problem gelöst? Ich möchte 'app

Antwort

2

Sie geben nicht viele Details darüber, wie Sie Frameworks bauen, so ist dies nur ein Schuss im Dunkeln.

ich gehe davon aus, dass Sie in Ihre Einbettung Rahmen, entfernen Frameworks „Dynamic-Bibliothek installieren Name base“ Einstellung auf @rpath. Dann die @executable_path entsprechende Option eingebettet ist aus der "Runpath Suchpfad" -Einstellung (das ist die App, und das ist der Grund, warum es das "globale" Framework zuerst findet). Dies sollte Dinge wie erwartet funktionieren.

Anoth Der Ansatz, den Sie in Betracht ziehen könnten, ist die Bündelung der 3 Versionen des verwendeten Frameworks in einer single framework bundle.

Schließlich könnte man auch erwägen die Verknüpfung manuell (siehe this post, wo die _loadPluginAtLocation Methode definiert ist).

Hoffe, das hilft.

+0

Danke für Anregungen! Ich schaue mir das an, sobald ich Zeit habe. Auch wenn ich keine Lösung in Ihren Antworten finde, bereite ich ein Beispielprojekt vor, um zu demonstrieren, was ich zu erreichen versuche und wie ich vorankomme. –

+0

ein Beispielprojekt wäre großartig, um dies zu beheben ... aber ich hoffe, Sie können mit den Build-Einstellungen beheben ... – sergio