Skip to content
Case study · enterprise · migration

Flutter 3.41 → 3.47. Zero regressions.

A production enterprise app with live users needed a two-step SDK jump, Apple's UIScene lifecycle and a move from CocoaPods to Swift Package Manager — without pausing releases.

SDK3.47
iOSSPM
Regressions0
01 — The problem

Upgrade without stopping the train.

Several plugins had dropped support for the old toolchain, the iOS build relied on CocoaPods specs being retired, and the scene-based lifecycle had an App Store deadline.

The constraint: releases could not stop. Every step had to land on main behind a green build.

02 — What I did

Four steps, all reversible.

  1. Audit the tree

    Every package mapped against the target SDK; blockers flagged first.

  2. Upgrade in steps

    SDK bump, then plugins, each behind a green CI build.

  3. Move iOS to SPM

    Pods replaced with Swift packages; UIScene adopted.

  4. Release and watch

    Staged rollout with crash monitoring before full release.

# checks on every pull requestflutter --version          # 3.47.xflutter analyze --fatal-infosflutter test --coveragexcodebuild -resolvePackageDependencies
03 — Result

Shipped on schedule. No rollback.

The app moved to the current toolchain and stayed releasable at every step. It's the same playbook a Rescue Sprint runs on your app.

Flutter 3.41to3.47
CocoaPodstoSwift PM
AppDelegatetoUIScene

Flutter · Dart · Swift Package Manager · GitHub Actions

04 — More work

Anonymised by default.

Your app next?

Stuck on an old Flutter?

Send the repo. Get the plan in 48 hours.