25.5 · Backward-compatible change, deployment targets and device requirements
At any moment several versions of your app are in the wild, talking to one backend and reading data written by their neighbours. Every change has to be safe for the versions around it, not just the newest.
Mental model. Assume old and new will meet: old apps reading new data, new apps reading old data, and one server talking to both.
Changing data and APIs safely
Expand and contract, tolerant readers and forward-only migrations.
- How do you make schema, API and data changes backward compatible: expand and contract, tolerant readers, forward-only migrations and minimum versions?
You cannot update all clients at once, and you cannot roll back a migrated local database, so change things in a way that works for the versions on both sides.…
Targets and capabilities
Deployment targets, availability checks and required device capabilities.
- What do the deployment target, availability checks and required device capabilities decide, and how do you choose which OS versions to support?
Two versions matter in every build. The SDK you compile against (the newest, from the Xcode you use) decides which APIs exist for the compiler; the deployment…
More in App Store & release engineering
- 25.1 · Code signing, provisioning and what each file is for
- 25.2 · CI/CD tools, versioning and designing the pipeline
- 25.3 · TestFlight, phased release, App Review and rollback
- 25.4 · Feature flags, remote config and the release train
- 25.6 · Reading profiles and signatures, signing order and API keys
- 25.7 · What a build leaves behind: archives, binaries, dependencies and tests
- 25.8 · Pipelines that lie, build numbers, hotfix branches and rollout statistics