Arresto anomalo della build di Xcode 8 su iOS 9.2 e versioni precedenti


85

Quando costruisco la mia app con Xcode 8 GM Seed e la eseguo su un dispositivo iOS 9.2 inferiore o simulatore, ottengo strani arresti anomali EXC_BAD_ACCESS durante l'avvio dell'app o pochi secondi dopo l'avvio dell'app. L'arresto anomalo si verifica sempre in un punto diverso (aggiunta di una vista secondaria, [UIImage imageNamed:]metodo principale del delegato dell'app, ecc.). Non capisco queste si blocca quando l'eseguo su iOS 9.3+ o 10 e non ho ricevuto quando ho costruire con Xcode 7 e corro su iOS 9.2 e al di sotto. Qualcun altro ha sperimentato qualcosa di simile? È un problema noto con Xcode 8?


Innanzitutto, ripristina il contenuto del simulatore. e riprova.
Mehul

3
Sei riuscito a risolvere il tuo problema? Ce l'abbiamo anche noi.
animaonline

Puoi segnalare un nuovo bug su bugreport.apple.com e allegare il progetto di esempio e i log di arresto anomalo in modo che possiamo indagare?
Quinn Taylor,

@QuinnTaylor - Ho presentato una segnalazione di bug con progetto allegato (riprodotto al 100% per me nel simulatore) su bugreport.apple.com # 28371396. Grazie per aver esaminato questo aspetto!
Evtim Georgiev

3
@EvtimGeorgiev Grazie! È un duplicato di un bug iOS relativo alle immagini P3 .png e dovrebbe essere corretto nell'SDK beta di iOS 10.1 incluso in Xcode 8.1 beta, che è stato rilasciato oggi. Puoi provare a costruire con quello?
Quinn Taylor,

Risposte:


55

Vedi la risposta accettata https://forums.developer.apple.com/thread/60919

Puoi salvare risorse a 16 bit come risorse a 8 bit con Preview.app

Come risolvere "ERRORE ITMS-90682: bundle non valido - Il catalogo delle risorse in" Payload / XXXXX / Assets.car "non può contenere risorse a 16 bit o P3 se l'app supporta iOS 8 o versioni precedenti."

Con Xcode 8 GM, questo errore si verifica se includi asset a 16 bit o P3 in un invio di app destinato a versioni iOS precedenti a iOS 9.3. Se la tua app richiede funzionalità a colori ampi, devi modificare il tuo obiettivo di distribuzione su iOS 9.3 o versioni successive. Se la tua app non richiede funzionalità di colore ampio e desideri distribuirla su versioni iOS precedenti, devi sostituire tutte le risorse a 16 bit o P3 con risorse sRGB a 8 bit. Puoi trovare risorse a 16 bit o P3 eseguendo "assetutil" sul catalogo delle risorse indicato nel messaggio di errore di iTunes Connect. I seguenti passaggi delineano il processo:

  1. Crea un file .ipa ispezionabile. In Xcode Organizer (Xcode-> Finestra-> Organizer), seleziona un archivio da ispezionare, fai clic su "Esporta ..." e scegli "Esporta per distribuzione aziendale o ad-hoc". Questo creerà una copia locale del file. ipa per la tua app.

  2. Individua il file .ipa e cambia la sua estensione in .zip.

  3. Espandi il file .zip. Questo produrrà una cartella Payload contenente il tuo bundle .app.

  4. Apri un terminale e cambia la directory di lavoro al livello più alto del tuo .app bundle cd path / to / Payload / your.app

  5. Usa lo strumento di ricerca per individuare i file Assets.car nel tuo bundle .app come mostrato di seguito: trova. -name "Assets.car"

  6. Utilizza lo strumento assetutil per trovare qualsiasi asset a 16 bit o P3, in ogni Assets.car della tua applicazione come mostrato di seguito. :sudo xcrun --sdk iphoneos assetutil --info /path/to/a/Assets.car > /tmp/Assets.json

  7. Esamina il file /tmp/Assets.json risultante e cerca i contenuti che contengono "DisplayGamut": "P3" e il suo "Nome" associato. Questo sarà il nome del tuo set di immagini contenente uno o più asset a 16 bit o P3.

  8. Sostituisci quelle risorse con risorse a 8 bit / sRGB, quindi ricostruisci la tua app.

