ios crash xcode8 ios9.2

Xcode 8 build crash en iOS 9.2 y versiones inferiores



xcode8 ios9.2 (8)

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


Agregando 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 guión gráfico / alrededor de establecer un UIImage (nombre ...). Encontré este hilo: ( https://forums.developer.apple.com/thread/61643 )

Si su aplicación está dirigida a iOS 8.4, se bloqueará en iOS 9.0 - 9.2 en Xcode 8 ... algo que ver con xcassets. Establecer el objetivo de implementación en 8.2 o inferior (utilicé 8.0) me lo arregló. En serio. El peor error de todos.


Aunque la pregunta ya ha sido respondida, la solución acelerada no funciona para mí, ya que no tenía ningún activo de 16b / ch.

Encontré que el problema apareció para los activos que se comprimieron usando el algoritmo lzfse (puede encontrar información sobre la extracción de información de compresión de Assets.car usando assetutil ). Desafortunadamente, Xcode IDE no permite a los desarrolladores cambiar el algoritmo de compresión, sin embargo, puede hacerlo compilando activos manualmente y reduciendo el objetivo de implementación en el comando actool .

tl; dr;

  1. Archivo
  2. Descomprimir ipa
  3. Compilar activos: puede encontrar el comando del compilador de activos para su proyecto generado por xcode al verificar los registros de archivo en el navegador de informes Xcode

Comando de ejemplo:

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. Resign

Espero que este script bash te pueda ayudar. El argumento de entrada es un 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 "------------------------------"


Establezca el objetivo de implementación de iOS dentro de la información de su proyecto y todos los objetivos 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 .: Limpie el proyecto antes de volver a ejecutarlo.


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

Apple Bug Reporter: 28371396


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 invá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 ocurrirá si incluye activos de 16 bits o P3 en un envío de aplicación dirigido a lanzamientos de iOS anteriores a iOS 9.3. Si su aplicación requiere una amplia funcionalidad de color, debe cambiar su Objetivo 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, 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 nombrado en el mensaje de error de iTunes Connect. Los siguientes pasos describen el proceso:

  1. Cree un archivo .ipa inspeccionable. En el Xcode Organizer (Xcode-> Window-> Organizer), seleccione un archivo para inspeccionar, haga clic en "Exportar ..." y elija "Exportar para implementación empresarial o ad-hoc". Esto creará una copia local del archivo. Archivo ipa para su aplicación.

  2. Localice ese archivo .ipa y cambie su extensión a .zip.

  3. Expande el archivo .zip. Esto producirá una carpeta de carga útil que contiene su paquete .app.

  4. Abra una 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 localizar archivos Assets.car en su paquete .app como se muestra a continuación: buscar. -name ''Assets.car''

  6. Use la herramienta assetutil para encontrar 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 Objetivo de implementación está establecido en 8.3 u 8.4 y tiene un catálogo de activos, recibirá este mismo mensaje de error, incluso si en realidad no tiene activos de 16 bits o P3. En este caso, deberá reducir su Objetivo de implementación a 8.2 o moverlo a 9.x.


guión editado para convertir archivos png al 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 aquí está mi solución: asegúrese de que sus activos de imagen sin espacio de color Adobe RGB (1998)

en xcode