【问题标题】:iOS 13 | Xcode 11 | NSDataiOS 13 | Xcode 11 | NSData
【发布时间】:2020-01-27 10:34:58
【问题描述】:

我在 iOS 13 中对钥匙串访问感到困惑。

CFDataRef passwordData = NULL;
OSStatus keychainError = noErr;
keychainError = SecItemCopyMatching((__bridge CFDictionaryRef)returnDictionary,
                                        (void *)&passwordData);

NSString *password = [[NSString alloc] initWithBytes:[(__bridge_transfer NSData *)passwordData bytes] length:[(__bridge NSData *)passwordData length] encoding:NSUTF8StringEncoding];

执行上述代码段后,密码变量值为

{length=32,bytes=0xf3388feaa238e92da01a21fdc477921c...2f021935af7f1883},,,,,,,,

但在 iOS 12 及更早版本中,我可以获得密码变量的预期值。

而且这只发生在带有 iOS 13 的 xcode 11 中

重新编辑: 这和钥匙串无关,都是从 NSData 描述方法发生的

【问题讨论】:

标签: objective-c push-notification nsstring ios13 xcode11


【解决方案1】:

Apple 已经更改了 Foundation 对象的描述格式,在我们的例子中是 NSData.下面是一个变化的例子:

// iOS 12
(deviceToken as NSData).description // "<965b251c 6cb1926d e3cb366f dfb16ddd e6b9086a 8a3cac9e 5f857679 376eab7C>"

// iOS 13
(deviceToken as NSData).description // "{length = 32, bytes = 0x965b251c 6cb1926d e3cb366f dfb16ddd ... 5f857679 376eab7c }"

为了获取之前的值描述,可以使用debugDescription

示例如下:

NSString* oldHashValue = [NSString stringWithFormat:@"%@",newHashValue.debugDescription];

【讨论】: