Подтвердить что ты не робот

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

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

Сжатие PNG

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

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


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

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

NB: Оригинальный вопрос можно просмотреть в версиях этого вопроса

4b9b3361

Ответ 1

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

Изменить: если вы хотите получить бесплатный графический интерфейс PNGOUT, посмотрите PNGGauntlet.

Ответ 2

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

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

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

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

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

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

  • Загрузите версию Mac pngout.
  • Скопировать двоичное приложение командной строки 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. Нажмите кнопку "Добавить правило";

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

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

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

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

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

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

Профиль профиля iOS

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

  • Профилируйте свой двоичный файл библиотекой и объектными файлами (классами) с помощью файла Linkmap и XCode Linkmap Parser.

    /li >

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

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

Сократить двоичный файл

  • Отладить отладочные символы
  • Найти неиспользуемые импорты с помощью fui

Ответ 7

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

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

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

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

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

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