LD: Duplikates Symbol _objc_retainedObject auf iOS 4.3, aber nicht auf iOS 5.0
-
28-10-2019 - |
Frage
Einige Hintergrund - ich habe ein benutzerdefiniertes Framework mit Diney's Guide bei erstellt http://db-in.com/blog/2011/07/universal-framework-iphone-ios-2-0/
Es wurde sowohl für ARMV6 / ARMV7 gebaut, ein ARC-basiertes Rahmen, zusammengestellt mit einem Depolyment-Ziel von 4,3.
Wenn ich das resultierende Framework in ein 5.0-Projekt einfügt, funktioniert es großartig, aber wenn ich es in ein 4.3-Projekt einfügt (ARC oder Nicht-Bogen, spielt keine Rolle), bekomme ich das folgende, was ich nicht wirklich verstehen kann ...
Ich habe auch versucht, Libarclite hinzuzufügen. A manuell, aber es hat nichts geändert.
LD: Duplikates Symbol _objc_retainedObject in /Users/freak4pc/project/myframework.framework/myframework und /developer/platforms/iphoneos.platform/developer/usr/liB/arc/libarclite.iphoneos.A(ArcLit.o) für Architekturen adveloter/Develophone.Anos.A(bildung /Platforms/iphoneos.platform/developer/usr/bin/clang fehlgeschlagen mit dem Ausgangscode 1 fehlgeschlagen
Würde sich jede Hilfe dazu freuen.
Vielen Dank
Shai
Lösung
Ich kämpfe mit dem gleichen Problem. Die Problemumgehung ist so festgelegt, dass das Bereitstellungsziel Ihres Frameworks auf iOS5 festgelegt ist (prüfen Sie, ob dies jedoch keine anderen Probleme aufweist).
Dann Sie muss Verwenden Sie ARC im Master -Projekt, wenn sich Libarclite an sonst fehlt. Meine Lösung besteht darin, zwei Frameworks zu liefern, je nachdem, ob sie ARC verwenden oder nicht.
Hier sind zwei Links zu Apples Dev -Forum mit ein bisschen mehr Informationen:https://devforums.apple.com/message/53934#539344
https://devforums.apple.com/message/588316#588316
Update: Es gibt einen besseren Weg. Erstellen Sie einfach Ihre statische Bibliothek mit iOS5 -Mindestziel und add /developer/platforms/iphoneos.platform/developer/usr/lib/arc/libarclite_iphoneos.a (und /developer/usr/libr/arc/libarclite_iphoneator.a), wenn Sie Ihre Projekt ist nicht Verwenden von ARC und benötigt iOS4-Support.
UPDATE 2: Verwenden Sie eigentlich einfach das Linker flag -fobjc -arc; Dies verknüpft Libarclite mit der Bibliothek, wenn sie noch nicht da ist. Beste Lösung.
Andere Tipps
Wow das war eine harte Fahrt, aber ich habe es endlich gelöst!
Was die endgültige Idee auslöste, war @Stepete's Kommentar, es ist eine Art komplexe Situation, also werde ich versuchen, sie für alle zu erklären, die möglicherweise auch dieses Problem überschritten haben.
- Durch das Kompilieren eines Lichtbogen-fähigen Frameworks auf iOS 4.3 wird Libarclite automatisch an die "Bridge" 4.3-Bogen mit 5.0 Bogen angebracht. Als dieses Framework in ein 4,3 -Projekt importiert wurde, wurde Arclite tatsächlich zweimal verknüpft - einmal für das Framework (mit 4.3) und einmal für das Projekt selbst -, was den Fehler "doppelter Symbol" verursachte, dh das Framework muss kompiliert werden 5.0, und das Projekt kann 4.3 sein. Aber dann ;
- Mein Framework verwendet @Mattts AFNetworking, um HTTP -Anforderungen und JSON -Parsen verschiedener APIs durchzuführen. AFNetworking überprüft automatisch beim Kompilieren, wenn Ihr Ziel iOS5 ist, und wenn dies der Fall ist, wird es verwendet
NSJSONSerialization
, sonst würde es auf jede importierte JSON -Bibliothek zurückfallen, z. B.JSONKit
. - Beim Kompilieren meines AFNetworking-fähigen Frameworks für iOS5 (um Problem Nr. 1 zu vermeiden), wird automatisch angeschlossen
NSJSONSerialization
, was eine Ausnahme zu 4.3 Projekten verursacht, was bedeutet, dass Sie manuell nach den Kompilieranweisungen suchen und die Anrufe entfernen müssenNSJSONSerialization
Vor dem Kompilieren würde es automatisch auf die 4,3-kompatible Bibliothek zurückgreifen (in meinem FallJSONKit
). Diese Kompilierungsbedingung findet sich unter afhttpclient.m und afjsonRequestoperation.m (z. B.#if __IPHONE_OS_VERSION_MIN_REQUIRED > __IPHONE_4_3 || __MAC_OS_X_VERSION_MIN_REQUIRED > __MAC_10_6
) - Nachdem ich diese Bedingungen entfernt hatte, habe ich meinen Rahmen für iOS5 erfolgreich mit JSONKIT anstelle von NSJsonSonialization zusammengestellt und konnte sie erfolgreich in meinem iOS4.3 -Projekt verwenden.
Ich hoffe, das würde jedem anderen helfen, der ein paar Tage wie ich damit kämpfen könnte :)
Shai.