Domanda


Alcuni background: ho creato un framework personalizzato utilizzando Diney's Guide su http://db-in.com/blog/2011/07/universal-framework-iphone-ios-2-0/

È costruito sia per ARMV6 / ARMV7, è un framework basato su ARC, compilato con un obiettivo di depolice di 4.3.

Quando metto il framework risultante in un progetto 5.0 funziona alla grande, ma quando lo metto in un progetto 4.3 (arco o non ARC, non importa), ottengo quanto non riesco a capire davvero ...

Ho anche provato ad aggiungere libarclite. A manualmente ma non ha cambiato nulla.

LD: Simbolo duplicato _objc_retenedObject in /users/freak4pc/project/myframework.framework/myframework e /developer/platforms/iphoneos.platform/developer/usr/lib/arc/libarchone_iphoneos.a(arclite.o) per architettura armv7 armv7 armv7 armv7 /Platforms/iphoneos.platform/developer/usr/bin/clang non riuscito con il codice di uscita 1

Apprezzerei qualsiasi aiuto in questo.
Grazie
Shai

È stato utile?

Soluzione

Sto lottando con lo stesso problema. La soluzione alternativa è quindi impostata su IOS5 l'obiettivo di distribuzione del tuo framework (controlla se ciò non fa altri problemi).

Allora lei dovere Usa ARC nel progetto principale se tiro per il targeting di iOS4, altrimenti libarclite mancherà. La mia soluzione sarà quella di fornire due framework, a seconda che usano l'arco o meno.

Ecco due link al forum Dev di Apple con un po 'più di informazioni:https://devforums.apple.com/message/539344#539344

https://devforums.apple.com/message/588316#588316

Aggiornamento: c'è un modo migliore. Basta costruire la tua libreria statica con target minimo iOS5 e aggiungere manualmente /developer/platforms/iphoneos.platform/developer/usr/lib/arc/libarclite_iphoneos.a (e /developer/usr/lib/arc/libarclite_iphonesimulator.a) Il progetto è non Usando l'ARC e ha bisogno di supportatura iOS4.

Aggiornamento 2: in realtà, basta utilizzare il flag linker -fobjc -arc; Ciò collegherà Libarclite con la biblioteca se non è già lì. Soluzione migliore.

Altri suggerimenti

Wow, è stata una corsa dura ma alla fine l'ho risolta!

Ciò che ha scatenato l'idea finale è stato il commento di @Steipete, è un po 'una situazione complessa, quindi cercherò di spiegarlo per chiunque abbia potuto attraversare anche questo problema.

  1. La compilazione di un framework abilitato per arco su iOS 4.3 collegherà automaticamente libarclite.SO a "Bridge" 4.3 ARC con 5.0 ARC. Quando questo framework è stato importato in un progetto 4.3, Arclite è stato effettivamente collegato due volte - una volta per il framework (che è 4.3) e una volta per il progetto stesso - che ha causato l'errore del "simbolo duplicato", il che significa che il framework deve essere compilato su 5.0 e il progetto può essere 4.3. Ma allora ;
  2. Il mio framework sta utilizzando AFNetWorking di @Mattt per eseguire richieste HTTP e analisi JSON di API diverse. AfnetWorking controlla automaticamente durante la compilazione se il tuo target è iOS5 e, se lo è, usa NSJSONSerialization, altrimenti tornerebbe a qualsiasi biblioteca JSON importata come JSONKit.
  3. Quando si compila il mio framework abilitato per la lavorazione AFNET per iOS5 (per evitare il problema n. 1), si collegherebbe automaticamente NSJSONSerialization, che causerà un'eccezione sui progetti 4.3, il che significa che dovresti cercare manualmente le direzioni di compilazione e rimuovere le chiamate a NSJSONSerialization Prima di compilare, quindi tornerebbe automaticamente alla libreria compatibile 4.3 (nel mio caso JSONKit). Tale condizione di compilazione si trova su afhttpclient.m e AfjsonRequestoperal.m (EG #if __IPHONE_OS_VERSION_MIN_REQUIRED > __IPHONE_4_3 || __MAC_OS_X_VERSION_MIN_REQUIRED > __MAC_10_6)
  4. Dopo aver rimosso quelle condizioni, ho compilato con successo il mio framework per iOS5 con JSONKit invece di NSJSonserialization e sono stato in grado di usarlo con successo nel mio progetto iOS4.3.

Spero che questo aiuti chiunque altro che possa lottare con questo per un paio di giorni come me :)

Shai.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top