Формат данных kCBAdvDataManufacturerData изменился в iOS 13? - PullRequest
0 голосов
/ 27 сентября 2019

При использовании моего приложения на iOS 13 данные производителя изменили формат.

При доступе к kCBAdvDataManufacturerData в iOS 12 я получаю в этом формате:

<13376400>

но в iOS 13 я получаю этот формат:

{length = 4, bytes = 0x13376400}

Кто-нибудь знает, почему это изменилось?

Как я могу получить "1337 "часть как строка?

Вот как я получаю доступ и распечатываю данные:

    NSData *manufacturerData = [advertisementData objectForKey:kCBAdvDataManufacturerData];
    NSString *manufacturerString = [NSString stringWithFormat:@"%@", manufacturerData];
    NSString *companyIdentifier = [manufacturerString substringWithRange:NSMakeRange(1, 4)];
    NSLog(@"%@", companyIdentifier);

Печать: длина

Я пробовал factoryData.bytes, но он дает мнеОшибка EXC_BAD_ACCESS.

1 Ответ

0 голосов
/ 27 сентября 2019

Начиная с iOS 13, описание kCBAdvDataManufacturerData NSData было изменено.Чтобы иметь возможность извлекать и анализировать advertisementData, вы не должны больше опираться на description.Я нашел версию решения Swift, которая работает как на iOS 13, так и на старых версиях iOS:

В соответствии с приведенным выше кодом вы можете извлечь данные производителя NSData.

let publicData = Data(bytes: manufacturerData.bytes, count: Int(manufacturerData.length))

let publicDataAsHexString = publicData.dataToHexString // this result is same what ever the iOS version.

//// Data extension
extension Data {
    var dataToHexString: String {
        return reduce("") {$0 + String(format: "%02x", $1)}
    }
}
...