2
0

Prepare generate answers product.

This commit is contained in:
Maarten Billemont 2014-09-21 12:54:48 -04:00
parent 5b85ba3a4b
commit 0a7465282b
8 changed files with 43 additions and 123 deletions

View File

@ -21,7 +21,7 @@ PearlAssociatedObjectProperty( NSArray*, PaymentTransactions, paymentTransaction
} );
SKProductsRequest *productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:
[[NSSet alloc] initWithObjects:MPProductGenerateLogins, MPProductAdvancedExport, nil]];
[[NSSet alloc] initWithObjects:MPProductGenerateLogins, MPProductGenerateAnswers, nil]];
productsRequest.delegate = self;
[productsRequest start];
}

View File

@ -86,7 +86,7 @@ typedef NS_ENUM(NSUInteger, MPSiteType) {
#define MPInconsistenciesFixResultUserKey @"MPInconsistenciesFixResultUserKey"
#define MPProductGenerateLogins @"com.lyndir.masterpassword.products.generatelogins"
#define MPProductAdvancedExport @"com.lyndir.masterpassword.products.advancedexport"
#define MPProductGenerateAnswers @"com.lyndir.masterpassword.products.generateanswers"
static void MPCheckpoint(NSString *checkpoint, NSDictionary *attributes) {

View File

@ -38,9 +38,9 @@
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
// UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
//
// [tableView deselectRowAtIndexPath:indexPath animated:YES];
}
@end

View File

@ -14,7 +14,6 @@
@property(weak, nonatomic) IBOutlet MPStoreProductCell *generateLoginCell;
@property(weak, nonatomic) IBOutlet MPStoreProductCell *generateAnswersCell;
@property(weak, nonatomic) IBOutlet MPStoreProductCell *advancedExportCell;
@property(weak, nonatomic) IBOutlet MPStoreProductCell *iOSIntegrationCell;
@property(weak, nonatomic) IBOutlet MPStoreProductCell *touchIDCell;

View File

@ -134,8 +134,8 @@
if ([productIdentifier isEqualToString:MPProductGenerateLogins])
return self.generateLoginCell;
if ([productIdentifier isEqualToString:MPProductAdvancedExport])
return self.advancedExportCell;
if ([productIdentifier isEqualToString:MPProductGenerateAnswers])
return self.generateAnswersCell;
return nil;
}
@ -148,7 +148,7 @@
for (SKProduct *product in products) {
[self showCellForProductWithIdentifier:MPProductGenerateLogins ifProduct:product showingCells:showCells];
[self showCellForProductWithIdentifier:MPProductAdvancedExport ifProduct:product showingCells:showCells];
[self showCellForProductWithIdentifier:MPProductGenerateAnswers ifProduct:product showingCells:showCells];
}
[hideCells removeObjectsInArray:showCells];

View File

