2
0

Fixed a bunch of UI quirks, iOS 6 & 7.

[FIXED]     UI Quirks in iOS 6 and iOS 7.
This commit is contained in:
Maarten Billemont 2013-09-18 00:21:52 -04:00
parent 7fd322a5c6
commit 37070e482d
13 changed files with 451 additions and 338 deletions

2
External/Pearl vendored

@ -1 +1 @@
Subproject commit ea7054e328bd7162d1f5a56a0f64a3eed6e3fc66
Subproject commit 2ecab2a0d29b60754ec90eaabcb1cde835dbe294

View File

@ -17,7 +17,7 @@
+ (MPAppDelegate_Shared *)get {
#if TARGET_OS_IPHONE
return (MPAppDelegate_Shared *)[UIApplication sharedApplication].delegate;
return (MPAppDelegate_Shared *)UIApp.delegate;
#elif defined (__MAC_OS_X_VERSION_MIN_REQUIRED)
return (MPAppDelegate_Shared *)[NSApplication sharedApplication].delegate;
#else

View File

@ -103,13 +103,13 @@ PearlAssociatedObjectProperty(NSManagedObjectContext*, MainManagedObjectContext,
delegate:self];
#if TARGET_OS_IPHONE
[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationWillTerminateNotification object:[UIApplication sharedApplication]
[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationWillTerminateNotification object:UIApp
queue:[NSOperationQueue mainQueue] usingBlock:
^(NSNotification *note) {
[[self mainManagedObjectContext] saveToStore];
}];
[[NSNotificationCenter defaultCenter]
addObserverForName:UIApplicationWillResignActiveNotification object:[UIApplication sharedApplication]
addObserverForName:UIApplicationWillResignActiveNotification object:UIApp
queue:[NSOperationQueue mainQueue] usingBlock:
^(NSNotification *note) {
[[self mainManagedObjectContext] saveToStore];

View File

@ -26,7 +26,7 @@
@"app" : @"gorillas"
} );
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://itunes.apple.com/app/lyndir/gorillas/id302275459?mt=8"]];
[UIApp openURL:[NSURL URLWithString:@"http://itunes.apple.com/app/lyndir/gorillas/id302275459?mt=8"]];
}
- (IBAction)deblock:(UIButton *)sender {
@ -35,7 +35,7 @@
@"app" : @"deblock"
} );
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://itunes.apple.com/app/lyndir/deblock/id325058485?mt=8"]];
[UIApp openURL:[NSURL URLWithString:@"http://itunes.apple.com/app/lyndir/deblock/id325058485?mt=8"]];
}
@end

View File

