使用KeychainAccess删除所有项目

时间:2016-05-03 00:06:00

标签: ios swift keychain

我正在使用一个名为KeychainAccess的非常基本的Swift库来处理我应用中的钥匙串键的获取和设置。

我正在尝试删除首次运行应用时的所有钥匙串项目。除了删除所有项目之外,我的所有代码都没有问题。我的第一次尝试是遍历每个键并单独删除它,如下所示:

var keychain: Keychain!
if (NSUserDefaults.standardUserDefaults().objectForKey("FirstRun") == nil) {
    NSUserDefaults.standardUserDefaults().setValue("1strun", forKey: "FirstRun")
    NSUserDefaults.standardUserDefaults().synchronize()

    //Reset the keychain by looping through all and removing
    let allItems = keychain.allItems()
    for item in allItems {
        do {
            try keychain.remove(item["key"] as! String)
        } catch let error {
            print("error: \(error)")
        }
    }
}

虽然,在尝试获取keychain.allItems()时,我收到错误:fatal error: unexpectedly found nil while unwrapping an Optional value

所以我在Keychain.swift文件中挖了更多,找到了一个名为removeAll()的函数。所以我尝试使用它,就像这样:

do {
    try keychain.removeAll()
} catch let error {
    print("error: \(error)")
}

然而,我收到了与上述相同的错误。

我认为问题是因为我的应用的钥匙串已经空了。

2 个答案:

答案 0 :(得分:2)

在你发布keychain的声明之前,这是一个猜谜游戏,不过我猜错了你的声明:

var keychain: Keychain!

如果是这样,错误就是试图告诉你keychain是零

答案 1 :(得分:0)

如果某人只是希望钥匙串删除所有内容并从零开始, 这是一种简单的方法:

let key = "somekey"
let keychain = Keychain(service: key)


let keys = keychain.allKeys()
for key in keys {
    print("key: \(key)")
    do {
        try keychain.remove(key)
    } catch let error {
        print("error: \(error)")
    }
}