Changes to Location Permissions on iOS 11
(Note: This is a developing article. We will continue to update it new beta versions of iOS 11 are released and/or more information is available)
August 24th Update:
So as this is a true beta, Apple looks to have decided to return control of the blue bar to developers when using the Always permission in beta 5. We'll wait for things to be final before providing more updates on this since it is still in flux. In any case, Gimbal still does not cause the blue bar to appear under any circumstances.
We've also released the ability to allow you to control the request for location permissions (vs. how we've done it to-date where Gimbal always requests the Always permission on your behalf).
The changes are specifically to setAPIKey:options: and allow you to set the key "MANAGE_PERMISSIONS" with a value of NO should you want to manage the location request permissions yourself. Details are in the Class Reference section here. These options have been included in the Gimbal iOS SDK as of v2.70.1
July 27th Update:
Last month, Apple announced the beta release of iOS 11. This update includes numerous performance improvements and new features as well as changes to location services. The changes affect the way applications request location permission from users as well as the addition of a blue status bar indicating when an application is using continuous location when in the background. Since the release, our engineering team has been testing the beta release to better understand the changes related to location services and what this means for applications providing location-based features. As always, we’ll continue to release new Gimbal iOS SDKs over the next several weeks to ensure proper compatibility and stability when iOS 11 is commercially released.
The Blue Double-Height Status Bar
On iOS 10, a blue status bar is visible at the top of the device’s screen when an application is using continuous background location updates with the ‘While In Use’ location services permission and is placed in the background (e.g., the app is not visible on the phone’s screen). It is not present for applications that have the ‘Always’ location services permission.
On iOS 11, a blue status bar is visible at the top of the device’s screen when an application is using the continuous background location service with either the ‘While in Use’ or ‘Always’ location services permission and is placed in the background.
Apple’s change appears to be directed at helping end users better understand when applications in the background are using the continuous location service and are placed in the background regardless of what location services permission has been granted.
The Gimbal SDK does not use the continuous background location service
The most important thing to realize is that the Gimbal SDK does not use the continuous background location service - therefore, the Gimbal SDK will never cause a double-height blue bar to be displayed to the end user. This is true for both existing applications on a device that upgrades to iOS 11 as well as for new applications installed on iOS 11.
The Gimbal SDK does require the ‘Always’ permission to effectively trigger events in the background but our SDKs continue to be built with a balance of battery efficiency and performance in mind and we’re able to perform well even without using the continuous background location service.
Our testing with the latest beta versions of iOS 11 confirm that no blue bar visible on the device even when the Gimbal SDK is triggering Place events (geofence and/or beacons) and when the application is in the background.
IMPORTANT: It’s possible for you to accidentally cause a blue bar to be displayed if you set background modes incorrectly in XCode when building your app or if another SDK or functionality you’re incorporating does require continuous background location updates.
To avoid this common problem, make sure that in your XCode Project, on the Capabilities tab, and within the Background Modes section that the Location Updates check box IS NOT CHECKED. Gimbal does require the ‘Uses Bluetooth LE accessories’ check box to be selected. In order for the Gimbal SDK to function properly and avoid the blue bar, your Background Modes section should look like this:
Location Opt-in Changes
On iOS 11, Apple will allow end users to choose what level of location access to give applications. While applications running on iOS 10 could effectively force location access to be ‘Always’, on iOS 11, Apple now forces applications to have ‘Never’, ‘While Using the App’ and ‘Always’ - both for existing apps and newly installed applications.
Still further, when an application is initially installed on iOS 11, developers have a choice to ask for ‘When in Use’ or ‘Always’ and the end user may also choose ‘Don’t Allow’ as well as the option to ask to upgrade from ‘When in Use’ to ‘Always’ at a later time without a ‘Don’t Allow’ option.
At Gimbal, we have always encouraged our developer community to clearly convey to their end users the value gained from granting location privileges to an application. With the coming iOS 11 changes, applications will need to place further emphasis on doing this the right way if they are to provide critical functionality based on location when an application is in the background state. Stay tuned for more information on this topic as we plan to publish a best practices guide updated for iOS 11 in the near future.