2015-02-26 14 views
9

Sto cercando di incorporare un quadro che utilizzano un altro quadro e questo funziona bene nel simulatore, ma si blocca su un dispositivo iOS:dyld: Biblioteca non caricato per un quadro all'interno di un quadro

dyld : Libreria non caricata: @ rpath/FrameworkB.framework/FrameworkB Riferimento a: /private/var/mobile/Containers/Bundle/Application/B072CD7C-8595-4AE4-A506-26832A0F4402/FrameworkTest.app/Frameworks/FrameworkA.framework/ FrameworkA Motivo: immagine non trovata

Questa è la mia struttura in Xcod e:

  • FrameworkTest.xcodeproj (il progetto app)
    • FrameworkA.xcodeproj (Cocoa Touch Framework)
      • FrameworkB.xcodeproj (Cocoa Touch Framework)

L'app (FrameworkTest) utilizza una classe A da FrameworkA (che è embe dded nell'app FrameworkTest). La classe A utilizza la classe B da FrameworkB (che è collegata in FrameworkA).

Questo funziona perfettamente nel simulatore, ma non funziona sul dispositivo.

La struttura può sembrare un po 'strana, ma sto sviluppando i framework mentre sviluppo l'app, motivo per cui voglio aggiungere i progetti di framework all'interno del mio progetto di app.

Ho caricato il project on GitHub per farvi vedere, se avete bisogno di dare un'occhiata più da vicino. (La classe A viene richiamata nel file AppDelegate.m)

Perché questo funziona nel simulatore iOS e non sul dispositivo? E come posso farlo funzionare sul dispositivo?

EDIT:

Come simonthumper suggerisce nei commenti, ho anche provato ad aggiungere FrameworkB.framework-Copy Files come Frameworks destinazione fasi di creazione per FrameworkA, ma che mi dà questo errore nella console:

dyld: libreria non caricata: @ rpath/FrameworkB.framework/FrameworkB Riferimento a: /private/var/mobile/Containers/Bundle/Application/2A38A2BC-9CD7-4AF6-9E50-42C16D92D6B2/FrameworkTest.app/Frameworks/ FrameworkA.framework/FrameworkA Motivo: non è stata trovata un'immagine adatta. Trovato: /private/var/mobile/Containers/Bundle/Application/2A38A2BC-9CD7-4AF6-9E50-42C16D92D6B2/FrameworkTest.app/Frameworks/FrameworkA.framework/Framework/FrameworkB.framework/FrameworkB: mmap() errore 1 all'indirizzo = 0x10012C000, dimensione = 0x00008000 segmento = __ TEXT in Segment :: map() mapping /private/var/mobile/Containers/Bundle/Application/2A38A2BC-9CD7-4AF6-9E50-42C16D92D6B2/FrameworkTest.app/Frameworks/FrameworkA. quadro/Frameworks/FrameworkB.framework/FrameworkB

+0

Hai il framework nella fase di creazione dei file di copia? – simonthumper

+0

@simonthumper Ho modificato la domanda con ulteriori informazioni se lo faccio :-) –

+0

Ciao. Anch'io sto affrontando lo stesso tipo di problema. Ma non ho un secondo codice di progetto quadro con me (solo FrameworkB.framework che ho). Qualche idea su come ci vado? –

risposta

8

ho contattato Apple con questo problema e trovato una soluzione al mio problema. Il supporto tecnico di Apple ha chiarito, che ho bisogno di aggiungere il FrameworkB.xcodeproj al mio progetto di applicazione, quindi la mia struttura del progetto è:

  • FrameworkTest.xcodeproj (il progetto app)
    • FrameworkA.xcodeproj (Cocoa touch Framework)
      • FrameworkB.xcodeproj (Cocoa touch Framework)
    • FrameworkB.xcodeproj (Cocoa touch Framework)

Quando ho fatto questo progetto l'applicazione può includere FrameworkB.framework come una libreria incorporata: FrameworkTest.xcodeproj build phases

Questo risolto il problema e ha permesso di eseguirlo su un dispositivo iOS.

Se la build si arresta in modo anomalo nella versione: Revoca il certificato di distribuzione aziendale e creane uno nuovo per risolvere il problema. Una volta fatto ciò ha funzionato perfettamente.

+0

Ciao. Anch'io sto affrontando lo stesso tipo di problema. Ma non ho un secondo codice di progetto quadro con me (solo FrameworkB.framework che ho). Qualche idea su come ci vado? –

+0

+1 Ma questa non dovrebbe essere una soluzione: come possiamo creare SDK a file singolo in caso affermativo :-(Eventuali aggiornamenti della situazione alla data? – Angad

+0

Risolto il problema, grazie. Comunque, non stiamo aggiungendo frameworkB due volte? Vorrei confrontarmi con una soluzione in cui non viene aggiunta (presumibilmente) due volte, ma non ce l'ho ... Oppure Xcode è abbastanza intelligente da aggiungerlo solo una volta? Mi piacerebbe crederlo visto che sono framework (librerie condivise dinamiche, giusto?), la prima volta che frameworkB viene aggiunto a frameworkA, solo il riferimento viene copiato.Tuttavia, quando frameworkB viene aggiunto a frameworkTest, il codice viene copiato, non il riferimento.Siamo bene? Qualcuno indicami la direzione giusta per capire questo, per favore :) – inigo333

4

Avevo anche problemi simili con i framework embedded e ho appena provato il codice da GitHub.

Opzione 1 (non adatto per il lavoro di squadra)

Ciò che ha reso l'errore di scomparire era di aggiungere FrameworkB a binari embedded nella scheda Generale del vostro FrameworkTest bersaglio. xcode - embedded binaries

Opzione 2

Beh, progetto di condivisione con altri sviluppatori sicuro è importante :). Hai provato questo approccio? Aggiungi Nuova copia dei file Fase Nella fase di FramewrokA e aggiungere FrameworkB alla destinazione Framework. new copy phase

Ma non sono sicuro del motivo per cui funziona sul simulatore. Se qualcuno lo sa, per favore, sentiti libero di commentare.

applausi

+0

Grazie, ma ho provato ad aggiungere FrameworkB anche ai Binari incorporati, e questo funziona. Ma si collega direttamente alla directory 'DerivedData', che non è quello che sto cercando. Funzionerà solo sul tuo Mac. Condivido il progetto con altri sviluppatori, quindi questo deve funzionare senza percorsi specifici.:-) –

+0

@ThomasClemensen Ho appena letto la modifica, quindi la mia seconda soluzione è male anche per te ... ma ha funzionato per me (usando il tuo progetto) – micromanc3r

Problemi correlati