Lorsque je crée mon application avec Xcode 8 GM Seed et que je l'exécute sur un appareil ou un simulateur iOS 9.2 ci-dessous, j'obtiens d'étranges plantages EXC_BAD_ACCESS lors du démarrage de l'application ou quelques secondes après le lancement de l'application. Le crash se produit toujours à un endroit différent (ajout d'une sous-vue, [UIImage imageNamed:]
méthode principale du délégué d'application, etc.). Je ne reçois pas ces plantages lorsque je l'exécute sur iOS 9.3+ ou 10 et je ne les reçois pas lorsque je construis avec Xcode 7 et que je fonctionne sur iOS 9.2 et versions antérieures . Quelqu'un d'autre a-t-il vécu quelque chose de similaire? Est-ce un problème connu avec Xcode 8?
85
Réponses:
Voir la réponse acceptée https://forums.developer.apple.com/thread/60919
Vous pouvez enregistrer des actifs 16 bits au format 8 bits avec Preview.app
la source
J'espère que ce script bash peut vous aider. L'argument d'entrée est un répertoire contenant tous les xcassets de votre projet. Ce script définira le profil sRGB sur tous les png. Ça m'a aidé:)
#!/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 "------------------------------"
la source
J'ai pu reproduire le problème et il semble lié aux images du catalogue d'actifs. A déposé un bug avec Apple (avec exemple de projet joint)
Apple Bug Reporter: 28371396
la source
script édité pour convertir les fichiers png au format correct dans tout le projet et avec des espaces blancs:
#!/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 "------------------------------"
la source
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)
qui ne fera que convertir une image 16 bits en 8 bitsmême problème.
Je ne sais pas s'il s'agit d'un bogue mais voici ma solution: assurez-vous que vos ressources image ne contiennent pas d'espace colorimétrique Adobe RGB (1998)
dans xcode
la source
Ajout pour toute autre personne ayant un problème similaire ...
L'application plantait sur iOS 9.0 - iOS 9.2 sur ce qui semblait aléatoire / autour des transitions de Storyboard / autour de la définition d'une UIImage (nom ...) .. J'ai trouvé ce fil: ( https://forums.developer.apple.com/thread/61643 )
Si votre application cible iOS 8.4, elle plantera sous iOS 9.0 - 9.2 dans Xcode 8 .. quelque chose à voir avec xcassets. La définition de la cible de déploiement sur 8.2 ou moins (j'ai utilisé 8.0) l'a corrigé pour moi. Sans blague. Le pire bug de tous les temps.
la source
Définissez la cible de déploiement iOS dans les informations de votre projet et toutes les cibles sur la même valeur.
Dans mon cas, mon projet a été défini sur iOS 9.1 et la cible a été définie sur iOS 8.0 et plantait sur Simulator avec iOS 8.4
Maintenant, cela fonctionne parfaitement.
PS: Nettoyez le projet avant de le relancer.
la source
Bien que la question ait déjà été répondue, la solution acceptée ne fonctionne pas pour moi, car je n'avais aucun actif 16b / ch.
J'ai trouvé que ce problème est apparu pour les actifs compressés à l'aide d'un
lzfse
algorithme (vous pouvez trouver des informations sur la compression en extrayant des informations à partir d'Assets.car en utilisantassetutil
). Malheureusement, Xcode IDE ne permet pas aux développeurs de modifier l'algorithme de compression, mais vous pouvez le faire en compilant manuellement les actifs et en abaissant la cible de déploiement dans laactool
commande.tl; dr;
ipa
Exemple de commande:
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
la source