2016-03-23 31 views
13

Sto sviluppando un framework embbeded per iOS. Per creare un grasso universale (con il simulatore e le fette di dispositivo), ho creato un obiettivo aggregato con uno script che utilizza i comandi xcodebuild e lipo per generarlo, come fanno molte persone.xcodebuild 7.3 non abilita il bitcode

Con XCode 7.x Ho dovuto aggiungere una configurazione utente con BITCODE_GENERATION_MODE = bitcode per abilitarlo, ma questo ha smesso di funzionare dall'ultima release di XCode 7.3.

Ho provato tutto quello che ho trovato in internet come aggiungere OTHER_CFLAGS="-fembed-bitcode", ma nulla funziona come prima ...

Ho visto questo nel log di compilazione:

enable_bitcode = NO

ENABLE_BITCODE è sempre NO, non importa che io faccia.

Qualcuno ha tentato di creare un framework per grassi universale con bitcode abilitato utilizzando il comando xcodebuild da XCode 7.3?

+0

Stiamo monitorando questo problema su Apple con bug # 25389361, a cui è possibile fare riferimento se si sceglie di archiviare un bug duplicato o di comunicare in altro modo sul problema. Grazie per aver sollevato il problema! –

+1

Questo è risolto nella beta Xcode 8.0 rilasciata il 13 giugno –

risposta

17

Mi sono imbattuto in un problema simile ieri. Dopo alcune indagini, il problema, che appare quando si esegue xcodebuild da una fase di compilazione "Script di esecuzione" in qualsiasi target Xcode, sembra correlato con la specifica esplicita della toolchain da utilizzare, fatta con la variabile ENV TOOLCHAINS.

Pertanto, fino a quando Apple rilascia una versione fissa di Xcode 7.3, si può provare a aggiungere il seguente comando all'inizio del vostro script:

# workaround for bitcode generation problem with Xcode 7.3 unset TOOLCHAINS

questo dovrebbe essere innocui, come questa variabile ENV è non impostato di default quando esegui xcodebuild dalla riga di comando, e questa soluzione funziona perfettamente nel mio caso.

+0

Grazie! Funziona come un fascino. –

+6

In qualità di ingegnere Apple posso confermare che questa soluzione è appropriata. –

+0

Grazie a @RickBallard per questa conferma! – jlj

0

Sto affrontando lo stesso problema. Proprio come te, BITCODE_GENERATION_MODE e OTHER_CFLAGS="-fembed-bitcode" sono semplicemente ignorati, e le mie build si sono rotte

Ho notato che a volte funziona, ea volte no. Sembra che se si costruisce il framework (o target di aggreare) per il simulatore, il bitcode scompare, indipendentemente da ciò che si ha nei comandi xcodebuild.

Sto utilizzando Xcode 7.3 e ho 2 destinazioni: Libreria statica e Aggregazione di destinazione per rendere il framework fat.

Ciò che funziona per me quando si costruisce un quadro codice binario che-meno, è quello di:

  • selezionare il target libreria statica (non l'aggregato uno), e scegliere "dispositivo iOS generico"
  • Clean esso
  • selezionare il target libreria statica, ma scegliere un simulatore
  • costruirlo (opere, anche se è istantanea perché non è stata pulita)
  • Selezionare la destinazione libreria statica, ma raccogliere "iOS generico Devic e "di nuovo.
  • costruirlo
  • Selezionare il target di aggregazione per un "dispositivo iOS generico"
  • Infine, costruirlo
  • Se questo non è riuscito, ricominciare da capo. A volte ho bisogno di farlo due o tre volte prima che funzioni.

Quando lo faccio, la mia grossa libreria finisce con il codice bit.

È possibile verificare che il quadro ha il supporto codice binario che facilmente eseguendo otool -arch armv7 -l <framework_path> | grep LLVM

Per rompere ancora una volta, è sufficiente costruire il target di aggregazione per un simulatore. La libreria sarà ancora grassa, ma il bitcode è sparito.

Qualcuno può sicuramente trovare una soluzione che funziona sempre, ma almeno risolve il problema per me.

Non ho certamente dovuto farlo con Xcode 7.2 e non so come funzioni per le build CLI pure.

+0

Grazie per la risposta. La "soluzione" che ho applicato per il mio progetto era come la tua. Stavo compilando "manualmente" (con XCode, no con lo script) il framework per dispositivo e poi il simulatore, e infine usando il mio script solo per unirli con lipo. Ma vedi la soluzione alternativa di @jlj, puoi ancora usare il tuo script aggiungendo solo una riga. –

Problemi correlati