@ -61,7 +61,7 @@
- (void)viewWillAppear:(BOOL)animated {
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
[UIApp setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
MPCheckpoint( MPCheckpointApps, nil );
[self.pageViewController setViewControllers:@[ [self.pageVCs objectAtIndex:1] ] direction:UIPageViewControllerNavigationDirectionForward
@ -84,7 +84,7 @@
- (void)viewWillDisappear:(BOOL)animated {
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];
[UIApp setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];
[super viewWillDisappear:animated];
}

View File

@ -24,6 +24,16 @@
@implementation MPElementListAllViewController
- (BOOL)prefersStatusBarHidden {
return NO;
}
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];

View File

@ -25,6 +25,7 @@
@property(weak, nonatomic) IBOutlet UITextField *contentText;
@property(weak, nonatomic) IBOutlet UIButton *largePlayButton;
@property(weak, nonatomic) IBOutlet UIButton *smallPlayButton;
@property(weak, nonatomic) IBOutlet UIView *alertTip;
- (IBAction)play;
- (IBAction)close;

View File

@ -24,16 +24,21 @@
return NO;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationPortrait;
}
- (BOOL)prefersStatusBarHidden {
return NO;
}
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationPortrait;
}
- (void)viewDidLoad {
[super viewDidLoad];
@ -43,6 +48,7 @@
self.usernameTip.hidden = NO;
self.typeTip.hidden = NO;
self.toolTip.hidden = NO;
self.alertTip.hidden = NO;
self.tickCount = 30;
}
@ -50,27 +56,44 @@
- (void)viewWillAppear:(BOOL)animated {
[self.navigationController setNavigationBarHidden:YES animated:animated];
if (![super respondsToSelector:@selector(prefersStatusBarHidden)])
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];
inf(@"Guide will appear.");
[super viewWillAppear:animated];
if (self.navigationController) {
// Via setup
[self.navigationController setNavigationBarHidden:YES animated:animated];
self.smallPlayButton.hidden = YES;
self.siteNameTip.alpha = 0;
self.content.alpha = 0;
self.content.frame = CGRectSetHeight( self.content.frame, 180 );
self.contentTip.alpha = 0;
self.contentButton.highlighted = NO;
self.usernameTip.alpha = 0;
self.usernameButton.highlighted = NO;
self.typeTip.alpha = 0;
self.typeButton.highlighted = NO;
self.toolTip.alpha = 0;
self.toolButton.highlighted = NO;
self.alertTip.alpha = 0;
}
else {
// Via segue
self.largePlayButton.hidden = YES;
self.siteNameTip.alpha = 1;
self.content.alpha = 1;
self.content.frame = CGRectSetHeight( self.content.frame, 231 );
self.contentTip.alpha = 1;
self.contentTipText.text = @"Tap to copy";
self.contentButton.highlighted = NO;
self.usernameTip.alpha = 1;
self.usernameButton.highlighted = NO;
self.typeTip.alpha = 1;
self.typeButton.highlighted = NO;
self.toolTip.alpha = 0;
self.toolButton.highlighted = NO;
self.alertTip.alpha = 1;
}
}
@ -86,7 +109,6 @@
- (void)viewWillDisappear:(BOOL)animated {
inf(@"Guide will disappear.");
[self.navigationController setNavigationBarHidden:NO animated:animated];
[super viewWillDisappear:animated];
}
@ -132,6 +154,7 @@
self.usernameTip.alpha = 0;
self.typeTip.alpha = 0;
self.toolTip.alpha = 0;
self.alertTip.alpha = 0;
}];
}
else if (self.currentTick < 10) {
@ -139,9 +162,11 @@
self.siteNameTip.alpha = 0;
self.content.alpha = 1;
self.contentTip.alpha = 1;
self.contentTipText.text = @"Your password";
self.usernameTip.alpha = 0;
self.typeTip.alpha = 0;
self.toolTip.alpha = 0;
self.alertTip.alpha = 0;
}];
}
else if (self.currentTick < 15) {
@ -149,12 +174,13 @@
self.siteNameTip.alpha = 0;
self.content.alpha = 1;
self.contentTip.alpha = 1;
self.contentButton.highlighted = YES;
self.contentTipText.text = @"Tap to copy";
self.contentButton.highlighted = YES;
self.usernameTip.alpha = 0;
self.typeTip.alpha = 0;
self.toolButton.highlighted = NO;
self.toolTip.alpha = 0;
self.alertTip.alpha = 0;
}];
}
else if (self.currentTick < 20) {
@ -164,11 +190,11 @@
self.content.frame = CGRectSetHeight( self.content.frame, 231 );
self.contentTip.alpha = 0;
self.contentButton.highlighted = NO;
self.contentTipText.text = @"Use this password";
self.usernameButton.highlighted = YES;
self.usernameTip.alpha = 1;
self.typeTip.alpha = 0;
self.toolTip.alpha = 0;
self.alertTip.alpha = 0;
}];
}
else if (self.currentTick < 25) {
@ -181,6 +207,7 @@
self.typeTip.alpha = 1;
self.typeButton.highlighted = YES;
self.toolTip.alpha = 0;
self.alertTip.alpha = 0;
}];
}
else if (self.currentTick < 30) {
@ -193,6 +220,7 @@
self.typeButton.highlighted = NO;
self.toolButton.highlighted = YES;
self.toolTip.alpha = 1;
self.alertTip.alpha = 0;
self.contentText.text = @"XupuMajf4'Hafh";
}];
}
@ -209,6 +237,7 @@
self.typeTip.alpha = 1;
self.toolButton.highlighted = NO;
self.toolTip.alpha = 0;
self.alertTip.alpha = 1;
}];
}
}

View File

