Quando eu construo meu aplicativo com o Xcode 8 GM Seed e o executo em um dispositivo OU simulador iOS 9.2 abaixo, recebo falhas estranhas de EXC_BAD_ACCESS durante a inicialização do aplicativo ou alguns segundos após o aplicativo ser iniciado. A falha sempre acontece em um local diferente (adicionando uma subvisão, [UIImage imageNamed:]
método principal do delegado do aplicativo, etc.). Não recebo essas falhas quando executo no iOS 9.3+ ou 10 e não as recebo quando construo com o Xcode 7 e executo no iOS 9.2 e inferior. Alguém mais experimentou algo semelhante? Este é um problema conhecido com o Xcode 8?
85
Respostas:
Veja a resposta aceita https://forums.developer.apple.com/thread/60919
Você pode salvar ativos de 16 bits como de 8 bits com Preview.app
fonte
Espero que este script bash possa ajudá-lo. O argumento de entrada é o diretório que contém todos os xcassets de seu projeto. Este script irá definir o perfil sRGB para todos os pngs. Isso me ajudou :)
#!/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 "------------------------------"
fonte
Consegui reproduzir o problema e parece estar relacionado às imagens do Catálogo de Ativos. Arquivado um bug com a Apple (com projeto de amostra anexado)
Apple Bug Reporter: 28371396
fonte
script editado para converter arquivos png para o formato correto em todo o projeto e com espaços em branco:
#!/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 "------------------------------"
fonte
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 apenas converterá a imagem de 16 bits em 8 bitso mesmo problema.
Não tenho certeza se isso é um bug, mas aqui está minha solução: certifique-se de seus ativos de imagem sem espaço de cores Adobe RGB (1998)
no xcode
fonte
Adicionando para qualquer outra pessoa com um problema semelhante ...
O aplicativo estava travando no iOS 9.0 - iOS 9.2 no que parecia aleatório / em torno das transições do Storyboard / da configuração de um UIImage (nome ...) .. Encontrou este tópico: ( https://forums.developer.apple.com/thread/61643 )
Se seu aplicativo é direcionado ao iOS 8.4, ele travará no iOS 9.0 - 9.2 no Xcode 8 .. algo a ver com xcassets. Definir o destino de implantação para 8.2 ou inferior (eu usei 8.0) corrigiu para mim. Sem brincadeiras. O pior bug de todos.
fonte
Defina o alvo de implantação do iOS dentro das informações do seu projeto e todos os destinos com o mesmo valor.
No meu caso, meu projeto foi definido para iOS 9.1 e o destino foi definido para iOS 8.0 e estava travando no simulador com iOS 8.4
Agora está funcionando perfeitamente.
PS .: Limpe o projeto antes de executar novamente.
fonte
Embora a pergunta já tenha sido respondida, a solução aceita não funciona para mim, pois eu não tinha nenhum ativo 16b / ch.
Eu descobri que esse problema apareceu para ativos que foram compactados usando um
lzfse
algoritmo (você pode encontrar informações sobre a compressão de extração de informações em Assets.car usandoassetutil
). Infelizmente, o Xcode IDE não permite que os desenvolvedores alterem o algoritmo de compressão, no entanto, você pode fazer isso compilando ativos manualmente e reduzindo o destino de implantação emactool
comando.tl; dr;
ipa
Comando de exemplo:
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
fonte