matthewpalmer / Locksmith

A powerful, protocol-oriented library for working with the keychain in Swift.
MIT License
2.92k stars 266 forks source link

Not being able to retrieve values #149

Open nunogoncalves opened 7 years ago

nunogoncalves commented 7 years ago

Hi,

Just updated to the 2.0 version and now I'm unable to retrieve any values. Am I missing something?

I'm Using Xcode 8, and swift 3. Deployment target iOS 10.0

Problem:

Locksmith.saveData(data: ["some_key": "some_value"], forUserAccount: "user_account")

Locksmith.loadDataForUserAccount(userAccount: "user_account") => nil
mtso commented 7 years ago

I got the same result. I'm also on an updated Xcode 8; deployment target iOS 10.0; using:

$ swift --version
Apple Swift version 3.0 (swiftlang-800.0.46.2 clang-800.0.38)
Target: x86_64-apple-macosx10.9

I've put Locksmith.saveData(data:forUserAccount:) in viewDidLoad(). And then I'm getting nil when attempting Locksmith.loadDataForUserAccount(userAccount:) in a button clicked action.

mtso commented 7 years ago

Ah, found my solution here: Issue #146 Which points to: http://stackoverflow.com/a/38543243/2684355 Needed to enable Keychain Sharing in Targets > Capabilities.

Not sure if this will also work for @nunogoncalves?

mensly commented 7 years ago

This workaround also worked for me, which is enough to unblock my work using this library, but I think it is still a bug in Locksmith. Will submit a PR if I end up fixing it myself, probably something lost in translation when migrating to Swift 3. Had some problems myself related to the distinction between NSDictionary, Dictionary<String,AnyObject!> and Dictionary<String,AnyObject>; which caused code paths to fail in unexpected ways.

The documentation README also needs updating for Swift 3 method call syntax, and when used as in the initial bug report in a simple fresh project reproduces the bug. When using updateData rather than saveData, a LocksmithError.undefined is thrown.

Hope this additional information helps!

nunogoncalves commented 7 years ago

@mtso yes that worked. Thanks. :)

kooliokey commented 7 years ago

I had this same issue and @mtso's suggestion fixes it. Spent a long while checking my code to make sure it wasn't an issue from the conversion to Swift 3 that I just did. If it is an intentional requirement or not, at the least it should result in an error so it's known what is wrong.