diff --git a/Crashlytics/Crashlytics.framework/Versions/A/Crashlytics b/Crashlytics/Crashlytics.framework/Versions/A/Crashlytics index bb0d23de..17aef681 100644 Binary files a/Crashlytics/Crashlytics.framework/Versions/A/Crashlytics and b/Crashlytics/Crashlytics.framework/Versions/A/Crashlytics differ diff --git a/Crashlytics/Crashlytics.framework/Versions/A/Resources/Info.plist b/Crashlytics/Crashlytics.framework/Versions/A/Resources/Info.plist index e7e6418b..7820e2ad 100644 Binary files a/Crashlytics/Crashlytics.framework/Versions/A/Resources/Info.plist and b/Crashlytics/Crashlytics.framework/Versions/A/Resources/Info.plist differ diff --git a/MasterPassword-iOS.xcodeproj/project.pbxproj b/MasterPassword-iOS.xcodeproj/project.pbxproj index ad25ee29..b8744a8c 100644 --- a/MasterPassword-iOS.xcodeproj/project.pbxproj +++ b/MasterPassword-iOS.xcodeproj/project.pbxproj @@ -781,7 +781,6 @@ DACABB911572B76A008BA211 /* tip_basic_black_top@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DACABB8F1572B769008BA211 /* tip_basic_black_top@2x.png */; }; DAD3126715528C9C00A3F9ED /* Crashlytics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAD3125F15528C9C00A3F9ED /* Crashlytics.framework */; }; DAD3126815528C9C00A3F9ED /* Crashlytics.plist in Resources */ = {isa = PBXBuildFile; fileRef = DAD3126015528C9C00A3F9ED /* Crashlytics.plist */; }; - DAD3126915528C9C00A3F9ED /* libTestFlight.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAD3126215528C9C00A3F9ED /* libTestFlight.a */; }; DAD3126C15528C9C00A3F9ED /* TestFlight.plist in Resources */ = {isa = PBXBuildFile; fileRef = DAD3126615528C9C00A3F9ED /* TestFlight.plist */; }; DAD3127215528CD200A3F9ED /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; }; DAD3129015528D1600A3F9ED /* Localytics.plist in Resources */ = {isa = PBXBuildFile; fileRef = DAD3127D15528D0F00A3F9ED /* Localytics.plist */; }; @@ -2108,7 +2107,6 @@ DA5BFA4D147E415C00F98B1E /* CoreGraphics.framework in Frameworks */, DA5BFA4F147E415C00F98B1E /* CoreData.framework in Frameworks */, DAD3126715528C9C00A3F9ED /* Crashlytics.framework in Frameworks */, - DAD3126915528C9C00A3F9ED /* libTestFlight.a in Frameworks */, 93D399433EA75E50656040CB /* Twitter.framework in Frameworks */, DA55878015E82C0300860B4F /* FacebookSDK.framework in Frameworks */, ); @@ -2168,6 +2166,16 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + DA3EE95B1601C06000C68F6D /* Facebook */ = { + isa = PBXGroup; + children = ( + DA5587B715E838CD00860B4F /* DeprecatedHeaders */, + DA55878115E82C2B00860B4F /* FacebookSDKResources.bundle */, + DA55877F15E82C0300860B4F /* FacebookSDK.framework */, + ); + name = Facebook; + sourceTree = ""; + }; DA3EF17E15A47744003ABF4E /* Tests */ = { isa = PBXGroup; children = ( @@ -2377,6 +2385,7 @@ DAD3126115528C9C00A3F9ED /* TestFlight */, DAD3127315528CD200A3F9ED /* Localytics */, DA5587F715E8B7B200860B4F /* Google+ */, + DA3EE95B1601C06000C68F6D /* Facebook */, DA4425D71557BF260052177D /* iCloudStoreManager */, DA829E5D15984812002417D3 /* FontReplacer */, DA3EF17E15A47744003ABF4E /* Tests */, @@ -2405,9 +2414,6 @@ DA5BFA47147E415C00F98B1E /* Frameworks */ = { isa = PBXGroup; children = ( - DA5587B715E838CD00860B4F /* DeprecatedHeaders */, - DA55878115E82C2B00860B4F /* FacebookSDKResources.bundle */, - DA55877F15E82C0300860B4F /* FacebookSDK.framework */, 93D394077F8FAB8167647187 /* Twitter.framework */, DAAC35DD156BD77D00C5FD93 /* CoreTelephony.framework */, DAD312C01552A20800A3F9ED /* libsqlite3.dylib */, @@ -4704,13 +4710,15 @@ files = ( ); inputPaths = ( + "$(SRCROOT)/External/facebook-ios-sdk/src", ); name = "Run Script: FacebookSDK"; outputPaths = ( + "$(SRCROOT)/External/facebook-ios-sdk/build", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "[ -d External/facebook-ios-sdk/build ] || env -i PATH=\"$PATH\" ./External/facebook-ios-sdk/scripts/build_framework.sh"; + shellScript = "env -i PATH=\"$PATH\" ./External/facebook-ios-sdk/scripts/build_framework.sh"; showEnvVarsInLog = 0; }; DA6556E314D55F3000841C99 /* Run Script: GIT version -> Info.plist */ = { @@ -5138,7 +5146,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = armv7; + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; CLANG_WARN_CXX0X_EXTENSIONS = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES; @@ -5199,7 +5207,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = armv7; + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; CLANG_WARN_CXX0X_EXTENSIONS = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES; @@ -5351,7 +5359,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = armv7; + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; CLANG_WARN_CXX0X_EXTENSIONS = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES; diff --git a/MasterPassword/Java/masterpassword-cli/src/main/scripts/mpw b/MasterPassword/Java/masterpassword-cli/src/main/scripts/mpw index 5374b668..9dbbe6a3 100755 --- a/MasterPassword/Java/masterpassword-cli/src/main/scripts/mpw +++ b/MasterPassword/Java/masterpassword-cli/src/main/scripts/mpw @@ -1,4 +1,9 @@ #!/usr/bin/env bash +# Uncomment this to set your user name. Master Password will no longer ask you for a user name. +# export MP_USERNAME="Robert Lee Mitchell" +# Uncomment this to hardcode your master password. Make sure this file's permissions are tight. Master Password will not ask you for your master password anymore. This is probably not a good idea. +# export MP_PASSWORD="banana colored duckling" + cd "${BASH_SOURCE[0]%/*}" java -jar masterpassword-cli-GIT-SNAPSHOT.jar "$@" diff --git a/MasterPassword/MPAppDelegate_Key.m b/MasterPassword/MPAppDelegate_Key.m index 7af9c83e..94014426 100644 --- a/MasterPassword/MPAppDelegate_Key.m +++ b/MasterPassword/MPAppDelegate_Key.m @@ -185,7 +185,9 @@ static NSDictionary *keyQuery(MPUserEntity *user) { if (password) { inf(@"Login failed for: %@", user.userID); +#ifdef TESTFLIGHT_SDK_VERSION [TestFlight passCheckpoint:MPCheckpointSignInFailed]; +#endif [[LocalyticsSession sharedLocalyticsSession] tagEvent:MPCheckpointSignInFailed attributes:nil]; } @@ -200,7 +202,9 @@ static NSDictionary *keyQuery(MPUserEntity *user) { @try { if ([[MPiOSConfig get].sendInfo boolValue]) { +#ifdef TESTFLIGHT_SDK_VERSION [TestFlight addCustomEnvironmentInformation:user.userID forKey:@"username"]; +#endif [Crashlytics setObjectValue:user.userID forKey:@"username"]; [Crashlytics setUserName:user.userID]; } @@ -218,7 +222,9 @@ static NSDictionary *keyQuery(MPUserEntity *user) { [[MPAppDelegate_Shared get] saveContext]; [[NSNotificationCenter defaultCenter] postNotificationName:MPNotificationSignedIn object:self]; +#ifdef TESTFLIGHT_SDK_VERSION [TestFlight passCheckpoint:MPCheckpointSignedIn]; +#endif [[LocalyticsSession sharedLocalyticsSession] tagEvent:MPCheckpointSignedIn attributes:nil]; return YES; diff --git a/MasterPassword/MPAppDelegate_Store.m b/MasterPassword/MPAppDelegate_Store.m index 0ae9fd35..a26c1b4f 100644 --- a/MasterPassword/MPAppDelegate_Store.m +++ b/MasterPassword/MPAppDelegate_Store.m @@ -133,7 +133,9 @@ iCloudEnabled = manager.iCloudEnabled; inf(@"Using iCloud? %@", iCloudEnabled? @"YES": @"NO"); +#ifdef TESTFLIGHT_SDK_VERSION [TestFlight passCheckpoint:iCloudEnabled? MPCheckpointCloudEnabled: MPCheckpointCloudDisabled]; +#endif [[LocalyticsSession sharedLocalyticsSession] tagEvent:MPCheckpointCloud attributes:@{ @"enabled": iCloudEnabled? @"YES": @"NO" }]; @@ -146,7 +148,9 @@ err(@"StoreManager: cause=%d, context=%@, error=%@", cause, context, error); +#ifdef TESTFLIGHT_SDK_VERSION [TestFlight passCheckpoint:PearlString(MPCheckpointMPErrorUbiquity @"_%d", cause)]; +#endif [[LocalyticsSession sharedLocalyticsSession] tagEvent:MPCheckpointMPErrorUbiquity attributes:@{ @"cause": @(cause), @"error.domain": error.domain, @@ -165,7 +169,9 @@ if (error.code == NSMigrationMissingSourceModelError) { wrn(@"Resetting the local store."); +#ifdef TESTFLIGHT_SDK_VERSION [TestFlight passCheckpoint:MPCheckpointLocalStoreReset]; +#endif [[LocalyticsSession sharedLocalyticsSession] tagEvent:MPCheckpointLocalStoreReset attributes:nil]; manager.hardResetEnabled = YES; [manager hardResetLocalStorage]; @@ -181,7 +187,9 @@ if (error.code == NSMigrationMissingSourceModelError) { wrn(@"Resetting the iCloud store."); +#ifdef TESTFLIGHT_SDK_VERSION [TestFlight passCheckpoint:MPCheckpointCloudStoreReset]; +#endif [[LocalyticsSession sharedLocalyticsSession] tagEvent:MPCheckpointCloudStoreReset attributes:nil]; manager.hardResetEnabled = YES; [manager hardResetCloudStorage]; @@ -413,7 +421,9 @@ [self saveContext]; success = YES; inf(@"Import completed successfully."); +#ifdef TESTFLIGHT_SDK_VERSION [TestFlight passCheckpoint:MPCheckpointSitesImported]; +#endif [[LocalyticsSession sharedLocalyticsSession] tagEvent:MPCheckpointSitesImported attributes:nil]; return MPImportResultSuccess; @@ -476,7 +486,9 @@ ? content: @""]; } +#ifdef TESTFLIGHT_SDK_VERSION [TestFlight passCheckpoint:MPCheckpointSitesExported]; +#endif [[LocalyticsSession sharedLocalyticsSession] tagEvent:MPCheckpointSitesExported attributes:nil]; return export; diff --git a/MasterPassword/MasterPassword.xcdatamodeld/MasterPassword 3.xcdatamodel/contents b/MasterPassword/MasterPassword.xcdatamodeld/MasterPassword 3.xcdatamodel/contents index 1c640f10..d754ab10 100644 --- a/MasterPassword/MasterPassword.xcdatamodeld/MasterPassword 3.xcdatamodel/contents +++ b/MasterPassword/MasterPassword.xcdatamodeld/MasterPassword 3.xcdatamodel/contents @@ -1,9 +1,9 @@ - + - + diff --git a/MasterPassword/iOS/MPAppDelegate.m b/MasterPassword/iOS/MPAppDelegate.m index cf335258..c50b212b 100644 --- a/MasterPassword/iOS/MPAppDelegate.m +++ b/MasterPassword/iOS/MPAppDelegate.m @@ -6,7 +6,10 @@ // Copyright (c) 2011 Lyndir. All rights reserved. // +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wnewline-eof" #import +#pragma clang diagnostic pop #import "MPAppDelegate.h" #import "MPAppDelegate_Key.h" @@ -409,6 +412,7 @@ [[Crashlytics sharedInstance] setIntValue:[[PearlConfig get].reviewAfterLaunches intValue] forKey:@"reviewAfterLaunches"]; [[Crashlytics sharedInstance] setObjectValue:[PearlConfig get].reviewedVersion forKey:@"reviewedVersion"]; +#ifdef TESTFLIGHT_SDK_VERSION [TestFlight addCustomEnvironmentInformation:[[MPConfig get].rememberLogin boolValue]? @"YES": @"NO" forKey:@"rememberLogin"]; [TestFlight addCustomEnvironmentInformation:[[MPConfig get].iCloud boolValue]? @"YES": @"NO" forKey:@"iCloud"]; [TestFlight addCustomEnvironmentInformation:[[MPConfig get].iCloudDecided boolValue]? @"YES": @"NO" forKey:@"iCloudDecided"]; @@ -422,6 +426,7 @@ [TestFlight addCustomEnvironmentInformation:[PearlConfig get].reviewedVersion forKey:@"reviewedVersion"]; [TestFlight passCheckpoint:MPCheckpointConfig]; +#endif [[LocalyticsSession sharedLocalyticsSession] tagEvent:MPCheckpointConfig attributes: @{ @"rememberLogin": [[MPConfig get].rememberLogin boolValue] @@ -451,7 +456,9 @@ [self.navigationController performSegueWithIdentifier:@"MP_Guide" sender:self]; +#ifdef TESTFLIGHT_SDK_VERSION [TestFlight passCheckpoint:MPCheckpointShowGuide]; +#endif [[LocalyticsSession sharedLocalyticsSession] tagEvent:MPCheckpointShowGuide attributes:nil]; } @@ -462,7 +469,9 @@ - (void)showReview { +#ifdef TESTFLIGHT_SDK_VERSION [TestFlight passCheckpoint:MPCheckpointReview]; +#endif [[LocalyticsSession sharedLocalyticsSession] tagEvent:MPCheckpointReview attributes:nil]; [super showReview]; @@ -610,7 +619,9 @@ if (didReset) didReset(); +#ifdef TESTFLIGHT_SDK_VERSION [TestFlight passCheckpoint:MPCheckpointChangeMP]; +#endif [[LocalyticsSession sharedLocalyticsSession] tagEvent:MPCheckpointChangeMP attributes:nil]; } cancelTitle:[PearlStrings get].commonButtonAbort diff --git a/MasterPassword/iOS/MPAppViewController.m b/MasterPassword/iOS/MPAppViewController.m index 74d163f7..c072d4de 100644 --- a/MasterPassword/iOS/MPAppViewController.m +++ b/MasterPassword/iOS/MPAppViewController.m @@ -26,7 +26,9 @@ - (IBAction)gorillas:(UIButton *)sender { +#ifdef TESTFLIGHT_SDK_VERSION [TestFlight passCheckpoint:MPCheckpointAppGorillas]; +#endif [[LocalyticsSession sharedLocalyticsSession] tagEvent:MPCheckpointAppGorillas attributes:nil]; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://itunes.apple.com/app/lyndir/gorillas/id302275459?mt=8"]]; @@ -34,7 +36,9 @@ - (IBAction)deblock:(UIButton *)sender { +#ifdef TESTFLIGHT_SDK_VERSION [TestFlight passCheckpoint:MPCheckpointAppDeBlock]; +#endif [[LocalyticsSession sharedLocalyticsSession] tagEvent:MPCheckpointAppDeBlock attributes:nil]; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://itunes.apple.com/app/lyndir/deblock/id325058485?mt=8"]]; diff --git a/MasterPassword/iOS/MPAppsViewController.m b/MasterPassword/iOS/MPAppsViewController.m index 28277ea7..46da06be 100644 --- a/MasterPassword/iOS/MPAppsViewController.m +++ b/MasterPassword/iOS/MPAppsViewController.m @@ -71,7 +71,9 @@ [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide]; +#ifdef TESTFLIGHT_SDK_VERSION [TestFlight passCheckpoint:MPCheckpointApps]; +#endif [[LocalyticsSession sharedLocalyticsSession] tagEvent:MPCheckpointApps attributes:nil]; [super viewWillAppear:animated]; diff --git a/MasterPassword/iOS/MPMainViewController.m b/MasterPassword/iOS/MPMainViewController.m index 32a7fc04..8eb3188f 100644 --- a/MasterPassword/iOS/MPMainViewController.m +++ b/MasterPassword/iOS/MPMainViewController.m @@ -338,7 +338,9 @@ - (void)setHelpChapter:(NSString *)chapter { +#ifdef TESTFLIGHT_SDK_VERSION [TestFlight passCheckpoint:PearlString(MPCheckpointHelpChapter @"_%@", chapter)]; +#endif [[LocalyticsSession sharedLocalyticsSession] tagEvent:MPCheckpointHelpChapter attributes:@{@"chapter": chapter}]; dispatch_async(dispatch_get_main_queue(), ^{ @@ -491,7 +493,9 @@ [self showContentTip:@"Copied!" withIcon:nil]; +#ifdef TESTFLIGHT_SDK_VERSION [TestFlight passCheckpoint:MPCheckpointCopyToPasteboard]; +#endif [[LocalyticsSession sharedLocalyticsSession] tagEvent:MPCheckpointCopyToPasteboard attributes:@{@"type": self.activeElement.typeName, @"version": @(self.activeElement.version)}]; @@ -507,7 +511,9 @@ [self showLoginNameTip:@"Copied!"]; +#ifdef TESTFLIGHT_SDK_VERSION [TestFlight passCheckpoint:MPCheckpointCopyLoginNameToPasteboard]; +#endif [[LocalyticsSession sharedLocalyticsSession] tagEvent:MPCheckpointCopyLoginNameToPasteboard attributes:@{@"type": self.activeElement.typeName, @"version": @(self.activeElement.version)}]; @@ -528,7 +534,9 @@ inf(@"Incrementing password counter for: %@", self.activeElement.name); ++((MPElementGeneratedEntity *)self.activeElement).counter; +#ifdef TESTFLIGHT_SDK_VERSION [TestFlight passCheckpoint:MPCheckpointIncrementPasswordCounter]; +#endif [[LocalyticsSession sharedLocalyticsSession] tagEvent:MPCheckpointIncrementPasswordCounter attributes:@{@"type": self.activeElement.typeName, @"version": @(self.activeElement.version)}]; @@ -555,7 +563,9 @@ inf(@"Resetting password counter for: %@", self.activeElement.name); ((MPElementGeneratedEntity *)self.activeElement).counter = 1; +#ifdef TESTFLIGHT_SDK_VERSION [TestFlight passCheckpoint:MPCheckpointResetPasswordCounter]; +#endif [[LocalyticsSession sharedLocalyticsSession] tagEvent:MPCheckpointResetPasswordCounter attributes:@{@"type": self.activeElement.typeName, @"version": @(self.activeElement.version)}]; @@ -574,7 +584,9 @@ self.loginNameField.enabled = YES; [self.loginNameField becomeFirstResponder]; +#ifdef TESTFLIGHT_SDK_VERSION [TestFlight passCheckpoint:MPCheckpointEditLoginName]; +#endif [[LocalyticsSession sharedLocalyticsSession] tagEvent:MPCheckpointEditLoginName attributes:@{@"type": self.activeElement.typeName, @"version": @(self.activeElement.version)}]; } @@ -616,7 +628,9 @@ self.contentField.enabled = YES; [self.contentField becomeFirstResponder]; +#ifdef TESTFLIGHT_SDK_VERSION [TestFlight passCheckpoint:MPCheckpointEditPassword]; +#endif [[LocalyticsSession sharedLocalyticsSession] tagEvent:MPCheckpointEditPassword attributes:@{@"type": self.activeElement.typeName, @"version": @(self.activeElement.version)}]; @@ -637,7 +651,9 @@ inf(@"Explicitly migrating element: %@", self.activeElement); [self.activeElement migrateExplicitly:YES]; +#ifdef TESTFLIGHT_SDK_VERSION [TestFlight passCheckpoint:MPCheckpointExplicitMigration]; +#endif [[LocalyticsSession sharedLocalyticsSession] tagEvent:MPCheckpointExplicitMigration attributes:@{@"type": self.activeElement.typeName, @"version": @(self.activeElement.version)}]; @@ -807,7 +823,9 @@ }]; [[NSNotificationCenter defaultCenter] postNotificationName:MPNotificationElementUpdated object:self.activeElement]; +#ifdef TESTFLIGHT_SDK_VERSION [TestFlight passCheckpoint:PearlString(MPCheckpointUseType @"_%@", self.activeElement.typeShortName)]; +#endif [[LocalyticsSession sharedLocalyticsSession] tagEvent:MPCheckpointUseType attributes:@{@"type": self.activeElement.typeName, @"version": @(self.activeElement.version)}]; } diff --git a/MasterPassword/iOS/MPSearchDelegate.m b/MasterPassword/iOS/MPSearchDelegate.m index 6c784f3e..eefa1930 100644 --- a/MasterPassword/iOS/MPSearchDelegate.m +++ b/MasterPassword/iOS/MPSearchDelegate.m @@ -406,7 +406,9 @@ forRowAtIndexPath:(NSIndexPath *)indexPath { inf(@"Deleting element: %@", element.name); [self.fetchedResultsController.managedObjectContext deleteObject:element]; +#ifdef TESTFLIGHT_SDK_VERSION [TestFlight passCheckpoint:MPCheckpointDeleteElement]; +#endif [[LocalyticsSession sharedLocalyticsSession] tagEvent:MPCheckpointDeleteElement attributes:@{@"type": element.typeName, @"version": @(element.version)}]; diff --git a/MasterPassword/iOS/MPUnlockViewController.m b/MasterPassword/iOS/MPUnlockViewController.m index 12ed83bc..70aea4aa 100644 --- a/MasterPassword/iOS/MPUnlockViewController.m +++ b/MasterPassword/iOS/MPUnlockViewController.m @@ -9,7 +9,10 @@ #import #import +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wnewline-eof" #import "Facebook.h" +#pragma clang diagnostic pop #import "GooglePlusShare.h" #import "MPUnlockViewController.h" @@ -86,7 +89,9 @@ } options:0]; [avatar onSelect:^(BOOL selected) { if (selected) - user.avatar = (unsigned)avatar.tag; + [user.managedObjectContext performBlock:^{ + user.avatar = (unsigned)avatar.tag; + }]; } options:0]; avatar.selected = (a == user.avatar); if (avatar.selected) @@ -237,9 +242,11 @@ [self.avatarToUser removeAllObjects]; // Create avatars. - for (MPUserEntity *user in users) - [self setupAvatar:[self.avatarTemplate clone] forUser:user]; - [self setupAvatar:[self.avatarTemplate clone] forUser:nil]; + [moc performBlockAndWait:^{ + for (MPUserEntity *user in users) + [self setupAvatar:[self.avatarTemplate clone] forUser:user]; + [self setupAvatar:[self.avatarTemplate clone] forUser:nil]; + }]; // Scroll view's content changed, update its content size. [self.avatarsView autoSizeContentIgnoreHidden:YES ignoreInvisible:YES limitPadding:NO ignoreSubviews:nil]; @@ -348,7 +355,9 @@ } // Save - newUser.name = [alert textFieldAtIndex:0].text; + [newUser.managedObjectContext performBlock:^{ + newUser.name = [alert textFieldAtIndex:0].text; + }]; [self showNewUserAvatarAlertFor:newUser completion:completion]; } cancelTitle:[PearlStrings get].commonButtonCancel otherTitles:[PearlStrings get].commonButtonSave, nil]; diff --git a/MasterPassword/iOS/MasterPassword-Prefix.pch b/MasterPassword/iOS/MasterPassword-Prefix.pch index 1de2c9eb..c952bec0 100644 --- a/MasterPassword/iOS/MasterPassword-Prefix.pch +++ b/MasterPassword/iOS/MasterPassword-Prefix.pch @@ -16,12 +16,9 @@ #import #import -#import "TestFlight.h" +//#import "TestFlight.h" #import -//#define Crashlytics PearlNil -//#define TestFlight PearlNil - #import "MPTypes.h" #import "MPiOSConfig.h" diff --git a/Resources/AppStore-iOS-1136.png b/Resources/AppStore-iOS-1136.png new file mode 100644 index 00000000..7c130fe2 Binary files /dev/null and b/Resources/AppStore-iOS-1136.png differ diff --git a/Site/img/objc468x60.png b/Site/img/objc468x60.png new file mode 100644 index 00000000..9a317b4c Binary files /dev/null and b/Site/img/objc468x60.png differ diff --git a/Site/index.html b/Site/index.html index 382bd8c1..be11f8c1 100644 --- a/Site/index.html +++ b/Site/index.html @@ -155,7 +155,7 @@
-
+

Master Password

@@ -198,7 +198,7 @@ @@ -341,6 +341,8 @@ diff --git a/Site/sync b/Site/sync index 1a1a29cd..3a88edbd 100755 --- a/Site/sync +++ b/Site/sync @@ -2,6 +2,8 @@ set -e cd "${BASH_SOURCE[0]%/*}" +s3cmd sync . s3://masterpassword.lyndir.com/ +s3cmd sync . s3://www.masterpasswordapp.com/ nice rsync --partial --progress --delete --sparse --archive --no-owner --no-perms --no-group --chmod=ugo=rwX \ --exclude rate-limit \ - . masterpassword.lyndir.com:/usr/local/www/masterpassword.lyndir.com/htdocs/ + . satura.lyndir.com:/usr/local/www/masterpassword.lyndir.com/htdocs/