I just started my project for iOS 8 and i ran in too the problem that i cant get the question to pop up for permission. I added the following to my info.plist
<key>NSLocationWhenInUseUsageDescription</key>
<string>The spirit of stack overflow is coders helping coders</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>I have learned more on stack overflow than anything else</string>
and this is my code :
@interface ViewController () <MKMapViewDelegate>
@property (nonatomic, strong) UIPopoverController* userDataPopover;
@property (weak, nonatomic) IBOutlet MKMapView *mapView;
@property (strong, nonatomic, retain) CLLocationManager *locationManager;
@end
@implementation ViewController
-(CLLocationManager *)locationManager
{
if(!_locationManager) _locationManager = [[CLLocationManager alloc]init];
return _locationManager;
}
- (void)viewDidLoad {
[super viewDidLoad];
self.mapView.delegate = self;
[self.locationManager requestWhenInUseAuthorization];
//[self.locationManager requestAlwaysAuthorization];
[self.locationManager startUpdatingLocation];
self.mapView.showsUserLocation = YES;
[self.mapView showsUserLocation];
[self.mapView setMapType:MKMapTypeStandard];
[self.mapView setZoomEnabled:YES];
[self.mapView setScrollEnabled:YES];
}
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(userLocation.coordinate, 800, 800);
[self.mapView setRegion:[self.mapView regionThatFits:region] animated:YES];
}
Make sure your view controller implements CLLocationManagerDelegate and imports #import CoreLocation/CoreLocation.h
- (void)viewDidLoad
{
[super viewDidLoad];
[self setLocationManager:[[CLLocationManager alloc] init]];
if([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]){
[self.mapview setShowsUserLocation:NO];
[self.locationManager setDelegate:self];
[self.locationManager requestWhenInUseAuthorization];
}
else{
//Before iOS 8
[self.mapview setShowsUserLocation:YES];
}
}
Add this method to listen for AuthorizationStatus changes
-(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
if (status == kCLAuthorizationStatusDenied) {
// permission denied
[self.mapview setShowsUserLocation:NO];
}
else if (status == kCLAuthorizationStatusAuthorized) {
// permission granted
[self.mapview setShowsUserLocation:YES];
}
}
Finally make sure your plist has the following entries as pointed out by Sanne
<key>NSLocationWhenInUseUsageDescription</key>
<string>The spirit of stack overflow is coders helping coders</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>I have learned more on stack overflow than anything else</string>
its new for ios 10 Now add location permission in plist file
if not add permission in plist then permission popup is not show
Add below permission in plist
1.Privacy - Location When In Use Usage Description
2.Privacy - Location Always Usage Description
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With