What are the proposed changes to location permissions in iOS 13?
You may have read about, or seen the keynote, where Apple announced several major changes for location permissions in iOS 13. Here is what we know so far about the actual impacts.
On initial app install, iOS 13 will now present the user with an ‘Allow once’ permission option. A user will first be prompted to select ‘While in Use,’ ‘Never’ or ‘Allow once’ permission option. It is not possible for the user to grant ‘Always Allow’ location permission on the initial prompt. Selecting ‘Allow once’ will give location permissions for a single session only.
‘While Using App’ → ‘Always Allow’
If the user selects ‘While Using’, the app will only have access to locations while the app is running in the foreground.
However, iOS 13 will automatically prompt the user to upgrade the location permission from ‘When Using’ to ‘Always Allow’ without any modifications to the app. This prompt happens somewhere between a few hours and a day. In initial testing, power cycling a device minutes after install triggers the prompt (see above) shortly after the device restarts. Without a power cycle, the user is prompted in less than a day.
We have seen this permission upgrade prompt when unlocking the phone even when the app isn’t running and have seen several re-displays of this prompt over a period of days.
The New ‘Do you want to continue allowing...’ Prompt
For apps with ‘Always Allow’ permissions, Apple indicated that iOS 13 will periodically show a Continue.. prompt like the above.
iOS 13 Developer Beta 2 behavior: In testing, we have observed that the above ‘Continue..’ prompt appears to trigger after 3 consecutive days of background location use.
How will existing apps behave when a phone upgrades to iOS 13?
We expect location permissions will be carried over for existing installed apps. These new permission flows should only apply to downloaded apps post iOS 13 update.
What are you doing at Gimbal to prepare for iOS 13?
Gimbal has been thoroughly testing iOS 13 as new betas are released on a wide range of devices to understand the actual behavior on-device. Changes proposed by Apple in the keynote don’t always manifest or survive the beta, as we saw with the proposed ‘blue bar’ in iOS 11. As the iOS 13 beta progresses, we will continue to test and keep you up-to-date on actual app and OS behavior.
We will also test additional scenarios where an app is compiled for an older version of iOS and then gets installed on iOS 13 without first running on an earlier version.
We’ve seen the ‘Location Reminder’ screenshots and they look scary, will these changes have a negative impact on our app functionality?
We believe that apps with a strong use-case for location, developed by trusted developers and brands, will continue to see strong location adoption by end users. We also welcome transparency and giving users the best information about app data-sharing. To drive strong adoption of location services, clearly communicating the value of location-based services in a way that resonates with users in-app will become even more important with the advent of iOS 13. Please reach out to your Gimbal representative if you’d like to collaborate on custom recommendations for your app’s specific opt-in process.
How will these changes play out in code?
If your existing permission flow starts with asking the user for ‘When Using’ permission to gain trust and then later asks the user to upgrade the permissions, iOS 13 will now automatically do that step for you without having to programmatically manage the process. During the transition period where some users have iOS 13 and others have earlier versions, it may be best to have your app check the OS version and behave appropriately.
Example iOS version check
#if ( ! defined(__IPHONE_OS_VERSION_MAX_ALLOWED) ||
__IPHONE_OS_VERSION_MAX_ALLOWED < 130000)
// initially ask for 'When in use" permission
What about the Bluetooth permissions changes in iOS 13?
iOS 13 will now require explicit Bluetooth permission in order to collect Bluetooth beacon information (and all other Bluetooth activities). While the app itself is not required to explicitly request Bluetooth permission (iOS 13 will generate a permission dialog box), it will be necessary to add a ‘plist’ entry with text that describes the reason your app would like to access Bluetooth. iOS 13 will display this text in it’s Bluetooth permission dialog.
The Gimbal SDK honors the location permission granted by the user for GPS et. al. when deciding whether to use Bluetooth beacons, so functionally, this isn’t a big change, but the user will explicitly see a new permission dialog and can control that permission independently of the overall location permission.
As of ‘Beta 2’, It’s not yet clear how apps that were already installed or that were compiled against earlier iOS version will behave - stay tuned as the betas progress.
In Xcode, the key for the Bluetooth permission description is
'Privacy - Bluetooth Always Usage Description'
The raw key name in info.plist