Falha de compilação do Xcode 8 no iOS 9.2 e inferior


85

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?


Primeiro, redefina o conteúdo do simulador. e tente novamente.
Mehul,

3
Você conseguiu resolver seu problema? Estamos tendo isso também.
animaonline

Você pode registrar um novo bug em bugreport.apple.com e anexar o projeto de amostra e os logs de travamento para que possamos investigar?
Quinn Taylor

@QuinnTaylor - Enviei um relatório de bug com o projeto anexado (reproduzido 100% para mim no simulador) em bugreport.apple.com # 28371396. Obrigado por olhar para isso!
Evtim Georgiev

3
@EvtimGeorgiev Obrigado! É uma duplicata de um bug do iOS relacionado às imagens P3 .png e deve ser corrigido no SDK do iOS 10.1 beta incluído no Xcode 8.1 beta, que foi lançado hoje. Você pode tentar construir com isso?
Quinn Taylor

Respostas:


55

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

Como resolver "ERROR ITMS-90682: Invalid Bundle - O catálogo de ativos em 'Payload / XXXXX / Assets.car' não pode conter ativos de 16 bits ou P3 se o aplicativo suportar iOS 8 ou anterior."

Com o Xcode 8 GM, esse erro ocorrerá se você incluir ativos de 16 bits ou P3 em um envio de aplicativo voltado para versões do iOS anteriores ao iOS 9.3. Se o seu aplicativo requer ampla funcionalidade de cores, você deve alterar o destino de implantação para iOS 9.3 ou posterior. Se seu aplicativo não exige ampla funcionalidade de cores e você deseja implantá-lo em versões mais antigas do iOS, você deve substituir todos os ativos de 16 bits ou P3 por ativos sRGB de 8 bits. Você pode encontrar ativos de 16 bits ou P3 executando “assetutil” no catálogo de ativos nomeado na mensagem de erro do iTunes Connect. As etapas a seguir descrevem o processo:

  1. Crie um arquivo .ipa inspecionável. No Xcode Organizer (Xcode-> Janela-> Organizer), selecione um arquivo para inspecionar, clique em "Exportar ..." e escolha "Exportar para Enterprise ou Ad-Hoc Deployment". Isso criará uma cópia local do. arquivo ipa para seu aplicativo.

  2. Localize esse arquivo .ipa e altere sua extensão para .zip.

  3. Expanda o arquivo .zip. Isso produzirá uma pasta Payload contendo seu pacote .app.

  4. Abra um terminal e altere o diretório de trabalho para o nível superior do caminho do cd do pacote .app / para / Payload / your.app

  5. Use a ferramenta find para localizar arquivos Assets.car em seu pacote .app conforme mostrado abaixo: find. -nome 'Assets.car'

  6. Use a ferramenta assetutil para localizar quaisquer ativos de 16 bits ou P3, em cada Assets.car que seu aplicativo possui, conforme mostrado abaixo. :sudo xcrun --sdk iphoneos assetutil --info /path/to/a/Assets.car > /tmp/Assets.json

  7. Examine o /tmp/Assets.json resultante e procure qualquer conteúdo que contenha “DisplayGamut": “P3” e seu “Nome" associado. Este será o nome do seu conjunto de imagens contendo um ou mais ativos de 16 bits ou P3.

  8. Substitua esses ativos por ativos de 8 bits / sRGB e, em seguida, reconstrua seu aplicativo.

Atualização: se o seu destino de implantação estiver definido como 8.3 ou 8.4 e você tiver um catálogo de ativos, receberá a mesma mensagem de erro, mesmo se não tiver ativos de 16 bits ou P3. Nesse caso, você precisará diminuir sua meta de implantação para 8.2 ou movê-la para 9.x.


2
Como isso está relacionado a EXC_BAD_ACCESS?
animaonline

1
Por favor, não duplique as respostas. Em vez disso, sinalize as perguntas como duplicatas.
JAL

Obrigado cara! Você economizou muito tempo para mim com esta resposta! )
Tórax de

3
No meu projeto (o destino de implantação é 8.0) não há ativos P3, ainda estou tendo travamento no aplicativo ou aleatoriamente em qualquer lugar com o xcode 8. Todos os ativos são de 8 bits / sRGB. Alguém ainda enfrenta esse mesmo problema
Ankit

@Ankit, estamos enfrentando o mesmo problema. Você já encontrou a solução?
Roman Truba

32

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 "------------------------------"

