Пропуск этапа сборки CompressResources для приложений Xcode iPhone

Можно ли настроить проект iPhone Xcode, чтобы пропустить этап сборки CompressResources?

В частности, я хочу пропустить этап, на котором он запускает pngcrush для всех моих файлов .png, многие из которых не переживают опыт в форме, которую мое приложение может читать.

Изменить: используемая версия pngcrush создает файлы png, которые содержат нестандартный «обязательный частный» блок, который явно предотвращает декодирование. Я модифицировал свой png-ридер для обработки этих файлов, но мне все же нужен метод для каждого проекта, позволяющий пропустить этот шаг. Одним из других побочных эффектов pngcrush является то, что он не сохраняет значение цвета прозрачных пикселей, поэтому текстуры с альфа-редактированием показывают окантовку на меньших уровнях MIP.

Формат iphone png описан здесь: https://web.archive.org/web/20110519164905/http://modmyi.com/wiki/index.php/Iphone_PNG_images. Короче,

  • Пропустить блок CgBI
  • Пропустить заголовки zlib
  • Поменять местами BGR на порядок каналов RGB

Изменить. Похоже, он также предварительно умножает альфа, поэтому:

  • Разделить на альфа

person James    schedule 07.10.2008    source источник
comment
Если кому-то интересно, почему Xcode пытается оптимизировать PNG и что именно он делает, Джефф Ламарч написал фантастическое объяснение. Помимо объяснения того, почему полезны перестановка байтов и предварительное умножение альфа-канала, он также рассказывает о том, что происходит, когда вы используете другие форматы изображений, помимо PNG. iphonedevelopment.blogspot.com/2008/10/   -  person Clint Harris    schedule 28.05.2009
comment
В своих тестах я обнаружил, что предварительное умножение происходит в функциях загрузки Core Graphics. Отключение сжатия в Xcode не повлияло.   -  person Plumenator    schedule 01.03.2011
comment
Я обновил ссылку на вики ссылкой на archive.org, но обратите внимание, что он, по-видимому, также доступен на японском языке по адресу wiki.onakasuita.org/pukiwiki/?PNG   -  person Cœur    schedule 04.03.2019


Ответы (5)


Вы можете добавить «IPHONE_OPTIMIZE_OPTIONS = -skip-PNGs» в настройки вашего проекта, чтобы предотвратить искажение png, но будьте осторожны с этим, вам может потребоваться отдельно оптимизировать значок и Default.png.

person scoopr    schedule 23.10.2008

Скрипт iphoneos-optimize преобразует файлы PNG в нестандартный формат, оптимизированный для отображения на iPhone. Скрипт преобразует любые файлы с расширением png, которые он найдет внутри вашего пакета приложений.

У меня была аналогичная проблема, и я решил ее, присвоив моему файлу расширение _png (то есть с префиксом подчеркивания). iphoneos-optimize проигнорировал его и оставил обычный файл PNG. Если вы можете справиться с этим таким образом, это, вероятно, намного безопаснее, чем возиться со сценариями сборки.

person benzado    schedule 07.10.2008
comment
Это сработало, спасибо! Обратите внимание, что когда я попробовал это, я все еще видел (незначительные) полосы градиента (проблема, которую я пытался исправить) в симуляторе, но не на телефоне. - person MrDatabase; 02.01.2010

  • Открыть настройки сборки
  • В разделе "упаковка" выберите "Сжать файлы PNG".
  • Выберите "НЕТ"
person sashmackinnon    schedule 21.10.2011

Если вы посмотрите на результат сборки, вы увидите, что на этапе CompressResources выполняется сценарий /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/iphoneos-optimize. Похоже, это просто сценарий оболочки, который запускает pngcrush и компилирует списки в двоичный формат. Вероятно, вы могли бы изменить этот сценарий, чтобы он не запускал pngcrush.

Обратите внимание, что кто-то в этой ветке заметил, что если они не запустили свою icon через pngcrush он не отображался на телефоне.

Интересно, что версия pngcrush в каталоге скрипта имеет аргумент -iphone. Кто-нибудь знает, стандартно ли это или что-то Apple просто поставляет со своей сборкой?

person jblocksom    schedule 07.10.2008
comment
В iPhone используется нестандартный формат PNG, оптимизированный для более быстрого отображения на оборудовании. Где-то в сети есть пара скриптов, которые не оптимизируют PNG, восстановленные из приложений для iPhone. - person benzado; 07.10.2008

Это может быть совсем другая проблема. Во многих случаях проблема связана с именованием и решается очень легко.

прочтите это: http://cocoapi.wordpress.com/2009/03/22/iphone-images-not-appearing-in-real-iphone-this-is-why/

person Shai Wininger    schedule 22.03.2009