This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Changes in iOS 7 which affect the reading of BLE UUID values

After upgrading my iPhone 5 to iOS 7, I can no longer run existing programs which are using BLE (based on the "keyfob" project and iOS app).

Below are 2 logs, the first is from the iOS 7 device and the second is from an iOS 6 device (iPad 4).  Both logs are from the same BLE device.

iOS 6 is working properly, and the iOS 7 device will make a connection but as you can see from the UUID values it is not recognizing the BLE device properly.

I have searched this forum as well as any other one I could think of, but I can find no information about what has changed in iOS 7 that would cause this behavior (not reading the UUID's the same...)

I remember a similar situation when iOS 6 was introduced and there were some changes made to the iPhone4SBLEDemo app which fixed things until Apple released their iOS 6.01 rev.

I posted this question on the Apple developer site as well but does anyone here know what has changed?

The only thing that I could even find about the change to iOS 7 was the post titled "iOS 7.0 crash" posted Aug 13 for the sensor tag project where there needed to be a dash "-" added to the UUID string but this doesn't seem to be the case as the "keyfob" app doesn't present the same "full string" to match the incoming read (don't know if I said that clearly but I hope you know what I mean)

The tests were done with the same project (not even closing it down between trials - just swapping the iOS devides)

Any help would be greatly appreciated,

Thanks.

 

<iOS 7 device>

Status of CoreBluetooth central manager changed 5 (State powered up and ready (CBCentralManagerStatePoweredOn))

Status of CoreBluetooth central manager changed 5 (State powered up and ready (CBCentralManagerStatePoweredOn))

Status of CoreBluetooth central manager changed 5 (State powered up and ready (CBCentralManagerStatePoweredOn))

Connecting to peripheral with UUID : 00000000-0000-0000-8D88-B32775CD963B

Found a TruSensors, connecting..

didDiscoverPeripheral

Connecting to peripheral with UUID : 00000000-0000-0000-8D88-B32775CD963B

Found a TruSensors, connecting..

didDiscoverPeripheral

Connection to peripheral with UUID : 00000000-0000-0000-8D88-B32775CD963B successfull

Services of peripheral with UUID : 00000000-0000-0000-8D88-B32775CD963B found

Fetching characteristics for service with UUID : <180a>

Fetching characteristics for service with UUID : <1803>

Fetching characteristics for service with UUID : <1802>

Fetching characteristics for service with UUID : <1804>

Fetching characteristics for service with UUID : <180f>

Fetching characteristics for service with UUID : <ffa0>

Fetching characteristics for service with UUID : <ffe0>

Characteristics of service with UUID : <180a> found

Found characteristic <2a23>

Found characteristic <2a24>

Found characteristic <2a25>

Found characteristic <2a26>

Found characteristic <2a27>

Found characteristic <2a28>

Found characteristic <2a29>

Found characteristic <2a2a>

Found characteristic <2a50>

Characteristics of service with UUID : <1803> found

Found characteristic <2a06>

Characteristics of service with UUID : <1802> found

Found characteristic <2a06>

Characteristics of service with UUID : <1804> found

Found characteristic <2a07>

Characteristics of service with UUID : <180f> found

Found characteristic <2a19>

Characteristics of service with UUID : <ffa0> found

Found characteristic <ffa1>

Found characteristic <ffa2>

Found characteristic <ffa3>

Found characteristic <ffa4>

Found characteristic <ffa5>

Characteristics of service with UUID : <ffe0> found

Found characteristic <ffe1>

Finished discovering characteristicsEnabling FSR

Updated notification state for characteristic with UUID <ffa3> on service with  UUID <ffa0> on peripheral with UUID 00000000-0000-0000-8D88-B32775CD963B

Updated notification state for characteristic with UUID <ffa4> on service with  UUID <ffa0> on peripheral with UUID 00000000-0000-0000-8D88-B32775CD963B

Updated notification state for characteristic with UUID <ffa5> on service with  UUID <ffa0> on peripheral with UUID 00000000-0000-0000-8D88-B32775CD963B

Updated notification state for characteristic with UUID <ffe1> on service with  UUID <ffe0> on peripheral with UUID 00000000-0000-0000-8D88-B32775CD963B

Updated notification state for characteristic with UUID <2a07> on service with  UUID <1804> on peripheral with UUID 00000000-0000-0000-8D88-B32775CD963B

Stopped Scanning

Known peripherals : 0

List of currently known peripherals :

updateValueForCharacteristic failed !Could not find service with UUID <180f> on peripheral with UUID 00000000-0000-0000-8D88-B32775CD963B

Connecting to peripheral with UUID : 00000000-0000-0000-8D88-B32775CD963B

Found a TruSensors, connecting..

didDiscoverPeripheral

Connecting to peripheral with UUID : 00000000-0000-0000-8D88-B32775CD963B

Found a TruSensors, connecting..

didDiscoverPeripheral

Connection to peripheral with UUID : 00000000-0000-0000-8D88-B32775CD963B successfull

Services of peripheral with UUID : 00000000-0000-0000-8D88-B32775CD963B found

Fetching characteristics for service with UUID : <180a>

Fetching characteristics for service with UUID : <1803>

Fetching characteristics for service with UUID : <1802>

Fetching characteristics for service with UUID : <1804>

Fetching characteristics for service with UUID : <180f>

Fetching characteristics for service with UUID : <ffa0>

Fetching characteristics for service with UUID : <ffe0>

Characteristics of service with UUID : <180a> found

Found characteristic <2a23>

Found characteristic <2a24>

Found characteristic <2a25>

Found characteristic <2a26>

Found characteristic <2a27>

Found characteristic <2a28>

Found characteristic <2a29>

Found characteristic <2a2a>

Found characteristic <2a50>

Characteristics of service with UUID : <1803> found

Found characteristic <2a06>

Characteristics of service with UUID : <1802> found

Found characteristic <2a06>

Characteristics of service with UUID : <1804> found

Found characteristic <2a07>

Characteristics of service with UUID : <180f> found

Found characteristic <2a19>

Characteristics of service with UUID : <ffa0> found

Found characteristic <ffa1>

Found characteristic <ffa2>

Found characteristic <ffa3>

Found characteristic <ffa4>

Found characteristic <ffa5>

Characteristics of service with UUID : <ffe0> found

Found characteristic <ffe1>

Finished discovering characteristicsEnabling FSR

Updated notification state for characteristic with UUID <ffa3> on service with  UUID <ffa0> on peripheral with UUID 00000000-0000-0000-8D88-B32775CD963B

Updated notification state for characteristic with UUID <ffa4> on service with  UUID <ffa0> on peripheral with UUID 00000000-0000-0000-8D88-B32775CD963B

Updated notification state for characteristic with UUID <ffa5> on service with  UUID <ffa0> on peripheral with UUID 00000000-0000-0000-8D88-B32775CD963B

Updated notification state for characteristic with UUID <ffe1> on service with  UUID <ffe0> on peripheral with UUID 00000000-0000-0000-8D88-B32775CD963B

Updated notification state for characteristic with UUID <2a07> on service with  UUID <1804> on peripheral with UUID 00000000-0000-0000-8D88-B32775CD963B

Stopped Scanning

Known peripherals : 0

List of currently known peripherals :

 

 

 

 

<iOS 6 device>

Status of CoreBluetooth central manager changed 5 (State powered up and ready (CBCentralManagerStatePoweredOn))

Status of CoreBluetooth central manager changed 5 (State powered up and ready (CBCentralManagerStatePoweredOn))

Status of CoreBluetooth central manager changed 5 (State powered up and ready (CBCentralManagerStatePoweredOn))

Connecting to peripheral with UUID : E4DB5569-D8D3-E30C-8E0C-37470746C010

Found a TruSensors, connecting..

didDiscoverPeripheral

Connection to peripheral with UUID : E4DB5569-D8D3-E30C-8E0C-37470746C010 successfull

Services of peripheral with UUID : E4DB5569-D8D3-E30C-8E0C-37470746C010 found

Fetching characteristics for service with UUID : <1800>

Fetching characteristics for service with UUID : <1801>

Fetching characteristics for service with UUID : <180a>

Fetching characteristics for service with UUID : <1803>

Fetching characteristics for service with UUID : <1802>

Fetching characteristics for service with UUID : <1804>

Fetching characteristics for service with UUID : <180f>

Fetching characteristics for service with UUID : <ffa0>

Fetching characteristics for service with UUID : <ffe0>

Characteristics of service with UUID : <1800> found

Found characteristic <2a00>

Found characteristic <2a01>

Found characteristic <2a02>

Found characteristic <2a03>

Found characteristic <2a04>

Characteristics of service with UUID : <1801> found

Found characteristic <2a05>

Characteristics of service with UUID : <180a> found

Found characteristic <2a23>

Found characteristic <2a24>

Found characteristic <2a25>

Found characteristic <2a26>

Found characteristic <2a27>

Found characteristic <2a28>

Found characteristic <2a29>

Found characteristic <2a2a>

Found characteristic <2a50>

Characteristics of service with UUID : <1803> found

Found characteristic <2a06>

Characteristics of service with UUID : <1802> found

Found characteristic <2a06>

Characteristics of service with UUID : <1804> found

Found characteristic <2a07>

Characteristics of service with UUID : <180f> found

Found characteristic <2a19>

Characteristics of service with UUID : <ffa0> found

Found characteristic <ffa1>

Found characteristic <ffa2>

Found characteristic <ffa3>

Found characteristic <ffa4>

Found characteristic <ffa5>

Characteristics of service with UUID : <ffe0> found

Found characteristic <ffe1>

Finished discovering characteristicsEnabling FSR

Updated notification state for characteristic with UUID <ffa3> on service with  UUID <ffa0> on peripheral with UUID E4DB5569-D8D3-E30C-8E0C-37470746C010

Updated notification state for characteristic with UUID <ffa4> on service with  UUID <ffa0> on peripheral with UUID E4DB5569-D8D3-E30C-8E0C-37470746C010

Updated notification state for characteristic with UUID <ffa5> on service with  UUID <ffa0> on peripheral with UUID E4DB5569-D8D3-E30C-8E0C-37470746C010

Updated notification state for characteristic with UUID <ffe1> on service with  UUID <ffe0> on peripheral with UUID E4DB5569-D8D3-E30C-8E0C-37470746C010

Updated notification state for characteristic with UUID <2a07> on service with  UUID <1804> on peripheral with UUID E4DB5569-D8D3-E30C-8E0C-37470746C010

Stopped Scanning

Known peripherals : 0

List of currently known peripherals :

 

  • Hey we're seeing the same thing too!  Just this morning running this test.  Any help on what might be going on would be great!

    Thanks,

    Brian 

  • Hi,

    If it is, that's meaning most of exiting BLE device cannot run at iOS7, right?

    Yesterday I did some testing, my current BLE devices all are working well.

    Br

    Patrick

  • I hope there won't need to be changes in the BLE device code, but in the way the iOS code handles UUID's (either in the iOS itself - that was the case when iOS 6 was initially released) - or some changes in the app (TI made some small changes in their demo app that worked until Apple made the "real" fix in iOS 6.01).

     

    I just need to know what was changed in the way iOS handles the UUID as compared to the older iOS.

    Note: the "00000's) in the first 3 segments of the iOS 7 log. (same app code - different iOS)

  • Hi...  Any TI folks out there with some insight?

     

    Thanks

  • Additional test...

    With the latest TI-iPhone4SBLE-Demo_rev2 and a Keyfob:

    iOS6 - everything works (as expected)

    iOS7 - everything works except the accelerometers

    ...note that on the xcode log file, "Fetching characteristics for service with UUID : <1800>" and "Fetching characteristics for service with UUID : <1801>" are missing on the iOS7 trial.

    Does this additional info give any clues as to what would need to be changed? (at least for the demo project to work)

     

    (1800 & 1801 are generic access and generic attribute)

  • Hey guys,

    Was there any resolution to this?

    Thanks,
    Brian

  • Hi Brian,

     

    I haven't heard a "peep" from anyone at TI or Apple.  I called TI directly last week and they told me they would have someone review these "posts", but again, nothing so far...

     

    I also have a "technical support ticket" in for Apple, I pay for those so I surely hope they will eventually respond as well.

     

    When I hear something I will let you know and if you have some time and would "rattle their cages" too, maybe they will take this serious.  I'm down for the last 2 weeks trying everything I can think of, and it is very disappointing on the lack of support from both TI and Apple on this - even if it is only them to say they won't do anything about this issue!

     

  • Many thanks to Marcus...

    Below is a post he left on a similar post I left on the Apple Developer web site: (It works for my code, but I also left a request with Apple to restore what was changed for those applications that are already out there)

     

     

    Hi Folks,

    We've also been suffering from this problem in iOS7, and are using the TI Fabdemo iPhone app to test with. 

    We had a breakthrough and were able to get it working.  This is the non-working code:

    -(void) writeValue:(int)serviceUUID characteristicUUID:(int)characteristicUUID p:(CBPeripheral *)p data:(NSData *)data {

        UInt16 s = [self swap:serviceUUID];

        UInt16 c = [self swap:characteristicUUID];

        NSData *sd = [[NSData alloc] initWithBytes:(char *)&s length:2];

        NSData *cd = [[NSData alloc] initWithBytes:(char *)&c length:2];

        CBUUID *su = [CBUUID UUIDWithData:sd];

        CBUUID *cu = [CBUUID UUIDWithData:cd];

        CBService *service = [self findServiceFromUUID:su p:p];

        if (!service) {

            printf("Could not find service with UUID %s on peripheral with UUID %s\r\n",[self CBUUIDToString:su],[self UUIDToString:p.UUID]);

            return;

        }

        CBCharacteristic *characteristic = [self findCharacteristicFromUUID:cu service:service];

        if (!characteristic) {

            printf("Could not find characteristic with UUID %s on service with UUID %s on peripheral with UUID %s\r\n",[self CBUUIDToString:cu],[self CBUUIDToString:su],[self UUIDToString:p.UUID]);

            return;

        }

        [p writeValue:data forCharacteristic:characteristic type:CBCharacteristicWriteWithoutResponse];

    }

    Changing the last line fixed this issue:

    [p writeValue:data forCharacteristic:characteristic type:CBCharacteristicWriteWithResponse];

     

    Our code now properly works with iOS6 & 7.

    Hope this helps someone.

    Best,Marcus

  • Hi !

    Apple changed two things when going from iOS 6.0 to iOS 7.0:

    - They fixed a bug wich made the iOS device write both with and without response to characteristics who only had one of the properties enabled. This caused some of the apps out there to stop working.

    - They "removed" the possibility for Apps to read and write from all the "built-in" profiles, I would expect that 1800 and 1801 are included in these. They also added HID so this service can not been seen from apps anymore either.

    I'm not sure from your post what problems you are experiencing, do you have problems writing to an attribute, or does the iOS device not detect the services you need to use ?

    BR,

    Ole A.

  • Ole A.,

     

    Thanks for taking the time to respond.  I posted that I found a solution but didn't "check the box" that said the problem was answered, so I guess it was still out there as an "open issue" and for that I'm sorry.

     

    Thanks again for the advice.

    evw

  • Dear Earl Van Wagoner,

    I am also facing the problem that iOS7 + not discovering the Service with UUID 1800. Can you share the "swap" method you used in your code
    [self swap:serviceUUID];