Xcode 8 build crash на iOS 9.2 и ниже



когда я создаю свое приложение с помощью Xcode 8 GM Seed и запускаю его на устройстве или симуляторе iOS 9.2 ниже, я получаю странные сбои EXC_BAD_ACCESS во время запуска приложения или через несколько секунд после запуска приложения. Сбой всегда происходит в другом месте (добавление подвида,[UIImage imageNamed:], основной метод делегата приложения и т. д.). Я не получаю эти сбои, когда я запускаю его на iOS 9.3+ или 10, и я не получаю их, когда я построить С Xcode 7 и работать на iOS 9.2 и ниже. Кто-нибудь еще испытывает что-то похоже? Это известная проблема с Xcode 8?

618   8  

8 ответов:

смотрите принятый ответ https://forums.developer.apple.com/thread/60919

вы можете сохранить 16-битные активы как 8-битные с предварительным просмотром.приложение

Как решить " ошибка ITMS-90682: недопустимый пакет-каталог активов at ' полезная нагрузка / XXXXX / активы.car ' не может содержать 16-битные или P3 активы, если приложение поддерживает iOS 8 или более ранней версии."

С Xcode 8 GM эта ошибка возникнет, если вы включаете 16-бит или P3 активы в представлении приложения таргетинг iOS выпускается раньше, чем iOS 9.3. Если для вашего приложения требуется широкая цветовая функциональность, вы должны изменить цель развертывания на iOS 9.3 или более позднюю версию. Если ваше приложение не требуется широкая цветовая функциональность, и вы хотите развернуть ее на более старых версии iOS, то вы должны заменить все 16-разрядные или P3 активы с 8-битные sRGB активы. Вы можете найти 16-разрядные или P3 активы, запустив "assetutil" в каталоге активов, указанном в сообщении об ошибке iTunes Connect. Следующие шаги описывают процесс:

  1. Создать копию .файл. В Xcode Organizer (Xcode->Window->Organizer) выберите архив для проверки, нажмите кнопку "Экспортный...", и выберите "Экспорт для корпоративного или специального развертывания". Это позволит создать локальную копию .файл для вашего приложения.

  2. найти .файл и изменить его расширение .застежка-молния.

  3. расширить .сжатый файл. Это приведет к созданию папки полезных данных содержащий .пакет приложений.

  4. откройте терминал и измените рабочий каталог на верхний уровень вашего .app bundle cd path/to/Payload / your.приложение

  5. используйте инструмент найти, чтобы найти активы.автомобильные файлы в вашем .набор приложений, как показано ниже: найти . - имя ' активы.автомобиль'

  6. используйте инструмент assetutil для поиска любых 16-разрядных или P3 активов в каждом активе.автомобиль ваше приложение имеет, как показано ниже. :sudo xcrun --sdk iphoneos assetutil --info /path/to/a/Assets.car > /tmp/Assets.json

  7. Проверьте полученный/tmp / Assets.json и искать любое содержимое, содержащее "DisplayGamut": "P3"и связанное с ним "имя". Эта воля имя вашего набора изображений, содержащего один или несколько 16-разрядных или P3 активы.

  8. замените эти активы на 8-разрядные / sRGB активы, а затем перестроить приложение.

обновление: если ваша цель развертывания установлена на 8.3 или 8.4 и у вас есть каталог активов, то вы получите это такое сообщение об ошибке, даже если вы не на самом деле есть 16-битные или P3 активов. В этом случае вам нужно будет либо ниже ваша цель развертывания-8.2 или переместите ее до 9.x.

Я надеюсь, что этот сценарий bash может помочь вам. Входной аргумент-это каталог, который содержит все xcassets вашего проекта. Этот скрипт установит профиль sRGB для всех png. Это мне помогло:)

#!/bin/bash
DIRECTORY=
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 Bug Reporter: 28371396

отредактированный скрипт для преобразования файлов png в правильный формат во всем проекте и с пробелами:

#!/bin/bash
DIRECTORY=
echo "------------------------------"
echo "Passed Resources with xcassets folder argument is <$DIRECTORY>"
echo "------------------------------"
echo "Processing asset:"

find "$DIRECTORY" -name '*png' -print0 | while read -d $'' file; 
do 
    echo "---------$file"
    sips -m "/System/Library/Colorsync/Profiles/sRGB Profile.icc" "$file" --out "$file"
done

echo "------------------------------"
echo "script successfully finished"
echo "------------------------------"

тот же вопрос.

Я не уверен, что это ошибка, но вот мое решение : убедитесь, что ваши активы изображения без Adobe RGB (1998) colorspace

в 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.. что-то связанное с xcassets. Установка цели развертывания на 8.2 или ниже (я использовал 8.0) исправила это для меня. Нет ребячество. Худшая ошибка когда-либо.

установить цель развертывания iOS внутри Info вашего проекта и всех целей к тому же значению.

в моем случае мой проект был установлен до iOS 9.1 и цель была определена в iOS 8.0 и врезался на тренажере с iOS 8.4

теперь он работает отлично.

PS. Очистить проект перед повторным запуском.

хотя вопрос уже был дан ответ, принятое решение не работает для меня, так как у меня не было никаких активов 16b/ch.

я обнаружил, что проблема появилась на активы, которые были сжаты с помощью lzfse алгоритм (вы можете найти информацию о сжатии извлечения информации из активов.автомобиль с помощью assetutil). К сожалению, Xcode IDE не позволяет разработчикам изменять алгоритм сжатия, однако вы можете сделать это путем компиляции ресурсов вручную и снижения цели развертывания в .

tl; dr;

  1. архиве
  2. распакуйте ipa
  3. Compile assets - вы можете найти команду компилятора активов для вашего проекта, созданного xcode, проверив архивные журналы в навигатор отчетов Xcode

командной например:

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. сжать его.
  2. уйти

Comments

    Ничего не найдено.