├── .gitignore
├── README.md
├── TodoList.xcodeproj
├── project.xcworkspace
│ └── contents.xcworkspacedata
└── project.pbxproj
├── TodoList
├── AppDelegate.swift
├── Images.xcassets
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ └── LaunchImage.launchimage
│ │ └── Contents.json
├── NewTodoViewController.swift
├── Info.plist
├── ListViewController.swift
└── Base.lproj
│ └── Main.storyboard
└── TodoListTests
├── Info.plist
└── TodoListTests.swift
/.gitignore:
--------------------------------------------------------------------------------
1 | build
2 | xcuserdata
3 | *.pbxuser
4 | archives
5 | project.xcworkspace/
6 | .DS_Store
7 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | TodoList
2 | ========
3 |
4 | A sample todo list application written in Swift
5 |
6 | This application was written for a workshop at gSchool.
7 |
--------------------------------------------------------------------------------
/TodoList.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/TodoList/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 |
3 | @UIApplicationMain
4 | class AppDelegate: UIResponder, UIApplicationDelegate {
5 |
6 | var window: UIWindow?
7 |
8 | func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {
9 | return true
10 | }
11 | }
12 |
13 |
--------------------------------------------------------------------------------
/TodoListTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | com.gospotcheck.$(PRODUCT_NAME:rfc1034identifier)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/TodoListTests/TodoListTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // TodoListTests.swift
3 | // TodoListTests
4 | //
5 | // Created by Sean Dougherty on 8/19/14.
6 | // Copyright (c) 2014 GoSpotCheck. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import XCTest
11 |
12 | class TodoListTests: XCTestCase {
13 |
14 | override func setUp() {
15 | super.setUp()
16 | // Put setup code here. This method is called before the invocation of each test method in the class.
17 | }
18 |
19 | override func tearDown() {
20 | // Put teardown code here. This method is called after the invocation of each test method in the class.
21 | super.tearDown()
22 | }
23 |
24 | func testExample() {
25 | // This is an example of a functional test case.
26 | XCTAssert(true, "Pass")
27 | }
28 |
29 | func testPerformanceExample() {
30 | // This is an example of a performance test case.
31 | self.measureBlock() {
32 | // Put the code you want to measure the time of here.
33 | }
34 | }
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/TodoList/Images.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "29x29",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "40x40",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "60x60",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "ipad",
20 | "size" : "29x29",
21 | "scale" : "1x"
22 | },
23 | {
24 | "idiom" : "ipad",
25 | "size" : "29x29",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "ipad",
30 | "size" : "40x40",
31 | "scale" : "1x"
32 | },
33 | {
34 | "idiom" : "ipad",
35 | "size" : "40x40",
36 | "scale" : "2x"
37 | },
38 | {
39 | "idiom" : "ipad",
40 | "size" : "76x76",
41 | "scale" : "1x"
42 | },
43 | {
44 | "idiom" : "ipad",
45 | "size" : "76x76",
46 | "scale" : "2x"
47 | }
48 | ],
49 | "info" : {
50 | "version" : 1,
51 | "author" : "xcode"
52 | }
53 | }
--------------------------------------------------------------------------------
/TodoList/NewTodoViewController.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 |
3 | protocol NewTodoDelegate {
4 | func todoSaved(todo:String)
5 | }
6 |
7 | class NewTodoViewController: UIViewController {
8 |
9 | @IBOutlet var input: UITextField!
10 | var delegate:NewTodoDelegate!
11 |
12 | override func viewDidLoad() {
13 | super.viewDidLoad()
14 | self.title = "Add Todo"
15 | self.navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Cancel, target: self, action: "cancelTapped:")
16 | self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Save, target: self, action: "saveTapped:")
17 | }
18 |
19 | override func viewDidAppear(animated: Bool) {
20 | super.viewDidAppear(animated)
21 | input.becomeFirstResponder()
22 | }
23 |
24 | @IBAction func cancelTapped(AnyObject) {
25 | dismissViewControllerAnimated(true, completion: nil)
26 | }
27 |
28 | @IBAction func saveTapped(AnyObject) {
29 | if let totoDelegate = delegate {
30 | delegate.todoSaved(input.text)
31 | }
32 | dismissViewControllerAnimated(true, completion: { () -> Void in
33 | self.delegate = nil
34 | })
35 | }
36 | }
--------------------------------------------------------------------------------
/TodoList/Images.xcassets/LaunchImage.launchimage/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "orientation" : "portrait",
5 | "idiom" : "iphone",
6 | "extent" : "full-screen",
7 | "minimum-system-version" : "7.0",
8 | "scale" : "2x"
9 | },
10 | {
11 | "orientation" : "portrait",
12 | "idiom" : "iphone",
13 | "subtype" : "retina4",
14 | "extent" : "full-screen",
15 | "minimum-system-version" : "7.0",
16 | "scale" : "2x"
17 | },
18 | {
19 | "orientation" : "portrait",
20 | "idiom" : "ipad",
21 | "extent" : "full-screen",
22 | "minimum-system-version" : "7.0",
23 | "scale" : "1x"
24 | },
25 | {
26 | "orientation" : "landscape",
27 | "idiom" : "ipad",
28 | "extent" : "full-screen",
29 | "minimum-system-version" : "7.0",
30 | "scale" : "1x"
31 | },
32 | {
33 | "orientation" : "portrait",
34 | "idiom" : "ipad",
35 | "extent" : "full-screen",
36 | "minimum-system-version" : "7.0",
37 | "scale" : "2x"
38 | },
39 | {
40 | "orientation" : "landscape",
41 | "idiom" : "ipad",
42 | "extent" : "full-screen",
43 | "minimum-system-version" : "7.0",
44 | "scale" : "2x"
45 | }
46 | ],
47 | "info" : {
48 | "version" : 1,
49 | "author" : "xcode"
50 | }
51 | }
--------------------------------------------------------------------------------
/TodoList/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | com.gospotcheck.$(PRODUCT_NAME:rfc1034identifier)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 | LSRequiresIPhoneOS
24 |
25 | UIMainStoryboardFile
26 | Main
27 | UIRequiredDeviceCapabilities
28 |
29 | armv7
30 |
31 | UISupportedInterfaceOrientations
32 |
33 | UIInterfaceOrientationPortrait
34 | UIInterfaceOrientationLandscapeLeft
35 | UIInterfaceOrientationLandscapeRight
36 |
37 | UISupportedInterfaceOrientations~ipad
38 |
39 | UIInterfaceOrientationPortrait
40 | UIInterfaceOrientationPortraitUpsideDown
41 | UIInterfaceOrientationLandscapeLeft
42 | UIInterfaceOrientationLandscapeRight
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/TodoList/ListViewController.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 |
3 | class ListViewController: UITableViewController, NewTodoDelegate {
4 |
5 | var items = ["Mow the lawn", "Get a haircut", "Take a nap"]
6 |
7 | override func viewDidLoad() {
8 | super.viewDidLoad()
9 |
10 | tableView.allowsSelection = false
11 | self.title = "gTodo"
12 | setupNavItems()
13 | }
14 |
15 | func setupNavItems() {
16 | navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Edit, target: self, action: "editTableTapped:")
17 | navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Add, target: self, action: "addItemTapped:")
18 | }
19 |
20 | @IBAction func editTableTapped(AnyObject) {
21 | tableView.setEditing(!tableView.editing, animated: true)
22 | }
23 |
24 | @IBAction func addItemTapped(AnyObject) {
25 | let storyboard = UIStoryboard(name: "Main", bundle: nil)
26 | let navController: UINavigationController = storyboard.instantiateViewControllerWithIdentifier("NewTodoViewController") as UINavigationController
27 | let todoController: NewTodoViewController = navController.topViewController as NewTodoViewController
28 | todoController.delegate = self
29 |
30 | presentViewController(navController, animated: true, completion: nil)
31 | }
32 |
33 | func todoSaved(todo: String) {
34 | items.insert(todo, atIndex: 0)
35 |
36 | tableView.beginUpdates()
37 | tableView.insertRowsAtIndexPaths([NSIndexPath(forRow: 0, inSection: 0)], withRowAnimation: .Top)
38 | tableView.endUpdates()
39 | }
40 |
41 | override func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
42 | return items.count
43 | }
44 |
45 | override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
46 | let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "ListCell")
47 |
48 | cell.textLabel.text = items[indexPath.row]
49 |
50 | return cell
51 | }
52 |
53 | override func tableView(tableView: UITableView!, canEditRowAtIndexPath indexPath: NSIndexPath!) -> Bool {
54 | return true
55 | }
56 |
57 | override func tableView(tableView: UITableView!, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath!) {
58 | switch editingStyle {
59 | case .Delete:
60 | items.removeAtIndex(indexPath.row)
61 | tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Top)
62 | case .Insert, .None:
63 | println("Nothing to do")
64 | }
65 | }
66 |
67 | override func tableView(tableView: UITableView!, canMoveRowAtIndexPath indexPath: NSIndexPath!) -> Bool {
68 | return true
69 | }
70 |
71 | override func tableView(tableView: UITableView!, moveRowAtIndexPath sourceIndexPath: NSIndexPath!, toIndexPath destinationIndexPath: NSIndexPath!) {
72 | let toDo = items[sourceIndexPath.row]
73 | items.removeAtIndex(sourceIndexPath.row)
74 | items.insert(toDo, atIndex: destinationIndexPath.row)
75 | }
76 | }
--------------------------------------------------------------------------------
/TodoList/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
--------------------------------------------------------------------------------
/TodoList.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 141DEE6719A385B6009C0CD9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 141DEE6619A385B6009C0CD9 /* AppDelegate.swift */; };
11 | 141DEE6C19A385B6009C0CD9 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 141DEE6A19A385B6009C0CD9 /* Main.storyboard */; };
12 | 141DEE6E19A385B6009C0CD9 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 141DEE6D19A385B6009C0CD9 /* Images.xcassets */; };
13 | 141DEE7A19A385B6009C0CD9 /* TodoListTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 141DEE7919A385B6009C0CD9 /* TodoListTests.swift */; };
14 | 141DEE8419A3885F009C0CD9 /* ListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 141DEE8319A3885F009C0CD9 /* ListViewController.swift */; };
15 | 145AD09919A3F335006573B9 /* NewTodoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 145AD09819A3F335006573B9 /* NewTodoViewController.swift */; };
16 | /* End PBXBuildFile section */
17 |
18 | /* Begin PBXContainerItemProxy section */
19 | 141DEE7419A385B6009C0CD9 /* PBXContainerItemProxy */ = {
20 | isa = PBXContainerItemProxy;
21 | containerPortal = 141DEE5919A385B5009C0CD9 /* Project object */;
22 | proxyType = 1;
23 | remoteGlobalIDString = 141DEE6019A385B6009C0CD9;
24 | remoteInfo = TodoList;
25 | };
26 | /* End PBXContainerItemProxy section */
27 |
28 | /* Begin PBXFileReference section */
29 | 141DEE6119A385B6009C0CD9 /* TodoList.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TodoList.app; sourceTree = BUILT_PRODUCTS_DIR; };
30 | 141DEE6519A385B6009C0CD9 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
31 | 141DEE6619A385B6009C0CD9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
32 | 141DEE6B19A385B6009C0CD9 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
33 | 141DEE6D19A385B6009C0CD9 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; };
34 | 141DEE7319A385B6009C0CD9 /* TodoListTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TodoListTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
35 | 141DEE7819A385B6009C0CD9 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
36 | 141DEE7919A385B6009C0CD9 /* TodoListTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TodoListTests.swift; sourceTree = ""; };
37 | 141DEE8319A3885F009C0CD9 /* ListViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListViewController.swift; sourceTree = ""; };
38 | 145AD09819A3F335006573B9 /* NewTodoViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NewTodoViewController.swift; sourceTree = ""; };
39 | /* End PBXFileReference section */
40 |
41 | /* Begin PBXFrameworksBuildPhase section */
42 | 141DEE5E19A385B6009C0CD9 /* Frameworks */ = {
43 | isa = PBXFrameworksBuildPhase;
44 | buildActionMask = 2147483647;
45 | files = (
46 | );
47 | runOnlyForDeploymentPostprocessing = 0;
48 | };
49 | 141DEE7019A385B6009C0CD9 /* Frameworks */ = {
50 | isa = PBXFrameworksBuildPhase;
51 | buildActionMask = 2147483647;
52 | files = (
53 | );
54 | runOnlyForDeploymentPostprocessing = 0;
55 | };
56 | /* End PBXFrameworksBuildPhase section */
57 |
58 | /* Begin PBXGroup section */
59 | 141DEE5819A385B5009C0CD9 = {
60 | isa = PBXGroup;
61 | children = (
62 | 141DEE6319A385B6009C0CD9 /* TodoList */,
63 | 141DEE7619A385B6009C0CD9 /* TodoListTests */,
64 | 141DEE6219A385B6009C0CD9 /* Products */,
65 | );
66 | sourceTree = "";
67 | };
68 | 141DEE6219A385B6009C0CD9 /* Products */ = {
69 | isa = PBXGroup;
70 | children = (
71 | 141DEE6119A385B6009C0CD9 /* TodoList.app */,
72 | 141DEE7319A385B6009C0CD9 /* TodoListTests.xctest */,
73 | );
74 | name = Products;
75 | sourceTree = "";
76 | };
77 | 141DEE6319A385B6009C0CD9 /* TodoList */ = {
78 | isa = PBXGroup;
79 | children = (
80 | 141DEE6619A385B6009C0CD9 /* AppDelegate.swift */,
81 | 141DEE6A19A385B6009C0CD9 /* Main.storyboard */,
82 | 141DEE6D19A385B6009C0CD9 /* Images.xcassets */,
83 | 141DEE6419A385B6009C0CD9 /* Supporting Files */,
84 | 141DEE8319A3885F009C0CD9 /* ListViewController.swift */,
85 | 145AD09819A3F335006573B9 /* NewTodoViewController.swift */,
86 | );
87 | path = TodoList;
88 | sourceTree = "";
89 | };
90 | 141DEE6419A385B6009C0CD9 /* Supporting Files */ = {
91 | isa = PBXGroup;
92 | children = (
93 | 141DEE6519A385B6009C0CD9 /* Info.plist */,
94 | );
95 | name = "Supporting Files";
96 | sourceTree = "";
97 | };
98 | 141DEE7619A385B6009C0CD9 /* TodoListTests */ = {
99 | isa = PBXGroup;
100 | children = (
101 | 141DEE7919A385B6009C0CD9 /* TodoListTests.swift */,
102 | 141DEE7719A385B6009C0CD9 /* Supporting Files */,
103 | );
104 | path = TodoListTests;
105 | sourceTree = "";
106 | };
107 | 141DEE7719A385B6009C0CD9 /* Supporting Files */ = {
108 | isa = PBXGroup;
109 | children = (
110 | 141DEE7819A385B6009C0CD9 /* Info.plist */,
111 | );
112 | name = "Supporting Files";
113 | sourceTree = "";
114 | };
115 | /* End PBXGroup section */
116 |
117 | /* Begin PBXNativeTarget section */
118 | 141DEE6019A385B6009C0CD9 /* TodoList */ = {
119 | isa = PBXNativeTarget;
120 | buildConfigurationList = 141DEE7D19A385B6009C0CD9 /* Build configuration list for PBXNativeTarget "TodoList" */;
121 | buildPhases = (
122 | 141DEE5D19A385B6009C0CD9 /* Sources */,
123 | 141DEE5E19A385B6009C0CD9 /* Frameworks */,
124 | 141DEE5F19A385B6009C0CD9 /* Resources */,
125 | );
126 | buildRules = (
127 | );
128 | dependencies = (
129 | );
130 | name = TodoList;
131 | productName = TodoList;
132 | productReference = 141DEE6119A385B6009C0CD9 /* TodoList.app */;
133 | productType = "com.apple.product-type.application";
134 | };
135 | 141DEE7219A385B6009C0CD9 /* TodoListTests */ = {
136 | isa = PBXNativeTarget;
137 | buildConfigurationList = 141DEE8019A385B6009C0CD9 /* Build configuration list for PBXNativeTarget "TodoListTests" */;
138 | buildPhases = (
139 | 141DEE6F19A385B6009C0CD9 /* Sources */,
140 | 141DEE7019A385B6009C0CD9 /* Frameworks */,
141 | 141DEE7119A385B6009C0CD9 /* Resources */,
142 | );
143 | buildRules = (
144 | );
145 | dependencies = (
146 | 141DEE7519A385B6009C0CD9 /* PBXTargetDependency */,
147 | );
148 | name = TodoListTests;
149 | productName = TodoListTests;
150 | productReference = 141DEE7319A385B6009C0CD9 /* TodoListTests.xctest */;
151 | productType = "com.apple.product-type.bundle.unit-test";
152 | };
153 | /* End PBXNativeTarget section */
154 |
155 | /* Begin PBXProject section */
156 | 141DEE5919A385B5009C0CD9 /* Project object */ = {
157 | isa = PBXProject;
158 | attributes = {
159 | LastUpgradeCheck = 0600;
160 | ORGANIZATIONNAME = GoSpotCheck;
161 | TargetAttributes = {
162 | 141DEE6019A385B6009C0CD9 = {
163 | CreatedOnToolsVersion = 6.0;
164 | };
165 | 141DEE7219A385B6009C0CD9 = {
166 | CreatedOnToolsVersion = 6.0;
167 | TestTargetID = 141DEE6019A385B6009C0CD9;
168 | };
169 | };
170 | };
171 | buildConfigurationList = 141DEE5C19A385B5009C0CD9 /* Build configuration list for PBXProject "TodoList" */;
172 | compatibilityVersion = "Xcode 3.2";
173 | developmentRegion = English;
174 | hasScannedForEncodings = 0;
175 | knownRegions = (
176 | en,
177 | Base,
178 | );
179 | mainGroup = 141DEE5819A385B5009C0CD9;
180 | productRefGroup = 141DEE6219A385B6009C0CD9 /* Products */;
181 | projectDirPath = "";
182 | projectRoot = "";
183 | targets = (
184 | 141DEE6019A385B6009C0CD9 /* TodoList */,
185 | 141DEE7219A385B6009C0CD9 /* TodoListTests */,
186 | );
187 | };
188 | /* End PBXProject section */
189 |
190 | /* Begin PBXResourcesBuildPhase section */
191 | 141DEE5F19A385B6009C0CD9 /* Resources */ = {
192 | isa = PBXResourcesBuildPhase;
193 | buildActionMask = 2147483647;
194 | files = (
195 | 141DEE6C19A385B6009C0CD9 /* Main.storyboard in Resources */,
196 | 141DEE6E19A385B6009C0CD9 /* Images.xcassets in Resources */,
197 | );
198 | runOnlyForDeploymentPostprocessing = 0;
199 | };
200 | 141DEE7119A385B6009C0CD9 /* Resources */ = {
201 | isa = PBXResourcesBuildPhase;
202 | buildActionMask = 2147483647;
203 | files = (
204 | );
205 | runOnlyForDeploymentPostprocessing = 0;
206 | };
207 | /* End PBXResourcesBuildPhase section */
208 |
209 | /* Begin PBXSourcesBuildPhase section */
210 | 141DEE5D19A385B6009C0CD9 /* Sources */ = {
211 | isa = PBXSourcesBuildPhase;
212 | buildActionMask = 2147483647;
213 | files = (
214 | 141DEE6719A385B6009C0CD9 /* AppDelegate.swift in Sources */,
215 | 145AD09919A3F335006573B9 /* NewTodoViewController.swift in Sources */,
216 | 141DEE8419A3885F009C0CD9 /* ListViewController.swift in Sources */,
217 | );
218 | runOnlyForDeploymentPostprocessing = 0;
219 | };
220 | 141DEE6F19A385B6009C0CD9 /* Sources */ = {
221 | isa = PBXSourcesBuildPhase;
222 | buildActionMask = 2147483647;
223 | files = (
224 | 141DEE7A19A385B6009C0CD9 /* TodoListTests.swift in Sources */,
225 | );
226 | runOnlyForDeploymentPostprocessing = 0;
227 | };
228 | /* End PBXSourcesBuildPhase section */
229 |
230 | /* Begin PBXTargetDependency section */
231 | 141DEE7519A385B6009C0CD9 /* PBXTargetDependency */ = {
232 | isa = PBXTargetDependency;
233 | target = 141DEE6019A385B6009C0CD9 /* TodoList */;
234 | targetProxy = 141DEE7419A385B6009C0CD9 /* PBXContainerItemProxy */;
235 | };
236 | /* End PBXTargetDependency section */
237 |
238 | /* Begin PBXVariantGroup section */
239 | 141DEE6A19A385B6009C0CD9 /* Main.storyboard */ = {
240 | isa = PBXVariantGroup;
241 | children = (
242 | 141DEE6B19A385B6009C0CD9 /* Base */,
243 | );
244 | name = Main.storyboard;
245 | sourceTree = "";
246 | };
247 | /* End PBXVariantGroup section */
248 |
249 | /* Begin XCBuildConfiguration section */
250 | 141DEE7B19A385B6009C0CD9 /* Debug */ = {
251 | isa = XCBuildConfiguration;
252 | buildSettings = {
253 | ALWAYS_SEARCH_USER_PATHS = NO;
254 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
255 | CLANG_CXX_LIBRARY = "libc++";
256 | CLANG_ENABLE_MODULES = YES;
257 | CLANG_ENABLE_OBJC_ARC = YES;
258 | CLANG_WARN_BOOL_CONVERSION = YES;
259 | CLANG_WARN_CONSTANT_CONVERSION = YES;
260 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
261 | CLANG_WARN_EMPTY_BODY = YES;
262 | CLANG_WARN_ENUM_CONVERSION = YES;
263 | CLANG_WARN_INT_CONVERSION = YES;
264 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
265 | CLANG_WARN_UNREACHABLE_CODE = YES;
266 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
267 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
268 | COPY_PHASE_STRIP = NO;
269 | ENABLE_STRICT_OBJC_MSGSEND = YES;
270 | GCC_C_LANGUAGE_STANDARD = gnu99;
271 | GCC_DYNAMIC_NO_PIC = NO;
272 | GCC_OPTIMIZATION_LEVEL = 0;
273 | GCC_PREPROCESSOR_DEFINITIONS = (
274 | "DEBUG=1",
275 | "$(inherited)",
276 | );
277 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
278 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
279 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
280 | GCC_WARN_UNDECLARED_SELECTOR = YES;
281 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
282 | GCC_WARN_UNUSED_FUNCTION = YES;
283 | GCC_WARN_UNUSED_VARIABLE = YES;
284 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
285 | MTL_ENABLE_DEBUG_INFO = YES;
286 | ONLY_ACTIVE_ARCH = YES;
287 | SDKROOT = iphoneos;
288 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
289 | TARGETED_DEVICE_FAMILY = "1,2";
290 | };
291 | name = Debug;
292 | };
293 | 141DEE7C19A385B6009C0CD9 /* Release */ = {
294 | isa = XCBuildConfiguration;
295 | buildSettings = {
296 | ALWAYS_SEARCH_USER_PATHS = NO;
297 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
298 | CLANG_CXX_LIBRARY = "libc++";
299 | CLANG_ENABLE_MODULES = YES;
300 | CLANG_ENABLE_OBJC_ARC = YES;
301 | CLANG_WARN_BOOL_CONVERSION = YES;
302 | CLANG_WARN_CONSTANT_CONVERSION = YES;
303 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
304 | CLANG_WARN_EMPTY_BODY = YES;
305 | CLANG_WARN_ENUM_CONVERSION = YES;
306 | CLANG_WARN_INT_CONVERSION = YES;
307 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
308 | CLANG_WARN_UNREACHABLE_CODE = YES;
309 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
310 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
311 | COPY_PHASE_STRIP = YES;
312 | ENABLE_NS_ASSERTIONS = NO;
313 | ENABLE_STRICT_OBJC_MSGSEND = YES;
314 | GCC_C_LANGUAGE_STANDARD = gnu99;
315 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
316 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
317 | GCC_WARN_UNDECLARED_SELECTOR = YES;
318 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
319 | GCC_WARN_UNUSED_FUNCTION = YES;
320 | GCC_WARN_UNUSED_VARIABLE = YES;
321 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
322 | MTL_ENABLE_DEBUG_INFO = NO;
323 | SDKROOT = iphoneos;
324 | TARGETED_DEVICE_FAMILY = "1,2";
325 | VALIDATE_PRODUCT = YES;
326 | };
327 | name = Release;
328 | };
329 | 141DEE7E19A385B6009C0CD9 /* Debug */ = {
330 | isa = XCBuildConfiguration;
331 | buildSettings = {
332 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
333 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
334 | INFOPLIST_FILE = TodoList/Info.plist;
335 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
336 | PRODUCT_NAME = "$(TARGET_NAME)";
337 | };
338 | name = Debug;
339 | };
340 | 141DEE7F19A385B6009C0CD9 /* Release */ = {
341 | isa = XCBuildConfiguration;
342 | buildSettings = {
343 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
344 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
345 | INFOPLIST_FILE = TodoList/Info.plist;
346 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
347 | PRODUCT_NAME = "$(TARGET_NAME)";
348 | };
349 | name = Release;
350 | };
351 | 141DEE8119A385B6009C0CD9 /* Debug */ = {
352 | isa = XCBuildConfiguration;
353 | buildSettings = {
354 | BUNDLE_LOADER = "$(TEST_HOST)";
355 | FRAMEWORK_SEARCH_PATHS = (
356 | "$(SDKROOT)/Developer/Library/Frameworks",
357 | "$(inherited)",
358 | );
359 | GCC_PREPROCESSOR_DEFINITIONS = (
360 | "DEBUG=1",
361 | "$(inherited)",
362 | );
363 | INFOPLIST_FILE = TodoListTests/Info.plist;
364 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
365 | PRODUCT_NAME = "$(TARGET_NAME)";
366 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TodoList.app/TodoList";
367 | };
368 | name = Debug;
369 | };
370 | 141DEE8219A385B6009C0CD9 /* Release */ = {
371 | isa = XCBuildConfiguration;
372 | buildSettings = {
373 | BUNDLE_LOADER = "$(TEST_HOST)";
374 | FRAMEWORK_SEARCH_PATHS = (
375 | "$(SDKROOT)/Developer/Library/Frameworks",
376 | "$(inherited)",
377 | );
378 | INFOPLIST_FILE = TodoListTests/Info.plist;
379 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
380 | PRODUCT_NAME = "$(TARGET_NAME)";
381 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TodoList.app/TodoList";
382 | };
383 | name = Release;
384 | };
385 | /* End XCBuildConfiguration section */
386 |
387 | /* Begin XCConfigurationList section */
388 | 141DEE5C19A385B5009C0CD9 /* Build configuration list for PBXProject "TodoList" */ = {
389 | isa = XCConfigurationList;
390 | buildConfigurations = (
391 | 141DEE7B19A385B6009C0CD9 /* Debug */,
392 | 141DEE7C19A385B6009C0CD9 /* Release */,
393 | );
394 | defaultConfigurationIsVisible = 0;
395 | defaultConfigurationName = Release;
396 | };
397 | 141DEE7D19A385B6009C0CD9 /* Build configuration list for PBXNativeTarget "TodoList" */ = {
398 | isa = XCConfigurationList;
399 | buildConfigurations = (
400 | 141DEE7E19A385B6009C0CD9 /* Debug */,
401 | 141DEE7F19A385B6009C0CD9 /* Release */,
402 | );
403 | defaultConfigurationIsVisible = 0;
404 | defaultConfigurationName = Release;
405 | };
406 | 141DEE8019A385B6009C0CD9 /* Build configuration list for PBXNativeTarget "TodoListTests" */ = {
407 | isa = XCConfigurationList;
408 | buildConfigurations = (
409 | 141DEE8119A385B6009C0CD9 /* Debug */,
410 | 141DEE8219A385B6009C0CD9 /* Release */,
411 | );
412 | defaultConfigurationIsVisible = 0;
413 | defaultConfigurationName = Release;
414 | };
415 | /* End XCConfigurationList section */
416 | };
417 | rootObject = 141DEE5919A385B5009C0CD9 /* Project object */;
418 | }
419 |
--------------------------------------------------------------------------------