2015-06-27 7 views
187

Ieri ho riconosciuto un sacco di avvertimenti per quanto riguarda la biblioteca parse.com:Impatto delle Xcode costruire opzioni "Attiva codice binario che" Sì/No

URGENTE: tutti codice binario che sarà abbandonato perche '[percorso]/Parse. framework/Parse (PFAnalytics.o) 'è stato creato senza bitcode. È necessario ricostruirlo con codice bit abilitato (impostazione Xcode ENABLE_BITCODE), ottenere una libreria aggiornata dal fornitore o disabilitare il codice bit per questa destinazione. Nota: questo sarà un errore in futuro.

sono consapevole del fatto che posso rimuovere quelli di avvertimento con this answer ma ora sto chiedendo se avrà alcun impatto negativo per quanto riguarda AppStore presentazione e/o le prestazioni effettive di mia app.

Xcode informa voi per quanto riguarda codice binario che

L'attivazione di questa impostazione indica che l'obiettivo o progetto dovrebbero generare codice binario che durante la compilazione per le piattaforme e architetture che la sostengono. Per le build Archive, il codice bit verrà generato nel binario collegato per l'invio all'app store. Per le altre build, il compilatore e il linker verificheranno se il codice è conforme ai requisiti per la generazione di codice bit, ma non genereranno il bitcode attuale. [ENABLE_BITCODE]

Ma non sto ottenendo informazioni veramente utili da questo testo.

  • Posso utilizzare la risposta collegata per aggirare il problema senza alcun impatto negativo e senza compromettere un invio futuro di AppStore?
  • Che cosa fa realmente il ENABLE_BITCODE, sarà un requisito non facoltativo in futuro?
  • Sono presenti impatti sulle prestazioni se si abilita/disabilita?

risposta

304
  • Cosa significa l'ENABLE_BITCODE effettivamente fare, sarà un requisito non facoltativa in futuro?

Non sono sicuro a che livello siete alla ricerca di una risposta a, quindi facciamo un piccolo viaggio. Qualcuno potrebbe già sapere.

Quando si crea il progetto, Xcode richiama clang per obiettivi Objective-C e swift/swiftc per obiettivi Swift. Entrambi questi compilatori compilano l'app su un intermediate representation (IR), uno di questi IR è il bitcode. Da questo IR, un programma chiamato LLVM prende il sopravvento e crea i binari necessari per le modalità x86 a 32 e 64 bit (per il simulatore) e arm6/arm7/arm7s/arm64 (per il dispositivo). Normalmente, tutti questi binari diversi sono raggruppati in un singolo file chiamato fat binary.

L'opzione ENABLE_BITCODE taglia questo passaggio finale. Crea una versione dell'app con un binario bitcode IR. Questo ha un certo numero di caratteristiche interessanti, ma uno svantaggio gigante: non può funzionare ovunque. Per ottenere un'app con un binario bitcode da eseguire, è necessario ricompilare il codice bit (forse assemblato o transcodificato ... Non sono sicuro del verbo corretto) in un binario x86 o ARM.

Quando un'app bitcode viene inviata all'App Store, Apple eseguirà questo passaggio finale e creerà i file binari completati.

Al momento, le applicazioni di bitcode sono opzionali, ma la cronologia ha dimostrato che Apple trasforma le cose facoltative in requisiti (come il supporto a 64 bit). Di solito ci vogliono alcuni anni, quindi gli sviluppatori di terze parti (come Parse) hanno il tempo di aggiornarsi.

  • posso utilizzare il metodo di cui sopra, senza alcun impatto negativo e senza compromettere un futuro presentazione AppStore?

Sì, è possibile disattivare ENABLE_BITCODE e tutto funziona come prima. Fino a quando Apple non renderà le app bitcode un requisito per l'App Store, starai bene.

  • Esistono dell'impatto sul rendimento se abilito/disattivarlo?

Non ci sarà mai impatto sulle prestazioni negative per le consente, ma la distribuzione interna di un app per il test può ottenere più complicato.

Per quanto riguarda gli impatti positivi ... beh, questo è complicato.

Per la distribuzione in App Store, Apple creerà versioni separate della tua app per ogni architettura della macchina (arm6/arm7/arm7s/arm64) invece di un'app con un fat binary. Ciò significa che l'app installata sui dispositivi iOS sarà più piccola.

Inoltre, quando viene ricompilato il codice bit (forse assemblato o transcodificato ... di nuovo, non sono sicuro del verbo corretto), è ottimizzato. LLVM lavora sempre alla creazione di nuove migliori ottimizzazioni. In teoria, l'App Store potrebbe ricreare la versione separata dell'app nell'App Store con ogni nuova versione di LLVM, così la tua app potrebbe essere nuovamente ottimizzata con la più recente tecnologia LLVM.

+7

