I'm just finishing a BLE project for a client. The code is based primarily on examples\ble_central_and_peripheral\experimental\ble_app_att_mtu_throughput. I'm using SDK 15.3.0. The host is a BMD-300 module incorporating a nRF52832.
It works fine with nRF Connect on the PC desktop and either a nRF52 or nRF52840 DK. It works fine with nRF Connect on Android. We don't have Apple resources, but our customer reports that it works with iPhones running iOS earlier than version 13. With iOS13, most of the time they can't see it advertising, and on the rare occasions when they do, they can't connect.
I've got the Apple Accessory Design Guidelines, but it's a stiff slog through the BLE section. The Number 1 Question is: Does Nordic have an iOS compatibility guide or blog post? It isn't just popping right up on the website.
I've looked at examples\ble_peripheral\ble_app_ancs_c as something that should work with Apple. Is there a more appropriate example to look at for working with iOS13? I've corresponded with the US field engineer; he has tried the ANCS example from both SDK 15.3.0 and 17.0.2 running on a nRF52840-DK, and his iOS13 phone does not see advertising.
a. I get that Apple is picky about advertising intervals. Got that; easy. The ANCS doesn't seem to bother (2.0 seconds, versus the listed largest 1.285 seconds in the Apple guide).
b. I should send the UUID for my proprietary service? Given that it is proprietary, should I send the entire 128-bit version or is the 16-bit version (bytes 13 & 14) adequate?
c. There were some remarks in a six-year-old DevZone trace about Apple "pairing" really being "bonding", and something about not initiating bonding until getting an ATT Insufficient Authorization response. I don't see this in the ANCS example, and my program currently does pairing without bonding. The Apple guide seems to indicate bonding is optional (section 35.10). I'm guessing this is not an issue if iOS devices earlier than 13 can connect.
d. There was another remark in a more recent DevZone post about nRF Connect possibly not working right on iOS and we should try LightBlue.