I had one of the new devices reporting this problem since, as you know, the location manager usually calls this:
- (void) mapView: (MKMapView *) mapView didUpdateUserLocation: (MKUserLocation *) userLocation
The strangest thing is that the UserLocation object contains two coordinate objects:
1) userLocation.location.coordinate: This works fine, but for some reason returns NULL on IOS11 on some devices (it is not yet known why and how this happens with IOS11).
2) userLocation.coordinate: This is another (the same) object that you can see from the properties, it has location data and continues to work fine with IOS11, it does not seem to be broken (yet).
So, in the example above, "I think" that your:
- (void) locationManager: (CLLocationManager *) manager didUpdateLocations: (NSArray *) locations
Perhaps you have the same problem (i.e. the array may return NULL somewhere in the location object, but not the coordinate object, the decision I made in my code that gets one location at a time is now fixed by replacing userLocation.location .coordinate on userLocation.coordinate and the problem disappeared.
I also insert my function below to help you, I hope this helps you solve your problem, please note that I have two conditions for testing one for finding a location object, and the other for finding a coordinate object, one works fine now, and the other seems to be broken in iOS11:
-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation { Log (4, @"MapView->DidUpdateUL - IN"); if (_OrderStartTrackingMode == enuUserMapTrackingMode_User) { if (userLocation) { if (userLocation.location) { if ( (userLocation.location.coordinate.latitude) && (userLocation.location.coordinate.longitude)) { [_mapLocations setCenterCoordinate:userLocation.location.coordinate animated:YES]; } else { if ( (userLocation.coordinate.latitude) && (userLocation.coordinate.longitude)) { [self ShowRoutePointsOnMap:userLocation.coordinate]; } } } } } else if (_OrderStartTrackingMode == enuUserMapTrackingMode_Route) { if (userLocation) { if ( (userLocation.coordinate.latitude) && (userLocation.coordinate.longitude)) { [self ShowRoutePointsOnMap:userLocation.coordinate]; } } } Log (4, @"MapView->DidUpdateUL - OUT"); }
Needless to say, that you checked your settings for the Map object, you should have at least "User Location" enabled:

PS The Log function in the above code is a shell of the NSLog function, since I use mine to write to files.
Good luck, Uma, let me know how this happens.
Regards, Hyder