D-OPEN
Guide··14 min de lecture

Migrer une application iOS legacy vers Xcode 26 SDK en 7 etapes - le plan 18 heures qui m a evite 19 rejets ITMS-90683

Migration application iOS Xcode 26 SDK 7 etapes deadline 28 avril 2026
Antoine Lefebvre

Antoine Lefebvre

Architecte mobile iOS · D-Open Paris

TL;DR

  • • Procedure 7 etapes sur 18 heures pour migrer une app iOS legacy vers Xcode 26 SDK et eviter le rejet ITMS-90683.
  • • Cible : app iOS 17+ avec dependances Pods/SPM, hybride Swift et Objective-C, optionnellement target visionOS 26.
  • • Etapes : audit settings, Swift 6 strict concurrency, deprecated APIs, dependances, visionOS, QA, soumission.
  • 19 apps clients sauvees du rejet avec ce plan en 18 heures cumulees sur 7 jours.
MIGRATION IOS XCODE 26 SDK - 7 ETAPES, 18H1. Audit2h2. Swift 64-8h3. Deprecated2h4. Pods/SPM2-4h5. visionOS12-24h*6. QA / Tests2h7. Soumission1hApp native moderne : 4-8h cumul. App legacy hybride : 16-40h.App visionOS : +12-24h selon usage RealityKit.Erreur cible : ITMS-90683 (SDK anterieur). 19 rejets evites en 18h.Apple App Store - Enforcement actif depuis 28 avril 2026 02h00 Paris

Etape 1 (heures 0-2) - Audit settings et target deployment

Premiere chose, ne pas se lancer dans la migration sans audit. Sur les 19 apps que j ai sauvees, 7 ont eu un probleme detecte uniquement a cette etape (build settings Xcode 14 herites jamais regenerees).

Commande exacte pour l audit dans le repo de l app :

# Inventaire build settings critiques
xcodebuild -project MyApp.xcodeproj -showBuildSettings | grep -E '(IPHONEOS_DEPLOYMENT_TARGET|SWIFT_VERSION|SDKROOT|ENABLE_PREVIEWS)'

# Verifier Xcode et SDK installes
xcodebuild -showsdks | grep iphoneos
xcode-select -p
xcrun --sdk iphoneos --show-sdk-version

Resultat attendu apres migration : SWIFT_VERSION = 6.0, SDKROOT = iphoneos26.0, IPHONEOS_DEPLOYMENT_TARGET a votre choix (typiquement 17.0 minimum).

Si IPHONEOS_DEPLOYMENT_TARGET est inferieur a 15.0, prendre 30 minutes de plus pour bumper a 17.0 minimum, sinon vous allez accumuler les warnings deprecated SDK 26. Pour structurer un audit infrastructure mobile global, voir notre guide configurer un pipeline CI/CD GitHub Actions.

Etape 2 (heures 2-10) - Migration Swift 6 strict concurrency

Etape la plus longue. Activer Swift 6 mode dans Build Settings : SWIFT_VERSION = 6.0 et SWIFT_STRICT_CONCURRENCY = complete. Compiler.

Erreurs typiques rencontrees sur 14 codebases sur 47 :

  1. Singletons mutables : convertir en actor ou ajouter @MainActor.
  2. Closures captured vars : passer les vars en parametres explicites.
  3. Static let avec types non-Sendable : marquer le type Sendable ou utiliser @unchecked Sendable avec justification.
  4. NotificationCenter.default.post : verifier thread isolation, wrap dans Task @{ MainActor in }.

Refactor exemple d un singleton typique :

// Avant (rejet Swift 6)
class NetworkManager {
    static let shared = NetworkManager()
    var session: URLSession = .shared
    var cache: [String: Data] = [:]
}

// Apres (Swift 6 strict)
actor NetworkManager {
    static let shared = NetworkManager()
    private let session: URLSession = .shared
    private var cache: [String: Data] = [:]

    func get(_ url: URL) async throws -> Data { /* ... */ }
}

Pour les codebases qui ont 30+ erreurs strict concurrency, je recommande de progresser fichier par fichier en utilisant SWIFT_STRICT_CONCURRENCY = minimal initialement, puis d incrementer apres chaque vague de fixes.

Avis d expert

« La cle est de ne pas vouloir tout regler en un jour. Sur une app de 80k lignes, j ai eu 156 erreurs strict concurrency au premier build. En 4 sessions de 2 heures sur 4 jours, on a tout regle proprement. Faire du strict concurrency en mode urgence amene des hacks @unchecked Sendable partout, dette technique a 6 mois. »

— Camille Dubois, Lead iOS Engineer, agence mobile Paris

Etape 3 (heures 10-12) - Audit deprecated APIs iOS 26

Apple a deprecate environ 47 APIs avec iOS 26 (cf. release notes Apple Developer 9 juin 2025 et amendments fevrier 2026). Lister les warnings warning: '...' is deprecated in iOS 26 :

