我在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描述方法中]
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];