Ranging beacons not detected

I'm trying to detect my beacons using CoreLocation but the didRangeBeacons delegate is never called. It is calling the didDiscoverBeacons method instead. I want to extract the distance from the beacon and this isn't included with the ESTScanTypeBluetooth. I've copied the same code from the Examples project and added the NSLocationAlwaysUsageDescription key to the plist. The beacon firmware is up-to-date.

Please help! I've been staring at this until blue in the face.


Hey there!

Let me see if I understand the problem correctly. With scan type set to ESTScanTypeBeacon, you're not getting any calls to didRangeBeacons, and with ESTScanTypeBluetooth you do get calls to didDiscoverBeacons. Does that sound about right?

In the Examples code, you need ESTScanTypeBeacon (aka the Core Location scan) to receive calls to didRangeBeacons. ESTScanTypeBluetooth (aka the Core Bluetooth scan) will call didDiscoverBeacons instead.

If you use ESTScanTypeBeacon and still don't get calls to didRangeBeacons, then this most probably means your app doesn't have proper Core Location persmissions granted. Just double check if the requestAlwaysAuthorization gets called. You can also go to Settings - Privacy - Location Services and make sure that your app has appropriate permissions set.

As Piotr mentioned before a common problem is the authorization request required since iOS 8.
Please check for details: http://nevan.net/2014/09/core-location-manager-changes-in-ios-8/