Как уменьшение минимальной поддерживаемой версии iOS (deployment target) может снизить размер приложения?

«Как уменьшение минимальной поддерживаемой версии iOS (deployment target) может снизить размер приложения?» — вопрос из категории DevOps, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Снижение iOS Deployment Target позволяет компилятору и линковщику исключить код и ресурсы, необходимые для обратной совместимости, что может уменьшить итоговый размер билда (IPA).

Основные причины:

  1. Условная компиляция и слабые ссылки:

    • Код внутри директив @available(iOS 14, *) или проверок if #available для старых версий может быть исключен.
    • Фреймворки, слабо связанные для старых iOS (Weakly Linked), могут не включаться в билд.
  2. Swift Runtime:

    • Для целевых версий ниже iOS 12.2 Swift runtime библиотеки (~5-10 МБ) встраиваются в каждый IPA.
    • Для версий iOS 12.2 и выше runtime является частью ОС и не дублируется в приложении.
  3. Ресурсы:

    • В Asset Catalogs можно удалить ресурсы для устаревших разрешений (например, изображения @1x для iPhone 3GS/4).
    • Возможно исключение альтернативных реализаций UI для старых iOS.

Пример (Podfile):

platform :ios, '15.0' # Было '11.0'. Позволяет отказаться от fallback-кода для iOS 11-14.

Важно: Эффект не всегда значителен, так как основная бизнес-логика и ресурсы остаются неизменными. Главный выигрыш часто дает исключение Swift runtime для версий <12.2.