NSURL+SOSPlistStore.m [plain text]
//
// NSURL+SOSPlistWriting.h
//
#import <Security/Security.h>
#import <Foundation/NSPropertyList.h>
#import <Foundation/NSArray.h>
#import <Foundation/NSPropertyList.h>
#import <Foundation/NSData.h>
#import <Foundation/NSURL.h>
#import <Foundation/NSDictionary.h>
#import <utilities/debugging.h>
#import <utilities/SecFileLocations.h>
#if ! __has_feature(objc_arc)
#error This file must be compiled with ARC. Either turn on ARC for the project or use -fobjc-arc flag
#endif
// may want to have this hold incoming events in file as well
@implementation NSURL (SOSPlistWriting)
- (BOOL)writePlist: (id) plist
{
NSError *error = nil;
if (![NSPropertyListSerialization propertyList: plist isValidForFormat: NSPropertyListXMLFormat_v1_0])
{
secerror("can't save PersistentState as XML");
return false;
}
NSData *data = [NSPropertyListSerialization dataWithPropertyList: plist
format: NSPropertyListXMLFormat_v1_0 options: 0 error: &error];
if (data == nil)
{
secerror("error serializing PersistentState to xml: return false;
}
BOOL writeStatus = [data writeToURL:self options: NSDataWritingAtomic error: &error];
if (!writeStatus)
secerror("error writing PersistentState to file:
return writeStatus;
}
- (id) readPlist
{
NSError *error = nil;
NSData *data = [NSData dataWithContentsOfURL: self options: 0 error: &error];
if (data == nil)
{
secdebug("keyregister", "error reading PersistentState from return nil;
}
// Now the deserializing:
NSPropertyListFormat format;
id plist = [NSPropertyListSerialization propertyListWithData: data
options: NSPropertyListMutableContainersAndLeaves format: &format error: &error];
if (plist == nil)
secerror("could not deserialize PersistentState from
return plist;
}
@end