Миграция мобильного приложения на новую версию iOS SDK

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.
Разработка и поддержка любых видов мобильных приложений:
Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Предлагаемые услуги
Показано 1 из 1 услугВсе 1735 услуг
Миграция мобильного приложения на новую версию iOS SDK
Средняя
~3-5 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1054
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    862
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    445

Миграция мобильного приложения на новую версию iOS SDK

Apple каждый год поднимает минимальный iOS для новых фич и ужесточает требования к SDK на App Store Connect. С 2024 года приложения собранные под iOS SDK 17+ обязаны использовать Privacy Manifests. В 2023 году Apple потребовала минимум iOS 16 SDK для App Store submissions. Задержка с обновлением SDK — это сначала предупреждения в App Store Connect, затем блокировка сабмишена.

Что реально ломается при смене SDK

Deprecated API — самая объёмная часть работы. UIWebView удалён начиная с iOS 15 SDK, приложения с его использованием получают rejection по ITMS-90809. UIAlertView, UIActionSheet, shouldAutorotateToInterfaceOrientation — в iOS 16 SDK эти методы уже не компилируются. Поиск по кодовой базе через Xcode #available + список deprecated из release notes конкретной версии.

Privacy Manifests (iOS 17 SDK) — новое с 2024. Каждая сторонняя зависимость и само приложение должны иметь PrivacyInfo.xcprivacy файл с декларацией используемых API категорий (NSPrivacyAccessedAPITypes): NSUserDefaults, NSFileManager, NSProcessInfo, UIDevice.systemBootTime. Если файл отсутствует — ITMS-91053 предупреждение при сабмите. Стало ошибкой с мая 2024.

Пример PrivacyInfo.xcprivacy:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" ...>
<plist version="1.0">
<dict>
    <key>NSPrivacyAccessedAPITypes</key>
    <array>
        <dict>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>CA92.1</string>
            </array>
        </dict>
    </dict>
    </array>
</dict>
</plist>

Причины (Reasons) — конкретные коды из документации Apple. CA92.1 для UserDefaults означает «хранение настроек, непосредственно управляемых пользователем». Нельзя просто написать любой код — нужно выбрать из утверждённого списка. Если нет подходящего — писать в Apple через App Review, что само по себе квест.

Swift Concurrency и Sendable — в iOS 16+ SDK включены расширенные проверки Sendable и actor isolation. Проект, собиравшийся без предупреждений на старом SDK, на новом выдаёт десятки warnings вида Capture of non-Sendable type 'SomeModel'. С iOS 17 SDK часть из них стала ошибками при strict concurrency checking: complete. На крупных кодовых базах это серьёзная работа.

Порядок работы с миграцией

Начинаем с аудита через xcodebuild:

xcodebuild -workspace MyApp.xcworkspace \
           -scheme MyApp \
           -destination 'generic/platform=iOS' \
           -sdk iphoneos17.0 \
           build 2>&1 | grep -E "error:|warning:" | sort | uniq -c | sort -rn | head -50

Это даёт количественную картину: сколько ошибок, какие категории, топ-50 по частоте. На 300k строках кода типичная картина при прыжке с iOS 14 SDK на iOS 17 SDK — 15–40 errors и 100–300 warnings.

Сторонние зависимости — вторая проблема. Библиотека, не обновлявшаяся 2 года, может не поддерживать новый SDK. Чеклист:

  • CocoaPods: pod outdated для списка устаревших зависимостей
  • SPM: проверяем Package.resolved, ищем библиотеки без свежих тегов на GitHub
  • Зависимости с устаревшим deployment target — конфликт с новым минимальным iOS приложения

Особый случай — зависимости без Privacy Manifest. С мая 2024 Apple требует manifests от популярных SDK (Firebase, Crashlytics, Amplitude, Adjust и другие обновили свои пакеты). Но для менее известных библиотек манифеста может не быть, и тогда нужно или форкнуть и добавить, или избавиться от зависимости.

Миграция по уровням сложности:

Категория изменений Трудоёмкость
Замена UIWebViewWKWebView Средняя (меняется API делегатов)
Privacy Manifests для кастомного кода Малая (конфигурация)
Privacy Manifests для сторонних SDK Зависит от поддержки авторов
Sendable/actor isolation warnings Высокая (архитектурные правки)
Удалённые API (UIAlertView и др.) Малая (прямая замена)

Тестирование после миграции

Smoke-тесты на реальном устройстве с новым iOS — обязательно. Simulator и реальное устройство могут вести себя по-разному при смене SDK, особенно в части URLSession timeouts, push notifications, background execution.

Crashlytics или Firebase Crash Reporting — после релиза мониторим новые crash-сигнатуры в первые 24–48 часов. SDK-миграция иногда приносит краши в edge cases, не покрытых тестами.

Ориентиры по срокам

Сроки зависят от размера кодовой базы, количества deprecated API и состояния зависимостей:

Проект Срок
Небольшое приложение (< 50k строк, мало зависимостей) 1–2 дня
Средний проект (50–150k строк) 3–5 дней
Большой проект с legacy Obj-C кодом 1–2 недели