Virtual Beacons not working

I cannot get Virtual Beacon it to work - I’m using Xcode 7 + Swift 2.
When I open Estimote App, it sees both real Estimote Beacon and a Virtual Beacon (iPhone 6).

But when I created Demo App and opened it on my iPad, it can only see the real Beacon, even though I specified virtual beacon’s UUID - I tried using the method startMonitoringForRegion for both UUIDs and then for the UUID of Virtual Beacon only - still, wasn’t recognized.

I followed the Demo Tutorial to get it working. unfortunately, only real Beacon is getting recognized.

Any advice?

Likely, the results of monitoring for the default UUID are overwriting the “virtual” UUID. Which demo app are you talking about, the Examples bundled with the SDK? Which demo specifically?

I’ve used this tutorial:
and the following two.

Then modified it and wrote my own which just displays the range to a beacon.
As I mentioned before, I’ve tried using both Virtual and real Beacon’s UUID when registering in AppDelegate (also one and another seperately). In every case - even when I typed ONLY Vitrual Beacon’s UUID - the app found the real Beacon, not the Virtual one.

Isn’t it possible to use both at once?

You can monitor for up to 20 regions at the same time. There’s no limit to ranging.

Are you using ranging or monitoring? Can you share the code?

Yes I can, it’s only a test app with one screen and very little code.

Please take a look, maybe you can find the issue. This has been driving me crazy, as I cannot move forward.


Thanks for sharing the code!

What I’m seeing is: in the AppDelegate, you start monitoring for two regions: “default” UUID, and the “virtual” UUID. In the ViewController, you start ranging for just a single region: the “default” UUID.

Monitoring reports to the didEnterRegion, didExitRegion, and didDeteremineState delegates, none of which are implemented in your app.

Ranging reports to the didRangeBeacons delegate, which is implemented, but since you only ever start ranging for just the “default” UUID, you only get a list of detected beacons for that UUID.

If you want to also range for the “virtual” UUID, you simply need to add additional startRanging and stopRanging pair, and an additional CLBeaconRegion instance.

One thing to keep in mind: by default, ranging results are reported individually for each region. That is, if you start ranging for both the “default” and the “virtual” UUIDs, you’ll actually get two calls to didRangeBeacons per second: one with ranging results for the “default” UUID, and one for the “virtual” UUID. If you want just a single call with results from both instead, you need to enable the returnAllRangedBeaconsAtOnce property of the ESTBeaconManager:

self.beaconManager.returnAllRangedBeaconsAtOnce = true