Ответ
Снижение iOS Deployment Target позволяет компилятору и линковщику исключить код и ресурсы, необходимые для обратной совместимости, что может уменьшить итоговый размер билда (IPA).
Основные причины:
-
Условная компиляция и слабые ссылки:
- Код внутри директив
@available(iOS 14, *)или проверокif #availableдля старых версий может быть исключен. - Фреймворки, слабо связанные для старых iOS (
Weakly Linked), могут не включаться в билд.
- Код внутри директив
-
Swift Runtime:
- Для целевых версий ниже iOS 12.2 Swift runtime библиотеки (~5-10 МБ) встраиваются в каждый IPA.
- Для версий iOS 12.2 и выше runtime является частью ОС и не дублируется в приложении.
-
Ресурсы:
- В Asset Catalogs можно удалить ресурсы для устаревших разрешений (например, изображения
@1xдля iPhone 3GS/4). - Возможно исключение альтернативных реализаций UI для старых iOS.
- В Asset Catalogs можно удалить ресурсы для устаревших разрешений (например, изображения
Пример (Podfile):
platform :ios, '15.0' # Было '11.0'. Позволяет отказаться от fallback-кода для iOS 11-14.
Важно: Эффект не всегда значителен, так как основная бизнес-логика и ресурсы остаются неизменными. Главный выигрыш часто дает исключение Swift runtime для версий <12.2.