OSStatus 错误:[-25291] 没有可用的钥匙串您可能需要重新启动计算机

问题描述

我正在尝试使用 KeychainAccess 实现钥匙串共享。我有我的主应用程序,它应该将一个字符串写入共享钥匙串和一个消息过滤器扩展,我想在其中读取钥匙串中的数据并进行一些额外的计算。

我在结构中声明所有内容如下:

protocol Keychainable {
    func save(string: String)
    func get() -> String?
}

struct KeychainAccessstruct: Keychainable {
    let keychain = Keychain(service: "app.test",accessGroup: "xxxxx.xxxxx.xxxxx.iFilterKeychain")
    
    func save(string: String) {
        let userData = try! NSKeyedArchiver.archivedData(withRootObject: string,requiringSecureCoding: false)
        do {
            try keychain.set(userData,key: "keychain_key")
        } catch {
            print(error)
        }
    }
    
    func get() -> String? {
        do {
            let value = try keychain.getData("keychain_key")
            return try! NSKeyedUnarchiver.unarchivetopLevelObjectWithData(value!) as! String
        } catch {
            print(error)
        }
        return nil
    }
}

在主应用程序中,当我尝试保存字符串时,我调用

let keychain = KeychainAccessstruct()
keychain.save(string: "STRING TO SAVE")

然后,在应用扩展中,当我尝试读取字符串时,我调用

let keychain = KeychainAccessstruct()
print(keychain.get())

问题是,当我运行扩展程序时,尝试从钥匙串读取时收到以下错误

Osstatus error:[-25291] No keychain is available. You may need to restart your computer.

另外,如果我尝试从主应用程序的钥匙串中检索字符串,它工作正常,看起来问题只发生在消息过滤扩展中。我查看了 this question,看起来我的所有设置都很好(我在方法实例化中包含了应用 ID 前缀,并且应用和扩展中都包含了权利)。
我还看到了 this question 并且,虽然我在功能中启用了钥匙串共享,但我似乎无法找到 RequestsOpenAccess 指的是什么(尽管这是一个较旧的答案,所以也许有些事情已经改变了? ).

一般来说,我对 swift 和 xcode 相当陌生,所以我不确定我到底错过了什么。任何人都可以帮助或指出我正确的方向吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)