我需要从CBPeripheral和CBCenter的输入连接和传出连接中获取目标mac地址。标识符剂量没有在其中定义。 看起来是从iOS 7删除。还有其他方法吗?
答案 0 :(得分:8)
您无法获取CBPeripheral
的MAC地址,但您可以获取identifier
属性,这是iOS在其他信息中从MAC计算的UUID。
此值可以安全地存储并用于在此特定iOS设备上识别相同的外围设备。
不能在其他iOS设备上使用它来识别相同的外围设备。
答案 1 :(得分:3)
您可以在iOS 12中毫无问题地访问MAC地址。 要获取mac地址,您必须执行以下步骤。
extension Data{
func hexEncodedString() -> String {
let hexDigits = Array("0123456789abcdef".utf16)
var hexChars = [UTF16.CodeUnit]()
hexChars.reserveCapacity(count * 2)
for byte in self {
let (index1, index2) = Int(byte).quotientAndRemainder(dividingBy: 16)
hexChars.insert(hexDigits[index2], at: 0)
hexChars.insert(hexDigits[index1], at: 0)
}
return String(utf16CodeUnits: hexChars, count: hexChars.count)
}
}
extension String {
func separate(every stride: Int = 4, with separator: Character = " ") -> String {
return String(enumerated().map { $0 > 0 && $0 % stride == 0 ? [separator, $1] : [$1]}.joined())
}
}
func didReadValueForCharacteristic(_ characteristic: CBCharacteristic) {
if characteristic.uuid == BleDeviceProfile.MAC_ADDRESS, let mac_address = characteristic.value?.hexEncodedString().uppercased(){
let macAddress = mac_address.separate(every: 2, with: ":")
print("MAC_ADDRESS: \(macAddress)")
}
}