Bloqueo de compilación de Xcode 8 en iOS 9.2 y versiones anteriores

85

Cuando construyo mi aplicación con Xcode 8 GM Seed y la ejecuto en un dispositivo O simulador de iOS 9.2 inferior, obtengo fallos extraños de EXC_BAD_ACCESS durante el inicio de la aplicación o unos segundos después de iniciada la aplicación. 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 entiendo esos accidentes cuando lo ejecuto en iOS 9.3+ o 10 y yo no los recibe cuando construyo con Xcode 7 y se ejecutan en iOS 9.2 y por debajo. ¿Alguien más ha experimentado algo similar? ¿Es este un problema conocido con Xcode 8?

Lingzhi Zhang
fuente
Primero, restablezca el contenido del simulador. e intenta de nuevo.
Mehul
3
¿Pudiste resolver tu problema? Nosotros también lo estamos teniendo.
animaonline
¿Puede presentar un nuevo error en bugreport.apple.com y adjuntar el proyecto de muestra y los registros de fallas para que podamos investigar?
Quinn Taylor
@QuinnTaylor: he presentado un informe de error con el proyecto adjunto (reproducido al 100% para mí en el simulador) en bugreport.apple.com # 28371396. ¡Gracias por examinar esto!
Evtim Georgiev
3
@EvtimGeorgiev ¡Gracias! Es un duplicado de un error de iOS relacionado con las imágenes .png de P3 y debería corregirse en el SDK beta de iOS 10.1 incluido en Xcode 8.1 beta, que se lanzó hoy. ¿Puedes intentar construir con eso?
Quinn Taylor

Respuestas:

55

Consulte 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 el "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 el envío de una aplicación dirigida a versiones 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, 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 organizador de Xcode (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. ipa para tu aplicación.

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

  3. Expanda 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 la ruta del CD del paquete .app / to / Payload / your.app

  5. Utilice la herramienta de búsqueda para localizar archivos Assets.car en su paquete .app como se muestra a continuación: -nombre 'Assets.car'

  6. Utilice la herramienta assetutil para encontrar activos 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 archivo /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 y luego reconstruya su aplicación.

Actualización: si su objetivo 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 implementación a 8.2 o subirlo a 9.x.

Kostia Dombrovsky
fuente
2
¿Cómo se relaciona esto con EXC_BAD_ACCESS?
animaonline
1
No duplique las respuestas. En su lugar, marque las preguntas como duplicadas.
JAL
¡Gracias hombre! ¡Me ahorraste mucho tiempo con esta respuesta! )
Tórax
3
En mi proyecto (el objetivo de implementación es 8.0) no hay activos de P3, pero todavía tengo un bloqueo en la aplicación o al azar en cualquier lugar con xcode 8. Todos los activos son de 8 bits / sRGB. ¿Alguien todavía enfrenta este mismo problema
Ankit
@Ankit nos enfrentamos al mismo problema. ¿Ya has encontrado una solución?
Roman Truba
32

Espero que este script de bash pueda ayudarte. El argumento de entrada es un directorio que contiene todos los xcassets de su proyecto. Este script establecerá el perfil sRGB en todos los png. 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 "------------------------------"
Aleksandr Terentev
fuente
Nuestros activos no contienen imágenes defectuosas, pero seguimos recibiendo estos errores.
animaonline
@animaonline, ayuda si la aplicación realmente contiene activos de 16 bits o P3.
Aleksandr Terentev
2
Creo que el principal problema es que nadie ha confirmado realmente que este error sea causado por activos.
animaonline
funcionó al principio, pero luego no, simplemente no se
bloquea
1
El guión no funcionó para mí, pero el uso de ImageOptim sí lo hizo
deej
16

Pude reproducir el problema y parece estar relacionado con las imágenes en Asset Catalog. Archivado un error con Apple (con proyecto de muestra adjunto)

Informe de errores de Apple: 28371396

Evtim Georgiev
fuente
No puedo descargar el proyecto de muestra. ¿Puedes compartir el proyecto para reproducir el accidente?
Tamil
Gracias. Problemas relacionados con Asset Catalog, simplemente cambie el espacio de color de Adobe RGB (1998) a sRGB.
Timur Bernikovich
13

