应用程序被杀死时删除钥匙串

Delete Keychain when app is killed

我正在使用带有 iOS7 的钥匙串作为目标,我使用属性:kSecAttrAccessibleWhenUnlockedThisDeviceOnly

它运行良好,设备锁定 10 秒后钥匙串变量无法访问。

我现在想要的是在应用被杀死之前删除钥匙串。 applicationWillTerminate 仅当应用程序在进入后台之前被终止或系统释放应用程序时才会调用。如果应用程序在被用户杀死之前在后台运行 1 分钟,我找不到如何清除钥匙串。

有没有什么方法可以删除钥匙串或在应用程序在后台几分钟后被用户杀死时调用一个函数?

Is there any way to delete the keychain...

没有。在 iOS 上,只有一个钥匙串及其共享资源。

如果有兴趣,这里有一些从数据安全角度出发的读物。自 iOS 4/5 天以来,变化不大。我认为最有趣的新事物是 NSSecureCoding Protocol for iOS 7(或者是 6?)和指纹认证。

or have a function called when a app is killed after several minute in background

是也不是。 -applicationWillTerminate 没有被发送,不管文献怎么说。相反,您知道 SIGKILL 到达时您将终止。你不能困住它。不过,您也许可以从 sighandler 执行快速擦除和 return(我从未尝试过,所以我不知道)。

当数据敏感性保证时使用的策略是在您的代表收到 -applicationWillResignActive 时开始擦除数据。或者在 -applicationWillResignActive 到达时启动计时器,但在 -applicationWillEnterForeground 到达时取消计时器。如果时间到,则开始擦拭。但两者都会造成糟糕的用户体验。