I'm working on an iOS app that monitors for iBeacon regions. When the app is running in the background, I want it to send a local notification whenever it encounters a particular iBeacon region. Everything works fine, except for one thing: locationManager: didEnterRegion evidently doesn't get called until the user displays the lock screen. So even if the device passed through an iBeacon region while the app was in the background, they don't get the notification until they display the lock screen.
I've also tried using startMonitoringForRegion, and that sort of works -- if the app is running in the background, locationManager: didDetermineState: fires when the device enters the iBeacon region. However, it only does so once -- if the user subsequently exits and reenters the iBeacon region, locationManager: didDetermineState does not fire again.
I'm running an iPhone 5s and using an iPhone 4s as the iBeacon, if that makes any difference.
Correction: This phenomenon is evidently only happening when I use an iPhone 4s as the client. If I use a 5s, the notification is delivered immediately.