首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >iOS8 +苹果的KeychainItemWrapper导致崩溃

iOS8 +苹果的KeychainItemWrapper导致崩溃
EN

Stack Overflow用户
提问于 2014-09-24 23:43:59
回答 2查看 3.6K关注 0票数 8

我一直在寻找苹果论坛,所以这个问题是徒劳的。使用苹果的KeychainItemWrapper (ARCified),尝试将kSecAttrAccessible属性设置为除默认(kSecAttrAccessibleWhenUnlocked)之外的任何东西,都会导致SecItemUpdate返回错误的断言失败。

代码语言:javascript
运行
复制
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];

我们的其他密钥链更新似乎进行得很好,但最后一行的结果是:

代码语言:javascript
运行
复制
*** 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。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-03 09:57:13

我也有确切的问题。给了我:

OSStatus错误-50 -冲突的kSecAccess和kSecAccessControl属性

在应用程序更新后,我的所有用户都崩溃了。

和彼得一样。抓取数据,删除项目并将其作为新项插入,而不是尝试更新现有项。

我猜这是苹果的窃听器。

我开了一个TSI,但他们还没有联系我。

据我所知,从iOS7升级到iOS 8的用户会遇到这种情况,他们的第一个应用程序是用XCode for iOS7编译的(在iOS 8发布之前),然后在iOS8上更新到使用XCode到iOS8编译的新应用程序。

票数 2
EN

Stack Overflow用户

发布于 2014-11-27 04:48:31

我也有同样的问题。最后,我测试了kSecAttrAccessibile,如果不是我想要的,我会在本地变量中记录密钥链中的值和属性,重置密钥链,按需要设置kSecAttrAccessible,然后将密钥链中的值和属性设置为它们的原始设置。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26028275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档