Difference between "Always" and "While Using App" in location services for iOS
The main difference between
When-in-use is: if you're using the latter and your app is killed (either by the user or the OS), then your app will stop receiving CoreLocation service updates. Your app will only receive updates as long as it is in the foreground, and in the background (given you enable background location capability). The former permission will launch your app even if it isn't in memory.
You can read more on this developer documentation page. Here's an excerpt from Apple's developer documentation:
When-in-use authorization. Your app can use most services but cannot use services that automatically relaunch the app. Your app must always start services while running in the foreground. If you enable the background location capability for your app, a suspended app will wake in the background to handle location events. However, if your app is not running, it will not be launched.
Always authorization. Your app can use all location services, and it can start those services from either the foreground or the background. If a location-related event occurs when your app is not running, the system launches your app and delivers the event.
This type of authorization is used when we need to access location only in the background and foreground mode. (Location-based suggestion application like many e-commerce apps)
This types of authorization support only Standard location service, iBeacon ranging, Heading service, Geocoding services.
Display blue bar when an application using our location.
This type of authorization is used when we need to access location in the background, foreground, Kill and suspended states. (Tracking applications like Fitbit and Capchur)
This types of authorization support all types of location services such as Standard location service, iBeacon ranging, Heading service, Geocoding services, Significant-change location service, Visits service, and Region monitoring.
Display only small location service arrow in status bar when an application using our location.