2015-09-27 26 views
16

Da Xcode 7 è diventato uno dei problemi più comuni che i framework di terze parti dovrebbero supportare Bitcode. Possiamo anche disabilitare BITCODE impostando ENABLE_BITCODE su NO nelle impostazioni di Build. Ma non voglio spegnerlo, ma voglio convertire tutti i miei framework in BITCODE compatibile.Come verificare se un framework è BITCODE supportato per Xcode7

Quindi, come verificare se un framework è compatibile con BITCODE oltre alla compilazione del framework in Xcode. A volte Xcode fornisce un errore per la compatibilità BITCODE per un framework lasciando gli altri anche se non hanno il supporto BITCODE.

C'è qualche controllo strumento/riga di comando?

risposta

27

Da this Apple Developers Forum discussione, utente dshirley e bwilson suggeriamo di utilizzare gli strumenti della riga di comando e otoolgrep per verificare se esistono sezioni codice binario che.

$ otool -l libName.o | grep __LLVM 

o

$ otool -l MyFramework.framework/Versions/A/MyFramework | grep __LLVM 

L'esecuzione del comando precedente, se la libreria contiene codice binario che si vedrà segname __LLVM uscita.

+2

Grazie per la risposta di Michael. Quindi questo strumento funziona su un file .o o .a. Come verificare la presenza di un file .framework? – iPrabu

+3

Il .framework è solo un bel modo per raggruppare risorse, intestazioni pubbliche e una libreria. La libreria è lì dentro, dovrai eseguire il comando su questo. Ad esempio, a seconda della struttura della directory: '$ otool -l MyFramework.framework/Versions/A/MyFramework | grep __LLVM', dove 'MyFramework' è la libreria (senza l'estensione del file). Per ulteriori informazioni sulle strutture di directory framework, consulta https://developer.apple.com/library/ios/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/FrameworkAnatomy.html –

+0

Grazie per le informazioni Michael – iPrabu

4

La risposta accettata suggerisce farete grep __LLVM ma preferirei fare questo

otool -l libName.o | grep __bitcode 

in quanto vi sono diversi __LLVM segmenti e non tutti questi indicano la presenza di codice binario che. Ecco un esempio:

Section 
    sectname __bitcode 
    segname __LLVM 
     addr 0x00000000000007d0 
     size 0x0000000000000f10 
    offset 3360 
    align 2^4 (16) 
    reloff 0 
    nreloc 0 
    flags 0x00000000 
reserved1 0 
reserved2 0 
Section 
    sectname __cmdline 
    segname __LLVM 
     addr 0x00000000000016e0 
     size 0x0000000000000069 
    offset 7216 
    align 2^4 (16) 
    reloff 0 
    nreloc 0 
    flags 0x00000000 
reserved1 0 
reserved2 0 

La presenza della Sezione __cmdline non indica che codice binario che è presente, ma sarebbe anche essere trovato quando solo la ricerca di __LLVM.

+1

Questo non funziona. Ho un framework Swift e alla ricerca di "__LLVM" con i lavori abilitati al codice bit, ma questo no. –

+2

In https://forums.developer.apple.com/message/7038 utente bwilson (Apple Staff) accenna alla ricerca di __bitcode non è affidabile e raccomanda __LLVM –

1

si può provare questi comandi:

otool -arch armv7 -l libDeviceManager.a | grep bit code 

e

otool -arch arm64 -l libDeviceManager.a | grep bitcode