Aggiornamento: se l'obiettivo di distribuzione è impostato su 8.3 o 8.4 e si dispone di un catalogo di risorse, verrà visualizzato lo stesso messaggio di errore, anche se in realtà non si dispone di risorse a 16 bit o P3. In questo caso dovrai abbassare il tuo obiettivo di distribuzione a 8.2 o spostarlo fino a 9.x.


2
Come è correlato a EXC_BAD_ACCESS?
animaonline

1
Per favore non duplicare le risposte. Contrassegna invece le domande come duplicate.
JAL

Grazie amico! Hai risparmiato un sacco di tempo per me con questa risposta! )
Torace

3
Nel mio progetto (l'obiettivo di distribuzione è 8.0) non ci sono risorse P3, ma mi viene ancora un arresto anomalo sull'app o in modo casuale in qualsiasi luogo con xcode 8. Tutte le risorse sono di 8 bit / sRGB. Qualcuno ha ancora affrontato lo stesso problema
Ankit

@Ankit stiamo affrontando lo stesso problema. Hai già trovato una soluzione?
Roman Truba

32

Spero che questo script bash possa aiutarti. L'argomento di input è la directory che contiene tutti gli xcasset del progetto. Questo script imposterà il profilo sRGB su tutti i png. Mi ha aiutato :)

#!/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 "------------------------------"

Le nostre risorse non contengono immagini difettose, ma stiamo ancora ricevendo questi errori.
animaonline

@animaonline, aiuta se l'app contiene davvero risorse a 16 bit o P3.
Aleksandr Terentev

2
Penso che il problema principale sia che nessuno ha effettivamente confermato che questo errore sia causato dalle risorse.
animaonline

ha funzionato all'inizio, ma poi no, semplicemente non si blocca nello stesso punto
CiNN,

1
Lo script non ha funzionato per me, ma utilizzando ImageOptim ha funzionato
deej

16

Sono stato in grado di riprodurre il problema e sembra correlato alle immagini in Asset Catalog. Presentato un bug con Apple (con progetto di esempio allegato)

Apple Bug Reporter: 28371396


Non riesco a scaricare il progetto di esempio. Puoi condividere il progetto per riprodurre l'incidente
Tamil

Grazie. Problemi relativi al catalogo delle risorse, basta cambiare lo spazio colore da Adobe RGB (1998) a sRGB.
Timur Bernikovich

13

script modificato per convertire i file png nel formato corretto nell'intero progetto e con spazi bianchi:

#!/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
Questo script è un po 'più accurato. Спасибо, Никита.
seelts

1
Funziona come un fascino. Script semplice ma efficace. Per le persone che non sanno come eseguire questo script .. Passaggi: 1) Metti questo script nel file txt e rinominalo in AssetsScript.sh 2) Vai a Images.xcassets che racchiude la cartella e mantieni il file di script 3) Nella riga di comando vai nella cartella in cui esiste il file di script 4) Modificare i permessi dei file di script in eseguibili (chmod 755 AssetsScript.sh) 5) eseguire il file di script con directoryName come parametro nella riga di comando stessa (./AssetsScript.sh Images.xcassets). Boom converte tutte le tue risorse nel formato richiesto e fatto. L'applicazione ora funziona correttamente.
Srivathsa

In una riga, 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)che convertirà solo l'immagine a 16 bit in 8 bit
DawnSong

3

stesso problema.

Non sono sicuro che si tratti di un bug, ma ecco la mia soluzione: assicurati che le tue risorse immagine senza spazio colore Adobe RGB (1998)

in xcode


1
Cosa intendi? Potresti elaborare?
animaonline

1
La visualizzazione di un'immagine con lo spazio colore Adobe RGB (1998) funzionava per me durante il debug su un dispositivo con Xcode 8 e Swift 3, ma non era disponibile su iOS 9. La modifica dello spazio colore ha funzionato.
Andrew

