Verwenden Sie zwei Versionen derselben Bibliothek

8

Ich arbeite in einem iOS-Projekt, das eine statische Bibliothek enthält, die von einer anderen Firma erstellt wurde. Die Bibliothek enthält eine alte Version von AFNeworking und ich habe keine Quelldateien.

Jetzt muss ich eine neuere (und weniger abgehört) Version von afneworking verwenden, aber ich kann nicht dieselbe Klasse zweimal in das Projekt aufnehmen (natürlich), weil alle "doppelten Symbole".

Ich verstehe, dass es unmöglich ist, die in der Bibliothek enthaltene Version zu ersetzen, aber wie kann ich eine andere Version der alten Version hinzufügen?

Es gibt eine (einfache) Möglichkeit, das gesamte Framework zu refactorisieren, bevor es in mein Projekt aufgenommen wird?

Danke

    
TheObjCGuy 18.12.2013, 16:42
quelle

3 Antworten

3

Sie müssen die statische Bibliothek neu packen, um die eingebetteten AFNetworking-Dateien zu entfernen.

Entpacken Sie die Bibliothek mit:

%Vor%

Und verpacken Sie es erneut, einschließlich aller Dateien außer den AFNetworking-Objektdateien:

%Vor%

Sie müssen dann Ihre ausführbare Datei mit der neuen statischen AFNWorking-Bibliothek verknüpfen und hoffen, dass es keine API-Änderungen gegeben hat, die den Code in libwhatever.a brechen. Wenn es dann gibt, bezweifle ich, dass es viel gibt, was Sie tun können.

    
trojanfoe 18.12.2013, 16:51
quelle
3

Ich fürchte, das ist nicht leicht zu machen. In sehr wenigen Umgebungen können Sie gleichzeitig mit zwei verschiedenen Versionen desselben Frameworks verlinken, und Xcode / iOS gehört nicht dazu.

Wie ich es sehe, haben Sie drei Möglichkeiten:

1) Verknüpfen Sie mit ihrer Bibliothek und verwenden Sie dieselbe Version von AFNetworking, die sie verwenden.

2) Verknüpfen Sie mit ihrer Bibliothek und laden Sie die neuere Version von AFNetworking manuell und ziehen Sie Symbole daraus. Sei gewarnt: Das wird schnell hässlich und zukünftige Betreuer werden sich fragen, was du rauchst.

3) Bringe sie dazu, ihre Bibliothek zu aktualisieren.

Nebenbei bemerkt, ich kenne die Umstände hier nicht, aber im Allgemeinen sollten sie Ihnen Quellen zur Verfügung stellen. Es ist eine sehr umgekehrte Praxis, nur eine statische (statische!) Bibliothek zur Verfügung zu stellen und keine Möglichkeit, zu wissen, was sie im Inneren macht. Sie müssen eine Softwarelizenzvereinbarung unterzeichnen und was nicht, um ihre Interessen zu schützen.

    
Michael Melanson 18.12.2013 16:56
quelle
2

Der beste und geeignetste Weg, dies zu tun, wäre, den Ersteller der statischen Bibliothek zu kontaktieren und sie dazu zu bringen, die Situation zu lösen. Sie können dies entweder durch Aktualisieren der integrierten Version von AFNetworking, durch Entfernen ihrer Abhängigkeit von AFNetworking oder durch Hinzufügen eines Präfixes für ihre eingebettete Kopie von AFNetworking beheben. Der letzte ist wahrscheinlich eine gute Idee, wenn eine Bibliothek eines Drittanbieters eine andere Bibliothek einbettet, weil es sonst unmöglich wäre, zwei Bibliotheken gleichzeitig zu verwenden, die beide dieselbe Drittanbieterbibliothek enthalten.

Sie könnten auch die Kopie von AFNetworking, die Sie selbst enthalten, umgestalten, um die Namen von Klassen mit einem Präfix zu versehen, obwohl dies unnötig sein sollte, da der Anbieter der statischen Bibliothek dies bereits selbst getan haben sollte.

Schließlich können Sie eine andere Bibliothek finden, die dieselbe Funktion wie Ihre aktuelle Bibliothek ausführt, aber AFNetworking nicht einbindet.

    
Gavin 18.12.2013 16:53
quelle

Tags und Links