buggy version of app with new design

This commit is contained in:
Tina 2017-06-30 18:07:42 -07:00
Родитель ac816ca1b6
Коммит 4f386e875f
44 изменённых файлов: 667 добавлений и 514 удалений

Просмотреть файл

@ -7,17 +7,17 @@
objects = {
/* Begin PBXBuildFile section */
264044071F06D794002657EC /* RootViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 264044061F06D794002657EC /* RootViewController.swift */; };
264044091F06E050002657EC /* ServiceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 264044081F06E050002657EC /* ServiceViewController.swift */; };
265586F11EF88770001914FC /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 265586F01EF88770001914FC /* AppDelegate.swift */; };
265586F31EF88770001914FC /* MasterViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 265586F21EF88770001914FC /* MasterViewController.swift */; };
265586F51EF88770001914FC /* DetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 265586F41EF88770001914FC /* DetailViewController.swift */; };
265586F81EF88770001914FC /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 265586F61EF88770001914FC /* Main.storyboard */; };
265586FA1EF88770001914FC /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 265586F91EF88770001914FC /* Assets.xcassets */; };
265586FD1EF88770001914FC /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 265586FB1EF88770001914FC /* LaunchScreen.storyboard */; };
265587081EF88770001914FC /* demoapp_ios_swiftTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 265587071EF88770001914FC /* demoapp_ios_swiftTests.swift */; };
265587131EF88770001914FC /* demoapp_ios_swiftUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 265587121EF88770001914FC /* demoapp_ios_swiftUITests.swift */; };
265587211EF88861001914FC /* Beacon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 265587201EF88861001914FC /* Beacon.swift */; };
267EDE4A1EFC7C5700AA5444 /* CrashViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 267EDE491EFC7C5700AA5444 /* CrashViewController.swift */; };
267EDE4C1EFC8AF600AA5444 /* AnalyticsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 267EDE4B1EFC8AF600AA5444 /* AnalyticsViewController.swift */; };
2693305B1F059076008D32C8 /* Service.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2693305A1F059076008D32C8 /* Service.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@ -38,10 +38,10 @@
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
264044061F06D794002657EC /* RootViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RootViewController.swift; sourceTree = "<group>"; };
264044081F06E050002657EC /* ServiceViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ServiceViewController.swift; sourceTree = "<group>"; };
265586ED1EF88770001914FC /* demoapp-ios-swift.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "demoapp-ios-swift.app"; sourceTree = BUILT_PRODUCTS_DIR; };
265586F01EF88770001914FC /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
265586F21EF88770001914FC /* MasterViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MasterViewController.swift; sourceTree = "<group>"; };
265586F41EF88770001914FC /* DetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailViewController.swift; sourceTree = "<group>"; };
265586F71EF88770001914FC /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
265586F91EF88770001914FC /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
265586FC1EF88770001914FC /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
@ -52,9 +52,9 @@
2655870E1EF88770001914FC /* demoapp-ios-swiftUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "demoapp-ios-swiftUITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
265587121EF88770001914FC /* demoapp_ios_swiftUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = demoapp_ios_swiftUITests.swift; sourceTree = "<group>"; };
265587141EF88770001914FC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
265587201EF88861001914FC /* Beacon.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Beacon.swift; sourceTree = "<group>"; };
267EDE491EFC7C5700AA5444 /* CrashViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CrashViewController.swift; sourceTree = "<group>"; };
267EDE4B1EFC8AF600AA5444 /* AnalyticsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnalyticsViewController.swift; sourceTree = "<group>"; };
2693305A1F059076008D32C8 /* Service.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Service.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@ -105,16 +105,16 @@
265586EF1EF88770001914FC /* demoapp-ios-swift */ = {
isa = PBXGroup;
children = (
265586F01EF88770001914FC /* AppDelegate.swift */,
265586F21EF88770001914FC /* MasterViewController.swift */,
267EDE491EFC7C5700AA5444 /* CrashViewController.swift */,
265587201EF88861001914FC /* Beacon.swift */,
265586F41EF88770001914FC /* DetailViewController.swift */,
265586FE1EF88770001914FC /* Info.plist */,
267EDE4B1EFC8AF600AA5444 /* AnalyticsViewController.swift */,
265586F61EF88770001914FC /* Main.storyboard */,
265586F01EF88770001914FC /* AppDelegate.swift */,
267EDE491EFC7C5700AA5444 /* CrashViewController.swift */,
264044061F06D794002657EC /* RootViewController.swift */,
2693305A1F059076008D32C8 /* Service.swift */,
264044081F06E050002657EC /* ServiceViewController.swift */,
265586F91EF88770001914FC /* Assets.xcassets */,
265586FB1EF88770001914FC /* LaunchScreen.storyboard */,
265586FE1EF88770001914FC /* Info.plist */,
265586F61EF88770001914FC /* Main.storyboard */,
);
path = "demoapp-ios-swift";
sourceTree = "<group>";
@ -271,11 +271,11 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
265586F51EF88770001914FC /* DetailViewController.swift in Sources */,
265586F31EF88770001914FC /* MasterViewController.swift in Sources */,
2693305B1F059076008D32C8 /* Service.swift in Sources */,
264044071F06D794002657EC /* RootViewController.swift in Sources */,
265586F11EF88770001914FC /* AppDelegate.swift in Sources */,
267EDE4A1EFC7C5700AA5444 /* CrashViewController.swift in Sources */,
265587211EF88861001914FC /* Beacon.swift in Sources */,
264044091F06E050002657EC /* ServiceViewController.swift in Sources */,
267EDE4C1EFC8AF600AA5444 /* AnalyticsViewController.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;

Просмотреть файл

@ -6,6 +6,8 @@ class AnalyticsViewController: UIViewController {
@IBOutlet weak var customEventButton: UIButton!
@IBOutlet weak var customColorButton: UIButton!
var pageIndex: Int!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.

Просмотреть файл

@ -2,28 +2,41 @@
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, UISplitViewControllerDelegate {
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_: UIApplication, didFinishLaunchingWithOptions _: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
let splitViewController = window!.rootViewController as! UISplitViewController
let navigationController = splitViewController.viewControllers[splitViewController.viewControllers.count - 1] as! UINavigationController
navigationController.topViewController!.navigationItem.leftBarButtonItem = splitViewController.displayModeButtonItem
splitViewController.delegate = self
UIPageControl.appearance().pageIndicatorTintColor = UIColor.lightGray
UIPageControl.appearance().currentPageIndicatorTintColor = UIColor.red
return true
}
// MARK: - Split view
func splitViewController(_: UISplitViewController, collapseSecondary secondaryViewController: UIViewController, onto _: UIViewController) -> Bool {
guard let secondaryAsNavController = secondaryViewController as? UINavigationController else { return false }
guard let topAsDetailController = secondaryAsNavController.topViewController as? DetailViewController else { return false }
if topAsDetailController.service == nil {
// Return true to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded.
return true
}
return false
func applicationWillResignActive(_ application: UIApplication) {
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
}
func applicationDidEnterBackground(_ application: UIApplication) {
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}
func applicationWillEnterForeground(_ application: UIApplication) {
// Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
}
func applicationDidBecomeActive(_ application: UIApplication) {
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}
func applicationWillTerminate(_ application: UIApplication) {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
}

Двоичные данные
demoapp-ios-swift/Assets.xcassets/Analytics.imageset/Analytics.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 12 KiB

Двоичные данные
demoapp-ios-swift/Assets.xcassets/Analytics.imageset/Analytics@2x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 29 KiB

Двоичные данные
demoapp-ios-swift/Assets.xcassets/Analytics.imageset/Analytics@3x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 50 KiB

Просмотреть файл

@ -0,0 +1,23 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "Analytics.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "Analytics@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "Analytics@3x.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
demoapp-ios-swift/Assets.xcassets/Build.imageset/Build.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 14 KiB

Двоичные данные
demoapp-ios-swift/Assets.xcassets/Build.imageset/Build@2x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 33 KiB

Двоичные данные
demoapp-ios-swift/Assets.xcassets/Build.imageset/Build@3x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 53 KiB

Просмотреть файл

@ -2,15 +2,17 @@
"images" : [
{
"idiom" : "universal",
"filename" : "Build.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "Build@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "crash.png",
"filename" : "Build@3x.png",
"scale" : "3x"
}
],

Просмотреть файл

@ -0,0 +1,23 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "Crashes.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "Crashes@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "Crashes@3x.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
demoapp-ios-swift/Assets.xcassets/Crashes.imageset/Crashes.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 14 KiB

Двоичные данные
demoapp-ios-swift/Assets.xcassets/Crashes.imageset/Crashes@2x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 32 KiB

Двоичные данные
demoapp-ios-swift/Assets.xcassets/Crashes.imageset/Crashes@3x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 52 KiB

Просмотреть файл

@ -0,0 +1,23 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "Distribute.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "Distribute@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "Distribute@3x.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
demoapp-ios-swift/Assets.xcassets/Distribute.imageset/Distribute.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 12 KiB

Двоичные данные
demoapp-ios-swift/Assets.xcassets/Distribute.imageset/Distribute@2x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 28 KiB

Двоичные данные
demoapp-ios-swift/Assets.xcassets/Distribute.imageset/Distribute@3x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 46 KiB

Просмотреть файл

@ -2,15 +2,17 @@
"images" : [
{
"idiom" : "universal",
"filename" : "MCLogo.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "MCLogo@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "push.png",
"filename" : "MCLogo@3x.png",
"scale" : "3x"
}
],

Двоичные данные
demoapp-ios-swift/Assets.xcassets/MCLogo.imageset/MCLogo.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 2.2 KiB

Двоичные данные
demoapp-ios-swift/Assets.xcassets/MCLogo.imageset/MCLogo@2x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 5.9 KiB

Двоичные данные
demoapp-ios-swift/Assets.xcassets/MCLogo.imageset/MCLogo@3x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 11 KiB

Просмотреть файл

@ -2,15 +2,17 @@
"images" : [
{
"idiom" : "universal",
"filename" : "Push.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "Push@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "build.png",
"filename" : "Push@3x.png",
"scale" : "3x"
}
],

Двоичные данные
demoapp-ios-swift/Assets.xcassets/Push.imageset/Push.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 7.1 KiB

Двоичные данные
demoapp-ios-swift/Assets.xcassets/Push.imageset/Push@2x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 17 KiB

Двоичные данные
demoapp-ios-swift/Assets.xcassets/Push.imageset/Push@3x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 30 KiB

Просмотреть файл

@ -2,15 +2,17 @@
"images" : [
{
"idiom" : "universal",
"filename" : "Test.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "Test@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "distribute.png",
"filename" : "Test@3x.png",
"scale" : "3x"
}
],

Двоичные данные
demoapp-ios-swift/Assets.xcassets/Test.imageset/Test.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 13 KiB

Двоичные данные
demoapp-ios-swift/Assets.xcassets/Test.imageset/Test@2x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 30 KiB

Двоичные данные
demoapp-ios-swift/Assets.xcassets/Test.imageset/Test@3x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 48 KiB

Двоичные данные
demoapp-ios-swift/Assets.xcassets/build.imageset/build.png поставляемый

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 16 KiB

Двоичные данные
demoapp-ios-swift/Assets.xcassets/crash.imageset/crash.png поставляемый

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 17 KiB

Двоичные данные
demoapp-ios-swift/Assets.xcassets/distribute.imageset/distribute.png поставляемый

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 13 KiB

Двоичные данные
demoapp-ios-swift/Assets.xcassets/push.imageset/push.png поставляемый

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 22 KiB

Просмотреть файл

@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "test.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
demoapp-ios-swift/Assets.xcassets/test.imageset/test.png поставляемый

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 33 KiB

Просмотреть файл

@ -1,301 +1,115 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12120" systemVersion="16F73" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="H1p-Uh-vWS">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12120" systemVersion="16F73" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="9ta-Qc-Kmz">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12088"/>
<capability name="Constraints to layout margins" minToolsVersion="6.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--Nav-->
<scene sceneID="pY4-Hu-kfo">
<!--Root View Controller-->
<scene sceneID="4V7-En-rm9">
<objects>
<navigationController title="Nav" id="RMx-3f-FxP" sceneMemberID="viewController">
<navigationBar key="navigationBar" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" id="Pmd-2v-anx">
<rect key="frame" x="0.0" y="0.0" width="1000" height="1000"/>
<autoresizingMask key="autoresizingMask"/>
</navigationBar>
<connections>
<segue destination="7bK-jq-Zjz" kind="relationship" relationship="rootViewController" id="tsl-Nk-0bq"/>
</connections>
</navigationController>
<placeholder placeholderIdentifier="IBFirstResponder" id="8fS-aE-onr" sceneMemberID="firstResponder"/>
<pageViewController storyboardIdentifier="xViewController" autoresizesArchivedViewToFullSize="NO" title="Root View Controller" transitionStyle="scroll" navigationOrientation="horizontal" spineLocation="none" id="OYS-mz-9OC" customClass="RootViewController" customModule="demoapp_ios_swift" customModuleProvider="target" sceneMemberID="viewController"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="nMF-Ye-4nZ" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-38" y="-630"/>
</scene>
<!--Detail-->
<scene sceneID="yUG-lL-AsK">
<objects>
<viewController storyboardIdentifier="detailsViewController" title="Detail" id="JEX-9P-axG" customClass="DetailViewController" customModule="demoapp_ios_swift" customModuleProvider="target" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="SYR-Wa-9uf"/>
<viewControllerLayoutGuide type="bottom" id="GAO-Cl-Wes"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="svH-Pt-448">
<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" text="" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="FUF-iI-T68">
<rect key="frame" x="104" y="107" width="168" height="52"/>
<constraints>
<constraint firstAttribute="height" constant="52" id="XPC-Dd-rph"/>
</constraints>
<fontDescription key="fontDescription" name="Avenir-MediumOblique" family="Avenir" pointSize="40"/>
<color key="textColor" red="7.2976676169999997e-05" green="0.003941781353" blue="0.0039423909040000003" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6Dl-3t-6Pc">
<rect key="frame" x="86" y="423" width="204" height="0.0"/>
<fontDescription key="fontDescription" name="Avenir-Book" family="Avenir" pointSize="19"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="6Ws-cI-QRB">
<rect key="frame" x="60" y="187" width="255" height="198"/>
</imageView>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="awR-1m-9X3">
<rect key="frame" x="67" y="423" width="241" height="128"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="height" constant="128" id="AaK-ia-WzB"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
</textView>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="6Ws-cI-QRB" firstAttribute="centerX" secondItem="6Dl-3t-6Pc" secondAttribute="centerX" id="1i1-wA-2Do"/>
<constraint firstItem="awR-1m-9X3" firstAttribute="top" secondItem="6Ws-cI-QRB" secondAttribute="bottom" constant="38" id="7NR-rJ-3Sc"/>
<constraint firstItem="FUF-iI-T68" firstAttribute="top" secondItem="SYR-Wa-9uf" secondAttribute="bottom" constant="43" id="G47-P8-b7V"/>
<constraint firstItem="awR-1m-9X3" firstAttribute="leading" secondItem="svH-Pt-448" secondAttribute="leadingMargin" constant="51" id="IBm-PV-WFf"/>
<constraint firstItem="6Dl-3t-6Pc" firstAttribute="centerX" secondItem="awR-1m-9X3" secondAttribute="centerX" id="LSz-Vd-UdD"/>
<constraint firstItem="FUF-iI-T68" firstAttribute="centerX" secondItem="6Ws-cI-QRB" secondAttribute="centerX" id="Q6j-CT-JRq"/>
<constraint firstItem="6Dl-3t-6Pc" firstAttribute="leading" secondItem="svH-Pt-448" secondAttribute="leadingMargin" constant="70" id="UEH-Lg-X7j"/>
<constraint firstItem="6Ws-cI-QRB" firstAttribute="top" secondItem="FUF-iI-T68" secondAttribute="bottom" constant="28" id="YEe-LJ-2aV"/>
<constraint firstItem="FUF-iI-T68" firstAttribute="leading" secondItem="svH-Pt-448" secondAttribute="leadingMargin" constant="88" id="gms-qv-IWY"/>
<constraint firstItem="6Ws-cI-QRB" firstAttribute="centerX" secondItem="svH-Pt-448" secondAttribute="centerX" id="haX-pl-Kis"/>
<constraint firstItem="awR-1m-9X3" firstAttribute="top" secondItem="6Dl-3t-6Pc" secondAttribute="top" id="wK0-Sl-CCZ"/>
<constraint firstItem="GAO-Cl-Wes" firstAttribute="top" secondItem="awR-1m-9X3" secondAttribute="bottom" constant="116" id="ye1-DO-WUd"/>
<constraint firstItem="6Ws-cI-QRB" firstAttribute="leading" secondItem="svH-Pt-448" secondAttribute="leadingMargin" constant="44" id="zIr-iL-PUJ"/>
</constraints>
</view>
<toolbarItems/>
<navigationItem key="navigationItem" id="mOI-FS-AaM"/>
<connections>
<outlet property="serviceBlurb" destination="awR-1m-9X3" id="XwW-P9-gx7"/>
<outlet property="serviceImageView" destination="6Ws-cI-QRB" id="FQT-EG-3Jt"/>
<outlet property="serviceTitleLabel" destination="FUF-iI-T68" id="tXL-bg-fQP"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="FJe-Yq-33r" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="784.79999999999995" y="138.98050974512745"/>
</scene>
<!--Split View Controller-->
<scene sceneID="Nki-YV-4Qg">
<objects>
<splitViewController id="H1p-Uh-vWS" sceneMemberID="viewController">
<toolbarItems/>
<connections>
<segue destination="RMx-3f-FxP" kind="relationship" relationship="masterViewController" id="BlO-5A-QYV"/>
<segue destination="vC3-pB-5Vb" kind="relationship" relationship="detailViewController" id="Tll-UG-LXB"/>
</connections>
</splitViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="cZU-Oi-B1e" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-856" y="-330"/>
</scene>
<!--Master-->
<scene sceneID="smW-Zh-WAh">
<objects>
<tableViewController title="Master" clearsSelectionOnViewWillAppear="NO" id="7bK-jq-Zjz" customClass="MasterViewController" customModule="demoapp_ios_swift" customModuleProvider="target" sceneMemberID="viewController">
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="r7i-6Z-zg0">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<prototypes>
<tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="Cell" textLabel="Arm-wq-HPj" style="IBUITableViewCellStyleDefault" id="WCw-Qf-5nD">
<rect key="frame" x="0.0" y="22" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="WCw-Qf-5nD" id="37f-cq-3Eg">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" text="Title" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Arm-wq-HPj">
<rect key="frame" x="15" y="0.0" width="345" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="20"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</label>
</subviews>
</tableViewCellContentView>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</tableViewCell>
</prototypes>
<sections/>
<connections>
<outlet property="dataSource" destination="7bK-jq-Zjz" id="Gho-Na-rnu"/>
<outlet property="delegate" destination="7bK-jq-Zjz" id="RA6-mI-bju"/>
</connections>
</tableView>
<navigationItem key="navigationItem" title="Menu" id="Zdf-7t-Un8"/>
<connections>
<segue destination="eMb-tK-ZRt" kind="showDetail" identifier="showAnalytics" id="mIx-L8-2wh"/>
<segue destination="vC3-pB-5Vb" kind="showDetail" identifier="showDetail" id="MpQ-7G-JGS"/>
<segue destination="ynA-OR-KYa" kind="showDetail" identifier="showCrash" id="obf-AZ-SlY"/>
</connections>
</tableViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="Rux-fX-hf1" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="709" y="-630"/>
</scene>
<!--Analytics-->
<scene sceneID="ONb-QC-eEm">
<objects>
<viewController title="Analytics" id="cgY-gh-2rF" customClass="AnalyticsViewController" customModule="demoapp_ios_swift" customModuleProvider="target" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="Q9S-jz-J2P"/>
<viewControllerLayoutGuide type="bottom" id="SQy-cs-42l"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="Jig-bV-0RV">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="0co-p5-eHN">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="8y6-v9-BVp">
<rect key="frame" x="0.0" y="64" width="375" height="192"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
</imageView>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" fixedFrame="YES" text="Find out all sorts of interesting data about your app, who's using it and where, even how often. " textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="TDJ-By-zKw">
<rect key="frame" x="29" y="286" width="317" height="131"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<fontDescription key="fontDescription" type="system" pointSize="21"/>
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
</textView>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="le2-Hk-3K5">
<rect key="frame" x="29" y="530" width="317" height="60"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="0.01161683537" green="0.47051495310000002" blue="0.84175997970000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<state key="normal" title="Send event with color property">
<color key="titleColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
</state>
<connections>
<action selector="analyticsButtonTapped:" destination="cgY-gh-2rF" eventType="touchUpInside" id="Asd-7r-dBs"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="BND-zS-LNP">
<rect key="frame" x="29" y="454" width="317" height="60"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="0.01161683537" green="0.47051495310000002" blue="0.84175997970000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<state key="normal" title="Send a sample event">
<color key="titleColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
</state>
<connections>
<action selector="analyticsButtonTapped:" destination="cgY-gh-2rF" eventType="touchUpInside" id="4Tv-7F-y5O"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</view>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</view>
<navigationItem key="navigationItem" title="Analytics" id="OE2-gK-hHt"/>
<connections>
<outlet property="customColorButton" destination="le2-Hk-3K5" id="rGk-0R-6GC"/>
<outlet property="customEventButton" destination="BND-zS-LNP" id="wKT-G4-7PP"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="1ir-4C-uI9" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="2568.8000000000002" y="-579.76011994002999"/>
</scene>
<!--Navigation Controller-->
<scene sceneID="r7l-gg-dq7">
<objects>
<navigationController id="vC3-pB-5Vb" sceneMemberID="viewController">
<navigationBar key="navigationBar" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" id="DjV-YW-jjY">
<rect key="frame" x="0.0" y="0.0" width="1000" height="1000"/>
<autoresizingMask key="autoresizingMask"/>
</navigationBar>
<connections>
<segue destination="JEX-9P-axG" kind="relationship" relationship="rootViewController" id="GKi-kA-LjT"/>
</connections>
</navigationController>
<placeholder placeholderIdentifier="IBFirstResponder" id="SLD-UC-DBI" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-45" y="129"/>
<point key="canvasLocation" x="265" y="-693"/>
</scene>
<!--Crashes-->
<scene sceneID="HRL-Kq-PVC">
<scene sceneID="KsX-mS-PC2">
<objects>
<placeholder placeholderIdentifier="IBFirstResponder" id="qsl-dH-5kX" userLabel="First Responder" sceneMemberID="firstResponder"/>
<viewController id="fWM-cU-dWE" customClass="CrashViewController" customModule="demoapp_ios_swift" customModuleProvider="target" sceneMemberID="viewController">
<viewController storyboardIdentifier="crashViewController" title="Crashes" id="iDF-Bi-2w7" customClass="CrashViewController" customModule="demoapp_ios_swift" customModuleProvider="target" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="LFM-69-RK6"/>
<viewControllerLayoutGuide type="bottom" id="SO0-b7-iMr"/>
<viewControllerLayoutGuide type="top" id="HOg-I6-39Y"/>
<viewControllerLayoutGuide type="bottom" id="Ag0-t7-gPu"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="FuD-d5-r4x">
<view key="view" contentMode="scaleToFill" id="Umn-MM-uda">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="E1W-hy-imv">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="Crashes" translatesAutoresizingMaskIntoConstraints="NO" id="gvU-QS-cyl">
<rect key="frame" x="0.0" y="20" width="375" height="235"/>
</imageView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="mVf-36-DV2">
<rect key="frame" x="0.0" y="255" width="375" height="412"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="AUc-wd-MDl">
<rect key="frame" x="0.0" y="64" width="375" height="192"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
</imageView>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" fixedFrame="YES" text="The Crashes service collects crashes from you app, displaying stacktraces and other diagnostic information." textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="I91-EG-ZjF">
<rect key="frame" x="29" y="286" width="317" height="131"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="9e3-aC-9kA">
<rect key="frame" x="29" y="22" width="317" height="131"/>
<string key="text">Collect crashes from all devices, prioritize them based on the number of users seeing the crash, and get the full stack traces to help you fix them.</string>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<fontDescription key="fontDescription" type="system" pointSize="21"/>
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
</textView>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" fixedFrame="YES" text="To send a sample crash, press the button below then reopen this app." textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="MTs-TN-wcn">
<rect key="frame" x="29" y="403" width="317" height="49"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<color key="textColor" red="0.15805003049999999" green="0.1772544086" blue="0.19600221509999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="15"/>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" text="To send a sample crash, press the button below then reopen this app." textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="MTs-TN-wcn">
<rect key="frame" x="29" y="219" width="317" height="49"/>
<constraints>
<constraint firstAttribute="height" constant="49" id="dhx-OD-izX"/>
</constraints>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="16"/>
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
</textView>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Pex-6b-kuu">
<rect key="frame" x="29" y="530" width="317" height="60"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="0.01161683537" green="0.47051495310000002" blue="0.84175997970000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Pex-6b-kuu">
<rect key="frame" x="29" y="297" width="317" height="60"/>
<color key="backgroundColor" red="0.99963909387588501" green="1" blue="0.99975615739822388" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="60" id="gEi-EN-kq9"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="18"/>
<state key="normal" title="Send a sample crash">
<color key="titleColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<color key="titleColor" red="0.12852352857589722" green="0.12865498661994934" blue="0.1285439133644104" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<connections>
<action selector="crashButtonTapped:" destination="fWM-cU-dWE" eventType="touchUpInside" id="gZK-oh-xi3"/>
<action selector="crashButtonTapped:" destination="iDF-Bi-2w7" eventType="touchUpInside" id="PxC-co-nxb"/>
</connections>
</button>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" text="Backed by HockeyApp." textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="N4F-mj-VmU">
<rect key="frame" x="29" y="168" width="270" height="33"/>
<constraints>
<constraint firstAttribute="height" constant="33" id="XtP-Q2-gxQ"/>
</constraints>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<fontDescription key="fontDescription" type="system" pointSize="21"/>
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
</textView>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<color key="backgroundColor" red="0.60922384262084961" green="0.81786954402923584" blue="0.31537514925003052" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="N4F-mj-VmU" firstAttribute="top" secondItem="9e3-aC-9kA" secondAttribute="bottom" constant="15" id="5Qg-JR-O1Z"/>
<constraint firstItem="9e3-aC-9kA" firstAttribute="leading" secondItem="N4F-mj-VmU" secondAttribute="leading" id="AZ5-QT-IvQ"/>
<constraint firstItem="MTs-TN-wcn" firstAttribute="top" secondItem="N4F-mj-VmU" secondAttribute="bottom" constant="18" id="BMU-mj-Eyb"/>
<constraint firstAttribute="trailing" secondItem="N4F-mj-VmU" secondAttribute="trailing" constant="76" id="DxV-rT-t5s"/>
<constraint firstItem="MTs-TN-wcn" firstAttribute="trailing" secondItem="Pex-6b-kuu" secondAttribute="trailing" id="FAv-tN-7Zv"/>
<constraint firstItem="N4F-mj-VmU" firstAttribute="leading" secondItem="MTs-TN-wcn" secondAttribute="leading" id="HzC-T3-ucN"/>
<constraint firstItem="MTs-TN-wcn" firstAttribute="leading" secondItem="Pex-6b-kuu" secondAttribute="leading" id="JkE-HU-Lmp"/>
<constraint firstAttribute="bottom" secondItem="Pex-6b-kuu" secondAttribute="bottom" constant="55" id="WRd-Ag-yiq"/>
<constraint firstItem="9e3-aC-9kA" firstAttribute="centerX" secondItem="mVf-36-DV2" secondAttribute="centerX" id="kPH-MQ-W7H"/>
<constraint firstItem="9e3-aC-9kA" firstAttribute="trailing" secondItem="MTs-TN-wcn" secondAttribute="trailing" id="n9Q-LD-aBJ"/>
<constraint firstItem="Pex-6b-kuu" firstAttribute="top" secondItem="MTs-TN-wcn" secondAttribute="bottom" constant="29" id="npV-k8-P0k"/>
<constraint firstItem="9e3-aC-9kA" firstAttribute="top" secondItem="mVf-36-DV2" secondAttribute="top" constant="22" id="skb-td-YZr"/>
<constraint firstItem="9e3-aC-9kA" firstAttribute="leading" secondItem="mVf-36-DV2" secondAttribute="leading" constant="29" id="u2O-TT-Ocr"/>
</constraints>
</view>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<color key="backgroundColor" red="0.47886949777603149" green="0.67019110918045044" blue="0.20451867580413818" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="mVf-36-DV2" firstAttribute="bottom" secondItem="Ag0-t7-gPu" secondAttribute="top" id="E2n-sd-Y5v"/>
<constraint firstItem="mVf-36-DV2" firstAttribute="top" secondItem="gvU-QS-cyl" secondAttribute="bottom" id="Lmz-fq-9FV"/>
<constraint firstItem="gvU-QS-cyl" firstAttribute="leading" secondItem="mVf-36-DV2" secondAttribute="leading" id="ZnC-1t-JRR"/>
<constraint firstItem="gvU-QS-cyl" firstAttribute="top" secondItem="HOg-I6-39Y" secondAttribute="bottom" id="iw4-UJ-QUw"/>
<constraint firstItem="gvU-QS-cyl" firstAttribute="leading" secondItem="Umn-MM-uda" secondAttribute="leading" id="ttV-i0-UBR"/>
<constraint firstItem="gvU-QS-cyl" firstAttribute="trailing" secondItem="mVf-36-DV2" secondAttribute="trailing" id="x9D-Td-ovc"/>
</constraints>
</view>
<navigationItem key="navigationItem" title="Crashes" id="19D-o7-5QF"/>
<connections>
<outlet property="crashNavigationItem" destination="19D-o7-5QF" id="B6F-a1-drL"/>
<outlet property="fatalErrorButton" destination="Pex-6b-kuu" id="Gup-64-byt"/>
<outlet property="fatalErrorButton" destination="Pex-6b-kuu" id="Pjn-aQ-AdU"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="r43-NZ-dYc" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="2620" y="-1258.0209895052474"/>
<point key="canvasLocation" x="3287" y="-693"/>
</scene>
<!--View Controller-->
<scene sceneID="aRi-fS-arT">
@ -316,44 +130,223 @@
</objects>
<point key="canvasLocation" x="5357.6000000000004" y="-1462.2188905547227"/>
</scene>
<!--Navigation Controller-->
<scene sceneID="453-9O-j0v">
<!--Analytics-->
<scene sceneID="Kb1-oa-ELg">
<objects>
<navigationController automaticallyAdjustsScrollViewInsets="NO" id="eMb-tK-ZRt" sceneMemberID="viewController">
<toolbarItems/>
<navigationBar key="navigationBar" contentMode="scaleToFill" id="ZUi-KI-adY">
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
</navigationBar>
<nil name="viewControllers"/>
<viewController storyboardIdentifier="analyticsViewController" title="Analytics" id="v16-3C-sY2" customClass="AnalyticsViewController" customModule="demoapp_ios_swift" customModuleProvider="target" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="9lu-Hm-jwK"/>
<viewControllerLayoutGuide type="bottom" id="t23-kz-AcJ"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="qyS-zz-Rpm">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="Analytics" translatesAutoresizingMaskIntoConstraints="NO" id="cAX-1i-Hh0">
<rect key="frame" x="0.0" y="20" width="375" height="235"/>
</imageView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="s4I-R8-lwo">
<rect key="frame" x="0.0" y="255" width="375" height="412"/>
<subviews>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="MQ2-n9-Usp">
<rect key="frame" x="29" y="22" width="317" height="181"/>
<string key="text">Get information about the number of daily, weekly and monthly users, session duration, the top devices and more. Use events to collect rich behavioral analytics data.</string>
<color key="textColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
<fontDescription key="fontDescription" type="system" pointSize="21"/>
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
</textView>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="mDd-y6-8pq">
<rect key="frame" x="29" y="297" width="317" height="60"/>
<color key="backgroundColor" red="0.99963909390000005" green="1" blue="0.99975615740000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="60" id="BFO-B4-GHS"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="18"/>
<state key="normal" title="Send event with color property">
<color key="titleColor" red="0.12852352859999999" green="0.12865498659999999" blue="0.12854391339999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<connections>
<action selector="analyticsButtonTapped:" destination="v16-3C-sY2" eventType="touchUpInside" id="5gX-5r-wmn"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Pmz-iQ-7re">
<rect key="frame" x="29" y="229" width="317" height="60"/>
<color key="backgroundColor" red="0.99963909390000005" green="1" blue="0.99975615740000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="60" id="yIj-fU-ViB"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="18"/>
<state key="normal" title="Send a sample event">
<color key="titleColor" red="0.12852352859999999" green="0.12865498659999999" blue="0.12854391339999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<connections>
<action selector="analyticsButtonTapped:" destination="v16-3C-sY2" eventType="touchUpInside" id="zwJ-vD-c2O"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" red="0.99577134847640991" green="0.79369282722473145" blue="0.17036342620849609" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="MQ2-n9-Usp" firstAttribute="leading" secondItem="Pmz-iQ-7re" secondAttribute="leading" id="0bw-0f-URp"/>
<constraint firstItem="MQ2-n9-Usp" firstAttribute="trailing" secondItem="Pmz-iQ-7re" secondAttribute="trailing" id="6Ev-Ct-r0E"/>
<constraint firstItem="Pmz-iQ-7re" firstAttribute="leading" secondItem="mDd-y6-8pq" secondAttribute="leading" id="6if-eQ-6U8"/>
<constraint firstItem="MQ2-n9-Usp" firstAttribute="top" secondItem="s4I-R8-lwo" secondAttribute="top" constant="22" id="U6d-7u-xTK"/>
<constraint firstItem="MQ2-n9-Usp" firstAttribute="leading" secondItem="s4I-R8-lwo" secondAttribute="leading" constant="29" id="XHN-Vr-hTE"/>
<constraint firstItem="mDd-y6-8pq" firstAttribute="top" secondItem="Pmz-iQ-7re" secondAttribute="bottom" constant="8" symbolic="YES" id="a80-Ha-Ezj"/>
<constraint firstAttribute="bottom" secondItem="mDd-y6-8pq" secondAttribute="bottom" constant="55" id="c13-K3-PAe"/>
<constraint firstItem="Pmz-iQ-7re" firstAttribute="trailing" secondItem="mDd-y6-8pq" secondAttribute="trailing" id="tjp-tq-TYQ"/>
<constraint firstItem="Pmz-iQ-7re" firstAttribute="top" secondItem="MQ2-n9-Usp" secondAttribute="bottom" constant="26" id="u6m-hz-fm1"/>
<constraint firstItem="MQ2-n9-Usp" firstAttribute="centerX" secondItem="s4I-R8-lwo" secondAttribute="centerX" id="xrt-PS-JmJ"/>
</constraints>
</view>
</subviews>
<color key="backgroundColor" red="0.99582773447036743" green="0.71483296155929565" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="cAX-1i-Hh0" firstAttribute="leading" secondItem="qyS-zz-Rpm" secondAttribute="leading" id="7Kq-rm-T65"/>
<constraint firstItem="cAX-1i-Hh0" firstAttribute="top" secondItem="9lu-Hm-jwK" secondAttribute="bottom" id="UiI-X2-uNR"/>
<constraint firstItem="s4I-R8-lwo" firstAttribute="bottom" secondItem="t23-kz-AcJ" secondAttribute="top" id="W2V-gp-nZe"/>
<constraint firstItem="cAX-1i-Hh0" firstAttribute="trailing" secondItem="s4I-R8-lwo" secondAttribute="trailing" id="Yx5-Er-eUq"/>
<constraint firstItem="cAX-1i-Hh0" firstAttribute="leading" secondItem="s4I-R8-lwo" secondAttribute="leading" id="ojm-hw-YSG"/>
<constraint firstItem="s4I-R8-lwo" firstAttribute="top" secondItem="cAX-1i-Hh0" secondAttribute="bottom" id="qo7-0g-LjU"/>
</constraints>
</view>
<connections>
<segue destination="cgY-gh-2rF" kind="relationship" relationship="rootViewController" id="WRQ-l0-oac"/>
<outlet property="customColorButton" destination="mDd-y6-8pq" id="vfl-xU-elQ"/>
<outlet property="customEventButton" destination="Pmz-iQ-7re" id="LuL-Bl-DXu"/>
</connections>
</navigationController>
<placeholder placeholderIdentifier="IBFirstResponder" id="qiF-hC-wfe" userLabel="First Responder" sceneMemberID="firstResponder"/>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="lkf-qW-vCs" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="1629.5999999999999" y="-579.76011994002999"/>
<point key="canvasLocation" x="2559" y="-693"/>
</scene>
<!--Navigation Controller-->
<scene sceneID="8CJ-9M-E57">
<!--Service-->
<scene sceneID="6MD-Fq-6Xe">
<objects>
<navigationController automaticallyAdjustsScrollViewInsets="NO" id="ynA-OR-KYa" sceneMemberID="viewController">
<toolbarItems/>
<navigationBar key="navigationBar" contentMode="scaleToFill" id="Flw-AJ-jpm">
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
</navigationBar>
<nil name="viewControllers"/>
<viewController storyboardIdentifier="serviceViewController" title="Service" id="Tfs-g6-k2B" customClass="ServiceViewController" customModule="demoapp_ios_swift" customModuleProvider="target" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="yeo-iX-TVF"/>
<viewControllerLayoutGuide type="bottom" id="fBb-b9-Xja"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="xnE-FP-vEA">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="3Pm-Hp-ksu">
<rect key="frame" x="0.0" y="20" width="375" height="235"/>
<constraints>
<constraint firstAttribute="height" constant="235" id="sXA-SK-duR"/>
</constraints>
</imageView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="UC5-OS-dsX">
<rect key="frame" x="0.0" y="255" width="375" height="412"/>
<subviews>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" text="Put text here" textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="VdH-Sm-rdd">
<rect key="frame" x="29" y="22" width="317" height="181"/>
<constraints>
<constraint firstAttribute="height" constant="181" id="iLu-pj-V4D"/>
</constraints>
<color key="textColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
<fontDescription key="fontDescription" type="system" pointSize="21"/>
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
</textView>
</subviews>
<color key="backgroundColor" red="0.80000001190000003" green="0.80000001190000003" blue="0.80000001190000003" alpha="1" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstItem="VdH-Sm-rdd" firstAttribute="centerX" secondItem="UC5-OS-dsX" secondAttribute="centerX" id="pmR-lb-sNb"/>
<constraint firstItem="VdH-Sm-rdd" firstAttribute="leading" secondItem="UC5-OS-dsX" secondAttribute="leading" constant="29" id="vPf-iA-Yxr"/>
<constraint firstItem="VdH-Sm-rdd" firstAttribute="top" secondItem="UC5-OS-dsX" secondAttribute="top" constant="22" id="xZq-dF-n12"/>
</constraints>
</view>
</subviews>
<color key="backgroundColor" red="0.60000002379999995" green="0.60000002379999995" blue="0.60000002379999995" alpha="1" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstItem="3Pm-Hp-ksu" firstAttribute="leading" secondItem="UC5-OS-dsX" secondAttribute="leading" id="BkK-z7-Gtn"/>
<constraint firstAttribute="trailing" secondItem="3Pm-Hp-ksu" secondAttribute="trailing" id="CU8-HQ-Gzv"/>
<constraint firstItem="UC5-OS-dsX" firstAttribute="top" secondItem="3Pm-Hp-ksu" secondAttribute="bottom" id="Dro-7u-xMb"/>
<constraint firstItem="3Pm-Hp-ksu" firstAttribute="top" secondItem="yeo-iX-TVF" secondAttribute="bottom" id="FeZ-YY-zWR"/>
<constraint firstItem="UC5-OS-dsX" firstAttribute="bottom" secondItem="fBb-b9-Xja" secondAttribute="top" id="PeY-oo-QiN"/>
<constraint firstItem="3Pm-Hp-ksu" firstAttribute="trailing" secondItem="UC5-OS-dsX" secondAttribute="trailing" id="WAR-C9-Y2b"/>
<constraint firstItem="3Pm-Hp-ksu" firstAttribute="leading" secondItem="xnE-FP-vEA" secondAttribute="leading" id="sXU-bk-YaU"/>
</constraints>
</view>
<connections>
<segue destination="fWM-cU-dWE" kind="relationship" relationship="rootViewController" id="DoB-YS-qgg"/>
<outlet property="serviceBackground" destination="UC5-OS-dsX" id="atY-vZ-bXP"/>
<outlet property="serviceImageView" destination="3Pm-Hp-ksu" id="K7i-wu-RIH"/>
<outlet property="serviceText" destination="VdH-Sm-rdd" id="FKO-aw-OQO"/>
</connections>
</navigationController>
<placeholder placeholderIdentifier="IBFirstResponder" id="cNH-Ft-yml" userLabel="First Responder" sceneMemberID="firstResponder"/>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="Z5r-qh-OaP" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="1680.8" y="-1258.0209895052474"/>
<point key="canvasLocation" x="1841" y="-693"/>
</scene>
<!--WelcomeViewController-->
<scene sceneID="Ck0-p5-vM1">
<objects>
<viewController storyboardIdentifier="rootViewController" title="WelcomeViewController" id="9ta-Qc-Kmz" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="Rn1-AF-qdI"/>
<viewControllerLayoutGuide type="bottom" id="6aN-Kc-9RJ"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="tjM-Pv-PKh">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="mbT-0v-N7G">
<rect key="frame" x="0.0" y="166" width="375" height="501"/>
<subviews>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="fmJ-Wu-glg">
<rect key="frame" x="22" y="22" width="317" height="131"/>
<constraints>
<constraint firstAttribute="height" constant="131" id="OAH-hb-pai"/>
</constraints>
<string key="text">Mobile Center is mission control for apps. It brings together multiple services, commonly used for mobile developers, into a single, integrated product.</string>
<color key="textColor" red="0.99963909387588501" green="1" blue="0.99975615739822388" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="20"/>
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
</textView>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" text="Swipe right to learn about our services." textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="6Ji-E7-fPB">
<rect key="frame" x="22" y="172" width="317" height="43"/>
<constraints>
<constraint firstAttribute="height" constant="43" id="k3X-FJ-gX8"/>
</constraints>
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
</textView>
</subviews>
<color key="backgroundColor" red="0.16282719373703003" green="0.16298320889472961" blue="0.16285133361816406" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="fmJ-Wu-glg" firstAttribute="leading" secondItem="mbT-0v-N7G" secondAttribute="leading" constant="22" id="3Sb-Wb-XXU"/>
<constraint firstAttribute="trailing" secondItem="fmJ-Wu-glg" secondAttribute="trailing" constant="36" id="DhP-uH-cAe"/>
<constraint firstItem="fmJ-Wu-glg" firstAttribute="trailing" secondItem="6Ji-E7-fPB" secondAttribute="trailing" id="MEE-QQ-Bt1"/>
<constraint firstItem="fmJ-Wu-glg" firstAttribute="top" secondItem="mbT-0v-N7G" secondAttribute="top" constant="22" id="SMV-K5-rRl"/>
<constraint firstItem="6Ji-E7-fPB" firstAttribute="top" secondItem="fmJ-Wu-glg" secondAttribute="bottom" constant="19" id="Vgi-tz-Scc"/>
<constraint firstItem="fmJ-Wu-glg" firstAttribute="leading" secondItem="6Ji-E7-fPB" secondAttribute="leading" id="zad-KG-Krq"/>
</constraints>
</view>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="MCLogo" translatesAutoresizingMaskIntoConstraints="NO" id="Tro-OG-s0o">
<rect key="frame" x="0.0" y="28" width="375" height="143"/>
</imageView>
</subviews>
<color key="backgroundColor" red="0.82034510374069214" green="0.20258349180221558" blue="0.43179595470428467" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="Tro-OG-s0o" firstAttribute="leading" secondItem="tjM-Pv-PKh" secondAttribute="leading" id="05O-Vi-kgT"/>
<constraint firstItem="mbT-0v-N7G" firstAttribute="top" secondItem="Rn1-AF-qdI" secondAttribute="bottom" constant="146" id="JN6-jf-eo3"/>
<constraint firstItem="Tro-OG-s0o" firstAttribute="top" secondItem="Rn1-AF-qdI" secondAttribute="bottom" constant="8" symbolic="YES" id="LWQ-3m-PtV"/>
<constraint firstItem="mbT-0v-N7G" firstAttribute="bottom" secondItem="6aN-Kc-9RJ" secondAttribute="top" id="Wd0-Jk-fR2"/>
<constraint firstItem="Tro-OG-s0o" firstAttribute="leading" secondItem="mbT-0v-N7G" secondAttribute="leading" id="Z82-bF-psh"/>
<constraint firstItem="Tro-OG-s0o" firstAttribute="trailing" secondItem="mbT-0v-N7G" secondAttribute="trailing" id="ptg-UR-1cE"/>
<constraint firstItem="6aN-Kc-9RJ" firstAttribute="top" secondItem="Tro-OG-s0o" secondAttribute="bottom" constant="496" id="toO-Bq-koP"/>
</constraints>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="tNd-Jy-gaL" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="1096.8" y="-693.10344827586209"/>
</scene>
</scenes>
<inferredMetricsTieBreakers>
<segue reference="MpQ-7G-JGS"/>
</inferredMetricsTieBreakers>
<resources>
<image name="Analytics" width="375" height="235"/>
<image name="Crashes" width="375" height="235"/>
<image name="MCLogo" width="375" height="138"/>
</resources>
</document>

Просмотреть файл

@ -1,56 +0,0 @@
import UIKit
// make an enumeration of service Types
enum ServiceType {
case Build, Test, Distribute, Crash, Analytics, Push
}
// Define a class named service
class service {
// set variables associated with service
var name: String
var type: ServiceType
// Initilization function for the class
init(name: String, type: ServiceType) {
// create instances
self.name = name
self.type = type
}
// switch statement that changes the imageViews depending on serviceType
func serviceImage() -> UIImage? {
switch type {
case .Build:
return UIImage(named: "build")
case .Test:
return UIImage(named: "test")
case .Distribute:
return UIImage(named: "distribute")
case .Push:
return UIImage(named: "push")
default:
return UIImage(named: "crash")
}
}
func serviceBlurb() -> String? {
switch type {
case .Build:
return "Mobile Center can securely build your team's app - simply sign in with Github, Bitbucket, or Visual Studio Team Services and never worry about your local build server again."
case .Test:
return "This is Test"
case .Distribute:
return "This is Distribute"
case .Push:
return "This is Push"
default:
return "Sorry, an error has occured"
}
}
}

Просмотреть файл

@ -4,8 +4,8 @@ import UIKit
class CrashViewController: UIViewController {
@IBOutlet weak var fatalErrorButton: UIButton!
//@IBOutlet weak var nilValueButton: UIButton!
@IBOutlet weak var crashNavigationItem: UINavigationItem!
var pageIndex: Int!
override func viewDidLoad() {
super.viewDidLoad()
@ -17,34 +17,8 @@ class CrashViewController: UIViewController {
}
@IBAction func crashButtonTapped(_ sender: UIButton) {
// switch sender {
// case fatalErrorButton:
print("fatalError crash activated")
// fatalError()
//
// case nilValueButton:
// print("Found nil in optional value crash activated")
// let n: Int? = nil
// let val = n!
//
// default:
// break
}
// @IBAction func crashButtonTapped(_ sender: UIButton) {
// switch sender {
// case fatalErrorButton:
// print("fatalError crash activated")
// fatalError()
//
// case nilValueButton:
// print("Found nil in optional value crash activated")
// let n: Int? = nil
// let val = n!
//
// default:
// break
// }
// }
}

Просмотреть файл

@ -1,82 +0,0 @@
import UIKit
class MasterViewController: UITableViewController {
var detailViewController: DetailViewController?
// construct Data Model array
var services: [service] = []
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view
// Here, we manually add our services to the Data Model
services.append(service(name: "Build", type: ServiceType.Build))
services.append(service(name: "Test", type: ServiceType.Test))
services.append(service(name: "Distribute", type: ServiceType.Distribute))
services.append(service(name: "Crash", type: ServiceType.Crash))
services.append(service(name: "Analytics", type: ServiceType.Analytics))
services.append(service(name: "Push", type: ServiceType.Push))
if let split = splitViewController {
let controllers = split.viewControllers
detailViewController = (controllers[controllers.count - 1] as! UINavigationController).topViewController as? DetailViewController
}
}
override func viewWillAppear(_ animated: Bool) {
clearsSelectionOnViewWillAppear = splitViewController!.isCollapsed
super.viewWillAppear(animated)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: - Segues
override func prepare(for segue: UIStoryboardSegue, sender _: Any?) {
if segue.identifier == "showDetail" {
if let indexPath = tableView.indexPathForSelectedRow {
let selectedservice = services[indexPath.row] as service
let controller = (segue.destination as! UINavigationController).topViewController as! DetailViewController
controller.service = selectedservice
controller.navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem
controller.navigationItem.leftItemsSupplementBackButton = true
}
}
}
// MARK: - Table View
override func numberOfSections(in _: UITableView) -> Int {
return 1
}
override func tableView(_: UITableView, numberOfRowsInSection _: Int) -> Int {
return services.count
}
override func tableView(_: UITableView, didSelectRowAt indexPath: IndexPath) {
let row = indexPath.row
switch row {
case 3:
performSegue(withIdentifier: "showCrash", sender: self)
case 4:
performSegue(withIdentifier: "showAnalytics", sender: self)
default:
performSegue(withIdentifier: "showDetail", sender: self)
}
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
let service = services[indexPath.row]
cell.textLabel?.text = service.name
// Configure cell
return cell
}
}

Просмотреть файл

@ -0,0 +1,119 @@
import UIKit
class RootViewController: UIPageViewController, UIPageViewControllerDataSource {
var pageViewController: UIPageViewController?
var services: [Service] = []
//MARK: - viewDidLoad
override func viewDidLoad() {
super.viewDidLoad()
// Here, we manually add our services to the Data Model
services.append(Service(name: "Build", type: ServiceType.Build))
services.append(Service(name: "Test", type: ServiceType.Test))
services.append(Service(name: "Distribute", type: ServiceType.Distribute))
services.append(Service(name: "Crash", type: ServiceType.Crash))
services.append(Service(name: "Analytics", type: ServiceType.Analytics))
services.append(Service(name: "Push", type: ServiceType.Push))
self.pageViewController = self.storyboard?.instantiateViewController(withIdentifier: "rootViewController") as? UIPageViewController
self.pageViewController?.dataSource = self
let startingViewController: UIViewController = self.viewControllerAtIndex(0, storyboard: self.storyboard!)
let viewControllers = [startingViewController]
self.pageViewController!.setViewControllers(viewControllers, direction: .forward, animated: false, completion: {done in })
self.addChildViewController(self.pageViewController!)
self.view.addSubview(self.pageViewController!.view)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// returns the appropriate viewController depending on the index of the services
func viewControllerAtIndex(_ index: Int, storyboard: UIStoryboard) -> UIViewController {
// Create a new view controller and pass suitable data.
switch services[index].type{
case .Crash:
let crashViewController = self.storyboard?.instantiateViewController(withIdentifier: "crashViewController") as! CrashViewController
return crashViewController
case .Analytics:
let analyticsViewController = self.storyboard?.instantiateViewController(withIdentifier: "analyticsViewController") as! AnalyticsViewController
return analyticsViewController
default:
let selectedservice = services[index] as Service
let serviceViewController = self.storyboard?.instantiateViewController(withIdentifier: "serviceViewController") as! ServiceViewController
serviceViewController.service = selectedservice
serviceViewController.pageIndex = index
return serviceViewController
}
}
func indexOfViewController(_ viewController: UIViewController) -> Int {
// Return the index of the given data view controller.
// For simplicity, this implementation uses a static array of model objects and the view controller stores the model object; you can therefore use the model object to identify the index.
var index: Int
if viewController is CrashViewController {
index = 3
}
else if viewController is AnalyticsViewController {
index = 4
}
else {
let viewController = viewController as! ServiceViewController
index = viewController.pageIndex as Int
}
return index
}
//MARK: - UIPageViewController protocol functions
// Ensure that there is a page to swipe to and from
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
var index = self.indexOfViewController(viewController)
if (index == 0) || (index == NSNotFound) {
return nil
}
index -= 1
return self.viewControllerAtIndex(index, storyboard: viewController.storyboard!)
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
var index = self.indexOfViewController(viewController)
if (index == 0) || (index == NSNotFound) {
return nil
}
index += 1
return self.viewControllerAtIndex(index, storyboard: viewController.storyboard!)
}
func presentationCount(for pageViewController: UIPageViewController) -> Int {
return self.services.count
}
func presentationIndex(for pageViewController: UIPageViewController) -> Int {
return 0
}
}

Просмотреть файл

@ -0,0 +1,94 @@
import UIKit
// make an enumeration of service Types
enum ServiceType {
case Build, Test, Distribute, Crash, Analytics, Push
}
// Define a class named service
class Service {
// set variables associated with service
var name: String
var type: ServiceType
// Initilization function for the class
init(name: String, type: ServiceType) {
// create instances
self.name = name
self.type = type
}
// switch statement that changes the imageViews depending on serviceType
func getserviceImage() -> UIImage? {
switch type {
case .Build:
return UIImage(named: "Build")
case .Test:
return UIImage(named: "Test")
case .Distribute:
return UIImage(named: "Distribute")
case .Push:
return UIImage(named: "Push")
default:
return UIImage(named: "Crashes")
}
}
func getserviceBlurb() -> String? {
switch type {
case .Build:
return "Mobile Center can securely build your team's app - simply sign in with Github, Bitbucket, or Visual Studio Team Services and never worry about your local build server again."
case .Test:
return "This is Test"
case .Distribute:
return "This is Distribute"
case .Push:
return "This is Push"
default:
return "Sorry, an error has occured"
}
}
func getserviceColor() -> UIColor {
switch type {
case .Build:
return UIColor(hex: "0078D7")
case .Test:
return UIColor(hex: "1FAECE")
case .Distribute:
return UIColor(hex: "44B8A8")
case .Push:
return UIColor(hex: "F56D4F")
default:
return UIColor(hex: "000000")
}
}
}
// helper function to get UIColor from given hex number
extension UIColor {
convenience init(hex: String) {
let scanner = Scanner(string: hex)
scanner.scanLocation = 0
var rgbValue: UInt64 = 0
scanner.scanHexInt64(&rgbValue)
let r = (rgbValue & 0xff0000) >> 16
let g = (rgbValue & 0xff00) >> 8
let b = rgbValue & 0xff
self.init(
red: CGFloat(r) / 0xff,
green: CGFloat(g) / 0xff,
blue: CGFloat(b) / 0xff, alpha: 1
)
}
}

Просмотреть файл

@ -0,0 +1,40 @@
import UIKit
class ServiceViewController: UIViewController {
@IBOutlet weak var serviceText: UITextView!
@IBOutlet weak var serviceBackground: UIView!
@IBOutlet weak var serviceImageView: UIImageView!
var pageIndex: Int!
func configureView() {
// Update the user interface for the detail item.
if service != nil {
if let blurb = serviceText {
blurb.text = service?.getserviceBlurb()
serviceImageView.image = service?.getserviceImage()
serviceBackground.backgroundColor = service?.getserviceColor()
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
configureView()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
var service: Service? {
didSet {
// Update the view.
configureView()
}
}
}