Nuovi avvisi in iOS 9: "tutto il bitcode verrà eliminato"


387

Ho questo nuovo avviso su Google Framework nella mia app:

(null): URGENTE: tutto il bitcode verrà eliminato perché '/ Users / myname / Library / Mobile Documents / com ~ apple ~ CloudDocs / foldername / appname / GoogleMobileAds.framework / GoogleMobileAds (GADSlot + AdEvents.o)' 'è stato creato senza bitcode . È necessario ricostruirlo con bitcode abilitato (impostazione Xcode ENABLE_BITCODE), ottenere una libreria aggiornata dal fornitore o disabilitare il bitcode per questa destinazione. Nota: questo sarà un errore in futuro.

Xcode 7 mi sta dando circa 204 avvertimenti su questo stesso concetto, e non potrei andare in giro con questo. Inoltre ho un problema ad accedere alla rete dalla mia app. Questo è l'errore dall'area di debug:

-canOpenURL: non riuscito per l'URL: "kindle: // home" - errore: "Questa app non è autorizzata a eseguire una query per lo schema kindle"

Tutti questi problemi non erano presenti in iOS 8.


Quindi hai abilitato il bitcode nel tuo target Xcode?
Droppy,

Mi dispiace, sono nuovo di questo, puoi dirmi come, per favore?
C.Farrugia,

Non l'ho mai fatto, ma sembra essere qualcosa che devi impostare deliberatamente. Sembra che tu l'abbia fatto.
Droppy,

4
@Droppy AFAIK l'impostazione è attivata per impostazione predefinita, ma è possibile disattivarla in qualsiasi momento nelle impostazioni del progetto.
È il

Li ho disattivati ​​e tutti gli avvisi sono andati via. Ho studiato un po 'e Google ha bisogno di aggiornare il proprio framework affinché questo errore sia spento, fino ad ora solo spegnerlo funzionerà. Qualcuno sa di -canOpenURL: non riuscito per l'URL: "kindle: // home" - errore: "Questa app non può eseguire query per kindle schema"? Questo non ho idea di cosa stia parlando Xcode
C.Farrugia,

Risposte:


1023

La libreria è stata compilata senza bitcode, ma l'opzione bitcode è abilitata nelle impostazioni del progetto. Dì NOa Enable Bitcodenelle Impostazioni di costruzione di destinazione e nelle Impostazioni di costruzione della libreria per rimuovere gli avvisi.

Per chi si chiede se è necessario abilitare il bitcode:

Per le app iOS, il codice di accesso è predefinito, ma facoltativo. Per le app watchOS e tvOS, è richiesto bitcode. Se fornisci bitcode, tutte le app e i framework nel bundle dell'app (tutte le destinazioni nel progetto) devono includere bitcode.

https://help.apple.com/xcode/mac/current/#/devbbdc5ce4f


@Centurion la precedente libreria di Google Analytics è obsoleta e non può essere compilata nemmeno con xcode 7 / ios9
zonabi

1
@goelv sì, dovresti essere in grado di inviare app con bitcode disabilitato. è facoltativo adesso. potrebbe essere richiesto in futuro.
Zonabi,

2
NON ha funzionato per me per l'archiviazione. Il progetto Pre XCODE 7 funzionava bene, ora non può ARCHIVIO nemmeno con Abilita Bitcode impostato su NO. Questo è per la libreria AWS.
ort11,

1
Ancora ottenere l'errore dopo aver disabilitato Bitcode su tutte le destinazioni.
datWooWoo,

110

Dopo Xcode 7, l'opzione bitcode sarà abilitata per impostazione predefinita. Se la libreria è stata compilata senza bitcode, ma l'opzione bitcode è abilitata nelle impostazioni del progetto, è possibile:

  1. Aggiorna la tua libreria con codice bit,
  2. Dì NO per abilitare Bitcode nelle impostazioni di costruzione target

Inserisci qui la descrizione dell'immagine

E le impostazioni di compilazione della libreria per rimuovere gli avvisi.

Per ulteriori informazioni, consultare la documentazione di bitcode nella libreria degli sviluppatori .