script 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 "------------------------------"
Никита Конопелько
fuente
1
Este script es un poco más preciso. Спасибо, Никита.
anuncia el
1
Esto funciona a las mil maravillas. Guión simple pero efectivo. Para las personas que no saben cómo ejecutar este script ... Pasos: 1) Ponga este script en el archivo txt y cámbiele el nombre a AssetsScript.sh 2) Vaya a la carpeta adjunta de Images.xcassets y guarde el archivo de script 3) En la línea de comandos, vaya a la carpeta donde existe su archivo de script 4) Cambie los permisos de los archivos de script a ejecutables (chmod 755 AssetsScript.sh) 5) ejecute el archivo de script con directoryName como parámetro en la propia línea de comando (./AssetsScript.sh Images.xcassets). Boom, esto convierte todos sus activos al formato requerido y listo. La aplicación ahora funcionará bien.
Srivathsa
En una línea, while IFS= read -d '' -r file; do if [ $(file "$file" | grep -c '16-bit') -eq 1 ]; then sips -m '/System/Library/Colorsync/Profiles/sRGB Profile.icc' "$file"; fi done < <(find . -print0)que solo convertirá una imagen de 16 bits a 8 bits
DawnSong
3

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 el espacio de color Adobe RGB (1998)

en xcode

silbido
fuente
1
¿Qué quieres decir? ¿Podría darme más detalles?
animaonline
1
Mostrar una imagen con el espacio de color Adobe RGB (1998) me funcionó en la depuración en un dispositivo con Xcode 8 y Swift 3, pero no estaba disponible en iOS 9. Cambiar el espacio de color lo hizo funcionar.
Andrew
1

Agregando para cualquier otra persona con un problema similar ...

La aplicación fallaba en iOS 9.0 - iOS 9.2 en lo que parecía aleatorio / alrededor de transiciones de Storyboard / alrededor de configurar 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 menos (usé 8.0) lo solucionó para mí. En serio. El peor error de todos.

karnett
fuente
Hola. ¡Ayuda! Estoy experimentando algo como esto, excepto SOLO en AppStore. Cuando construyo mi aplicación directamente en un iPhone con iOS 9.2.1 no falla, ni en el simulador, pero cuando descargo exactamente la misma versión / compilación desde AppStore , falla. ¿Fue este el caso contigo también?
Sti
@Sti no, estaba fallando en la versión de depuración. ¿Está utilizando datos básicos o cualquier otra cosa que pueda tener un problema al sobrescribir una compilación antigua? Solo un pensamiento.
karnett
Buen pensamiento, y sí, estoy usando datos centrales en algunas partes de la aplicación. Pero después de muchas pruebas, estoy bastante seguro de que no tiene nada que ver con eso. Los datos centrales no tienen nada que ver con mis imágenes, y casi todos mis rastros de pila de mi sistema de informes de fallas dicen que UIImage (imageNamed :) es el malo. Ah, y también ocurre en instalaciones limpias. Más de 7000 fallos en los últimos dos días, solo afectaron a iOS 9.0.2 a 9.2.1 .. No a iOS 9.3 o posterior .. Qué raro. Y no pasa cuando lo construyo ahora. Solo AppStore. Imposible de depurar. Envié un ticket de TSI a Apple hace un momento.
Sti
Oh. Esa es una pegajosa. Solo tenía otro pensamiento ... ¿Qué versión de Swift está usando la versión de la tienda de aplicaciones? Creo que experimenté esto en Swift 2.2 o 2.3. No Swift 3. Me imagino que estás construyendo ahora con Swift 3 y no puedes reproducirlo.
karnett
No, ¡pero es muy interesante que lo digas! Hemos tenido esta aplicación en la App Store durante mucho tiempo. La versión anterior en App Store se escribió en Swift 2.3 y no experimentó este error. Esta nueva versión en App Store que subí hace unos días (la que falla) tiene muy pocos pero muy grandes cambios, incluida la conversión a Swift 3. Otro cambio destacable es la adición de un widget exclusivo para iOS 10.
Sti
0

Establezca el objetivo de implementación de iOS dentro de la información de su proyecto y todos los objetivos en el mismo valor.

En mi caso, mi proyecto se configuró en iOS 9.1 y Target se configuró en iOS 8.0 y se bloqueaba en Simulator con iOS 8.4

Ahora está funcionando perfectamente.

PS .: Limpia el proyecto antes de ejecutarlo de nuevo.

Gustavo Barbosa
fuente
0

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

Descubrí que ese problema apareció para los activos que se comprimieron usando un lzfsealgoritmo (puede encontrar información sobre cómo extraer información de la 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 los activos manualmente y reduciendo el objetivo de implementación al actoolmando.

tl; dr;

  1. Archivo
  2. Abrir la cremallera 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 de 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. Renunciar
badeleux
fuente