I have a login-screen in my iOS app.
The username and password will be saved in the NSUserDefaults
and be loaded into the login-screen again when you enter the app again (of course, NSUserDefaults
are permanent).
Now, the user have the possibility to disable the username/password saving feature.
So the NSUserDefaults
will be cleared then.
But In my app I need this username/password for database queries for the user.
So: Where to store the data except NSUserDefaults
?
(This place can / should be deleted when the user quit the app or logout).
You can simply use
NSURLCredential
, it will save both username and password in the keychain in just two lines of code.See my detailed answer.
But, now you can go for NURLCredential instead of keychain wrapper. It does what we need to do.
A very easy solution via Keychains.
It's a simple wrapper for the system Keychain. Just add the
SSKeychain.h
,SSKeychain.m
,SSKeychainQuery.h
andSSKeychainQuery.m
files to your project and add the Security.framework to your target.To save a password:
To retrieve a password:
Where
setPassword
is what value you want saved andforService
is what variable you want it saved under and account is for what user/object the password and any other info is for.The following should work just fine:
checkout this sample code i tried first the apple's wrapper from the sample code but this is much simpler for me
You should always use Keychain to store usernames and passwords, and since it's stored securely and only accessible to your app, there is no need to delete it when app quits (if that was your concern).
Apple provides sample code that stores, reads and deletes keychain items and here is how to use the keychain wrapper class from that sample which greatly simplifies using Keychain.
Include Security.framework (in Xcode 3 right-click on frameworks folder and add existing framework. In Xcode 4 select your project, then select target, go to Build Phases tab and click + under Link Binary With Files) and KeychainItemWrapper .h & .m files into your project, #import the .h file wherever you need to use keychain and then create an instance of this class:
(YourAppLogin can be anything you chose to call your Keychain item and you can have multiple items if required)
Then you can set the username and password using:
Get them using:
Or delete them using: