Большинство приложений, с которыми я сталкивался, которые превышают 10 миллионов, связаны с ресурсами, часто изображениями и аудио. Правильно подобрать их размер очень важно. Обратите внимание, что iPhone автоматически выполняет некоторую компрессию для вас при комплектации для устройства, поэтому размер вещей в Simulator может радикально отличаться от размера на устройстве.
Как и во всех упражнениях по оптимизации, вы хотите сначала создать надежную и разумную систему, а затем сосредоточить свои усилия по оптимизации на тех деталях, которые вызывают самые большие проблемы. Я использую du
для этого:
- Сборка устройства в версии
- Перейти к сборке / Release-iphoneos / .app
du -ak | sort -rn | head
Это даст вам список того, где находятся лучшие вещи. Эта информация находится в килобайтах, но округляется до следующего блока (4 килобайта на Mac). Но вы просто ищете что-то большое, а не определяете точный размер всего.
Ищите особенно те вещи, которые копируются в ваши Ресурсы, которых не должно быть. Иногда появляются забавные вещи, особенно документация, которую вы добавили в проект. Проверяя это, я замечаю, что мой собственный шаблон проекта копирует файлы xcconfig в пакет (нужно исправить это ...)
Если у вас много локализованных NIB, то вы можете рассмотреть возможность не локализовать NIB, а использовать IBOutlet UILabels. Не локализуйте NIB, если нет фактически локализованного текста. Тот факт, что вы локализуете один NIB, не означает, что вам нужно локализовать все из них.
Как правило, настройки сборки для iPhone уже агрессивны в уменьшении размера, так что я бы не стал возиться с этим, не исследуя то, что вы меняете.
Обращайте внимание на классы Objective C со многими методами, которые вы никогда не вызываете. Objective-C является динамическим, поэтому вы не можете выполнять разбор мертвого кода, как в C. Нет никакого способа узнать во время компиляции, может ли селектор использоваться во время выполнения. Поэтому, если у вас есть предметы, в которых есть кухонная раковина «на всякий случай», вы можете их раздеть. Но, как правило, мы не говорим о большом количестве места по сравнению с одним аудиофайлом. Я упоминаю об этом только в редком случае, когда у вас есть действительно огромный объект, который вы связываете только для некоторого метода класса или константы или тому подобного.