I'm working on an updated version of my app, a paid weather app, and wound up redesigning the new-user flow for this feature. It’s not that big a deal.
Previously, the app used only the device location. This proved a little controversial, even though we designed the backend such that it's impossible for us to engage in any sketchy behavior, even if we wanted to (which we don't; we're a paid app, we got our revenue already). We got some feedback requesting that we allow the app to work without that, so we took this release as an opportunity to rework the underpinnings of the app and allow users to select a custom location. It's not as easy as you'd think, particularly implementing city search.
(We could have used Google for city search, but we take issue with allowing too much third-party code in the app and certainly anything involving Google. We’ve been migrating the app off of Firebase and it’s been hell.)
Now, for new users setting up the app or when folks update to the new version, they'll see a prompt asking whether they'd like to use their device location or select a location to use. If they choose the latter, they're never asked for Location Services permission, and if they choose the former they're asked for "when in use" authorization.
Then, if the user wants to enable notifications and chose to use their device location, we require Always access and communicate that specifically to the user before prompting for Always access and notifications permission. If they chose to select a location and want notifications, it's still not necessary to enable Location Services at all; they're prompted for notifications permission and that's the end of it.
This compares to our previous flow which prompted for notifications authorization and then Always location access. It's objectively better for privacy for users who may not feel comfortable giving us Always access, even though we're not doing anything fishy and don't wish to.
Yes, it required substantial effort on our part to update our app for this change, but we did it while also implementing a feature that our users had been asking for. That's what betas are for — you get about 3 months to get your act together before the next iOS release ships. Use ’em.