2
0

Mac OS X build fixes of shared code from iOS.

[FIXED]     Build problems with code shared from the iOS project in the
            Mac project.
This commit is contained in:
Maarten Billemont 2012-03-05 22:43:20 +01:00
parent 02ffa9611a
commit f3c24fd96f
13 changed files with 89 additions and 75 deletions

View File

@ -9,6 +9,8 @@
/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
DA600BEB150420AC008E9AB6 /* MPPasswordWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = DA600BE9150420AC008E9AB6 /* MPPasswordWindowController.m */; }; DA600BEB150420AC008E9AB6 /* MPPasswordWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = DA600BE9150420AC008E9AB6 /* MPPasswordWindowController.m */; };
DA600BEC150420AC008E9AB6 /* MPPasswordWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = DA600BEA150420AC008E9AB6 /* MPPasswordWindowController.xib */; }; DA600BEC150420AC008E9AB6 /* MPPasswordWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = DA600BEA150420AC008E9AB6 /* MPPasswordWindowController.xib */; };
DA600C2D150565FC008E9AB6 /* MPConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = DA600C2A150565FC008E9AB6 /* MPConfig.m */; };
DA600C2E150565FC008E9AB6 /* MPAppDelegate_Key.m in Sources */ = {isa = PBXBuildFile; fileRef = DA600C2B150565FC008E9AB6 /* MPAppDelegate_Key.m */; };
DAB8D98D150374AD00CED3BC /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAB8D98C150374AD00CED3BC /* Cocoa.framework */; }; DAB8D98D150374AD00CED3BC /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAB8D98C150374AD00CED3BC /* Cocoa.framework */; };
DAB8D9C8150375C800CED3BC /* MasterPassword.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = DAB8D9B2150375C800CED3BC /* MasterPassword.xcdatamodeld */; }; DAB8D9C8150375C800CED3BC /* MasterPassword.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = DAB8D9B2150375C800CED3BC /* MasterPassword.xcdatamodeld */; };
DAB8D9C9150375C800CED3BC /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = DAB8D9B5150375C800CED3BC /* Credits.rtf */; }; DAB8D9C9150375C800CED3BC /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = DAB8D9B5150375C800CED3BC /* Credits.rtf */; };
@ -773,6 +775,10 @@
DA600BE8150420AC008E9AB6 /* MPPasswordWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPasswordWindowController.h; sourceTree = "<group>"; }; DA600BE8150420AC008E9AB6 /* MPPasswordWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPasswordWindowController.h; sourceTree = "<group>"; };
DA600BE9150420AC008E9AB6 /* MPPasswordWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPasswordWindowController.m; sourceTree = "<group>"; }; DA600BE9150420AC008E9AB6 /* MPPasswordWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPasswordWindowController.m; sourceTree = "<group>"; };
DA600BEA150420AC008E9AB6 /* MPPasswordWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MPPasswordWindowController.xib; sourceTree = "<group>"; }; DA600BEA150420AC008E9AB6 /* MPPasswordWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MPPasswordWindowController.xib; sourceTree = "<group>"; };
DA600C29150565FC008E9AB6 /* MPConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MPConfig.h; path = MasterPassword/MPConfig.h; sourceTree = SOURCE_ROOT; };
DA600C2A150565FC008E9AB6 /* MPConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MPConfig.m; path = MasterPassword/MPConfig.m; sourceTree = SOURCE_ROOT; };
DA600C2B150565FC008E9AB6 /* MPAppDelegate_Key.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MPAppDelegate_Key.m; path = MasterPassword/MPAppDelegate_Key.m; sourceTree = SOURCE_ROOT; };
DA600C2C150565FC008E9AB6 /* MPAppDelegate_Key.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MPAppDelegate_Key.h; path = MasterPassword/MPAppDelegate_Key.h; sourceTree = SOURCE_ROOT; };
DAB8D988150374AD00CED3BC /* MasterPassword.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MasterPassword.app; sourceTree = BUILT_PRODUCTS_DIR; }; DAB8D988150374AD00CED3BC /* MasterPassword.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MasterPassword.app; sourceTree = BUILT_PRODUCTS_DIR; };
DAB8D98C150374AD00CED3BC /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; DAB8D98C150374AD00CED3BC /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
DAB8D98F150374AD00CED3BC /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; DAB8D98F150374AD00CED3BC /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
@ -2013,6 +2019,10 @@
children = ( children = (
DAB8D9B2150375C800CED3BC /* MasterPassword.xcdatamodeld */, DAB8D9B2150375C800CED3BC /* MasterPassword.xcdatamodeld */,
DAB8D9B4150375C800CED3BC /* Mac */, DAB8D9B4150375C800CED3BC /* Mac */,
DA600C2B150565FC008E9AB6 /* MPAppDelegate_Key.m */,
DA600C2C150565FC008E9AB6 /* MPAppDelegate_Key.h */,
DA600C29150565FC008E9AB6 /* MPConfig.h */,
DA600C2A150565FC008E9AB6 /* MPConfig.m */,
DAB8D9C0150375C800CED3BC /* MPElementStoredEntity.m */, DAB8D9C0150375C800CED3BC /* MPElementStoredEntity.m */,
DAB8D9C1150375C800CED3BC /* MPTypes.m */, DAB8D9C1150375C800CED3BC /* MPTypes.m */,
DAB8D9C2150375C800CED3BC /* MPElementEntity.h */, DAB8D9C2150375C800CED3BC /* MPElementEntity.h */,
@ -4163,6 +4173,8 @@
DAB8D9D1150375C800CED3BC /* MPElementEntity.m in Sources */, DAB8D9D1150375C800CED3BC /* MPElementEntity.m in Sources */,
DAB8D9D2150375C800CED3BC /* MPElementGeneratedEntity.m in Sources */, DAB8D9D2150375C800CED3BC /* MPElementGeneratedEntity.m in Sources */,
DA600BEB150420AC008E9AB6 /* MPPasswordWindowController.m in Sources */, DA600BEB150420AC008E9AB6 /* MPPasswordWindowController.m in Sources */,
DA600C2D150565FC008E9AB6 /* MPConfig.m in Sources */,
DA600C2E150565FC008E9AB6 /* MPAppDelegate_Key.m in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };

View File

@ -3824,6 +3824,7 @@
GCC_DYNAMIC_NO_PIC = NO; GCC_DYNAMIC_NO_PIC = NO;
GCC_OPTIMIZATION_LEVEL = 0; GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = ( GCC_PREPROCESSOR_DEFINITIONS = (
"TESTFLIGHT=1",
"DEBUG=1", "DEBUG=1",
"$(inherited)", "$(inherited)",
); );
@ -3847,6 +3848,10 @@
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
COPY_PHASE_STRIP = NO; COPY_PHASE_STRIP = NO;
GCC_C_LANGUAGE_STANDARD = gnu99; GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_PREPROCESSOR_DEFINITIONS = (
"TESTFLIGHT=1",
"$(inherited)",
);
GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES;
@ -3917,7 +3922,7 @@
}; };
name = Release; name = Release;
}; };
DA95D60914DF3F3B008D1B94 /* Production */ = { DA95D60914DF3F3B008D1B94 /* AppStore */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = NO;
@ -3925,7 +3930,10 @@
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
COPY_PHASE_STRIP = NO; COPY_PHASE_STRIP = NO;
GCC_C_LANGUAGE_STANDARD = gnu99; GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_PREPROCESSOR_DEFINITIONS = "PRODUCTION=1"; GCC_PREPROCESSOR_DEFINITIONS = (
"APPSTORE=1",
"$(inherited)",
);
GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES;
@ -3938,9 +3946,9 @@
TARGETED_DEVICE_FAMILY = "1,2"; TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES; VALIDATE_PRODUCT = YES;
}; };
name = Production; name = AppStore;
}; };
DA95D60A14DF3F3B008D1B94 /* Production */ = { DA95D60A14DF3F3B008D1B94 /* AppStore */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
CLANG_ENABLE_OBJC_ARC = YES; CLANG_ENABLE_OBJC_ARC = YES;
@ -3956,9 +3964,9 @@
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
WRAPPER_EXTENSION = app; WRAPPER_EXTENSION = app;
}; };
name = Production; name = AppStore;
}; };
DA95D60B14DF3F3B008D1B94 /* Production */ = { DA95D60B14DF3F3B008D1B94 /* AppStore */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
CLANG_ENABLE_OBJC_ARC = NO; CLANG_ENABLE_OBJC_ARC = NO;
@ -3970,9 +3978,9 @@
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES; SKIP_INSTALL = YES;
}; };
name = Production; name = AppStore;
}; };
DA95D60C14DF3F3B008D1B94 /* Production */ = { DA95D60C14DF3F3B008D1B94 /* AppStore */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
CLANG_ENABLE_OBJC_ARC = NO; CLANG_ENABLE_OBJC_ARC = NO;
@ -3982,9 +3990,9 @@
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES; SKIP_INSTALL = YES;
}; };
name = Production; name = AppStore;
}; };
DA95D60D14DF3F3B008D1B94 /* Production */ = { DA95D60D14DF3F3B008D1B94 /* AppStore */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
CLANG_ENABLE_OBJC_ARC = NO; CLANG_ENABLE_OBJC_ARC = NO;
@ -3994,9 +4002,9 @@
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES; SKIP_INSTALL = YES;
}; };
name = Production; name = AppStore;
}; };
DA95D60E14DF3F3B008D1B94 /* Production */ = { DA95D60E14DF3F3B008D1B94 /* AppStore */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
DSTROOT = /tmp/InAppSettingsKit.dst; DSTROOT = /tmp/InAppSettingsKit.dst;
@ -4004,7 +4012,7 @@
PRODUCT_NAME = InAppSettingsKit; PRODUCT_NAME = InAppSettingsKit;
SKIP_INSTALL = YES; SKIP_INSTALL = YES;
}; };
name = Production; name = AppStore;
}; };
DAC632661486805C0075AEA5 /* Debug */ = { DAC632661486805C0075AEA5 /* Debug */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
@ -4090,7 +4098,7 @@
buildConfigurations = ( buildConfigurations = (
DA5BFA6B147E415C00F98B1E /* Debug */, DA5BFA6B147E415C00F98B1E /* Debug */,
DA5BFA6C147E415C00F98B1E /* Release */, DA5BFA6C147E415C00F98B1E /* Release */,
DA95D60914DF3F3B008D1B94 /* Production */, DA95D60914DF3F3B008D1B94 /* AppStore */,
); );
defaultConfigurationIsVisible = 0; defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release; defaultConfigurationName = Release;
@ -4100,7 +4108,7 @@
buildConfigurations = ( buildConfigurations = (
DA5BFA6E147E415C00F98B1E /* Debug */, DA5BFA6E147E415C00F98B1E /* Debug */,
DA5BFA6F147E415C00F98B1E /* Release */, DA5BFA6F147E415C00F98B1E /* Release */,
DA95D60A14DF3F3B008D1B94 /* Production */, DA95D60A14DF3F3B008D1B94 /* AppStore */,
); );
defaultConfigurationIsVisible = 0; defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release; defaultConfigurationName = Release;
@ -4110,7 +4118,7 @@
buildConfigurations = ( buildConfigurations = (
DA95D5A514DF063C008D1B94 /* Debug */, DA95D5A514DF063C008D1B94 /* Debug */,
DA95D5A614DF063C008D1B94 /* Release */, DA95D5A614DF063C008D1B94 /* Release */,
DA95D60E14DF3F3B008D1B94 /* Production */, DA95D60E14DF3F3B008D1B94 /* AppStore */,
); );
defaultConfigurationIsVisible = 0; defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release; defaultConfigurationName = Release;
@ -4120,7 +4128,7 @@
buildConfigurations = ( buildConfigurations = (
DAC632661486805C0075AEA5 /* Debug */, DAC632661486805C0075AEA5 /* Debug */,
DAC632671486805C0075AEA5 /* Release */, DAC632671486805C0075AEA5 /* Release */,
DA95D60C14DF3F3B008D1B94 /* Production */, DA95D60C14DF3F3B008D1B94 /* AppStore */,
); );
defaultConfigurationIsVisible = 0; defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release; defaultConfigurationName = Release;
@ -4130,7 +4138,7 @@
buildConfigurations = ( buildConfigurations = (
DAC63275148680650075AEA5 /* Debug */, DAC63275148680650075AEA5 /* Debug */,
DAC63276148680650075AEA5 /* Release */, DAC63276148680650075AEA5 /* Release */,
DA95D60D14DF3F3B008D1B94 /* Production */, DA95D60D14DF3F3B008D1B94 /* AppStore */,
); );
defaultConfigurationIsVisible = 0; defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release; defaultConfigurationName = Release;
@ -4140,7 +4148,7 @@
buildConfigurations = ( buildConfigurations = (
DAC77CB5148291A600BCF976 /* Debug */, DAC77CB5148291A600BCF976 /* Debug */,
DAC77CB6148291A600BCF976 /* Release */, DAC77CB6148291A600BCF976 /* Release */,
DA95D60B14DF3F3B008D1B94 /* Production */, DA95D60B14DF3F3B008D1B94 /* AppStore */,
); );
defaultConfigurationIsVisible = 0; defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release; defaultConfigurationName = Release;

View File

@ -63,14 +63,14 @@
shouldUseLaunchSchemeArgsEnv = "YES" shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = "" savedToolIdentifier = ""
useCustomWorkingDirectory = "NO" useCustomWorkingDirectory = "NO"
buildConfiguration = "Release" buildConfiguration = "Production"
debugDocumentVersioning = "YES"> debugDocumentVersioning = "YES">
</ProfileAction> </ProfileAction>
<AnalyzeAction <AnalyzeAction
buildConfiguration = "Debug"> buildConfiguration = "Debug">
</AnalyzeAction> </AnalyzeAction>
<ArchiveAction <ArchiveAction
buildConfiguration = "Release" buildConfiguration = "Production"
revealArchiveInOrganizer = "YES"> revealArchiveInOrganizer = "YES">
</ArchiveAction> </ArchiveAction>
</Scheme> </Scheme>

View File

@ -6,7 +6,6 @@
// Copyright (c) 2011 Lyndir. All rights reserved. // Copyright (c) 2011 Lyndir. All rights reserved.
// //
#import <UIKit/UIKit.h>
#import "MPAppDelegate.h" #import "MPAppDelegate.h"
@interface MPAppDelegate () @interface MPAppDelegate ()

View File

@ -6,11 +6,9 @@
// Copyright (c) 2011 Lyndir. All rights reserved. // Copyright (c) 2011 Lyndir. All rights reserved.
// //
#import "MPConfig.h"
#import "MPAppDelegate_Key.h" #import "MPAppDelegate_Key.h"
#import "MPMainViewController.h"
#import "IASKSettingsReader.h"
@implementation MPAppDelegate (Key) @implementation MPAppDelegate (Key)
static NSDictionary *keyQuery() { static NSDictionary *keyQuery() {
@ -44,7 +42,7 @@ static NSDictionary *keyHashQuery() {
[PearlKeyChain deleteItemForQuery:keyHashQuery()]; [PearlKeyChain deleteItemForQuery:keyHashQuery()];
[[NSNotificationCenter defaultCenter] postNotificationName:MPNotificationKeyForgotten object:self]; [[NSNotificationCenter defaultCenter] postNotificationName:MPNotificationKeyForgotten object:self];
#ifndef PRODUCTION #ifdef TESTFLIGHT
[TestFlight passCheckpoint:MPTestFlightCheckpointMPForgotten]; [TestFlight passCheckpoint:MPTestFlightCheckpointMPForgotten];
#endif #endif
} }
@ -56,7 +54,7 @@ static NSDictionary *keyHashQuery() {
- (void)loadStoredKey { - (void)loadStoredKey {
if ([[MPiOSConfig get].storeKey boolValue]) { if ([[MPConfig get].storeKey boolValue]) {
// Key is stored in keychain. Load it. // Key is stored in keychain. Load it.
dbg(@"Loading key from key chain."); dbg(@"Loading key from key chain.");
[self updateKey:[PearlKeyChain dataOfItemForQuery:keyQuery()]]; [self updateKey:[PearlKeyChain dataOfItemForQuery:keyQuery()]];
@ -65,7 +63,7 @@ static NSDictionary *keyHashQuery() {
// Key should not be stored in keychain. Delete it. // Key should not be stored in keychain. Delete it.
dbg(@"Deleting key from key chain."); dbg(@"Deleting key from key chain.");
[PearlKeyChain deleteItemForQuery:keyQuery()]; [PearlKeyChain deleteItemForQuery:keyQuery()];
#ifndef PRODUCTION #ifdef TESTFLIGHT
[TestFlight passCheckpoint:MPTestFlightCheckpointMPUnstored]; [TestFlight passCheckpoint:MPTestFlightCheckpointMPUnstored];
#endif #endif
} }
@ -73,7 +71,13 @@ static NSDictionary *keyHashQuery() {
+ (MPAppDelegate *)get { + (MPAppDelegate *)get {
return (MPAppDelegate *)[super get]; #ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
return (MPAppDelegate *)[UIApplication sharedApplication].delegate;
#elif defined (__MAC_OS_X_VERSION_MIN_REQUIRED)
return (MPAppDelegate *)[NSApplication sharedApplication].delegate;
#else
#error Unsupported OS.
#endif
} }
- (BOOL)tryMasterPassword:(NSString *)tryPassword { - (BOOL)tryMasterPassword:(NSString *)tryPassword {
@ -92,13 +96,13 @@ static NSDictionary *keyHashQuery() {
if (![keyHash isEqual:tryKeyHash]) { if (![keyHash isEqual:tryKeyHash]) {
dbg(@"Key phrase hash mismatch. Expected: %@, answer: %@.", keyHash, tryKeyHash); dbg(@"Key phrase hash mismatch. Expected: %@, answer: %@.", keyHash, tryKeyHash);
#ifndef PRODUCTION #ifdef TESTFLIGHT
[TestFlight passCheckpoint:MPTestFlightCheckpointMPMismatch]; [TestFlight passCheckpoint:MPTestFlightCheckpointMPMismatch];
#endif #endif
return NO; return NO;
} }
#ifndef PRODUCTION #ifdef TESTFLIGHT
[TestFlight passCheckpoint:MPTestFlightCheckpointMPAsked]; [TestFlight passCheckpoint:MPTestFlightCheckpointMPAsked];
#endif #endif
@ -123,18 +127,22 @@ static NSDictionary *keyHashQuery() {
[PearlKeyChain addOrUpdateItemForQuery:keyHashQuery() [PearlKeyChain addOrUpdateItemForQuery:keyHashQuery()
withAttributes:[NSDictionary dictionaryWithObjectsAndKeys: withAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
self.keyHash, (__bridge id)kSecValueData, self.keyHash, (__bridge id)kSecValueData,
#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
kSecAttrAccessibleWhenUnlocked, (__bridge id)kSecAttrAccessible, kSecAttrAccessibleWhenUnlocked, (__bridge id)kSecAttrAccessible,
#endif
nil]]; nil]];
if ([[MPiOSConfig get].storeKey boolValue]) { if ([[MPConfig get].storeKey boolValue]) {
dbg(@"Storing key in key chain."); dbg(@"Storing key in key chain.");
[PearlKeyChain addOrUpdateItemForQuery:keyQuery() [PearlKeyChain addOrUpdateItemForQuery:keyQuery()
withAttributes:[NSDictionary dictionaryWithObjectsAndKeys: withAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
key, (__bridge id)kSecValueData, key, (__bridge id)kSecValueData,
#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
kSecAttrAccessibleWhenUnlocked, (__bridge id)kSecAttrAccessible, kSecAttrAccessibleWhenUnlocked, (__bridge id)kSecAttrAccessible,
#endif
nil]]; nil]];
} }
#ifndef PRODUCTION #ifdef TESTFLIGHT
[TestFlight passCheckpoint:[NSString stringWithFormat:MPTestFlightCheckpointSetKeyphraseLength, key.length]]; [TestFlight passCheckpoint:[NSString stringWithFormat:MPTestFlightCheckpointSetKeyphraseLength, key.length]];
#endif #endif
} }

View File

@ -32,7 +32,7 @@ typedef enum {
MPElementTypeStoredDevicePrivate = MPElementTypeClassStored | 0x02, MPElementTypeStoredDevicePrivate = MPElementTypeClassStored | 0x02,
} MPElementType; } MPElementType;
#ifndef PRODUCTION #ifdef TESTFLIGHT
#define MPTestFlightCheckpointAction @"MPTestFlightCheckpointAction" #define MPTestFlightCheckpointAction @"MPTestFlightCheckpointAction"
#define MPTestFlightCheckpointHelpChapter @"MPTestFlightCheckpointHelpChapter_%@" #define MPTestFlightCheckpointHelpChapter @"MPTestFlightCheckpointHelpChapter_%@"
#define MPTestFlightCheckpointCopyToPasteboard @"MPTestFlightCheckpointCopyToPasteboard" #define MPTestFlightCheckpointCopyToPasteboard @"MPTestFlightCheckpointCopyToPasteboard"

View File

@ -17,15 +17,9 @@
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel; @property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext; @property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (readonly, strong, nonatomic) MPPasswordWindowController *passwordWindow;
@property (readonly, strong, nonatomic) NSData *keyPhrase;
@property (readonly, strong, nonatomic) NSString *keyPhraseHashHex;
+ (MPAppDelegate *)get;
+ (NSManagedObjectModel *)managedObjectModel; + (NSManagedObjectModel *)managedObjectModel;
+ (NSManagedObjectContext *)managedObjectContext; + (NSManagedObjectContext *)managedObjectContext;
- (IBAction)saveAction:(id)sender; - (IBAction)saveAction:(id)sender;
- (NSData *)keyPhraseWithLength:(NSUInteger)keyLength;
@end @end

View File

@ -6,7 +6,7 @@
// Copyright (c) 2012 Lyndir. All rights reserved. // Copyright (c) 2012 Lyndir. All rights reserved.
// //
#import "MPAppDelegate.h" #import "MPAppDelegate_Key.h"
@interface MPAppDelegate () @interface MPAppDelegate ()
@ -20,12 +20,10 @@
@synthesize managedObjectModel = __managedObjectModel; @synthesize managedObjectModel = __managedObjectModel;
@synthesize managedObjectContext = __managedObjectContext; @synthesize managedObjectContext = __managedObjectContext;
@synthesize passwordWindow; @synthesize passwordWindow;
@synthesize keyPhrase;
+ (MPAppDelegate *)get { @synthesize key;
@synthesize keyHash;
return (MPAppDelegate *)[NSApplication sharedApplication].delegate; @synthesize keyHashHex;
}
+ (NSManagedObjectContext *)managedObjectContext { + (NSManagedObjectContext *)managedObjectContext {
@ -54,11 +52,6 @@
return [appSupportURL URLByAppendingPathComponent:@"com.lyndir.lhunath.MasterPassword"]; return [appSupportURL URLByAppendingPathComponent:@"com.lyndir.lhunath.MasterPassword"];
} }
- (NSData *)keyPhraseWithLength:(NSUInteger)keyLength {
return [self.keyPhrase subdataWithRange:NSMakeRange(0, MIN(keyLength, self.keyPhrase.length))];
}
#pragma mark - Core Data stack #pragma mark - Core Data stack
- (NSManagedObjectModel *)managedObjectModel { - (NSManagedObjectModel *)managedObjectModel {

View File

@ -7,7 +7,7 @@
// //
#import "MPPasswordWindowController.h" #import "MPPasswordWindowController.h"
#import "MPAppDelegate.h" #import "MPAppDelegate_Key.h"
@interface MPPasswordWindowController () @interface MPPasswordWindowController ()
@ -46,7 +46,7 @@
fetchRequestFromTemplateWithName:@"MPElements" fetchRequestFromTemplateWithName:@"MPElements"
substitutionVariables:[NSDictionary dictionaryWithObjectsAndKeys: substitutionVariables:[NSDictionary dictionaryWithObjectsAndKeys:
query, @"query", query, @"query",
[MPAppDelegate get].keyPhraseHashHex, @"mpHashHex", [MPAppDelegate get].keyHashHex, @"mpHashHex",
nil]]; nil]];
return [NSArray arrayWithObjects:@"cow", @"milk", @"hippopotamus", nil]; return [NSArray arrayWithObjects:@"cow", @"milk", @"hippopotamus", nil];

View File

@ -40,7 +40,7 @@
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
#ifndef PRODUCTION #ifdef TESTFLIGHT
@try { @try {
[TestFlight takeOff:@"bd44885deee7adce0645ce8e5498d80a_NDQ5NDQyMDExLTEyLTAyIDExOjM1OjQ4LjQ2NjM4NA"]; [TestFlight takeOff:@"bd44885deee7adce0645ce8e5498d80a_NDQ5NDQyMDExLTEyLTAyIDExOjM1OjQ4LjQ2NjM4NA"];
[TestFlight setOptions:[NSDictionary dictionaryWithObjectsAndKeys: [TestFlight setOptions:[NSDictionary dictionaryWithObjectsAndKeys:
@ -124,7 +124,7 @@
[self loadKey:YES]; [self loadKey:YES];
}]; }];
#ifndef PRODUCTION #ifdef TESTFLIGHT
[PearlAlert showAlertWithTitle:@"Welcome, tester!" message: [PearlAlert showAlertWithTitle:@"Welcome, tester!" message:
@"Thank you for taking the time to test Master Password.\n\n" @"Thank you for taking the time to test Master Password.\n\n"
@"Please provide any feedback, however minor it may seem, via the Feedback action item accessible from the top right.\n\n" @"Please provide any feedback, however minor it may seem, via the Feedback action item accessible from the top right.\n\n"
@ -149,7 +149,7 @@
else else
[self loadKey:NO]; [self loadKey:NO];
#ifndef PRODUCTION #ifdef TESTFLIGHT
[TestFlight passCheckpoint:MPTestFlightCheckpointActivated]; [TestFlight passCheckpoint:MPTestFlightCheckpointActivated];
#endif #endif
} }
@ -158,7 +158,7 @@
[self.navigationController performSegueWithIdentifier:@"MP_Guide" sender:self]; [self.navigationController performSegueWithIdentifier:@"MP_Guide" sender:self];
#ifndef PRODUCTION #ifdef TESTFLIGHT
[TestFlight passCheckpoint:MPTestFlightCheckpointShowGuide]; [TestFlight passCheckpoint:MPTestFlightCheckpointShowGuide];
#endif #endif
} }
@ -193,7 +193,7 @@
if (![[MPiOSConfig get].rememberKey boolValue]) if (![[MPiOSConfig get].rememberKey boolValue])
[self updateKey:nil]; [self updateKey:nil];
#ifndef PRODUCTION #ifdef TESTFLIGHT
[TestFlight passCheckpoint:MPTestFlightCheckpointDeactivated]; [TestFlight passCheckpoint:MPTestFlightCheckpointDeactivated];
#endif #endif
} }
@ -202,7 +202,7 @@
[self saveContext]; [self saveContext];
#ifndef PRODUCTION #ifdef TESTFLIGHT
[TestFlight passCheckpoint:MPTestFlightCheckpointTerminated]; [TestFlight passCheckpoint:MPTestFlightCheckpointTerminated];
#endif #endif
} }
@ -298,7 +298,7 @@
[[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil]; [[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil];
#endif #endif
#ifndef PRODUCTION #ifdef TESTFLIGHT
[TestFlight passCheckpoint:MPTestFlightCheckpointStoreIncompatible]; [TestFlight passCheckpoint:MPTestFlightCheckpointStoreIncompatible];
#endif #endif

View File

@ -216,7 +216,7 @@
- (void)setHelpChapter:(NSString *)chapter { - (void)setHelpChapter:(NSString *)chapter {
#ifndef PRODUCTION #ifdef TESTFLIGHT
[TestFlight passCheckpoint:[NSString stringWithFormat:MPTestFlightCheckpointHelpChapter, chapter]]; [TestFlight passCheckpoint:[NSString stringWithFormat:MPTestFlightCheckpointHelpChapter, chapter]];
#endif #endif
@ -280,7 +280,7 @@
[self showContentTip:@"Copied!" withIcon:nil]; [self showContentTip:@"Copied!" withIcon:nil];
#ifndef PRODUCTION #ifdef TESTFLIGHT
[TestFlight passCheckpoint:MPTestFlightCheckpointCopyToPasteboard]; [TestFlight passCheckpoint:MPTestFlightCheckpointCopyToPasteboard];
#endif #endif
} }
@ -295,7 +295,7 @@
++((MPElementGeneratedEntity *) self.activeElement).counter; ++((MPElementGeneratedEntity *) self.activeElement).counter;
}]; }];
#ifndef PRODUCTION #ifdef TESTFLIGHT
[TestFlight passCheckpoint:MPTestFlightCheckpointIncrementPasswordCounter]; [TestFlight passCheckpoint:MPTestFlightCheckpointIncrementPasswordCounter];
#endif #endif
} }
@ -323,7 +323,7 @@
[self.contentField becomeFirstResponder]; [self.contentField becomeFirstResponder];
} }
#ifndef PRODUCTION #ifdef TESTFLIGHT
[TestFlight passCheckpoint:MPTestFlightCheckpointEditPassword]; [TestFlight passCheckpoint:MPTestFlightCheckpointEditPassword];
#endif #endif
} }
@ -336,7 +336,7 @@
self.alertBody.text = nil; self.alertBody.text = nil;
}]; }];
#ifndef PRODUCTION #ifdef TESTFLIGHT
[TestFlight passCheckpoint:MPTestFlightCheckpointCloseAlert]; [TestFlight passCheckpoint:MPTestFlightCheckpointCloseAlert];
#endif #endif
} }
@ -365,7 +365,7 @@
[self.navigationController pushViewController:settingsVC animated:YES]; [self.navigationController pushViewController:settingsVC animated:YES];
break; break;
} }
#ifndef PRODUCTION #ifdef TESTFLIGHT
case 4: case 4:
[TestFlight openFeedbackView]; [TestFlight openFeedbackView];
break; break;
@ -380,13 +380,13 @@
} }
} }
#ifndef PRODUCTION #ifdef TESTFLIGHT
[TestFlight passCheckpoint:MPTestFlightCheckpointAction]; [TestFlight passCheckpoint:MPTestFlightCheckpointAction];
#endif #endif
} cancelTitle:[PearlStrings get].commonButtonCancel destructiveTitle:nil } cancelTitle:[PearlStrings get].commonButtonCancel destructiveTitle:nil
otherTitles: otherTitles:
[self isHelpVisible]? @"Hide Help": @"Show Help", @"FAQ", @"Tutorial", @"Settings", [self isHelpVisible]? @"Hide Help": @"Show Help", @"FAQ", @"Tutorial", @"Settings",
#ifndef PRODUCTION #ifdef TESTFLIGHT
@"Feedback", @"Feedback",
#endif #endif
@"Sign Out", @"Sign Out",
@ -418,7 +418,7 @@
self.activeElement.type = type; self.activeElement.type = type;
#ifndef PRODUCTION #ifdef TESTFLIGHT
[TestFlight passCheckpoint:[NSString stringWithFormat:MPTestFlightCheckpointSelectType, NSStringFromMPElementType(type)]]; [TestFlight passCheckpoint:[NSString stringWithFormat:MPTestFlightCheckpointSelectType, NSStringFromMPElementType(type)]];
#endif #endif
@ -436,7 +436,7 @@
[self.searchDisplayController setActive:NO animated:YES]; [self.searchDisplayController setActive:NO animated:YES];
self.searchDisplayController.searchBar.text = self.activeElement.name; self.searchDisplayController.searchBar.text = self.activeElement.name;
#ifndef PRODUCTION #ifdef TESTFLIGHT
[TestFlight passCheckpoint:MPTestFlightCheckpointSelectElement]; [TestFlight passCheckpoint:MPTestFlightCheckpointSelectElement];
#endif #endif
} }
@ -474,7 +474,7 @@
navigationType:(UIWebViewNavigationType)navigationType { navigationType:(UIWebViewNavigationType)navigationType {
if (navigationType == UIWebViewNavigationTypeLinkClicked) { if (navigationType == UIWebViewNavigationTypeLinkClicked) {
#ifndef PRODUCTION #ifdef TESTFLIGHT
[TestFlight passCheckpoint:MPTestFlightCheckpointExternalLink]; [TestFlight passCheckpoint:MPTestFlightCheckpointExternalLink];
#endif #endif

View File

@ -54,7 +54,7 @@
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar { - (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
#ifndef PRODUCTION #ifdef TESTFLIGHT
[TestFlight passCheckpoint:MPTestFlightCheckpointCancelSearch]; [TestFlight passCheckpoint:MPTestFlightCheckpointCancelSearch];
#endif #endif
@ -302,7 +302,7 @@
MPElementEntity *element = [self.fetchedResultsController objectAtIndexPath:indexPath]; MPElementEntity *element = [self.fetchedResultsController objectAtIndexPath:indexPath];
[self.fetchedResultsController.managedObjectContext deleteObject:element]; [self.fetchedResultsController.managedObjectContext deleteObject:element];
#ifndef PRODUCTION #ifdef TESTFLIGHT
[TestFlight passCheckpoint:MPTestFlightCheckpointDeleteElement]; [TestFlight passCheckpoint:MPTestFlightCheckpointDeleteElement];
#endif #endif
}]; }];

View File

@ -214,7 +214,7 @@ typedef enum {
[[MPAppDelegate get] loadKey:YES]; [[MPAppDelegate get] loadKey:YES];
#ifndef PRODUCTION #ifdef TESTFLIGHT
[TestFlight passCheckpoint:MPTestFlightCheckpointMPChanged]; [TestFlight passCheckpoint:MPTestFlightCheckpointMPChanged];
#endif #endif
} }