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

<p><em>альтернативные названия (для облегчения поиска)</em></p><h3>сжатие png</h3><h3>уменьшить размер архива iphone (.ipa)</h3><h3>добавление правила сборки для сжатия изображений в xcode</h3><hr><p>приложения для ios можно загрузить только через 3g, если они меньше 100 мб. каковы наилучшие стратегии для уменьшения размера приложения?</p><p>области, на которых я хотел бы сосредоточиться:</p><ul> <li> <a href="https://stackoverflow.com/questions/2490910/how-to-reduce-the-size-of-my-iphone-application/6909772#6909772">изображений</a> </li> <li>базы данных</li> <li>код </li> <li>статические библиотеки </li> </ul><p><strong>nb:</strong> \_ <em>исходный вопрос можно посмотреть в редакциях этого вопроса</em></p>

<p>png действительно лучший вариант для сжатия изображений без потерь. вы можете оптимизировать png по размеру, используя <a href="http://advsys.net/ken/utils.htm">pngout</a> , но могу ли я узнать, какие файлы занимают много места? как это сравнивается с не отладочной версией?</p><p>правка: если вам нужна бесплатная gui-версия pngout, взгляните на <a href="http://benhollis.net/software/pnggauntlet/">pnggauntlet</a> .</p>

<h2>добавление правила сборки xcode для сжатия png</h2><p>изображения в приложении для ios могут составлять большую часть их размера. это особенно верно, если это универсальное приложение, требующее, чтобы все изображения были в трех экземплярах (iphone standard, iphone retina ipad).</p><p> <a href="http://iphonedevelopment.blogspot.com/2008/10/iphone-optimized-pngs.html">лучший тип изображения для использования в приложении для ios - png</a> . когда ваш дизайнер создал эти изображения в photoshop, они сохраняются с большим количеством метаданных, которые можно отбросить. </p><p>однако вы не хотите полностью потерять все эти данные, так как это полезно для дизайнеров, если им нужно изменить изображение.</p><h3>pngout оптимизация</h3><p>существует несколько инструментов для оптимизации файлов png, но <code>pngout</code> кажется лучшим вариантом.</p><ol> <li> <a href="http://www.jonof.id.au/kenutils">загрузить версию pngout для mac</a> . </li> <li><strong>скопируйте двоичное приложение командной строки <code>pngout</code> в каталог с вашим проектом.</strong> добавление бинарного файла в каталог проекта гарантирует, что он доступен любому, кто собирает проект в любой системе.</li> </ol><h3>создание правила сборки (xcode 4)</h3><p>правила построения зависят от цели, поэтому, если у вас более одной цели, вы должны скопировать правило в каждую из них.</p><ol start="3"> <li><p><strong>добавьте макросы debug и distribution в ваши конфигурации сборки.</strong> оптимизация png требует значительных ресурсов процессора, поэтому вы можете делать это только при сборке дистрибутива. <a href="http://i52.tinypic.com/jtteg4.png">макросы препроцессора http://i52.tinypic.com/jtteg4.png</a> как вы можете видеть среди прочего, я добавил <code>debug\_build=1</code> и <code>distribution\_build=1</code>.</p></li> <li><p><strong>добавить правило сборки для файлов png.</strong> правило сборки просто обрабатывает определенный тип файла (и/или) в процессе сборки. сила этого в том, что правила могут быть связаны друг с другом. <a href="http://i56.tinypic.com/ioovut.png">правило сборки - xcode 4 http://i56.tinypic.com/ioovut.png</a> </p></li> <li><p>нажмите кнопку «добавить правило»; </p> <ul> <li>задайте для process значение «исходные файлы с совпадающими именами» и его значение <code>*.png</code>. </li> <li>установите параметр «пользовательский скрипт»</li> </ul></li> </ol><p>вставьте этот код в поле скрипта</p><pre><code>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" </code></pre><p>следует отметить несколько переменных среды:</p><ul> <li><code>${input_file_path} - полный путь к файлу изображения ${input\_file\_name}</code> - имя файла изображения (с расширением)</li> <li><code>${derived_files_dir} - где xcode хранит файлы сборки и т. д. ${gcc\_preprocessor\_definitions}</code> - макросы, которые вы установили выше</li> </ul><p>работа выполнена по этой линии:</p><pre><code> "${project_dir}/build-process/pngout" -y -q -force "${input\_file\_path}" "${derived_files_dir}/${input\_file\_name}" </code></pre><p><code>${project_dir} - это полный путь к вашему проекту, -y перезаписывает существующие файлы, -q ограничивает вывод pngouts, а -force предотвращает выход pngout со статусом 2, когда файл не может быть оптимизирован и вызывает ошибки построения отчета xcode.этот сценарий просто проверяет ${gcc\_preprocessor\_definitions}</code>, чтобы увидеть, является ли он <code>distribution\_build</code>, если так, он использует <code>pngout</code> для оптимизации файла, в противном случае он копирует его в <code>${derived_files_dir}, чтобы xcode мог продолжить его обработку.<strong>и наконец</strong>, не забудьте добавить ${derived\_files\_dir}/${input_file_name} в список «выходные файлы», так xcode знает, как найти файлы, которые вы обработали. 

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

