[英]Does the Keychain in iOS actually work?
我一直在尝试使用 iOS 中的钥匙串来存储一些小信息——密码字符串、OAuth 令牌等。我正在使用 Apple 在此处提供的 KeychainItemWrapper 示例代码: Z5E056C500A1C407A7110B5。库/ios/#samplecode/GenericKeychain/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007797
我发现它非常有问题,有时它可以工作,有时我的应用程序在尝试将字符串值存储在钥匙串中时崩溃。 特别是当某些东西已经设置时,其他时候。 完全相同的调用工作得很好,错误发生在实际设备上。 不在模拟器中。
我通常写入钥匙串的方式是这样的:
KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"password" accessGroup:nil];
[wrapper setObject:thePasswordString forKey:(id)kSecValueData];
[wrapper release];
所以,我想知道的是:我做错了什么,是苹果公司的示例代码,还是实际的底层 iOS 钥匙串 API 坏了?
我发现 SFHFKeychainUtilities 是一个非常有用的包装器。 它提供了一个非常简单的 API,如下所示:
[SFHFKeychainUtils storeUsername:usernameInput andPassword:passwordInput forServiceName:@"foo" updateExisting:TRUE error:&error];
这是一个有用的教程: http://gorgando.com/blog/tag/sfhfkeychainutils
一直为我工作。
祝你好运!
我对这个 Wrapper 有很多问题。 我不知道为什么,但是您必须使用相同的标识符保存到 KSecAttrAccount,然后才能保存 kSecValueData。
像这样保存:
KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"MyIdentifier" accessGroup:nil];
[keychain setObject:@"MyIdentifier" forKey:(id)kSecAttrAccount];
[keychain setObject:[passwordFirst text] forKey:(id)kSecValueData];
Apple 的KeychainItemWrapper
确实有效 - 我在我的一个应用程序中使用它来存储 IAP 数据。 但是,我发现如果您的设备越狱,它似乎并不总是有效。 不确定设备越狱时钥匙串会发生什么,但我的一些 beta 测试人员报告说,当他们的设备越狱时,IAP 并不总是适用。
您似乎正在正确使用 class 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.