Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在第一次和第二次发布中未在开始时找到iOS密钥链值,然后在第三次发布中恢复正常_Ios_Swift_Xcode_Keychain - Fatal编程技术网

在第一次和第二次发布中未在开始时找到iOS密钥链值,然后在第三次发布中恢复正常

在第一次和第二次发布中未在开始时找到iOS密钥链值,然后在第三次发布中恢复正常,ios,swift,xcode,keychain,Ios,Swift,Xcode,Keychain,我们有一个应用程序,需要在发布后立即获取密钥链值。我注意到,在安装后的第一次和第二次启动中,直到我们的检查完成后,才能找到钥匙链值。 密钥链可访问性设置为.accessibleAfterFirstUnlock,我已尝试观察ProtectedData通知和applicationProtectedDataWillBecomeUnavailable委托方法,两者都未调用。无法访问密钥链时收到的错误为errSecItemNotFound 这在第三次发射后就停止了,一切恢复正常。自第三次启动以来,可以从一

我们有一个应用程序,需要在发布后立即获取密钥链值。我注意到,在安装后的第一次和第二次启动中,直到我们的检查完成后,才能找到钥匙链值。 密钥链可访问性设置为.accessibleAfterFirstUnlock,我已尝试观察ProtectedData通知和applicationProtectedDataWillBecomeUnavailable委托方法,两者都未调用。无法访问密钥链时收到的错误为errSecItemNotFound


这在第三次发射后就停止了,一切恢复正常。自第三次启动以来,可以从一开始访问密钥链值。但是第一次和第二次发布对我们的用户体验非常重要,所以我们想解决这个问题。我想知道是否有人见过类似的事情,以及如何解决。

我向您提出了这个框架:您可以使用
SPM
我是这样使用它的:

    import SimpleKeychain

    /// A helper function to load data from the Keychain
    func keyChainLoad(with key: String) -> String?
    {
        simpleKeychain.useAccessControl = false
        simpleKeychain.defaultAccessiblity = .whenUnlockedThisDeviceOnly
        
        return simpleKeychain.string(forKey: key)
        
    }
    
    func keyChainLoadData(with key: String) -> Data? {
        simpleKeychain.useAccessControl = false
        simpleKeychain.defaultAccessiblity = .whenUnlockedThisDeviceOnly
        return simpleKeychain.data(forKey: key)
    }
    
    /// A helper function to save data from the Keychain
    func keyChainSave(withValue value: String, forKey key: String)
    {
        simpleKeychain.useAccessControl = false
        simpleKeychain.defaultAccessiblity = .whenUnlockedThisDeviceOnly
        simpleKeychain.setString(value, forKey: key)
    }
    func keyChainSave(withData data: Data, forKey key: String)
    {
        simpleKeychain.useAccessControl = false
        simpleKeychain.defaultAccessiblity = .whenUnlockedThisDeviceOnly
        simpleKeychain.setData(data, forKey: key)
    }
    
    func keyChainDelete(forKey key: String)
    {
        simpleKeychain.useAccessControl = false
        simpleKeychain.defaultAccessiblity = .whenUnlockedThisDeviceOnly
        simpleKeychain.deleteEntry(forKey: key)
    }
证明它,它从未让我失望