With WWDC 2019 and iOS 13, see the latest information here regarding location permissions.

At WWDC today, Apple provided some updates that have significant implications for developers and app publishers working with location-based marketing and attribution. These changes fundamentally alter the way iOS developers and app publishers will be able to access differing levels of location permissions for their mobile apps.

This is how ‘Request Always’ appears in iOS 10

Until these recent updates (which will be coming with iOS 11 in September 2017), app publishers had the option of requesting a user to opt-in to location permissions as ‘always’, where the app publisher always has access to a user’s location or ‘when in use’, where an app publisher only has visibility to a user’s location when the app is open, or running in the foreground. Developers could choose which permission set they wanted to request and were not obligated to offer both.

This meant that publishers could effectively force users into granting ‘always’ permissions by not providing the option of ‘when in use’, rendering apps that rely on location (Uber, Lyft) effectively useless without the ‘always’ permission level.

In addition to the Uber-style use case, ‘always on’ permissions are a requisite to delivering beacon and geo-fence based push notifications. These types of notifications essentially ‘wake’ a sleeping app when it is in the background, prompting the user to open the app with a notification when they come in range of a beacon, or enter a geofence that the app is monitoring for in the background. Without the ‘always on’ permission level, location-based notifications aren’t possible.

What’s Coming With iOS 11

If you request ‘always on’ with these new location-permission rules, users will automatically be given all three options when they open an app requesting location for the first time. Unlike in previous iOS versions where developers could choose which permissions they wanted to request, all options must appear. These mandatory location permission options are: Never, When in Use, and Always. This forces app publishers in to providing users with all choices, rather than just the always-or-nothing scenario described above.