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


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

Author: KSR, 2016-09-09

8 answers

Véase la respuesta aceptada https://forums.developer.apple.com/thread/60919

Puede guardar activos de 16 bits como activos de 8 bits con Vista previa.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 el la aplicación es compatible con iOS 8 o anterior."

Con Xcode 8 GM, este error se producirá si incluye 16 bits o P3 activos en un envío de aplicación dirigidos a versiones anteriores de iOS luego iOS 9.3. Si su aplicación requiere una funcionalidad de color amplio, debe cambiar su destino de implementación a iOS 9.3 o posterior. Si tu app no lo hace requiere una amplia funcionalidad de color y desea implementarla en versiones anteriores Versiones 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 nombrado en el mensaje de error de iTunes Connect. Los siguientes pasos describen el proceso:

  1. Crear un Inspectable .archivo ipa. En Xcode Organizer (Xcode->Window->Organizer), seleccione un archivo para inspeccionar y haga clic en "Exportación...", y elija "Exportar para Implementación empresarial o Ad-Hoc". Esto creará una copia local de la .archivo ipa para su aplicación.

  2. Localiza eso .ipa archivo y cambiar su la extensión a .Postal.

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

  4. Abrir una terminal y cambiar el directorio de trabajo al nivel superior de su .app bundle cd path / to / Payload / your.app

  5. Utilice la herramienta buscar para localizar activos.archivos de coches en su .paquete de aplicaciones como se muestra a continuación: buscar . - nombre de los activos.car "

  6. Utilice la herramienta assetutil para encontrar cualquier activo de 16 bits o P3, en cada Activo.coche su aplicación tiene 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 resultante.json y buscar cualquier contenido que contenga " DisplayGamut": "P3 "y su" Nombre " asociado. Esta voluntad sea el nombre de su conjunto de imágenes que contenga uno o más de 16 bits o P3 activo.

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

Actualizar: Si su destino de implementación se establece en 8.3 o 8.4 y tiene un asset catalog recibirá este mismo mensaje de error, incluso si no lo hace en realidad tienen activos de 16 bits o P3. En este caso, tendrá que bajar su Destino de implementación a 8.2, o muévalo hasta 9.x.

 53
Author: Kostia Dombrovsky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-27 21:58:42

Espero que este guión 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 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 "------------------------------"
 30
Author: Aleksandr Terentev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-19 10:51:58

Pude reproducir el problema y parece relacionado con imágenes en Asset Catalog. Archivó un error con Apple (con el proyecto de ejemplo adjunto)

Apple Bug Reporter: 28371396

 16
Author: Evtim Georgiev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-20 12:31:43

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 "------------------------------"
 12
Author: Никита Конопелько,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-13 11:34:50

El mismo problema.

No estoy seguro de si se trata de un error, pero aquí está mi solución : asegúrese de que sus activos de imagen sin Adobe RGB (1998) colorspace

En xcode

 3
Author: ping,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-06 14:57:08

Añadiendo para cualquier otra persona con un problema similar...

La aplicación se estrelló en iOS 9.0 - iOS 9.2 en lo que parecía aleatorio / alrededor de las transiciones del guion gráfico / alrededor de establecer una UIImage(nombre...).. Encontrado 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 destino de implementación en 8.2 o inferior (usé 8.0) lo arregló para mí. No bromees. El peor error nunca.

 1
Author: karnett,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-17 21:02:11

Establezca el Destino de implementación iOSdentro de Info de su proyecto y todos los destinos en el mismo valor.

En mi caso mi Proyecto se pretende iOS 9.1 y el Objetivo fue establecer a iOS 8.0 y se estrellaba en el Simulador con iOS 8.4

Ahora funciona perfectamente.

PS.: Limpie el proyecto antes de volver a ejecutarlo.

 0
Author: Gustavo Barbosa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-27 16:25:07

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

Encontré que el problema apareció para los activos que se comprimieron utilizando el algoritmo lzfse (puede encontrar información sobre la compresión extrayendo información de los activos.car using 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 destino de implementación en actool comando.

Tl; dr;

  1. Archivo
  2. Descomprimir ipa
  3. Compile assets - Puede encontrar el comando compilador de assets para su proyecto generado por xcode revisando los registros de archivo en Xcode report navigator

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. Cierra el pico.
  2. Dimitir
 0
Author: badeleux,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-18 12:42:02