小编Joh*_*ohn的帖子

iOS8 + Apple的KeychainItemWrapper导致崩溃

我一直在围绕Apple论坛挖掘这个问题无济于事.使用Apple的KeychainItemWrapper(ARCified),尝试将kSecAttrAccessible属性设置为除default(kSecAttrAccessibleWhenUnlocked)之外的任何内容会导致SecItemUpdate返回错误的断言失败.

KeychainItemWrapper *wrapper = [[KeyChainItemWrapper alloc] initWithIdentifier:kMyIdentifier accessGroup:nil];
[wrapper setObject:kMyServiceName forKey:(__bridge NSString*)kSecAttrService];
[wrapper setObject:kMyAccountToken forKey:(__bridge NSString*)kSecAttrAccount];
[wrapper setObject:(__bridge NSString*)kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly forKey:(__bridge NSString*)kSecAttrAccessible];
Run Code Online (Sandbox Code Playgroud)

其余的钥匙串更新似乎正常,但最后一行导致:

*** Assertion failure in -[KeychainItemWrapper writeToKeychain], /Users/john.hammerlund/.../KeychainItemWrapper.m:299
Run Code Online (Sandbox Code Playgroud)

断言失败是由于SecItemUpdate()返回-50的状态,这似乎是一个通用的"无效参数"错误.

立即设置kSecAttrAccessible密钥没有任何影响,但将其设置为默认值可以kSecAttrAccessibleWhenUnlocked缓解问题(但消除了这一点). 另一个问题是我发现的与iOS 8有关的唯一其他信息导致KeychainItemWrapper崩溃.在iOS 7/8上构建iOS 7或模拟器的设备消除了这个问题; 它只是在使用iOS 8的真实设备上迸发出来.

更新

以下是查询字典的概述:

{ accc = "<SecAccessControlRef: 0x1687cc70>"; acct = ...; agrp = ...; cdat = "2014-10-13 22:22:47 +0000"; desc = ""; gena = ...; labl = ""; mdat = "2014-10-13 22:34:16 +0000"; pdmn = …

objective-c keychain ios8

8
推荐指数
1
解决办法
3343
查看次数

标签 统计

ios8 ×1

keychain ×1

objective-c ×1