@ -122,9 +122,9 @@
- (void)viewWillAppear:(BOOL)animated {
[self.navigationController setNavigationBarHidden:NO animated:animated];
if (![super respondsToSelector:@selector(prefersStatusBarHidden)])
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];
[UIApp setStatusBarHidden:NO withAnimation:animated? UIStatusBarAnimationSlide: UIStatusBarAnimationNone];
[self.navigationController setNavigationBarHidden:NO animated:animated];
MPElementEntity *activeElement = [self activeElementForMainThread];
if (activeElement.user != [[MPiOSAppDelegate get] activeUserForMainThread])
@ -149,11 +149,6 @@
inf(@"Main will appear");
// Sometimes, the search bar gets stuck in some sort of first-responder mode that it can't get out of...
[[self.view.window findFirstResponderInHierarchy] resignFirstResponder];
// Needed for when we appear after a modal VC dismisses:
// We can't present until the other modal VC has been fully dismissed and presenting in -viewWillAppear: will fail.
[MPiOSAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *moc) {
MPUserEntity *activeUser = [[MPiOSAppDelegate get] activeUserInContext:moc];
if ([MPAlgorithmDefault migrateUser:activeUser inContext:moc] && !self.suppressOutdatedAlert)
@ -908,7 +903,7 @@
return NO;
}
[[UIApplication sharedApplication] openURL:[request URL]];
[UIApp openURL:[request URL]];
return NO;
}

View File

