Вопрос

Альтернативные названия (для облегчения поиска)

Сжатие PNGS

Уменьшить размер архива iPhone (.ipa)

Добавление правила сборки для сжатия изображений в Xcode


Приложения для iOS можно загружать через 3G только в том случае, если их объем меньше 100 МБ.Каковы наилучшие стратегии для уменьшения размера приложения?

Области, на которых я хотел бы сосредоточиться, это:

ПРИМЕЧАНИЕ: Исходный вопрос можно просмотреть в редакциях этого вопроса

Это было полезно?

Решение

PNG действительно лучший вариант для сжатия изображений без потерь.Вы можете оптимизировать свои PNGS по размеру, используя ПНГУТ, но могу я поинтересоваться, какие конкретно файлы занимают много места?Как это соотносится с выпуском без отладки?

Редактировать:Если вам нужна бесплатная графическая версия PNGOUT, взгляните на ПНГГаунтлет.

Другие советы

Добавление правила сборки Xcode для сжатия PNGS

Изображения в приложении для iOS могут составлять большую часть его размера.Это особенно верно, если это универсальное приложение, требующее, чтобы все изображения были в трех экземплярах (стандартный iPhone, iPhone Retina iPad).

Лучший тип изображения для использования в приложении для iOS - это PNG.Когда ваш дизайнер создавал эти изображения в Photoshop, они сохранялись с большим количеством метаданных, которые можно было отбросить.

Однако вы не хотите полностью терять все эти данные, поскольку это полезно дизайнерам, если им нужно изменить изображение.

Оптимизация PNGOUT

Существует несколько инструментов для оптимизации файлов PNG, но pngout кажется, это лучший вариант.

  1. Загрузите версию pngout для Mac.
  2. Скопируйте двоичное приложение командной строки pngout в каталог с в вашем проекте. Добавление двоичного файла в каталог проекта гарантирует, что он будет доступен любому, кто создает проект в любой системе.

Создание правила сборки (Xcode 4)

Правила построения зависят от конкретной цели, поэтому, если у вас более одной цели, вы должны скопировать правило в каждую из них.

  1. Добавьте макросы ОТЛАДКИ и РАСПРОСТРАНЕНИЯ в свои конфигурации сборки. Оптимизация PNGS требует значительных затрат процессора, и поэтому вы хотите делать это только при сборке дистрибутива. Pre-processor macros Как вы можете видеть, среди прочего я добавил DEBUG_BUILD=1 и DISTRIBUTION_BUILD=1.

  2. Добавьте правило сборки для файлов PNG. Правило сборки просто обрабатывает определенный файл (и /или) типа файла в процессе сборки.Сила этого в том, что правила могут быть соединены воедино. Правило сборки - Xcode 4 http://tinypic.com/images/404.gif

  3. Нажмите кнопку "Добавить правило".;

    • Установите для процесса значение "Исходные файлы с совпадающими именами" и его значение *.png.
    • Установите значение Using в "Пользовательский скрипт"

Вставьте этот код в поле скрипта

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 знает, как найти файлы, которые вы обработали.

Отладочная сборка обычно будет намного больше, чем релизная сборка.Попробуйте выполнить сборку в режиме выпуска.

Есть несколько опций компилятора, которые тоже могут помочь.Хотя не уверен, что используется по умолчанию для режима выпуска iphone.-Ос оптимизирует для меньшего двоичного файла.Существует также опция удаления мертвого кода, которая удалит любой код, который никогда не сможет быть запущен.Также вы могли бы попробовать удалить двоичный файл ..хотя не уверен, работает ли это для двоичных файлов iphone.

Это предполагает, что ваша проблема связана с размером исполняемого двоичного файла, а не с ресурсами изображения.

Я использовал ImageOptim - Настройка изображения и Изображениеальфа для уменьшения размера приложения.Взгляните на это исследование для получения дополнительной информации. Tweetbot для iPad

У @rjstelling есть действительно хороший ответ, и я не мог бы сказать его лучше, но с ним есть одна небольшая проблема.Это не будет работать с локализованными изображениями.Это проблема только в том случае, если вы встраиваете текст в изображения, чего я настоятельно рекомендую никогда не делать, если вы можете этого избежать.Однако, если вам необходимо использовать локализованные изображения, выполните все действия rjstelling, за исключением того, что вместо использования:

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

используйте приведенный ниже код:

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_REGION_PATH_COMPONENT}${INPUT_FILE_NAME}"
else
echo "COPY" >> "${DERIVED_FILES_DIR}/pngout-log.txt"
cp -f "${INPUT_FILE_PATH}" "${DERIVED_FILES_DIR}/${INPUT_FILE_REGION_PATH_COMPONENT}${INPUT_FILE_NAME}"
fi

Обратите внимание, что единственное изменение касается пути к файлу экспорта.Вы должны добавить INPUT_FILE_REGION_PATH_COMPONENT к пути экспорта, чтобы заставить локализацию изображения работать должным образом. INPUT_FILE_REGION_PATH_COMPONENT обычно является пустым, если только не существует локализованной папки для конкретного файла.В таком случае, он предоставляет имя папки и завершающую косую черту, так что вам не нужно этого делать.

Вы также должны изменить свой Output Files настройка на ${DERIVED_FILES_DIR}/${INPUT_FILE_REGION_PATH_COMPONENT}${INPUT_FILE_NAME} для того, чтобы это сработало.

Не уверен, что я единственный, у кого когда-либо была такая проблема, но, надеюсь, это кому-то поможет.

За последние несколько месяцев я сократил размер приложения для iOS с 90 МБ до 50 МБ.Вот несколько советов и инструментов:

Для профилирования размера приложения iOS

  1. разархивируйте свой ipa, чтобы проверить такие ресурсы, как файлы видео, шрифтов и изображений.

  2. Профилируйте свой двоичный файл по библиотеке и объектным файлам (классам), используя файл Linkmap и Анализатор карты ссылок XCode.

Чтобы уменьшить размер файлов изображений

Чтобы уменьшить двоичный файл

  • Удалить символы отладки
  • Найдите неиспользуемый импорт, используя fui

Проверка файла .ipa

Просто измените расширение файла .ipa на .zip, затем откройте его с помощью Finder, чтобы распаковать.Щелкните правой кнопкой мыши на пакете unzipped .app и выберите "Показать содержимое пакета", чтобы увидеть ресурсы внутри.Это может дать вам представление о том, что использует больше всего пространство.

Вы можете проверить сжатый размер каждого элемента в вашем .ipa, открыв терминал и выполнив следующую команду:

распакуйте архив -lv /путь/к/вашему/ приложению.ipa

Столбец size содержит сжатый размер каждого файла в вашем .ipa файле.Вы должны оценить этот размер, когда будете работать над уменьшением размера ресурсов в вашем приложении.Вы можете значительно уменьшить размер ресурса, но после создания файла .ipa вы можете обнаружить, что сжатый размер этого ресурса изменился не так сильно.Наиболее эффективным методом уменьшения размера файла .ipa является удаление ненужных ресурсов.

Чтобы получить доступ к полной версии статьи, смотрите Ссылка с сайта разработчика Apple.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top