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?
85
Respuestas:
Consulte la respuesta aceptada https://forums.developer.apple.com/thread/60919
Puede guardar activos de 16 bits como de 8 bits con Preview.app
fuente
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 "------------------------------"
fuente
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
fuente
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
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 bitsmismo 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
fuente
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.
fuente
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.
fuente
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
lzfse
algoritmo (puede encontrar información sobre cómo extraer información de la compresión de Assets.car usandoassetutil
). 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 alactool
mando.tl; dr;
ipa
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
fuente