2016-04-05 30 views
6

Ho un progetto contenente un'altra destinazione (framework) che è una dipendenza del progetto principale. Quel framework richiede i propri framework, quindi li ho aggiunti usando carthage. Il progetto si compila e funziona bene sul simulatore, ma sto ottenendo il seguente errore quando in esecuzione su un dispositivo fisico:Incorpora framework all'interno di un framework iOS

dyld: Library not loaded: @rpath/Subframework.framework/Subframework 
    Referenced from: /private/var/mobile/Containers/Bundle/Application/LONG-ID/MyApp.app/Frameworks/MyAppSDK.framework/MyAppSDK 
    Reason: no suitable image found. Did find: 
    /private/var/mobile/Containers/Bundle/Application/LONG-ID/MyApp.app/Frameworks/MyAppSDK.framework/Frameworks/Subframework.framework/Subframework: mmap() error 1 at address=0x00798000, size=0x00060000 segment=__TEXT in Segment::map() mapping /private/var/mobile/Containers/Bundle/Application/LONG-ID/MyApp.app/Frameworks/MyAppSDK.framework/Frameworks/Subframework.framework/Subframework 

ho cercato this, tuttavia l'unica soluzione è quella di aggiungere il Subframework a "quadri Incorpora "al progetto di massimo livello, che non è fattibile. Ho provato a modificare Impostazioni di configurazione -> Collegamento -> Nome di installazione di Dynamic Library, tuttavia non è stato di aiuto.

Come è possibile farlo funzionare su iPhone?

+0

vorrei guardare l'impostazione del RUNPATH del quadro. Suppongo stiamo parlando di iOS 8+? – trojanfoe

+0

@trojanfoe sì, la versione minima è iOS 8, dove e in che modo dovrei impostarla? – tofiffe

+0

è nelle impostazioni di generazione. Probabilmente hai solo bisogno di aggiungere '@ loader_path', assumendo che entrambi i framework siano nella stessa directory. – trojanfoe

risposta

0

Anch'io stavo affrontando questo problema da un po 'di tempo e avevo una gerarchia a tre livelli in cui il più esterno' quadro di Umbrella 'non doveva essere distribuito con gli altri quadri. Come ho risolto il problema impostando "Esegui percorsi di ricerca" sotto "Collegamento" in "Impostazioni di costruzione" di ciascun "Quadro di Umbrella" per puntare alla destinazione "Copia file" impostata in "Fasi di creazione" (Tu aggiungere una fase di compilazione di 'Copia file' e impostare preferibilmente la sua 'destinazione su' Frameworks ', quindi aggiungere ogni' Sub-framework 'che si desidera incorporare).

Copy sub-framework to 'Frameworks'

Set 'Runpath Search Paths' to 'Frameworks'

+0

Dopo aver disposto questo accordo nella mia applicazione, il Caricatore applicazioni ha rifiutato di caricare l'ipa con i messaggi di errore: 'ERRORE ITMS-90205: "Bundle non valido. Il pacchetto in' appname.ipa/Frameworks/umbrellaFramework.framework 'contiene pacchetti annidati non consentiti ".' e 'ERRORE ITMS-90205: "Pacchetto non valido. Il pacchetto in' appname.ipa/Frameworks/umbrellaFramework.framework 'contiene file non consentito' Frameworks '".'. Alla fine ho lasciato che il framework per gli ombrelli fosse compilato con i sotto-framework e spostato i sotto-framework dopo la compilazione e li incorporo nel progetto. Elimina anche la directory "Frameworks". –

Problemi correlati