Когда я создаю свое приложение с Xcode 8 GM Seed и запускаю его на iOS 9.2 ниже устройства ИЛИ симулятора, я получаю странные сбои EXC_BAD_ACCESS во время запуска приложения или через несколько секунд после запуска приложения. Сбой всегда происходит в другом месте (добавление подпредставления,, [UIImage imageNamed:]
основного метода делегата приложения и т. Д.). Я не получаю этих сбоев, когда запускаю его на iOS 9.3+ или 10, и я не получаю их, когда я создаю с Xcode 7 и запускаю на iOS 9.2 и ниже. Кто-нибудь еще испытывает нечто подобное? Это известная проблема с Xcode 8?
85
Ответы:
См. Принятый ответ https://forums.developer.apple.com/thread/60919.
Вы можете сохранять 16-битные ресурсы как 8-битные с помощью Preview.app
источник
Надеюсь, этот сценарий bash может вам помочь. Входной аргумент - это каталог, содержащий все xcasset-ы вашего проекта. Этот скрипт установит профиль sRGB для всех png. Мне помогло :)
#!/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 "------------------------------"
источник
Мне удалось воспроизвести проблему, и она, похоже, связана с изображениями в каталоге активов. Сообщил об ошибке в Apple (с приложенным образцом проекта)
Репортер об ошибках Apple: 28371396
источник
отредактированный скрипт для преобразования файлов png в правильный формат во всем проекте и с пробелами:
#!/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 "------------------------------"
источник
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)
которая просто преобразует 16-битное изображение в 8-битноета же проблема.
Я не уверен, что это ошибка, но вот мое решение: убедитесь, что ваши изображения не содержат цветовое пространство Adobe RGB (1998).
в xcode
источник
Добавление для всех, у кого есть аналогичная проблема ...
Приложение вылетало на iOS 9.0 - iOS 9.2 из-за того, что казалось случайным / вокруг переходов раскадровки / вокруг установки UIImage (имя ...). Нашел эту ветку: ( https://forums.developer.apple.com/thread/61643 )
Если ваше приложение нацелено на iOS 8.4, оно выйдет из строя на iOS 9.0 - 9.2 в Xcode 8 .. что-то связано с xcasset. Установка цели развертывания на 8.2 или ниже (я использовал 8.0) исправила это для меня. Без шуток. Худшая ошибка на свете.
источник
Установите для цели развертывания iOS в информации вашего проекта и всех целей одинаковое значение.
В моем случае мой Project был установлен на iOS 9.1, а Target был установлен на iOS 8.0 и вылетал на Simulator с iOS 8.4.
Теперь работает отлично.
PS: Очистите проект перед повторным запуском.
источник
Хотя на вопрос уже был дан ответ, принятое решение не работает для меня, так как у меня не было никаких ресурсов 16b / ch.
Я обнаружил, что эта проблема возникла для активов, которые были сжаты с использованием
lzfse
алгоритма (вы можете найти информацию о сжатии, извлекающей информацию из Assets.car, используяassetutil
). К сожалению, Xcode IDE не позволяет разработчикам изменять алгоритм сжатия, однако вы можете сделать это, скомпилировав ресурсы вручную и снизив цель развертывания вactool
команде.tl; dr;
ipa
Пример команды:
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
источник