CLLocationManager delegate not called from Siri Intents

I'm trying to use the CLLocationManager to find a user's current location from within a Siri Intent in iOS13. In the intent's

handle
method, I am setting up the CLLocationManager to make the call, but the delegate calls to
didUpdateLocations
or
didFailWithError
don't end up being called at all.


- (void)handleMyIntent:(MyIntent *)intent completion:(void (^)(MyIntentResponse *response))completion {
  // the handle method is called on an arbitrary queue, so I’m dispatching to main_queue
  dispatch_async(dispatch_get_main_queue(), ^{

            self.locationManager = [[CLLocationManager alloc] init];
            self.locationManager.delegate = self;
            self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;

            [self.locationManager requestWhenInUseAuthorization];
            [self.locationManager startUpdatingLocation]; 
  });
}



I have added the correct usage string in Info.plist. Also, the location manager initializing code does get called. I was getting a warning against using the CLLocationManager on an arbitrary queue, hence I dispatch it to the main queue. But the location manager's locationManager:didUpdateLocations: delegate method isn't called at all.


Any idea why this might be the case? Is there even something like a 'main queue' in a Siri extension (I'm assuming there is)? I don't think the 'SoupChef' example deals with actually getting a user's current location.

Replies

Hi! Have you taken a look at the console? You have to put an "NSLocationWhenInUseUsageDescription" entry in the info.plist of you Intent extension.

We have the same issue for 2 month. Give up then.

Anyother way in intent extension to get the country of user?