While difficult to track down, the solution for this is quite simple.
Through much trial and error I found out that while the location access dialog pops up when you try to access any location services in the app for the first time, the dialog disappears on its own (without any user interaction) if the CLLocationManager
object is released before the user responds to the dialog.
I was creating a CLLocationManager
instance in my viewDidLoad
method. Since this was a local instance to the method, the instance was released by ARC after the method completed executing. As soon as the instance was released, the dialog disappeared. The solution was rather simple. Change the CLLocationManager
instance from being a method-level variable to be a class-level instance variable. Now the CLLocationManager
instance is only released once the class is unloaded.