Add initial iOS application
This is already in a working state, but is still missing a few things. For example, there is no proper progress indication during generation and the UI just hangs and there's no way to delete a site yet.
This commit is contained in:
parent
aae80c85e1
commit
43adab7b39
17 changed files with 1735 additions and 0 deletions
5
.gitignore
vendored
5
.gitignore
vendored
|
@ -1,3 +1,8 @@
|
||||||
*.o
|
*.o
|
||||||
*~
|
*~
|
||||||
scrypt-pwgen
|
scrypt-pwgen
|
||||||
|
iOS/DerivedData
|
||||||
|
iOS/ObjFW.framework
|
||||||
|
iOS/ObjFW_Bridge.framework
|
||||||
|
iOS/scrypt-pwgen.xcodeproj/project.xcworkspace
|
||||||
|
iOS/scrypt-pwgen.xcodeproj/xcuserdata
|
||||||
|
|
35
iOS/AddSiteController.h
Normal file
35
iOS/AddSiteController.h
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2016, Jonathan Schleifer <js@heap.zone>
|
||||||
|
*
|
||||||
|
* https://heap.zone/git/?p=scrypt-pwgen.git
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice is present in all copies.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@import UIKit;
|
||||||
|
|
||||||
|
#import "MainViewController.h"
|
||||||
|
|
||||||
|
@interface AddSiteController: UITableViewController
|
||||||
|
@property (retain, nonatomic) IBOutlet UITextField *nameField;
|
||||||
|
@property (retain, nonatomic) IBOutlet UITextField *lengthField;
|
||||||
|
@property (retain, nonatomic) IBOutlet UISwitch *legacySwitch;
|
||||||
|
@property (retain) MainViewController *mainViewController;
|
||||||
|
|
||||||
|
- (IBAction)done: (id)sender;
|
||||||
|
- (IBAction)cancel: (id)sender;
|
||||||
|
@end
|
102
iOS/AddSiteController.m
Normal file
102
iOS/AddSiteController.m
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2016, Jonathan Schleifer <js@heap.zone>
|
||||||
|
*
|
||||||
|
* https://heap.zone/git/?p=scrypt-pwgen.git
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice is present in all copies.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@import ObjFW_Bridge;
|
||||||
|
|
||||||
|
#import "AddSiteController.h"
|
||||||
|
|
||||||
|
static void
|
||||||
|
showAlert(UIViewController *controller, NSString *title, NSString *message)
|
||||||
|
{
|
||||||
|
UIAlertController *alert = [UIAlertController
|
||||||
|
alertControllerWithTitle: title
|
||||||
|
message: message
|
||||||
|
preferredStyle: UIAlertControllerStyleAlert];
|
||||||
|
[alert addAction:
|
||||||
|
[UIAlertAction actionWithTitle: @"OK"
|
||||||
|
style: UIAlertActionStyleDefault
|
||||||
|
handler: nil]];
|
||||||
|
|
||||||
|
[controller presentViewController: alert
|
||||||
|
animated: YES
|
||||||
|
completion: nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
@implementation AddSiteController
|
||||||
|
- (void)dealloc
|
||||||
|
{
|
||||||
|
[_nameField release];
|
||||||
|
[_lengthField release];
|
||||||
|
[_legacySwitch release];
|
||||||
|
[_mainViewController release];
|
||||||
|
|
||||||
|
[super dealloc];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)done: (id)sender
|
||||||
|
{
|
||||||
|
OFString *name = [self.nameField.text OFObject];
|
||||||
|
OFString *lengthStr = [self.lengthField.text OFObject];
|
||||||
|
bool lengthValid = true;
|
||||||
|
size_t length;
|
||||||
|
|
||||||
|
if ([name length] == 0) {
|
||||||
|
showAlert(self, @"Name missing", @"Please enter a name.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
@try {
|
||||||
|
length = (size_t)[lengthStr decimalValue];
|
||||||
|
|
||||||
|
if (length < 3 || length > 64)
|
||||||
|
lengthValid = false;
|
||||||
|
} @catch (OFInvalidFormatException *e) {
|
||||||
|
lengthValid = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!lengthValid) {
|
||||||
|
showAlert(self, @"Invalid length",
|
||||||
|
@"Please enter a number between 3 and 64.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ([self.mainViewController.siteStorage hasSite: name]) {
|
||||||
|
showAlert(self, @"Site Already Exists",
|
||||||
|
@"Please pick a name that does not exist yet.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
[self.mainViewController.siteStorage
|
||||||
|
setSite: name
|
||||||
|
length: length
|
||||||
|
legacy: self.legacySwitch.enabled];
|
||||||
|
|
||||||
|
[self.mainViewController.tableView reloadData];
|
||||||
|
|
||||||
|
[self.navigationController popViewControllerAnimated: YES];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)cancel: (id)sender
|
||||||
|
{
|
||||||
|
[self.navigationController popViewControllerAnimated: YES];
|
||||||
|
}
|
||||||
|
@end
|
27
iOS/AppDelegate.h
Normal file
27
iOS/AppDelegate.h
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2016, Jonathan Schleifer <js@heap.zone>
|
||||||
|
*
|
||||||
|
* https://heap.zone/git/?p=scrypt-pwgen.git
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice is present in all copies.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@import UIKit;
|
||||||
|
|
||||||
|
@interface AppDelegate: UIResponder <UIApplicationDelegate>
|
||||||
|
@property (strong, nonatomic) UIWindow *window;
|
||||||
|
@end
|
26
iOS/AppDelegate.m
Normal file
26
iOS/AppDelegate.m
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2016, Jonathan Schleifer <js@heap.zone>
|
||||||
|
*
|
||||||
|
* https://heap.zone/git/?p=scrypt-pwgen.git
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice is present in all copies.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#import "AppDelegate.h"
|
||||||
|
|
||||||
|
@implementation AppDelegate
|
||||||
|
@end
|
48
iOS/Assets.xcassets/AppIcon.appiconset/Contents.json
Normal file
48
iOS/Assets.xcassets/AppIcon.appiconset/Contents.json
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"size" : "20x20",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"size" : "20x20",
|
||||||
|
"scale" : "3x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"size" : "29x29",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"size" : "29x29",
|
||||||
|
"scale" : "3x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"size" : "40x40",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"size" : "40x40",
|
||||||
|
"scale" : "3x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"size" : "60x60",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"size" : "60x60",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"version" : 1,
|
||||||
|
"author" : "xcode"
|
||||||
|
}
|
||||||
|
}
|
45
iOS/Base.lproj/LaunchScreen.storyboard
Normal file
45
iOS/Base.lproj/LaunchScreen.storyboard
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11201" systemVersion="16A323" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
|
||||||
|
<dependencies>
|
||||||
|
<deployment identifier="iOS"/>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11161"/>
|
||||||
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
|
</dependencies>
|
||||||
|
<scenes>
|
||||||
|
<!--View Controller-->
|
||||||
|
<scene sceneID="EHf-IW-A2E">
|
||||||
|
<objects>
|
||||||
|
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
|
||||||
|
<layoutGuides>
|
||||||
|
<viewControllerLayoutGuide type="top" id="Llm-lL-Icb"/>
|
||||||
|
<viewControllerLayoutGuide type="bottom" id="xb3-aO-Qok"/>
|
||||||
|
</layoutGuides>
|
||||||
|
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="scrypt-pwgen" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="GvW-cV-5uf">
|
||||||
|
<frame key="frameInset" minY="20" width="375" height="610"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" weight="black" pointSize="37"/>
|
||||||
|
<nil key="textColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
<size key="shadowOffset" width="2" height="2"/>
|
||||||
|
</label>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Copyright © 2016, Jonathan Schleifer" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="8gr-rl-2PJ">
|
||||||
|
<frame key="frameInset" minY="638" width="375" height="21"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||||
|
<nil key="textColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
|
</view>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="52" y="374.66266866566718"/>
|
||||||
|
</scene>
|
||||||
|
</scenes>
|
||||||
|
</document>
|
418
iOS/Base.lproj/Main.storyboard
Normal file
418
iOS/Base.lproj/Main.storyboard
Normal file
|
@ -0,0 +1,418 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11201" systemVersion="16A323" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="BN3-Y7-zvx">
|
||||||
|
<dependencies>
|
||||||
|
<deployment identifier="iOS"/>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11161"/>
|
||||||
|
<capability name="Constraints to layout margins" minToolsVersion="6.0"/>
|
||||||
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
|
</dependencies>
|
||||||
|
<scenes>
|
||||||
|
<!--Navigation Controller-->
|
||||||
|
<scene sceneID="edE-sY-0Cv">
|
||||||
|
<objects>
|
||||||
|
<navigationController id="BN3-Y7-zvx" sceneMemberID="viewController">
|
||||||
|
<navigationBar key="navigationBar" contentMode="scaleToFill" id="K8n-wn-irC">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
</navigationBar>
|
||||||
|
<connections>
|
||||||
|
<segue destination="P19-6i-fpd" kind="relationship" relationship="rootViewController" id="izn-Ct-ivZ"/>
|
||||||
|
</connections>
|
||||||
|
</navigationController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="xSr-8M-yKj" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
|
<navigationItem title="Sites" id="DOX-2W-uZP">
|
||||||
|
<barButtonItem key="rightBarButtonItem" systemItem="add" id="mYi-wP-8f8"/>
|
||||||
|
</navigationItem>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="262" y="-515"/>
|
||||||
|
</scene>
|
||||||
|
<!--Sites-->
|
||||||
|
<scene sceneID="raj-gx-00d">
|
||||||
|
<objects>
|
||||||
|
<viewController id="P19-6i-fpd" customClass="MainViewController" sceneMemberID="viewController">
|
||||||
|
<layoutGuides>
|
||||||
|
<viewControllerLayoutGuide type="top" id="XVy-9K-Bul"/>
|
||||||
|
<viewControllerLayoutGuide type="bottom" id="TZK-mv-9Bn"/>
|
||||||
|
</layoutGuides>
|
||||||
|
<view key="view" contentMode="scaleToFill" id="5FM-eD-86d">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<searchBar contentMode="redraw" translatesAutoresizingMaskIntoConstraints="NO" id="CMc-ZN-RAn">
|
||||||
|
<textInputTraits key="textInputTraits"/>
|
||||||
|
</searchBar>
|
||||||
|
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="eoq-EJ-t3s">
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
|
<connections>
|
||||||
|
<outlet property="dataSource" destination="P19-6i-fpd" id="1sa-qY-oQx"/>
|
||||||
|
<outlet property="delegate" destination="P19-6i-fpd" id="Iv1-4B-R74"/>
|
||||||
|
</connections>
|
||||||
|
</tableView>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="CMc-ZN-RAn" firstAttribute="leading" secondItem="5FM-eD-86d" secondAttribute="leading" id="7Bh-lK-dcW"/>
|
||||||
|
<constraint firstItem="CMc-ZN-RAn" firstAttribute="trailing" secondItem="eoq-EJ-t3s" secondAttribute="trailing" id="GIn-iQ-Hld"/>
|
||||||
|
<constraint firstItem="CMc-ZN-RAn" firstAttribute="leading" secondItem="eoq-EJ-t3s" secondAttribute="leading" id="dX2-j8-GBM"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="CMc-ZN-RAn" secondAttribute="trailing" id="gby-v5-orN"/>
|
||||||
|
<constraint firstItem="CMc-ZN-RAn" firstAttribute="top" secondItem="XVy-9K-Bul" secondAttribute="bottom" id="kKV-JV-olG"/>
|
||||||
|
<constraint firstItem="eoq-EJ-t3s" firstAttribute="top" secondItem="CMc-ZN-RAn" secondAttribute="bottom" id="qee-o3-5Zj"/>
|
||||||
|
<constraint firstItem="eoq-EJ-t3s" firstAttribute="bottom" secondItem="TZK-mv-9Bn" secondAttribute="top" id="t45-br-Q2m"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<navigationItem key="navigationItem" title="Sites" id="yTB-Ks-uRL">
|
||||||
|
<barButtonItem key="rightBarButtonItem" systemItem="add" id="p8C-bd-BZ5">
|
||||||
|
<connections>
|
||||||
|
<segue destination="mTn-Td-fIF" kind="show" identifier="addSite" id="M4C-yt-H0Q"/>
|
||||||
|
</connections>
|
||||||
|
</barButtonItem>
|
||||||
|
</navigationItem>
|
||||||
|
<connections>
|
||||||
|
<outlet property="tableView" destination="eoq-EJ-t3s" id="CE8-oa-Eud"/>
|
||||||
|
<segue destination="ayJ-fs-aIU" kind="show" identifier="showDetails" id="Gsx-Js-7aN"/>
|
||||||
|
</connections>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="yxW-Ki-6KI" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="1060" y="-516"/>
|
||||||
|
</scene>
|
||||||
|
<!--Add Site Controller-->
|
||||||
|
<scene sceneID="IxZ-dn-p6h">
|
||||||
|
<objects>
|
||||||
|
<tableViewController id="mTn-Td-fIF" customClass="AddSiteController" sceneMemberID="viewController">
|
||||||
|
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="grouped" separatorStyle="default" allowsSelection="NO" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" id="cum-L6-K1B">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
|
||||||
|
<sections>
|
||||||
|
<tableViewSection id="Whg-Qc-bTG">
|
||||||
|
<cells>
|
||||||
|
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="En5-ry-3SM">
|
||||||
|
<rect key="frame" x="0.0" y="99" width="375" height="44"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="En5-ry-3SM" id="fh3-TO-M9D">
|
||||||
|
<frame key="frameInset" width="375" height="43"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Name" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Yq7-aM-PNl">
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="width" constant="100" id="nTn-vs-RDo"/>
|
||||||
|
</constraints>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
<nil key="textColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="apple.com" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="AXY-MA-LhE">
|
||||||
|
<nil key="textColor"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
<textInputTraits key="textInputTraits" returnKeyType="next"/>
|
||||||
|
</textField>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="AXY-MA-LhE" firstAttribute="leading" secondItem="Yq7-aM-PNl" secondAttribute="trailing" constant="8" symbolic="YES" id="0YS-Qe-KVC"/>
|
||||||
|
<constraint firstItem="Yq7-aM-PNl" firstAttribute="leading" secondItem="fh3-TO-M9D" secondAttribute="leadingMargin" id="2Yo-ac-oCM"/>
|
||||||
|
<constraint firstItem="AXY-MA-LhE" firstAttribute="trailing" secondItem="fh3-TO-M9D" secondAttribute="trailingMargin" id="D7h-pW-gHb"/>
|
||||||
|
<constraint firstItem="AXY-MA-LhE" firstAttribute="centerY" secondItem="fh3-TO-M9D" secondAttribute="centerY" id="arJ-g5-xSi"/>
|
||||||
|
<constraint firstItem="Yq7-aM-PNl" firstAttribute="centerY" secondItem="AXY-MA-LhE" secondAttribute="centerY" id="rry-Ey-x0y"/>
|
||||||
|
</constraints>
|
||||||
|
</tableViewCellContentView>
|
||||||
|
</tableViewCell>
|
||||||
|
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="GI4-iS-21j">
|
||||||
|
<rect key="frame" x="0.0" y="143" width="375" height="44"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="GI4-iS-21j" id="zSC-vR-CCb">
|
||||||
|
<frame key="frameInset" width="375" height="43"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Length" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eFJ-jF-rxJ">
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="width" constant="100" id="4bi-Kp-8mJ"/>
|
||||||
|
</constraints>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
<nil key="textColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="16" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="KQA-JL-1zl">
|
||||||
|
<nil key="textColor"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
<textInputTraits key="textInputTraits" keyboardType="numberPad" returnKeyType="next"/>
|
||||||
|
</textField>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="KQA-JL-1zl" firstAttribute="leading" secondItem="eFJ-jF-rxJ" secondAttribute="trailing" constant="8" symbolic="YES" id="hHI-nW-gN4"/>
|
||||||
|
<constraint firstItem="KQA-JL-1zl" firstAttribute="centerY" secondItem="zSC-vR-CCb" secondAttribute="centerY" id="hJp-yJ-254"/>
|
||||||
|
<constraint firstItem="eFJ-jF-rxJ" firstAttribute="leading" secondItem="zSC-vR-CCb" secondAttribute="leadingMargin" id="hWD-AV-9XL"/>
|
||||||
|
<constraint firstItem="KQA-JL-1zl" firstAttribute="trailing" secondItem="zSC-vR-CCb" secondAttribute="trailingMargin" id="mie-wy-xNb"/>
|
||||||
|
<constraint firstItem="eFJ-jF-rxJ" firstAttribute="centerY" secondItem="KQA-JL-1zl" secondAttribute="centerY" id="ovV-Mb-hCG"/>
|
||||||
|
</constraints>
|
||||||
|
</tableViewCellContentView>
|
||||||
|
</tableViewCell>
|
||||||
|
</cells>
|
||||||
|
</tableViewSection>
|
||||||
|
<tableViewSection id="wRX-mn-ahM">
|
||||||
|
<cells>
|
||||||
|
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="jgd-dy-HQH">
|
||||||
|
<rect key="frame" x="0.0" y="223" width="375" height="44"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="jgd-dy-HQH" id="eqZ-BJ-5O0">
|
||||||
|
<frame key="frameInset" width="375" height="43"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Legacy" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="SVA-v8-zP8">
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="width" constant="100" id="KzI-6Z-fGE"/>
|
||||||
|
</constraints>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
<nil key="textColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="jcs-6K-Sbe"/>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="jcs-6K-Sbe" firstAttribute="trailing" secondItem="eqZ-BJ-5O0" secondAttribute="trailingMargin" id="JvE-mo-ax9"/>
|
||||||
|
<constraint firstItem="SVA-v8-zP8" firstAttribute="centerY" secondItem="jcs-6K-Sbe" secondAttribute="centerY" id="NGb-0A-N0b"/>
|
||||||
|
<constraint firstItem="SVA-v8-zP8" firstAttribute="leading" secondItem="eqZ-BJ-5O0" secondAttribute="leadingMargin" id="QZr-gB-8NO"/>
|
||||||
|
<constraint firstItem="SVA-v8-zP8" firstAttribute="centerY" secondItem="eqZ-BJ-5O0" secondAttribute="centerY" id="QhS-hk-7e0"/>
|
||||||
|
</constraints>
|
||||||
|
</tableViewCellContentView>
|
||||||
|
</tableViewCell>
|
||||||
|
</cells>
|
||||||
|
</tableViewSection>
|
||||||
|
</sections>
|
||||||
|
<connections>
|
||||||
|
<outlet property="dataSource" destination="mTn-Td-fIF" id="lRR-7B-Rbz"/>
|
||||||
|
<outlet property="delegate" destination="mTn-Td-fIF" id="UJl-VI-MdQ"/>
|
||||||
|
</connections>
|
||||||
|
</tableView>
|
||||||
|
<toolbarItems/>
|
||||||
|
<navigationItem key="navigationItem" id="J31-Gi-K4T">
|
||||||
|
<barButtonItem key="leftBarButtonItem" systemItem="cancel" id="3KI-rs-foM">
|
||||||
|
<connections>
|
||||||
|
<action selector="cancel:" destination="mTn-Td-fIF" id="v8I-jq-oIa"/>
|
||||||
|
</connections>
|
||||||
|
</barButtonItem>
|
||||||
|
<barButtonItem key="rightBarButtonItem" systemItem="done" id="CYY-ws-1nV">
|
||||||
|
<connections>
|
||||||
|
<action selector="done:" destination="mTn-Td-fIF" id="OfX-Jt-hUG"/>
|
||||||
|
</connections>
|
||||||
|
</barButtonItem>
|
||||||
|
</navigationItem>
|
||||||
|
<simulatedToolbarMetrics key="simulatedBottomBarMetrics"/>
|
||||||
|
<connections>
|
||||||
|
<outlet property="legacySwitch" destination="jcs-6K-Sbe" id="sCo-l6-9n7"/>
|
||||||
|
<outlet property="lengthField" destination="KQA-JL-1zl" id="tdI-mj-8Ng"/>
|
||||||
|
<outlet property="nameField" destination="AXY-MA-LhE" id="Noo-It-VNV"/>
|
||||||
|
</connections>
|
||||||
|
</tableViewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="6ti-F1-srK" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
|
<tableViewSection id="s3j-z4-wEb">
|
||||||
|
<cells/>
|
||||||
|
</tableViewSection>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="1994" y="-1102"/>
|
||||||
|
</scene>
|
||||||
|
<!--Show Details Controller-->
|
||||||
|
<scene sceneID="rn9-fJ-mg7">
|
||||||
|
<objects>
|
||||||
|
<tableViewController id="ayJ-fs-aIU" customClass="ShowDetailsController" sceneMemberID="viewController">
|
||||||
|
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" id="vWS-Yc-qQ5">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
|
||||||
|
<sections>
|
||||||
|
<tableViewSection id="pum-yC-c7w">
|
||||||
|
<cells>
|
||||||
|
<tableViewCell clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="LQ8-yL-l4p">
|
||||||
|
<rect key="frame" x="0.0" y="99" width="375" height="44"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="LQ8-yL-l4p" id="Drc-sv-gqn">
|
||||||
|
<frame key="frameInset" width="375" height="43"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Name" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="SAI-3c-VBt">
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="width" constant="100" id="9uC-jX-ZTa"/>
|
||||||
|
</constraints>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
<nil key="textColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="left" contentVerticalAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="4Le-mO-AdY">
|
||||||
|
<nil key="textColor"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
<textInputTraits key="textInputTraits"/>
|
||||||
|
</textField>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="SAI-3c-VBt" firstAttribute="leading" secondItem="Drc-sv-gqn" secondAttribute="leadingMargin" id="1S9-wd-uDV"/>
|
||||||
|
<constraint firstItem="4Le-mO-AdY" firstAttribute="centerY" secondItem="Drc-sv-gqn" secondAttribute="centerY" id="6Za-fn-Qo5"/>
|
||||||
|
<constraint firstItem="4Le-mO-AdY" firstAttribute="leading" secondItem="SAI-3c-VBt" secondAttribute="trailing" constant="8" symbolic="YES" id="dVc-fd-hD7"/>
|
||||||
|
<constraint firstItem="SAI-3c-VBt" firstAttribute="centerY" secondItem="4Le-mO-AdY" secondAttribute="centerY" id="vKI-o6-Tub"/>
|
||||||
|
<constraint firstItem="4Le-mO-AdY" firstAttribute="trailing" secondItem="Drc-sv-gqn" secondAttribute="trailingMargin" id="z0g-4S-25H"/>
|
||||||
|
</constraints>
|
||||||
|
</tableViewCellContentView>
|
||||||
|
</tableViewCell>
|
||||||
|
<tableViewCell clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="6NO-g9-dsf">
|
||||||
|
<rect key="frame" x="0.0" y="143" width="375" height="44"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="6NO-g9-dsf" id="UWL-vW-ZHk">
|
||||||
|
<frame key="frameInset" width="375" height="43"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Length" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="EKx-FZ-XDX">
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="width" constant="100" id="ZLB-KT-EH6"/>
|
||||||
|
</constraints>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
<nil key="textColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="left" contentVerticalAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="Lp1-jC-8cn">
|
||||||
|
<nil key="textColor"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
<textInputTraits key="textInputTraits" keyboardType="numberPad"/>
|
||||||
|
</textField>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="EKx-FZ-XDX" firstAttribute="centerY" secondItem="Lp1-jC-8cn" secondAttribute="centerY" id="EZm-yW-Ckn"/>
|
||||||
|
<constraint firstItem="Lp1-jC-8cn" firstAttribute="trailing" secondItem="UWL-vW-ZHk" secondAttribute="trailingMargin" id="Utp-sk-Xha"/>
|
||||||
|
<constraint firstItem="Lp1-jC-8cn" firstAttribute="leading" secondItem="EKx-FZ-XDX" secondAttribute="trailing" constant="8" symbolic="YES" id="YcO-Bd-KzB"/>
|
||||||
|
<constraint firstItem="EKx-FZ-XDX" firstAttribute="leading" secondItem="UWL-vW-ZHk" secondAttribute="leadingMargin" id="kea-OP-Z8G"/>
|
||||||
|
<constraint firstItem="Lp1-jC-8cn" firstAttribute="centerY" secondItem="UWL-vW-ZHk" secondAttribute="centerY" id="mwE-RM-Z8P"/>
|
||||||
|
</constraints>
|
||||||
|
</tableViewCellContentView>
|
||||||
|
</tableViewCell>
|
||||||
|
</cells>
|
||||||
|
</tableViewSection>
|
||||||
|
<tableViewSection id="52O-Rg-UgA">
|
||||||
|
<cells>
|
||||||
|
<tableViewCell clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="b0f-WS-wGd">
|
||||||
|
<rect key="frame" x="0.0" y="223" width="375" height="44"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="b0f-WS-wGd" id="Tej-UW-yK7">
|
||||||
|
<frame key="frameInset" width="375" height="43"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Legacy" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="sLx-Wk-oJm">
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="width" constant="100" id="47g-NW-zSf"/>
|
||||||
|
</constraints>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
<nil key="textColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" enabled="NO" contentHorizontalAlignment="center" contentVerticalAlignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="qW3-51-hZP"/>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="sLx-Wk-oJm" firstAttribute="centerY" secondItem="qW3-51-hZP" secondAttribute="centerY" id="D1R-xs-cHg"/>
|
||||||
|
<constraint firstItem="sLx-Wk-oJm" firstAttribute="centerY" secondItem="Tej-UW-yK7" secondAttribute="centerY" id="D8l-CY-P1l"/>
|
||||||
|
<constraint firstItem="sLx-Wk-oJm" firstAttribute="leading" secondItem="Tej-UW-yK7" secondAttribute="leadingMargin" id="p4T-Nx-CZ7"/>
|
||||||
|
<constraint firstItem="qW3-51-hZP" firstAttribute="trailing" secondItem="Tej-UW-yK7" secondAttribute="trailingMargin" id="ze1-Zm-Lsu"/>
|
||||||
|
</constraints>
|
||||||
|
</tableViewCellContentView>
|
||||||
|
</tableViewCell>
|
||||||
|
</cells>
|
||||||
|
</tableViewSection>
|
||||||
|
<tableViewSection id="pLW-Tc-sKf">
|
||||||
|
<cells>
|
||||||
|
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="HHm-l0-c0d">
|
||||||
|
<rect key="frame" x="0.0" y="303" width="375" height="44"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="HHm-l0-c0d" id="4qT-tm-wo7">
|
||||||
|
<frame key="frameInset" width="375" height="43"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Passphrase" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fAW-aP-GN9">
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="width" constant="100" id="wRI-ys-67O"/>
|
||||||
|
</constraints>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
<nil key="textColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" highlighted="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="DJv-Ey-Hka">
|
||||||
|
<nil key="textColor"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
<textInputTraits key="textInputTraits" returnKeyType="done" secureTextEntry="YES"/>
|
||||||
|
<connections>
|
||||||
|
<outlet property="delegate" destination="ayJ-fs-aIU" id="IuL-Kw-qIq"/>
|
||||||
|
</connections>
|
||||||
|
</textField>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="DJv-Ey-Hka" firstAttribute="trailing" secondItem="4qT-tm-wo7" secondAttribute="trailingMargin" id="Ojn-rK-34A"/>
|
||||||
|
<constraint firstItem="fAW-aP-GN9" firstAttribute="centerY" secondItem="DJv-Ey-Hka" secondAttribute="centerY" id="dLR-Jj-Sxg"/>
|
||||||
|
<constraint firstItem="fAW-aP-GN9" firstAttribute="leading" secondItem="4qT-tm-wo7" secondAttribute="leadingMargin" id="syQ-7j-dym"/>
|
||||||
|
<constraint firstItem="DJv-Ey-Hka" firstAttribute="centerY" secondItem="4qT-tm-wo7" secondAttribute="centerY" id="y6e-z3-TCc"/>
|
||||||
|
<constraint firstItem="DJv-Ey-Hka" firstAttribute="leading" secondItem="fAW-aP-GN9" secondAttribute="trailing" constant="8" symbolic="YES" id="yhk-xE-L6d"/>
|
||||||
|
</constraints>
|
||||||
|
</tableViewCellContentView>
|
||||||
|
</tableViewCell>
|
||||||
|
</cells>
|
||||||
|
</tableViewSection>
|
||||||
|
<tableViewSection id="3SB-Gu-7Nb">
|
||||||
|
<cells>
|
||||||
|
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="zL5-5B-O5f">
|
||||||
|
<rect key="frame" x="0.0" y="383" width="375" height="44"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="zL5-5B-O5f" id="WMu-8w-qhO">
|
||||||
|
<frame key="frameInset" width="375" height="43"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Generate and Copy to Clipboard" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="sss-5e-vm2">
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
<color key="textColor" red="0.0" green="0.47843137250000001" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="sss-5e-vm2" firstAttribute="leading" secondItem="WMu-8w-qhO" secondAttribute="leadingMargin" id="Gm5-eD-xPi"/>
|
||||||
|
<constraint firstItem="sss-5e-vm2" firstAttribute="centerY" secondItem="WMu-8w-qhO" secondAttribute="centerY" id="OXC-y2-7gS"/>
|
||||||
|
<constraint firstItem="sss-5e-vm2" firstAttribute="top" secondItem="WMu-8w-qhO" secondAttribute="topMargin" id="joe-t9-o2R"/>
|
||||||
|
<constraint firstItem="sss-5e-vm2" firstAttribute="trailing" secondItem="WMu-8w-qhO" secondAttribute="trailingMargin" id="r2a-xm-CaS"/>
|
||||||
|
</constraints>
|
||||||
|
</tableViewCellContentView>
|
||||||
|
</tableViewCell>
|
||||||
|
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="ojF-JZ-yCg">
|
||||||
|
<rect key="frame" x="0.0" y="427" width="375" height="44"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="ojF-JZ-yCg" id="bbw-fx-dOK">
|
||||||
|
<frame key="frameInset" width="375" height="43"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Generate and Show" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Tib-hU-gDm">
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
<color key="textColor" red="0.0" green="0.47843137250000001" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="Tib-hU-gDm" firstAttribute="centerY" secondItem="bbw-fx-dOK" secondAttribute="centerY" id="BBD-RX-b7u"/>
|
||||||
|
<constraint firstItem="Tib-hU-gDm" firstAttribute="trailing" secondItem="bbw-fx-dOK" secondAttribute="trailingMargin" id="F5B-kd-c7f"/>
|
||||||
|
<constraint firstItem="Tib-hU-gDm" firstAttribute="leading" secondItem="bbw-fx-dOK" secondAttribute="leadingMargin" id="Oz0-mR-aCn"/>
|
||||||
|
<constraint firstItem="Tib-hU-gDm" firstAttribute="top" secondItem="bbw-fx-dOK" secondAttribute="topMargin" id="stq-PT-3DW"/>
|
||||||
|
</constraints>
|
||||||
|
</tableViewCellContentView>
|
||||||
|
</tableViewCell>
|
||||||
|
</cells>
|
||||||
|
</tableViewSection>
|
||||||
|
</sections>
|
||||||
|
<connections>
|
||||||
|
<outlet property="dataSource" destination="ayJ-fs-aIU" id="kaj-Eg-sHs"/>
|
||||||
|
<outlet property="delegate" destination="ayJ-fs-aIU" id="af9-4J-p1D"/>
|
||||||
|
</connections>
|
||||||
|
</tableView>
|
||||||
|
<navigationItem key="navigationItem" id="xhc-og-4ho"/>
|
||||||
|
<connections>
|
||||||
|
<outlet property="legacySwitch" destination="qW3-51-hZP" id="NsI-F3-hVQ"/>
|
||||||
|
<outlet property="lengthField" destination="Lp1-jC-8cn" id="05B-m5-JnB"/>
|
||||||
|
<outlet property="nameField" destination="4Le-mO-AdY" id="kSd-Rz-Zai"/>
|
||||||
|
<outlet property="passphraseField" destination="DJv-Ey-Hka" id="zkA-6v-zc1"/>
|
||||||
|
</connections>
|
||||||
|
</tableViewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="o5r-z3-hVF" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="1992.8" y="-265.81709145427288"/>
|
||||||
|
</scene>
|
||||||
|
</scenes>
|
||||||
|
</document>
|
38
iOS/Info.plist
Normal file
38
iOS/Info.plist
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
<string>en</string>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>$(EXECUTABLE_NAME)</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>$(PRODUCT_NAME)</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>APPL</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>1.0</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>1</string>
|
||||||
|
<key>LSRequiresIPhoneOS</key>
|
||||||
|
<true/>
|
||||||
|
<key>UILaunchStoryboardName</key>
|
||||||
|
<string>LaunchScreen</string>
|
||||||
|
<key>UIMainStoryboardFile</key>
|
||||||
|
<string>Main</string>
|
||||||
|
<key>UIRequiredDeviceCapabilities</key>
|
||||||
|
<array>
|
||||||
|
<string>armv7</string>
|
||||||
|
</array>
|
||||||
|
<key>UISupportedInterfaceOrientations</key>
|
||||||
|
<array>
|
||||||
|
<string>UIInterfaceOrientationPortrait</string>
|
||||||
|
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||||
|
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
31
iOS/MainViewController.h
Normal file
31
iOS/MainViewController.h
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2016, Jonathan Schleifer <js@heap.zone>
|
||||||
|
*
|
||||||
|
* https://heap.zone/git/?p=scrypt-pwgen.git
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice is present in all copies.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@import UIKit;
|
||||||
|
|
||||||
|
#import "SiteStorage.h"
|
||||||
|
|
||||||
|
@interface MainViewController: UIViewController <UITableViewDelegate,
|
||||||
|
UITableViewDataSource>
|
||||||
|
@property (retain) SiteStorage *siteStorage;
|
||||||
|
@property (retain, nonatomic) IBOutlet UITableView *tableView;
|
||||||
|
@end
|
80
iOS/MainViewController.m
Normal file
80
iOS/MainViewController.m
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2016, Jonathan Schleifer <js@heap.zone>
|
||||||
|
*
|
||||||
|
* https://heap.zone/git/?p=scrypt-pwgen.git
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice is present in all copies.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@import ObjFW_Bridge;
|
||||||
|
|
||||||
|
#import "MainViewController.h"
|
||||||
|
|
||||||
|
#import "AddSiteController.h"
|
||||||
|
#import "ShowDetailsController.h"
|
||||||
|
|
||||||
|
@implementation MainViewController
|
||||||
|
- (void)viewDidLoad
|
||||||
|
{
|
||||||
|
_siteStorage = [[SiteStorage alloc] init];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)dealloc
|
||||||
|
{
|
||||||
|
[_siteStorage release];
|
||||||
|
[_tableView release];
|
||||||
|
|
||||||
|
[super dealloc];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSInteger)tableView: (UITableView*)tableView
|
||||||
|
numberOfRowsInSection: (NSInteger)section
|
||||||
|
{
|
||||||
|
return [self.siteStorage sitesCount];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UITableViewCell*)tableView: (UITableView*)tableView
|
||||||
|
cellForRowAtIndexPath: (NSIndexPath*)indexPath
|
||||||
|
{
|
||||||
|
UITableViewCell *cell = [tableView
|
||||||
|
dequeueReusableCellWithIdentifier: @"site"];
|
||||||
|
|
||||||
|
if (cell == nil)
|
||||||
|
cell = [[[UITableViewCell alloc]
|
||||||
|
initWithStyle: UITableViewCellStyleDefault
|
||||||
|
reuseIdentifier: @"site"] autorelease];
|
||||||
|
|
||||||
|
cell.textLabel.text = [self.siteStorage.sites[indexPath.row] NSObject];
|
||||||
|
|
||||||
|
return cell;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)tableView: (UITableView*)tableView
|
||||||
|
didSelectRowAtIndexPath: (NSIndexPath*)indexPath
|
||||||
|
{
|
||||||
|
[self performSegueWithIdentifier: @"showDetails"
|
||||||
|
sender: self];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)prepareForSegue: (UIStoryboardSegue*)segue
|
||||||
|
sender: (id)sender
|
||||||
|
{
|
||||||
|
if ([segue.identifier isEqual: @"addSite"] ||
|
||||||
|
[segue.identifier isEqual: @"showDetails"])
|
||||||
|
[segue.destinationViewController setMainViewController: self];
|
||||||
|
}
|
||||||
|
@end
|
40
iOS/ShowDetailsController.h
Normal file
40
iOS/ShowDetailsController.h
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2016, Jonathan Schleifer <js@heap.zone>
|
||||||
|
*
|
||||||
|
* https://heap.zone/git/?p=scrypt-pwgen.git
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice is present in all copies.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@import UIKit;
|
||||||
|
|
||||||
|
#import "MainViewController.h"
|
||||||
|
|
||||||
|
@interface ShowDetailsController: UITableViewController <UITableViewDelegate,
|
||||||
|
UITextFieldDelegate>
|
||||||
|
{
|
||||||
|
OFString *_name;
|
||||||
|
size_t _length;
|
||||||
|
bool _legacy;
|
||||||
|
}
|
||||||
|
|
||||||
|
@property (retain, nonatomic) IBOutlet UITextField *nameField;
|
||||||
|
@property (retain, nonatomic) IBOutlet UITextField *lengthField;
|
||||||
|
@property (retain, nonatomic) IBOutlet UISwitch *legacySwitch;
|
||||||
|
@property (retain, nonatomic) IBOutlet UITextField *passphraseField;
|
||||||
|
@property (retain) MainViewController *mainViewController;
|
||||||
|
@end
|
186
iOS/ShowDetailsController.m
Normal file
186
iOS/ShowDetailsController.m
Normal file
|
@ -0,0 +1,186 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2016, Jonathan Schleifer <js@heap.zone>
|
||||||
|
*
|
||||||
|
* https://heap.zone/git/?p=scrypt-pwgen.git
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice is present in all copies.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@import ObjFW;
|
||||||
|
@import ObjFW_Bridge;
|
||||||
|
|
||||||
|
#import "ShowDetailsController.h"
|
||||||
|
|
||||||
|
#import "SiteStorage.h"
|
||||||
|
#import "PasswordGenerator.h"
|
||||||
|
#import "NewPasswordGenerator.h"
|
||||||
|
#import "LegacyPasswordGenerator.h"
|
||||||
|
|
||||||
|
@interface ShowDetailsController ()
|
||||||
|
- (NSMutableString*)_generate;
|
||||||
|
- (void)_generateAndCopy;
|
||||||
|
- (void)_generateAndShow;
|
||||||
|
@end
|
||||||
|
|
||||||
|
static void
|
||||||
|
clearNSMutableString(NSMutableString *string)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* NSMutableString does not offer a way to zero the string.
|
||||||
|
* This is in the hope that setting a single character at an index just
|
||||||
|
* replaces that character in memory, and thus allows us to zero the
|
||||||
|
* password.
|
||||||
|
*/
|
||||||
|
for (NSUInteger i = 0 ; i < string.length; i++)
|
||||||
|
[string replaceCharactersInRange: NSMakeRange(i, 1)
|
||||||
|
withString: @" "];
|
||||||
|
}
|
||||||
|
|
||||||
|
@implementation ShowDetailsController
|
||||||
|
- (void)dealloc
|
||||||
|
{
|
||||||
|
[_name release];
|
||||||
|
[_nameField release];
|
||||||
|
[_lengthField release];
|
||||||
|
[_legacySwitch release];
|
||||||
|
[_passphraseField release];
|
||||||
|
|
||||||
|
[super dealloc];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)viewWillAppear: (BOOL)animated
|
||||||
|
{
|
||||||
|
SiteStorage *siteStorage = self.mainViewController.siteStorage;
|
||||||
|
NSInteger row =
|
||||||
|
self.mainViewController.tableView.indexPathForSelectedRow.row;
|
||||||
|
|
||||||
|
[_name release];
|
||||||
|
_name = [siteStorage.sites[row] retain];
|
||||||
|
_length = [siteStorage lengthForSite: _name];
|
||||||
|
_legacy = [siteStorage isSiteLegacy: _name];
|
||||||
|
|
||||||
|
self.nameField.text = [_name NSObject];
|
||||||
|
self.lengthField.text = [NSString stringWithFormat: @"%zu", _length];
|
||||||
|
self.legacySwitch.enabled = _legacy;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)viewDidAppear: (BOOL)animated
|
||||||
|
{
|
||||||
|
[self.passphraseField becomeFirstResponder];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)textFieldShouldReturn: (UITextField*)textField
|
||||||
|
{
|
||||||
|
[textField resignFirstResponder];
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)tableView: (UITableView*)tableView
|
||||||
|
didSelectRowAtIndexPath: (NSIndexPath*)indexPath
|
||||||
|
{
|
||||||
|
[self.passphraseField resignFirstResponder];
|
||||||
|
[tableView deselectRowAtIndexPath: indexPath
|
||||||
|
animated: YES];
|
||||||
|
|
||||||
|
if (indexPath.section == 3) {
|
||||||
|
switch (indexPath.row) {
|
||||||
|
case 0:
|
||||||
|
[self _generateAndCopy];
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
[self _generateAndShow];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)_generateAndCopy
|
||||||
|
{
|
||||||
|
NSMutableString *password = [self _generate];
|
||||||
|
|
||||||
|
UIPasteboard *pasteBoard = [UIPasteboard generalPasteboard];
|
||||||
|
pasteBoard.string = password;
|
||||||
|
|
||||||
|
clearNSMutableString(password);
|
||||||
|
|
||||||
|
UIAlertController *alert = [UIAlertController
|
||||||
|
alertControllerWithTitle: @"Password Generated"
|
||||||
|
message: @"The password has been copied into the "
|
||||||
|
@"clipboard."
|
||||||
|
preferredStyle: UIAlertControllerStyleAlert];
|
||||||
|
[alert addAction:
|
||||||
|
[UIAlertAction actionWithTitle: @"OK"
|
||||||
|
style: UIAlertActionStyleDefault
|
||||||
|
handler: nil]];
|
||||||
|
|
||||||
|
[self presentViewController: alert
|
||||||
|
animated: YES
|
||||||
|
completion: nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)_generateAndShow
|
||||||
|
{
|
||||||
|
NSMutableString *password = [self _generate];
|
||||||
|
|
||||||
|
UIAlertController *alert = [UIAlertController
|
||||||
|
alertControllerWithTitle: @"Generated Passphrase"
|
||||||
|
message: password
|
||||||
|
preferredStyle: UIAlertControllerStyleAlert];
|
||||||
|
[alert addAction:
|
||||||
|
[UIAlertAction actionWithTitle: @"OK"
|
||||||
|
style: UIAlertActionStyleDefault
|
||||||
|
handler: nil]];
|
||||||
|
|
||||||
|
[self presentViewController: alert
|
||||||
|
animated: YES
|
||||||
|
completion: ^ {
|
||||||
|
clearNSMutableString(password);
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSMutableString*)_generate
|
||||||
|
{
|
||||||
|
id <PasswordGenerator> generator;
|
||||||
|
char *passphrase;
|
||||||
|
|
||||||
|
if (_legacy)
|
||||||
|
generator = [LegacyPasswordGenerator generator];
|
||||||
|
else
|
||||||
|
generator = [NewPasswordGenerator generator];
|
||||||
|
|
||||||
|
generator.site = _name;
|
||||||
|
generator.length = _length;
|
||||||
|
|
||||||
|
passphrase = of_strdup([self.passphraseField.text UTF8String]);
|
||||||
|
@try {
|
||||||
|
self.passphraseField.text = @"";
|
||||||
|
generator.passphrase = passphrase;
|
||||||
|
|
||||||
|
[generator derivePassword];
|
||||||
|
} @finally {
|
||||||
|
of_explicit_memset(passphrase, 0, strlen(passphrase));
|
||||||
|
free(passphrase);
|
||||||
|
}
|
||||||
|
|
||||||
|
NSMutableString *password = [NSMutableString
|
||||||
|
stringWithUTF8String: (char*)generator.output];
|
||||||
|
of_explicit_memset(generator.output, 0,
|
||||||
|
strlen((char*)generator.output));
|
||||||
|
|
||||||
|
return password;
|
||||||
|
}
|
||||||
|
@end
|
42
iOS/SiteStorage.h
Normal file
42
iOS/SiteStorage.h
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2016, Jonathan Schleifer <js@heap.zone>
|
||||||
|
*
|
||||||
|
* https://heap.zone/git/?p=scrypt-pwgen.git
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice is present in all copies.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@import ObjFW;
|
||||||
|
|
||||||
|
@interface SiteStorage: OFObject
|
||||||
|
{
|
||||||
|
OFString *_path;
|
||||||
|
OFMutableDictionary <OFString*, OFDictionary <OFNumber*, OFNumber*>*>
|
||||||
|
*_storage;
|
||||||
|
OFArray *_sites;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (OFArray*)sites;
|
||||||
|
- (size_t)sitesCount;
|
||||||
|
- (bool)hasSite: (OFString*)name;
|
||||||
|
- (size_t)lengthForSite: (OFString*)name;
|
||||||
|
- (bool)isSiteLegacy: (OFString*)name;
|
||||||
|
- (void)setSite: (OFString*)site
|
||||||
|
length: (size_t)length
|
||||||
|
legacy: (bool)legacy;
|
||||||
|
- (void)removeSite: (OFString*)name;
|
||||||
|
@end
|
159
iOS/SiteStorage.m
Normal file
159
iOS/SiteStorage.m
Normal file
|
@ -0,0 +1,159 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2016, Jonathan Schleifer <js@heap.zone>
|
||||||
|
*
|
||||||
|
* https://heap.zone/git/?p=scrypt-pwgen.git
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice is present in all copies.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@import ObjFW;
|
||||||
|
|
||||||
|
/* For literals and boxing. */
|
||||||
|
@compatibility_alias NSDictionary OFDictionary;
|
||||||
|
@compatibility_alias NSNumber OFNumber;
|
||||||
|
|
||||||
|
#import "SiteStorage.h"
|
||||||
|
|
||||||
|
@interface SiteStorage ()
|
||||||
|
- (void)_update;
|
||||||
|
@end
|
||||||
|
|
||||||
|
static OFNumber *lengthField, *legacyField;
|
||||||
|
|
||||||
|
@implementation SiteStorage
|
||||||
|
+ (void)initialize
|
||||||
|
{
|
||||||
|
lengthField = [@(UINT8_C(0)) retain];
|
||||||
|
legacyField = [@(UINT8_C(1)) retain];
|
||||||
|
}
|
||||||
|
|
||||||
|
- init
|
||||||
|
{
|
||||||
|
self = [super init];
|
||||||
|
|
||||||
|
@try {
|
||||||
|
void *pool = objc_autoreleasePoolPush();
|
||||||
|
OFFileManager *fileManager = [OFFileManager defaultManager];
|
||||||
|
OFString *userDataPath = [OFSystemInfo userDataPath];
|
||||||
|
|
||||||
|
if (![fileManager directoryExistsAtPath: userDataPath])
|
||||||
|
[fileManager createDirectoryAtPath: userDataPath];
|
||||||
|
|
||||||
|
_path = [[userDataPath stringByAppendingPathComponent:
|
||||||
|
@"sites.msgpack"] retain];
|
||||||
|
|
||||||
|
@try {
|
||||||
|
_storage = [[[OFDataArray
|
||||||
|
dataArrayWithContentsOfFile: _path]
|
||||||
|
messagePackValue] mutableCopy];
|
||||||
|
} @catch (id e) {
|
||||||
|
_storage = [[OFMutableDictionary alloc] init];
|
||||||
|
}
|
||||||
|
|
||||||
|
_sites = [[[_storage allKeys] sortedArray] retain];
|
||||||
|
|
||||||
|
objc_autoreleasePoolPop(pool);
|
||||||
|
} @catch (id e) {
|
||||||
|
[self release];
|
||||||
|
@throw e;
|
||||||
|
}
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)dealloc
|
||||||
|
{
|
||||||
|
[_path release];
|
||||||
|
[_storage release];
|
||||||
|
[_sites release];
|
||||||
|
|
||||||
|
[super dealloc];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (OFArray*)sites
|
||||||
|
{
|
||||||
|
void *pool = objc_autoreleasePoolPush();
|
||||||
|
OFArray *sites = [[_storage allKeys] sortedArray];
|
||||||
|
|
||||||
|
[sites retain];
|
||||||
|
objc_autoreleasePoolPop(pool);
|
||||||
|
return [sites autorelease];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (size_t)sitesCount
|
||||||
|
{
|
||||||
|
return [_storage count];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (bool)hasSite: (OFString*)name
|
||||||
|
{
|
||||||
|
return (_storage[name] != nil);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (size_t)lengthForSite: (OFString*)name
|
||||||
|
{
|
||||||
|
OFDictionary *site = _storage[name];
|
||||||
|
|
||||||
|
if (site == nil)
|
||||||
|
@throw [OFInvalidArgumentException exception];
|
||||||
|
|
||||||
|
return [site[lengthField] sizeValue];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (bool)isSiteLegacy: (OFString*)name
|
||||||
|
{
|
||||||
|
OFDictionary *site = _storage[name];
|
||||||
|
|
||||||
|
if (site == nil)
|
||||||
|
@throw [OFInvalidArgumentException exception];
|
||||||
|
|
||||||
|
return [site[legacyField] boolValue];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setSite: (OFString*)site
|
||||||
|
length: (size_t)length
|
||||||
|
legacy: (bool)legacy
|
||||||
|
{
|
||||||
|
void *pool = objc_autoreleasePoolPush();
|
||||||
|
|
||||||
|
_storage[site] = @{
|
||||||
|
lengthField: @(length),
|
||||||
|
legacyField: @(legacy)
|
||||||
|
};
|
||||||
|
[self _update];
|
||||||
|
|
||||||
|
objc_autoreleasePoolPop(pool);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)removeSite: (OFString*)name
|
||||||
|
{
|
||||||
|
[_storage removeObjectForKey: name];
|
||||||
|
[self _update];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)_update
|
||||||
|
{
|
||||||
|
void *pool = objc_autoreleasePoolPush();
|
||||||
|
|
||||||
|
[[_storage messagePackRepresentation] writeToFile: _path];
|
||||||
|
|
||||||
|
[_sites release];
|
||||||
|
_sites = [[[_storage allKeys] sortedArray] retain];
|
||||||
|
|
||||||
|
objc_autoreleasePoolPop(pool);
|
||||||
|
}
|
||||||
|
@end
|
49
iOS/main.m
Normal file
49
iOS/main.m
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2016, Jonathan Schleifer <js@heap.zone>
|
||||||
|
*
|
||||||
|
* https://heap.zone/git/?p=scrypt-pwgen.git
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice is present in all copies.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@import ObjFW;
|
||||||
|
@import UIKit;
|
||||||
|
|
||||||
|
#import "AppDelegate.h"
|
||||||
|
|
||||||
|
@interface OFAppDelegate: OFObject <OFApplicationDelegate>
|
||||||
|
@end
|
||||||
|
|
||||||
|
OF_APPLICATION_DELEGATE(OFAppDelegate)
|
||||||
|
|
||||||
|
@implementation OFAppDelegate
|
||||||
|
- (void)applicationDidFinishLaunching
|
||||||
|
{
|
||||||
|
int *argc;
|
||||||
|
char ***argv;
|
||||||
|
int status;
|
||||||
|
|
||||||
|
[[OFApplication sharedApplication]
|
||||||
|
getArgumentCount: &argc
|
||||||
|
andArgumentValues: &argv];
|
||||||
|
|
||||||
|
status = UIApplicationMain(*argc, *argv, nil,
|
||||||
|
NSStringFromClass([AppDelegate class]));
|
||||||
|
|
||||||
|
[OFApplication terminateWithStatus: status];
|
||||||
|
}
|
||||||
|
@end
|
404
iOS/scrypt-pwgen.xcodeproj/project.pbxproj
Normal file
404
iOS/scrypt-pwgen.xcodeproj/project.pbxproj
Normal file
|
@ -0,0 +1,404 @@
|
||||||
|
// !$*UTF8*$!
|
||||||
|
{
|
||||||
|
archiveVersion = 1;
|
||||||
|
classes = {
|
||||||
|
};
|
||||||
|
objectVersion = 46;
|
||||||
|
objects = {
|
||||||
|
|
||||||
|
/* Begin PBXBuildFile section */
|
||||||
|
4B0719251DAA78D80065997A /* ShowDetailsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B0719241DAA78D80065997A /* ShowDetailsController.m */; };
|
||||||
|
4B2E52E11DA942840040D091 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B2E52E01DA942840040D091 /* main.m */; };
|
||||||
|
4B2E52E41DA942840040D091 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B2E52E31DA942840040D091 /* AppDelegate.m */; };
|
||||||
|
4B2E52E71DA942840040D091 /* MainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B2E52E61DA942840040D091 /* MainViewController.m */; };
|
||||||
|
4B2E52EA1DA942840040D091 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4B2E52E81DA942840040D091 /* Main.storyboard */; };
|
||||||
|
4B2E52EC1DA942840040D091 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4B2E52EB1DA942840040D091 /* Assets.xcassets */; };
|
||||||
|
4B2E52EF1DA942840040D091 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4B2E52ED1DA942840040D091 /* LaunchScreen.storyboard */; };
|
||||||
|
4BA115D21DA9432D007ED4EA /* LegacyPasswordGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BA115CE1DA9432D007ED4EA /* LegacyPasswordGenerator.m */; settings = {COMPILER_FLAGS = "-fconstant-string-class=OFConstantString -fno-constant-cfstrings"; }; };
|
||||||
|
4BA115D31DA9432D007ED4EA /* NewPasswordGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BA115D01DA9432D007ED4EA /* NewPasswordGenerator.m */; settings = {COMPILER_FLAGS = "-fconstant-string-class=OFConstantString -fno-constant-cfstrings"; }; };
|
||||||
|
4BA115D61DA94390007ED4EA /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BA115D51DA94390007ED4EA /* UIKit.framework */; };
|
||||||
|
4BB3CDF41DA967C100FEE5ED /* ObjFW.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BB3CDF31DA967C100FEE5ED /* ObjFW.framework */; };
|
||||||
|
4BB3CDF51DA967C100FEE5ED /* ObjFW.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 4BB3CDF31DA967C100FEE5ED /* ObjFW.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||||
|
4BB3CDFD1DA9764300FEE5ED /* AddSiteController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BB3CDFC1DA9764300FEE5ED /* AddSiteController.m */; };
|
||||||
|
4BF4ADEA1DA9A3DB0073B995 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BF4ADE91DA9A3DB0073B995 /* Foundation.framework */; };
|
||||||
|
4BF4ADED1DA9A6B00073B995 /* SiteStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BF4ADEC1DA9A6B00073B995 /* SiteStorage.m */; settings = {COMPILER_FLAGS = "-fconstant-string-class=OFConstantString -fno-constant-cfstrings"; }; };
|
||||||
|
4BF720731DA9C6E3001340C3 /* ObjFW_Bridge.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BF720721DA9C6E3001340C3 /* ObjFW_Bridge.framework */; };
|
||||||
|
4BF720741DA9C6E3001340C3 /* ObjFW_Bridge.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 4BF720721DA9C6E3001340C3 /* ObjFW_Bridge.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||||
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
|
/* Begin PBXCopyFilesBuildPhase section */
|
||||||
|
4BB3CDF61DA967C100FEE5ED /* Embed Frameworks */ = {
|
||||||
|
isa = PBXCopyFilesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
dstPath = "";
|
||||||
|
dstSubfolderSpec = 10;
|
||||||
|
files = (
|
||||||
|
4BF720741DA9C6E3001340C3 /* ObjFW_Bridge.framework in Embed Frameworks */,
|
||||||
|
4BB3CDF51DA967C100FEE5ED /* ObjFW.framework in Embed Frameworks */,
|
||||||
|
);
|
||||||
|
name = "Embed Frameworks";
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXCopyFilesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXFileReference section */
|
||||||
|
4B0719231DAA78D80065997A /* ShowDetailsController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShowDetailsController.h; sourceTree = "<group>"; };
|
||||||
|
4B0719241DAA78D80065997A /* ShowDetailsController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ShowDetailsController.m; sourceTree = "<group>"; };
|
||||||
|
4B2E52DC1DA942840040D091 /* scrypt-pwgen.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "scrypt-pwgen.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
4B2E52E01DA942840040D091 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
|
||||||
|
4B2E52E21DA942840040D091 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
|
||||||
|
4B2E52E31DA942840040D091 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
|
||||||
|
4B2E52E51DA942840040D091 /* MainViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MainViewController.h; sourceTree = "<group>"; };
|
||||||
|
4B2E52E61DA942840040D091 /* MainViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MainViewController.m; sourceTree = "<group>"; };
|
||||||
|
4B2E52E91DA942840040D091 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
|
||||||
|
4B2E52EB1DA942840040D091 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||||
|
4B2E52EE1DA942840040D091 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
||||||
|
4B2E52F01DA942840040D091 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
|
4BA115CD1DA9432D007ED4EA /* LegacyPasswordGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LegacyPasswordGenerator.h; path = ../LegacyPasswordGenerator.h; sourceTree = "<group>"; };
|
||||||
|
4BA115CE1DA9432D007ED4EA /* LegacyPasswordGenerator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LegacyPasswordGenerator.m; path = ../LegacyPasswordGenerator.m; sourceTree = "<group>"; };
|
||||||
|
4BA115CF1DA9432D007ED4EA /* NewPasswordGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NewPasswordGenerator.h; path = ../NewPasswordGenerator.h; sourceTree = "<group>"; };
|
||||||
|
4BA115D01DA9432D007ED4EA /* NewPasswordGenerator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NewPasswordGenerator.m; path = ../NewPasswordGenerator.m; sourceTree = "<group>"; };
|
||||||
|
4BA115D11DA9432D007ED4EA /* PasswordGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PasswordGenerator.h; path = ../PasswordGenerator.h; sourceTree = "<group>"; };
|
||||||
|
4BA115D51DA94390007ED4EA /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
|
||||||
|
4BB3CDF31DA967C100FEE5ED /* ObjFW.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ObjFW.framework; sourceTree = "<group>"; };
|
||||||
|
4BB3CDFB1DA9764300FEE5ED /* AddSiteController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AddSiteController.h; sourceTree = "<group>"; };
|
||||||
|
4BB3CDFC1DA9764300FEE5ED /* AddSiteController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AddSiteController.m; sourceTree = "<group>"; };
|
||||||
|
4BF4ADE91DA9A3DB0073B995 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
||||||
|
4BF4ADEB1DA9A6B00073B995 /* SiteStorage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SiteStorage.h; sourceTree = "<group>"; };
|
||||||
|
4BF4ADEC1DA9A6B00073B995 /* SiteStorage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SiteStorage.m; sourceTree = "<group>"; };
|
||||||
|
4BF720721DA9C6E3001340C3 /* ObjFW_Bridge.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ObjFW_Bridge.framework; sourceTree = "<group>"; };
|
||||||
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
|
4B2E52D91DA942840040D091 /* Frameworks */ = {
|
||||||
|
isa = PBXFrameworksBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
4BF4ADEA1DA9A3DB0073B995 /* Foundation.framework in Frameworks */,
|
||||||
|
4BA115D61DA94390007ED4EA /* UIKit.framework in Frameworks */,
|
||||||
|
4BB3CDF41DA967C100FEE5ED /* ObjFW.framework in Frameworks */,
|
||||||
|
4BF720731DA9C6E3001340C3 /* ObjFW_Bridge.framework in Frameworks */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXFrameworksBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXGroup section */
|
||||||
|
4B2E52D31DA942840040D091 = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
4BA115CC1DA9431D007ED4EA /* scrypt-pwgen */,
|
||||||
|
4B2E52DE1DA942840040D091 /* iOS */,
|
||||||
|
4B2E52DD1DA942840040D091 /* Products */,
|
||||||
|
4BA115D41DA94390007ED4EA /* Frameworks */,
|
||||||
|
);
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
4B2E52DD1DA942840040D091 /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
4B2E52DC1DA942840040D091 /* scrypt-pwgen.app */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
4B2E52DE1DA942840040D091 /* iOS */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
4B2E52EB1DA942840040D091 /* Assets.xcassets */,
|
||||||
|
4BB3CDFB1DA9764300FEE5ED /* AddSiteController.h */,
|
||||||
|
4BB3CDFC1DA9764300FEE5ED /* AddSiteController.m */,
|
||||||
|
4B2E52E21DA942840040D091 /* AppDelegate.h */,
|
||||||
|
4B2E52E31DA942840040D091 /* AppDelegate.m */,
|
||||||
|
4B2E52F01DA942840040D091 /* Info.plist */,
|
||||||
|
4B2E52ED1DA942840040D091 /* LaunchScreen.storyboard */,
|
||||||
|
4B2E52E81DA942840040D091 /* Main.storyboard */,
|
||||||
|
4B2E52E51DA942840040D091 /* MainViewController.h */,
|
||||||
|
4B2E52E61DA942840040D091 /* MainViewController.m */,
|
||||||
|
4B0719231DAA78D80065997A /* ShowDetailsController.h */,
|
||||||
|
4B0719241DAA78D80065997A /* ShowDetailsController.m */,
|
||||||
|
4BF4ADEB1DA9A6B00073B995 /* SiteStorage.h */,
|
||||||
|
4BF4ADEC1DA9A6B00073B995 /* SiteStorage.m */,
|
||||||
|
4B2E52E01DA942840040D091 /* main.m */,
|
||||||
|
);
|
||||||
|
name = iOS;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
4BA115CC1DA9431D007ED4EA /* scrypt-pwgen */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
4BA115CD1DA9432D007ED4EA /* LegacyPasswordGenerator.h */,
|
||||||
|
4BA115CE1DA9432D007ED4EA /* LegacyPasswordGenerator.m */,
|
||||||
|
4BA115CF1DA9432D007ED4EA /* NewPasswordGenerator.h */,
|
||||||
|
4BA115D01DA9432D007ED4EA /* NewPasswordGenerator.m */,
|
||||||
|
4BA115D11DA9432D007ED4EA /* PasswordGenerator.h */,
|
||||||
|
);
|
||||||
|
name = "scrypt-pwgen";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
4BA115D41DA94390007ED4EA /* Frameworks */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
4BB3CDF31DA967C100FEE5ED /* ObjFW.framework */,
|
||||||
|
4BF720721DA9C6E3001340C3 /* ObjFW_Bridge.framework */,
|
||||||
|
4BF4ADE91DA9A3DB0073B995 /* Foundation.framework */,
|
||||||
|
4BA115D51DA94390007ED4EA /* UIKit.framework */,
|
||||||
|
);
|
||||||
|
name = Frameworks;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
/* End PBXGroup section */
|
||||||
|
|
||||||
|
/* Begin PBXNativeTarget section */
|
||||||
|
4B2E52DB1DA942840040D091 /* scrypt-pwgen */ = {
|
||||||
|
isa = PBXNativeTarget;
|
||||||
|
buildConfigurationList = 4B2E52F31DA942840040D091 /* Build configuration list for PBXNativeTarget "scrypt-pwgen" */;
|
||||||
|
buildPhases = (
|
||||||
|
4B2E52D81DA942840040D091 /* Sources */,
|
||||||
|
4B2E52D91DA942840040D091 /* Frameworks */,
|
||||||
|
4B2E52DA1DA942840040D091 /* Resources */,
|
||||||
|
4BB3CDF61DA967C100FEE5ED /* Embed Frameworks */,
|
||||||
|
);
|
||||||
|
buildRules = (
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
);
|
||||||
|
name = "scrypt-pwgen";
|
||||||
|
productName = "scrypt-pwgen";
|
||||||
|
productReference = 4B2E52DC1DA942840040D091 /* scrypt-pwgen.app */;
|
||||||
|
productType = "com.apple.product-type.application";
|
||||||
|
};
|
||||||
|
/* End PBXNativeTarget section */
|
||||||
|
|
||||||
|
/* Begin PBXProject section */
|
||||||
|
4B2E52D41DA942840040D091 /* Project object */ = {
|
||||||
|
isa = PBXProject;
|
||||||
|
attributes = {
|
||||||
|
LastUpgradeCheck = 0800;
|
||||||
|
ORGANIZATIONNAME = "Jonathan Schleifer";
|
||||||
|
TargetAttributes = {
|
||||||
|
4B2E52DB1DA942840040D091 = {
|
||||||
|
CreatedOnToolsVersion = 8.0;
|
||||||
|
DevelopmentTeam = MXKNFCKFL6;
|
||||||
|
ProvisioningStyle = Automatic;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
buildConfigurationList = 4B2E52D71DA942840040D091 /* Build configuration list for PBXProject "scrypt-pwgen" */;
|
||||||
|
compatibilityVersion = "Xcode 3.2";
|
||||||
|
developmentRegion = English;
|
||||||
|
hasScannedForEncodings = 0;
|
||||||
|
knownRegions = (
|
||||||
|
en,
|
||||||
|
Base,
|
||||||
|
);
|
||||||
|
mainGroup = 4B2E52D31DA942840040D091;
|
||||||
|
productRefGroup = 4B2E52DD1DA942840040D091 /* Products */;
|
||||||
|
projectDirPath = "";
|
||||||
|
projectRoot = "";
|
||||||
|
targets = (
|
||||||
|
4B2E52DB1DA942840040D091 /* scrypt-pwgen */,
|
||||||
|
);
|
||||||
|
};
|
||||||
|
/* End PBXProject section */
|
||||||
|
|
||||||
|
/* Begin PBXResourcesBuildPhase section */
|
||||||
|
4B2E52DA1DA942840040D091 /* Resources */ = {
|
||||||
|
isa = PBXResourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
4B2E52EF1DA942840040D091 /* LaunchScreen.storyboard in Resources */,
|
||||||
|
4B2E52EC1DA942840040D091 /* Assets.xcassets in Resources */,
|
||||||
|
4B2E52EA1DA942840040D091 /* Main.storyboard in Resources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXResourcesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXSourcesBuildPhase section */
|
||||||
|
4B2E52D81DA942840040D091 /* Sources */ = {
|
||||||
|
isa = PBXSourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
4BB3CDFD1DA9764300FEE5ED /* AddSiteController.m in Sources */,
|
||||||
|
4B2E52E41DA942840040D091 /* AppDelegate.m in Sources */,
|
||||||
|
4BA115D21DA9432D007ED4EA /* LegacyPasswordGenerator.m in Sources */,
|
||||||
|
4B2E52E71DA942840040D091 /* MainViewController.m in Sources */,
|
||||||
|
4BA115D31DA9432D007ED4EA /* NewPasswordGenerator.m in Sources */,
|
||||||
|
4B0719251DAA78D80065997A /* ShowDetailsController.m in Sources */,
|
||||||
|
4BF4ADED1DA9A6B00073B995 /* SiteStorage.m in Sources */,
|
||||||
|
4B2E52E11DA942840040D091 /* main.m in Sources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXSourcesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXVariantGroup section */
|
||||||
|
4B2E52E81DA942840040D091 /* Main.storyboard */ = {
|
||||||
|
isa = PBXVariantGroup;
|
||||||
|
children = (
|
||||||
|
4B2E52E91DA942840040D091 /* Base */,
|
||||||
|
);
|
||||||
|
name = Main.storyboard;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
4B2E52ED1DA942840040D091 /* LaunchScreen.storyboard */ = {
|
||||||
|
isa = PBXVariantGroup;
|
||||||
|
children = (
|
||||||
|
4B2E52EE1DA942840040D091 /* Base */,
|
||||||
|
);
|
||||||
|
name = LaunchScreen.storyboard;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
/* End PBXVariantGroup section */
|
||||||
|
|
||||||
|
/* Begin XCBuildConfiguration section */
|
||||||
|
4B2E52F11DA942840040D091 /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||||
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_SUSPICIOUS_MOVES = YES;
|
||||||
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||||
|
COPY_PHASE_STRIP = NO;
|
||||||
|
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||||
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
|
ENABLE_TESTABILITY = YES;
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
|
GCC_DYNAMIC_NO_PIC = NO;
|
||||||
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||||
|
"DEBUG=1",
|
||||||
|
"$(inherited)",
|
||||||
|
);
|
||||||
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
4B2E52F21DA942840040D091 /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||||
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_SUSPICIOUS_MOVES = YES;
|
||||||
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||||
|
COPY_PHASE_STRIP = NO;
|
||||||
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
|
ENABLE_NS_ASSERTIONS = NO;
|
||||||
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
VALIDATE_PRODUCT = YES;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
4B2E52F41DA942840040D091 /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
CLANG_ENABLE_OBJC_ARC = NO;
|
||||||
|
DEVELOPMENT_TEAM = MXKNFCKFL6;
|
||||||
|
ENABLE_BITCODE = NO;
|
||||||
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"$(PROJECT_DIR)",
|
||||||
|
);
|
||||||
|
INFOPLIST_FILE = Info.plist;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "zone.heap.scrypt-pwgen";
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
4B2E52F51DA942840040D091 /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
CLANG_ENABLE_OBJC_ARC = NO;
|
||||||
|
DEVELOPMENT_TEAM = MXKNFCKFL6;
|
||||||
|
ENABLE_BITCODE = NO;
|
||||||
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"$(PROJECT_DIR)",
|
||||||
|
);
|
||||||
|
INFOPLIST_FILE = Info.plist;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "zone.heap.scrypt-pwgen";
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
/* End XCBuildConfiguration section */
|
||||||
|
|
||||||
|
/* Begin XCConfigurationList section */
|
||||||
|
4B2E52D71DA942840040D091 /* Build configuration list for PBXProject "scrypt-pwgen" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
4B2E52F11DA942840040D091 /* Debug */,
|
||||||
|
4B2E52F21DA942840040D091 /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
4B2E52F31DA942840040D091 /* Build configuration list for PBXNativeTarget "scrypt-pwgen" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
4B2E52F41DA942840040D091 /* Debug */,
|
||||||
|
4B2E52F51DA942840040D091 /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
/* End XCConfigurationList section */
|
||||||
|
};
|
||||||
|
rootObject = 4B2E52D41DA942840040D091 /* Project object */;
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue