Log Inspector and trace mode.
[ADDED] Log Inspector, shake on preference screen to open log. [ADDED] Trace Mode: Log at trace level. [FIXED] Log messages weren't being recorded for inclusion in feedback.
This commit is contained in:
parent
8a4eecd9fa
commit
fe9a1cdbc4
2
External/Pearl
vendored
2
External/Pearl
vendored
@ -1 +1 @@
|
|||||||
Subproject commit e9b731dca83d62a1b5bf49d24d1a981349b5cdc8
|
Subproject commit 1a1ab801f1dbfe7266f1db6ad4359e85ed3c0eb4
|
@ -68,6 +68,7 @@ typedef enum {
|
|||||||
#define MPCheckpointApps @"MPCheckpointApps"
|
#define MPCheckpointApps @"MPCheckpointApps"
|
||||||
#define MPCheckpointApp @"MPCheckpointApp"
|
#define MPCheckpointApp @"MPCheckpointApp"
|
||||||
#define MPCheckpointEmergencyGenerator @"MPCheckpointEmergencyGenerator"
|
#define MPCheckpointEmergencyGenerator @"MPCheckpointEmergencyGenerator"
|
||||||
|
#define MPCheckpointLogs @"MPCheckpointLogs"
|
||||||
|
|
||||||
#define MPSignedInNotification @"MPSignedInNotification"
|
#define MPSignedInNotification @"MPSignedInNotification"
|
||||||
#define MPSignedOutNotification @"MPSignedOutNotification"
|
#define MPSignedOutNotification @"MPSignedOutNotification"
|
||||||
|
29
MasterPassword/ObjC/iOS/MPLogsViewController.h
Normal file
29
MasterPassword/ObjC/iOS/MPLogsViewController.h
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
/**
|
||||||
|
* Copyright Maarten Billemont (http://www.lhunath.com, lhunath@lyndir.com)
|
||||||
|
*
|
||||||
|
* See the enclosed file LICENSE for license information (LGPLv3). If you did
|
||||||
|
* not receive this file, see http://www.gnu.org/licenses/lgpl-3.0.txt
|
||||||
|
*
|
||||||
|
* @author Maarten Billemont <lhunath@lyndir.com>
|
||||||
|
* @license http://www.gnu.org/licenses/lgpl-3.0.txt
|
||||||
|
*/
|
||||||
|
|
||||||
|
//
|
||||||
|
// MPLogsViewController.h
|
||||||
|
// MPLogsViewController
|
||||||
|
//
|
||||||
|
// Created by lhunath on 2013-04-29.
|
||||||
|
// Copyright, lhunath (Maarten Billemont) 2013. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
@interface MPLogsViewController : UIViewController
|
||||||
|
@property (weak, nonatomic) IBOutlet UITextView *logView;
|
||||||
|
@property (weak, nonatomic) IBOutlet UISegmentedControl *levelControl;
|
||||||
|
- (IBAction)toggleLevelControl:(UISegmentedControl *)sender;
|
||||||
|
- (IBAction)close:(UIBarButtonItem *)sender;
|
||||||
|
- (IBAction)refresh:(UIBarButtonItem *)sender;
|
||||||
|
- (IBAction)mail:(UIBarButtonItem *)sender;
|
||||||
|
@end
|
77
MasterPassword/ObjC/iOS/MPLogsViewController.m
Normal file
77
MasterPassword/ObjC/iOS/MPLogsViewController.m
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
/**
|
||||||
|
* Copyright Maarten Billemont (http://www.lhunath.com, lhunath@lyndir.com)
|
||||||
|
*
|
||||||
|
* See the enclosed file LICENSE for license information (LGPLv3). If you did
|
||||||
|
* not receive this file, see http://www.gnu.org/licenses/lgpl-3.0.txt
|
||||||
|
*
|
||||||
|
* @author Maarten Billemont <lhunath@lyndir.com>
|
||||||
|
* @license http://www.gnu.org/licenses/lgpl-3.0.txt
|
||||||
|
*/
|
||||||
|
|
||||||
|
//
|
||||||
|
// MPLogsViewController.h
|
||||||
|
// MPLogsViewController
|
||||||
|
//
|
||||||
|
// Created by lhunath on 2013-04-29.
|
||||||
|
// Copyright, lhunath (Maarten Billemont) 2013. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "MPLogsViewController.h"
|
||||||
|
#import "MPiOSAppDelegate.h"
|
||||||
|
|
||||||
|
@implementation MPLogsViewController
|
||||||
|
|
||||||
|
- (void)viewDidLoad {
|
||||||
|
|
||||||
|
[super viewDidLoad];
|
||||||
|
|
||||||
|
[[NSNotificationCenter defaultCenter] addObserverForName:NSUserDefaultsDidChangeNotification object:nil queue:nil usingBlock:
|
||||||
|
^(NSNotification *note) {
|
||||||
|
self.levelControl.selectedSegmentIndex = [[MPiOSConfig get].traceMode boolValue]? 1: 0;
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)viewWillAppear:(BOOL)animated {
|
||||||
|
|
||||||
|
[super viewWillAppear:animated];
|
||||||
|
|
||||||
|
[self refresh:nil];
|
||||||
|
|
||||||
|
self.levelControl.selectedSegmentIndex = [[MPiOSConfig get].traceMode boolValue]? 1: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)toggleLevelControl:(UISegmentedControl *)sender {
|
||||||
|
|
||||||
|
BOOL traceEnabled = (BOOL)self.levelControl.selectedSegmentIndex;
|
||||||
|
if (traceEnabled) {
|
||||||
|
[PearlAlert showAlertWithTitle:@"Enable Trace Mode?" message:
|
||||||
|
@"Trace mode will log the internal operation of the application.\n"
|
||||||
|
@"Unless you're looking for the cause of a problem, you should leave this off to save memory."
|
||||||
|
viewStyle:UIAlertViewStyleDefault initAlert:nil
|
||||||
|
tappedButtonBlock:^(UIAlertView *alert, NSInteger buttonIndex) {
|
||||||
|
if (buttonIndex == [alert cancelButtonIndex])
|
||||||
|
return;
|
||||||
|
|
||||||
|
[MPiOSConfig get].traceMode = @YES;
|
||||||
|
} cancelTitle:[PearlStrings get].commonButtonCancel otherTitles:@"Enable Trace", nil];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
[MPiOSConfig get].traceMode = @NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)close:(UIBarButtonItem *)sender {
|
||||||
|
|
||||||
|
[self.navigationController popViewControllerAnimated:YES];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)refresh:(UIBarButtonItem *)sender {
|
||||||
|
|
||||||
|
self.logView.text = [[PearlLogger get] formatMessagesWithLevel:PearlLogLevelTrace];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)mail:(UIBarButtonItem *)sender {
|
||||||
|
|
||||||
|
[[MPiOSAppDelegate get] openFeedbackWithLogs:YES forVC:self];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
@ -89,6 +89,21 @@
|
|||||||
[super viewWillDisappear:animated];
|
[super viewWillDisappear:animated];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (BOOL)canBecomeFirstResponder {
|
||||||
|
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
|
||||||
|
|
||||||
|
if (motion == UIEventSubtypeMotionShake) {
|
||||||
|
MPCheckpoint( MPCheckpointLogs, @{
|
||||||
|
@"trace": [MPiOSConfig get].traceMode
|
||||||
|
} );
|
||||||
|
[self performSegueWithIdentifier:@"MP_Logs" sender:self];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
- (BOOL)shouldAutorotate {
|
- (BOOL)shouldAutorotate {
|
||||||
|
|
||||||
return NO;
|
return NO;
|
||||||
|
@ -116,7 +116,8 @@
|
|||||||
|
|
||||||
- (void)viewDidLoad {
|
- (void)viewDidLoad {
|
||||||
|
|
||||||
[self.newsView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.masterpasswordapp.com/news.html"]]];
|
[self.newsView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:
|
||||||
|
PearlString(@"http://www.masterpasswordapp.com/news.html?version=%@", [[PearlInfoPlist get] CFBundleVersion])]]];
|
||||||
|
|
||||||
self.avatarToUserOID = [NSMutableDictionary dictionaryWithCapacity:3];
|
self.avatarToUserOID = [NSMutableDictionary dictionaryWithCapacity:3];
|
||||||
|
|
||||||
|
@ -17,8 +17,9 @@
|
|||||||
- (void)showGuide;
|
- (void)showGuide;
|
||||||
- (void)showSetup;
|
- (void)showSetup;
|
||||||
- (void)showFeedbackWithLogs:(BOOL)logs forVC:(UIViewController *)viewController;
|
- (void)showFeedbackWithLogs:(BOOL)logs forVC:(UIViewController *)viewController;
|
||||||
|
- (void)openFeedbackWithLogs:(BOOL)logs forVC:(UIViewController *)viewController;
|
||||||
|
|
||||||
- (void)export;
|
- (void)export;
|
||||||
- (void)changeMasterPasswordFor:(MPUserEntity *)user inContext:(NSManagedObjectContext *)moc didResetBlock:(void (^)(void))didReset;
|
- (void)changeMasterPasswordFor:(MPUserEntity *)user inContext:(NSManagedObjectContext *)moc didResetBlock:(void (^)(void))didReset;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
+ (void)initialize {
|
+ (void)initialize {
|
||||||
|
|
||||||
[MPiOSConfig get];
|
[MPiOSConfig get];
|
||||||
|
[PearlLogger get].historyLevel = [[MPiOSConfig get].traceMode boolValue]? PearlLogLevelTrace: PearlLogLevelInfo;
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
[PearlLogger get].printLevel = PearlLogLevelDebug;
|
[PearlLogger get].printLevel = PearlLogLevelDebug;
|
||||||
//[NSClassFromString(@"WebView") performSelector:NSSelectorFromString(@"_enableRemoteInspector")];
|
//[NSClassFromString(@"WebView") performSelector:NSSelectorFromString(@"_enableRemoteInspector")];
|
||||||
@ -434,11 +434,6 @@
|
|||||||
MPCheckpoint( MPCheckpointShowSetup, nil );
|
MPCheckpoint( MPCheckpointShowSetup, nil );
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)showFeedback {
|
|
||||||
|
|
||||||
[self showFeedbackWithLogs:NO forVC:nil];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)showReview {
|
- (void)showReview {
|
||||||
|
|
||||||
MPCheckpoint( MPCheckpointReview, nil );
|
MPCheckpoint( MPCheckpointReview, nil );
|
||||||
@ -476,6 +471,8 @@
|
|||||||
|
|
||||||
NSString *userName = [[MPiOSAppDelegate get] activeUserForThread].name;
|
NSString *userName = [[MPiOSAppDelegate get] activeUserForThread].name;
|
||||||
PearlLogLevel logLevel = [[MPiOSConfig get].sendInfo boolValue]? PearlLogLevelDebug: PearlLogLevelInfo;
|
PearlLogLevel logLevel = [[MPiOSConfig get].sendInfo boolValue]? PearlLogLevelDebug: PearlLogLevelInfo;
|
||||||
|
if ([[MPiOSConfig get].traceMode boolValue])
|
||||||
|
logLevel = PearlLogLevelTrace;
|
||||||
|
|
||||||
[[[PearlEMail alloc] initForEMailTo:@"Master Password Development <masterpassword@lyndir.com>"
|
[[[PearlEMail alloc] initForEMailTo:@"Master Password Development <masterpassword@lyndir.com>"
|
||||||
subject:PearlString( @"Feedback for Master Password [%@]",
|
subject:PearlString( @"Feedback for Master Password [%@]",
|
||||||
@ -603,6 +600,11 @@
|
|||||||
|
|
||||||
- (void)didUpdateConfigForKey:(SEL)configKey fromValue:(id)value {
|
- (void)didUpdateConfigForKey:(SEL)configKey fromValue:(id)value {
|
||||||
|
|
||||||
|
if (configKey == @selector(traceMode)) {
|
||||||
|
[PearlLogger get].historyLevel = [[MPiOSConfig get].traceMode boolValue]? PearlLogLevelTrace: PearlLogLevelInfo;
|
||||||
|
inf(@"Trace is now: %@", [[MPiOSConfig get].traceMode boolValue]? @"ON": @"OFF");
|
||||||
|
}
|
||||||
|
|
||||||
[[NSNotificationCenter defaultCenter]
|
[[NSNotificationCenter defaultCenter]
|
||||||
postNotificationName:MPCheckConfigNotification object:NSStringFromSelector( configKey ) userInfo:nil];
|
postNotificationName:MPCheckConfigNotification object:NSStringFromSelector( configKey ) userInfo:nil];
|
||||||
}
|
}
|
||||||
|
@ -16,5 +16,6 @@
|
|||||||
@property(nonatomic, retain) NSNumber *actionsTipShown;
|
@property(nonatomic, retain) NSNumber *actionsTipShown;
|
||||||
@property(nonatomic, retain) NSNumber *typeTipShown;
|
@property(nonatomic, retain) NSNumber *typeTipShown;
|
||||||
@property(nonatomic, retain) NSNumber *loginNameTipShown;
|
@property(nonatomic, retain) NSNumber *loginNameTipShown;
|
||||||
|
@property(nonatomic, retain) NSNumber *traceMode;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
@implementation MPiOSConfig
|
@implementation MPiOSConfig
|
||||||
|
|
||||||
@dynamic sendInfo, helpHidden, siteInfoHidden, showSetup, actionsTipShown, typeTipShown, loginNameTipShown;
|
@dynamic helpHidden, siteInfoHidden, showSetup, actionsTipShown, typeTipShown, loginNameTipShown, traceMode;
|
||||||
|
|
||||||
- (id)init {
|
- (id)init {
|
||||||
|
|
||||||
@ -20,9 +20,10 @@
|
|||||||
NSStringFromSelector( @selector(siteInfoHidden) ) : @YES,
|
NSStringFromSelector( @selector(siteInfoHidden) ) : @YES,
|
||||||
NSStringFromSelector( @selector(showSetup) ) : @YES,
|
NSStringFromSelector( @selector(showSetup) ) : @YES,
|
||||||
NSStringFromSelector( @selector(iTunesID) ) : @"510296984",
|
NSStringFromSelector( @selector(iTunesID) ) : @"510296984",
|
||||||
NSStringFromSelector( @selector(actionsTipShown) ) : PearlBoolNot(self.firstRun),
|
NSStringFromSelector( @selector(actionsTipShown) ) : @(!self.firstRun),
|
||||||
NSStringFromSelector( @selector(typeTipShown) ) : PearlBoolNot(self.firstRun),
|
NSStringFromSelector( @selector(typeTipShown) ) : @(!self.firstRun),
|
||||||
NSStringFromSelector( @selector(loginNameTipShown) ) : PearlBool(NO)
|
NSStringFromSelector( @selector(loginNameTipShown) ) : @NO,
|
||||||
|
NSStringFromSelector( @selector(traceMode) ) : @NO
|
||||||
}];
|
}];
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
|
@ -476,6 +476,99 @@ Your passwords will be AES-encrypted with your master password.</string>
|
|||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="1537" y="145"/>
|
<point key="canvasLocation" x="1537" y="145"/>
|
||||||
</scene>
|
</scene>
|
||||||
|
<!--Logs View Controller - Log Inspector-->
|
||||||
|
<scene sceneID="AKo-Ze-vcJ">
|
||||||
|
<objects>
|
||||||
|
<viewController id="Tx0-mM-kHk" customClass="MPLogsViewController" sceneMemberID="viewController">
|
||||||
|
<view key="view" contentMode="scaleToFill" id="3oc-v8-YGP">
|
||||||
|
<rect key="frame" x="0.0" y="64" width="320" height="416"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<subviews>
|
||||||
|
<imageView userInteractionEnabled="NO" contentMode="center" image="background.png" id="mtJ-9r-6yT">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="320" height="416"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
</imageView>
|
||||||
|
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" editable="NO" id="ojc-Tn-DM1">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="320" height="372"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||||
|
<mutableString key="text">119-20:51:52 MPiOSAppDelegate.m:36 | INFO : Initializing TestFlight
|
||||||
|
119-20:51:52 MPiOSAppDelegate.m:70 | INFO : Initializing Google+
|
||||||
|
119-20:51:52 MPiOSAppDelegate.m:80 | INFO : Initializing Crashlytics
|
||||||
|
119-20:51:52 MPiOSAppDelegate.m:109 | INFO : Initializing Localytics
|
||||||
|
119-20:51:53 PearlAppDelegate.m:71 | INFO : Master Password (MasterPassword) 1.4 (1.4.0) (GIT: 1.4-0-g8a4eecd-dirty)
|
||||||
|
119-20:51:53 MPiOSAppDelegate.m:257 | INFO : Started up with device identifier: A8C51CDA-6F60-4F0C-BFC9-68A08F2F2DD7
|
||||||
|
119-20:51:59 MPAppDelegate_Store.m:278 | DEBUG : [StoreManager] (Re)loading store...
|
||||||
|
119-20:51:59 MPAppDelegate_Store.m:278 | DEBUG : [StoreManager] Will load cloud store: 0B3CA2DF-5796-44DF-B5E0-121EC3846464 (definite).
|
||||||
|
119-20:51:59 PearlConfig.m:193 | INFO : Lock screen will appear
|
||||||
|
119-20:51:59 MPiOSAppDelegate.m:412 | INFO : Re-activated
|
||||||
|
119-20:51:59 PearlConfig.m:180 | DEBUG : MPiOSConfig.launchCount = [70 ->] 71
|
||||||
|
119-20:52:02 MPAppDelegate_Store.m:278 | DEBUG : [StoreManager] Clearing stores...
|
||||||
|
119-20:52:03 MPAppDelegate_Store.m:278 | DEBUG : [StoreManager] Loading store without seeding.
|
||||||
|
119-20:52:09 MPAppDelegate_Store.m:278 | DEBUG : [StoreManager] Cloud enabled and successfully loaded cloud store.
|
||||||
|
119-20:52:09 MPAppDelegate_Store.m:299 | INFO : Using iCloud? 1
|
||||||
|
119-20:52:12 MPAppDelegate_Key.m:28 | INFO : Found key in keychain for: b55911588b178466be1d6392597e899b8de46f9a
|
||||||
|
119-20:52:12 MPAppDelegate_Key.m:132 | INFO : Logged in: b55911588b178466be1d6392597e899b8de46f9a
|
||||||
|
119-20:52:13 MPUnlockViewController.m:229 | INFO : Lock screen will disappear
|
||||||
|
119-20:52:13 MPMainViewController.m:142 | INFO : Main will appear
|
||||||
|
119-20:52:16 MPMainViewController.m:734 | INFO : Action: Preferences
|
||||||
|
119-20:52:17 MPMainViewController.m:187 | INFO : Main will disappear.
|
||||||
|
</mutableString>
|
||||||
|
<color key="textColor" cocoaTouchSystemColor="lightTextColor"/>
|
||||||
|
<fontDescription key="fontDescription" name="AmericanTypewriter" family="American Typewriter" pointSize="9"/>
|
||||||
|
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
|
||||||
|
</textView>
|
||||||
|
<toolbar opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="QPO-l8-Opz">
|
||||||
|
<rect key="frame" x="0.0" y="372" width="320" height="44"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
|
<items>
|
||||||
|
<barButtonItem systemItem="compose" id="Yvq-If-VqG">
|
||||||
|
<connections>
|
||||||
|
<action selector="mail:" destination="Tx0-mM-kHk" id="Efg-Nz-tf2"/>
|
||||||
|
</connections>
|
||||||
|
</barButtonItem>
|
||||||
|
<barButtonItem systemItem="refresh" id="fzf-tt-Vc3">
|
||||||
|
<connections>
|
||||||
|
<action selector="refresh:" destination="Tx0-mM-kHk" id="Xur-Ed-PN7"/>
|
||||||
|
</connections>
|
||||||
|
</barButtonItem>
|
||||||
|
<barButtonItem systemItem="flexibleSpace" id="GcH-O1-v3J"/>
|
||||||
|
<barButtonItem style="plain" id="yi1-I8-uzn">
|
||||||
|
<segmentedControl key="customView" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="bar" selectedSegmentIndex="0" id="lzO-Kl-IPf">
|
||||||
|
<rect key="frame" x="191" y="8" width="123" height="30"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<segments>
|
||||||
|
<segment title="Normal"/>
|
||||||
|
<segment title="Debug"/>
|
||||||
|
</segments>
|
||||||
|
<color key="tintColor" red="0.37254901959999998" green="0.3921568627" blue="0.42745098040000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleLevelControl:" destination="Tx0-mM-kHk" eventType="valueChanged" id="Snn-NE-BnD"/>
|
||||||
|
</connections>
|
||||||
|
</segmentedControl>
|
||||||
|
<color key="tintColor" red="0.37254901959999998" green="0.3921568627" blue="0.42745098040000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
</barButtonItem>
|
||||||
|
</items>
|
||||||
|
</toolbar>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||||
|
</view>
|
||||||
|
<navigationItem key="navigationItem" title="Log Inspector" id="RrC-3Q-nBN">
|
||||||
|
<barButtonItem key="rightBarButtonItem" systemItem="done" id="RYe-xc-zYv">
|
||||||
|
<connections>
|
||||||
|
<action selector="close:" destination="Tx0-mM-kHk" id="KrS-tQ-IOf"/>
|
||||||
|
</connections>
|
||||||
|
</barButtonItem>
|
||||||
|
</navigationItem>
|
||||||
|
<connections>
|
||||||
|
<outlet property="levelControl" destination="lzO-Kl-IPf" id="B7k-yM-dR0"/>
|
||||||
|
<outlet property="logView" destination="ojc-Tn-DM1" id="mOS-LG-HHA"/>
|
||||||
|
</connections>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="2Jl-Qq-bOz" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="2078" y="145"/>
|
||||||
|
</scene>
|
||||||
<!--Main View Controller - Master Password-->
|
<!--Main View Controller - Master Password-->
|
||||||
<scene sceneID="U26-Zf-euQ">
|
<scene sceneID="U26-Zf-euQ">
|
||||||
<objects>
|
<objects>
|
||||||
@ -2172,6 +2265,7 @@ If you set a custom password, it will be encrypted before it is saved to the clo
|
|||||||
<outlet property="defaultTypeLabel" destination="vKJ-1b-NeO" id="4vz-2l-xXk"/>
|
<outlet property="defaultTypeLabel" destination="vKJ-1b-NeO" id="4vz-2l-xXk"/>
|
||||||
<outlet property="exportCell" destination="X2m-92-Qzh" id="zjs-9C-uKX"/>
|
<outlet property="exportCell" destination="X2m-92-Qzh" id="zjs-9C-uKX"/>
|
||||||
<outlet property="savePasswordSwitch" destination="ilG-0h-SOb" id="iZD-gQ-pve"/>
|
<outlet property="savePasswordSwitch" destination="ilG-0h-SOb" id="iZD-gQ-pve"/>
|
||||||
|
<segue destination="Tx0-mM-kHk" kind="push" identifier="MP_Logs" id="rWT-Kr-cAs"/>
|
||||||
</connections>
|
</connections>
|
||||||
</tableViewController>
|
</tableViewController>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="CEl-jQ-l9k" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="CEl-jQ-l9k" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
@ -2869,7 +2963,6 @@ However, it means that anyone who finds your device unlocked can do the same.</s
|
|||||||
<relationships>
|
<relationships>
|
||||||
<relationship kind="action" name="close"/>
|
<relationship kind="action" name="close"/>
|
||||||
<relationship kind="action" name="play"/>
|
<relationship kind="action" name="play"/>
|
||||||
<relationship kind="action" name="toggleVolume"/>
|
|
||||||
<relationship kind="outlet" name="content" candidateClass="UIView"/>
|
<relationship kind="outlet" name="content" candidateClass="UIView"/>
|
||||||
<relationship kind="outlet" name="contentButton" candidateClass="UIButton"/>
|
<relationship kind="outlet" name="contentButton" candidateClass="UIButton"/>
|
||||||
<relationship kind="outlet" name="contentText" candidateClass="UITextField"/>
|
<relationship kind="outlet" name="contentText" candidateClass="UITextField"/>
|
||||||
@ -2885,7 +2978,17 @@ However, it means that anyone who finds your device unlocked can do the same.</s
|
|||||||
<relationship kind="outlet" name="typeTip" candidateClass="UIView"/>
|
<relationship kind="outlet" name="typeTip" candidateClass="UIView"/>
|
||||||
<relationship kind="outlet" name="usernameButton" candidateClass="UIButton"/>
|
<relationship kind="outlet" name="usernameButton" candidateClass="UIButton"/>
|
||||||
<relationship kind="outlet" name="usernameTip" candidateClass="UIView"/>
|
<relationship kind="outlet" name="usernameTip" candidateClass="UIView"/>
|
||||||
<relationship kind="outlet" name="volumeButton" candidateClass="UIButton"/>
|
</relationships>
|
||||||
|
</class>
|
||||||
|
<class className="MPLogsViewController" superclassName="UIViewController">
|
||||||
|
<source key="sourceIdentifier" type="project" relativePath="./Classes/MPLogsViewController.h"/>
|
||||||
|
<relationships>
|
||||||
|
<relationship kind="action" name="close:" candidateClass="UIBarButtonItem"/>
|
||||||
|
<relationship kind="action" name="mail:" candidateClass="UIBarButtonItem"/>
|
||||||
|
<relationship kind="action" name="refresh:" candidateClass="UIBarButtonItem"/>
|
||||||
|
<relationship kind="action" name="toggleLevelControl:" candidateClass="UISegmentedControl"/>
|
||||||
|
<relationship kind="outlet" name="levelControl" candidateClass="UISegmentedControl"/>
|
||||||
|
<relationship kind="outlet" name="logView" candidateClass="UITextView"/>
|
||||||
</relationships>
|
</relationships>
|
||||||
</class>
|
</class>
|
||||||
<class className="MPMainViewController" superclassName="UIViewController">
|
<class className="MPMainViewController" superclassName="UIViewController">
|
||||||
|
@ -16,10 +16,12 @@
|
|||||||
93D396BA1C74C4A06FD86437 /* PearlOverlay.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D3942A356B639724157982 /* PearlOverlay.h */; };
|
93D396BA1C74C4A06FD86437 /* PearlOverlay.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D3942A356B639724157982 /* PearlOverlay.h */; };
|
||||||
93D3992FA1546E01F498F665 /* PearlNavigationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D398567FD02DB2647B8CF3 /* PearlNavigationController.h */; };
|
93D3992FA1546E01F498F665 /* PearlNavigationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D398567FD02DB2647B8CF3 /* PearlNavigationController.h */; };
|
||||||
93D399433EA75E50656040CB /* Twitter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93D394077F8FAB8167647187 /* Twitter.framework */; };
|
93D399433EA75E50656040CB /* Twitter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93D394077F8FAB8167647187 /* Twitter.framework */; };
|
||||||
|
93D399BBC0A7EC746CB1B19B /* MPLogsViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D391943675426839501BB8 /* MPLogsViewController.h */; };
|
||||||
93D39C34FE35830EF5BE1D2A /* NSArray+Indexing.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D396D04E57792A54D437AC /* NSArray+Indexing.h */; };
|
93D39C34FE35830EF5BE1D2A /* NSArray+Indexing.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D396D04E57792A54D437AC /* NSArray+Indexing.h */; };
|
||||||
93D39E281E3658B30550CB55 /* NSDictionary+Indexing.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39AA1EE2E1E7B81372240 /* NSDictionary+Indexing.m */; };
|
93D39E281E3658B30550CB55 /* NSDictionary+Indexing.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39AA1EE2E1E7B81372240 /* NSDictionary+Indexing.m */; };
|
||||||
93D39F8A9254177891F38705 /* MPSetupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39A28369954D147E239BA /* MPSetupViewController.m */; };
|
93D39F8A9254177891F38705 /* MPSetupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39A28369954D147E239BA /* MPSetupViewController.m */; };
|
||||||
DA04E33E14B1E70400ECA4F3 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA04E33D14B1E70400ECA4F3 /* MobileCoreServices.framework */; };
|
DA04E33E14B1E70400ECA4F3 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA04E33D14B1E70400ECA4F3 /* MobileCoreServices.framework */; };
|
||||||
|
DA095E75172F4CD8001C948B /* MPLogsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D3979190DACEBD1F6AE9F4 /* MPLogsViewController.m */; };
|
||||||
DA30E9CE15722ECA00A68B4C /* NSBundle+PearlMutableInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = DA30E9CB15722ECA00A68B4C /* NSBundle+PearlMutableInfo.h */; };
|
DA30E9CE15722ECA00A68B4C /* NSBundle+PearlMutableInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = DA30E9CB15722ECA00A68B4C /* NSBundle+PearlMutableInfo.h */; };
|
||||||
DA30E9CF15722ECA00A68B4C /* NSBundle+PearlMutableInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = DA30E9CC15722ECA00A68B4C /* NSBundle+PearlMutableInfo.m */; };
|
DA30E9CF15722ECA00A68B4C /* NSBundle+PearlMutableInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = DA30E9CC15722ECA00A68B4C /* NSBundle+PearlMutableInfo.m */; };
|
||||||
DA30E9D015722ECA00A68B4C /* Pearl.m in Sources */ = {isa = PBXBuildFile; fileRef = DA30E9CD15722ECA00A68B4C /* Pearl.m */; };
|
DA30E9D015722ECA00A68B4C /* Pearl.m in Sources */ = {isa = PBXBuildFile; fileRef = DA30E9CD15722ECA00A68B4C /* Pearl.m */; };
|
||||||
@ -968,6 +970,7 @@
|
|||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
93D39067C0AFDC581794E2B8 /* NSArray+Indexing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+Indexing.m"; sourceTree = "<group>"; };
|
93D39067C0AFDC581794E2B8 /* NSArray+Indexing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+Indexing.m"; sourceTree = "<group>"; };
|
||||||
93D390FADEB325D8D54A957D /* PearlOverlay.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PearlOverlay.m; sourceTree = "<group>"; };
|
93D390FADEB325D8D54A957D /* PearlOverlay.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PearlOverlay.m; sourceTree = "<group>"; };
|
||||||
|
93D391943675426839501BB8 /* MPLogsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPLogsViewController.h; sourceTree = "<group>"; };
|
||||||
93D393B97158D7BE9332EA53 /* NSDictionary+Indexing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+Indexing.h"; sourceTree = "<group>"; };
|
93D393B97158D7BE9332EA53 /* NSDictionary+Indexing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+Indexing.h"; sourceTree = "<group>"; };
|
||||||
93D393BB973253D4BAAC84AA /* PearlEMail.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PearlEMail.m; sourceTree = "<group>"; };
|
93D393BB973253D4BAAC84AA /* PearlEMail.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PearlEMail.m; sourceTree = "<group>"; };
|
||||||
93D394077F8FAB8167647187 /* Twitter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Twitter.framework; path = System/Library/Frameworks/Twitter.framework; sourceTree = SDKROOT; };
|
93D394077F8FAB8167647187 /* Twitter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Twitter.framework; path = System/Library/Frameworks/Twitter.framework; sourceTree = SDKROOT; };
|
||||||
@ -975,6 +978,7 @@
|
|||||||
93D3956915634581E737B38C /* PearlNavigationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PearlNavigationController.m; sourceTree = "<group>"; };
|
93D3956915634581E737B38C /* PearlNavigationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PearlNavigationController.m; sourceTree = "<group>"; };
|
||||||
93D396D04E57792A54D437AC /* NSArray+Indexing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+Indexing.h"; sourceTree = "<group>"; };
|
93D396D04E57792A54D437AC /* NSArray+Indexing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+Indexing.h"; sourceTree = "<group>"; };
|
||||||
93D39730673227EFF6DEFF19 /* MPSetupViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPSetupViewController.h; sourceTree = "<group>"; };
|
93D39730673227EFF6DEFF19 /* MPSetupViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPSetupViewController.h; sourceTree = "<group>"; };
|
||||||
|
93D3979190DACEBD1F6AE9F4 /* MPLogsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPLogsViewController.m; sourceTree = "<group>"; };
|
||||||
93D398567FD02DB2647B8CF3 /* PearlNavigationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PearlNavigationController.h; sourceTree = "<group>"; };
|
93D398567FD02DB2647B8CF3 /* PearlNavigationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PearlNavigationController.h; sourceTree = "<group>"; };
|
||||||
93D39A28369954D147E239BA /* MPSetupViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPSetupViewController.m; sourceTree = "<group>"; };
|
93D39A28369954D147E239BA /* MPSetupViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPSetupViewController.m; sourceTree = "<group>"; };
|
||||||
93D39AA1EE2E1E7B81372240 /* NSDictionary+Indexing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDictionary+Indexing.m"; sourceTree = "<group>"; };
|
93D39AA1EE2E1E7B81372240 /* NSDictionary+Indexing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDictionary+Indexing.m"; sourceTree = "<group>"; };
|
||||||
@ -3007,6 +3011,8 @@
|
|||||||
DABD3BFC1711E2DC00CF925C /* main.m */,
|
DABD3BFC1711E2DC00CF925C /* main.m */,
|
||||||
93D39A28369954D147E239BA /* MPSetupViewController.m */,
|
93D39A28369954D147E239BA /* MPSetupViewController.m */,
|
||||||
93D39730673227EFF6DEFF19 /* MPSetupViewController.h */,
|
93D39730673227EFF6DEFF19 /* MPSetupViewController.h */,
|
||||||
|
93D3979190DACEBD1F6AE9F4 /* MPLogsViewController.m */,
|
||||||
|
93D391943675426839501BB8 /* MPLogsViewController.h */,
|
||||||
);
|
);
|
||||||
path = iOS;
|
path = iOS;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -3523,6 +3529,7 @@
|
|||||||
files = (
|
files = (
|
||||||
DACA22BC1705DE7D002C6C22 /* NSError+UbiquityStoreManager.h in Headers */,
|
DACA22BC1705DE7D002C6C22 /* NSError+UbiquityStoreManager.h in Headers */,
|
||||||
DACA22BE1705DE7D002C6C22 /* UbiquityStoreManager.h in Headers */,
|
DACA22BE1705DE7D002C6C22 /* UbiquityStoreManager.h in Headers */,
|
||||||
|
93D399BBC0A7EC746CB1B19B /* MPLogsViewController.h in Headers */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@ -4771,6 +4778,7 @@
|
|||||||
DABD3C211711E2DC00CF925C /* MPiOSConfig.m in Sources */,
|
DABD3C211711E2DC00CF925C /* MPiOSConfig.m in Sources */,
|
||||||
DABD3C271711E2DC00CF925C /* main.m in Sources */,
|
DABD3C271711E2DC00CF925C /* main.m in Sources */,
|
||||||
93D39F8A9254177891F38705 /* MPSetupViewController.m in Sources */,
|
93D39F8A9254177891F38705 /* MPSetupViewController.m in Sources */,
|
||||||
|
DA095E75172F4CD8001C948B /* MPLogsViewController.m in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@ -5631,6 +5639,7 @@
|
|||||||
DAFC5661172C573B00CB5CC5 /* AppStore-iOS */,
|
DAFC5661172C573B00CB5CC5 /* AppStore-iOS */,
|
||||||
);
|
);
|
||||||
defaultConfigurationIsVisible = 0;
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = "AdHoc-iOS";
|
||||||
};
|
};
|
||||||
/* End XCConfigurationList section */
|
/* End XCConfigurationList section */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user