title: iOS: App is not asking user's permission while installing the app. getting kCLAuthorizationStatusNotDetermined every time - Objective-c & Swift
body: <p>I am trying to fetch user location in my iOS app. I have included corelocation framework in my project first. Then on a button click I am invoking the core location api as below. When I am trying to install this in a device, the core location never asks the user permission. When I try to fetch the location on button click, I am getting kCLAuthorizationStatusNotDetermined as the authorisationStatus. Please help me in this. I have no clue what is happening.</p>
  
  <pre><code>- (IBAction)fetchLessAccurateLocation:(id)sender {
      [self.txtLocation setText:@""];
  
      locationManager = [[CLLocationManager alloc] init];
      locationManager.delegate = self;
      locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;
      locationManager.distanceFilter = 1000;
  
      if ([self shouldFetchUserLocation]) {
          [locationManager startUpdatingLocation];
      }
  }
  </code></pre>
  
  <p>This is my shouldFetchUserLocation method:</p>
  
  <pre><code>-(BOOL)shouldFetchUserLocation{
  
      BOOL shouldFetchLocation= NO;
  
      if ([CLLocationManager locationServicesEnabled]) {
          switch ([CLLocationManager authorizationStatus]) {
              case kCLAuthorizationStatusAuthorized:
                  shouldFetchLocation= YES;
                  break;
              case kCLAuthorizationStatusDenied:
              {
                  UIAlertView *alert= [[UIAlertView alloc]initWithTitle:@"Error" message:@"App level settings has been denied" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil];
                  [alert show];
                  alert= nil;
              }
                  break;
              case kCLAuthorizationStatusNotDetermined:
              {
                  UIAlertView *alert= [[UIAlertView alloc]initWithTitle:@"Error" message:@"The user is yet to provide the permission" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil];
                  [alert show];
                  alert= nil;
              }
                  break;
              case kCLAuthorizationStatusRestricted:
              {
                  UIAlertView *alert= [[UIAlertView alloc]initWithTitle:@"Error" message:@"The app is recstricted from using location services." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil];
                  [alert show];
                  alert= nil;
              }
                  break;
  
              default:
                  break;
          }
      }
      else{
          UIAlertView *alert= [[UIAlertView alloc]initWithTitle:@"Error" message:@"The location services seems to be disabled from the settings." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil];
          [alert show];
          alert= nil;
      }
  
      return shouldFetchLocation;
  }
  </code></pre>
  
  <p>Here is my core location delegate method:</p>
  
  <pre><code>- (void)locationManager:(CLLocationManager *)manager
      didUpdateLocations:(NSArray *)locations __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_6_0){
  
      NSLog(@"location fetched in delegate");
  
      CLLocation* location = [locations lastObject];
      NSDate* eventDate = location.timestamp;
      NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];
  
      if (abs(howRecent) &lt; 15.0) {
          // If the event is recent, do something with it.
          NSLog(@"inside loop.... latitude %+.6f, longitude %+.6f\n",
                location.coordinate.latitude,
                location.coordinate.longitude);
      }
      NSLog(@"latitude %+.6f, longitude %+.6f\n",
            location.coordinate.latitude,
            location.coordinate.longitude);
      [self.txtLocation setText:[NSString stringWithFormat:@"\nlatitude: %+.6f \nlongitude:   %+.6f", location.coordinate.latitude, location.coordinate.longitude]];
  
      [locationManager stopUpdatingLocation];
      [locationManager stopMonitoringSignificantLocationChanges];
  
      if(locationManager!=nil){
          locationManager.delegate= nil;
          locationManager= nil;
      }
  }
  </code></pre>