"Apple creerà versioni separate della tua app per ogni architettura della macchina (arm6/arm7/arm7s/arm64) anziché un'app con un binario fat. Ciò significa che l'app installata sui dispositivi iOS sarà più piccola." Questo è ciò che fa Slicing. Questo non è correlato a Bitcode. – user102008

+3

"L'opzione ENABLE_BITCODE taglia questo passaggio finale." Non taglia alcun passo. Tutti i binari dell'architettura sono ancora prodotti. Le informazioni PLUS bitcode vengono quindi aggiunte per OGNI architettura. Vedi http://stackoverflow.com/a/31030741/102008 – user102008

+0

@ user102008 hmm ... se questo è il caso, forse alcune delle mie informazioni non sono aggiornate. Dalla mia lettura, slicing è per i bundle e bitcode è per i binari. I binari FAT incorporati sarebbero necessari per le applicazioni di debug, ad hoc e aziendali. I file binari FAT potrebbero essere scartati da Apple per le app dell'app store durante il processo di invio. –

30

codice binario che è una nuova funzionalità di iOS 9

codice binario che è una rappresentazione intermedia di un programma compilato. Le app che carichi su iTunes Connect che contengono bitcode verranno compilate e collegate all'App Store. L'inclusione di bitcode consentirà a Apple di ottimizzare nuovamente l'app binario in futuro senza la necessità di inviare una nuova versione della tua app allo store.

Nota: per le app iOS, il codice bit è l'impostazione predefinita, ma facoltativa. Se fornisci bitcode, tutte le app e i framework nel pacchetto dell'app devono includere il codice bit. Per le app watchOS, è richiesto il codice bit

Quindi è necessario disabilitare il codice bit finché tutti i framework della propria applicazione non hanno abilitato il codice di bit.

+0

'Re-ottimizzare il binario applicazione in futuro' - si può spiegare un po 'di più? – genaks

+0

Qui si dice che: "Bitcode è una nuova funzionalità di iOS 9" e che "[...] Per app watchOS, è richiesto [...] bitcode". Quindi, cosa succede se mi piacerebbe creare un'app WatchOS su iOS 8? – superpuccio

3

Dal docs

  • posso utilizzare il metodo di cui sopra, senza alcun impatto negativo e senza compromettere un futuro presentazione AppStore?

Bitcode consentirà a Apple di ottimizzare l'app senza dover inviare un'altra build. Tuttavia, è possibile abilitare questa funzione solo se tutti i framework e le app nel pacchetto dell'app hanno questa funzione abilitata. Avere aiuto, ma non averlo non dovrebbe avere alcun impatto negativo.

  • Che cosa fa realmente ENABLE_BITCODE, sarà un requisito non facoltativo in futuro?

Per le app iOS, il bitcode è l'impostazione predefinita, ma facoltativa. Se fornisci il codice bit , tutte le app e i framework nel pacchetto dell'app devono includere il codice bit . Per le app watchOS, è richiesto il codice bitcode.

  • Esistono dell'impatto sul rendimento se abilito/disattivarlo?

L'App Store e il sistema operativo ottimizzare l'installazione di iOS e applicazioni watchos adattando la consegna app per le capacità del particolare dispositivo dell'utente , con il minimo ingombro. Questa ottimizzazione, denominata app thinning, , consente di creare app che utilizzano la maggior parte delle funzionalità del dispositivo , occupare lo spazio minimo su disco e ospitare gli aggiornamenti futuri che possono essere applicati da Apple. Download più veloci e più spazio per altre app e contenuti offrono un'esperienza utente migliore.

Non ci dovrebbero essere impatti sulle prestazioni.

53

Assicurarsi di selezionare "Tutti" per trovare il abilitare le impostazioni codice binario che costruire:

Build settings

26

codice binario che rende più difficile la segnalazione incidente. Ecco una citazione da HockeyApp (che vale anche per altre soluzioni incidente di reporting):

Durante il caricamento di un app per l'App Store e lasciando la casella "codice binario che" abilitato, Apple utilizzerà tale codice binario che costruire e ricompilarlo alla fine prima di distribuirlo ai dispositivi. Ciò comporterà il binario che ottiene un nuovo UUID e vi è un'opzione per scaricare un dSYM corrispondente tramite Xcode.

Nota: la risposta è stata curata in gennaio 2016 per riflettere le modifiche più recenti

+1