Nossos ativos não contêm nenhuma imagem com defeito, mas ainda estamos recebendo esses erros.
animaonline

@animaonline, ajuda se o aplicativo realmente contiver ativos de 16 bits ou P3.
Aleksandr Terentev

2
Acho que o principal problema é que ninguém realmente confirmou que esse erro é causado por ativos.
animaonline

funcionou no início, mas depois não, simplesmente não trava no mesmo lugar
CiNN

1
O script não funcionou para mim, mas usando ImageOptim funcionou
deej

16

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


Não consigo fazer download do projeto de amostra. Você pode compartilhar o projeto para reproduzir a falha
Tamil

Obrigado. Questões relacionadas ao Catálogo de Ativos, basta alterar o espaço de cores de Adobe RGB (1998) para sRGB.
Timur Bernikovich

13

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 "------------------------------"

1
Este script é um pouco mais preciso. Спасибо, Никита.
setembro de

1
Isso funciona como um encanto. Script simples, mas eficaz. Para quem não sabe como executar este script. Passos: 1) Coloque este script no arquivo txt e renomeie-o para AssetsScript.sh 2) Vá para a pasta Images.xcassets e mantenha o arquivo de script 3) Na linha de comando vá para a pasta onde existe seu arquivo de script 4) Altere as permissões dos arquivos de script para executáveis ​​(chmod 755 AssetsScript.sh) 5) execute o arquivo de script com directoryName como parâmetro na própria linha de comando (./AssetsScript.sh Images.xcassets). Boom isso converte todos os seus ativos para o formato necessário e pronto. O aplicativo agora funciona bem.
Srivathsa

Em uma linha, 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 bits
DawnSong

3

o 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


1
O que você quer dizer? Você poderia elaborar?
animaonline

1
Mostrar uma imagem com o espaço de cores Adobe RGB (1998) funcionava para mim na depuração em um dispositivo com Xcode 8 e Swift 3, mas não estava no lançamento no iOS 9. Alterar o espaço de cores funcionou.
Andrew

1

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.


Oi. Socorro! Estou experimentando algo assim, exceto SOMENTE na AppStore. Quando eu construo meu aplicativo diretamente em um iPhone com iOS 9.2.1 ele não trava, nem no simulador, mas quando eu faço o download da mesma versão / compilação da AppStore ele trava. Foi esse o seu caso também?
Sti

@Sti não, estava travando na compilação de depuração. Você está usando dados principais ou qualquer outra coisa que possa ter um problema ao sobrescrever uma construção antiga? Apenas um pensamento.
Karnett

Boa ideia. Sim, estou usando dados básicos em algumas partes do aplicativo. Mas, depois de muitos testes, tenho certeza de que não tem nada a ver com isso. Os dados principais não têm nada a ver com minhas imagens, e quase todos os rastreamentos de pilha do meu sistema de relatório de travamento dizem que UIImage (imageNamed :) é o cara mau. Ah, e isso também acontece em instalações limpas. Mais de 7000 travamentos nos últimos dois dias, afetando apenas iOS 9.0.2 a 9.2.1 .. Não iOS 9.3 ou posterior .. Tão estranho. E não acontece quando eu construo agora. Apenas AppStore. Impossível depurar. Mandei um tíquete do TSI para a Apple agora mesmo.
Sti

Ooh. Essa é pegajosa. Acabei de ter outra ideia .. Qual versão do Swift a versão da app store está usando? Acho que experimentei isso no Swift 2.2 ou 2.3. Não é o Swift 3. Imagino que você esteja construindo agora com o Swift 3 e não consegue reproduzi-lo?
Karnett

Não, mas é muito interessante que você esteja dizendo isso! Há muito tempo que temos esse aplicativo na App Store. A versão anterior da App Store foi escrita em Swift 2.3 e não apresentou esse bug. Esta nova versão na App Store que carreguei há alguns dias (aquela que trava) tem poucas, mas muito grandes mudanças, incluindo a conversão para Swift 3. Outra mudança que pode ser mencionada é a adição de um widget exclusivo para iOS 10.
Sti

0

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.


0

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 lzfsealgoritmo (você pode encontrar informações sobre a compressão de extração de informações em Assets.car usando assetutil). 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;

  1. Arquivo
  2. Descompactar ipa
  3. Compilar ativos - você pode encontrar o comando do compilador de ativos para o seu projeto gerado pelo xcode, verificando os logs de arquivo no navegador de relatórios Xcode

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

  1. Feche.
  2. Demitir-se
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.