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;
- Archivo
-
Descomprimir
ipa
- 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
- Ciérralo.
- 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:
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.
Localice ese archivo .ipa y cambie su extensión a .zip.
Expande el archivo .zip. Esto producirá una carpeta de carga útil que contiene su paquete .app.
Abra una terminal y cambie el directorio de trabajo al nivel superior de su ruta de CD del paquete .app / a / Payload / your.app
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''
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
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.
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)