Here's my situation. I'm developing an iPhone application that uses Core Location to determine the device's location. There is an icon: the Location Services Icon, that appears in the device's status bar. I know enough to say that the purpose of the icon is to tell the user that Location Services are currently being used by something. To the perceptive user, this means decreased battery life. For that reason, I want to be sure that the icon is displayed only when Location Services are actually being employed by my app.
Enter confusion. We, as developers, do not get access to the status bar via the official SDK. This means that the OS will display that icon automatically based on the behavior of the app. Try as I might, I cannot find a clear definition of what exactly causes that icon to show up.
As it stands, the icon appears before my app delegate gets control, and stays visible as long as the app is installed, running or not. This is clearly the worst case possible, and it made me doubt my use of CLLocationManager
. I would elaborate on my use, but as an extreme case I tried removing the CoreLocation framework (and the MapKit framework, which I suspect also uses CoreLocation), and all code relating to location. The app still caused the icon to appear and stay until I deleted the app. I then made a brand new app, and made no changes except to change the app identifier to match the identifier of my app. The icon still appeared. I changed the identifier to use the identifier of one of my apps that did not use location, and the icon did not appear. I did make sure to reset the device during this testing.
This issue is really killing me. I cannot imagine what the application ID has to do with the Location Services icon, but I see no other cause for its persistence. It seems like a Red Herring hiding the real issue, but I'm at a loss as to the real issue.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…