2013-03-02 12 views
5

Ho creato un'applicazione Mac che utilizza il framework RMSharedPreferences. Quando si apre l'app, si blocca immediatamente e viene visualizzato il seguente errore:Errore "Libreria non caricata" all'avvio dell'app

Dyld Error Message: 
    Library not loaded: @rpath/RMSharedPreferences.framework/Versions/A/RMSharedPreferences 
    Referenced from: /Users/USER/Desktop/MyApp.app/Contents/MacOS/MyApp 
    Reason: image not found 

Sembra che non riesca a trovare il quadro. Ho provato ad aggiungere una fase di copia al target che dovrebbe copiare il framework e quando si sfoglia il contenuto dell'app in Finder, sembra che sia stato copiato correttamente.

Qualcuno sa cosa potrebbe causare questo errore?

EDIT: definizione di un quadro per opzionale fa fare il lancio dell'applicazione senza errori ma l'applicazione non funziona completamente. Qualsiasi chiamata relativa a RMSharedPreferences verrà ignorata.

Copy framework. Contents of app.

risposta

10

Dal momento in fase di installazione del quadro con la tua applicazione, è necessario impostare percorso di installazione del framework. È possibile impostarlo nella configurazione di destinazione del framework "posizione di installazione". Usa qualcosa come:

@executable_path 

Si potrebbe anche usare una cartella separata per i tuoi quadri, allora si può usare:

@executable_path/../Frameworks/ 

Nel caso in cui non è possibile ricostruire il quadro (che non è tuo, ma sto dicendo in generale), è possibile modificare un percorso di installazione quadro precompilati come questo:

install_name_tool -id @executable_path/../Frameworks/<framework_name> <your_framework> 

Here you can find a reference for this.

Se si intende raggruppare un framework all'interno di un altro framework, è possibile utilizzare @loader_path anziché @executable_path.

+0

Questa è un'ottima risposta. L'impostazione del percorso di installazione su '@executable_path /../ Frameworks 'ha risolto il problema. Grazie mille per la risposta e per il riferimento alla documentazione di Apple. – simonbs

+0

contento che abbia aiutato! – sergio

4

@rpath è una parola chiave più flessibile e il suo utilizzo è consigliato.

Il modo migliore per farlo è impostare l'impostazione di "Percorsi di ricerca percorso di ricerca" in Xcode.

Ciò evita la necessità di uno script di fase di build aggiuntivo per modificare il framework.

Per esempio, nella tua situazione, è possibile impostare "RunPath Percorsi di ricerca" per

@executable_path/../Frameworks 

o

@loader_path/../Frameworks 

se si sta cercando di caricare il quadro all'interno di un quadro.

+1

Intendi "Percorso di ricerca percorso di prova" sotto Collegamento sessione di Impostazioni di costruzione? – ingaham

+0

Sì, mi dispiace. Grazie. –

Problemi correlati