iOS 8 MKMapView User Location Request Failure

11,896

Solution 1

I had the same problem a few days ago. The solution was adding the string keys NSLocationAlwaysUsageDescription (for [CLLocationManager requestAlwaysAuthorization]) or NSLocationWhenInUseUsageDescription (for [CLLocationManager requestWhenInUseAuthorization]) to your Supporting Files/Info.plist

You can also edit the source code of the Info.Plist with Right click > open as > Source code and add these lines:

<!-- for requestAlwaysAuthorization -->
<key>NSLocationAlwaysUsageDescription</key>
<string>Explain for what are you using the user location</string>
<!-- for requestWhenInUseAuthorization -->
<key>NSLocationWhenInUseUsageDescription</key>
<string>Explain for what are you using the user location</string>

Hope this helps.

Solution 2

Finally I have succeeded to run my gpx file on the simulator. It seems that after installing Xcode 6 the first time, there might be a bug causing for gpx files to simulate. Here is how I overcame the problem:

  1. I have deleted my app from the simulator
  2. Under App->Capabilities enabled Background Modes->Location updates
  3. Run the app and let it install on simulator
  4. Allow access, and I was able to locate the user with GPX
  5. Afterwards I disabled Location Updates.

I don't know why, but this did the trick for me.

Share:
11,896
jayjay_21
Author by

jayjay_21

Updated on June 05, 2022

Comments

  • jayjay_21
    jayjay_21 almost 2 years

    I have been trying to move my iOS7 app with MKMapview to support iOS8. However I couldn't get the new request for users to share their locations to work properly. I create my MKMapView on a storyboard and the delegate is set and works perfectly on iOS7. Here is what I've added to support iOS8 Location sharing:

    myMapView.h

    #import <UIKit/UIKit.h>
    #import <MapKit/MapKit.h>
    #import <CoreLocation/CoreLocation.h>
    
    @interface myMapView : UIViewController <MKMapViewDelegate, CLLocationManagerDelegate>
    
    @property (strong, nonatomic) IBOutlet MKMapView *mapView;
    @property (strong, nonatomic) CLLocationManager *locationManager;
    

    myMapView.m

    //Code omitted
    #define IS_OS_8_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
    //Code omitted
    - (void)viewDidLoad {
        [super viewDidLoad];
        self.locationManager = [[CLLocationManager alloc] init];
        self.locationManager.delegate = self;
    
        if(IS_OS_8_OR_LATER) {
            //[self.locationManager requestWhenInUseAuthorization];
            [self.locationManager requestAlwaysAuthorization];
            [self.locationManager startUpdatingLocation];
        }
        [self.mapView setShowsUserLocation:YES];
        [self.mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES];
    }
    
    -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
        MKCoordinateRegion region = { { 0.0, 0.0 }, { 0.0, 0.0 } };
        region.center.latitude = self.locationManager.location.coordinate.latitude;
        region.center.longitude = self.locationManager.location.coordinate.longitude;
        region.span.latitudeDelta = 0.0187f;
        region.span.longitudeDelta = 0.0137f;
        [self.mapView setRegion:region animated:YES];
        
        _initialPosition = NO;
    }
    

    Also I have set NSLocationAlwaysUsageDescription key and its value in my InfoPlist, which shows the correct message when prompting the user to share their location.

    Unfortunately the delegate function -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations never gets called. Although each time the viewController gets loaded the [self.locationManager startUpdatingLocation] is called, but the delegate does not seem to respond to it. Is there a problem of how I set the delegate or is there something else I am missing here?

    UPDATE: It seems also that my gpx file is not being called on launch. I have cleared and reloaded my location file, even changed to a default location, but no location is found: Domain=kCLErrorDomain Code=0

    UPDATE 2: Here is a SS from the settings that I have actually succeeded with the user request, but fail to get/update location no matter how much I refresh. App privacy level: Location sharing always
    (source: barisaltop.com)

    Thanks!

  • jayjay_21
    jayjay_21 over 9 years
    Unfortunately I have already done this and mentioned it in my original question. After further review I am suspicious that this a scheme or gpx file error. I will test it on a iOS8 machine and update my problem.
  • Admin
    Admin over 9 years
    Ups, I missed that part. Sorry! :)
  • Sreejith
    Sreejith over 9 years
    I have the same problem. Can't get it to work in my iPod touch. What might be the reason?