2013-02-27 16 views
13

Ich mache ein statisches iOS-Framework. Ich möchte Code von Drittanbietern verwenden, verwenden Sie AFNetworking als ein Beispiel in meinem Framework. AFNetworking ist beliebt. Ich kann jetzt die Namespace-Kollisionen spüren. Was ist die beste Vorgehensweise hier? Soweit ich verstehe habe ich 3 Optionen:Erstellen eines iOS-Frameworks: einschließlich Bibliotheken von Drittanbietern und Code

1) Build AFNetworking in mein Framework, die Header zu exportieren. Dadurch können Clients die Version AFNetworking in meiner Bibliothek verwenden, sie können jedoch keine anderen Frameworks verwenden, die auch AFNetworking verknüpfen. Sie verlassen sich auf Updates für AFNetworking, wenn sie darauf aufbauen.

2) Code gegen die AFNetworking Header, aber machen die dritten Parteien gehören AFNetworking in ihren Projekten. Dies fügt einen zusätzlichen Schritt für Framework-Konsumenten hinzu, sie müssen AFNetworking Quelle hinzufügen. In Zukunft könnte es Versionsinkompatibilitäten geben, aber zumindest wenn ein anderes Framework AFNetworking verwendet, können sie das gleichzeitig verwenden.

3) Namespace AFNetworking umbenennen und die Header privat halten. Auf diese Weise vermeide ich Namespace-Kollisionen in irgendeiner Weise, außer dass es dann wirklich schwierig wird, meine Kopie von AFNetworking zu aktualisieren. Die endgültige Binärdatei wird etwas größer, aber alle Interoperabilitätsprobleme werden gelöst. Das ist viel mehr Arbeit für mich.

Habe ich noch andere Optionen? Was sind die besten Praktiken?

+0

Ich sehe nicht, warum Sie Namespace-Kollisionen haben würden (es sei denn, Sie setzen Ihre Klassen mit "AF" voran). Verwenden Sie die neueste stabile Version von AFNetworking, aber lassen Sie sie von Benutzern verwenden. Wenn die von Ihnen verwendete API verfügbar ist, wird sich dies wahrscheinlich nicht ändern. –

+1

Haben Sie Cocoapoden ausgecheckt? Sie können anderen Pods eine Abhängigkeit hinzufügen. – mkral

+0

@ H2CO3 Wenn die kompilierten "AFNetworking" -Objekte in meinem Bibliotheksbinär enthalten sind und der Benutzer den Code selbst hinzufügt oder ein anderes Framework verwendet, wird es zu Namespace-Kollisionen in objective-c kommen, wenn der Linker versucht, die endgültige Anwendung binär zu machen. – jackslash

Antwort

Verwandte Themen