Xcode 8 build crash en iOS 9.2 y abajo

Cuando construyo mi aplicación con Xcode 8 GM Seed y la ejecuto en un iOS 9.2 debajo del dispositivo O simulador, recibo extraños EXC_BAD_ACCESS fallos durante el inicio de la aplicación o unos pocos segundos después de que se inició la aplicación. El locking siempre ocurre en un lugar diferente (agregar una subvista, [UIImage imageNamed:] , el método principal del delegado de la aplicación, etc.). No tengo esos lockings cuando lo ejecuto en iOS 9.3+ o 10 y no los obtengo cuando compilo con Xcode 7 y ejecuto iOS 9.2 y versiones posteriores. ¿Alguien más ha experimentado algo similar? ¿Es este un problema conocido con Xcode 8?

Ver la respuesta aceptada https://forums.developer.apple.com/thread/60919

Puede guardar activos de 16 bits como de 8 bits con Preview.app

Cómo resolver “ERROR ITMS-90682: paquete no válido: el catálogo de activos en ‘Payload / XXXXX / Assets.car’ no puede contener activos de 16 bits o P3 si la aplicación es compatible con iOS 8 o anterior”.

Con Xcode 8 GM, este error se producirá si incluye activos de 16 bits o P3 en un envío de aplicaciones dirigidas a lanzamientos de iOS anteriores a iOS 9.3. Si su aplicación requiere una amplia funcionalidad de color, debe cambiar su destino de implementación a iOS 9.3 o posterior. Si su aplicación no requiere una amplia funcionalidad de color y desea implementarla en versiones anteriores de iOS, entonces debe reemplazar todos los activos de 16 bits o P3 con activos sRGB de 8 bits. Puede encontrar activos de 16 bits o P3 ejecutando “assetutil” en el catálogo de activos mencionado en el mensaje de error de iTunes Connect. Los siguientes pasos describen el proceso:

  1. Crea un archivo .ipa inspeccionable. En Xcode Organizer (Xcode-> Window-> Organizer), seleccione un archivo para inspeccionar, haga clic en “Exportar …” y elija “Exportar para Enterprise o Ad-Hoc Deployment”. Esto creará una copia local de. archivo ipa para tu aplicación.

  2. Ubica ese archivo .ipa y cambia su extensión a .zip.

  3. Expande el archivo .zip. Esto producirá una carpeta Payload que contiene su paquete .app.

  4. Abra un terminal y cambie el directorio de trabajo al nivel superior de su ruta de cd del paquete .app / a / Payload / your.app

  5. Use la herramienta de búsqueda para encontrar archivos Assets.car en su paquete .app como se muestra a continuación: find. -name ‘Assets.car’

  6. Use la herramienta assetutil para buscar cualquier activo de 16 bits o P3 en cada Assets.car que tenga su aplicación como se muestra a continuación. : sudo xcrun --sdk iphoneos assetutil --info /path/to/a/Assets.car > /tmp/Assets.json

  7. Examine el /tmp/Assets.json resultante y busque cualquier contenido que contenga “DisplayGamut”: “P3” y su “Nombre” asociado. Este será el nombre de su conjunto de imágenes que contiene uno o más activos de 16 bits o P3.

  8. Reemplace esos activos con activos de 8 bits / sRGB, luego reconstruya su aplicación.

Actualización: si su objective de implementación está configurado en 8.3 o 8.4 y tiene un catálogo de activos, recibirá este mismo mensaje de error, incluso si no tiene activos de 16 bits o P3. En este caso, deberá reducir su Objetivo de despliegue a 8.2 o moverlo a 9.x.

