如何在模拟器中重置钥匙串?

Posted

技术标签:

【中文标题】如何在模拟器中重置钥匙串?【英文标题】:How do I reset the keychain in simulator? 【发布时间】:2015-09-21 01:21:39 【问题描述】:

我在模拟器钥匙串中存储了一些敏感数据的数据。 现在我必须测试如果该数据不存在会发生什么。

但我无法重置模拟器的钥匙串来测试它。

我已尝试从模拟器中删除该应用,然后重置内容和设置。但钥匙串数据仍然存在。

编辑:是的,我已尝试“重置内容和设置”,但这不起作用

【问题讨论】:

菜单中有一个选项:“ios 模拟器”->“重置内容和设置”。 :) 试过了。不工作 【参考方案1】:

最简单的方法是打开你的模拟器并转到:

"iOS Simulator -> Reset Content and Settings" 这将重置模拟器中的所有内容并将其恢复为默认设置。

如果你想通过代码做到这一点,你可以这样做:

NSArray *secItemClasses = @[(__bridge id)kSecClassGenericPassword,
                       (__bridge id)kSecClassInternetPassword,
                       (__bridge id)kSecClassCertificate,
                       (__bridge id)kSecClassKey,
                       (__bridge id)kSecClassIdentity];
for (id secItemClass in secItemClasses) 
    NSDictionary *spec = @(__bridge id)kSecClass: secItemClass;
    SecItemDelete((__bridge CFDictionaryRef)spec);

【讨论】:

实际上,“iOS 模拟器 -> 重置内容和设置”并不能解决问题。 “重置内容和设置”相当于设备恢复,(这将重置您的钥匙串)如果“重置内容和设置”不这样做,那么,这听起来像是模拟器中的错误. 不确定苹果做了什么,但“重置内容和设置”甚至不再从模拟器中删除应用程序...... 你用的是什么版本的模拟器? 只是对 2019 年遇到此问题的任何人的更新:我做了硬件 > 擦除所有内容和设置,它确实清除了钥匙串。【参考方案2】:

重置内容和设置有时无法正常工作。如果它不起作用,请再试一次。如果它真的一直不工作,退出Simulator.app,等待几秒钟,然后从终端运行xcrun simctl erase <Device UDID>。您可以通过运行xcrun simctl list获取设备的UDID。

这个竞赛错误应该在最新的 Xcode 7 Beta 中得到解决。

【讨论】:

我提交了一个雷达问题,被 Apple 标记为重复。所以他们正在努力,或者它已经在下一个 XCode 版本中修复。【参考方案3】:

在正在运行的设备上调用终端:

xcrun simctl spawn $device_udid launchctl stop com.apple.securityd;
rm -rf $HOME/Library/Developer/CoreSimulator/Devices/$device_udid/data/Library/Keychains;
xcrun simctl spawn $device_udid launchctl start com.apple.securityd;

【讨论】:

【参考方案4】:

Xcode 13.1

您可以从选项Device -> Erase All Content and Settings 删除模拟器上的钥匙串数据,如下图所示。

请记住,此选项将清除模拟器上的所有当前数据。

希望能帮助到别人!

【讨论】:

以上是关于如何在模拟器中重置钥匙串?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 中钥匙串服务的生命周期

如何查看 iPhone 模拟器的钥匙串

向当前捆绑包 ID 添加前缀会重置钥匙串吗?

想使用登录钥匙串卡死

使用 iphone sdk 在钥匙串中保存时出错

清除 UIAutomation 测试的钥匙串