iOS 应用删除并重新安装后,钥匙串数据会保留吗?

iOS Keychain Data will persist after app deleted and reinstall?

如您所知,Apple 禁止在 iOS 设备中获取唯一 ID。但有时我们需要识别设备,例如,当应用首次安装时只有一次用户获得奖励。我们不想在一台设备上签署(赚取奖金)多个用户。

因此,我们从设备中获取了 vendorID 并将此数据保存在钥匙串中(vendorID 随时间而变化,但我们不想更改 ID)。之后,我们检查此数据在钥匙串上是否可用。我阅读了这个帖子 [iOS 卸载后自动删除钥匙串项目][1] 相关的钥匙串数据将在应用程序删除后被删除。

但是当我尝试这种情况时。我的钥匙串数据没有删除,删除后钥匙串数据仍然存在。

所以我的问题就是从这里提出来的。有人知道这个问题吗?删除我的应用程序后,钥匙串数据将被保留或删除所有钥匙串数据。

钥匙串数据会在卸载后删除吗?

看看我的keychain数据保存功能

class func getUniqueDeviceID() -> String {
    guard let uniqueDeviceId = KeychainKeeper.shared.uniqueDeviceID else {
        let deviceId = (UIDevice.current.identifierForVendor?.uuidString)~
        KeychainKeeper.shared.uniqueDeviceID = deviceId
        return deviceId
    }
    return uniqueDeviceId
}

请不要提供其他解决方案。我们陷入了这种情况。我们想确定删除应用程序钥匙串后是否会被删除 [1]: https://forums.developer.apple.com/thread/36442


答案:

钥匙串数据现在始终存在。

钥匙串数据现在始终存在。

keychain 值的自动删除是在 10.3 的测试版中,但由于某种原因,他们消除了这种可能性。我想很多应用程序都习惯了 not droppable keychain。

检查此 question

通过 UserDefaults 有一个超级简单的方法:

func clearKeychainIfWillUnistall() {
let freshInstall = !UserDefaults.standard.bool(forKey: "alreadyInstalled")
 if freshInstall {
    KeychainKeeper.shared.clear()
    UserDefaults.standard.set(true, forKey: "alreadyInstalled")
  }
}

AppDelegate

中调用
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
  self.clearKeychainIfWillUnistall()
}

我所知道的最简单的解决方法。希望对你有帮助。