@ -207,9 +207,9 @@
- (void)viewWillAppear:(BOOL)animated {
inf(@"Lock screen will appear");
[self.navigationController setNavigationBarHidden:YES animated:animated];
if (![super respondsToSelector:@selector(prefersStatusBarHidden)])
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
[UIApp setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
[self.navigationController setNavigationBarHidden:YES animated:animated];
[[MPiOSAppDelegate get] signOutAnimated:NO];
@ -1031,7 +1031,7 @@
navigationType:(UIWebViewNavigationType)navigationType {
if (navigationType == UIWebViewNavigationTypeLinkClicked) {
[[UIApplication sharedApplication] openURL:[request URL]];
[UIApp openURL:[request URL]];
return NO;
}
@ -1130,17 +1130,17 @@
if (buttonIndex == [sheet firstOtherButtonIndex]) {
// Google+
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://plus.google.com/116256327773442623984/about"]];
[UIApp openURL:[NSURL URLWithString:@"https://plus.google.com/116256327773442623984/about"]];
return;
}
if (buttonIndex == [sheet firstOtherButtonIndex] + 1) {
// Facebook
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://www.facebook.com/masterpasswordapp"]];
[UIApp openURL:[NSURL URLWithString:@"https://www.facebook.com/masterpasswordapp"]];
return;
}
if (buttonIndex == [sheet firstOtherButtonIndex] + 2) {
// Twitter
UIApplication *application = [UIApplication sharedApplication];
UIApplication *application = UIApp;
for (NSString *candidate in @[
@"twitter://user?screen_name=%@", // Twitter
@"tweetbot:///user_profile/%@", // TweetBot
@ -1172,7 +1172,7 @@
}
if (buttonIndex == [sheet firstOtherButtonIndex] + 4) {
// GitHub
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://github.com/Lyndir/MasterPassword"]];
[UIApp openURL:[NSURL URLWithString:@"https://github.com/Lyndir/MasterPassword"]];
return;
}
} cancelTitle:[PearlStrings get].commonButtonCancel

View File

@ -1855,8 +1855,12 @@ If you set a custom password, it will be encrypted before it is saved to the clo
<tableView key="view" opaque="NO" clipsSubviews="YES" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="none" rowHeight="48" sectionHeaderHeight="22" sectionFooterHeight="22" id="N83-sj-4tl">
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<navigationBar key="tableHeaderView" contentMode="scaleToFill" barStyle="black" translucent="NO" id="l0p-Tu-L9k">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<view key="tableHeaderView" contentMode="scaleToFill" id="8py-Tx-ShT">
<rect key="frame" x="0.0" y="0.0" width="320" height="64"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<navigationBar contentMode="scaleToFill" barStyle="black" translucent="NO" id="l0p-Tu-L9k">
<rect key="frame" x="0.0" y="20" width="320" height="44"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<color key="tintColor" red="0.47450980390000003" green="0.86666666670000003" blue="0.98431372549999996" alpha="1" colorSpace="calibratedRGB"/>
<color key="barTintColor" red="0.12549020350000001" green="0.1411764771" blue="0.14901961389999999" alpha="1" colorSpace="calibratedRGB"/>
@ -1878,6 +1882,9 @@ If you set a custom password, it will be encrypted before it is saved to the clo
</navigationItem>
</items>
</navigationBar>
</subviews>
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
</view>
<connections>
<outlet property="dataSource" destination="idA-Pj-1U9" id="yPh-6k-Ba9"/>
<outlet property="delegate" destination="idA-Pj-1U9" id="bdk-Iu-Hpv"/>
@ -2515,12 +2522,16 @@ You can make passwords for anything, like email addresses, sites or real-world t
<scene sceneID="k6U-hl-fJt">
<objects>
<viewController id="myN-X7-9Tg" customClass="MPGuideViewController" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="vkG-Oi-PHo">
<view key="view" contentMode="scaleToFill" id="qvX-TO-FS2">
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view contentMode="scaleToFill" id="vkG-Oi-PHo">
<rect key="frame" x="0.0" y="20" width="320" height="548"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="center" image="background.png" id="C2i-R4-36i">
<rect key="frame" x="0.0" y="44" width="320" height="524"/>
<rect key="frame" x="0.0" y="44" width="320" height="504"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
</imageView>
<view clipsSubviews="YES" contentMode="scaleToFill" id="vSk-nT-Vwf" userLabel="View - Display">
@ -2649,10 +2660,17 @@ You can make passwords for anything, like email addresses, sites or real-world t
<color key="textColor" red="0.37254901959999998" green="0.3921568627" blue="0.42745098040000001" alpha="1" colorSpace="calibratedRGB"/>
</textAttributes>
<items>
<navigationItem title="Master Password" id="Kbd-LM-sCQ"/>
<navigationItem title="Overview" id="Kbd-LM-sCQ"/>
</items>
</navigationBar>
<searchBar contentMode="redraw" barStyle="black" placeholder="Site name" showsBookmarkButton="YES" translucent="NO" id="IJX-hq-SkG">
<toolbar opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" translucent="NO" id="k9i-YD-Q2Q">
<rect key="frame" x="0.0" y="44" width="320" height="44"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="0.12549020350000001" green="0.1411764771" blue="0.14901961389999999" alpha="1" colorSpace="calibratedRGB"/>
<items/>
<color key="barTintColor" red="0.12549020350000001" green="0.1411764771" blue="0.14901961389999999" alpha="1" colorSpace="calibratedRGB"/>
</toolbar>
<searchBar contentMode="redraw" searchBarStyle="minimal" placeholder="Site name" showsBookmarkButton="YES" id="IJX-hq-SkG">
<rect key="frame" x="0.0" y="44" width="320" height="44"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<gestureRecognizers/>
@ -2660,7 +2678,7 @@ You can make passwords for anything, like email addresses, sites or real-world t
<textInputTraits key="textInputTraits" autocorrectionType="no" keyboardType="URL"/>
</searchBar>
<view contentMode="scaleToFill" id="Ahl-o0-lMv">
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
<rect key="frame" x="0.0" y="0.0" width="320" height="548"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="3wI-lo-tWc">
@ -2680,7 +2698,7 @@ You can make passwords for anything, like email addresses, sites or real-world t
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="UHf-cp-97W">
<rect key="frame" x="33" y="522" width="44" height="44"/>
<rect key="frame" x="33" y="502" width="44" height="44"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
<accessibility key="accessibilityConfiguration" hint="" label="Close"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
@ -2696,7 +2714,7 @@ You can make passwords for anything, like email addresses, sites or real-world t
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="jDS-Vh-ETL">
<rect key="frame" x="124" y="244" width="72" height="80"/>
<rect key="frame" x="124" y="234" width="72" height="80"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" hint="" label="Close"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
@ -2712,12 +2730,13 @@ You can make passwords for anything, like email addresses, sites or real-world t
</connections>
</button>
<progressView opaque="NO" contentMode="scaleToFill" id="nf7-oM-7dh">
<rect key="frame" x="85" y="539" width="150" height="2"/>
<rect key="frame" x="85" y="523" width="150" height="2"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
<inset key="insetFor6xAndEarlier" minX="0.0" minY="-3" maxX="0.0" maxY="3"/>
<color key="progressTintColor" red="0.37254901959999998" green="0.3921568627" blue="0.42745098040000001" alpha="1" colorSpace="calibratedRGB"/>
</progressView>
</subviews>
<color key="backgroundColor" red="0.12156862745098039" green="0.12941176470588237" blue="0.14117647058823529" alpha="0.5" colorSpace="calibratedRGB"/>
<color key="backgroundColor" red="0.37254901959999998" green="0.3921568627" blue="0.42745098040000001" alpha="0.0" colorSpace="calibratedRGB"/>
</view>
<view hidden="YES" userInteractionEnabled="NO" alpha="0.0" contentMode="scaleToFill" id="nDU-uf-V0X" userLabel="View - Tool Tip">
<rect key="frame" x="10" y="59" width="266" height="60"/>
@ -2739,16 +2758,16 @@ You can make passwords for anything, like email addresses, sites or real-world t
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</view>
<view hidden="YES" userInteractionEnabled="NO" alpha="0.0" contentMode="scaleToFill" id="cUZ-lb-h7x" userLabel="View - Site Name Tip">
<rect key="frame" x="10" y="55" width="300" height="60"/>
<rect key="frame" x="10" y="59" width="300" height="56"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="tip_basic_black_top.png" id="NgB-q4-k0y">
<rect key="frame" x="0.0" y="0.0" width="300" height="60"/>
<rect key="frame" x="0.0" y="0.0" width="300" height="56"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<rect key="contentStretch" x="0.15000000000000002" y="0.15000000000000002" width="0.69999999999999973" height="0.69999999999999973"/>
</imageView>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Name for your password" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" id="lgI-5O-kXT">
<rect key="frame" x="-20" y="26" width="340" height="21"/>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Name your site (eg. gmail.com)" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" id="lgI-5O-kXT">
<rect key="frame" x="-20" y="26" width="340" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
@ -2765,7 +2784,7 @@ You can make passwords for anything, like email addresses, sites or real-world t
<rect key="frame" x="0.0" y="0.0" width="210" height="60"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
</imageView>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Use this password" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" id="nGi-CK-Dng">
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Your password" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" id="nGi-CK-Dng">
<rect key="frame" x="19" y="9" width="171" height="21"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
@ -2812,12 +2831,47 @@ You can make passwords for anything, like email addresses, sites or real-world t
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</view>
<view hidden="YES" userInteractionEnabled="NO" alpha="0.0" contentMode="scaleToFill" id="RSW-m2-zQ4" userLabel="View - Alert">
<rect key="frame" x="10" y="337" width="300" height="180"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="tip_alert_black.png" id="EbN-iH-aJ0">
<rect key="frame" x="0.0" y="0.0" width="300" height="180"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<rect key="contentStretch" x="0.25" y="0.6499999999999998" width="0.64999999999999969" height="0.10000000000000002"/>
</imageView>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Important Tips:" lineBreakMode="tailTruncation" minimumFontSize="10" id="pnh-jB-A00">
<rect key="frame" x="70" y="20" width="210" height="21"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="17"/>
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" editable="NO" id="zrE-Ux-kph">
<rect key="frame" x="20" y="60" width="260" height="100"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<string key="text"> • Use the short site name (eg. apple.com), don't include the prefix (eg. www).
• Use generated passwords. If you ever lose your user or phone, recreating the user will resurrect them from thin air.</string>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
</textView>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</view>
</subviews>
<color key="backgroundColor" red="0.14901960780000001" green="0.1647058824" blue="0.18039215689999999" alpha="1" colorSpace="calibratedRGB"/>
<inset key="insetFor6xAndEarlier" minX="0.0" minY="20" maxX="0.0" maxY="0.0"/>
</view>
</subviews>
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
</view>
<extendedEdge key="edgesForExtendedLayout"/>
<navigationItem key="navigationItem" id="p1Y-gL-psy"/>
<nil key="simulatedTopBarMetrics"/>
<connections>
<outlet property="alertTip" destination="RSW-m2-zQ4" id="s2s-5I-O4A"/>
<outlet property="content" destination="vSk-nT-Vwf" id="Kgh-xj-8Z6"/>
<outlet property="contentButton" destination="naw-bU-g1E" id="g2B-hC-aHX"/>
<outlet property="contentText" destination="G2i-wO-6x6" id="u9H-xp-CR2"/>
@ -2945,6 +2999,7 @@ However, it means that anyone who finds your device unlocked can do the same.</s
<image name="ui_textfield.png" width="158" height="34"/>
<image name="unlocked.png" width="84" height="80"/>
</resources>
<color key="tintColor" red="0.47450980390000003" green="0.86666666670000003" blue="0.98431372549999996" alpha="1" colorSpace="calibratedRGB"/>
<simulatedMetricsContainer key="defaultSimulatedMetrics">
<simulatedStatusBarMetrics key="statusBar"/>
<simulatedOrientationMetrics key="orientation"/>

View File

@ -256,6 +256,7 @@
DAD3127215528CD200A3F9ED /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; };
DAD312BF1552A1BD00A3F9ED /* libLocalytics.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAD3127115528CD200A3F9ED /* libLocalytics.a */; };
DAD312C21552A22700A3F9ED /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = DAD312C01552A20800A3F9ED /* libsqlite3.dylib */; };
DAE1EF2217E942DE00BC0086 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = DAE1EF2417E942DE00BC0086 /* Localizable.strings */; };
DAEBC45314F6364500987BF6 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAEBC45214F6364500987BF6 /* QuartzCore.framework */; };
DAFC5656172C573B00CB5CC5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; };
DAFC5683172C57EC00CB5CC5 /* IASKAppSettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC5665172C57EC00CB5CC5 /* IASKAppSettingsViewController.m */; };
@ -1173,6 +1174,7 @@
DACA29BB1705E2DE002C6C22 /* UIColor+HSV.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIColor+HSV.m"; sourceTree = "<group>"; };
DAD3127115528CD200A3F9ED /* libLocalytics.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libLocalytics.a; sourceTree = BUILT_PRODUCTS_DIR; };
DAD312C01552A20800A3F9ED /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = usr/lib/libsqlite3.dylib; sourceTree = SDKROOT; };
DAE1EF2317E942DE00BC0086 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
DAEBC45214F6364500987BF6 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
DAFC5655172C573B00CB5CC5 /* libInAppSettingsKit.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libInAppSettingsKit.a; sourceTree = BUILT_PRODUCTS_DIR; };
DAFC5659172C573B00CB5CC5 /* InAppSettingsKit-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "InAppSettingsKit-Prefix.pch"; sourceTree = "<group>"; };
@ -2356,6 +2358,7 @@
DACA26971705DF81002C6C22 /* Google+ */,
DACA26951705DF81002C6C22 /* Localytics */,
DACA26931705DF81002C6C22 /* TestFlight */,
DAE1EF2417E942DE00BC0086 /* Localizable.strings */,
);
name = Resources;
path = ../../Resources;
@ -3200,6 +3203,7 @@
DABD3FCB1712446200CF925C /* cloud@2x.png in Resources */,
DABD3FCE1714F45C00CF925C /* identity.png in Resources */,
DABD3FCF1714F45C00CF925C /* identity@2x.png in Resources */,
DAE1EF2217E942DE00BC0086 /* Localizable.strings in Resources */,
DA5A09DF171A70E4005284AB /* play.png in Resources */,
DA5A09E0171A70E4005284AB /* play@2x.png in Resources */,
DA5A09EA171BB0F7005284AB /* unlocked.png in Resources */,
@ -3439,6 +3443,14 @@
name = InfoPlist.strings;
sourceTree = "<group>";
};
DAE1EF2417E942DE00BC0086 /* Localizable.strings */ = {
isa = PBXVariantGroup;
children = (
DAE1EF2317E942DE00BC0086 /* en */,
);
name = Localizable.strings;
sourceTree = "<group>";
};
DAFE45FA15039823003ABA7C /* Pearl.strings */ = {
isa = PBXVariantGroup;
children = (

View File

@ -0,0 +1,11 @@
/*
MasterPassword.strings
MasterPassword-iOS
Created by Maarten Billemont on 2013-09-17.
Copyright (c) 2013 Lyndir. All rights reserved.
*/
"review.message" =
"Has %@ been useful to you?\
\
It would mean a lot if you could review this version and tell your friends about its benefits.";