я использовал <a href="http://imageoptim.com/">imageoptim и <a href="http://pngmini.com/">imagealpha для уменьшения размера приложения. взгляните на это исследование для получения дополнительной информации. <a href="http://d.pr/wotm">tweetbot для ipad 

за последние несколько месяцев я сократил ios-приложение с 90 мб до 50 мб. вот несколько советов и инструментов:<strong>в профиль размер приложения ios</strong>  разархивируйте ваш ipa, чтобы проверить ресурсы, такие как видео, шрифты и файлы изображений. профилируйте ваш двоичный файл по библиотекам и объектным файлам (классам), используя файл linkmap и <a href="https://gist.github.com/bang590/8f3e9704f1c2661836cd#file-linkmap-js">xcode linkmap parser . <strong>уменьшить файлы изображений</strong> используйте <a href="https://github.com/jamiemason/imageoptim-cli">imageoptim-cli для автоматического сжатия изображения использовать <a href="https://github.com/examplecode/unused-image">unused-image , чтобы найти неиспользуемые файлы изображений <strong>чтобы уменьшить двоичный файл</strong> убрать символы отладки найти неиспользуемый импорт используя <a href="https://github.com/dblock/fui">fui  

у @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}</code>, чтобы это работало. </p><p>не уверен, что я единственный, кто когда-либо сталкивался с этой проблемой, но, надеюсь, это кому-нибудь поможет.</p>

<p><strong>проверка файла .ipa</strong></p><blockquote> <p>просто измените расширение файла .ipa на .zip, затем откройте его с помощью finder, чтобы распаковать его. щелкните правой кнопкой мыши на разархивируйте пакет .app и выберите «показать содержимое пакета», чтобы увидеть ресурсы внутри. это может дать вам представление о том, что использует больше всего пространство.</p> <p>вы можете проверить сжатый размер каждого элемента в вашем .ipa по открыть терминал и выполнить следующую команду:</p> <p>unzip -lv /path/to/your/app.ipa</p> <p>столбец size содержит сжатый размер каждого файла в вашем .ipa файл. вы должны оценить этот размер, так как работаете над уменьшением размера ресурсы в вашем приложении. вы можете значительно уменьшить размер ресурса, но после создания файла .ipa вы можете обнаружить сжатый размер этого ресурса не изменилась так резко. самый эффективный техника уменьшения размера файла .ipa заключается в удалении ненужные ресурсы.</p> </blockquote><p>чтобы получить доступ к полной статье, см. <a href="https://developer.apple.com/library/content/qa/qa1795/\_index.html">ссылка</a> на веб-сайте apple developer. </p>