2 votes

iOS KeyChain value not found at beginning in first and second launches, then back to normal in third launches

Nous avons une application qui a besoin de récupérer les valeurs du trousseau de clés juste après le lancement. J'ai remarqué que lors du premier et du deuxième lancement après l'installation, les valeurs du trousseau ne sont pas trouvées avant la fin de notre vérification. L'accessibilité du trousseau est définie sur .accessibleAfterFirstUnlock, et j'ai essayé d'observer la notification ProtectedData et la méthode déléguée applicationProtectedDataWillBecomeUnavailable, mais aucune n'est appelée. L'erreur reçue lorsque l'accès au trousseau est impossible est errSecItemNotFound.

Cela ne se produit plus depuis le troisième lancement et les choses reviennent à la normale. Les valeurs du trousseau sont accessibles depuis le début depuis le troisième lancement. Mais les premier et deuxième lancements sont assez importants pour l'expérience de nos utilisateurs, donc nous voulons corriger cela. Je me demande si quelqu'un a vu des choses similaires et comment les résoudre.

0voto

Je vous propose ce cadre : https://github.com/auth0/SimpleKeychain que vous pouvez intégrer avec SPM Et je l'utilise de cette façon :

    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)
    }

prouvez-le, il ne m'a jamais laissé tomber

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X