beaconConnectionDidSucceed, macAddress null

Hi,

I’ve bumped into an issue (major one for me) with a beacon’s mac address returning null after successfully connecting.

Details:
I’m ranging beacons using startRangingBeaconsInRegion and in didRangeBeacons I connect to one of the beacons like this:

self.beaconConnection = [[ESTBeaconConnection alloc] initWithBeacon:CLBeaconObjectMeetingMyConditions delegate:self startImmediately:YES];

This works fine as the log messages in the success block are called:

  • (void)beaconConnectionDidSucceed:(ESTBeaconConnection *)connection
    {
    NSLog(@“Connected!”);
    NSLog(@“Mac-address: %@”, connection.macAddress);
    }

The issue: the second line logs “Mac-address: (null)”. This has worked before (iOS SDK 2.4, not sure which beacon firmware – sorry).

Should connection.macAddress really be null here?
If so, how do we fetch the beacon’s macAddress properly?


Additional info:
Beacon firmware: Estimote OS A3.0.1
Beacon secure UUID: NO
Estimote iOS SDK: 3.2.2
iOS unit: iPhone 4s
iOS version: 8.1.1

Thanks for your time,
Max

Thanks for a detailed report!

This is definitely not expected, the MAC address should be there. I just tested myself (SDK 3.2.2, iOS 8.3, Xcode 6.3, FW 3.0.1) and it works for me:

(lldb) po connection.macAddress
ff49db45972a

(lldb) 

Does the Estimote iOS app show the MAC address when you connect to the beacon? If yes, can you post it here? If no, can you post the UUID, major and minor of your beacon? (Can be in a private message if you prefer not to disclose it.)

Thanks for reaching out Piotr! Sending you a PM.

Relevant code (stripped): http://www.ipaste.org/2ek

Any idea where the problem lies?

This is weird, I can’t see any traffic for this beacon in the Estimote Cloud that would come from your app with SDK 3.x—I can only see the Estimote App and some app with SDK 2.2.0.

Could be unrelated, but I noticed you start connection twice:

self.beaconConnection = [[ESTBeaconConnection alloc] initWithBeacon:cBeacon delegate:self startImmediately:YES]; // startImmediately:YES = 1st time
self.beaconConnection.delegate = self;
[self.beaconConnection startConnection]; // 2nd time

If set startImmediately to NO, is it still the same?

Can you implement the beaconConnectionDidFail delegate and see if anything goes there?

That’s really strange. Could you tell me the date of the last connection from iOS SDK 2.2?

Ah, true. Will remove that extra connect and see if it changes anything.w

9th of May, a bunch of requests around 12pm GMT.

Hm… Sounds like I might have two different versions of the Estimote SDK in my project - one via Cocoapods and one added manually . Do you know how I can make sure there’s one and one Estimote SDK only in my project?

Remove any reference to the libEstimoteSDK.a or EstimoteSDK.framework from “Linked Frameworks and Libraries” in your project’s General settings. In the Build Settings, remove any reference to EstimoteSDK from any Header Search Paths.

This should only leave the Cocoapods-managed SDK.

As far as I can tell there shouldn’t be any conflicting versions of the EstimoteSDK.

I’ve now tried with another beacon unit and setting startImmediately to NO followed by [self.beaconConnection startConnection]; but then none of the callbacks (beaconConnectionDidSucceed/didDisconnectWithError/beaconConnectionDidFail) are called.

Edit: I’ve setup a new Xcode project with close to minimum code required for ranging to work. Mac address is still null.

If I could borrow 10 minutes of your time I can share my screen on Skype and demonstrate it.

Thanks for taking time looking into this.

I’m stuck. Any suggestion on how to move forward with this?

Bump.

Would it be possible for you @heypiotr to paste your solution for ranging a beacon and then fetching its mac address?

Bests,
Max