it-swarm.com.ru

Как уменьшить размер моего приложения для iPhone?

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

Сжатие PNG

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

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


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

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

NB: _ ​​Исходный вопрос можно посмотреть в редакциях этого вопроса

31
Sudharsanan

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

Правка: Если вам нужна бесплатная GUI-версия PNGOUT, взгляните на PNGGauntlet .

6
Paul Lammertsma

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

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

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

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

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

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

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

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

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

  1. Добавьте макросы DEBUG и DISTRIBUTION в ваши конфигурации сборки. Оптимизация PNG требует значительных ресурсов процессора, поэтому вы можете делать это только при сборке дистрибутива. Макросы препроцессора http://i52.tinypic.com/jtteg4.png Как вы можете видеть среди прочего, я добавил DEBUG_BUILD=1 и DISTRIBUTION_BUILD=1.

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

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

    • Задайте для 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 ограничивает вывод pngouts, а -force предотвращает выход pngout со статусом 2, когда файл не может быть оптимизирован и вызывает ошибки построения отчета Xcode.

Этот сценарий просто проверяет ${GCC_PREPROCESSOR_DEFINITIONS}, чтобы увидеть, является ли он DISTRIBUTION_BUILD, если так, он использует pngout для оптимизации файла, в противном случае он копирует его в ${DERIVED_FILES_DIR}, чтобы Xcode мог продолжить его обработку.

И наконец, не забудьте добавить ${DERIVED_FILES_DIR}/${INPUT_FILE_NAME} в список «Выходные файлы», так Xcode знает, как найти файлы, которые вы обработали. 

23
rjstelling

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

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

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

4
Michael Anderson

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

3
Amit Vaghela

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

В профиль Размер приложения iOS 

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

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

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

  • используйте ImageOptim-CLI для автоматического сжатия изображения
  • использовать Unused-image , чтобы найти неиспользуемые файлы изображений

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

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

У @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}, чтобы это работало. 

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

1
btomw

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

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

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

unzip -lv /path/to/your/app.ipa

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

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

0
Murat Yasar