Міграція мобільного додатку на нову версію iOS SDK

З кожним оновленням iOS SDK Apple посилює вимоги, і ваш застосунок може перестати проходити модерацію App Store через застарілі API або відсутність Privacy Manifest. Ми виконуємо міграцію під ключ: проводимо аудит кодової бази, оновлюємо залежності та налаштовуємо всі необхідні декларації. Наша команда бере на себе весь цикл робіт, щоб ви продовжували випускати оновлення без затримок і з упевненістю у відповідності новим правилам.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Міграція мобільного додатку на нову версію iOS SDK

Нативна розробка iOS (Swift/SwiftUI)Середній~3-5 днів
Часті запитання

Зауважте: коли ви зібрали чергову збірку для App Store, через годину прийшов лист: «ITMS-91053: Missing Privacy Manifest». З кожною новою версією iOS SDK Apple відключає старі API і вводить обов'язкові вимоги. Без планової міграції ви ризикуєте залишитись без сабмішенів. Ми часто стикаємося з такими ситуаціями і пропонуємо міграцію під ключ — з аудитом, оновленням та гарантією.

Що реально ламається при зміні SDK

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

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

Приклад 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>
    </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. На великих кодових базах це серйозна робота.

Як проходить процес міграції?

  1. Аудит через 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. Наш підхід з автоматичним аудитом швидший за ручний перегляд коду в 10–15 разів.

    Аналіз сторонніх залежностей Друга проблема — бібліотеки, які не оновлювалися два роки. Чеклист:

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

    Особливий випадок — залежності без Privacy Manifest. Apple вимагає manifests від популярних SDK (Firebase, Crashlytics, Amplitude, Adjust та інші оновили свої пакети). Але для менш відомих бібліотек маніфесту може не бути, і тоді потрібно або форкнути і додати, або позбутися залежності.

    Міграція за рівнями складності

    Категорія змін Трудомісткість
    Заміна UIWebView → WKWebView Середня (змінюється API делегатів)
    Privacy Manifests для кастомного коду Мала (конфігурація)
    Privacy Manifests для сторонніх SDK Залежить від підтримки авторів
    Sendable/actor isolation warnings Висока (архітектурні правки)
    Видалені API (UIAlertView та ін.) Мала (пряма заміна)

Що входить в роботу

  • Повний аудит кодової бази з xcodebuild та виявлення всіх blocked API
  • Налаштування Privacy Manifest для додатка та всіх залежностей
  • Оновлення сторонніх SDK до версій, сумісних з новим iOS SDK
  • Виправлення Sendable/actor isolation warnings
  • Тестування на реальних пристроях з новим iOS
  • Документація змін та рекомендації щодо подальшої підтримки
  • Гарантована підтримка протягом 30 днів після здачі

Як ми тестуємо після міграції?

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 тижні

Вартість розраховується індивідуально, але ви економите на ранньому виявленні проблем — витрати на міграцію завжди нижчі, ніж наслідки блокування релізів. Зв'яжіться з нами для точної оцінки. Досвід міграції більше 50 проєктів гарантує, що ми врахуємо всі підводні камені. Отримайте консультацію по вашій кодовій базі — ми проведемо аудит за один день.

Apple App Store Review Guidelines

Наші компетенції:

Останні роботи

  • Розробка мобільного додатка для компанії FEEDME
    Розробка мобільного додатка для компанії FEEDME
    1010
  • Розробка мобільного додатку для компанії XOOMER
    Розробка мобільного додатку для компанії XOOMER
    903
  • Розробка мобільного додатку для компанії RHL
    Розробка мобільного додатку для компанії RHL
    1332
  • Розробка мобільного додатку для компанії ZIPPY
    Розробка мобільного додатку для компанії ZIPPY
    1180
  • Розробка мобільного додатку для компанії Affhome
    Розробка мобільного додатку для компанії Affhome
    1107
  • Розробка мобільного додатку для компанії FLAVORS
    Розробка мобільного додатку для компанії FLAVORS
    714