gpt4 book ai didi

ios - KeychainWrapperItem 在 iOS 7.1 中停止工作

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:07:36 25 4
gpt4 key购买 nike

我最近安装了 iOS 7.1 模拟器和新的 Xcode 5.1。我的应用程序在 iOS 7 中运行良好。我正在使用 Apple 的 KeychainItemWrapper 类。更新后它崩溃并显示以下消息:

*** Assertion failure in -[KeychainItemWrapper writeToKeychain]

特别是第 299 行:

NSAssert( result == noErr, @"Couldn't update the Keychain Item." );

错误是听到 -25300 (errSecItemNotFound)

我已经在我的授权文件中指定了钥匙串(keychain)访问组。此错误仅发生在 iOS 7.1 模拟器中,不会在真正的 iPhone 或 7.0 模拟器上。

有人知道 Keychain 在 7.1 中发生了什么变化吗?

最佳答案

嗯,KeychainItemWrapper 是一个充满错误的旧实现。我建议使用其他包装器,或编写您自己的包装器。

话虽这么说,我曾经犯过很多错误,但这次没有。基本上发生的事情是在保存它时检查您的项目是否已经在钥匙串(keychain)中,以便添加它或只是更新它。在这里,即使项目完全不同,检查也会返回 true,因此它无法更新,因为 SecItemUpdate 认为它不存在。

你应该做的是重置你的钥匙串(keychain),你有两个选择:

  • 在模拟器菜单 Simulator->Reset content and settings

  • 在代码中的某处运行此代码段:

基于此处的 Vegard 回答 Reset An iPhone App's Keychain

-(void)resetKeychain {
[self deleteAllKeysForSecClass:kSecClassGenericPassword];
[self deleteAllKeysForSecClass:kSecClassInternetPassword];
[self deleteAllKeysForSecClass:kSecClassCertificate];
[self deleteAllKeysForSecClass:kSecClassKey];
[self deleteAllKeysForSecClass:kSecClassIdentity];
}

-(void)deleteAllKeysForSecClass:(CFTypeRef)secClass {
NSMutableDictionary* dict = [NSMutableDictionary dictionary];
[dict setObject:(__bridge id)secClass forKey:(__bridge id)kSecClass];
OSStatus result = SecItemDelete((__bridge CFDictionaryRef) dict);
NSAssert(result == noErr || result == errSecItemNotFound, @"Error deleting keychain data (%ld)", result);
}

关于ios - KeychainWrapperItem 在 iOS 7.1 中停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22310753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com