@ -416,28 +416,36 @@
NSString *exportFileName = strf( @"%@ (%@).mpsites",
[self activeUserForMainThread].name, [exportDateFormatter stringFromDate:[NSDate date]] );
if (![[MPiOSAppDelegate get] isPurchased:MPProductAdvancedExport])
[PearlEMail sendEMailTo:nil fromVC:viewController subject:@"Master Password Export" body:message
attachments:[[PearlEMailAttachment alloc] initWithContent:[exportedSites dataUsingEncoding:NSUTF8StringEncoding]
mimeType:@"text/plain" fileName:exportFileName],
nil];
else {
NSURL *applicationSupportURL = [[[NSFileManager defaultManager] URLsForDirectory:NSApplicationSupportDirectory
inDomains:NSUserDomainMask] lastObject];
NSURL *exportURL = [[applicationSupportURL
URLByAppendingPathComponent:[NSBundle mainBundle].bundleIdentifier isDirectory:YES]
URLByAppendingPathComponent:exportFileName isDirectory:NO];
NSError *error = nil;
if (![[exportedSites dataUsingEncoding:NSUTF8StringEncoding]
writeToURL:exportURL options:NSDataWritingFileProtectionComplete error:&error])
err( @"Failed to write export data to URL %@: %@", exportURL, error );
else {
self.interactionController = [UIDocumentInteractionController interactionControllerWithURL:exportURL];
self.interactionController.UTI = @"com.lyndir.masterpassword.sites";
self.interactionController.delegate = self;
[self.interactionController presentOpenInMenuFromRect:CGRectZero inView:viewController.view animated:YES];
}
}
[PearlSheet showSheetWithTitle:@"Export Destination" viewStyle:UIActionSheetStyleBlackTranslucent initSheet:nil
tappedButtonBlock:^(UIActionSheet *sheet, NSInteger buttonIndex) {
if (buttonIndex == [sheet cancelButtonIndex])
return;
if (buttonIndex == [sheet firstOtherButtonIndex]) {
[PearlEMail sendEMailTo:nil fromVC:viewController subject:@"Master Password Export" body:message
attachments:[[PearlEMailAttachment alloc]
initWithContent:[exportedSites dataUsingEncoding:NSUTF8StringEncoding]
mimeType:@"text/plain" fileName:exportFileName],
nil];
return;
}
NSURL *applicationSupportURL = [[[NSFileManager defaultManager] URLsForDirectory:NSApplicationSupportDirectory
inDomains:NSUserDomainMask] lastObject];
NSURL *exportURL = [[applicationSupportURL
URLByAppendingPathComponent:[NSBundle mainBundle].bundleIdentifier isDirectory:YES]
URLByAppendingPathComponent:exportFileName isDirectory:NO];
NSError *error = nil;
if (![[exportedSites dataUsingEncoding:NSUTF8StringEncoding]
writeToURL:exportURL options:NSDataWritingFileProtectionComplete error:&error])
err( @"Failed to write export data to URL %@: %@", exportURL, error );
else {
self.interactionController = [UIDocumentInteractionController interactionControllerWithURL:exportURL];
self.interactionController.UTI = @"com.lyndir.masterpassword.sites";
self.interactionController.delegate = self;
[self.interactionController presentOpenInMenuFromRect:CGRectZero inView:viewController.view animated:YES];
}
} cancelTitle:@"Cancel" destructiveTitle:nil otherTitles:@"Send As E-Mail", @"Share / Airdrop", nil];
}
- (void)changeMasterPasswordFor:(MPUserEntity *)user saveInContext:(NSManagedObjectContext *)moc didResetBlock:(void ( ^ )(void))didReset {

View File

@ -284,9 +284,6 @@
DAE1EF2217E942DE00BC0086 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = DAE1EF2417E942DE00BC0086 /* Localizable.strings */; };
DAE2725919C93B80007C5262 /* libInAppSettingsKit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAFC5655172C573B00CB5CC5 /* libInAppSettingsKit.a */; };
DAE2725A19C93B8E007C5262 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA70EC7F1811B13C00F65DB2 /* StoreKit.framework */; };
DAE2725E19CA98A5007C5262 /* thumb_advanced_export.png in Resources */ = {isa = PBXBuildFile; fileRef = DAE2725B19CA98A5007C5262 /* thumb_advanced_export.png */; };
DAE2725F19CA98A5007C5262 /* thumb_advanced_export@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DAE2725C19CA98A5007C5262 /* thumb_advanced_export@2x.png */; };
DAE2726019CA98A5007C5262 /* thumb_advanced_export@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = DAE2725D19CA98A5007C5262 /* thumb_advanced_export@3x.png */; };
DAE2726319CE9CB3007C5262 /* UITableViewCell+PearlDeque.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE2726119CE9CB3007C5262 /* UITableViewCell+PearlDeque.m */; };
DAE2726419CE9CB3007C5262 /* UITableViewCell+PearlDeque.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE2726219CE9CB3007C5262 /* UITableViewCell+PearlDeque.h */; };
DAEBC45314F6364500987BF6 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAEBC45214F6364500987BF6 /* QuartzCore.framework */; };
@ -1245,9 +1242,6 @@
DAD312C01552A20800A3F9ED /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = usr/lib/libsqlite3.dylib; sourceTree = SDKROOT; };
DADBB55918DB0CFC00D099FE /* keyboard-dark@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "keyboard-dark@2x.png"; sourceTree = "<group>"; };
DAE1EF2317E942DE00BC0086 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
DAE2725B19CA98A5007C5262 /* thumb_advanced_export.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = thumb_advanced_export.png; sourceTree = "<group>"; };
DAE2725C19CA98A5007C5262 /* thumb_advanced_export@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "thumb_advanced_export@2x.png"; sourceTree = "<group>"; };
DAE2725D19CA98A5007C5262 /* thumb_advanced_export@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "thumb_advanced_export@3x.png"; sourceTree = "<group>"; };
DAE2726119CE9CB3007C5262 /* UITableViewCell+PearlDeque.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UITableViewCell+PearlDeque.m"; sourceTree = "<group>"; };
DAE2726219CE9CB3007C5262 /* UITableViewCell+PearlDeque.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UITableViewCell+PearlDeque.h"; sourceTree = "<group>"; };
DAE8E65119867AB500416A0F /* libopensslcrypto-ios.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libopensslcrypto-ios.a"; sourceTree = "<group>"; };
@ -1563,9 +1557,6 @@
DABD360D1711E29400CF925C /* Media */ = {
isa = PBXGroup;
children = (
DAE2725B19CA98A5007C5262 /* thumb_advanced_export.png */,
DAE2725C19CA98A5007C5262 /* thumb_advanced_export@2x.png */,
DAE2725D19CA98A5007C5262 /* thumb_advanced_export@3x.png */,
DA29993119C9132F00AF7DF1 /* thumb_generated_login@3x.png */,
DA29992D19C86F5700AF7DF1 /* thumb_generated_login@2x.png */,
DA29992E19C86F5700AF7DF1 /* thumb_generated_login.png */,
@ -3081,7 +3072,6 @@
DA250A031956484D00AC23F1 /* image-7@2x.png in Resources */,
DA25C5FA197CCAE00046CDCF /* icon_delete.png in Resources */,
DA25C601197DBF260046CDCF /* icon_trash@2x.png in Resources */,
DAE2725E19CA98A5007C5262 /* thumb_advanced_export.png in Resources */,
DABD39551711E29700CF925C /* avatar-6.png in Resources */,
DABD39561711E29700CF925C /* avatar-6@2x.png in Resources */,
DABD39571711E29700CF925C /* avatar-7.png in Resources */,
@ -3103,7 +3093,6 @@
DABD39881711E29700CF925C /* SourceCodePro-ExtraLight.otf in Resources */,
DABD39A01711E29700CF925C /* icon_action.png in Resources */,
DABD39A11711E29700CF925C /* icon_action@2x.png in Resources */,
DAE2726019CA98A5007C5262 /* thumb_advanced_export@3x.png in Resources */,
DABD39F21711E29700CF925C /* icon_cancel.png in Resources */,
DA25C5FB197CCAE00046CDCF /* icon_delete@2x.png in Resources */,
DA29993219C9132F00AF7DF1 /* thumb_generated_login@3x.png in Resources */,
@ -3118,7 +3107,6 @@
DABD3AA01711E29800CF925C /* icon_pause.png in Resources */,
DABD3AA11711E29800CF925C /* icon_pause@2x.png in Resources */,
DABD3AAA1711E29800CF925C /* icon_person.png in Resources */,
DAE2725F19CA98A5007C5262 /* thumb_advanced_export@2x.png in Resources */,
DABD3AAB1711E29800CF925C /* icon_person@2x.png in Resources */,
DABD3ABC1711E29800CF925C /* icon_play.png in Resources */,
DABD3ABD1711E29800CF925C /* icon_play@2x.png in Resources */,

View File

@ -28,7 +28,6 @@
<string>Exo2.0-Bold</string>
<string>Exo2.0-Bold</string>
<string>Exo2.0-Bold</string>
<string>Exo2.0-Bold</string>
</mutableArray>
<mutableArray key="Exo2.0-ExtraBold.otf">
<string>Exo2.0-ExtraBold</string>
@ -66,8 +65,6 @@
<string>Exo2.0-Regular</string>
<string>Exo2.0-Regular</string>
<string>Exo2.0-Regular</string>
<string>Exo2.0-Regular</string>
<string>Exo2.0-Regular</string>
</mutableArray>
<mutableArray key="Exo2.0-Thin.otf">
<string>Exo2.0-Thin</string>
@ -87,7 +84,6 @@
<string>Exo2.0-Thin</string>
<string>Exo2.0-Thin</string>
<string>Exo2.0-Thin</string>
<string>Exo2.0-Thin</string>
</mutableArray>
<mutableArray key="SourceCodePro-Black.otf">
<string>SourceCodePro-Black</string>
@ -120,7 +116,7 @@
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="X8H-vh-j7B" userLabel="Keyboard">
<rect key="frame" x="16" y="431" width="343" height="216"/>
<rect key="frame" x="0.0" y="431" width="375" height="216"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="height" constant="216" id="GcG-kq-fq2"/>
@ -413,14 +409,14 @@
<color key="backgroundColor" cocoaTouchSystemColor="viewFlipsideBackgroundColor"/>
<constraints>
<constraint firstItem="VGz-R0-vMD" firstAttribute="top" secondItem="X8H-vh-j7B" secondAttribute="bottom" id="8Ed-3Y-ll0"/>
<constraint firstAttribute="trailingMargin" secondItem="X8H-vh-j7B" secondAttribute="trailing" id="8Gr-Dq-UpZ"/>
<constraint firstAttribute="trailing" secondItem="X8H-vh-j7B" secondAttribute="trailing" id="8Gr-Dq-UpZ"/>
<constraint firstItem="X8H-vh-j7B" firstAttribute="top" secondItem="9u7-pu-Wtv" secondAttribute="centerY" constant="180" id="Gp5-h6-53S"/>
<constraint firstItem="rWM-08-aab" firstAttribute="leading" secondItem="DOr-Xu-P9q" secondAttribute="leading" id="Il8-kg-Dra"/>
<constraint firstItem="X8H-vh-j7B" firstAttribute="top" secondItem="fUK-gJ-NRE" secondAttribute="centerY" constant="180" id="PgC-ZL-cQo"/>
<constraint firstAttribute="trailing" secondItem="rWM-08-aab" secondAttribute="trailing" id="UPP-1n-zIe"/>
<constraint firstItem="X8H-vh-j7B" firstAttribute="top" secondItem="qp1-nX-o4i" secondAttribute="bottom" constant="20" id="WdK-tA-njz"/>
<constraint firstItem="VGz-R0-vMD" firstAttribute="top" secondItem="rWM-08-aab" secondAttribute="bottom" id="fcH-lm-76a"/>
<constraint firstItem="X8H-vh-j7B" firstAttribute="leading" secondItem="DOr-Xu-P9q" secondAttribute="leadingMargin" id="jbn-ko-MPq"/>
<constraint firstItem="X8H-vh-j7B" firstAttribute="leading" secondItem="DOr-Xu-P9q" secondAttribute="leading" id="jbn-ko-MPq"/>
<constraint firstAttribute="top" secondItem="rWM-08-aab" secondAttribute="top" id="xBe-1Q-mz2"/>
</constraints>
</view>
@ -2539,71 +2535,6 @@ See </string>
<outlet property="purchasedIndicator" destination="N9y-ue-L8d" id="Ppv-ay-M1J"/>
</connections>
</tableViewCell>
<tableViewCell contentMode="scaleToFill" selectionStyle="default" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" shouldIndentWhileEditing="NO" rowHeight="328" id="tm3-IM-pJw" userLabel="Advanced Export" customClass="MPStoreProductCell">
<rect key="frame" x="0.0" y="0.0" width="320" height="97"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="tm3-IM-pJw" id="Dgo-0O-fuB">
<rect key="frame" x="0.0" y="0.0" width="287" height="96"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" horizontalCompressionResistancePriority="751" verticalCompressionResistancePriority="751" text="Advanced Import &amp; Export" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="12" adjustsLetterSpacingToFitWidth="YES" translatesAutoresizingMaskIntoConstraints="NO" id="qh5-l2-zT3">
<rect key="frame" x="20" y="226" width="283.5" height="20.5"/>
<fontDescription key="fontDescription" name="Exo2.0-Bold" family="Exo 2.0" pointSize="17"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="a2i-1c-ULU">
<rect key="frame" x="20" y="254" width="335" height="53.5"/>
<string key="text">Master Password allows you to export your sites, allowing you to send them to another device or keep a backup. Advanced Import &amp; Export improves this feature, allowing you to import and export from other applications, such as Dropbox, Box, Drive etc.</string>
<fontDescription key="fontDescription" name="Exo2.0-Thin" family="Exo 2.0" pointSize="11"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
</label>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="thumb_advanced_export.png" translatesAutoresizingMaskIntoConstraints="NO" id="dPE-KG-tzV">
<rect key="frame" x="88" y="20" width="198" height="198"/>
</imageView>
<activityIndicatorView hidden="YES" opaque="NO" tag="2" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" hidesWhenStopped="YES" style="whiteLarge" translatesAutoresizingMaskIntoConstraints="NO" id="27T-E7-pLh">
<rect key="frame" x="169" y="100.5" width="37" height="37"/>
</activityIndicatorView>
<label opaque="NO" userInteractionEnabled="NO" tag="2" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="✔︎" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="n6J-iw-bme">
<rect key="frame" x="126" y="32" width="121" height="173"/>
<fontDescription key="fontDescription" name="Exo2.0-Regular" family="Exo 2.0" pointSize="144"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" tag="1" contentMode="left" horizontalHuggingPriority="750" verticalHuggingPriority="251" horizontalCompressionResistancePriority="751" verticalCompressionResistancePriority="751" text="$0.95" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="WjS-Ru-h33">
<rect key="frame" x="311" y="226" width="35.5" height="20.5"/>
<fontDescription key="fontDescription" name="Exo2.0-Regular" family="Exo 2.0" pointSize="14"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<constraints>
<constraint firstItem="dPE-KG-tzV" firstAttribute="top" secondItem="Dgo-0O-fuB" secondAttribute="top" constant="20" symbolic="YES" id="2Qu-OE-0ae"/>
<constraint firstItem="dPE-KG-tzV" firstAttribute="centerY" secondItem="27T-E7-pLh" secondAttribute="centerY" id="5oj-xv-SNg"/>
<constraint firstAttribute="bottom" secondItem="a2i-1c-ULU" secondAttribute="bottom" constant="20" symbolic="YES" id="9Mz-44-ycF"/>
<constraint firstItem="qh5-l2-zT3" firstAttribute="bottom" secondItem="WjS-Ru-h33" secondAttribute="bottom" id="CJa-c0-bZ9"/>
<constraint firstItem="a2i-1c-ULU" firstAttribute="top" secondItem="qh5-l2-zT3" secondAttribute="bottom" constant="8" symbolic="YES" id="KXf-Fw-wHt"/>
<constraint firstItem="dPE-KG-tzV" firstAttribute="centerX" secondItem="27T-E7-pLh" secondAttribute="centerX" id="SbF-4Z-IYn"/>
<constraint firstItem="WjS-Ru-h33" firstAttribute="leading" secondItem="qh5-l2-zT3" secondAttribute="trailing" constant="8" symbolic="YES" id="Sd1-e0-2o9"/>
<constraint firstAttribute="trailingMargin" secondItem="WjS-Ru-h33" secondAttribute="trailing" constant="20" id="X2h-dc-lKk"/>
<constraint firstItem="a2i-1c-ULU" firstAttribute="leading" secondItem="Dgo-0O-fuB" secondAttribute="leading" constant="20" symbolic="YES" id="Yy6-fO-a4a"/>
<constraint firstItem="dPE-KG-tzV" firstAttribute="centerY" secondItem="n6J-iw-bme" secondAttribute="centerY" id="dwJ-oN-MXF"/>
<constraint firstItem="qh5-l2-zT3" firstAttribute="top" secondItem="WjS-Ru-h33" secondAttribute="top" id="hLo-be-orX"/>
<constraint firstAttribute="centerX" secondItem="dPE-KG-tzV" secondAttribute="centerX" id="jfW-7Y-aQF"/>
<constraint firstAttribute="trailing" secondItem="a2i-1c-ULU" secondAttribute="trailing" constant="20" id="uaW-Dp-Rxg"/>
<constraint firstItem="qh5-l2-zT3" firstAttribute="leading" secondItem="Dgo-0O-fuB" secondAttribute="leading" constant="20" symbolic="YES" id="vBq-eS-EHc"/>
<constraint firstItem="qh5-l2-zT3" firstAttribute="top" secondItem="dPE-KG-tzV" secondAttribute="bottom" constant="8" symbolic="YES" id="vw5-dN-x3a"/>
<constraint firstItem="dPE-KG-tzV" firstAttribute="centerX" secondItem="n6J-iw-bme" secondAttribute="centerX" id="zNB-fs-s65"/>
</constraints>
</tableViewCellContentView>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<connections>
<outlet property="activityIndicator" destination="27T-E7-pLh" id="r0e-Vd-2Gt"/>
<outlet property="priceLabel" destination="WjS-Ru-h33" id="Sa4-uw-e77"/>
<outlet property="purchasedIndicator" destination="n6J-iw-bme" id="u2Z-Cp-QyH"/>
</connections>
</tableViewCell>
<tableViewCell contentMode="scaleToFill" selectionStyle="default" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" shouldIndentWhileEditing="NO" rowHeight="341" id="9Na-CL-jBq" userLabel="iOS Integration" customClass="MPStoreProductCell">
<rect key="frame" x="0.0" y="0.0" width="320" height="97"/>
<autoresizingMask key="autoresizingMask"/>
@ -2787,7 +2718,6 @@ See </string>
<nil key="simulatedStatusBarMetrics"/>
<nil key="simulatedBottomBarMetrics"/>
<connections>
<outlet property="advancedExportCell" destination="tm3-IM-pJw" id="a6E-H8-fma"/>
<outlet property="generateAnswersCell" destination="l1g-Ul-Vg8" id="GlG-iZ-7FP"/>
<outlet property="generateLoginCell" destination="JVW-tG-xxe" id="PXM-WX-8Qe"/>
<outlet property="iOSIntegrationCell" destination="9Na-CL-jBq" id="LSO-OV-9KA"/>
@ -2798,7 +2728,7 @@ See </string>
</objects>
<point key="canvasLocation" x="2624.5" y="463.5"/>
</scene>
<!--Preferences-->
<!--Answers View Controller-->
<scene sceneID="u8w-6D-Zhe">
<objects>
<tableViewController automaticallyAdjustsScrollViewInsets="NO" id="koB-V2-GYf" customClass="MPAnswersViewController" sceneMemberID="viewController">
@ -2832,7 +2762,7 @@ See </string>
<outlet property="delegate" destination="W2g-yv-V3V" id="TeI-f1-KlA"/>
</connections>
</textField>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Use this as the answer for each of the security questions on this site." textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="EUe-A5-H8h">
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Use this as the answer for each of the security questions on this site." textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="359" translatesAutoresizingMaskIntoConstraints="NO" id="EUe-A5-H8h">
<rect key="frame" x="8" y="99" width="359" height="13.5"/>
<fontDescription key="fontDescription" name="Exo2.0-Thin" family="Exo 2.0" pointSize="11"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
@ -2962,12 +2892,8 @@ See </string>
<outlet property="delegate" destination="koB-V2-GYf" id="dJF-bd-2ux"/>
</connections>
</tableView>
<tabBarItem key="tabBarItem" title="Preferences" image="icon_person.png" id="GwN-2X-LQ6"/>
<nil key="simulatedStatusBarMetrics"/>
<nil key="simulatedBottomBarMetrics"/>
<connections>
<outlet property="showHelpCell" destination="5MB-qb-oPk" id="7Db-6P-bBY"/>
</connections>
</tableViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="kXh-18-fq5" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
@ -2991,7 +2917,6 @@ See </string>
<image name="icon_up.png" width="32" height="32"/>
<image name="identity.png" width="82" height="80"/>
<image name="image-0.png" width="320" height="568"/>
<image name="thumb_advanced_export.png" width="198" height="198"/>
<image name="thumb_generated_login.png" width="198" height="198"/>
<image name="tip_basic_black.png" width="210" height="60"/>
<image name="ui_spinner.png" width="75" height="75"/>