2016-06-08 33 views
5

Una libreria che sto utilizzando è passata di recente alla distribuzione come .framework.Utilizzo di CMake per copiare .frameworks nel pacchetto dell'app iOS

Nel mio file CMake esistente, ho avuto successo a ottenerlo a collegare con la mia app iOS, ma sto ottenendo:

dyld: Library not loaded: @rpath/Pizza.framework/Pizza 
    Referenced from: /var/mobile/Containers/Bundle/Application/D71ED298-C287-4B2F-8AFA-710A14C06D75/pizzashop.app/pizza 
    Reason: image not found 

quando installo da Xcode. Se posso aggiungere manualmente al mio progetto Xcode, nella sezione "binari incorporati" allora io sono buono (vedi immagine sotto)

enter image description here

Così ho concluso che il problema è sempre il .framework in il mio pacchetto di app. Mi sono imbattuto in this question e ho esaminato l'esempio di QT collegato, ma sto ancora cercando di orientarmi qui poiché trovo la sintassi un po 'opaca.

CMake's BundleUtilities cosa voglio usare qui? Guardando l'esempio BundleUtilities io sono un po 'perso:

set(APPS ...) # paths to executables 
set(DIRS ...) # directories to search for prerequisites 
INSTALL(CODE " 
    include(BundleUtilities) 
    fixup_bundle(\"${APPS}\" \"\" \"${DIRS}\") 
    " COMPONENT Runtime) 

È questo OSX-specifico o posso applicarlo in modo simile a iOS?

+1

Ho lo stesso problema. Per quanto ho capito, FIXUP_BUNDLE dovrebbe essere l'ideale per questo. Tuttavia, non sembra costruito per gestire i layout di bundle iOS. –

+0

@EmilStyrke è sul mio elenco TODO per un po 'di tempo per pubblicare la risposta, il tuo dolore mi ha spinto a spostarlo in priorità :) –

risposta

2

Non abbiamo finire per trovare una soluzione ideale, e finito per fare le cose un po 'più di manualmente preferita:

  1. Abbiamo aggiunto un comando personalizzato si corre dopo la costruzione è completa, ma prima che è impacchettato (vedere il numero add_custom_command di CMake).

  2. Il comando personalizzato esegue le seguenti operazioni:

    • crea una directory quadri sotto la nostra cartella app fascio (assicurarsi che sia da qualche parte dove si otterrà copiato nel vostro processo di confezionamento).
    • usiamo cp -aH per copiare tutti i quadri in questa directory frameworks
    • abbiamo poi ri-firmare ogni quadro in questa directory utilizzando: codesign --force --verbose Computers.framework --sign "$2"
  3. aggiungere la directory Frameworks ai vostri percorsi di ricerca: set_target_properties(${EXE_NAME} PROPERTIES XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/Frameworks")

+0

Grazie! Questo è molto simile a quello che ho fatto, ma ho dovuto anche firmare di nuovo il bundle stesso, poiché le build successive sembrano saltare la firma del bundle ma continuano a eseguire il comando personalizzato. Non sono sicuro se questo è un problema con CMake o XCode. –

+0

Qual è il *** $ *** *** dopo il '--sign'? – Itachi

+0

Il tuo ID di firma. –

Problemi correlati