Sessione 102 del WWDC 2015: "Piattaforme Stato dell'Unione"

Inserisci qui la descrizione dell'immagine


42

Nel mio caso per evitare quel problema:

  1. Assicurati di avere a che fare con Xcode 7 , NON con le versioni precedenti. Nella versione precedente questo flag non esiste.

  2. Installazione: Progetto> Impostazioni di costruzione> Tutto> Opzioni di costruzione> Abilita Bitcode = NO

inserisci qui la descrizione dell'immagine


2
Quindi, dovrai ricompilare le librerie incluse nel tuo progetto con XCode7 e con EnableBitcode impostato su YES. Abbastanza complicato se lavori con librerie .a di terze parti.
Javier Calatrava Llavería,

15

Metodo canOpenUrl è stato modificato in iOS 9 (a causa della privacy) e non è più libero di utilizzarlo. Il tuo provider di banner controlla le app installate in modo che non mostrino banner per un'app già installata.

Questo dà tutte le istruzioni del registro come

-canOpenURL: non riuscito per l'URL: "kindle: // home" - errore: "Questa app non è autorizzata a eseguire una query per lo schema kindle"

I fornitori dovrebbero aggiornare la loro logica per questo.

Se è necessario eseguire una query per le app installate / gli schemi disponibili, è necessario aggiungerli al info.plistfile.

Aggiungi la chiave 'LSApplicationQueriesSchemes' al tuo plist come un array. Quindi aggiungi stringhe in quell'array come 'kindle'.

Ovviamente questa non è davvero un'opzione per i banner pubblicitari (poiché quelli sono dinamici), ma puoi comunque eseguire query in quel modo per le tue app o altre app specifiche come Twitter e Facebook.

Documentazione di canOpenUrl: metodo canOpenUrl:

Documentazione sulla chiave LSApplicationQueriesSchemes


Supponiamo che una libreria statica controllerà il deeplink di un'app padre, come utilizzare l'eccezione 'LSApplicationQueriesSchemes' nella libreria statica? Normalmente non hai un Info.plist per questo.
Loretoparisi,

Non ne sono davvero sicuro, se una libreria deve cercare app esterne al suo genitore, il genitore dovrebbe definire l'URL nel suo info.plist (quindi documentalo per il framework). Se canOpenUrl restituisce anche no, l'app genitore può gestirla, quindi dovresti (presumo) includere anche quelle nel info.plist
Saren Inden,

13

Se stai usando CocoaPods e vuoi disabilitare Bitcode per tutte le librerie, usa il seguente comando nel Podfile

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['ENABLE_BITCODE'] = 'NO'
        end
    end
end

8

Dichiarazione di non responsabilità: è destinata a coloro che supportano un flusso di lavoro di integrazione continua che richiedono un processo automatizzato. In caso contrario, utilizzare Xcode come descritto nella risposta di Javier .

Questo ha funzionato per me impostare ENABLE_BITCODE = NOtramite la riga di comando:

find . -name *project.pbxproj | xargs sed -i -e 's/\(GCC_VERSION = "";\)/\1\ ENABLE_BITCODE = NO;/g'

Si noti che è probabile che ciò sia instabile tra le versioni di Xcode. È stato testato con Xcode 7.0.1 e come parte di un progetto Cordova 4.0.



-2

Questo problema è stato risolto di recente (novembre 2010) da Google, consultare https://code.google.com/p/analytics-issues/issues/detail?id=671 . Ma tieni presente che come una buona soluzione porta più bug :)

Dovrai anche seguire il metodo di inizializzazione elencato qui: https://developers.google.com/analytics/devguides/collection/ios/v2 .

Le ultime istruzioni ti faranno venire il mal di testa perché fa riferimento a utility non incluse nel pod. Di seguito fallirà con il cocoapod

// Configure tracker from GoogleService-Info.plist.
NSError *configureError;
[[GGLContext sharedInstance] configureWithError:&configureError];
NSAssert(!configureError, @"Error configuring Google services: %@", configureError);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.