Quick answer: Crashes on specific OS versions come from differences between OS versions: changed or deprecated APIs, behavior changes, OS-specific bugs, and features available on some versions but not others. Your code hits a difference on untested versions.
Crashes that hit only certain OS versions are common because operating systems change between versions, and players run many. Here's what causes crashes on specific OS versions.
Why OS Versions Differ Enough to Crash
Operating systems change between versions, new APIs, deprecated features, behavior changes, so a crash on a specific OS version means your code hits a difference that version has.
- Changed or deprecated APIs, an API your game uses that changed or was removed in a version
- Behavior changes, the OS handling something differently in a particular version
- OS-specific bugs, defects in a specific OS version that affect your game
- Features unavailable on some versions, a capability your code assumes that older (or newer) versions lack
- New restrictions, newer OS versions adding permission or security restrictions that break old behavior
- Compatibility issues, your game built or targeting assumptions that don't hold on some versions
The bug is in your code's interaction with a particular OS version's behavior, so it crashes on versions with that difference and not others.
Why You Don't See Them
You test on certain OS versions, so a crash specific to a version you don't run won't happen for you. OS-version-specific crashes are invisible from your testing unless you test every version players use, which is impractical, so capturing from the field is needed.
Bugnet captures crashes tagged by OS version from real players, so OS-version-specific crashes surface with the version context. Seeing that crashes cluster on a particular OS version is the clue that it's a version-specific issue and which version.
Finding and Fixing OS-Specific Crashes
Finding them means capturing crashes tagged by OS version and looking at the pattern, all on one version points at a version-specific cause. Then you fix or guard it, update the deprecated API, handle the behavior change, provide a fallback for the missing feature, or guard the path on the affected versions.
Bugnet groups crashes and shows the OS version breakdown, so a version-specific crash stands out as a cluster. So crashes on specific OS versions come from changed APIs, behavior changes, OS bugs, and feature differences, and finding them means capturing crashes by OS version to reveal which versions fail and why.
OS-version-specific crashes come from changed/deprecated APIs, behavior changes, OS bugs, and feature differences between versions. Your code hits a difference a version has. Capture crashes by OS version to find which fail, then fix or guard the path.