Comments (8)
That's a nice idea. Taking it a step farther, the API could then be simplified to save & retrieve a single object (presumably but not necessarily a dictionary), without an explicit key (or perhaps with an optional key). Automatic (and extensible) support for NSData, NSString, NSArray, NSDictionary, NSDate, and NSNumber.
from lockbox.
The idea isn't bad, but I think one wants to be careful with just how much data you store in the keychain. The keychain should not be used as a total NSUserDefaults replacement. So, generalizing Lockbox simply to store and retrieve plists is a clever improvement. But I am not sure it's the right thing to do. My intent was to be able to store things in the keychain easily, but to overload it (or make it TOO easy to do so.) Let me think about it. Of course, someone can fork the repo and do it themselves too. :-)
from lockbox.
It's a legitimate concern, but caveat developer. I'll look at migrating my fork. There are obvious advantages: not having to adapt new objects (like my NSDate patch), and as r-e points out, no worrying about delimiter conflicts.
My thinking: expose the object methods, and convert them to encode/decode with NSPropertyListSerialization, and then (I think) remove the class-specific API. NSPropertyListSerialization produces NSData, so the NSUTF8StringEncoding step disappears.
The existing Lockbox API could be preserved by simply NSPropertyListSerialization internally, but I lean toward a leaner API...
from lockbox.
I've just published jklundell/KCMutableDictionary as a morning project. It's basically an NSMutableDictionary (with minor limitations) that persists itself transparently in the keychain. It handles all the NSPropertyListSerialization-supported classes: NSData, NSString, NSArray, NSDictionary, NSDate, and NSNumber.
Have a look. Feedback welcome.
from lockbox.
Nicely done, Jonathan.
from lockbox.
For what it's worth, I've tested storing a megabyte of data into the keychain before. It seemed to work fine, but I didn't do any stress-testing: I was just looking for a limit. Note that I am not recommending such use of the keychain!
from lockbox.
JSON format would be even lighter (and more readable) than a Plist string.
Edit:
Also adopting JSON will allow to store complete trees of objects whereas now arrays, sets and dictionaries' contents are limited to strings.
from lockbox.
I have just pushed an update to Lockbox that deprecates all the setXxx and related getters, and added methods for archiving and unarchiving objects of any kind that conform to NSSecureCoding.
from lockbox.
Related Issues (20)
- Remove UIKit import HOT 5
- CocoaPods Support HOT 2
- Occasional Nil value for String. HOT 3
- Lockbox +setDictionary: converts `NSNumber` into `NSString` HOT 2
- Save data for coredata HOT 6
- SecItemCopy and SecItemAdd errors HOT 1
- Cannot find interface declaration for 'NSObject', superclass of 'Lockbox' HOT 3
- Wiping Clean Keychain Keys HOT 2
- Migration to archiveObject HOT 5
- Sharing keys with iOS Today Widget HOT 2
- Exception thrown when unarchiveObjectForKey called on ios 8 HOT 7
- How to save NSData in Dictionary format HOT 2
- Lockbox unarchiveObjectForKey: returns nil sometimes HOT 2
- LockBox doesn't save info in xcode 8 HOT 7
- Doesn't work under iOS 10 HOT 4
- Upgrading from Swift 2.3 -> 3 leaves old values inaccessible. HOT 7
- podspec does not define minimum iOS version HOT 2
- Not work in Xcode 11 HOT 3
- cash HOT 1
- Still can delete data, with "Keychain Access.app" HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from lockbox.