2
0

Retire use of confinement concurrency type.

[FIXED]     Confinement concurrency type is just all sorts of buggy.
This commit is contained in:
Maarten Billemont 2013-06-16 12:39:52 -04:00
parent 3cb8215d5a
commit 0813fb40d0
16 changed files with 87 additions and 100 deletions

@ -1 +1 @@
Subproject commit fa01dea4ec70d12a8b2db48e26b50271451a16e1 Subproject commit 039dc04e667199396765dd394b70e3f38f04ea33

View File

@ -755,7 +755,7 @@ static NSString *ETagIfPresent(GTLObject *obj) {
// Build up the array of RPC calls. // Build up the array of RPC calls.
NSMutableArray *rpcPayloads = [NSMutableArray arrayWithCapacity:numberOfQueries]; NSMutableArray *rpcPayloads = [NSMutableArray arrayWithCapacity:numberOfQueries];
NSMutableArray *requestIDs = [NSMutableSet setWithCapacity:numberOfQueries]; NSMutableSet *requestIDs = [NSMutableSet setWithCapacity:numberOfQueries];
for (GTLQuery *query in queries) { for (GTLQuery *query in queries) {
NSString *methodName = query.methodName; NSString *methodName = query.methodName;
NSDictionary *parameters = query.JSON; NSDictionary *parameters = query.JSON;

View File

@ -19,7 +19,7 @@
+ (instancetype)get; + (instancetype)get;
- (MPUserEntity *)activeUserForThread; - (MPUserEntity *)activeUserForMainThread;
- (MPUserEntity *)activeUserInContext:(NSManagedObjectContext *)moc; - (MPUserEntity *)activeUserInContext:(NSManagedObjectContext *)moc;
- (void)setActiveUser:(MPUserEntity *)activeUser; - (void)setActiveUser:(MPUserEntity *)activeUser;

View File

@ -24,9 +24,9 @@
#endif #endif
} }
- (MPUserEntity *)activeUserForThread { - (MPUserEntity *)activeUserForMainThread {
return [self activeUserInContext:[MPAppDelegate_Shared managedObjectContextForThreadIfReady]]; return [self activeUserInContext:[MPAppDelegate_Shared managedObjectContextForMainThreadIfReady]];
} }
- (MPUserEntity *)activeUserInContext:(NSManagedObjectContext *)moc { - (MPUserEntity *)activeUserInContext:(NSManagedObjectContext *)moc {

View File

@ -20,12 +20,13 @@ typedef enum {
@interface MPAppDelegate_Shared(Store)<UbiquityStoreManagerDelegate> @interface MPAppDelegate_Shared(Store)<UbiquityStoreManagerDelegate>
+ (NSManagedObjectContext *)managedObjectContextForThreadIfReady; + (NSManagedObjectContext *)managedObjectContextForMainThreadIfReady;
+ (BOOL)managedObjectContextPerformBlock:(void (^)(NSManagedObjectContext *context))mocBlock; + (BOOL)managedObjectContextPerformBlock:(void (^)(NSManagedObjectContext *context))mocBlock;
+ (BOOL)managedObjectContextPerformBlockAndWait:(void (^)(NSManagedObjectContext *context))mocBlock; + (BOOL)managedObjectContextPerformBlockAndWait:(void (^)(NSManagedObjectContext *context))mocBlock;
- (UbiquityStoreManager *)storeManager; - (UbiquityStoreManager *)storeManager;
/** @param completion The block to execute after adding the element, executed from the main thread with the new element in the main MOC. */
- (void)addElementNamed:(NSString *)siteName completion:(void (^)(MPElementEntity *element))completion; - (void)addElementNamed:(NSString *)siteName completion:(void (^)(MPElementEntity *element))completion;
- (MPElementEntity *)changeElement:(MPElementEntity *)element inContext:(NSManagedObjectContext *)context toType:(MPElementType)type; - (MPElementEntity *)changeElement:(MPElementEntity *)element inContext:(NSManagedObjectContext *)context toType:(MPElementType)type;
- (MPImportResult)importSites:(NSString *)importedSitesString - (MPImportResult)importSites:(NSString *)importedSitesString

View File

@ -39,19 +39,14 @@ PearlAssociatedObjectProperty(NSManagedObjectContext*, MainManagedObjectContext,
#pragma mark - Core Data setup #pragma mark - Core Data setup
+ (NSManagedObjectContext *)managedObjectContextForThreadIfReady { + (NSManagedObjectContext *)managedObjectContextForMainThreadIfReady {
NSAssert([[NSThread currentThread] isMainThread], @"Can only access main MOC from the main thread.");
NSManagedObjectContext *mainManagedObjectContext = [[self get] mainManagedObjectContextIfReady]; NSManagedObjectContext *mainManagedObjectContext = [[self get] mainManagedObjectContextIfReady];
if (!mainManagedObjectContext) if (!mainManagedObjectContext || ![[NSThread currentThread] isMainThread])
return nil; return nil;
if ([[NSThread currentThread] isMainThread])
return mainManagedObjectContext; return mainManagedObjectContext;
NSManagedObjectContext
*threadManagedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSConfinementConcurrencyType];
threadManagedObjectContext.parentContext = mainManagedObjectContext;
return threadManagedObjectContext;
} }
+ (BOOL)managedObjectContextPerformBlock:(void (^)(NSManagedObjectContext *context))mocBlock { + (BOOL)managedObjectContextPerformBlock:(void (^)(NSManagedObjectContext *context))mocBlock {
@ -396,8 +391,8 @@ PearlAssociatedObjectProperty(NSManagedObjectContext*, MainManagedObjectContext,
return; return;
} }
[MPAppDelegate_Shared managedObjectContextPerformBlock:^(NSManagedObjectContext *moc) { [MPAppDelegate_Shared managedObjectContextPerformBlock:^(NSManagedObjectContext *context) {
MPUserEntity *activeUser = [self activeUserInContext:moc]; MPUserEntity *activeUser = [self activeUserInContext:context];
assert(activeUser); assert(activeUser);
MPElementType type = activeUser.defaultType; MPElementType type = activeUser.defaultType;
@ -406,22 +401,22 @@ PearlAssociatedObjectProperty(NSManagedObjectContext*, MainManagedObjectContext,
NSString *typeEntityClassName = [MPAlgorithmDefault classNameOfType:type]; NSString *typeEntityClassName = [MPAlgorithmDefault classNameOfType:type];
MPElementEntity *element = [NSEntityDescription insertNewObjectForEntityForName:typeEntityClassName MPElementEntity *element = [NSEntityDescription insertNewObjectForEntityForName:typeEntityClassName
inManagedObjectContext:moc]; inManagedObjectContext:context];
element.name = siteName; element.name = siteName;
element.user = activeUser; element.user = activeUser;
element.type = type; element.type = type;
element.lastUsed = [NSDate date]; element.lastUsed = [NSDate date];
element.version = MPAlgorithmDefaultVersion; element.version = MPAlgorithmDefaultVersion;
[moc saveToStore]; [context saveToStore];
NSError *error = nil; NSError *error = nil;
if (element.objectID.isTemporaryID && ![moc obtainPermanentIDsForObjects:@[ element ] error:&error]) if (element.objectID.isTemporaryID && ![context obtainPermanentIDsForObjects:@[ element ] error:&error])
err(@"Failed to obtain a permanent object ID after creating new element: %@", error); err(@"Failed to obtain a permanent object ID after creating new element: %@", error);
NSManagedObjectID *elementOID = [element objectID]; NSManagedObjectID *elementOID = [element objectID];
dispatch_async( dispatch_get_main_queue(), ^{ dispatch_async( dispatch_get_main_queue(), ^{
completion( (MPElementEntity *)[[MPAppDelegate_Shared managedObjectContextForThreadIfReady] objectRegisteredForID:elementOID] ); completion( (MPElementEntity *)[[MPAppDelegate_Shared managedObjectContextForMainThreadIfReady] objectRegisteredForID:elementOID] );
} ); } );
}]; }];
} }
@ -689,7 +684,7 @@ PearlAssociatedObjectProperty(NSManagedObjectContext*, MainManagedObjectContext,
- (NSString *)exportSitesShowingPasswords:(BOOL)showPasswords { - (NSString *)exportSitesShowingPasswords:(BOOL)showPasswords {
MPUserEntity *activeUser = [self activeUserForThread]; MPUserEntity *activeUser = [self activeUserForMainThread];
inf(@"Exporting sites, %@, for: %@", showPasswords? @"showing passwords": @"omitting passwords", activeUser.userID); inf(@"Exporting sites, %@, for: %@", showPasswords? @"showing passwords": @"omitting passwords", activeUser.userID);
// Header. // Header.

View File

@ -66,8 +66,8 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
[[self.usersItem submenu] removeItem:obj]; [[self.usersItem submenu] removeItem:obj];
}]; }];
NSManagedObjectContext *moc = [MPMacAppDelegate managedObjectContextForThreadIfReady]; NSManagedObjectContext *context = [MPMacAppDelegate managedObjectContextForMainThreadIfReady];
if (!moc) { if (!context) {
self.createUserItem.title = @"New User (Not ready)"; self.createUserItem.title = @"New User (Not ready)";
self.createUserItem.enabled = NO; self.createUserItem.enabled = NO;
self.createUserItem.toolTip = @"Please wait until the app is fully loaded."; self.createUserItem.toolTip = @"Please wait until the app is fully loaded.";
@ -83,7 +83,7 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
NSError *error = nil; NSError *error = nil;
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass( [MPUserEntity class] )]; NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass( [MPUserEntity class] )];
fetchRequest.sortDescriptors = @[ [NSSortDescriptor sortDescriptorWithKey:@"lastUsed" ascending:NO] ]; fetchRequest.sortDescriptors = @[ [NSSortDescriptor sortDescriptorWithKey:@"lastUsed" ascending:NO] ];
NSArray *users = [moc executeFetchRequest:fetchRequest error:&error]; NSArray *users = [context executeFetchRequest:fetchRequest error:&error];
if (!users) if (!users)
err(@"Failed to load users: %@", error); err(@"Failed to load users: %@", error);
@ -94,7 +94,7 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
@"Then give iCloud some time to sync the new user to your Mac."; @"Then give iCloud some time to sync the new user to your Mac.";
} }
MPUserEntity *activeUser = self.activeUserForThread; MPUserEntity *activeUser = [self activeUserInContext:context];
for (MPUserEntity *user in users) { for (MPUserEntity *user in users) {
NSMenuItem *userItem = [[NSMenuItem alloc] initWithTitle:user.name action:@selector(selectUser:) keyEquivalent:@""]; NSMenuItem *userItem = [[NSMenuItem alloc] initWithTitle:user.name action:@selector(selectUser:) keyEquivalent:@""];
[userItem setTarget:self]; [userItem setTarget:self];
@ -113,8 +113,8 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
[self signOutAnimated:NO]; [self signOutAnimated:NO];
NSError *error = nil; NSError *error = nil;
NSManagedObjectContext *moc = [MPMacAppDelegate managedObjectContextForThreadIfReady]; NSManagedObjectContext *context = [MPMacAppDelegate managedObjectContextForMainThreadIfReady];
self.activeUser = (MPUserEntity *)[moc existingObjectWithID:[item representedObject] error:&error]; self.activeUser = (MPUserEntity *)[context existingObjectWithID:[item representedObject] error:&error];
if (error) if (error)
err(@"While looking up selected user: %@", error); err(@"While looking up selected user: %@", error);
@ -261,7 +261,7 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
[[NSNotificationCenter defaultCenter] addObserverForName:MPCheckConfigNotification object:nil queue:nil usingBlock: [[NSNotificationCenter defaultCenter] addObserverForName:MPCheckConfigNotification object:nil queue:nil usingBlock:
^(NSNotification *note) { ^(NSNotification *note) {
self.rememberPasswordItem.state = [[MPConfig get].rememberLogin boolValue]? NSOnState: NSOffState; self.rememberPasswordItem.state = [[MPConfig get].rememberLogin boolValue]? NSOnState: NSOffState;
self.savePasswordItem.state = [[MPMacAppDelegate get] activeUserForThread].saveKey? NSOnState: NSOffState; self.savePasswordItem.state = [[MPMacAppDelegate get] activeUserForMainThread].saveKey? NSOnState: NSOffState;
self.dialogStyleRegular.state = ![[MPMacConfig get].dialogStyleHUD boolValue]? NSOnState: NSOffState; self.dialogStyleRegular.state = ![[MPMacConfig get].dialogStyleHUD boolValue]? NSOnState: NSOffState;
self.dialogStyleHUD.state = [[MPMacConfig get].dialogStyleHUD boolValue]? NSOnState: NSOffState; self.dialogStyleHUD.state = [[MPMacConfig get].dialogStyleHUD boolValue]? NSOnState: NSOffState;
@ -283,13 +283,13 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
OSStatus status = InstallApplicationEventHandler(NewEventHandlerUPP( MPHotKeyHander ), GetEventTypeCount( hotKeyEvents ), OSStatus status = InstallApplicationEventHandler(NewEventHandlerUPP( MPHotKeyHander ), GetEventTypeCount( hotKeyEvents ),
hotKeyEvents, (__bridge void *)self, NULL); hotKeyEvents, (__bridge void *)self, NULL);
if (status != noErr) if (status != noErr)
err(@"Error installing application event handler: %d", status); err(@"Error installing application event handler: %i", (int)status);
status = RegisterEventHotKey( 35 /* p */, controlKey + cmdKey, MPShowHotKey, GetApplicationEventTarget(), 0, &hotKeyRef ); status = RegisterEventHotKey( 35 /* p */, controlKey + cmdKey, MPShowHotKey, GetApplicationEventTarget(), 0, &hotKeyRef );
if (status != noErr) if (status != noErr)
err(@"Error registering 'show' hotkey: %d", status); err(@"Error registering 'show' hotkey: %i", (int)status);
status = RegisterEventHotKey( 35 /* p */, controlKey + optionKey + cmdKey, MPLockHotKey, GetApplicationEventTarget(), 0, &hotKeyRef ); status = RegisterEventHotKey( 35 /* p */, controlKey + optionKey + cmdKey, MPLockHotKey, GetApplicationEventTarget(), 0, &hotKeyRef );
if (status != noErr) if (status != noErr)
err(@"Error registering 'lock' hotkey: %d", status); err(@"Error registering 'lock' hotkey: %i", (int)status);
// Initial display. // Initial display.
[NSApp activateIgnoringOtherApps:YES]; [NSApp activateIgnoringOtherApps:YES];
@ -301,11 +301,9 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
BOOL reopenPasswordWindow = [self.passwordWindow.window isVisible]; BOOL reopenPasswordWindow = [self.passwordWindow.window isVisible];
if (![[self activeUserForThread].objectID isEqual:activeUser.objectID]) {
[self.passwordWindow close]; [self.passwordWindow close];
self.passwordWindow = nil; self.passwordWindow = nil;
[super setActiveUser:activeUser]; [super setActiveUser:activeUser];
}
self.usersItem.state = NSMixedState; self.usersItem.state = NSMixedState;
[[[self.usersItem submenu] itemArray] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { [[[self.usersItem submenu] itemArray] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
@ -325,7 +323,7 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
- (void)updateMenuItems { - (void)updateMenuItems {
MPUserEntity *activeUser = [self activeUserForThread]; MPUserEntity *activeUser = [self activeUserForMainThread];
// if (!(self.showItem.enabled = ![self.passwordWindow.window isVisible])) { // if (!(self.showItem.enabled = ![self.passwordWindow.window isVisible])) {
// self.showItem.title = @"Show (Showing)"; // self.showItem.title = @"Show (Showing)";
// self.showItem.toolTip = @"Master Password is already showing."; // self.showItem.toolTip = @"Master Password is already showing.";
@ -390,7 +388,7 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
[NSApp activateIgnoringOtherApps:YES]; [NSApp activateIgnoringOtherApps:YES];
// If no user, can't activate. // If no user, can't activate.
if (![self activeUserForThread]) { if (![self activeUserForMainThread]) {
[[NSAlert alertWithMessageText:@"No User Selected" defaultButton:[PearlStrings get].commonButtonOkay alternateButton:nil [[NSAlert alertWithMessageText:@"No User Selected" defaultButton:[PearlStrings get].commonButtonOkay alternateButton:nil
otherButton:nil informativeTextWithFormat: otherButton:nil informativeTextWithFormat:
@"Begin by selecting or creating your user from the status menu (●●●|) next to the clock."] @"Begin by selecting or creating your user from the status menu (●●●|) next to the clock."]
@ -444,17 +442,17 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender { - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender {
// Save changes in the application's managed object context before the application terminates. // Save changes in the application's managed object context before the application terminates.
NSManagedObjectContext *moc = [MPMacAppDelegate managedObjectContextForThreadIfReady]; NSManagedObjectContext *context = [MPMacAppDelegate managedObjectContextForMainThreadIfReady];
if (!moc) if (!context)
return NSTerminateNow; return NSTerminateNow;
if (![moc commitEditing]) if (![context commitEditing])
return NSTerminateCancel; return NSTerminateCancel;
if (![moc hasChanges]) if (![context hasChanges])
return NSTerminateNow; return NSTerminateNow;
[moc saveToStore]; [context saveToStore];
return NSTerminateNow; return NSTerminateNow;
} }

View File

@ -43,7 +43,7 @@
[self setContent:@""]; [self setContent:@""];
[self.tipField setStringValue:@""]; [self.tipField setStringValue:@""];
[self.userLabel setStringValue:PearlString( @"%@'s password for:", [[MPMacAppDelegate get] activeUserForThread].name )]; [self.userLabel setStringValue:PearlString( @"%@'s password for:", [[MPMacAppDelegate get] activeUserForMainThread].name )];
[[MPMacAppDelegate get] addObserverBlock:^(NSString *keyPath, id object, NSDictionary *change, void *context) { [[MPMacAppDelegate get] addObserverBlock:^(NSString *keyPath, id object, NSDictionary *change, void *context) {
// [MPMacAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *moc) { // [MPMacAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *moc) {
// if (![MPAlgorithmDefault migrateUser:[[MPMacAppDelegate get] activeUserInContext:moc]]) // if (![MPAlgorithmDefault migrateUser:[[MPMacAppDelegate get] activeUserInContext:moc]])
@ -106,7 +106,7 @@
- (BOOL)ensureStoreLoaded { - (BOOL)ensureStoreLoaded {
if ([MPMacAppDelegate managedObjectContextForThreadIfReady]) { if ([MPMacAppDelegate managedObjectContextForMainThreadIfReady]) {
// Store loaded. // Store loaded.
if (self.loadingDataAlert.window) if (self.loadingDataAlert.window)
[NSApp endSheet:self.loadingDataAlert.window]; [NSApp endSheet:self.loadingDataAlert.window];
@ -197,12 +197,12 @@
runModal]; runModal];
if (returnCode_ == NSAlertDefaultReturn) { if (returnCode_ == NSAlertDefaultReturn) {
[MPMacAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *moc) { [MPMacAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) {
MPUserEntity *activeUser = [[MPMacAppDelegate get] activeUserInContext:moc]; MPUserEntity *activeUser = [[MPMacAppDelegate get] activeUserInContext:context];
activeUser.keyID = nil; activeUser.keyID = nil;
[[MPMacAppDelegate get] forgetSavedKeyFor:activeUser]; [[MPMacAppDelegate get] forgetSavedKeyFor:activeUser];
[[MPMacAppDelegate get] signOutAnimated:YES]; [[MPMacAppDelegate get] signOutAnimated:YES];
[moc saveToStore]; [context saveToStore];
}]; }];
} }
break; break;
@ -315,7 +315,7 @@
if (notification.object == self.typeField) { if (notification.object == self.typeField) {
if ([self.typeField indexOfSelectedItem] < 0) if ([self.typeField indexOfSelectedItem] < 0)
return; return;
MPElementEntity *activeElement = [self activeElementForThread]; MPElementEntity *activeElement = [self activeElementForMainThread];
MPElementType selectedType = [self selectedType]; MPElementType selectedType = [self selectedType];
if (!activeElement || activeElement.type == selectedType || !(selectedType & MPElementTypeClassGenerated)) if (!activeElement || activeElement.type == selectedType || !(selectedType & MPElementTypeClassGenerated))
return; return;
@ -421,9 +421,9 @@
self.siteFieldPreventCompletion = NO; self.siteFieldPreventCompletion = NO;
} }
- (MPElementEntity *)activeElementForThread { - (MPElementEntity *)activeElementForMainThread {
return [self activeElementInContext:[MPMacAppDelegate managedObjectContextForThreadIfReady]]; return [self activeElementInContext:[MPMacAppDelegate managedObjectContextForMainThreadIfReady]];
} }
- (MPElementEntity *)activeElementInContext:(NSManagedObjectContext *)moc { - (MPElementEntity *)activeElementInContext:(NSManagedObjectContext *)moc {
@ -453,9 +453,9 @@
NSString *siteName = [self.siteField stringValue]; NSString *siteName = [self.siteField stringValue];
[self.progressView startAnimation:nil]; [self.progressView startAnimation:nil];
[self.backgroundQueue addOperationWithBlock:^{ [MPMacAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) {
BOOL actionHandled = NO; BOOL actionHandled = NO;
MPElementEntity *activeElement = [self activeElementForThread]; MPElementEntity *activeElement = [self activeElementInContext:context];
NSString *content = [activeElement.content description]; NSString *content = [activeElement.content description];
NSString *typeName = [activeElement typeShortName]; NSString *typeName = [activeElement typeShortName];
if (!content) if (!content)

View File

@ -28,15 +28,15 @@
NSAssert([[NSThread currentThread] isMainThread], @"The fetchedResultsController must be accessed from the main thread."); NSAssert([[NSThread currentThread] isMainThread], @"The fetchedResultsController must be accessed from the main thread.");
if (!_fetchedResultsControllerByLastUsed) { if (!_fetchedResultsControllerByLastUsed) {
NSManagedObjectContext *mainContext = [MPiOSAppDelegate managedObjectContextForThreadIfReady]; NSManagedObjectContext *context = [MPiOSAppDelegate managedObjectContextForMainThreadIfReady];
if (!mainContext) if (!context)
return nil; return nil;
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass( [MPElementEntity class] )]; NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass( [MPElementEntity class] )];
fetchRequest.sortDescriptors = @[ [[NSSortDescriptor alloc] initWithKey:NSStringFromSelector( @selector(lastUsed) ) ascending:NO] ]; fetchRequest.sortDescriptors = @[ [[NSSortDescriptor alloc] initWithKey:NSStringFromSelector( @selector(lastUsed) ) ascending:NO] ];
[self configureFetchRequest:fetchRequest]; [self configureFetchRequest:fetchRequest];
_fetchedResultsControllerByLastUsed = [[NSFetchedResultsController alloc] _fetchedResultsControllerByLastUsed = [[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest managedObjectContext:mainContext sectionNameKeyPath:nil cacheName:nil]; initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];
_fetchedResultsControllerByLastUsed.delegate = self; _fetchedResultsControllerByLastUsed.delegate = self;
} }
@ -48,15 +48,15 @@
NSAssert([[NSThread currentThread] isMainThread], @"The fetchedResultsController must be accessed from the main thread."); NSAssert([[NSThread currentThread] isMainThread], @"The fetchedResultsController must be accessed from the main thread.");
if (!_fetchedResultsControllerByUses) { if (!_fetchedResultsControllerByUses) {
NSManagedObjectContext *mainContext = [MPiOSAppDelegate managedObjectContextForThreadIfReady]; NSManagedObjectContext *context = [MPiOSAppDelegate managedObjectContextForMainThreadIfReady];
if (!mainContext) if (!context)
return nil; return nil;
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass( [MPElementEntity class] )]; NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass( [MPElementEntity class] )];
fetchRequest.sortDescriptors = @[ [[NSSortDescriptor alloc] initWithKey:NSStringFromSelector( @selector(uses_) ) ascending:NO] ]; fetchRequest.sortDescriptors = @[ [[NSSortDescriptor alloc] initWithKey:NSStringFromSelector( @selector(uses_) ) ascending:NO] ];
[self configureFetchRequest:fetchRequest]; [self configureFetchRequest:fetchRequest];
_fetchedResultsControllerByUses = [[NSFetchedResultsController alloc] _fetchedResultsControllerByUses = [[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest managedObjectContext:mainContext sectionNameKeyPath:nil cacheName:nil]; initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];
_fetchedResultsControllerByUses.delegate = self; _fetchedResultsControllerByUses.delegate = self;
} }
@ -78,7 +78,7 @@
- (void)updateData { - (void)updateData {
MPUserEntity *activeUser = [[MPiOSAppDelegate get] activeUserForThread]; MPUserEntity *activeUser = [[MPiOSAppDelegate get] activeUserInContext:self.fetchedResultsControllerByLastUsed.managedObjectContext];
if (!activeUser) { if (!activeUser) {
_fetchedResultsControllerByLastUsed = nil; _fetchedResultsControllerByLastUsed = nil;
_fetchedResultsControllerByUses = nil; _fetchedResultsControllerByUses = nil;

View File

@ -193,7 +193,7 @@
NSString *query = [self.searchDisplayController.searchBar.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; NSString *query = [self.searchDisplayController.searchBar.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
cell.textLabel.text = query; cell.textLabel.text = query;
cell.detailTextLabel.text = PearlString( @"New site: %@", cell.detailTextLabel.text = PearlString( @"New site: %@",
[MPAlgorithmDefault shortNameOfType:[[[MPiOSAppDelegate get] activeUserForThread] defaultType]] ); [MPAlgorithmDefault shortNameOfType:[[[MPiOSAppDelegate get] activeUserForMainThread] defaultType]] );
} }
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

View File

@ -83,7 +83,7 @@
}]; }];
[[NSNotificationCenter defaultCenter] addObserverForName:MPElementUpdatedNotification object:nil queue:nil usingBlock: [[NSNotificationCenter defaultCenter] addObserverForName:MPElementUpdatedNotification object:nil queue:nil usingBlock:
^void(NSNotification *note) { ^void(NSNotification *note) {
MPElementEntity *activeElement = [self activeElementForThread]; MPElementEntity *activeElement = [self activeElementForMainThread];
if (activeElement.type & MPElementTypeClassStored && ![[activeElement.content description] length]) if (activeElement.type & MPElementTypeClassStored && ![[activeElement.content description] length])
[self showToolTip:@"Tap to set a password." withIcon:self.toolTipEditIcon]; [self showToolTip:@"Tap to set a password." withIcon:self.toolTipEditIcon];
if (activeElement.requiresExplicitMigration) if (activeElement.requiresExplicitMigration)
@ -109,7 +109,7 @@
}]; }];
[[NSNotificationCenter defaultCenter] addObserverForName:USMStoreDidChangeNotification object:nil queue:nil usingBlock: [[NSNotificationCenter defaultCenter] addObserverForName:USMStoreDidChangeNotification object:nil queue:nil usingBlock:
^(NSNotification *note) { ^(NSNotification *note) {
if (!self.activeElementForThread) if (!self.activeElementForMainThread)
[self didSelectElement:nil]; [self didSelectElement:nil];
}]; }];
@ -118,8 +118,8 @@
- (void)viewWillAppear:(BOOL)animated { - (void)viewWillAppear:(BOOL)animated {
MPElementEntity *activeElement = [self activeElementForThread]; MPElementEntity *activeElement = [self activeElementForMainThread];
if (activeElement.user != [[MPiOSAppDelegate get] activeUserForThread]) if (activeElement.user != [[MPiOSAppDelegate get] activeUserForMainThread])
_activeElementOID = nil; _activeElementOID = nil;
self.searchDisplayController.searchBar.text = nil; self.searchDisplayController.searchBar.text = nil;
@ -197,7 +197,7 @@
return; return;
} }
MPElementEntity *activeElement = [self activeElementForThread]; MPElementEntity *activeElement = [self activeElementForMainThread];
[self setHelpChapter:activeElement? @"2": @"1"]; [self setHelpChapter:activeElement? @"2": @"1"];
[self updateHelpHiddenAnimated:NO]; [self updateHelpHiddenAnimated:NO];
@ -358,7 +358,7 @@
- (void)webViewDidFinishLoad:(UIWebView *)webView { - (void)webViewDidFinishLoad:(UIWebView *)webView {
MPElementEntity *activeElement = [self activeElementForThread]; MPElementEntity *activeElement = [self activeElementForMainThread];
NSString *error = [self.helpView stringByEvaluatingJavaScriptFromString: NSString *error = [self.helpView stringByEvaluatingJavaScriptFromString:
PearlString( @"setClass('%@');", activeElement.typeClassName )]; PearlString( @"setClass('%@');", activeElement.typeClassName )];
if (error.length) if (error.length)
@ -464,7 +464,7 @@
- (IBAction)copyContent { - (IBAction)copyContent {
MPElementEntity *activeElement = [self activeElementForThread]; MPElementEntity *activeElement = [self activeElementForMainThread];
id content = activeElement.content; id content = activeElement.content;
if (!content) if (!content)
// Nothing to copy. // Nothing to copy.
@ -484,7 +484,7 @@
- (IBAction)copyLoginName:(UITapGestureRecognizer *)sender { - (IBAction)copyLoginName:(UITapGestureRecognizer *)sender {
MPElementEntity *activeElement = [self activeElementForThread]; MPElementEntity *activeElement = [self activeElementForMainThread];
if (!activeElement.loginName) if (!activeElement.loginName)
return; return;
@ -531,7 +531,7 @@
if (sender.state != UIGestureRecognizerStateBegan) if (sender.state != UIGestureRecognizerStateBegan)
// Only fire when the gesture was first detected. // Only fire when the gesture was first detected.
return; return;
MPElementEntity *activeElement = [self activeElementForThread]; MPElementEntity *activeElement = [self activeElementForMainThread];
if (![activeElement isKindOfClass:[MPElementGeneratedEntity class]]) { if (![activeElement isKindOfClass:[MPElementGeneratedEntity class]]) {
// Not of a type that supports a password counter. // Not of a type that supports a password counter.
err(@"Cannot reset password counter: Element is not generated: %@", activeElement.name); err(@"Cannot reset password counter: Element is not generated: %@", activeElement.name);
@ -563,7 +563,7 @@
// Only fire when the gesture was first detected. // Only fire when the gesture was first detected.
return; return;
MPElementEntity *activeElement = [self activeElementForThread]; MPElementEntity *activeElement = [self activeElementForMainThread];
if (!activeElement) if (!activeElement)
return; return;
@ -621,9 +621,9 @@
}]; }];
} }
- (MPElementEntity *)activeElementForThread { - (MPElementEntity *)activeElementForMainThread {
return [self activeElementInContext:[MPiOSAppDelegate managedObjectContextForThreadIfReady]]; return [self activeElementInContext:[MPiOSAppDelegate managedObjectContextForMainThreadIfReady]];
} }
- (MPElementEntity *)activeElementInContext:(NSManagedObjectContext *)moc { - (MPElementEntity *)activeElementInContext:(NSManagedObjectContext *)moc {
@ -641,7 +641,7 @@
- (IBAction)editPassword { - (IBAction)editPassword {
MPElementEntity *activeElement = [self activeElementForThread]; MPElementEntity *activeElement = [self activeElementForMainThread];
if (!(activeElement.type & MPElementTypeClassStored)) { if (!(activeElement.type & MPElementTypeClassStored)) {
// Not of a type that supports editing the content. // Not of a type that supports editing the content.
err(@"Cannot edit content: Element is not stored: %@", activeElement.name); err(@"Cannot edit content: Element is not stored: %@", activeElement.name);
@ -659,7 +659,7 @@
- (IBAction)upgradePassword { - (IBAction)upgradePassword {
MPElementEntity *activeElement = [self activeElementForThread]; MPElementEntity *activeElement = [self activeElementForMainThread];
if (!activeElement) if (!activeElement)
return; return;
@ -779,7 +779,7 @@
- (MPElementEntity *)selectedElement { - (MPElementEntity *)selectedElement {
return [self activeElementForThread]; return [self activeElementForMainThread];
} }
- (void)didSelectType:(MPElementType)type { - (void)didSelectType:(MPElementType)type {
@ -855,7 +855,7 @@
if (textField == self.contentField) { if (textField == self.contentField) {
self.contentField.enabled = NO; self.contentField.enabled = NO;
MPElementEntity *activeElement = [self activeElementForThread]; MPElementEntity *activeElement = [self activeElementForMainThread];
if (![activeElement isKindOfClass:[MPElementStoredEntity class]]) { if (![activeElement isKindOfClass:[MPElementStoredEntity class]]) {
// Not of a type whose content can be edited. // Not of a type whose content can be edited.
err(@"Cannot update element content: Element is not stored: %@", activeElement.name); err(@"Cannot update element content: Element is not stored: %@", activeElement.name);

View File

@ -53,7 +53,7 @@
}]; }];
} }
} options:0]; } options:0];
avatar.selected = (a == [[MPiOSAppDelegate get] activeUserForThread].avatar); avatar.selected = (a == [[MPiOSAppDelegate get] activeUserForMainThread].avatar);
} }
[super viewDidLoad]; [super viewDidLoad];
@ -70,7 +70,7 @@
} }
} recurse:NO]; } recurse:NO];
MPUserEntity *activeUser = [[MPiOSAppDelegate get] activeUserForThread]; MPUserEntity *activeUser = [[MPiOSAppDelegate get] activeUserForMainThread];
self.savePasswordSwitch.on = activeUser.saveKey; self.savePasswordSwitch.on = activeUser.saveKey;
self.defaultTypeLabel.text = [[MPiOSAppDelegate get].key.algorithm shortNameOfType:activeUser.defaultType]; self.defaultTypeLabel.text = [[MPiOSAppDelegate get].key.algorithm shortNameOfType:activeUser.defaultType];
@ -154,7 +154,7 @@
- (MPElementType)selectedType { - (MPElementType)selectedType {
return [[MPiOSAppDelegate get] activeUserForThread].defaultType; return [[MPiOSAppDelegate get] activeUserForMainThread].defaultType;
} }
#pragma mark - IBActions #pragma mark - IBActions

View File

@ -73,7 +73,7 @@
MPElementType selectedType = selectedElement? selectedElement.type: [self.delegate selectedType]; MPElementType selectedType = selectedElement? selectedElement.type: [self.delegate selectedType];
cell.selected = (selectedType == cellType); cell.selected = (selectedType == cellType);
if (cellType != NSNotFound && cellType & MPElementTypeClassGenerated) { if (cellType != (MPElementType)NSNotFound && cellType & MPElementTypeClassGenerated) {
[(UITextField *)[cell viewWithTag:2] setText:@"..."]; [(UITextField *)[cell viewWithTag:2] setText:@"..."];
NSString *name = selectedElement.name; NSString *name = selectedElement.name;
@ -99,7 +99,7 @@
assert(self.navigationController.topViewController == self); assert(self.navigationController.topViewController == self);
MPElementType type = [self typeAtIndexPath:indexPath]; MPElementType type = [self typeAtIndexPath:indexPath];
if (type == NSNotFound) if (type == (MPElementType)NSNotFound)
// Selected a non-type row. // Selected a non-type row.
return; return;

View File

@ -369,11 +369,11 @@
NSAssert([[NSThread currentThread] isMainThread], @"User selection should only be toggled from the main thread."); NSAssert([[NSThread currentThread] isMainThread], @"User selection should only be toggled from the main thread.");
NSManagedObjectContext *mainContext = [MPiOSAppDelegate managedObjectContextForThreadIfReady]; NSManagedObjectContext *context = [MPiOSAppDelegate managedObjectContextForMainThreadIfReady];
MPUserEntity *selectedUser = [self selectedUserInContext:mainContext]; MPUserEntity *selectedUser = [self selectedUserInContext:context];
if (!selectedUser) if (!selectedUser)
[self.passwordField resignFirstResponder]; [self.passwordField resignFirstResponder];
else if ([[MPiOSAppDelegate get] signInAsUser:selectedUser saveInContext:mainContext usingMasterPassword:nil]) { else if ([[MPiOSAppDelegate get] signInAsUser:selectedUser saveInContext:context usingMasterPassword:nil]) {
[self performSegueWithIdentifier:@"MP_Unlock" sender:self]; [self performSegueWithIdentifier:@"MP_Unlock" sender:self];
return; return;
} }
@ -556,7 +556,7 @@
UIButton *targetedAvatar = selectedAvatar; UIButton *targetedAvatar = selectedAvatar;
if (!targetedAvatar) { if (!targetedAvatar) {
targetedAvatar = [self findTargetedAvatar]; targetedAvatar = [self findTargetedAvatar];
targetedUser = [self userForAvatar:targetedAvatar inContext:[MPiOSAppDelegate managedObjectContextForThreadIfReady]]; targetedUser = [self userForAvatar:targetedAvatar inContext:[MPiOSAppDelegate managedObjectContextForMainThreadIfReady]];
} }
[self.avatarsView enumerateSubviews:^(UIView *subview, BOOL *stop, BOOL *recurse) { [self.avatarsView enumerateSubviews:^(UIView *subview, BOOL *stop, BOOL *recurse) {
@ -1140,7 +1140,7 @@
- (MPUserEntity *)selectedUserForThread { - (MPUserEntity *)selectedUserForThread {
return [self selectedUserInContext:[MPiOSAppDelegate managedObjectContextForThreadIfReady]]; return [self selectedUserInContext:[MPiOSAppDelegate managedObjectContextForMainThreadIfReady]];
} }
- (MPUserEntity *)selectedUserInContext:(NSManagedObjectContext *)moc { - (MPUserEntity *)selectedUserInContext:(NSManagedObjectContext *)moc {

View File

@ -491,7 +491,7 @@
- (void)openFeedbackWithLogs:(BOOL)logs forVC:(UIViewController *)viewController { - (void)openFeedbackWithLogs:(BOOL)logs forVC:(UIViewController *)viewController {
NSString *userName = [[MPiOSAppDelegate get] activeUserForThread].name; NSString *userName = [[MPiOSAppDelegate get] activeUserForMainThread].name;
PearlLogLevel logLevel = PearlLogLevelInfo; PearlLogLevel logLevel = PearlLogLevelInfo;
if (logs && ([[MPiOSConfig get].sendInfo boolValue] || [[MPiOSConfig get].traceMode boolValue])) if (logs && ([[MPiOSConfig get].sendInfo boolValue] || [[MPiOSConfig get].traceMode boolValue]))
logLevel = PearlLogLevelDebug; logLevel = PearlLogLevelDebug;
@ -566,7 +566,7 @@
@"--\n" @"--\n"
@"%@\n" @"%@\n"
@"Master Password %@, build %@", @"Master Password %@, build %@",
[self activeUserForThread].name, [self activeUserForMainThread].name,
[PearlInfoPlist get].CFBundleShortVersionString, [PearlInfoPlist get].CFBundleShortVersionString,
[PearlInfoPlist get].CFBundleVersion ); [PearlInfoPlist get].CFBundleVersion );
else else
@ -574,7 +574,7 @@
@"--\n" @"--\n"
@"%@\n" @"%@\n"
@"Master Password %@, build %@", @"Master Password %@, build %@",
[self activeUserForThread].name, [self activeUserForMainThread].name,
[PearlInfoPlist get].CFBundleShortVersionString, [PearlInfoPlist get].CFBundleShortVersionString,
[PearlInfoPlist get].CFBundleVersion ); [PearlInfoPlist get].CFBundleVersion );
@ -584,7 +584,7 @@
[PearlEMail sendEMailTo:nil subject:@"Master Password Export" body:message [PearlEMail sendEMailTo:nil subject:@"Master Password Export" body:message
attachments:[[PearlEMailAttachment alloc] initWithContent:[exportedSites dataUsingEncoding:NSUTF8StringEncoding] attachments:[[PearlEMailAttachment alloc] initWithContent:[exportedSites dataUsingEncoding:NSUTF8StringEncoding]
mimeType:@"text/plain" fileName: mimeType:@"text/plain" fileName:
PearlString( @"%@ (%@).mpsites", [self activeUserForThread].name, PearlString( @"%@ (%@).mpsites", [self activeUserForMainThread].name,
[exportDateFormatter stringFromDate:[NSDate date]] )], [exportDateFormatter stringFromDate:[NSDate date]] )],
nil]; nil];
} }

View File

@ -230,7 +230,6 @@
DABD3C201711E2DC00CF925C /* MPUnlockViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DABD3BEF1711E2DC00CF925C /* MPUnlockViewController.m */; }; DABD3C201711E2DC00CF925C /* MPUnlockViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DABD3BEF1711E2DC00CF925C /* MPUnlockViewController.m */; };
DABD3C211711E2DC00CF925C /* MPiOSConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = DABD3BF11711E2DC00CF925C /* MPiOSConfig.m */; }; DABD3C211711E2DC00CF925C /* MPiOSConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = DABD3BF11711E2DC00CF925C /* MPiOSConfig.m */; };
DABD3C221711E2DC00CF925C /* MainStoryboard_iPhone.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DABD3BF21711E2DC00CF925C /* MainStoryboard_iPhone.storyboard */; }; DABD3C221711E2DC00CF925C /* MainStoryboard_iPhone.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DABD3BF21711E2DC00CF925C /* MainStoryboard_iPhone.storyboard */; };
DABD3C231711E2DC00CF925C /* MasterPassword-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = DABD3BF31711E2DC00CF925C /* MasterPassword-Info.plist */; };
DABD3C241711E2DC00CF925C /* MasterPassword.entitlements in Resources */ = {isa = PBXBuildFile; fileRef = DABD3BF81711E2DC00CF925C /* MasterPassword.entitlements */; }; DABD3C241711E2DC00CF925C /* MasterPassword.entitlements in Resources */ = {isa = PBXBuildFile; fileRef = DABD3BF81711E2DC00CF925C /* MasterPassword.entitlements */; };
DABD3C251711E2DC00CF925C /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = DABD3BF91711E2DC00CF925C /* Settings.bundle */; }; DABD3C251711E2DC00CF925C /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = DABD3BF91711E2DC00CF925C /* Settings.bundle */; };
DABD3C261711E2DC00CF925C /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = DABD3BFA1711E2DC00CF925C /* InfoPlist.strings */; }; DABD3C261711E2DC00CF925C /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = DABD3BFA1711E2DC00CF925C /* InfoPlist.strings */; };
@ -3258,7 +3257,7 @@
isa = PBXProject; isa = PBXProject;
attributes = { attributes = {
CLASSPREFIX = MP; CLASSPREFIX = MP;
LastUpgradeCheck = 0460; LastUpgradeCheck = 0500;
ORGANIZATIONNAME = Lyndir; ORGANIZATIONNAME = Lyndir;
}; };
buildConfigurationList = DA5BFA3E147E415C00F98B1E /* Build configuration list for PBXProject "MasterPassword-iOS" */; buildConfigurationList = DA5BFA3E147E415C00F98B1E /* Build configuration list for PBXProject "MasterPassword-iOS" */;
@ -3517,7 +3516,6 @@
DABD3B9E1711E29800CF925C /* social-twitter@2x.png in Resources */, DABD3B9E1711E29800CF925C /* social-twitter@2x.png in Resources */,
DABD3C191711E2DC00CF925C /* MPElementListCellView.xib in Resources */, DABD3C191711E2DC00CF925C /* MPElementListCellView.xib in Resources */,
DABD3C221711E2DC00CF925C /* MainStoryboard_iPhone.storyboard in Resources */, DABD3C221711E2DC00CF925C /* MainStoryboard_iPhone.storyboard in Resources */,
DABD3C231711E2DC00CF925C /* MasterPassword-Info.plist in Resources */,
DABD3C241711E2DC00CF925C /* MasterPassword.entitlements in Resources */, DABD3C241711E2DC00CF925C /* MasterPassword.entitlements in Resources */,
DABD3C251711E2DC00CF925C /* Settings.bundle in Resources */, DABD3C251711E2DC00CF925C /* Settings.bundle in Resources */,
DABD3C261711E2DC00CF925C /* InfoPlist.strings in Resources */, DABD3C261711E2DC00CF925C /* InfoPlist.strings in Resources */,
@ -3857,7 +3855,6 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/MasterPassword.app/MasterPassword"; BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/MasterPassword.app/MasterPassword";
CLANG_ENABLE_OBJC_ARC = YES; CLANG_ENABLE_OBJC_ARC = YES;
COPY_PHASE_STRIP = YES; COPY_PHASE_STRIP = YES;
@ -3887,7 +3884,6 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/MasterPassword.app/MasterPassword"; BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/MasterPassword.app/MasterPassword";
CLANG_ENABLE_OBJC_ARC = YES; CLANG_ENABLE_OBJC_ARC = YES;
COPY_PHASE_STRIP = YES; COPY_PHASE_STRIP = YES;
@ -3971,7 +3967,6 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
CLANG_WARN_CXX0X_EXTENSIONS = YES; CLANG_WARN_CXX0X_EXTENSIONS = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_EMPTY_BODY = YES;
@ -4041,7 +4036,6 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
CLANG_WARN_CXX0X_EXTENSIONS = YES; CLANG_WARN_CXX0X_EXTENSIONS = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_EMPTY_BODY = YES;
@ -4166,7 +4160,6 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
CLANG_WARN_CXX0X_EXTENSIONS = YES; CLANG_WARN_CXX0X_EXTENSIONS = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_EMPTY_BODY = YES;