iOS 13 | Xcode 11 | NSData

问题描述 投票:0回答:1

我在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个回答
0
投票

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];
© www.soinside.com 2019 - 2024. All rights reserved.