Nuevas advertencias en iOS 9: "se eliminarán todos los códigos de bits"

387

Tengo esta nueva advertencia sobre Google Framework en mi aplicación:

(nulo): URGENTE: todo el código de bits se eliminará porque '/ Users / myname / Library / Mobile Documents / com ~ apple ~ CloudDocs / foldername / appname / GoogleMobileAds.framework / GoogleMobileAds (GADSlot + AdEvents.o)' se creó sin código de bits . Debe reconstruirlo con el código de bits habilitado (configuración de Xcode ENABLE_BITCODE), obtener una biblioteca actualizada del proveedor o deshabilitar el código de bits para este objetivo. Nota: Esto será un error en el futuro.

Xcode 7 me está dando alrededor de 204 advertencias sobre este mismo concepto, y no pude evitarlo. También tengo un problema para acceder a la red desde mi aplicación. Este es el error del área de depuración:

-canOpenURL: falló para URL: "kindle: // home" - error: "Esta aplicación no puede consultar el esquema kindle"

Todos estos problemas no estaban presentes en iOS 8.

C.Farrugia
fuente
¿Entonces ha habilitado el código de bits en su objetivo Xcode?
Droppy
Lo siento, soy nuevo en esto, ¿puedes decirme cómo, por favor?
C.Farrugia
Nunca lo he hecho, pero parece ser algo que tienes que configurar deliberadamente. Parece que has hecho eso.
Droppy
44
@Droppy AFAIK, la configuración está activada de forma predeterminada, pero puede desactivarla en cualquier momento en la configuración de su proyecto.
TIENE
Los apagué y todas las advertencias desaparecieron. Investigué un poco y Google necesita actualizar su marco para que este error esté desactivado, hasta ahora solo funcionará. ¿Alguien sabe acerca de -canOpenURL: falló para URL: "kindle: // home" - error: "Esta aplicación no puede consultar el esquema kindle"? Esto no tengo idea de qué está hablando Xcode
C.Farrugia

Respuestas:

1023

Su biblioteca se compiló sin código de bits, pero la opción de código de bits está habilitada en la configuración de su proyecto. Decir NOque Enable Bitcodeen sus destinatarios configuración de generación y los configuración de generación de biblioteca para eliminar las advertencias.

Para aquellos que se preguntan si se requiere habilitar el código de bits:

Para las aplicaciones de iOS, el código de bits es el predeterminado, pero opcional. Para las aplicaciones watchOS y tvOS, se requiere un código de bits. Si proporciona código de bits, todas las aplicaciones y marcos en el paquete de aplicaciones (todos los objetivos en el proyecto) deben incluir código de bits.

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

Zia
fuente
@Centurion la versión anterior de google analytics lib está en desuso y tampoco se compila con xcode 7 / ios9
zonabi
1
@goelv sí, debería poder enviar aplicaciones con código de bits deshabilitado. Es opcional en este momento. Puede ser necesario en el futuro.
zonabi
2
NO funcionó para mí para archivar. El proyecto Pre XCODE 7 funcionaba bien, ahora no puede ARCHIVAR incluso con Habilitar código de bits establecido en NO. Esto es para la biblioteca de AWS.
ort11
1
Todavía obtengo el error después de deshabilitar Bitcode en todos los objetivos.
datWooWoo
110

Después de Xcode 7, la opción de código de bits se habilitará de manera predeterminada. Si su biblioteca se compiló sin código de bits, pero la opción de código de bits está habilitada en la configuración de su proyecto, puede:

  1. Actualice su biblioteca con código de bits,
  2. Di NO para habilitar Bitcode en tu configuración de compilación de destino

Ingrese la descripción de la imagen aquí

Y la configuración de compilación de la biblioteca para eliminar las advertencias.

Para obtener más información, vaya a la documentación del código de bits en la biblioteca del desarrollador .

Y WWDC 2015 Sesión 102: "Plataformas Estado de la Unión"

Ingrese la descripción de la imagen aquí

ElonChan
fuente
42

En mi caso para evitar ese problema:

  1. Asegúrese de estar tratando con Xcode 7 , NO con versiones inferiores. En la versión inferior, esta bandera no existe.

  2. Configuración: Proyecto> Configuración de compilación> Todos> Opciones de compilación> Habilitar código de bits = NO

ingrese la descripción de la imagen aquí

Javier Calatrava Llavería
fuente
2
Por lo tanto, tendrá que volver a compilar las bibliotecas incluidas en su proyecto con XCode7 y con EnableBitcode establecido en YES. Bastante complicado si está trabajando con bibliotecas de terceros .a.
Javier Calatrava Llavería
15

El método canOpenUrlestá cambiado en iOS 9 (debido a la privacidad) y ya no es gratuito. Su proveedor de banners busca aplicaciones instaladas para que no muestren banners para una aplicación que ya está instalada.

Eso da todas las declaraciones de registro como

-canOpenURL: falló para URL: "kindle: // home" - error: "Esta aplicación no puede consultar el esquema kindle"

Los proveedores deben actualizar su lógica para esto.

Si necesita consultar las aplicaciones instaladas / los esquemas disponibles, debe agregarlos a su info.plistarchivo.

Agregue la clave 'LSApplicationQueriesSchemes' a su plist como una matriz. Luego agregue cadenas en esa matriz como 'kindle'.

Por supuesto, esta no es realmente una opción para los anuncios de banner (ya que son dinámicos), pero aún puede consultar de esa manera sus propias aplicaciones u otras aplicaciones específicas como Twitter y Facebook.

Documentación del método canOpenUrl: canOpenUrl:

Documentación sobre la clave LSApplicationQueriesSchemes

Saren Inden
fuente
Supongamos que una biblioteca estática verificará el enlace profundo de una aplicación principal, ¿cómo usar la excepción 'LSApplicationQueriesSchemes' en la biblioteca estática? Normalmente no tienes un Info.plist para eso.
loretoparisi
No estoy realmente seguro de eso, si una biblioteca necesita buscar aplicaciones fuera de su padre, el padre debe definir las url en su info.plist (así que documente para el marco). Si canOpenUrl también devuelve no habrá la aplicación de los padres puede manejarlo, que debiera (supongo) también incluyen los de la info.plist
Saren Inden
13

Si está utilizando CocoaPods y desea deshabilitar Bitcode para todas las bibliotecas, use el siguiente comando en el 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
Eike
fuente
8

Descargo de responsabilidad: está destinado a quienes admiten un flujo de trabajo de integración continua que requiere un proceso automatizado. Si no lo hace, use Xcode como se describe en la respuesta de Javier .

Esto funcionó para mí establecer a ENABLE_BITCODE = NOtravés de la línea de comando:

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

Tenga en cuenta que es probable que esto sea inestable en las versiones de Xcode. Fue probado con Xcode 7.0.1 y como parte de un proyecto Cordova 4.0.

miraculixx
fuente
-2

Google ha solucionado este problema recientemente (noviembre de 2010); consulte https://code.google.com/p/analytics-issues/issues/detail?id=671 . Pero tenga en cuenta que, como buena solución, trae más errores :)

También deberá seguir el método de inicialización que se detalla aquí: https://developers.google.com/analytics/devguides/collection/ios/v2 .

Las últimas instrucciones le darán dolor de cabeza porque hace referencia a utilidades no incluidas en el pod. A continuación fallará con el cocoapod

// Configure tracker from GoogleService-Info.plist.
NSError *configureError;
[[GGLContext sharedInstance] configureWithError:&configureError];
NSAssert(!configureError, @"Error configuring Google services: %@", configureError);
usuario1119517
fuente