Espero que este script bash te pueda ayudar. El argumento de entrada es el directorio que contiene todos los xcassets de su proyecto. Este script establecerá el perfil sRGB en todos los pngs. Me ayudó:)

 #!/bin/bash DIRECTORY=$1 echo "------------------------------" echo "Passed Resources with xcassets folder argument is <$DIRECTORY>" echo "------------------------------" echo "Processing asset:" XSAASSETSD="$(find "$DIRECTORY" -name '*.xcassets')" for xcasset in $XSAASSETSD do echo "---$xcasset" IMAGESETS="$(find "$xcasset" -name '*.imageset')" for imageset in $IMAGESETS do echo "------$imageset" FILES="$(find "$imageset" -name '*.png')" for file in $FILES do echo "---------$file" sips -m "/System/Library/Colorsync/Profiles/sRGB Profile.icc" $file --out $file done done done echo "------------------------------" echo "script successfully finished" echo "------------------------------" 

Pude reproducir el problema y parece estar relacionado con las imágenes en el Catálogo de activos. Archivado un error con Apple (con proyecto de ejemplo adjunto)

Reportero de errores de Apple: 28371396

script editado para convertir archivos png a formato correcto en todo el proyecto y con espacios en blanco:

 #!/bin/bash DIRECTORY=$1 echo "------------------------------" echo "Passed Resources with xcassets folder argument is <$DIRECTORY>" echo "------------------------------" echo "Processing asset:" find "$DIRECTORY" -name '*png' -print0 | while read -d $'\0' file; do echo "---------$file" sips -m "/System/Library/Colorsync/Profiles/sRGB Profile.icc" "$file" --out "$file" done echo "------------------------------" echo "script successfully finished" echo "------------------------------" 

mismo problema.

No estoy seguro de si esto es un error, pero esta es mi solución: asegúrese de que sus activos de imagen no tengan espacio de color Adobe RGB (1998)

en xcode

Agregar para cualquier otra persona con un problema similar …

La aplicación se bloqueaba en iOS 9.0 – iOS 9.2 en lo que parecía aleatorio / alrededor de las transiciones del Guion gráfico / en torno a la configuración de un UIImage (nombre …). Encontró este hilo: ( https://forums.developer.apple.com/thread/61643 )

Si su aplicación apunta a iOS 8.4, se bloqueará en iOS 9.0 – 9.2 en Xcode 8 … algo que ver con xcassets. Configurar el destino de despliegue a 8.2 o inferior (utilicé 8.0) me lo arregló. En serio. El peor error jamás.

Establezca el destino de implementación de iOS dentro de la información de su proyecto y todos los objectives con el mismo valor.

En mi caso, mi proyecto se configuró en iOS 9.1 y Target se configuró en iOS 8.0 y se bloqueó en el simulador con iOS 8.4

Ahora está funcionando perfectamente.

PD .: Limpia el proyecto antes de volver a ejecutarlo.

Aunque la pregunta ya ha sido respondida, la solución aprobada no me funciona, ya que no tenía ningún recurso 16b / ch.

Descubrí que ese problema apareció para los activos que se comprimieron usando el algoritmo lzfse (puede encontrar información sobre la extracción de compresión de Assets.car utilizando assetutil ). Lamentablemente, Xcode IDE no permite a los desarrolladores cambiar el algoritmo de compresión, sin embargo, puede hacerlo comstackndo activos manualmente y bajando el destino de despliegue en el comando de actool .

tl; dr;

  1. Archivo
  2. Descomprimir ipa
  3. Comstackción de activos: puede encontrar el comando del comstackdor de activos para su proyecto generado por xcode comprobando los registros de archivo en el navegador de informes Xcode.

Ejemplo de comando:

xcrun actool --output-format human-readable-text --notices --warnings --minimum-deployment-target 8.0 --output-partial-info-plist info_partial.plist --app-icon AppIcon --launch-image LaunchImage --enable-on-demand-resources YES --sticker-pack-identifier-prefix {bundle_id}.sticker-pack --target-device iphone --target-device ipad --platform iphoneos --product-type com.apple.product-type.application --compile #{path_to_directory_containing_Assets_car} Assets/Assets.xcassets

  1. Ciérralo.
  2. Renunciar