Swift 检测应用卸载/重新安装的功能

Swift 检测应用卸载/重新安装的功能,swift,swift3,Swift,Swift3,一直在寻找一种方法来检测应用程序何时卸载/重新安装。问题是,我不使用NSUserDefaults,而是使用 我需要在卸载应用程序时清除该用户的密钥链 didfishlaunchingwithoptions似乎在应用程序加载时调用,因此没有任何用处。有没有办法检测重新安装的错误?我需要称之为: return KeychainWrapper.standard.removeObject(forKey: "myKey") // only when/if app is unsinstalled/reins

一直在寻找一种方法来检测应用程序何时卸载/重新安装。问题是,我不使用
NSUserDefaults
,而是使用

我需要在卸载应用程序时清除该用户的密钥链

didfishlaunchingwithoptions
似乎在应用程序加载时调用,因此没有任何用处。有没有办法检测重新安装的错误?我需要称之为:

return KeychainWrapper.standard.removeObject(forKey: "myKey") // only when/if app is unsinstalled/reinstalling

你使用钥匙链大概是因为你需要存储敏感信息?如果是这样的话,您可以只在
UserDefaults
中存储一个布尔值,并检查它是否存在。例如:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    let freshInstall = !UserDefaults.standard.bool(forKey: "alreadyInstalled")
    if freshInstall {
        // delete your item from keychain
        UserDefaults.standard.set(true, forKey: "alreadyInstalled")
    }

    return true
}

通过这种方式,您仍然可以获得密钥链的安全性,但用户在卸载/重新安装时的行为是默认的。

对于在答案的“//delete your item”部分搜索清除密钥链的其他人

斯威夫特3

let _ = KeychainWrapper.standard.removeAllKeys()

谢谢SwiftKeychainWrapper似乎有问题;您的方法确实在正确的时间调用,因此我的回答是正确的。谢谢。此代码不提供包含应用程序重新安装或卸载的信息。它只是告诉你我是一个新应用。@ayteq完全正确,但不幸的是,当你的应用在非越狱设备上被删除时,没有办法调用代码,然而这种方法以迂回的方式实现了同样的目标,OP在他的问题中明确指出,检查重新安装对他的场景来说是好的。