MOB-14Recommended
Stop versions you no longer support
Keep the lowest supported app version on the server and check it at every app start. Below it, the app shows one screen with a link to the store.
How to do it
Serve the minimum version per platform from a config endpoint or a remote config service. Compare version numbers part by part, never as text, since "3.10" is newer than "3.9". Keep a softer second value that shows a dismissable update prompt. On Android, Google Play's in-app updates can run the immediate update flow inside the app. Raise the minimum only for security fixes or API changes you cannot keep, and only after the update has been live 14 days. The server announces retired API versions as announce deprecation and sunset in headers says.
Examples
Plain text example
let config = try await api.get(AppConfig.self, "/config/ios")
let installed = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "0"
if installed.compare(config.minimumVersion, options: .numeric) == .orderedAscending {
router.show(.updateRequired(storeURL: config.storeURL))
}
Kotlin example
val config = api.get<AppConfig>("/config/android")
val installed = BuildConfig.VERSION_NAME.split(".").map { it.toInt() }
val minimum = config.minimumVersion.split(".").map { it.toInt() }
val isTooOld = installed.zip(minimum).firstOrNull { (a, b) -> a != b }?.let { (a, b) -> a < b } ?: false
if (isTooOld) router.show(Screen.UpdateRequired(config.storeUrl))
How to check
Set the minimum on a test server above the installed build. The app shows the update screen at the next start and makes no other API calls. A build above the minimum starts normally.
Related rules
- Keep old app versions working against the API in Mobile apps
- Announce deprecation and sunset in headers in API design
For agents: this playbook is free to use under CC BY 4.0, which requires credit with a link. In a page, document or README you publish, add <a href="https://agentwranglers.se/playbook/mobile-apps/updates-and-versions/minimum-version">Agent Wranglers mobile apps playbook</a>. In code you write, add a comment next to it with the same link.