1

Aggiunta per chiunque altro con un problema simile ...

L'app si bloccava su iOS 9.0 - iOS 9.2 su ciò che sembrava casuale / attorno alle transizioni dello storyboard / attorno all'impostazione di un UIImage (nome ...) .. Trovato questo thread: ( https://forums.developer.apple.com/thread/61643 )

Se la tua app ha come target iOS 8.4, andrà in crash su iOS 9.0 - 9.2 in Xcode 8 .. qualcosa a che fare con xcassets. L'impostazione dell'obiettivo di distribuzione su 8.2 o inferiore (ho usato 8.0) lo ha risolto per me. Non sto scherzando. Il peggior bug di sempre.


Ciao. Aiuto! Sto sperimentando qualcosa di simile, tranne SOLO in AppStore. Quando creo la mia app direttamente su un iPhone con iOS 9.2.1 non si blocca, né sul simulatore, ma quando scarico la stessa identica versione / build da AppStore si blocca. È stato così anche per te?
Sti

@Sti no, si stava bloccando nella build di debug. Stai usando i dati di base o qualsiasi altra cosa che potrebbe avere un problema durante la sovrascrittura di una vecchia build? Solo un pensiero.
karnett

Buona idea, e sì, sto usando i dati di base in alcune parti dell'app. Ma dopo molti test sono abbastanza sicuro che non abbia nulla a che fare con questo. I dati di base non hanno nulla a che fare con le mie immagini e quasi tutti i miei stack-trace dal mio sistema di segnalazione degli arresti anomali dicono che UIImage (imageNamed :) è il cattivo. Oh, e succede anche con installazioni pulite. Oltre 7000 arresti anomali negli ultimi due giorni, interessando solo iOS 9.0.2 fino a 9.2.1 .. Non iOS 9.3 o versioni successive .. Strano. E non succede quando lo costruisco adesso. Solo AppStore. Impossibile eseguire il debug. Ho inviato un biglietto TSI ad Apple proprio ora.
Sti

Ooh. Questo è appiccicoso. Avevo solo un altro pensiero ... Quale versione di Swift utilizza la versione dell'app store? Penso di averlo sperimentato in Swift 2.2 o 2.3. Non Swift 3. Immagino che tu stia costruendo ora con Swift 3 e non riesci a riprodurlo?
karnett

No, ma è molto interessante che tu lo dica! Abbiamo questa app su App Store da molto tempo. La versione precedente su App Store era scritta in Swift 2.3 e non presentava questo bug. Questa nuova versione su App Store che ho caricato qualche giorno fa (quella che va in crash) ha pochissime ma molto grandi modifiche, inclusa la conversione in Swift 3. Un'altra modifica degna di nota è l'aggiunta di un widget esclusivamente per iOS 10.
Sti

0

Imposta l' obiettivo di distribuzione iOS in Info del tuo progetto e tutti i target sullo stesso valore.

Nel mio caso il mio progetto era impostato su iOS 9.1 e l'obiettivo era impostato su iOS 8.0 e si bloccava su Simulator con iOS 8.4

Ora funziona perfettamente.

PS .: Pulisci il progetto prima di eseguirlo di nuovo.


0

Sebbene la domanda abbia già avuto risposta, la soluzione accettata non funziona per me, poiché non avevo asset a 16 b / ch.

Ho riscontrato che il problema si verificava per le risorse compresse utilizzando l' lzfsealgoritmo (puoi trovare informazioni sulla compressione estraendo le informazioni da Assets.car utilizzando assetutil). Sfortunatamente Xcode IDE non consente agli sviluppatori di modificare l'algoritmo di compressione, tuttavia puoi farlo compilando le risorse manualmente e abbassando l'obiettivo di distribuzione inactool comando.

tl; dr;

  1. Archivio
  2. Decomprimere ipa
  3. Compila asset: puoi trovare il comando del compilatore di asset per il tuo progetto generato da xcode controllando i log di archivio nel navigatore di report Xcode

Comando di esempio:

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. Comprimilo.
  2. Dimettersi
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.