Tra settembre e dicembre, questo è riuscito a essere corretto tramite la nuova opzione di esportazione di Xcode Organizer (vedere l'aggiornamento in HOWTO citato) e interrotto di nuovo (vedi la mia soluzione [domanda HA] (http://support.hockeyapp.net/discussions/ problemi/50477-symbolicating-bitcode-enabled-appstore-app-have-the-dsyms-scaricato)) –

7

@ VJ9 thx. Aggiornamento a xcode 7. Mi mostra lo stesso errore. Costruire bene dopo set "NO"

enter image description here

set "NO" funziona bene.

enter image description here

+0

@Septronic Se si desidera selezionare SÌ. È necessario controllare questo supporto per tutto il terzo framework. – zszen

+0

La versione iOS minima supportata dai target deve essere iOS 6 o successiva. – shallowThought

1

Qui potete trovare tutte le soluzioni per quanto riguarda Bitcode

Come da Mela Doc

codice binario che è una rappresentazione intermedia di un programma compilato. Le app che carichi su iTunes Connect che contengono bitcode verranno compilate e collegate al negozio. L'inclusione di bitcode consentirà a Apple di ottimizzare nuovamente l'app binario in futuro senza la necessità di inviare una nuova versione della tua app allo store.

Xcode nasconde i simboli generati durante il periodo di compilazione per impostazione predefinita, quindi non sono leggibili da Apple. Solo se scegli di includere simboli durante il caricamento della tua app su iTunes Connect i simboli saranno inviati ad Apple. Devi includere i simboli per ricevere i rapporti sugli arresti anomali di Apple.

Nota: Per le app iOS, il bitcode è il valore predefinito, ma facoltativo. Per le app watchOS e tvOS, è richiesto il bitcode. Se fornisci bitcode, tutte le app e i framework nel pacchetto di app (tutti i target nel progetto) devono includere il codice bit. Dopo aver distribuito l'app utilizzando iTunes Connect, è possibile scaricare il file dSYMs per la build, descritto in Viewing and Importing Crashes in the Devices Window

Il roll-out iniziale di Apple del bitcode e del servizio di thinning delle app è stato messo in attesa, perché i problemi di aggiornamento da un tipo di hardware su un diverso tipo di hardware non ha ripristinato le giuste versioni dei binari. Questo problema è stato successivamente risolto con iOS 9.0.2 e la funzionalità riabilitata.

Il bitcode è sempre stato una parte delle fasi di compilazione e ottimizzazione di LLVM, ma spostando la logica di back-end sui server Apple, sposta le fasi di ottimizzazione e assemblaggio dal tempo di compilazione dello sviluppatore alla distribuzione di App Store. Ciò sbloccherà il potenziale della futura re-ottimizzazione o re-traduzione per supportare processori più nuovi e più veloci in futuro. Le implementazioni di Bitcode sono richieste per depliant watchOS e tvOS e possono essere abilitate condizionalmente per le installazioni iOS esistenti con l'opzione "Abilita codice Bitcode" nelle impostazioni del progetto. Questo aggiungerà un flag embed-bitcode-marker per le build di debug e embed-bitcode per i build di archivio/dispositivo. Questi possono essere passati al compilatore Swift con -embed-bitcode o usando clang con -fembed-bitcode.

Il bitcode presenta inoltre alcuni svantaggi. Gli sviluppatori possono eseguire il debug dei report di arresto anomalo dalle applicazioni memorizzando copie dei simboli di debug corrispondenti al file binario spedito ad Apple. Quando si verifica un arresto anomalo in un determinato stack, lo sviluppatore può ripristinare la traccia dello stack originale simbolizzando il rapporto di arresto anomalo, utilizzando questi simboli di debug. Tuttavia, i simboli sono un sottoprodotto della traduzione della forma intermedia in binario; ma se quel passo è fatto sul server, questa informazione è persa. Apple fornisce un servizio di segnalazione degli arresti anomali che può svolgere la parte del debugger, a condizione che lo sviluppatore abbia caricato i simboli di debug al momento della pubblicazione dell'applicazione. Il fatto che lo sviluppatore non veda mai l'esatto binario significa che potrebbero non essere in grado di testare problemi specifici mentre il nuovo hardware si evolve. Ci sono anche alcune preoccupazioni riguardo al potere di cessione di Apple per eseguire la compilazione - inclusa la possibilità di iniettare routine aggiuntive o frammenti di codice - ma dato che Apple ha il pieno controllo del processo di pubblicazione sono attualmente possibili indipendentemente dal fatto che lo sviluppatore utilizzi o codice binario o binari compilati .

Infine, il bitcode sul server può essere tradotto per supportare nuove architetture e set di istruzioni man mano che evolvono.A condizione che mantengano la convenzione di chiamata e la dimensione dell'allineamento e delle parole, un'applicazione di bitcode potrebbe essere tradotta in diversi tipi di architettura e ottimizzata specificamente per un nuovo processore. Se vengono utilizzate librerie standard per le routine matematiche e vettoriali, queste possono essere ottimizzate in istruzioni vettoriali specifiche del processore per ottenere le migliori prestazioni per una determinata applicazione. Gli ottimizzatori potrebbero anche generare più codifiche diverse e giudicare in base alla dimensione o alla velocità di esecuzione.

Per maggiori informazioni si prega di controllare Here e Here