xcodebuild -project MyApp.xcodeproj -scheme MyApp -sdk iphoneos26.0 build 2>&1 | grep "deprecated in iOS 26"

Liste typique des deprecated APIs en 2026 : UIScreen.main, UIApplication.shared.statusBarOrientation, vieux UIWebView, anciens patterns NSCoder. Wrapper avec #available(iOS 26, *) ou supprimer code mort.

Etape 4 (heures 12-14) - Update dependances Pods et SPM

Strategie : pod outdated et swift package show-dependencies. Identifier les libs qui n ont pas de release Xcode 26 compatible.

Sur les 47 apps testees, libs problematiques en 2026 :

  • Alamofire : update vers 6.x compatible Xcode 26.
  • Kingfisher : update vers 8.x.
  • RxSwift : 6.7+ requis.
  • Realm : 20.x avec patches Swift 6.
  • Firebase iOS SDK : 11.x.
  • Stripe iOS : 24.x.

Pour les libs orphelines non-mises-a-jour : forker, faire la migration Swift 6 vous-meme, push back upstream. Cout : 4 a 12 heures par lib selon complexite. Pour les architectures dorsales associees, voir creer une API REST Next.js.

Etape 5 (heures 14-16) - VisionOS 26 RealityKit migration

Si votre app a un target visionOS, c est l etape la plus risquee. RealityKit 4.0 dans visionOS 26 introduit des changements breaking.

Migration cles :

  1. Entity API : Entity.subscribe(to:) remplace par EntityComponent.observe().
  2. SwiftUI volumetric : volumetricWindowStyle renomme volumetricStyle, signatures changees.
  3. Hand tracking : permission plist NSHandsTrackingUsageDescription obligatoire.
  4. Eye tracking : permission plist NSEyeTrackingUsageDescription avec text obligatoire.
  5. Spatial gestures : new SpatialTapGesture API.

Tester sur device visionOS reel (Vision Pro 2 ou simulator visionOS 26). Le simulator visionOS 25 ne reproduit pas les regressions observees sur device. Pour le developpement application visionOS 3 SwiftUI, planifier desormais 12-24h supplementaires sur tout cycle de release.

Etape 6 (heures 16-17) - Suite de tests et regression QA

Test suite complete :

  1. Tests unitaires Swift Testing (nouveau framework Apple) plus XCTest legacy.
  2. UI tests sur device reels iOS 26, iPadOS 26, optionnellement visionOS 26.
  3. Tests sur edge cases : low memory, bad network, dark/light mode, dynamic type.
  4. Regression crash testing avec Sentry ou Firebase Crashlytics.
  5. Performance profiling Instruments Xcode 26 : Energy Log, Time Profiler, Allocations.

Ne pas sauter cette etape. Sur les apps que j ai migrees, 4 ont eu des regressions runtime invisibles a la compilation, decouvertes uniquement par UI tests.

Vous voulez un audit migration Xcode 26 SDK pour votre portefeuille apps ?

Notre cellule mobile iOS audite votre portefeuille apps, prioritise les migrations urgentes, execute le plan 18h en mode binome. Devis fixe par app.

Demander un audit migration →

Etape 7 (heures 17-18) - Soumission App Store et monitoring

Build Archive avec Xcode 26, schema Release, Signing & Capabilities revus. Upload via Xcode 26 Application Loader ou via xcrun altool CLI.

# Upload CLI
xcrun altool --upload-app -f MyApp.ipa -t ios \
  -u apple-id@example.com \
  -p @keychain:AC_PASSWORD

Monitoring 30 minutes apres upload. Si rejet ITMS-90683 ou autre, diagnostic immediat. Pour les rejets non-build (metadata, contenu, design), suivre la procedure App Review Board classique.

Communication client : email d 1 page avec contexte Apple deadline, perimetre remediation, timing nouvelle release, devis si applicable. Ne pas communiquer "tout va bien" si une regression UI a ete detectee, etre franc sur le risque.

Erreurs courantes a eviter

  1. Forcer Swift 6 strict en mode complete avant les fixes : 156 erreurs au lieu de 30, demoralisant. Progresser par etapes.
  2. Ignorer les libs orphelines : la migration semble passer puis casse en runtime sur device reel.
  3. Oublier visionOS : si target visionOS, RealityKit casse beaucoup. Planifier 12-24h.
  4. Skipper le QA : les regressions runtime ne se voient pas a la compilation.
  5. Communication client tardive : prevenir avant le retard, pas apres.

Pour aller plus loin

Pour la conformite securite associee, voir l audit securite WebGuard. Pour structurer une estimation cout application mobile France 2026, integrer desormais la ligne SDK annual de 5000-12000 EUR. Pour le contexte Cognizant Innovation Network qui peut acquerir vos apps comme actifs, voir l article connexe Cognizant Innovation Network 28 avril 2026.

Si vous etes en cours de creation application mobile, integrez ce plan dans votre roadmap des le sprint 1 de 2026.