Commit 4f189e2a by Dima Bart

Merge pull request #141 from Shopify/feature/customer-sample-app

Customer API Sample Application
parents b250d1ef 44a839c4
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="8191" systemVersion="15A282b" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="rS3-R9-Ivy">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10116" systemVersion="15E65" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="rS3-R9-Ivy">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="8154"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
</dependencies>
<scenes>
<!--Master-->
......@@ -11,7 +11,6 @@
<navigationController title="Master" id="rS3-R9-Ivy" sceneMemberID="viewController">
<navigationBar key="navigationBar" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" id="yXu-0R-QUA">
<autoresizingMask key="autoresizingMask"/>
<animations/>
</navigationBar>
<connections>
<segue destination="pGg-6v-bdr" kind="relationship" relationship="rootViewController" id="RxB-wf-QIq"/>
......@@ -28,8 +27,7 @@
<tableView key="view" opaque="NO" clipsSubviews="YES" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" id="mLL-gJ-YKr">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<animations/>
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
<color key="backgroundColor" red="0.93725490199999995" green="0.93725490199999995" blue="0.95686274510000002" alpha="1" colorSpace="calibratedRGB"/>
<sections/>
<connections>
<outlet property="dataSource" destination="pGg-6v-bdr" id="P41-gY-KXY"/>
......
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
9A102CEE1CDAA6080026CC43 /* ActionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A102CED1CDAA6080026CC43 /* ActionCell.swift */; };
9A102CF01CDB7C0F0026CC43 /* OrdersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A102CEF1CDB7C0F0026CC43 /* OrdersViewController.swift */; };
9A102CFE1CDB86920026CC43 /* LineItemCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A102CFC1CDB86920026CC43 /* LineItemCell.swift */; };
9A102D111CDBCD320026CC43 /* AuthenticationDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A102D101CDBCD320026CC43 /* AuthenticationDelegate.swift */; };
9A9C03071CD8F9AC00AE79BD /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A9C03061CD8F9AC00AE79BD /* AppDelegate.swift */; };
9A9C03091CD8F9AC00AE79BD /* LoginViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A9C03081CD8F9AC00AE79BD /* LoginViewController.swift */; };
9A9C030C1CD8F9AC00AE79BD /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9A9C030A1CD8F9AC00AE79BD /* Main.storyboard */; };
9A9C030E1CD8F9AC00AE79BD /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 9A9C030D1CD8F9AC00AE79BD /* Assets.xcassets */; };
9A9C03111CD8F9AC00AE79BD /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9A9C030F1CD8F9AC00AE79BD /* LaunchScreen.storyboard */; };
9A9C031C1CD8FC6A00AE79BD /* AccountViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A9C031B1CD8FC6A00AE79BD /* AccountViewController.swift */; };
9A9C031E1CD8FD2300AE79BD /* SignupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A9C031D1CD8FD2300AE79BD /* SignupViewController.swift */; };
9A9C03361CD9205C00AE79BD /* Buy.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A9C032D1CD9203600AE79BD /* Buy.framework */; };
9A9C03381CD9206600AE79BD /* Buy.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9A9C032D1CD9203600AE79BD /* Buy.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
9A9C033B1CD921D700AE79BD /* BUYClient+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A9C033A1CD921D700AE79BD /* BUYClient+Extensions.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
9A9C03281CD9203600AE79BD /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 9A9C03201CD9203600AE79BD /* Mobile Buy SDK.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 90F592EC1B0D5EFE0026B382;
remoteInfo = "Mobile Buy SDK Tests";
};
9A9C032A1CD9203600AE79BD /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 9A9C03201CD9203600AE79BD /* Mobile Buy SDK.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = BE9A64281B503C2F0033E558;
remoteInfo = "Buy Static";
};
9A9C032C1CD9203600AE79BD /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 9A9C03201CD9203600AE79BD /* Mobile Buy SDK.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 901931701BC5B9BC00D1134E;
remoteInfo = Buy;
};
9A9C032F1CD9205600AE79BD /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 9A9C03201CD9203600AE79BD /* Mobile Buy SDK.xcodeproj */;
proxyType = 1;
remoteGlobalIDString = 901930E11BC5B9BC00D1134E;
remoteInfo = Buy;
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
9A9C03371CD9206000AE79BD /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
9A9C03381CD9206600AE79BD /* Buy.framework in CopyFiles */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
9A102CED1CDAA6080026CC43 /* ActionCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActionCell.swift; sourceTree = "<group>"; };
9A102CEF1CDB7C0F0026CC43 /* OrdersViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrdersViewController.swift; sourceTree = "<group>"; };
9A102CFC1CDB86920026CC43 /* LineItemCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LineItemCell.swift; sourceTree = "<group>"; };
9A102D101CDBCD320026CC43 /* AuthenticationDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthenticationDelegate.swift; sourceTree = "<group>"; };
9A9C03031CD8F9AC00AE79BD /* Sample App Customers.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Sample App Customers.app"; sourceTree = BUILT_PRODUCTS_DIR; };
9A9C03061CD8F9AC00AE79BD /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
9A9C03081CD8F9AC00AE79BD /* LoginViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginViewController.swift; sourceTree = "<group>"; };
9A9C030B1CD8F9AC00AE79BD /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
9A9C030D1CD8F9AC00AE79BD /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
9A9C03101CD8F9AC00AE79BD /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
9A9C03121CD8F9AC00AE79BD /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
9A9C031B1CD8FC6A00AE79BD /* AccountViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountViewController.swift; sourceTree = "<group>"; };
9A9C031D1CD8FD2300AE79BD /* SignupViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SignupViewController.swift; sourceTree = "<group>"; };
9A9C03201CD9203600AE79BD /* Mobile Buy SDK.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = "Mobile Buy SDK.xcodeproj"; path = "../../Mobile Buy SDK/Mobile Buy SDK.xcodeproj"; sourceTree = "<group>"; };
9A9C033A1CD921D700AE79BD /* BUYClient+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "BUYClient+Extensions.swift"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
9A9C03001CD8F9AC00AE79BD /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
9A9C03361CD9205C00AE79BD /* Buy.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
9A102CE81CDAA5F00026CC43 /* Cells */ = {
isa = PBXGroup;
children = (
9A102CFC1CDB86920026CC43 /* LineItemCell.swift */,
9A102CED1CDAA6080026CC43 /* ActionCell.swift */,
);
name = Cells;
sourceTree = "<group>";
};
9A102D0F1CDBCD210026CC43 /* Protcols */ = {
isa = PBXGroup;
children = (
9A102D101CDBCD320026CC43 /* AuthenticationDelegate.swift */,
);
name = Protcols;
sourceTree = "<group>";
};
9A9C02FA1CD8F9AC00AE79BD = {
isa = PBXGroup;
children = (
9A9C031F1CD9202900AE79BD /* SDK */,
9A9C03051CD8F9AC00AE79BD /* Sample App Customers */,
9A9C03191CD8FA0200AE79BD /* Supporting Files */,
9A9C03041CD8F9AC00AE79BD /* Products */,
);
sourceTree = "<group>";
};
9A9C03041CD8F9AC00AE79BD /* Products */ = {
isa = PBXGroup;
children = (
9A9C03031CD8F9AC00AE79BD /* Sample App Customers.app */,
);
name = Products;
sourceTree = "<group>";
};
9A9C03051CD8F9AC00AE79BD /* Sample App Customers */ = {
isa = PBXGroup;
children = (
9A9C03061CD8F9AC00AE79BD /* AppDelegate.swift */,
9A102D0F1CDBCD210026CC43 /* Protcols */,
9A9C03391CD920F600AE79BD /* Extensions */,
9A102CE81CDAA5F00026CC43 /* Cells */,
9A9C031A1CD8FA0C00AE79BD /* View Controllers */,
9A9C030A1CD8F9AC00AE79BD /* Main.storyboard */,
);
path = "Sample App Customers";
sourceTree = "<group>";
};
9A9C03191CD8FA0200AE79BD /* Supporting Files */ = {
isa = PBXGroup;
children = (
9A9C030D1CD8F9AC00AE79BD /* Assets.xcassets */,
9A9C030F1CD8F9AC00AE79BD /* LaunchScreen.storyboard */,
9A9C03121CD8F9AC00AE79BD /* Info.plist */,
);
name = "Supporting Files";
path = "Sample App Customers";
sourceTree = "<group>";
};
9A9C031A1CD8FA0C00AE79BD /* View Controllers */ = {
isa = PBXGroup;
children = (
9A9C031B1CD8FC6A00AE79BD /* AccountViewController.swift */,
9A9C03081CD8F9AC00AE79BD /* LoginViewController.swift */,
9A9C031D1CD8FD2300AE79BD /* SignupViewController.swift */,
9A102CEF1CDB7C0F0026CC43 /* OrdersViewController.swift */,
);
name = "View Controllers";
sourceTree = "<group>";
};
9A9C031F1CD9202900AE79BD /* SDK */ = {
isa = PBXGroup;
children = (
9A9C03201CD9203600AE79BD /* Mobile Buy SDK.xcodeproj */,
);
name = SDK;
sourceTree = "<group>";
};
9A9C03211CD9203600AE79BD /* Products */ = {
isa = PBXGroup;
children = (
9A9C03291CD9203600AE79BD /* Mobile Buy SDK Tests.xctest */,
9A9C032B1CD9203600AE79BD /* Buy.framework */,
9A9C032D1CD9203600AE79BD /* Buy.framework */,
);
name = Products;
sourceTree = "<group>";
};
9A9C03391CD920F600AE79BD /* Extensions */ = {
isa = PBXGroup;
children = (
9A9C033A1CD921D700AE79BD /* BUYClient+Extensions.swift */,
);
name = Extensions;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
9A9C03021CD8F9AC00AE79BD /* Sample App Customers */ = {
isa = PBXNativeTarget;
buildConfigurationList = 9A9C03151CD8F9AC00AE79BD /* Build configuration list for PBXNativeTarget "Sample App Customers" */;
buildPhases = (
9A9C02FF1CD8F9AC00AE79BD /* Sources */,
9A9C03001CD8F9AC00AE79BD /* Frameworks */,
9A9C03011CD8F9AC00AE79BD /* Resources */,
9A9C03371CD9206000AE79BD /* CopyFiles */,
);
buildRules = (
);
dependencies = (
9A9C03301CD9205600AE79BD /* PBXTargetDependency */,
);
name = "Sample App Customers";
productName = "Sample App Customers";
productReference = 9A9C03031CD8F9AC00AE79BD /* Sample App Customers.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
9A9C02FB1CD8F9AC00AE79BD /* Project object */ = {
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0730;
LastUpgradeCheck = 0730;
ORGANIZATIONNAME = "Shopify Inc.";
TargetAttributes = {
9A9C03021CD8F9AC00AE79BD = {
CreatedOnToolsVersion = 7.3;
};
};
};
buildConfigurationList = 9A9C02FE1CD8F9AC00AE79BD /* Build configuration list for PBXProject "Sample App Customers" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 9A9C02FA1CD8F9AC00AE79BD;
productRefGroup = 9A9C03041CD8F9AC00AE79BD /* Products */;
projectDirPath = "";
projectReferences = (
{
ProductGroup = 9A9C03211CD9203600AE79BD /* Products */;
ProjectRef = 9A9C03201CD9203600AE79BD /* Mobile Buy SDK.xcodeproj */;
},
);
projectRoot = "";
targets = (
9A9C03021CD8F9AC00AE79BD /* Sample App Customers */,
);
};
/* End PBXProject section */
/* Begin PBXReferenceProxy section */
9A9C03291CD9203600AE79BD /* Mobile Buy SDK Tests.xctest */ = {
isa = PBXReferenceProxy;
fileType = wrapper.cfbundle;
path = "Mobile Buy SDK Tests.xctest";
remoteRef = 9A9C03281CD9203600AE79BD /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
9A9C032B1CD9203600AE79BD /* Buy.framework */ = {
isa = PBXReferenceProxy;
fileType = wrapper.framework;
path = Buy.framework;
remoteRef = 9A9C032A1CD9203600AE79BD /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
9A9C032D1CD9203600AE79BD /* Buy.framework */ = {
isa = PBXReferenceProxy;
fileType = wrapper.framework;
path = Buy.framework;
remoteRef = 9A9C032C1CD9203600AE79BD /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
/* End PBXReferenceProxy section */
/* Begin PBXResourcesBuildPhase section */
9A9C03011CD8F9AC00AE79BD /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
9A9C03111CD8F9AC00AE79BD /* LaunchScreen.storyboard in Resources */,
9A9C030E1CD8F9AC00AE79BD /* Assets.xcassets in Resources */,
9A9C030C1CD8F9AC00AE79BD /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
9A9C02FF1CD8F9AC00AE79BD /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
9A9C03091CD8F9AC00AE79BD /* LoginViewController.swift in Sources */,
9A9C03071CD8F9AC00AE79BD /* AppDelegate.swift in Sources */,
9A9C033B1CD921D700AE79BD /* BUYClient+Extensions.swift in Sources */,
9A102CF01CDB7C0F0026CC43 /* OrdersViewController.swift in Sources */,
9A102CEE1CDAA6080026CC43 /* ActionCell.swift in Sources */,
9A102D111CDBCD320026CC43 /* AuthenticationDelegate.swift in Sources */,
9A9C031C1CD8FC6A00AE79BD /* AccountViewController.swift in Sources */,
9A102CFE1CDB86920026CC43 /* LineItemCell.swift in Sources */,
9A9C031E1CD8FD2300AE79BD /* SignupViewController.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
9A9C03301CD9205600AE79BD /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
name = Buy;
targetProxy = 9A9C032F1CD9205600AE79BD /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
9A9C030A1CD8F9AC00AE79BD /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
9A9C030B1CD8F9AC00AE79BD /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
9A9C030F1CD8F9AC00AE79BD /* LaunchScreen.storyboard */ = {
isa = PBXVariantGroup;
children = (
9A9C03101CD8F9AC00AE79BD /* Base */,
);
name = LaunchScreen.storyboard;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
9A9C03131CD8F9AC00AE79BD /* 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_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
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 = 9.3;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
};
name = Debug;
};
9A9C03141CD8F9AC00AE79BD /* 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_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
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 = 9.3;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
VALIDATE_PRODUCT = YES;
};
name = Release;
};
9A9C03161CD8F9AC00AE79BD /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
GCC_TREAT_WARNINGS_AS_ERRORS = YES;
GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
INFOPLIST_FILE = "Sample App Customers/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "com.shopify.Sample-App-Customers";
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Debug;
};
9A9C03171CD8F9AC00AE79BD /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
GCC_TREAT_WARNINGS_AS_ERRORS = YES;
GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
INFOPLIST_FILE = "Sample App Customers/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "com.shopify.Sample-App-Customers";
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
9A9C02FE1CD8F9AC00AE79BD /* Build configuration list for PBXProject "Sample App Customers" */ = {
isa = XCConfigurationList;
buildConfigurations = (
9A9C03131CD8F9AC00AE79BD /* Debug */,
9A9C03141CD8F9AC00AE79BD /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
9A9C03151CD8F9AC00AE79BD /* Build configuration list for PBXNativeTarget "Sample App Customers" */ = {
isa = XCConfigurationList;
buildConfigurations = (
9A9C03161CD8F9AC00AE79BD /* Debug */,
9A9C03171CD8F9AC00AE79BD /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 9A9C02FB1CD8F9AC00AE79BD /* Project object */;
}
//
// AccountViewController.swift
// Sample App Customers
//
// Created by Shopify.
// Copyright (c) 2016 Shopify Inc. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//
import UIKit
import Buy
class AccountViewController: UIViewController {
@IBOutlet weak var loginContainerView: UIView!
@IBOutlet weak var signupContainerView: UIView!
private var loginViewController: LoginViewController!
private var signupViewController: SignupViewController!
// ----------------------------------
// MARK: - Segue -
//
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
switch segue.identifier {
case .Some("loginSegue"):
self.loginViewController = segue.destinationViewController as! LoginViewController
self.loginViewController.delegate = self
case .Some("signupSegue"):
self.signupViewController = segue.destinationViewController as! SignupViewController
self.signupViewController.delegate = self
default:
break
}
if self.loginViewController != nil && self.signupViewController != nil {
self.updateSelectedIndex(0)
}
}
// ----------------------------------
// MARK: - Updates -
//
private func updateSelectedIndex(index: Int) {
self.loginContainerView.hidden = (index != 0)
self.signupContainerView.hidden = (index == 0)
}
// ----------------------------------
// MARK: - UI Actions -
//
@IBAction func segmentAction(sender: UISegmentedControl) {
self.updateSelectedIndex(sender.selectedSegmentIndex)
}
}
// ----------------------------------
// MARK: - AuthenticationDelegate -
//
extension AccountViewController: AuthenticationDelegate {
func authenticationDidSucceedForCustomer(customer: BUYCustomer, withToken token: String) {
if let orders = self.storyboard?.instantiateViewControllerWithIdentifier("ordersViewController") {
self.navigationController?.pushViewController(orders, animated: true)
}
}
func authenticationDidFailWithError(error: NSError?) {
let alert = UIAlertController(title: "Error", message: error?.localizedDescription, preferredStyle: .Alert)
alert.addAction(UIAlertAction(title: "OK", style: .Cancel, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)
}
}
//
// ActionCell.swift
// Sample App Customers
//
// Created by Shopify.
// Copyright (c) 2016 Shopify Inc. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//
import UIKit
class ActionCell: UITableViewCell {
@IBOutlet private weak var actionLabel: UILabel!
@IBOutlet private weak var loader: UIActivityIndicatorView!
var loading: Bool {
get {
return self.actionLabel.hidden
}
set {
self.actionLabel.hidden = newValue
self.loader.hidden = !newValue
}
}
}
//
// AppDelegate.swift
// Sample App Customers
//
// Created by Shopify.
// Copyright (c) 2016 Shopify Inc. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//
import UIKit
import Buy
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
/* ---------------------------------
** Configure store credentials to
** use with your specific store.
*/
let shopDomain: String = ""
let apiKey: String = ""
let appID: String = ""
private(set) var client: BUYClient!
// ----------------------------------
// MARK: - Application Launch -
//
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
self.client = BUYClient(shopDomain: self.shopDomain, apiKey: self.apiKey, appId: self.appID)
return true
}
}
{
"images" : [
{
"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"
}
}
\ No newline at end of file
//
// AuthenticationDelegate.swift
// Sample App Customers
//
// Created by Shopify.
// Copyright (c) 2016 Shopify Inc. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//
import Foundation
import Buy
protocol AuthenticationDelegate: class {
func authenticationDidSucceedForCustomer(customer: BUYCustomer, withToken token: String)
func authenticationDidFailWithError(error: NSError?)
}
//
// BUYClient+Extensions.swift
// Sample App Customers
//
// Created by Shopify.
// Copyright (c) 2016 Shopify Inc. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//
import Foundation
import Buy
extension BUYClient {
static var sharedClient: BUYClient {
if let delegate = UIApplication.sharedApplication().delegate as? AppDelegate {
return delegate.client
}
fatalError("Could not retrieve shared BUYClient")
}
}
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="8150" systemVersion="15A204g" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" initialViewController="01J-lp-oVM">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="8122"/>
</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="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<animations/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="53" y="375"/>
</scene>
</scenes>
</document>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10116" systemVersion="15E65" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="Rve-tt-oDV">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
<capability name="Constraints to layout margins" minToolsVersion="6.0"/>
</dependencies>
<scenes>
<!--Navigation Controller-->
<scene sceneID="4wn-hG-lmY">
<objects>
<navigationController automaticallyAdjustsScrollViewInsets="NO" id="Rve-tt-oDV" sceneMemberID="viewController">
<toolbarItems/>
<navigationBar key="navigationBar" contentMode="scaleToFill" id="FF1-QQ-bya">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
</navigationBar>
<nil name="viewControllers"/>
<connections>
<segue destination="iKH-Ul-gfD" kind="relationship" relationship="rootViewController" id="5NF-i4-CKi"/>
</connections>
</navigationController>
<placeholder placeholderIdentifier="IBFirstResponder" id="7QM-77-bpA" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="880" y="1317"/>
</scene>
<!--Account View Controller-->
<scene sceneID="8Y7-Xy-RCG">
<objects>
<viewController automaticallyAdjustsScrollViewInsets="NO" id="iKH-Ul-gfD" customClass="AccountViewController" customModule="Sample_App_Customers" customModuleProvider="target" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="KVq-0R-CoC"/>
<viewControllerLayoutGuide type="bottom" id="KYl-xu-h2G"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="nWF-kz-aAG">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<containerView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="KZD-y5-2e3">
<rect key="frame" x="0.0" y="64" width="600" height="536"/>
<connections>
<segue destination="SeG-69-sEH" kind="embed" identifier="loginSegue" id="QHg-yG-JJv"/>
</connections>
</containerView>
<containerView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ZAC-pf-9Yj">
<rect key="frame" x="0.0" y="64" width="600" height="536"/>
<connections>
<segue destination="70P-fG-yZe" kind="embed" identifier="signupSegue" id="2p4-k3-WCf"/>
</connections>
</containerView>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstItem="KYl-xu-h2G" firstAttribute="top" secondItem="KZD-y5-2e3" secondAttribute="bottom" id="0D8-3D-X2I"/>
<constraint firstAttribute="trailing" secondItem="ZAC-pf-9Yj" secondAttribute="trailing" id="8kK-Kt-hwk"/>
<constraint firstItem="ZAC-pf-9Yj" firstAttribute="top" secondItem="KVq-0R-CoC" secondAttribute="bottom" id="JjY-rL-t3U"/>
<constraint firstItem="KZD-y5-2e3" firstAttribute="top" secondItem="KVq-0R-CoC" secondAttribute="bottom" id="KmM-EV-EcF"/>
<constraint firstAttribute="bottom" secondItem="ZAC-pf-9Yj" secondAttribute="bottom" id="Pw3-9z-LoQ"/>
<constraint firstItem="KZD-y5-2e3" firstAttribute="leading" secondItem="nWF-kz-aAG" secondAttribute="leading" id="exV-ma-bOp"/>
<constraint firstItem="ZAC-pf-9Yj" firstAttribute="leading" secondItem="nWF-kz-aAG" secondAttribute="leading" id="mX1-ov-efh"/>
<constraint firstAttribute="trailing" secondItem="KZD-y5-2e3" secondAttribute="trailing" id="mma-P6-jHa"/>
</constraints>
</view>
<navigationItem key="navigationItem" id="Mpd-Mx-1R8">
<nil key="title"/>
<segmentedControl key="titleView" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="bar" selectedSegmentIndex="0" id="9a5-Mq-kpe">
<rect key="frame" x="180" y="7" width="240" height="30"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<segments>
<segment title="Login"/>
<segment title="Signup"/>
</segments>
<connections>
<action selector="segmentAction:" destination="iKH-Ul-gfD" eventType="valueChanged" id="d3E-PY-K78"/>
</connections>
</segmentedControl>
</navigationItem>
<connections>
<outlet property="loginContainerView" destination="KZD-y5-2e3" id="g1r-NW-TfQ"/>
<outlet property="signupContainerView" destination="ZAC-pf-9Yj" id="GGw-ff-lV9"/>
<segue destination="gsn-tk-U20" kind="show" identifier="ordersSegue" id="cw5-XQ-PCc"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="twZ-kb-vHr" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="1556" y="1317"/>
</scene>
<!--Login View Controller-->
<scene sceneID="NeY-xW-y2e">
<objects>
<tableViewController id="SeG-69-sEH" customClass="LoginViewController" customModule="Sample_App_Customers" customModuleProvider="target" sceneMemberID="viewController">
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" id="740-1I-D2c">
<rect key="frame" x="0.0" y="0.0" width="600" height="536"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="0.93725490199999995" green="0.93725490199999995" blue="0.95686274510000002" alpha="1" colorSpace="calibratedRGB"/>
<sections>
<tableViewSection id="vFK-vZ-mR3">
<cells>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" id="CuO-8G-HGT">
<rect key="frame" x="0.0" y="35" width="600" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="CuO-8G-HGT" id="T8u-Fh-qlI">
<rect key="frame" x="0.0" y="0.0" width="600" height="43"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Email" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="vbn-uC-XFw">
<rect key="frame" x="15" y="0.0" width="570" height="43"/>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<textInputTraits key="textInputTraits" autocorrectionType="no"/>
</textField>
</subviews>
<constraints>
<constraint firstItem="vbn-uC-XFw" firstAttribute="centerY" secondItem="T8u-Fh-qlI" secondAttribute="centerY" id="7dG-bO-cQZ"/>
<constraint firstAttribute="bottomMargin" secondItem="vbn-uC-XFw" secondAttribute="bottom" id="Kt2-LN-5gu"/>
<constraint firstItem="vbn-uC-XFw" firstAttribute="height" secondItem="T8u-Fh-qlI" secondAttribute="height" id="Lrd-0e-WST"/>
<constraint firstItem="vbn-uC-XFw" firstAttribute="leading" secondItem="T8u-Fh-qlI" secondAttribute="leadingMargin" constant="15" id="PdF-QE-MN2"/>
<constraint firstAttribute="trailing" secondItem="vbn-uC-XFw" secondAttribute="trailing" constant="15" id="US3-nc-KSf"/>
<constraint firstItem="vbn-uC-XFw" firstAttribute="top" secondItem="T8u-Fh-qlI" secondAttribute="topMargin" id="XJo-OU-9ra"/>
<constraint firstItem="vbn-uC-XFw" firstAttribute="leading" secondItem="T8u-Fh-qlI" secondAttribute="leading" constant="15" id="lOk-MW-dKb"/>
<constraint firstAttribute="trailingMargin" secondItem="vbn-uC-XFw" secondAttribute="trailing" constant="15" id="xZk-qB-TAl"/>
</constraints>
<variation key="default">
<mask key="constraints">
<exclude reference="Kt2-LN-5gu"/>
<exclude reference="PdF-QE-MN2"/>
<exclude reference="XJo-OU-9ra"/>
<exclude reference="xZk-qB-TAl"/>
</mask>
</variation>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" id="xe1-NR-O6X">
<rect key="frame" x="0.0" y="79" width="600" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="xe1-NR-O6X" id="tSM-6t-g5u">
<rect key="frame" x="0.0" y="0.0" width="600" height="43"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Password" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="gT0-G1-ODs">
<rect key="frame" x="15" y="0.0" width="570" height="43"/>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<textInputTraits key="textInputTraits" autocorrectionType="no" secureTextEntry="YES"/>
</textField>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="gT0-G1-ODs" secondAttribute="trailing" constant="15" id="Mae-95-lZz"/>
<constraint firstAttribute="trailingMargin" secondItem="gT0-G1-ODs" secondAttribute="trailing" constant="15" id="QDy-z0-mcC"/>
<constraint firstItem="gT0-G1-ODs" firstAttribute="leading" secondItem="tSM-6t-g5u" secondAttribute="leadingMargin" constant="15" id="inJ-eq-9u3"/>
<constraint firstItem="gT0-G1-ODs" firstAttribute="top" secondItem="tSM-6t-g5u" secondAttribute="topMargin" id="n1e-Lv-fQW"/>
<constraint firstAttribute="bottomMargin" secondItem="gT0-G1-ODs" secondAttribute="bottom" id="nAI-12-jzv"/>
<constraint firstItem="gT0-G1-ODs" firstAttribute="height" secondItem="tSM-6t-g5u" secondAttribute="height" id="tOR-7b-tvX"/>
<constraint firstItem="gT0-G1-ODs" firstAttribute="leading" secondItem="tSM-6t-g5u" secondAttribute="leading" constant="15" id="tWz-Yi-ZX3"/>
<constraint firstItem="gT0-G1-ODs" firstAttribute="centerY" secondItem="tSM-6t-g5u" secondAttribute="centerY" id="wv9-OB-6S3"/>
</constraints>
<variation key="default">
<mask key="constraints">
<exclude reference="QDy-z0-mcC"/>
<exclude reference="inJ-eq-9u3"/>
<exclude reference="n1e-Lv-fQW"/>
<exclude reference="nAI-12-jzv"/>
</mask>
</variation>
</tableViewCellContentView>
</tableViewCell>
</cells>
</tableViewSection>
<tableViewSection id="6QK-0O-mVt">
<cells>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="6Cp-fP-mzd" customClass="ActionCell" customModule="Sample_App_Customers" customModuleProvider="target">
<rect key="frame" x="0.0" y="159" width="600" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="6Cp-fP-mzd" id="oJm-Gs-x7G">
<rect key="frame" x="0.0" y="0.0" width="600" height="43"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Login" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qOX-zO-yOy">
<rect key="frame" x="15" y="0.0" width="570" height="43"/>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<activityIndicatorView opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" animating="YES" style="gray" translatesAutoresizingMaskIntoConstraints="NO" id="0cX-7W-pAV">
<rect key="frame" x="290" y="12" width="20" height="20"/>
</activityIndicatorView>
</subviews>
<constraints>
<constraint firstItem="qOX-zO-yOy" firstAttribute="leading" secondItem="oJm-Gs-x7G" secondAttribute="leading" constant="15" id="B5t-Ep-ubL"/>
<constraint firstItem="0cX-7W-pAV" firstAttribute="centerY" secondItem="oJm-Gs-x7G" secondAttribute="centerY" id="Esh-GD-TpO"/>
<constraint firstItem="0cX-7W-pAV" firstAttribute="centerX" secondItem="oJm-Gs-x7G" secondAttribute="centerX" id="LMK-U2-2y1"/>
<constraint firstItem="qOX-zO-yOy" firstAttribute="centerY" secondItem="oJm-Gs-x7G" secondAttribute="centerY" id="XCh-5r-fz1"/>
<constraint firstItem="qOX-zO-yOy" firstAttribute="height" secondItem="oJm-Gs-x7G" secondAttribute="height" id="jDG-Om-lyd"/>
<constraint firstAttribute="trailing" secondItem="qOX-zO-yOy" secondAttribute="trailing" constant="15" id="qCN-Mz-CFm"/>
</constraints>
</tableViewCellContentView>
<connections>
<outlet property="actionLabel" destination="qOX-zO-yOy" id="6rf-Zk-CwE"/>
<outlet property="loader" destination="0cX-7W-pAV" id="Ale-MT-EAQ"/>
</connections>
</tableViewCell>
</cells>
</tableViewSection>
</sections>
<connections>
<outlet property="dataSource" destination="SeG-69-sEH" id="2FJ-q5-Mlb"/>
<outlet property="delegate" destination="SeG-69-sEH" id="oDs-Zd-LqO"/>
</connections>
</tableView>
<navigationItem key="navigationItem" id="565-Nk-TDV"/>
<connections>
<outlet property="actionCell" destination="6Cp-fP-mzd" id="ldY-Fz-0fS"/>
<outlet property="emailField" destination="vbn-uC-XFw" id="4Mn-Or-0wZ"/>
<outlet property="passwordField" destination="gT0-G1-ODs" id="LwJ-M5-cgN"/>
</connections>
</tableViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="bEz-wx-yz5" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="1227" y="2046"/>
</scene>
<!--Orders-->
<scene sceneID="Kny-Kh-xPd">
<objects>
<viewController storyboardIdentifier="ordersViewController" useStoryboardIdentifierAsRestorationIdentifier="YES" id="gsn-tk-U20" customClass="OrdersViewController" customModule="Sample_App_Customers" customModuleProvider="target" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="A7z-xl-YN2"/>
<viewControllerLayoutGuide type="bottom" id="61m-HD-4Dc"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="nv0-Ew-4s3">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="70" sectionHeaderHeight="18" sectionFooterHeight="18" translatesAutoresizingMaskIntoConstraints="NO" id="0Fn-mj-l5t">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
<prototypes>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="none" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="cell" rowHeight="70" id="6md-wi-AGU" customClass="LineItemCell" customModule="Sample_App_Customers" customModuleProvider="target">
<rect key="frame" x="0.0" y="114" width="600" height="70"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="6md-wi-AGU" id="vsD-MK-pMi">
<rect key="frame" x="0.0" y="0.0" width="600" height="69"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Cool Shoes" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yKe-Oz-Zb0">
<rect key="frame" x="15" y="15" width="88" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Model B Shoe with red laces" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="iif-N0-Vdu">
<rect key="frame" x="15" y="36" width="183" height="17"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" horizontalCompressionResistancePriority="755" verticalCompressionResistancePriority="755" text="$843.84" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tc7-8s-fgw">
<rect key="frame" x="518" y="24" width="67" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.39108031988143921" green="0.71921610832214355" blue="0.21925181150436401" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<constraints>
<constraint firstItem="iif-N0-Vdu" firstAttribute="top" secondItem="yKe-Oz-Zb0" secondAttribute="bottom" id="2TM-j7-I0x"/>
<constraint firstItem="tc7-8s-fgw" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="yKe-Oz-Zb0" secondAttribute="trailing" constant="15" id="HtJ-bo-lzd"/>
<constraint firstAttribute="trailing" secondItem="tc7-8s-fgw" secondAttribute="trailing" constant="15" id="QkA-Ok-IlL"/>
<constraint firstItem="tc7-8s-fgw" firstAttribute="centerY" secondItem="vsD-MK-pMi" secondAttribute="centerY" id="Rzi-Md-fU4"/>
<constraint firstItem="yKe-Oz-Zb0" firstAttribute="centerY" secondItem="vsD-MK-pMi" secondAttribute="centerY" constant="-9" id="Xd9-l2-t22"/>
<constraint firstItem="tc7-8s-fgw" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="iif-N0-Vdu" secondAttribute="trailing" constant="15" id="s76-v4-jWb"/>
<constraint firstItem="iif-N0-Vdu" firstAttribute="leading" secondItem="yKe-Oz-Zb0" secondAttribute="leading" id="wXD-0W-DDz"/>
<constraint firstItem="yKe-Oz-Zb0" firstAttribute="leading" secondItem="vsD-MK-pMi" secondAttribute="leadingMargin" constant="7" id="ysW-l5-ayq"/>
</constraints>
</tableViewCellContentView>
<connections>
<outlet property="priceLabel" destination="tc7-8s-fgw" id="Icp-Z6-TGU"/>
<outlet property="subtitleLabel" destination="iif-N0-Vdu" id="5ap-bO-jbP"/>
<outlet property="titleLabel" destination="yKe-Oz-Zb0" id="CXd-S3-dnM"/>
</connections>
</tableViewCell>
</prototypes>
<connections>
<outlet property="dataSource" destination="gsn-tk-U20" id="I04-cV-mh5"/>
<outlet property="delegate" destination="gsn-tk-U20" id="nwo-WG-rYn"/>
</connections>
</tableView>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstItem="0Fn-mj-l5t" firstAttribute="top" secondItem="nv0-Ew-4s3" secondAttribute="top" id="Iad-q1-O8p"/>
<constraint firstItem="0Fn-mj-l5t" firstAttribute="leading" secondItem="nv0-Ew-4s3" secondAttribute="leading" id="jEu-Qy-BFt"/>
<constraint firstAttribute="trailing" secondItem="0Fn-mj-l5t" secondAttribute="trailing" id="q11-1O-evS"/>
<constraint firstItem="61m-HD-4Dc" firstAttribute="top" secondItem="0Fn-mj-l5t" secondAttribute="bottom" id="qka-hB-mCa"/>
</constraints>
</view>
<navigationItem key="navigationItem" title="Orders" id="QJf-qx-qvw">
<barButtonItem key="leftBarButtonItem" title="Logout" id="Iio-Wf-I5q">
<connections>
<action selector="logoutAction:" destination="gsn-tk-U20" id="7BT-DV-iXS"/>
</connections>
</barButtonItem>
</navigationItem>
<connections>
<outlet property="tableView" destination="0Fn-mj-l5t" id="ZFj-eI-hKE"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="lWE-gv-HEA" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="2262" y="1317"/>
</scene>
<!--Signup View Controller-->
<scene sceneID="Uio-b8-HRq">
<objects>
<tableViewController id="70P-fG-yZe" customClass="SignupViewController" customModule="Sample_App_Customers" customModuleProvider="target" sceneMemberID="viewController">
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" id="iC1-L4-C5H">
<rect key="frame" x="0.0" y="0.0" width="600" height="536"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="0.93725490199999995" green="0.93725490199999995" blue="0.95686274510000002" alpha="1" colorSpace="calibratedRGB"/>
<sections>
<tableViewSection id="ujn-ne-2Ym">
<cells>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="G5x-10-Ra9">
<rect key="frame" x="0.0" y="35" width="600" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="G5x-10-Ra9" id="oaW-K3-MJI">
<rect key="frame" x="0.0" y="0.0" width="600" height="43"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="First Name" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="2iS-rI-oit">
<rect key="frame" x="15" y="0.0" width="570" height="43"/>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<textInputTraits key="textInputTraits" autocorrectionType="no"/>
</textField>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="2iS-rI-oit" secondAttribute="trailing" constant="15" id="AyO-3m-A8f"/>
<constraint firstItem="2iS-rI-oit" firstAttribute="leading" secondItem="oaW-K3-MJI" secondAttribute="leading" constant="15" id="DV7-Sw-aAP"/>
<constraint firstItem="2iS-rI-oit" firstAttribute="top" secondItem="oaW-K3-MJI" secondAttribute="topMargin" id="MvX-Xq-k5G"/>
<constraint firstItem="2iS-rI-oit" firstAttribute="height" secondItem="oaW-K3-MJI" secondAttribute="height" id="O8c-yE-OKW"/>
<constraint firstItem="2iS-rI-oit" firstAttribute="centerY" secondItem="oaW-K3-MJI" secondAttribute="centerY" id="UdD-OQ-RJe"/>
<constraint firstAttribute="bottomMargin" secondItem="2iS-rI-oit" secondAttribute="bottom" id="tnj-em-LRX"/>
<constraint firstItem="2iS-rI-oit" firstAttribute="leading" secondItem="oaW-K3-MJI" secondAttribute="leadingMargin" constant="15" id="w6s-34-Ifr"/>
<constraint firstAttribute="trailingMargin" secondItem="2iS-rI-oit" secondAttribute="trailing" constant="15" id="xNO-ya-GKB"/>
</constraints>
<variation key="default">
<mask key="constraints">
<exclude reference="MvX-Xq-k5G"/>
<exclude reference="tnj-em-LRX"/>
<exclude reference="w6s-34-Ifr"/>
<exclude reference="xNO-ya-GKB"/>
</mask>
</variation>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="KyE-NI-hIx">
<rect key="frame" x="0.0" y="79" width="600" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KyE-NI-hIx" id="yua-gC-NXd">
<rect key="frame" x="0.0" y="0.0" width="600" height="43"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Last Name" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="sNT-35-pHr">
<rect key="frame" x="15" y="0.0" width="570" height="43"/>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<textInputTraits key="textInputTraits" autocorrectionType="no"/>
</textField>
</subviews>
<constraints>
<constraint firstItem="sNT-35-pHr" firstAttribute="top" secondItem="yua-gC-NXd" secondAttribute="topMargin" id="0eE-Gv-qxf"/>
<constraint firstItem="sNT-35-pHr" firstAttribute="height" secondItem="yua-gC-NXd" secondAttribute="height" id="6Cg-V8-XuL"/>
<constraint firstAttribute="bottomMargin" secondItem="sNT-35-pHr" secondAttribute="bottom" id="6N4-tQ-prP"/>
<constraint firstAttribute="trailingMargin" secondItem="sNT-35-pHr" secondAttribute="trailing" constant="15" id="G2r-MP-acM"/>
<constraint firstItem="sNT-35-pHr" firstAttribute="leading" secondItem="yua-gC-NXd" secondAttribute="leadingMargin" constant="15" id="cLu-TA-9B8"/>
<constraint firstItem="sNT-35-pHr" firstAttribute="centerY" secondItem="yua-gC-NXd" secondAttribute="centerY" id="hcW-FM-nid"/>
<constraint firstAttribute="trailing" secondItem="sNT-35-pHr" secondAttribute="trailing" constant="15" id="q4c-hN-18i"/>
<constraint firstItem="sNT-35-pHr" firstAttribute="leading" secondItem="yua-gC-NXd" secondAttribute="leading" constant="15" id="vvR-BB-5AT"/>
</constraints>
<variation key="default">
<mask key="constraints">
<exclude reference="0eE-Gv-qxf"/>
<exclude reference="6N4-tQ-prP"/>
<exclude reference="G2r-MP-acM"/>
<exclude reference="cLu-TA-9B8"/>
</mask>
</variation>
</tableViewCellContentView>
</tableViewCell>
</cells>
</tableViewSection>
<tableViewSection id="pAt-3V-inZ">
<cells>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="rJA-Oe-IPX">
<rect key="frame" x="0.0" y="159" width="600" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="rJA-Oe-IPX" id="Vze-vB-Kb5">
<rect key="frame" x="0.0" y="0.0" width="600" height="43"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Email" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="U7o-nc-tZu">
<rect key="frame" x="15" y="0.0" width="570" height="43"/>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<textInputTraits key="textInputTraits" autocorrectionType="no"/>
</textField>
</subviews>
<constraints>
<constraint firstItem="U7o-nc-tZu" firstAttribute="top" secondItem="Vze-vB-Kb5" secondAttribute="topMargin" id="7Hg-Uj-ZF9"/>
<constraint firstAttribute="trailing" secondItem="U7o-nc-tZu" secondAttribute="trailing" constant="15" id="EXm-lw-gsW"/>
<constraint firstItem="U7o-nc-tZu" firstAttribute="height" secondItem="Vze-vB-Kb5" secondAttribute="height" id="IBW-25-poh"/>
<constraint firstAttribute="trailingMargin" secondItem="U7o-nc-tZu" secondAttribute="trailing" constant="15" id="K0p-uO-zoC"/>
<constraint firstItem="U7o-nc-tZu" firstAttribute="leading" secondItem="Vze-vB-Kb5" secondAttribute="leading" constant="15" id="LaY-8O-9YT"/>
<constraint firstItem="U7o-nc-tZu" firstAttribute="leading" secondItem="Vze-vB-Kb5" secondAttribute="leadingMargin" constant="15" id="XXR-Fp-EJ7"/>
<constraint firstItem="U7o-nc-tZu" firstAttribute="centerY" secondItem="Vze-vB-Kb5" secondAttribute="centerY" id="i2X-zF-gVr"/>
<constraint firstAttribute="bottomMargin" secondItem="U7o-nc-tZu" secondAttribute="bottom" id="lpm-EZ-gJG"/>
</constraints>
<variation key="default">
<mask key="constraints">
<exclude reference="7Hg-Uj-ZF9"/>
<exclude reference="K0p-uO-zoC"/>
<exclude reference="XXR-Fp-EJ7"/>
<exclude reference="lpm-EZ-gJG"/>
</mask>
</variation>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="GGU-a2-prv">
<rect key="frame" x="0.0" y="203" width="600" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="GGU-a2-prv" id="aZJ-PB-P8J">
<rect key="frame" x="0.0" y="0.0" width="600" height="43"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Password" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="Awl-iN-QFi">
<rect key="frame" x="15" y="0.0" width="570" height="43"/>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<textInputTraits key="textInputTraits" autocorrectionType="no" secureTextEntry="YES"/>
</textField>
</subviews>
<constraints>
<constraint firstItem="Awl-iN-QFi" firstAttribute="height" secondItem="aZJ-PB-P8J" secondAttribute="height" id="3XE-Si-IhW"/>
<constraint firstItem="Awl-iN-QFi" firstAttribute="centerY" secondItem="aZJ-PB-P8J" secondAttribute="centerY" id="55j-uF-4wa"/>
<constraint firstAttribute="trailing" secondItem="Awl-iN-QFi" secondAttribute="trailing" constant="15" id="BiH-3A-kYp"/>
<constraint firstItem="Awl-iN-QFi" firstAttribute="top" secondItem="aZJ-PB-P8J" secondAttribute="topMargin" id="ElK-kj-Jd3"/>
<constraint firstAttribute="bottomMargin" secondItem="Awl-iN-QFi" secondAttribute="bottom" id="M3G-xO-KYo"/>
<constraint firstAttribute="trailingMargin" secondItem="Awl-iN-QFi" secondAttribute="trailing" constant="15" id="pdm-dE-ueY"/>
<constraint firstItem="Awl-iN-QFi" firstAttribute="leading" secondItem="aZJ-PB-P8J" secondAttribute="leadingMargin" constant="15" id="vRw-8q-z4p"/>
<constraint firstItem="Awl-iN-QFi" firstAttribute="leading" secondItem="aZJ-PB-P8J" secondAttribute="leading" constant="15" id="ydE-Jh-Ej5"/>
</constraints>
<variation key="default">
<mask key="constraints">
<exclude reference="ElK-kj-Jd3"/>
<exclude reference="M3G-xO-KYo"/>
<exclude reference="pdm-dE-ueY"/>
<exclude reference="vRw-8q-z4p"/>
</mask>
</variation>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="jqO-Mq-Cnd">
<rect key="frame" x="0.0" y="247" width="600" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="jqO-Mq-Cnd" id="tCu-Tf-cQW">
<rect key="frame" x="0.0" y="0.0" width="600" height="43"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Confirm Password" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="I3H-FZ-oJG">
<rect key="frame" x="15" y="0.0" width="570" height="43"/>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<textInputTraits key="textInputTraits" autocorrectionType="no" secureTextEntry="YES"/>
</textField>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="I3H-FZ-oJG" secondAttribute="trailing" constant="15" id="3Ed-Cy-yxp"/>
<constraint firstItem="I3H-FZ-oJG" firstAttribute="leading" secondItem="tCu-Tf-cQW" secondAttribute="leadingMargin" constant="15" id="4Ag-xS-apM"/>
<constraint firstAttribute="trailingMargin" secondItem="I3H-FZ-oJG" secondAttribute="trailing" constant="15" id="DGY-8e-jA5"/>
<constraint firstItem="I3H-FZ-oJG" firstAttribute="top" secondItem="tCu-Tf-cQW" secondAttribute="topMargin" id="ZUz-gW-lal"/>
<constraint firstItem="I3H-FZ-oJG" firstAttribute="height" secondItem="tCu-Tf-cQW" secondAttribute="height" id="eQ5-Ic-DdD"/>
<constraint firstItem="I3H-FZ-oJG" firstAttribute="leading" secondItem="tCu-Tf-cQW" secondAttribute="leading" constant="15" id="etu-I8-4V9"/>
<constraint firstAttribute="bottomMargin" secondItem="I3H-FZ-oJG" secondAttribute="bottom" id="wbp-P1-eMD"/>
<constraint firstItem="I3H-FZ-oJG" firstAttribute="centerY" secondItem="tCu-Tf-cQW" secondAttribute="centerY" id="xeW-Zz-WlG"/>
</constraints>
<variation key="default">
<mask key="constraints">
<exclude reference="4Ag-xS-apM"/>
<exclude reference="DGY-8e-jA5"/>
<exclude reference="ZUz-gW-lal"/>
<exclude reference="wbp-P1-eMD"/>
</mask>
</variation>
</tableViewCellContentView>
</tableViewCell>
</cells>
</tableViewSection>
<tableViewSection id="XYD-jG-PaH">
<cells>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="E6y-m7-ymm" customClass="ActionCell" customModule="Sample_App_Customers" customModuleProvider="target">
<rect key="frame" x="0.0" y="327" width="600" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="E6y-m7-ymm" id="aVc-vD-cOQ">
<rect key="frame" x="0.0" y="0.0" width="600" height="43"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Sign Up" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VXd-ht-YRy">
<rect key="frame" x="15" y="0.0" width="570" height="43"/>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<activityIndicatorView opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" animating="YES" style="gray" translatesAutoresizingMaskIntoConstraints="NO" id="NL9-Sw-Ntz">
<rect key="frame" x="290" y="12" width="20" height="20"/>
</activityIndicatorView>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="VXd-ht-YRy" secondAttribute="trailing" constant="15" id="4VP-cb-4QJ"/>
<constraint firstItem="VXd-ht-YRy" firstAttribute="height" secondItem="aVc-vD-cOQ" secondAttribute="height" id="9Hr-BL-W5k"/>
<constraint firstItem="NL9-Sw-Ntz" firstAttribute="centerX" secondItem="aVc-vD-cOQ" secondAttribute="centerX" id="DpI-j8-mB7"/>
<constraint firstItem="NL9-Sw-Ntz" firstAttribute="centerY" secondItem="aVc-vD-cOQ" secondAttribute="centerY" id="ewE-4f-ygW"/>
<constraint firstItem="VXd-ht-YRy" firstAttribute="centerY" secondItem="aVc-vD-cOQ" secondAttribute="centerY" id="hxA-zS-hNN"/>
<constraint firstItem="VXd-ht-YRy" firstAttribute="leading" secondItem="aVc-vD-cOQ" secondAttribute="leading" constant="15" id="qHs-Xa-773"/>
</constraints>
</tableViewCellContentView>
<connections>
<outlet property="actionLabel" destination="VXd-ht-YRy" id="Db0-NE-Y6L"/>
<outlet property="loader" destination="NL9-Sw-Ntz" id="ifZ-4e-Cny"/>
</connections>
</tableViewCell>
</cells>
</tableViewSection>
</sections>
<connections>
<outlet property="dataSource" destination="70P-fG-yZe" id="sY3-Ag-ucm"/>
<outlet property="delegate" destination="70P-fG-yZe" id="sUL-9h-abv"/>
</connections>
</tableView>
<navigationItem key="navigationItem" id="Ns5-gz-SQD"/>
<connections>
<outlet property="actionCell" destination="E6y-m7-ymm" id="c5N-Cw-wgY"/>
<outlet property="emailField" destination="U7o-nc-tZu" id="jgD-RM-wC4"/>
<outlet property="firstNameField" destination="2iS-rI-oit" id="IOf-ag-tik"/>
<outlet property="lastNameField" destination="sNT-35-pHr" id="ipM-yN-IjS"/>
<outlet property="passwordConfirmField" destination="I3H-FZ-oJG" id="Tfm-hT-99C"/>
<outlet property="passwordField" destination="Awl-iN-QFi" id="08G-7x-3Fl"/>
</connections>
</tableViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="2sW-Vc-Xmn" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="1885" y="2046"/>
</scene>
</scenes>
</document>
<?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>CFBundleSignature</key>
<string>????</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>
//
// LineItemCell.swift
// Sample App Customers
//
// Created by Shopify.
// Copyright (c) 2016 Shopify Inc. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//
import UIKit
import Buy
class LineItemCell: UITableViewCell {
@IBOutlet private weak var titleLabel: UILabel!
@IBOutlet private weak var subtitleLabel: UILabel!
@IBOutlet private weak var priceLabel: UILabel!
// ----------------------------------
// MARK: - Setters -
//
func setLineItem(item: BUYLineItem) {
self.titleLabel.text = item.title
self.subtitleLabel.text = item.variantTitle
self.priceLabel.text = "$\(item.linePrice)"
}
}
//
// LoginViewController.swift
// Sample App Customers
//
// Created by Shopify.
// Copyright (c) 2016 Shopify Inc. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//
import UIKit
import Buy
class LoginViewController: UITableViewController {
weak var delegate: AuthenticationDelegate?
@IBOutlet private weak var emailField: UITextField!
@IBOutlet private weak var passwordField: UITextField!
@IBOutlet private weak var actionCell: ActionCell!
private var email: String { return self.emailField.text ?? "" }
private var password: String { return self.passwordField.text ?? "" }
// ----------------------------------
// MARK: - View Loading -
//
override func viewDidLoad() {
super.viewDidLoad()
self.actionCell.loading = false
}
// ----------------------------------
// MARK: - Actions -
//
private func loginUser() {
guard !self.actionCell.loading else { return }
let credentials = BUYAccountCredentials(items: [
BUYAccountCredentialItem(email: self.email),
BUYAccountCredentialItem(password: self.password),
])
self.actionCell.loading = true
BUYClient.sharedClient.loginCustomerWithCredentials(credentials) { (customer, token, error) in
self.actionCell.loading = false
if let customer = customer,
let token = token {
self.clear()
self.delegate?.authenticationDidSucceedForCustomer(customer, withToken: token)
} else {
self.delegate?.authenticationDidFailWithError(error)
}
}
}
private func clear() {
self.emailField.text = ""
self.passwordField.text = ""
}
// ----------------------------------
// MARK: - UITableViewDelegate -
//
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if indexPath.section == 1 {
if !self.email.isEmpty &&
!self.password.isEmpty {
self.loginUser()
}
}
tableView.deselectRowAtIndexPath(indexPath, animated: true)
}
}
//
// OrdersViewController.swift
// Sample App Customers
//
// Created by Shopify.
// Copyright (c) 2016 Shopify Inc. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//
import UIKit
import Buy
class OrdersViewController: UIViewController {
@IBOutlet private weak var tableView: UITableView!
private var orders = [BUYOrder]()
private let dateFormatter: NSDateFormatter = {
let f = NSDateFormatter()
f.dateStyle = .MediumStyle
f.timeStyle = .NoStyle
return f
}()
// ----------------------------------
// MARK: - View Loading -
//
override func viewDidLoad() {
super.viewDidLoad()
self.loadOrders()
}
private func loadOrders() {
BUYClient.sharedClient.getOrdersForCustomerWithCallback { (orders, error) in
if let orders = orders {
self.orders = orders
self.tableView.reloadData()
} else {
print("Could not fetch orders: \(error)")
}
}
}
// ----------------------------------
// MARK: - UI Actions -
//
@IBAction func logoutAction(sender: AnyObject) {
self.navigationController?.popViewControllerAnimated(true)
}
}
// ----------------------------------
// MARK: - UITableViewDataSource -
//
extension OrdersViewController: UITableViewDataSource {
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return self.orders.count
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.orders[section].lineItems.count
}
func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
let order = self.orders[section]
return "\(self.dateFormatter.stringFromDate(order.processedAt)) - \(order.name)"
}
func tableView(tableView: UITableView, titleForFooterInSection section: Int) -> String? {
let order = self.orders[section]
return "Order total: $\(order.totalPrice) \(order.currency)"
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! LineItemCell
let lineItem = self.orders[indexPath.section].lineItems[indexPath.row]
cell.setLineItem(lineItem)
return cell
}
}
// ----------------------------------
// MARK: - BUYOrder -
//
extension BUYOrder {
var lineItems: [BUYLineItem] {
var items = self.fulfilledLineItems
items.appendContentsOf(self.unfulfilledLineItems)
return items
}
}
//
// SignupViewController.swift
// Sample App Customers
//
// Created by Shopify.
// Copyright (c) 2016 Shopify Inc. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//
import UIKit
import Buy
class SignupViewController: UITableViewController {
weak var delegate: AuthenticationDelegate?
@IBOutlet private weak var firstNameField: UITextField!
@IBOutlet private weak var lastNameField: UITextField!
@IBOutlet private weak var emailField: UITextField!
@IBOutlet private weak var passwordField: UITextField!
@IBOutlet private weak var passwordConfirmField: UITextField!
@IBOutlet private weak var actionCell: ActionCell!
private var firstName: String { return self.firstNameField.text ?? "" }
private var lastName: String { return self.lastNameField.text ?? "" }
private var email: String { return self.emailField.text ?? "" }
private var password: String { return self.passwordField.text ?? "" }
private var passwordConfirm: String { return self.passwordConfirmField.text ?? "" }
// ----------------------------------
// MARK: - View Loading -
//
override func viewDidLoad() {
super.viewDidLoad()
self.actionCell.loading = false
}
// ----------------------------------
// MARK: - Actions -
//
private func createUser() {
guard !self.actionCell.loading else { return }
let credentials = BUYAccountCredentials(items: [
BUYAccountCredentialItem(firstName: self.firstName),
BUYAccountCredentialItem(lastName: self.lastName),
BUYAccountCredentialItem(email: self.email),
BUYAccountCredentialItem(password: self.password),
BUYAccountCredentialItem(passwordConfirmation: self.passwordConfirm),
])
self.actionCell.loading = true
BUYClient.sharedClient.createCustomerWithCredentials(credentials) { (customer, token, error) in
self.actionCell.loading = false
if let customer = customer,
let token = token {
self.clear()
self.delegate?.authenticationDidSucceedForCustomer(customer, withToken: token)
} else {
self.delegate?.authenticationDidFailWithError(error)
}
}
}
private func clear() {
self.firstNameField.text = ""
self.lastNameField.text = ""
self.emailField.text = ""
self.passwordField.text = ""
self.passwordConfirmField.text = ""
}
// ----------------------------------
// MARK: - UITableViewDelegate -
//
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if indexPath.section == 2 {
if !self.email.isEmpty &&
!self.password.isEmpty &&
!self.firstName.isEmpty &&
!self.lastName.isEmpty &&
!self.passwordConfirm.isEmpty {
self.createUser()
}
}
tableView.deselectRowAtIndexPath(indexPath, animated: true)
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment