Apple doesn't force updates. You can simply ignore the OTA update. I believe you'll get prompted again every time a new update is released, but hitting "Ignore" occasionally is a small price to pay.
Constant popups _are_ the means to force updates. In addition they also throw up a nagware screen where they trick you to enter your pin to schedule updates. Apple employs several dark patterns, on iOS, and also on MacOS to trick the user and its rather sad to see them follow MS/FB/Google.
>I believe you'll get prompted again every time a new update is released,
That is not true. They do it multiple times for the same update. Look, I wouldn't care if they were simply security updates, but Apple updates bloat up and slow down the phone over time. On top of that, what makes it even more egregious is that they make it impossible for me to downgrade, and go back to a state where the phone was working just fine and I was happy with it.
>but hitting "Ignore" occasionally is a small price to pay.
You make it sound like its once in a year. Unfortunately, Apple constantly nags you to the point where, unless you're constantly looking out for it, its easy to accidentally hit the wrong button. Its sad that they have had to resort to tricking the user to drive their update stats.
They show an alert saying something like "A new version of the OS is available." [Update] [Ignore].
That's not a dark pattern. It's easy to just Ignore. I have a number of development devices using older versions of the OS and I've never had any problem avoiding updates.
> On top of that, what makes it even more egregious is that they make it impossible for me to downgrade
That's mostly the fault of the baseband.
> Apple constantly nags you to the point where, unless you're constantly looking out for it, its easy to accidentally hit the wrong button.
This is just flat-out wrong.
> Its sad that they have had to resort to tricking the user to drive their update stats.
Unfortunately, Apple gives you no way to opt-out of updates. I've figured out a way to block them at the firewall level, which seems to work, for now.