From baf238a1413cb096680b369f3f0dfab46474b1e1 Mon Sep 17 00:00:00 2001 From: Drew McCormack Date: Sun, 20 May 2012 11:51:47 +0200 Subject: [PATCH] First commit. --- .gitignore | 1 + .../project.pbxproj | 320 + iCloudCoreDataTester/AppDelegate.h | 21 + iCloudCoreDataTester/AppDelegate.m | 358 ++ iCloudCoreDataTester/en.lproj/Credits.rtf | 29 + .../en.lproj/InfoPlist.strings | 2 + iCloudCoreDataTester/en.lproj/MainMenu.xib | 5363 +++++++++++++++++ .../iCloudCoreDataTester-Info.plist | 34 + .../iCloudCoreDataTester-Prefix.pch | 7 + .../iCloudCoreDataTester.entitlements | 12 + .../.xccurrentversion | 8 + .../iCloudCoreDataTester.xcdatamodel/contents | 47 + iCloudCoreDataTester/main.m | 14 + 13 files changed, 6216 insertions(+) create mode 100644 iCloudCoreDataTester.xcodeproj/project.pbxproj create mode 100644 iCloudCoreDataTester/AppDelegate.h create mode 100644 iCloudCoreDataTester/AppDelegate.m create mode 100644 iCloudCoreDataTester/en.lproj/Credits.rtf create mode 100644 iCloudCoreDataTester/en.lproj/InfoPlist.strings create mode 100644 iCloudCoreDataTester/en.lproj/MainMenu.xib create mode 100644 iCloudCoreDataTester/iCloudCoreDataTester-Info.plist create mode 100644 iCloudCoreDataTester/iCloudCoreDataTester-Prefix.pch create mode 100644 iCloudCoreDataTester/iCloudCoreDataTester.entitlements create mode 100644 iCloudCoreDataTester/iCloudCoreDataTester.xcdatamodeld/.xccurrentversion create mode 100644 iCloudCoreDataTester/iCloudCoreDataTester.xcdatamodeld/iCloudCoreDataTester.xcdatamodel/contents create mode 100644 iCloudCoreDataTester/main.m diff --git a/.gitignore b/.gitignore index edc082c..5a4e6ce 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ build/* xcuserdata profile *.moved-aside +.DS_Store diff --git a/iCloudCoreDataTester.xcodeproj/project.pbxproj b/iCloudCoreDataTester.xcodeproj/project.pbxproj new file mode 100644 index 0000000..617279a --- /dev/null +++ b/iCloudCoreDataTester.xcodeproj/project.pbxproj @@ -0,0 +1,320 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 070CF2BD1512406A00D0C8CA /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 070CF2BC1512406A00D0C8CA /* Cocoa.framework */; }; + 070CF2C71512406A00D0C8CA /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 070CF2C51512406A00D0C8CA /* InfoPlist.strings */; }; + 070CF2C91512406A00D0C8CA /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 070CF2C81512406A00D0C8CA /* main.m */; }; + 070CF2CD1512406A00D0C8CA /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 070CF2CB1512406A00D0C8CA /* Credits.rtf */; }; + 070CF2D01512406A00D0C8CA /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 070CF2CF1512406A00D0C8CA /* AppDelegate.m */; }; + 070CF2D31512406A00D0C8CA /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 070CF2D11512406A00D0C8CA /* MainMenu.xib */; }; + 070CF2D61512406A00D0C8CA /* iCloudCoreDataTester.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 070CF2D41512406A00D0C8CA /* iCloudCoreDataTester.xcdatamodeld */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 070CF2B81512406A00D0C8CA /* iCloudCoreDataTester.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iCloudCoreDataTester.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 070CF2BC1512406A00D0C8CA /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + 070CF2BF1512406A00D0C8CA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; + 070CF2C01512406A00D0C8CA /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; + 070CF2C11512406A00D0C8CA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 070CF2C41512406A00D0C8CA /* iCloudCoreDataTester-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "iCloudCoreDataTester-Info.plist"; sourceTree = ""; }; + 070CF2C61512406A00D0C8CA /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + 070CF2C81512406A00D0C8CA /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 070CF2CA1512406A00D0C8CA /* iCloudCoreDataTester-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "iCloudCoreDataTester-Prefix.pch"; sourceTree = ""; }; + 070CF2CC1512406A00D0C8CA /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = ""; }; + 070CF2CE1512406A00D0C8CA /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 070CF2CF1512406A00D0C8CA /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 070CF2D21512406A00D0C8CA /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainMenu.xib; sourceTree = ""; }; + 070CF2D51512406A00D0C8CA /* iCloudCoreDataTester.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = iCloudCoreDataTester.xcdatamodel; sourceTree = ""; }; + 072661DE15135B800015E115 /* iCloudCoreDataTester.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = iCloudCoreDataTester.entitlements; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 070CF2B51512406A00D0C8CA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 070CF2BD1512406A00D0C8CA /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 070CF2AD1512406A00D0C8CA = { + isa = PBXGroup; + children = ( + 070CF2C21512406A00D0C8CA /* iCloudCoreDataTester */, + 070CF2BB1512406A00D0C8CA /* Frameworks */, + 070CF2B91512406A00D0C8CA /* Products */, + ); + sourceTree = ""; + }; + 070CF2B91512406A00D0C8CA /* Products */ = { + isa = PBXGroup; + children = ( + 070CF2B81512406A00D0C8CA /* iCloudCoreDataTester.app */, + ); + name = Products; + sourceTree = ""; + }; + 070CF2BB1512406A00D0C8CA /* Frameworks */ = { + isa = PBXGroup; + children = ( + 070CF2BC1512406A00D0C8CA /* Cocoa.framework */, + 070CF2BE1512406A00D0C8CA /* Other Frameworks */, + ); + name = Frameworks; + sourceTree = ""; + }; + 070CF2BE1512406A00D0C8CA /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 070CF2BF1512406A00D0C8CA /* AppKit.framework */, + 070CF2C01512406A00D0C8CA /* CoreData.framework */, + 070CF2C11512406A00D0C8CA /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + 070CF2C21512406A00D0C8CA /* iCloudCoreDataTester */ = { + isa = PBXGroup; + children = ( + 072661DE15135B800015E115 /* iCloudCoreDataTester.entitlements */, + 070CF2CE1512406A00D0C8CA /* AppDelegate.h */, + 070CF2CF1512406A00D0C8CA /* AppDelegate.m */, + 070CF2D11512406A00D0C8CA /* MainMenu.xib */, + 070CF2D41512406A00D0C8CA /* iCloudCoreDataTester.xcdatamodeld */, + 070CF2C31512406A00D0C8CA /* Supporting Files */, + ); + path = iCloudCoreDataTester; + sourceTree = ""; + }; + 070CF2C31512406A00D0C8CA /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 070CF2C41512406A00D0C8CA /* iCloudCoreDataTester-Info.plist */, + 070CF2C51512406A00D0C8CA /* InfoPlist.strings */, + 070CF2C81512406A00D0C8CA /* main.m */, + 070CF2CA1512406A00D0C8CA /* iCloudCoreDataTester-Prefix.pch */, + 070CF2CB1512406A00D0C8CA /* Credits.rtf */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 070CF2B71512406A00D0C8CA /* iCloudCoreDataTester */ = { + isa = PBXNativeTarget; + buildConfigurationList = 070CF2D91512406A00D0C8CA /* Build configuration list for PBXNativeTarget "iCloudCoreDataTester" */; + buildPhases = ( + 070CF2B41512406A00D0C8CA /* Sources */, + 070CF2B51512406A00D0C8CA /* Frameworks */, + 070CF2B61512406A00D0C8CA /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = iCloudCoreDataTester; + productName = iCloudCoreDataTester; + productReference = 070CF2B81512406A00D0C8CA /* iCloudCoreDataTester.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 070CF2AF1512406A00D0C8CA /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0430; + ORGANIZATIONNAME = "The Mental Faculty"; + }; + buildConfigurationList = 070CF2B21512406A00D0C8CA /* Build configuration list for PBXProject "iCloudCoreDataTester" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 070CF2AD1512406A00D0C8CA; + productRefGroup = 070CF2B91512406A00D0C8CA /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 070CF2B71512406A00D0C8CA /* iCloudCoreDataTester */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 070CF2B61512406A00D0C8CA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 070CF2C71512406A00D0C8CA /* InfoPlist.strings in Resources */, + 070CF2CD1512406A00D0C8CA /* Credits.rtf in Resources */, + 070CF2D31512406A00D0C8CA /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 070CF2B41512406A00D0C8CA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 070CF2C91512406A00D0C8CA /* main.m in Sources */, + 070CF2D01512406A00D0C8CA /* AppDelegate.m in Sources */, + 070CF2D61512406A00D0C8CA /* iCloudCoreDataTester.xcdatamodeld in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 070CF2C51512406A00D0C8CA /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 070CF2C61512406A00D0C8CA /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + 070CF2CB1512406A00D0C8CA /* Credits.rtf */ = { + isa = PBXVariantGroup; + children = ( + 070CF2CC1512406A00D0C8CA /* en */, + ); + name = Credits.rtf; + sourceTree = ""; + }; + 070CF2D11512406A00D0C8CA /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 070CF2D21512406A00D0C8CA /* en */, + ); + name = MainMenu.xib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 070CF2D71512406A00D0C8CA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_ARC = YES; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.7; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + 070CF2D81512406A00D0C8CA /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_ARC = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.7; + SDKROOT = macosx; + }; + name = Release; + }; + 070CF2DA1512406A00D0C8CA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = iCloudCoreDataTester/iCloudCoreDataTester.entitlements; + CODE_SIGN_IDENTITY = "Mac Developer"; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "iCloudCoreDataTester/iCloudCoreDataTester-Prefix.pch"; + INFOPLIST_FILE = "iCloudCoreDataTester/iCloudCoreDataTester-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + 070CF2DB1512406A00D0C8CA /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = iCloudCoreDataTester/iCloudCoreDataTester.entitlements; + CODE_SIGN_IDENTITY = "Mac Developer"; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "iCloudCoreDataTester/iCloudCoreDataTester-Prefix.pch"; + INFOPLIST_FILE = "iCloudCoreDataTester/iCloudCoreDataTester-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 070CF2B21512406A00D0C8CA /* Build configuration list for PBXProject "iCloudCoreDataTester" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 070CF2D71512406A00D0C8CA /* Debug */, + 070CF2D81512406A00D0C8CA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 070CF2D91512406A00D0C8CA /* Build configuration list for PBXNativeTarget "iCloudCoreDataTester" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 070CF2DA1512406A00D0C8CA /* Debug */, + 070CF2DB1512406A00D0C8CA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCVersionGroup section */ + 070CF2D41512406A00D0C8CA /* iCloudCoreDataTester.xcdatamodeld */ = { + isa = XCVersionGroup; + children = ( + 070CF2D51512406A00D0C8CA /* iCloudCoreDataTester.xcdatamodel */, + ); + currentVersion = 070CF2D51512406A00D0C8CA /* iCloudCoreDataTester.xcdatamodel */; + path = iCloudCoreDataTester.xcdatamodeld; + sourceTree = ""; + versionGroupType = wrapper.xcdatamodel; + }; +/* End XCVersionGroup section */ + }; + rootObject = 070CF2AF1512406A00D0C8CA /* Project object */; +} diff --git a/iCloudCoreDataTester/AppDelegate.h b/iCloudCoreDataTester/AppDelegate.h new file mode 100644 index 0000000..8c8c209 --- /dev/null +++ b/iCloudCoreDataTester/AppDelegate.h @@ -0,0 +1,21 @@ +// +// AppDelegate.h +// iCloudCoreDataTester +// +// Created by Drew McCormack on 15/03/12. +// Copyright (c) 2012 The Mental Faculty. All rights reserved. +// + +#import + +@interface AppDelegate : NSObject + +@property (assign) IBOutlet NSWindow *window; + +@property (readwrite, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator; +@property (readwrite, strong, nonatomic) NSManagedObjectModel *managedObjectModel; +@property (readwrite, strong, nonatomic) NSManagedObjectContext *managedObjectContext; + +- (IBAction)saveAction:(id)sender; + +@end diff --git a/iCloudCoreDataTester/AppDelegate.m b/iCloudCoreDataTester/AppDelegate.m new file mode 100644 index 0000000..38bcc38 --- /dev/null +++ b/iCloudCoreDataTester/AppDelegate.m @@ -0,0 +1,358 @@ +// +// AppDelegate.m +// iCloudCoreDataTester +// +// Created by Drew McCormack on 15/03/12. +// Copyright (c) 2012 The Mental Faculty. All rights reserved. +// + +#import "AppDelegate.h" + +static NSString * const MCCloudMainStoreFileName = @"com.mentalfaculty.icloudcoredatatester.1"; + + +@implementation AppDelegate { + IBOutlet NSArrayController *notesController; + IBOutlet NSArrayController *schedulesController; + BOOL stackIsSetup; +} + +@synthesize window = _window; +@synthesize persistentStoreCoordinator = __persistentStoreCoordinator; +@synthesize managedObjectModel = __managedObjectModel; +@synthesize managedObjectContext = __managedObjectContext; + +-(id)init +{ + self = [super init]; + stackIsSetup = YES; + return self; +} + +// Returns the directory the application uses to store the Core Data store file. This code uses a directory named "com.mentalfaculty.iCloudCoreDataTester" in the user's Application Support directory. +- (NSURL *)applicationFilesDirectory +{ + NSFileManager *fileManager = [NSFileManager defaultManager]; + NSURL *appSupportURL = [[fileManager URLsForDirectory:NSApplicationSupportDirectory inDomains:NSUserDomainMask] lastObject]; + return [appSupportURL URLByAppendingPathComponent:@"iCloudCoreDataTester"]; +} + +-(IBAction)addNote:(id)sender +{ + id newNote = [NSEntityDescription insertNewObjectForEntityForName:@"Note" inManagedObjectContext:self.managedObjectContext]; + id newFacet = [NSEntityDescription insertNewObjectForEntityForName:@"Facet" inManagedObjectContext:self.managedObjectContext]; + [newFacet setValue:newNote forKey:@"note"]; + newFacet = [NSEntityDescription insertNewObjectForEntityForName:@"Facet" inManagedObjectContext:self.managedObjectContext]; + [newFacet setValue:newNote forKey:@"note"]; + id newPermutation = [NSEntityDescription insertNewObjectForEntityForName:@"Permutation" inManagedObjectContext:self.managedObjectContext]; + [newPermutation setValue:newFacet forKey:@"facet"]; + [newPermutation setValue:newNote forKey:@"note"]; +} + +-(IBAction)addSchedule:(id)sender +{ + id note = [[notesController selectedObjects] lastObject]; + if ( !note || notesController.selectedObjects.count > 1 ) return; + [self.managedObjectContext processPendingChanges]; + id newSchedule = [NSEntityDescription insertNewObjectForEntityForName:@"ChildSchedule" inManagedObjectContext:self.managedObjectContext]; + id permutation = [[note valueForKey:@"permutations"] anyObject]; + id existingSchedule = [permutation valueForKey:@"schedule"]; + if ( existingSchedule ) [self.managedObjectContext deleteObject:existingSchedule]; + [permutation setValue:newSchedule forKey:@"schedule"]; + [self.managedObjectContext processPendingChanges]; +} + +-(IBAction)removeSchedule:(id)sender +{ + NSArray *permutations = [schedulesController selectedObjects]; + for ( id perm in permutations ) { + id schedule = [perm valueForKey:@"schedule"]; + [perm setValue:nil forKey:@"note"]; + [self.managedObjectContext deleteObject:schedule]; + } +} + +-(IBAction)tearDownCoreDataStack:(id)sender +{ + if ( !stackIsSetup ) return; + stackIsSetup = NO; + [self.managedObjectContext save:NULL]; + [self.managedObjectContext reset]; + self.managedObjectContext = nil; + self.managedObjectModel = nil; + self.persistentStoreCoordinator = nil; +} + +-(IBAction)setupCoreDataStack:(id)sender +{ + if ( stackIsSetup ) return; + stackIsSetup = YES; + [self willChangeValueForKey:@"managedObjectContext"]; + [self didChangeValueForKey:@"managedObjectContext"]; +} + +-(IBAction)removeLocalFiles:(id)sender +{ + [self tearDownCoreDataStack:self]; + [[NSFileManager defaultManager] removeItemAtURL:[self applicationFilesDirectory] error:NULL]; +} + +-(IBAction)startSyncing:(id)sender +{ + [self tearDownCoreDataStack:self]; + + if ( [[NSFileManager defaultManager] fileExistsAtPath:[[self cloudStoreURL] path]] ) { + // Already cloud data present, so replace local data with it + [self removeLocalFiles:self]; + } + + [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"UsingCloud"]; + [self setupCoreDataStack:self]; +} + +-(NSURL *)cloudStoreURL +{ + static NSString * const ubiquityId = @"P7BXV6PHLD.com.mentalfaculty.iCloudCoreDataTester"; + NSURL *ubiquitousURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:ubiquityId]; + NSURL *storeURL = [ubiquitousURL URLByAppendingPathComponent:@"MainStore"]; + return storeURL; +} + +-(IBAction)removeCloudFiles:(id)sender +{ + [self tearDownCoreDataStack:self]; + + [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"UsingCloud"]; + + NSFileCoordinator* coordinator = [[NSFileCoordinator alloc] initWithFilePresenter:nil]; + NSURL *storeURL = self.cloudStoreURL; + if ( !storeURL ) return; + [coordinator coordinateWritingItemAtURL:storeURL options:NSFileCoordinatorWritingForDeleting error:NULL byAccessor:^(NSURL *newURL) { + [[NSFileManager defaultManager] removeItemAtURL:newURL error:nil]; + }]; +} + +- (void)applicationDidFinishLaunching:(NSNotification *)aNotification +{ + // Insert code here to initialize your application +} + +// Creates if necessary and returns the managed object model for the application. +- (NSManagedObjectModel *)managedObjectModel +{ + if (__managedObjectModel) { + return __managedObjectModel; + } + + NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"iCloudCoreDataTester" withExtension:@"momd"]; + __managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; + return __managedObjectModel; +} + +// Returns the persistent store coordinator for the application. This implementation creates and return a coordinator, having added the store for the application to it. (The directory for the store is created, if necessary.) +- (NSPersistentStoreCoordinator *)persistentStoreCoordinator +{ + if (__persistentStoreCoordinator) { + return __persistentStoreCoordinator; + } + + NSManagedObjectModel *mom = [self managedObjectModel]; + if (!mom) { + NSLog(@"%@:%@ No model to generate a store from", [self class], NSStringFromSelector(_cmd)); + return nil; + } + + NSURL *storeURL = self.cloudStoreURL; + BOOL usingCloudStorage = [[NSUserDefaults standardUserDefaults] boolForKey:@"UsingCloud"]; + usingCloudStorage &= storeURL != nil; + NSDictionary *options = [NSDictionary dictionary]; + if ( usingCloudStorage ) { + options = [NSDictionary dictionaryWithObjectsAndKeys: + MCCloudMainStoreFileName, NSPersistentStoreUbiquitousContentNameKey, + storeURL, NSPersistentStoreUbiquitousContentURLKey, + nil]; + } + + + NSFileManager *fileManager = [NSFileManager defaultManager]; + NSURL *applicationFilesDirectory = [self applicationFilesDirectory]; + NSError *error = nil; + + NSDictionary *properties = [applicationFilesDirectory resourceValuesForKeys:[NSArray arrayWithObject:NSURLIsDirectoryKey] error:&error]; + + if (!properties) { + BOOL ok = NO; + if ([error code] == NSFileReadNoSuchFileError) { + ok = [fileManager createDirectoryAtPath:[applicationFilesDirectory path] withIntermediateDirectories:YES attributes:nil error:&error]; + } + if (!ok) { + [[NSApplication sharedApplication] presentError:error]; + return nil; + } + } else { + if (![[properties objectForKey:NSURLIsDirectoryKey] boolValue]) { + // Customize and localize this error. + NSString *failureDescription = [NSString stringWithFormat:@"Expected a folder to store application data, found a file (%@).", [applicationFilesDirectory path]]; + + NSMutableDictionary *dict = [NSMutableDictionary dictionary]; + [dict setValue:failureDescription forKey:NSLocalizedDescriptionKey]; + error = [NSError errorWithDomain:@"YOUR_ERROR_DOMAIN" code:101 userInfo:dict]; + + [[NSApplication sharedApplication] presentError:error]; + return nil; + } + } + + NSURL *url = [applicationFilesDirectory URLByAppendingPathComponent:@"iCloudCoreDataTester.storedata"]; + NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:mom]; + if (![coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:options error:&error]) { + [[NSApplication sharedApplication] presentError:error]; + return nil; + } + __persistentStoreCoordinator = coordinator; + + [[NSNotificationCenter defaultCenter] removeObserver:self]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(persistentStoreCoordinatorDidMergeCloudChanges:) name:NSPersistentStoreDidImportUbiquitousContentChangesNotification object:coordinator]; + + return __persistentStoreCoordinator; +} + +-(void)persistentStoreCoordinatorDidMergeCloudChanges:(NSNotification *)notification +{ + // Notification contains object ids. The merge method expects objects, so need to convert. + [self.managedObjectContext performBlock:^{ + [self.managedObjectContext processPendingChanges]; + [self.managedObjectContext.undoManager disableUndoRegistration]; + + NSDictionary *noteInfo = [notification userInfo]; + NSMutableDictionary *localUserInfo = [NSMutableDictionary dictionary]; + + // Deletes and Inserts + for ( NSString *key in [NSSet setWithObjects:NSDeletedObjectsKey, NSInsertedObjectsKey, nil] ) { + NSSet *idSet = [noteInfo objectForKey:key]; + if ( idSet.count == 0 ) continue; + NSMutableSet *objectSet = [NSMutableSet set]; + for ( NSManagedObjectID *objectId in idSet ) { + [objectSet addObject:[self.managedObjectContext objectWithID:objectId]]; + } + [localUserInfo setObject:objectSet forKey:key]; + } + + // Updates + for ( NSString *key in [NSSet setWithObjects:NSUpdatedObjectsKey, NSRefreshedObjectsKey, NSInvalidatedObjectsKey, nil] ) { + NSSet *idSet = [noteInfo objectForKey:key]; + if ( idSet.count == 0 ) continue; + NSMutableSet *objectSet = [NSMutableSet set]; + for ( NSManagedObjectID *objectId in idSet ) { + NSManagedObject *object = [self.managedObjectContext objectRegisteredForID:objectId]; + if ( object ) [objectSet addObject:object]; + } + [localUserInfo setObject:objectSet forKey:key]; + } + + NSNotification *fakeSaveNotif = [NSNotification notificationWithName:NSManagedObjectContextDidSaveNotification object:self userInfo:localUserInfo]; + [self.managedObjectContext mergeChangesFromContextDidSaveNotification:fakeSaveNotif]; + + [self.managedObjectContext processPendingChanges]; + [self.managedObjectContext.undoManager enableUndoRegistration]; + + NSError *error; + if ( ![self.managedObjectContext save:&error] ) { + [NSApp presentError:error]; + } + }]; +} + + +// Returns the managed object context for the application (which is already bound to the persistent store coordinator for the application.) +- (NSManagedObjectContext *)managedObjectContext +{ + if ( !stackIsSetup ) return nil; + + if (__managedObjectContext) { + return __managedObjectContext; + } + + NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; + if (!coordinator) { + NSMutableDictionary *dict = [NSMutableDictionary dictionary]; + [dict setValue:@"Failed to initialize the store" forKey:NSLocalizedDescriptionKey]; + [dict setValue:@"There was an error building up the data file." forKey:NSLocalizedFailureReasonErrorKey]; + NSError *error = [NSError errorWithDomain:@"YOUR_ERROR_DOMAIN" code:9999 userInfo:dict]; + [[NSApplication sharedApplication] presentError:error]; + return nil; + } + __managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; + [__managedObjectContext setPersistentStoreCoordinator:coordinator]; + __managedObjectContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy; + + return __managedObjectContext; +} + +// Returns the NSUndoManager for the application. In this case, the manager returned is that of the managed object context for the application. +- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window +{ + return [[self managedObjectContext] undoManager]; +} + +// Performs the save action for the application, which is to send the save: message to the application's managed object context. Any encountered errors are presented to the user. +- (IBAction)saveAction:(id)sender +{ + NSError *error = nil; + + if (![[self managedObjectContext] commitEditing]) { + NSLog(@"%@:%@ unable to commit editing before saving", [self class], NSStringFromSelector(_cmd)); + } + + if (![[self managedObjectContext] save:&error]) { + [[NSApplication sharedApplication] presentError:error]; + } +} + +- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender +{ + // Save changes in the application's managed object context before the application terminates. + + if (!__managedObjectContext) { + return NSTerminateNow; + } + + if (![[self managedObjectContext] commitEditing]) { + NSLog(@"%@:%@ unable to commit editing to terminate", [self class], NSStringFromSelector(_cmd)); + return NSTerminateCancel; + } + + if (![[self managedObjectContext] hasChanges]) { + return NSTerminateNow; + } + + NSError *error = nil; + if (![[self managedObjectContext] save:&error]) { + + // Customize this code block to include application-specific recovery steps. + BOOL result = [sender presentError:error]; + if (result) { + return NSTerminateCancel; + } + + NSString *question = NSLocalizedString(@"Could not save changes while quitting. Quit anyway?", @"Quit without saves error question message"); + NSString *info = NSLocalizedString(@"Quitting now will lose any changes you have made since the last successful save", @"Quit without saves error question info"); + NSString *quitButton = NSLocalizedString(@"Quit anyway", @"Quit anyway button title"); + NSString *cancelButton = NSLocalizedString(@"Cancel", @"Cancel button title"); + NSAlert *alert = [[NSAlert alloc] init]; + [alert setMessageText:question]; + [alert setInformativeText:info]; + [alert addButtonWithTitle:quitButton]; + [alert addButtonWithTitle:cancelButton]; + + NSInteger answer = [alert runModal]; + + if (answer == NSAlertAlternateReturn) { + return NSTerminateCancel; + } + } + + return NSTerminateNow; +} + +@end diff --git a/iCloudCoreDataTester/en.lproj/Credits.rtf b/iCloudCoreDataTester/en.lproj/Credits.rtf new file mode 100644 index 0000000..46576ef --- /dev/null +++ b/iCloudCoreDataTester/en.lproj/Credits.rtf @@ -0,0 +1,29 @@ +{\rtf0\ansi{\fonttbl\f0\fswiss Helvetica;} +{\colortbl;\red255\green255\blue255;} +\paperw9840\paperh8400 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural + +\f0\b\fs24 \cf0 Engineering: +\b0 \ + Some people\ +\ + +\b Human Interface Design: +\b0 \ + Some other people\ +\ + +\b Testing: +\b0 \ + Hopefully not nobody\ +\ + +\b Documentation: +\b0 \ + Whoever\ +\ + +\b With special thanks to: +\b0 \ + Mom\ +} diff --git a/iCloudCoreDataTester/en.lproj/InfoPlist.strings b/iCloudCoreDataTester/en.lproj/InfoPlist.strings new file mode 100644 index 0000000..477b28f --- /dev/null +++ b/iCloudCoreDataTester/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/iCloudCoreDataTester/en.lproj/MainMenu.xib b/iCloudCoreDataTester/en.lproj/MainMenu.xib new file mode 100644 index 0000000..16df46d --- /dev/null +++ b/iCloudCoreDataTester/en.lproj/MainMenu.xib @@ -0,0 +1,5363 @@ + + + + 1070 + 11D50b + 2182 + 1138.32 + 568.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 2182 + + + NSScroller + NSArrayController + NSMenuItem + NSMenu + NSScrollView + NSTableHeaderView + NSTextFieldCell + NSButton + NSButtonCell + NSTableView + IBNSLayoutConstraint + NSCustomObject + NSView + NSWindowTemplate + NSTableColumn + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + NSApplication + + + FirstResponder + + + NSApplication + + + AMainMenu + + + + iCloudCoreDataTester + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + iCloudCoreDataTester + + + + About iCloudCoreDataTester + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Preferences… + , + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Services + + 1048576 + 2147483647 + + + submenuAction: + + Services + + _NSServicesMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Hide iCloudCoreDataTester + h + 1048576 + 2147483647 + + + + + + Hide Others + h + 1572864 + 2147483647 + + + + + + Show All + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Quit iCloudCoreDataTester + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + File + + 1048576 + 2147483647 + + + submenuAction: + + File + + + + New + n + 1048576 + 2147483647 + + + + + + Open… + o + 1048576 + 2147483647 + + + + + + Open Recent + + 1048576 + 2147483647 + + + submenuAction: + + Open Recent + + + + Clear Menu + + 1048576 + 2147483647 + + + + + _NSRecentDocumentsMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Close + w + 1048576 + 2147483647 + + + + + + Save… + s + 1048576 + 2147483647 + + + + + + Revert to Saved + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Page Setup... + P + 1179648 + 2147483647 + + + + + + + Print… + p + 1048576 + 2147483647 + + + + + + + + + Edit + + 1048576 + 2147483647 + + + submenuAction: + + Edit + + + + Undo + z + 1048576 + 2147483647 + + + + + + Redo + Z + 1179648 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Cut + x + 1048576 + 2147483647 + + + + + + Copy + c + 1048576 + 2147483647 + + + + + + Paste + v + 1048576 + 2147483647 + + + + + + Paste and Match Style + V + 1572864 + 2147483647 + + + + + + Delete + + 1048576 + 2147483647 + + + + + + Select All + a + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Find + + 1048576 + 2147483647 + + + submenuAction: + + Find + + + + Find… + f + 1048576 + 2147483647 + + + 1 + + + + Find and Replace… + f + 1572864 + 2147483647 + + + 12 + + + + Find Next + g + 1048576 + 2147483647 + + + 2 + + + + Find Previous + G + 1179648 + 2147483647 + + + 3 + + + + Use Selection for Find + e + 1048576 + 2147483647 + + + 7 + + + + Jump to Selection + j + 1048576 + 2147483647 + + + + + + + + + Spelling and Grammar + + 1048576 + 2147483647 + + + submenuAction: + + Spelling and Grammar + + + + Show Spelling and Grammar + : + 1048576 + 2147483647 + + + + + + Check Document Now + ; + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Check Spelling While Typing + + 1048576 + 2147483647 + + + + + + Check Grammar With Spelling + + 1048576 + 2147483647 + + + + + + Correct Spelling Automatically + + 2147483647 + + + + + + + + + Substitutions + + 1048576 + 2147483647 + + + submenuAction: + + Substitutions + + + + Show Substitutions + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Smart Copy/Paste + f + 1048576 + 2147483647 + + + 1 + + + + Smart Quotes + g + 1048576 + 2147483647 + + + 2 + + + + Smart Dashes + + 2147483647 + + + + + + Smart Links + G + 1179648 + 2147483647 + + + 3 + + + + Text Replacement + + 2147483647 + + + + + + + + + Transformations + + 2147483647 + + + submenuAction: + + Transformations + + + + Make Upper Case + + 2147483647 + + + + + + Make Lower Case + + 2147483647 + + + + + + Capitalize + + 2147483647 + + + + + + + + + Speech + + 1048576 + 2147483647 + + + submenuAction: + + Speech + + + + Start Speaking + + 1048576 + 2147483647 + + + + + + Stop Speaking + + 1048576 + 2147483647 + + + + + + + + + + + + Format + + 2147483647 + + + submenuAction: + + Format + + + + Font + + 2147483647 + + + submenuAction: + + Font + + + + Show Fonts + t + 1048576 + 2147483647 + + + + + + Bold + b + 1048576 + 2147483647 + + + 2 + + + + Italic + i + 1048576 + 2147483647 + + + 1 + + + + Underline + u + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Bigger + + + 1048576 + 2147483647 + + + 3 + + + + Smaller + - + 1048576 + 2147483647 + + + 4 + + + + YES + YES + + + 2147483647 + + + + + + Kern + + 2147483647 + + + submenuAction: + + Kern + + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Tighten + + 2147483647 + + + + + + Loosen + + 2147483647 + + + + + + + + + Ligature + + 2147483647 + + + submenuAction: + + Ligature + + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Use All + + 2147483647 + + + + + + + + + Baseline + + 2147483647 + + + submenuAction: + + Baseline + + + + Use Default + + 2147483647 + + + + + + Superscript + + 2147483647 + + + + + + Subscript + + 2147483647 + + + + + + Raise + + 2147483647 + + + + + + Lower + + 2147483647 + + + + + + + + + YES + YES + + + 2147483647 + + + + + + Show Colors + C + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Copy Style + c + 1572864 + 2147483647 + + + + + + Paste Style + v + 1572864 + 2147483647 + + + + + _NSFontMenu + + + + + Text + + 2147483647 + + + submenuAction: + + Text + + + + Align Left + { + 1048576 + 2147483647 + + + + + + Center + | + 1048576 + 2147483647 + + + + + + Justify + + 2147483647 + + + + + + Align Right + } + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Writing Direction + + 2147483647 + + + submenuAction: + + Writing Direction + + + + YES + Paragraph + + 2147483647 + + + + + + CURlZmF1bHQ + + 2147483647 + + + + + + CUxlZnQgdG8gUmlnaHQ + + 2147483647 + + + + + + CVJpZ2h0IHRvIExlZnQ + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + YES + Selection + + 2147483647 + + + + + + CURlZmF1bHQ + + 2147483647 + + + + + + CUxlZnQgdG8gUmlnaHQ + + 2147483647 + + + + + + CVJpZ2h0IHRvIExlZnQ + + 2147483647 + + + + + + + + + YES + YES + + + 2147483647 + + + + + + Show Ruler + + 2147483647 + + + + + + Copy Ruler + c + 1310720 + 2147483647 + + + + + + Paste Ruler + v + 1310720 + 2147483647 + + + + + + + + + + + + View + + 1048576 + 2147483647 + + + submenuAction: + + View + + + + Show Toolbar + t + 1572864 + 2147483647 + + + + + + Customize Toolbar… + + 1048576 + 2147483647 + + + + + + + + + Window + + 1048576 + 2147483647 + + + submenuAction: + + Window + + + + Minimize + m + 1048576 + 2147483647 + + + + + + Zoom + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Bring All to Front + + 1048576 + 2147483647 + + + + + _NSWindowsMenu + + + + + Help + + 2147483647 + + + submenuAction: + + Help + + + + iCloudCoreDataTester Help + ? + 1048576 + 2147483647 + + + + + _NSHelpMenu + + + + _NSMainMenu + + + 1 + 2 + {{335, 390}, {732, 681}} + 1954021376 + iCloudCoreDataTester + NSWindow + + + + + 256 + + + + 268 + + + + 2304 + + + + 256 + {221, 323} + + + + _NS:13 + YES + + + 256 + {221, 17} + + + + _NS:16 + + + + + -2147483392 + {{224, 0}, {16, 17}} + + _NS:19 + + + + 218 + 40 + 1000 + + 75628096 + 2048 + + + LucidaGrande + 11 + 3100 + + + 3 + MC4zMzMzMzI5ODU2AA + + + 6 + System + headerTextColor + + 3 + MAA + + + + + 337772096 + 2048 + Text Cell + + LucidaGrande + 13 + 1044 + + + + 6 + System + controlBackgroundColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + + + 3 + YES + YES + + + + 3 + 2 + + 3 + MQA + + + 6 + System + gridColor + + 3 + MC41AA + + + 17 + -700448768 + + + 4 + 15 + 0 + YES + 0 + 1 + + + {{1, 17}, {221, 323}} + + + + _NS:11 + + + 4 + + + + -2147483392 + {{224, 17}, {15, 102}} + + + + _NS:58 + + _doScroller: + 37 + 0.1947367936372757 + + + + -2147483392 + {{1, 119}, {238, 15}} + + + + _NS:60 + 1 + + _doScroller: + 1 + 0.93333333333333335 + + + + 2304 + + + + {{1, 0}, {221, 17}} + + + + _NS:15 + + + 4 + + + {{130, 314}, {223, 341}} + + + + _NS:9 + 133682 + + + + + QSAAAEEgAABBmAAAQZgAAA + + + + 268 + + + + 2304 + + + + 256 + {212, 323} + + + + _NS:13 + YES + + + 256 + {212, 17} + + + + _NS:16 + + + + + -2147483392 + {{224, 0}, {16, 17}} + + _NS:19 + + + + 209 + 40 + 1000 + + 75628096 + 2048 + + + + 3 + MC4zMzMzMzI5ODU2AA + + + + + 337772096 + 2048 + Text Cell + + + + + + 3 + YES + YES + + + + 3 + 2 + + + 17 + -700448768 + + + 4 + 15 + 0 + YES + 0 + 1 + + + {{1, 17}, {212, 323}} + + + + _NS:11 + + + 4 + + + + -2147483392 + {{224, 17}, {15, 102}} + + + + _NS:58 + + _doScroller: + 37 + 0.1947367936372757 + + + + -2147483392 + {{1, 119}, {238, 15}} + + + + _NS:60 + 1 + + _doScroller: + 1 + 0.93333333333333335 + + + + 2304 + + + + {{1, 0}, {212, 17}} + + + + _NS:15 + + + 4 + + + {{403, 314}, {214, 341}} + + + + _NS:9 + 133682 + + + + + QSAAAEEgAABBmAAAQZgAAA + + + + 268 + {{180, 266}, {124, 32}} + + + + _NS:9 + YES + + 67239424 + 134217728 + Add Note + + _NS:9 + + -2038284033 + 129 + + + 200 + 25 + + + + + 268 + {{180, 234}, {124, 32}} + + + + _NS:9 + YES + + 67239424 + 134217728 + Remove Note + + _NS:9 + + -2038284033 + 129 + + + 200 + 25 + + + + + 268 + {{435, 265}, {150, 32}} + + + + _NS:9 + YES + + 67239424 + 134217728 + Add Schedule + + _NS:9 + + -2038284033 + 129 + + + 200 + 25 + + + + + 268 + {{435, 233}, {150, 32}} + + + + _NS:9 + YES + + 67239424 + 134217728 + Remove Schedule + + _NS:9 + + -2038284033 + 129 + + + 200 + 25 + + + + + 268 + {{192, 144}, {177, 34}} + + + + _NS:9 + YES + + 67239424 + 134217728 + Teardown Core Data Stack + + _NS:9 + + -2033434369 + 134 + + + 400 + 75 + + + + + 268 + {{389, 44}, {177, 34}} + + + _NS:9 + YES + + 67239424 + 134217728 + Save + + _NS:9 + + -2033434369 + 134 + + + 400 + 75 + + + + + 268 + {{192, 44}, {177, 34}} + + + _NS:9 + YES + + 67239424 + 134217728 + Start Syncing + + _NS:9 + + -2033434369 + 134 + + + 400 + 75 + + + + + 268 + {{192, 95}, {177, 34}} + + + + _NS:9 + YES + + 67239424 + 134217728 + Setup Core Data Stack + + _NS:9 + + -2033434369 + 134 + + + 400 + 75 + + + + + 268 + {{389, 95}, {177, 34}} + + + + _NS:9 + YES + + 67239424 + 134217728 + Remove iCloud Files + + _NS:9 + + -2033434369 + 134 + + + 400 + 75 + + + + + 268 + {{389, 144}, {177, 34}} + + + + _NS:9 + YES + + 67239424 + 134217728 + Remove Local Files + + _NS:9 + + -2033434369 + 134 + + + 400 + 75 + + + + {732, 681} + + + + + {{0, 0}, {2560, 1418}} + {10000000000000, 10000000000000} + YES + + + AppDelegate + + + NSFontManager + + + YES + YES + + Note + + YES + YES + YES + YES + YES + YES + + + YES + YES + + Permutation + + YES + YES + YES + YES + + + + + + + terminate: + + + + 449 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + delegate + + + + 495 + + + + performMiniaturize: + + + + 37 + + + + arrangeInFront: + + + + 39 + + + + print: + + + + 86 + + + + runPageLayout: + + + + 87 + + + + clearRecentDocuments: + + + + 127 + + + + performClose: + + + + 193 + + + + toggleContinuousSpellChecking: + + + + 222 + + + + undo: + + + + 223 + + + + copy: + + + + 224 + + + + checkSpelling: + + + + 225 + + + + paste: + + + + 226 + + + + stopSpeaking: + + + + 227 + + + + cut: + + + + 228 + + + + showGuessPanel: + + + + 230 + + + + redo: + + + + 231 + + + + selectAll: + + + + 232 + + + + startSpeaking: + + + + 233 + + + + delete: + + + + 235 + + + + performZoom: + + + + 240 + + + + performFindPanelAction: + + + + 241 + + + + centerSelectionInVisibleArea: + + + + 245 + + + + toggleGrammarChecking: + + + + 347 + + + + toggleSmartInsertDelete: + + + + 355 + + + + toggleAutomaticQuoteSubstitution: + + + + 356 + + + + toggleAutomaticLinkDetection: + + + + 357 + + + + saveDocument: + + + + 362 + + + + revertDocumentToSaved: + + + + 364 + + + + runToolbarCustomizationPalette: + + + + 365 + + + + toggleToolbarShown: + + + + 366 + + + + hide: + + + + 367 + + + + hideOtherApplications: + + + + 368 + + + + unhideAllApplications: + + + + 370 + + + + newDocument: + + + + 373 + + + + openDocument: + + + + 374 + + + + raiseBaseline: + + + + 426 + + + + lowerBaseline: + + + + 427 + + + + copyFont: + + + + 428 + + + + subscript: + + + + 429 + + + + superscript: + + + + 430 + + + + tightenKerning: + + + + 431 + + + + underline: + + + + 432 + + + + orderFrontColorPanel: + + + + 433 + + + + useAllLigatures: + + + + 434 + + + + loosenKerning: + + + + 435 + + + + pasteFont: + + + + 436 + + + + unscript: + + + + 437 + + + + useStandardKerning: + + + + 438 + + + + useStandardLigatures: + + + + 439 + + + + turnOffLigatures: + + + + 440 + + + + turnOffKerning: + + + + 441 + + + + toggleAutomaticSpellingCorrection: + + + + 456 + + + + orderFrontSubstitutionsPanel: + + + + 458 + + + + toggleAutomaticDashSubstitution: + + + + 461 + + + + toggleAutomaticTextReplacement: + + + + 463 + + + + uppercaseWord: + + + + 464 + + + + capitalizeWord: + + + + 467 + + + + lowercaseWord: + + + + 468 + + + + pasteAsPlainText: + + + + 486 + + + + performFindPanelAction: + + + + 487 + + + + performFindPanelAction: + + + + 488 + + + + performFindPanelAction: + + + + 489 + + + + showHelp: + + + + 493 + + + + alignCenter: + + + + 518 + + + + pasteRuler: + + + + 519 + + + + toggleRuler: + + + + 520 + + + + alignRight: + + + + 521 + + + + copyRuler: + + + + 522 + + + + alignJustified: + + + + 523 + + + + alignLeft: + + + + 524 + + + + makeBaseWritingDirectionNatural: + + + + 525 + + + + makeBaseWritingDirectionLeftToRight: + + + + 526 + + + + makeBaseWritingDirectionRightToLeft: + + + + 527 + + + + makeTextWritingDirectionNatural: + + + + 528 + + + + makeTextWritingDirectionLeftToRight: + + + + 529 + + + + makeTextWritingDirectionRightToLeft: + + + + 530 + + + + performFindPanelAction: + + + + 535 + + + + addFontTrait: + + + + 421 + + + + addFontTrait: + + + + 422 + + + + modifyFont: + + + + 423 + + + + orderFrontFontPanel: + + + + 424 + + + + modifyFont: + + + + 425 + + + + window + + + + 532 + + + + notesController + + + + 647 + + + + schedulesController + + + + 648 + + + + addSchedule: + + + + 686 + + + + tearDownCoreDataStack: + + + + 1127 + + + + removeLocalFiles: + + + + 1128 + + + + removeCloudFiles: + + + + 1129 + + + + setupCoreDataStack: + + + + 1130 + + + + startSyncing: + + + + 1138 + + + + saveAction: + + + + 1153 + + + + addNote: + + + + 1154 + + + + removeSchedule: + + + + 1155 + + + + remove: + + + + 680 + + + + managedObjectContext: managedObjectContext + + + + + + managedObjectContext: managedObjectContext + managedObjectContext + managedObjectContext + 2 + + + 1133 + + + + content: arrangedObjects + + + + + + content: arrangedObjects + content + arrangedObjects + 2 + + + 569 + + + + selectionIndexes: selectionIndexes + + + + + + selectionIndexes: selectionIndexes + selectionIndexes + selectionIndexes + + 2 + + + 694 + + + + value: arrangedObjects.title + + + + + + value: arrangedObjects.title + value + arrangedObjects.title + 2 + + + 567 + + + + content: arrangedObjects + + + + + + content: arrangedObjects + content + arrangedObjects + 2 + + + 691 + + + + selectionIndexes: selectionIndexes + + + + + + selectionIndexes: selectionIndexes + selectionIndexes + selectionIndexes + + 2 + + + 695 + + + + value: arrangedObjects.schedule.title + + + + + + value: arrangedObjects.schedule.title + value + arrangedObjects.schedule.title + 2 + + + 685 + + + + contentSet: selection.permutations + + + + + + contentSet: selection.permutations + contentSet + selection.permutations + + NSDeletesObjectsOnRemove + + + 2 + + + 692 + + + + managedObjectContext: managedObjectContext + + + + + + managedObjectContext: managedObjectContext + managedObjectContext + managedObjectContext + 2 + + + 1134 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + + + + + + + + + + + + 19 + + + + + + + + 56 + + + + + + + + 217 + + + + + + + + 83 + + + + + + + + 81 + + + + + + + + + + + + + + + + + 75 + + + + + 78 + + + + + 72 + + + + + 82 + + + + + 124 + + + + + + + + 77 + + + + + 73 + + + + + 79 + + + + + 112 + + + + + 74 + + + + + 125 + + + + + + + + 126 + + + + + 205 + + + + + + + + + + + + + + + + + + + + + + 202 + + + + + 198 + + + + + 207 + + + + + 214 + + + + + 199 + + + + + 203 + + + + + 197 + + + + + 206 + + + + + 215 + + + + + 218 + + + + + + + + 216 + + + + + + + + 200 + + + + + + + + + + + + + 219 + + + + + 201 + + + + + 204 + + + + + 220 + + + + + + + + + + + + + 213 + + + + + 210 + + + + + 221 + + + + + 208 + + + + + 209 + + + + + 57 + + + + + + + + + + + + + + + + + + 58 + + + + + 134 + + + + + 150 + + + + + 136 + + + + + 144 + + + + + 129 + + + + + 143 + + + + + 236 + + + + + 131 + + + + + + + + 149 + + + + + 145 + + + + + 130 + + + + + 24 + + + + + + + + + + + 92 + + + + + 5 + + + + + 239 + + + + + 23 + + + + + 295 + + + + + + + + 296 + + + + + + + + + 297 + + + + + 298 + + + + + 211 + + + + + + + + 212 + + + + + + + + + 195 + + + + + 196 + + + + + 346 + + + + + 348 + + + + + + + + 349 + + + + + + + + + + + + + + 350 + + + + + 351 + + + + + 354 + + + + + 371 + + + + + + + + 372 + + + + + + + + + + + 5 + 0 + + 5 + 1 + + 130 + + 1000 + 3 + 9 + 3 + + + + + 5 + 0 + + 5 + 1 + + 441 + + 1000 + 3 + 9 + 3 + + + + + 9 + 0 + + 9 + 1 + + 0.0 + + 1000 + 6 + 24 + 2 + + + + + 3 + 0 + + 3 + 1 + + 26 + + 1000 + 3 + 9 + 3 + + + + + 6 + 0 + + 6 + 1 + + 0.0 + + 1000 + 6 + 24 + 2 + + + + + 3 + 0 + + 4 + 1 + + 12 + + 1000 + 6 + 24 + 3 + + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + 6 + 24 + 2 + + + + + + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + 6 + 24 + 2 + + + + + 3 + 0 + + 4 + 1 + + 20 + + 1000 + 6 + 24 + 3 + + + + + 5 + 0 + + 5 + 1 + + 186 + + 1000 + 3 + 9 + 3 + + + + + 6 + 0 + + 6 + 1 + + 379 + + 1000 + 3 + 9 + 3 + + + + + 4 + 0 + + 4 + 1 + + 95 + + 1000 + 3 + 9 + 3 + + + + + 4 + 0 + + 4 + 1 + + 144 + + 1000 + 3 + 9 + 3 + + + + + 6 + 0 + + 6 + 1 + + 0.0 + + 1000 + 6 + 24 + 2 + + + + + 4 + 0 + + 4 + 1 + + 242 + + 1000 + 3 + 9 + 3 + + + + + 4 + 0 + + 4 + 1 + + 241 + + 1000 + 3 + 9 + 3 + + + + + 3 + 0 + + 3 + 1 + + 0.0 + + 1000 + 6 + 24 + 2 + + + + + 5 + 0 + + 5 + 1 + + 403 + + 1000 + 3 + 9 + 3 + + + + + 6 + 0 + + 6 + 1 + + 0.0 + + 1000 + 6 + 24 + 2 + + + + + 5 + 0 + + 5 + 1 + + 192 + + 1000 + 3 + 9 + 3 + + + + + 3 + 0 + + 4 + 1 + + 12 + + 1000 + 6 + 24 + 3 + + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + 6 + 24 + 2 + + + + + 11 + 0 + + 11 + 1 + + 0.0 + + 1000 + 6 + 24 + 2 + + + + + 11 + 0 + + 11 + 1 + + 0.0 + + 1000 + 6 + 24 + 2 + + + + + 3 + 0 + + 3 + 1 + + 0.0 + + 1000 + 6 + 24 + 2 + + + + + 4 + 0 + + 4 + 1 + + 0.0 + + 1000 + 6 + 24 + 2 + + + + + 3 + 0 + + 3 + 1 + + 0.0 + + 1000 + 6 + 24 + 2 + + + + + 6 + 0 + + 6 + 1 + + 166 + + 1000 + 3 + 9 + 3 + + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + 6 + 24 + 2 + + + + + 6 + 0 + + 6 + 1 + + 0.0 + + 1000 + 6 + 24 + 2 + + + + + + 6 + 0 + + 6 + 1 + + 0.0 + + 1000 + 6 + 24 + 2 + + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + 6 + 24 + 2 + + + + + 4 + 0 + + 4 + 1 + + 44 + + 1000 + 3 + 9 + 3 + + + + + + 6 + 0 + + 6 + 1 + + 0.0 + + 1000 + 6 + 24 + 2 + + + + + 11 + 0 + + 11 + 1 + + 0.0 + + 1000 + 6 + 24 + 2 + + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + 6 + 24 + 2 + + + + + 3 + 0 + + 3 + 1 + + 0.0 + + 1000 + 6 + 24 + 2 + + + + + + + 375 + + + + + + + + 376 + + + + + + + + + 377 + + + + + + + + 388 + + + + + + + + + + + + + + + + + + + + + + + 389 + + + + + 390 + + + + + 391 + + + + + 392 + + + + + 393 + + + + + 394 + + + + + 395 + + + + + 396 + + + + + 397 + + + + + + + + 398 + + + + + + + + 399 + + + + + + + + 400 + + + + + 401 + + + + + 402 + + + + + 403 + + + + + 404 + + + + + 405 + + + + + + + + + + + + 406 + + + + + 407 + + + + + 408 + + + + + 409 + + + + + 410 + + + + + 411 + + + + + + + + + + 412 + + + + + 413 + + + + + 414 + + + + + 415 + + + + + + + + + + + 416 + + + + + 417 + + + + + 418 + + + + + 419 + + + + + 420 + + + + + 450 + + + + + + + + 451 + + + + + + + + + + 452 + + + + + 453 + + + + + 454 + + + + + 457 + + + + + 459 + + + + + 460 + + + + + 462 + + + + + 465 + + + + + 466 + + + + + 485 + + + + + 490 + + + + + + + + 491 + + + + + + + + 492 + + + + + 494 + + + + + 496 + + + + + + + + 497 + + + + + + + + + + + + + + + + + 498 + + + + + 499 + + + + + 500 + + + + + 501 + + + + + 502 + + + + + 503 + + + + + + + + 504 + + + + + 505 + + + + + 506 + + + + + 507 + + + + + 508 + + + + + + + + + + + + + + + + 509 + + + + + 510 + + + + + 511 + + + + + 512 + + + + + 513 + + + + + 514 + + + + + 515 + + + + + 516 + + + + + 517 + + + + + 534 + + + + + 536 + + + Notes + + + 538 + + + + + + + + + + + 539 + + + + + + + + 540 + + + + + 541 + + + + + 542 + + + + + 543 + + + + + + + + 546 + + + + + 558 + + + + + + + + 559 + + + + + 570 + + + + + + + + + + + 571 + + + + + 572 + + + + + 573 + + + + + 574 + + + + + + + + 575 + + + + + + + + 576 + + + + + 587 + + + Permutations + + + 596 + + + + + + + + 597 + + + + + 651 + + + + + + + + 653 + + + + + 664 + + + + + + + + 666 + + + + + 700 + + + + + + 8 + 0 + + 0 + 1 + + 34 + + 1000 + 3 + 9 + 1 + + + + + + + 701 + + + + + 748 + + + + + + + + 750 + + + + + 757 + + + + + + 7 + 0 + + 0 + 1 + + 177 + + 1000 + 3 + 9 + 1 + + + + + + + 758 + + + + + 786 + + + + + 889 + + + + + 896 + + + + + 925 + + + + + + 8 + 0 + + 0 + 1 + + 34 + + 1000 + 3 + 9 + 1 + + + + + + + 927 + + + + + 935 + + + + + 943 + + + + + 947 + + + + + 1072 + + + + + 1073 + + + + + + + + 1075 + + + + + 892 + + + + + 782 + + + + + 887 + + + + + 893 + + + + + 941 + + + + + 1098 + + + + + 1100 + + + + + 1101 + + + + + 1102 + + + + + 1103 + + + + + 1104 + + + + + 1106 + + + + + 1107 + + + + + 1108 + + + + + 1109 + + + + + 1110 + + + + + 1111 + + + + + 1112 + + + + + 1113 + + + + + 1114 + + + + + 1116 + + + + + 1117 + + + + + 1120 + + + + + 1121 + + + + + 1123 + + + + + 1125 + + + + + 1135 + + + + + 8 + 0 + + 0 + 1 + + 34 + + 1000 + 3 + 9 + 1 + + + + + + + + 1136 + + + + + 1137 + + + + + 1146 + + + + + 1147 + + + + + 1148 + + + + + 1149 + + + + + 1150 + + + + + 1151 + + + + + 1152 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{380, 496}, {480, 360}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 1155 + + + + + AppDelegate + NSObject + + saveAction: + id + + + saveAction: + + saveAction: + id + + + + window + NSWindow + + + window + + window + NSWindow + + + + IBProjectSource + ./Classes/AppDelegate.h + + + + NSDocument + + id + id + id + id + id + id + + + + printDocument: + id + + + revertDocumentToSaved: + id + + + runPageLayout: + id + + + saveDocument: + id + + + saveDocumentAs: + id + + + saveDocumentTo: + id + + + + IBProjectSource + ./Classes/NSDocument.h + + + + NSLayoutConstraint + NSObject + + IBProjectSource + ./Classes/NSLayoutConstraint.h + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + YES + 3 + + {11, 11} + {10, 3} + + YES + + diff --git a/iCloudCoreDataTester/iCloudCoreDataTester-Info.plist b/iCloudCoreDataTester/iCloudCoreDataTester-Info.plist new file mode 100644 index 0000000..b2cd7cd --- /dev/null +++ b/iCloudCoreDataTester/iCloudCoreDataTester-Info.plist @@ -0,0 +1,34 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + + CFBundleIdentifier + com.mentalfaculty.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSMinimumSystemVersion + ${MACOSX_DEPLOYMENT_TARGET} + NSHumanReadableCopyright + Copyright © 2012 The Mental Faculty. All rights reserved. + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/iCloudCoreDataTester/iCloudCoreDataTester-Prefix.pch b/iCloudCoreDataTester/iCloudCoreDataTester-Prefix.pch new file mode 100644 index 0000000..90a8154 --- /dev/null +++ b/iCloudCoreDataTester/iCloudCoreDataTester-Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'iCloudCoreDataTester' target in the 'iCloudCoreDataTester' project +// + +#ifdef __OBJC__ + #import +#endif diff --git a/iCloudCoreDataTester/iCloudCoreDataTester.entitlements b/iCloudCoreDataTester/iCloudCoreDataTester.entitlements new file mode 100644 index 0000000..a8b1dc3 --- /dev/null +++ b/iCloudCoreDataTester/iCloudCoreDataTester.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.developer.ubiquity-container-identifiers + + $(TeamIdentifierPrefix)com.mentalfaculty.iCloudCoreDataTester + + com.apple.developer.ubiquity-kvstore-identifier + $(TeamIdentifierPrefix)com.mentalfaculty.iCloudCoreDataTester + + diff --git a/iCloudCoreDataTester/iCloudCoreDataTester.xcdatamodeld/.xccurrentversion b/iCloudCoreDataTester/iCloudCoreDataTester.xcdatamodeld/.xccurrentversion new file mode 100644 index 0000000..6f2d42f --- /dev/null +++ b/iCloudCoreDataTester/iCloudCoreDataTester.xcdatamodeld/.xccurrentversion @@ -0,0 +1,8 @@ + + + + + _XCCurrentVersionName + iCloudCoreDataTester.xcdatamodel + + diff --git a/iCloudCoreDataTester/iCloudCoreDataTester.xcdatamodeld/iCloudCoreDataTester.xcdatamodel/contents b/iCloudCoreDataTester/iCloudCoreDataTester.xcdatamodeld/iCloudCoreDataTester.xcdatamodel/contents new file mode 100644 index 0000000..4fb373d --- /dev/null +++ b/iCloudCoreDataTester/iCloudCoreDataTester.xcdatamodeld/iCloudCoreDataTester.xcdatamodel/contents @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/iCloudCoreDataTester/main.m b/iCloudCoreDataTester/main.m new file mode 100644 index 0000000..f352599 --- /dev/null +++ b/iCloudCoreDataTester/main.m @@ -0,0 +1,14 @@ +// +// main.m +// iCloudCoreDataTester +// +// Created by Drew McCormack on 15/03/12. +// Copyright (c) 2012 The Mental Faculty. All rights reserved. +// + +#import + +int main(int argc, char *argv[]) +{ + return NSApplicationMain(argc, (const char **)argv); +}