Добавление правила сборки Xcode для сжатия PNG
Изображения в приложении для iOS могут составлять большую часть их размера. Это особенно верно, если это универсальное приложение, требующее, чтобы все изображения были в трех экземплярах (iPhone Standard, iPhone Retina iPad).
Лучший тип изображения для использования в приложении для iOS - PNG . Когда ваш дизайнер создал эти изображения в Photoshop, они сохраняются с большим количеством метаданных, которые можно отбросить.
Однако вы не хотите полностью терять все эти данные, так как это полезно для дизайнеров, если им необходимо изменить изображение.
PNGOUT Оптимизация
Существует несколько инструментов для оптимизации файлов PNG, но pngout
представляется наилучшим вариантом.
- Загрузить версию pngout для Mac .
- Скопируйте двоичное приложение командной строки
pngout
в каталог с вашим проектом. Добавление двоичного файла в каталог проекта гарантирует, что оно доступно любому, кто создает проект в любой системе.
Создание правила сборки (Xcode 4)
Правила сборки зависят от цели, поэтому, если у вас более одной цели, вы должны скопировать правило в каждую из них.
Добавьте макросы DEBUG и DISTRIBUTION к вашим конфигурациям сборки. Оптимизация PNG довольно интенсивно использует процессор, поэтому вы можете делать это только в сборках дистрибутива. Макросы препроцессора http://i52.tinypic.com/jtteg4.png Как видите, я добавил DEBUG_BUILD=1
и DISTRIBUTION_BUILD=1
.
Добавить правило сборки для файлов PNG. Правило сборки просто обрабатывает файл определенного типа (и / или) в процессе сборки. Сила этого в том, что правила могут быть связаны друг с другом. Правило сборки - Xcode 4 http://i56.tinypic.com/ioovut.png
Нажмите кнопку «Добавить правило»;
- Установите для Process значение «Исходные файлы с совпадающими именами» и его значение
*.png
.
- Установите для параметра «Пользовательский скрипт»
Вставьте этот код в поле скрипта
echo "----------------------------------------------------------------" >> "${DERIVED_FILES_DIR}/pngout-log.txt"
echo "${INPUT_FILE_PATH}" >> "${DERIVED_FILES_DIR}/pngout-log.txt"
echo "${DERIVED_FILES_DIR}/${INPUT_FILE_NAME}" >> "${DERIVED_FILES_DIR}/pngout-log.txt"
echo ${GCC_PREPROCESSOR_DEFINITIONS} >> "${DERIVED_FILES_DIR}/pngout-log.txt"
BUILD=`echo ${GCC_PREPROCESSOR_DEFINITIONS} | grep -o DISTRIBUTION_BUILD`
echo $BUILD >> "${DERIVED_FILES_DIR}/pngout-log.txt"
if [ "${BUILD}" == "DISTRIBUTION_BUILD" ]; then
echo "COMPRESS" >> "${DERIVED_FILES_DIR}/pngout-log.txt"
"${PROJECT_DIR}/build-process/pngout" -y -q -force "${INPUT_FILE_PATH}" "${DERIVED_FILES_DIR}/${INPUT_FILE_NAME}"
else
echo "COPY" >> "${DERIVED_FILES_DIR}/pngout-log.txt"
cp -f "${INPUT_FILE_PATH}" "${DERIVED_FILES_DIR}/${INPUT_FILE_NAME}"
fi
echo "...done." >> "${DERIVED_FILES_DIR}/pngout-log.txt"
Есть несколько переменных среды, которые следует отметить:
${INPUT_FILE_PATH}
- полный путь к файлу изображения
${INPUT_FILE_NAME}
- имя файла изображения (с расширением)
${DERIVED_FILES_DIR}
- где Xcode хранит файлы сборки и т. Д.
${GCC_PREPROCESSOR_DEFINITIONS}
- макросы, которые вы установили выше
Работа выполняется по этой строке:
"${PROJECT_DIR}/build-process/pngout" -y -q -force "${INPUT_FILE_PATH}" "${DERIVED_FILES_DIR}/${INPUT_FILE_NAME}"
${PROJECT_DIR}
- полный путь к вашему проекту, -y
перезаписывает существующие файлы, -q
ограничивает вывод pngout
s и -force
предотвращает выход pngout
со статусом 2, когда файл может ' быть оптимизированным и вызывать ошибки построения отчета Xcode.
Этот сценарий просто проверяет ${GCC_PREPROCESSOR_DEFINITIONS}
, чтобы определить, является ли он DISTRIBUTION_BUILD
, если так, то использует pngout
для оптимизации файла, в противном случае он копирует его в ${DERIVED_FILES_DIR}
, чтобы Xcode мог продолжить его обработку.
Наконец , не забудьте добавить ${DERIVED_FILES_DIR}/${INPUT_FILE_NAME}
в список «Выходные файлы», так Xcode знает, как найти файлы, которые вы обработали.