我一直在寻找苹果论坛,所以这个问题是徒劳的。使用苹果的KeychainItemWrapper (ARCified),尝试将kSecAttrAccessible属性设置为除默认(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];我们的其他密钥链更新似乎进行得很好,但最后一行的结果是:
*** Assertion failure in -[KeychainItemWrapper writeToKeychain], /Users/john.hammerlund/.../KeychainItemWrapper.m:299断言失败是由于SecItemUpdate()返回状态为-50,这似乎是一个通用的“无效参数”错误。
立即设置kSecAttrAccessible键没有影响,但将其设置为默认kSecAttrAccessibleWhenUnlocked可以缓解问题(但消除了问题)。另一个问题是我发现的唯一与导致KeychainItemWrapper崩溃的iOS 8相关的附加信息。构建带有iOS 7的设备或在iOS 7/8上使用模拟器可以消除这一问题;它只是在使用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 = cku; <-- kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly svce = ...; sync = 0; tomb = 0; "v_Data" = <>; }
attributesToUpdate参数:
{ 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 = ak; <-- kSecAttrAccessibleWhenUnlocked svce = ...; sync = 0; tomb = 0; "v_Data" = <>; }
我已经证实,更改其他字段(即kSecAttrService、kSecAttrAccount)对字典中的相应字段具有相同的效果,但期望状态为0。
发布于 2014-12-03 09:57:13
我也有确切的问题。给了我:
OSStatus错误-50 -冲突的kSecAccess和kSecAccessControl属性
在应用程序更新后,我的所有用户都崩溃了。
和彼得一样。抓取数据,删除项目并将其作为新项插入,而不是尝试更新现有项。
我猜这是苹果的窃听器。
我开了一个TSI,但他们还没有联系我。
据我所知,从iOS7升级到iOS 8的用户会遇到这种情况,他们的第一个应用程序是用XCode for iOS7编译的(在iOS 8发布之前),然后在iOS8上更新到使用XCode到iOS8编译的新应用程序。
发布于 2014-11-27 04:48:31
我也有同样的问题。最后,我测试了kSecAttrAccessibile,如果不是我想要的,我会在本地变量中记录密钥链中的值和属性,重置密钥链,按需要设置kSecAttrAccessible,然后将密钥链中的值和属性设置为它们的原始设置。
https://stackoverflow.com/questions/26028275
复制相似问题