From e7175e7d33b173e6fe016b3c158f60b9fc86e009 Mon Sep 17 00:00:00 2001 From: RUBIS Date: Tue, 7 Nov 2017 00:30:37 +0900 Subject: [PATCH 1/2] Convert --- Chapter2/Session2.playground/Contents.swift | 120 +- .../contents.xcworkspacedata | 7 + .../Session2.playground/timeline.xctimeline | 14 +- .../Contents.swift | 46 +- .../contents.xcworkspacedata | 7 + .../timeline.xctimeline | 4 +- .../MeetingRooms.xcodeproj/project.pbxproj | 420 +++++-- .../contents.xcworkspacedata | 7 + .../MeetingRooms/AppDelegate.swift | 20 +- .../4347286612_11577182f1_o.jpg | Bin 28131 -> 0 bytes .../Contents.json | 21 - .../AppIcon.appiconset/Contents.json | 25 + .../Assets.xcassets/Contents.json | 6 - .../Base.lproj/LaunchScreen.storyboard | 16 +- .../MeetingRooms/Base.lproj/Main.storyboard | 312 +++-- .../MeetingRooms/MeetingRooms/Info.plist | 4 +- .../MeetingRooms/ViewController.swift | 4 +- .../MeetingRooms/MeetingRoomsTests/Info.plist | 22 + .../MeetingRoomsTests/MeetingRoomsTests.swift | 36 + .../MeetingRoomsUITests/Info.plist | 22 + .../MeetingRoomsUITests.swift | 36 + .../project.pbxproj | 495 ++++++-- .../contents.xcworkspacedata | 7 + .../MeetingRoomsDynamic/AppDelegate.swift | 24 +- .../AppIcon.appiconset/Contents.json | 25 + .../building_tab.imageset/Contents.json | 2 +- .../building_tab.imageset/building.png | Bin 0 -> 3775 bytes .../building_tab.imageset/building_tab.png | Bin 6506 -> 0 bytes .../equipment_tab.imageset/Contents.json | 2 +- .../equipment_tab.imageset/equipment.png | Bin 0 -> 2744 bytes .../equipment_tab.imageset/equipment_tab.png | Bin 5443 -> 0 bytes .../location.imageset/location.png | Bin 3383 -> 1516 bytes .../Base.lproj/LaunchScreen.storyboard | 16 +- .../Base.lproj/Main.storyboard | 1016 ++++++++--------- .../BranchListViewController.swift | 117 +- .../MeetingRoomsDynamic/DataCenter.swift | 145 ++- .../EquipmentsListViewController.swift | 53 +- .../MeetingRoomsDynamic/Info.plist | 4 +- .../MeetingRoomListViewController.swift | 108 ++ .../MeetingRoomsListController.swift | 179 --- .../ReservationListViewController.swift | 54 +- .../ReserveRoomViewController.swift | 112 +- .../ServiceListViewController.swift | 93 +- .../TintColorViewController.swift | 49 +- .../MeetingRoomsDynamic/ViewController.swift | 25 + .../MeetingRoomsDynamicTests/Info.plist | 22 + .../MeetingRoomsDynamicTests.swift | 36 + .../MeetingRoomsDynamicUITests/Info.plist | 22 + .../MeetingRoomsDynamicUITests.swift | 36 + .../RoomInfoViewController.swift | 44 +- SampleCodes/MeetingRoomsDynamic/building.png | Bin 11950 -> 0 bytes SampleCodes/MeetingRoomsDynamic/equipment.png | Bin 17736 -> 0 bytes SampleCodes/MeetingRoomsDynamic/location.png | Bin 3383 -> 0 bytes .../MoneyConverter.xcodeproj/project.pbxproj | 427 +++++-- .../contents.xcworkspacedata | 7 + .../MoneyConverter/AppDelegate.swift | 27 +- .../AppIcon.appiconset/Contents.json | 25 + .../Base.lproj/LaunchScreen.storyboard | 16 +- .../MoneyConverter/Base.lproj/Main.storyboard | 99 +- .../MoneyConverter/MoneyConverter/Info.plist | 4 +- .../MoneyConverter/MoneyConverter/Money.swift | 48 +- .../MoneyConverter/ViewController.swift | 44 +- .../MoneyConverterTests/Info.plist | 22 + .../MoneyConverterTests.swift | 36 + .../MoneyConverterUITests/Info.plist | 22 + .../MoneyConverterUITests.swift | 36 + ... \353\263\265\354\202\254\353\263\270.PNG" | Bin 0 -> 21404 bytes "SampleCodes/\354\272\241\354\262\230.PNG" | Bin 0 -> 21404 bytes completed_giyeonKim.PNG | Bin 0 -> 21404 bytes 69 files changed, 2895 insertions(+), 1753 deletions(-) create mode 100644 Chapter2/Session2.playground/playground.xcworkspace/contents.xcworkspacedata create mode 100644 Chapter5/SwiftFunctionType.playground/playground.xcworkspace/contents.xcworkspacedata create mode 100644 SampleCodes/MeetingRooms/MeetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 SampleCodes/MeetingRooms/MeetingRooms/Assets.xcassets/4347286612_11577182f1_o.imageset/4347286612_11577182f1_o.jpg delete mode 100644 SampleCodes/MeetingRooms/MeetingRooms/Assets.xcassets/4347286612_11577182f1_o.imageset/Contents.json delete mode 100644 SampleCodes/MeetingRooms/MeetingRooms/Assets.xcassets/Contents.json create mode 100644 SampleCodes/MeetingRooms/MeetingRoomsTests/Info.plist create mode 100644 SampleCodes/MeetingRooms/MeetingRoomsTests/MeetingRoomsTests.swift create mode 100644 SampleCodes/MeetingRooms/MeetingRoomsUITests/Info.plist create mode 100644 SampleCodes/MeetingRooms/MeetingRoomsUITests/MeetingRoomsUITests.swift create mode 100644 SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/building_tab.imageset/building.png delete mode 100644 SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/building_tab.imageset/building_tab.png create mode 100644 SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/equipment_tab.imageset/equipment.png delete mode 100644 SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/equipment_tab.imageset/equipment_tab.png create mode 100644 SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/MeetingRoomListViewController.swift delete mode 100644 SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/MeetingRoomsListController.swift create mode 100644 SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/ViewController.swift create mode 100644 SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamicTests/Info.plist create mode 100644 SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamicTests/MeetingRoomsDynamicTests.swift create mode 100644 SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamicUITests/Info.plist create mode 100644 SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamicUITests/MeetingRoomsDynamicUITests.swift rename SampleCodes/MeetingRoomsDynamic/{MeetingRoomsDynamic => }/RoomInfoViewController.swift (58%) delete mode 100644 SampleCodes/MeetingRoomsDynamic/building.png delete mode 100644 SampleCodes/MeetingRoomsDynamic/equipment.png delete mode 100644 SampleCodes/MeetingRoomsDynamic/location.png create mode 100644 SampleCodes/MoneyConverter/MoneyConverter.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 SampleCodes/MoneyConverter/MoneyConverterTests/Info.plist create mode 100644 SampleCodes/MoneyConverter/MoneyConverterTests/MoneyConverterTests.swift create mode 100644 SampleCodes/MoneyConverter/MoneyConverterUITests/Info.plist create mode 100644 SampleCodes/MoneyConverter/MoneyConverterUITests/MoneyConverterUITests.swift create mode 100644 "SampleCodes/\354\272\241\354\262\230 \353\263\265\354\202\254\353\263\270.PNG" create mode 100644 "SampleCodes/\354\272\241\354\262\230.PNG" create mode 100644 completed_giyeonKim.PNG diff --git a/Chapter2/Session2.playground/Contents.swift b/Chapter2/Session2.playground/Contents.swift index daf3d6f..16a22c4 100644 --- a/Chapter2/Session2.playground/Contents.swift +++ b/Chapter2/Session2.playground/Contents.swift @@ -17,8 +17,7 @@ let name:String = "Seongkwan" var greeting = "Hello" greeting += " " + name -let characters = name.characters -let count = characters.count +let count = name.count let url = "www.codershigh.com" let hasProtocol:Bool = url.hasPrefix("http://") @@ -94,7 +93,7 @@ roomCapacity["Kahlo"] let roomNames = [String](roomCapacity.keys) let capacities = [Int](roomCapacity.values) -let total = capacities.reduce(0, combine: +) +let total = capacities.reduce(0, +) //: Session 2-6 컬렉션2 Set let subway2 :Set = ["시청", "을지로입구", "을지로3가", "을지로4가","동대문역사문화공원", "신당", "상왕십리", "왕십리", "한양대", "뚝섬", "성수", "건대입구", "구의", "강변", "잠실나루", "잠실", "신천", "종합운동장", "삼성", "선릉", "역삼", "강남", "교대", "서초", "방배", "사당", "낙성대", "서울대입구", "봉천", "신림", "신대방", "구로디지털단지", "대림", "신도림", "문래", "영등포구청", "당산", "합정", "홍대입구", "신촌", "이대", "아현", "충정로"] @@ -103,14 +102,14 @@ subway2.count let subway3 :Set = ["지축", "구파발", "연신내", "불광", "녹번", "홍제", "무악재", "독립문", "경복궁", "안국", "종로3가", "을지로3가", "충무로", "동대입구", "약수", "금호", "옥수", "압구정", "신사", "잠원", "고속터미널", "교대", "남부터미널", "양재", "매봉", "도곡", "대치", "학여울", "대청", "일원", "수서", "가락시장", "경찰병원", "오금"] subway3.count -let transfer = subway2.intersect(subway3) +let transfer = subway2.intersection(subway3) transfer.count -let notTransfer = subway2.subtract(subway3) +let notTransfer = subway2.subtracting(subway3) notTransfer.count let union = subway2.union(subway3) union.count -let exOR = subway2.exclusiveOr(subway3) +let exOR = subway2.symmetricDifference(subway3) exOR.count if transfer.count > 0 { @@ -206,7 +205,7 @@ func ratingRecord (history:[Double]) -> (average:Double, min:Double, max:Double) ratings = [3.5, 2.0, 4.5, 5.0] bookDescription = "\(title)" -if let theRatings = ratings , record = ratingRecord(theRatings) { +if let theRatings = ratings , let record = ratingRecord(history: theRatings) { bookDescription += " has \(theRatings.count) ratings, \r\n average is \(record.average), from \(record.min) to \(record.max)" } else { bookDescription += " has no ratings yet" @@ -216,48 +215,48 @@ if let theRatings = ratings , record = ratingRecord(theRatings) { bookDescription /* -1. record의 Type을 명시하시오 -2. ratings = [] 일때 문제 해결 방식 고민 -*/ + 1. record의 Type을 명시하시오 + 2. ratings = [] 일때 문제 해결 방식 고민 + */ //: Session 2-12 Structure _={ - -struct Task { - var title:String//? - var time:Int? -} - -var callTask = Task(title: "Call to Randy", time: 10*60) -//var reportTask = Task() -var reportTask = Task(title:"Report to Boss", time: nil) - -var todayTask:[Task] = [] -todayTask += [callTask, reportTask] -todayTask[1].time = 15*60 - -callTask.title = "Call to Toby" -print("today task = \(todayTask) \r\n callTask = \(callTask)") + + struct Task { + var title:String//? + var time:Int? + } + + var callTask = Task(title: "Call to Randy", time: 10*60) + //var reportTask = Task() + let reportTask = Task(title:"Report to Boss", time: nil) + + var todayTask:[Task] = [] + todayTask += [callTask, reportTask] + todayTask[1].time = 15*60 + + callTask.title = "Call to Toby" + print("today task = \(todayTask) \r\n callTask = \(callTask)") } //: Session 2-13 Class _={ -class Employee { - var name:String? - var phoneNumber:String? - var boss:Employee? -} - -struct Task { - var title:String - var time:Int? + class Employee { + var name:String? + var phoneNumber:String? + var boss:Employee? + } + + struct Task { + var title:String + var time:Int? + + var owner:Employee + var participant:Employee? + } - var owner:Employee - var participant:Employee? -} - let me:Employee = Employee() me.name = "Alex" me.phoneNumber = "010-1234-5678" @@ -266,8 +265,8 @@ struct Task { toby.name = "Toby" toby.phoneNumber = "011-5678-1234" - var callTask = Task(title: "Call to Toby", time: 10*60, owner:me, participant:toby) - var reportTask = Task(title:"Report to Boss", time: nil, owner:me, participant:nil) + let callTask = Task(title: "Call to Toby", time: 10*60, owner:me, participant:toby) + let reportTask = Task(title:"Report to Boss", time: nil, owner:me, participant:nil) callTask.participant?.phoneNumber = "010-5678-1234" var todayTask:[Task] = [] @@ -327,8 +326,8 @@ _={ toby.name = "Toby" toby.phoneNumber = "011-5678-1234" - var callTask = Task(title: "Call to Toby", time: 10*60, owner:me, participant:toby, type:.Call) - var reportTask = Task(title:"Report to Boss", time: nil, owner:me, participant:nil, type:Task.TaskType.Report) + let callTask = Task(title: "Call to Toby", time: 10*60, owner:me, participant:toby, type:.Call) + let reportTask = Task(title:"Report to Boss", time: nil, owner:me, participant:nil, type:Task.TaskType.Report) callTask.participant?.phoneNumber = "010-5678-1234" @@ -404,7 +403,7 @@ _={ var callTask = Task(type:.Call, owner:me) callTask.time = 10*60 - var reportTask = Task(type:.Report, owner:me) + let reportTask = Task(type:.Report, owner:me) callTask.participant?.phoneNumber = "010-5678-1234" @@ -431,15 +430,15 @@ _={ func report() { if let myBoss = boss { - print("\(self.name) reported to \(myBoss.name)") + print("\(String(describing: self.name)) reported to \(String(describing: myBoss.name))") } else { - print("\(name) don't have boss") + print("\(String(describing: name)) don't have boss") } } func callTaskToBoss() -> Task? { - if let myBoss = boss, callTo = myBoss.phoneNumber { - var callTask = Task(type: .Call, owner: self) + if let myBoss = boss, let _ = myBoss.phoneNumber { + let callTask = Task(type: .Call, owner: self) return callTask } return nil @@ -498,9 +497,9 @@ _={ me.boss = toby me.report() - var reportTask = Task(type:.Report, owner:me) + let reportTask = Task(type:.Report, owner:me) todayTask += [reportTask] - + if let callTask = me.callTaskToBoss() { todayTask += [callTask] } @@ -532,15 +531,15 @@ _={ func report() { if let myBoss = boss { - print("\(self.name) reported to \(myBoss.name)") + print("\(String(describing: self.name)) reported to \(String(describing: myBoss.name))") } else { - print("\(name) don't have boss") + print("\(String(describing: name)) don't have boss") } } func callTaskToBoss() -> Task? { - if let myBoss = boss, callTo = myBoss.phoneNumber { - var callTask = Task(type: .Call(number:callTo), owner: self) + if let myBoss = boss, let callTo = myBoss.phoneNumber { + let callTask = Task(type: .Call(number:callTo), owner: self) return callTask } return nil @@ -592,15 +591,13 @@ _={ let taskDescription:String switch type { case .Call(let number) : - taskDescription = "\(owner.name) make a call to \(number)" + taskDescription = "\(String(describing: owner.name)) make a call to \(number)" case .Report(let receiver, let time) : - taskDescription = "\(owner.name) report to \(receiver.name) at \(time)" + taskDescription = "\(String(describing: owner.name)) report to \(String(describing: receiver.name)) at \(time)" case .Meet(let participant, let location) : - taskDescription = "\(owner.name) meet \(participant.name) at \(location)" + taskDescription = "\(String(describing: owner.name)) meet \(String(describing: participant.name)) at \(location)" case .Support(let taskOwner, let duration) : - taskDescription = "\(owner.name) support \(taskOwner.name) for \(duration) days" - default: - taskDescription = "Need more information for task." + taskDescription = "\(String(describing: owner.name)) support \(String(describing: taskOwner.name)) for \(duration) days" } return taskDescription } @@ -616,7 +613,7 @@ _={ me.boss = toby me.report() - var reportTask = Task(type:.Report(to:toby, when:"Afternoon"), owner:me) + let reportTask = Task(type:.Report(to:toby, when:"Afternoon"), owner:me) todayTask += [reportTask] if let callTask = me.callTaskToBoss() { @@ -627,3 +624,4 @@ _={ reportTask.doBasicTask() } + diff --git a/Chapter2/Session2.playground/playground.xcworkspace/contents.xcworkspacedata b/Chapter2/Session2.playground/playground.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/Chapter2/Session2.playground/playground.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Chapter2/Session2.playground/timeline.xctimeline b/Chapter2/Session2.playground/timeline.xctimeline index 2eeb328..0e03f61 100644 --- a/Chapter2/Session2.playground/timeline.xctimeline +++ b/Chapter2/Session2.playground/timeline.xctimeline @@ -3,39 +3,39 @@ version = "3.0"> diff --git a/Chapter5/SwiftFunctionType.playground/Contents.swift b/Chapter5/SwiftFunctionType.playground/Contents.swift index 9222f30..f8eee47 100644 --- a/Chapter5/SwiftFunctionType.playground/Contents.swift +++ b/Chapter5/SwiftFunctionType.playground/Contents.swift @@ -4,11 +4,11 @@ import UIKit //: Session 5-1 Function Types -/*func addVAT(source:Double) -> Double { +func addVAT(_ source:Double) -> Double { return source * 1.1 -}*/ +} -func couponDiscount(source:Double) -> Double { +func couponDiscount(_ source:Double) -> Double { return source * 0.9 } @@ -27,7 +27,7 @@ func finalPrice(source:Double, additional:(Double) -> Double) -> Double { return price } -let price3220 = finalPrice(350.0, additional: couponDiscount) +let price3220 = finalPrice(source: 350.0, additional: couponDiscount) //: Session 5-2 Closure @@ -71,7 +71,7 @@ let price3221 = addVATClosure4(157.6) return adder }*/ -func makeAdder(x:Int) -> Int -> Int { +func makeAdder(_ x:Int) -> (Int) -> Int { return { return $0 + x; } @@ -89,9 +89,9 @@ print(makeAdder(5)(2)) //: Session 5-6 map let transactions = [560.0, 321.5, 190.0, 672.8, 1190.0, 450.0] -func addVAT(source:Double) -> Double { - return source * 1.1 -} +//func addVAT(source:Double) -> Double { +// return source * 1.1 +//} var vatPrices:[Double] = [] for transaction in transactions { @@ -128,21 +128,21 @@ func ascendantSort (sort1:Double, sort2:Double) -> Bool { return sort1 > sort2 } -let sortedPrices = vatPrices.sort(ascendantSort) -let sortedPrices2 = vatPrices.sort({ sort1, sort2 in +let sortedPrices = vatPrices.sorted(by: ascendantSort) +let sortedPrices2 = vatPrices.sorted(by: { sort1, sort2 in return sort1 > sort2 }) -let sortedPrices3 = vatPrices.sort({ $0 > $1 }) -let sortedPrices4 = vatPrices.sort( > ) +let sortedPrices3 = vatPrices.sorted(by: { $0 > $1 }) +let sortedPrices4 = vatPrices.sorted(by: > ) -let sortedMeetingRooms = meetingRooms.sort({$0.1 > $1.1}) +let sortedMeetingRooms = meetingRooms.sorted(by: {$0.1 > $1.1}) print("\(sortedMeetingRooms)") //: Session 5-9 reduce -func priceSum (base:Double, adder:Double) -> Double { +func priceSum (_ base:Double, adder:Double) -> Double { return base + adder } @@ -154,19 +154,19 @@ for price in vatPrices { print("\(sum)") var sum2:Double = 0.0 -let sumReduce = vatPrices.reduce(sum2, combine: priceSum) -let sumReduce2 = vatPrices.reduce(0.0, combine: { base, adder in +let sumReduce = vatPrices.reduce(sum2, priceSum) +let sumReduce2 = vatPrices.reduce(0.0, { base, adder in base + adder }) -let sumReduce3 = vatPrices.reduce(0, combine: +) +let sumReduce3 = vatPrices.reduce(0, +) -let pricesInString = vatPrices.reduce("", combine:{$0 + "\($1)\n"}) +let pricesInString = vatPrices.reduce("", {$0 + "\($1)\n"}) print(pricesInString) -let descriptionString = meetingRooms.reduce("We have meeting rooms : \n", combine: { $0 + "\($1.0) for \($1.1) person \n" +let descriptionString = meetingRooms.reduce("We have meeting rooms : \n", { $0 + "\($1.0) for \($1.1) person \n" }) @@ -183,9 +183,13 @@ print(descriptionString) -let x = [10, 3, 20, 15, 4].sort {$0 < $1}.filter { $0 > 5 }.map { $0 * 100 } +//let x = [10, 3, 20, 15, 4].sorted {$0 < $1}.filter { $0 > 5 }.map { $0 * 100 } +// Expression was too complex to be solved in reasonable time Error in my laptop +let sorted = [10, 3, 20, 15, 4].sorted { $0 < $1 } +let filtered = sorted.filter { $0 > 5 } +let map = filtered.map { $0 * 100 } -let x2 = [10, 3, 20, 15, 4].sort {$0 < $1} +let x2 = [10, 3, 20, 15, 4].sorted {$0 < $1} x2 diff --git a/Chapter5/SwiftFunctionType.playground/playground.xcworkspace/contents.xcworkspacedata b/Chapter5/SwiftFunctionType.playground/playground.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/Chapter5/SwiftFunctionType.playground/playground.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Chapter5/SwiftFunctionType.playground/timeline.xctimeline b/Chapter5/SwiftFunctionType.playground/timeline.xctimeline index 6cdf29c..4df0018 100644 --- a/Chapter5/SwiftFunctionType.playground/timeline.xctimeline +++ b/Chapter5/SwiftFunctionType.playground/timeline.xctimeline @@ -3,12 +3,12 @@ version = "3.0"> diff --git a/SampleCodes/MeetingRooms/MeetingRooms.xcodeproj/project.pbxproj b/SampleCodes/MeetingRooms/MeetingRooms.xcodeproj/project.pbxproj index 59c41e5..51ec3e7 100644 --- a/SampleCodes/MeetingRooms/MeetingRooms.xcodeproj/project.pbxproj +++ b/SampleCodes/MeetingRooms/MeetingRooms.xcodeproj/project.pbxproj @@ -3,29 +3,68 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 48; objects = { /* Begin PBXBuildFile section */ - 2C6EF0961C2AB6D8002398BD /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C6EF0951C2AB6D8002398BD /* AppDelegate.swift */; }; - 2C6EF0981C2AB6D8002398BD /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C6EF0971C2AB6D8002398BD /* ViewController.swift */; }; - 2C6EF09B1C2AB6D8002398BD /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2C6EF0991C2AB6D8002398BD /* Main.storyboard */; }; - 2C6EF09D1C2AB6D8002398BD /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2C6EF09C1C2AB6D8002398BD /* Assets.xcassets */; }; - 2C6EF0A01C2AB6D8002398BD /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2C6EF09E1C2AB6D8002398BD /* LaunchScreen.storyboard */; }; + B2508AD71FB07AB600642C34 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2508AD61FB07AB600642C34 /* AppDelegate.swift */; }; + B2508AD91FB07AB600642C34 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2508AD81FB07AB600642C34 /* ViewController.swift */; }; + B2508ADC1FB07AB600642C34 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B2508ADA1FB07AB600642C34 /* Main.storyboard */; }; + B2508ADE1FB07AB600642C34 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B2508ADD1FB07AB600642C34 /* Assets.xcassets */; }; + B2508AE11FB07AB600642C34 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B2508ADF1FB07AB600642C34 /* LaunchScreen.storyboard */; }; + B2508AEC1FB07AB700642C34 /* MeetingRoomsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2508AEB1FB07AB700642C34 /* MeetingRoomsTests.swift */; }; + B2508AF71FB07AB700642C34 /* MeetingRoomsUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2508AF61FB07AB700642C34 /* MeetingRoomsUITests.swift */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + B2508AE81FB07AB600642C34 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B2508ACB1FB07AB600642C34 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B2508AD21FB07AB600642C34; + remoteInfo = MeetingRooms; + }; + B2508AF31FB07AB700642C34 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B2508ACB1FB07AB600642C34 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B2508AD21FB07AB600642C34; + remoteInfo = MeetingRooms; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXFileReference section */ - 2C6EF0921C2AB6D7002398BD /* MeetingRooms.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MeetingRooms.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 2C6EF0951C2AB6D8002398BD /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 2C6EF0971C2AB6D8002398BD /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; - 2C6EF09A1C2AB6D8002398BD /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 2C6EF09C1C2AB6D8002398BD /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 2C6EF09F1C2AB6D8002398BD /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 2C6EF0A11C2AB6D8002398BD /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + B2508AD31FB07AB600642C34 /* MeetingRooms.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MeetingRooms.app; sourceTree = BUILT_PRODUCTS_DIR; }; + B2508AD61FB07AB600642C34 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + B2508AD81FB07AB600642C34 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + B2508ADB1FB07AB600642C34 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + B2508ADD1FB07AB600642C34 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + B2508AE01FB07AB600642C34 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + B2508AE21FB07AB600642C34 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + B2508AE71FB07AB600642C34 /* MeetingRoomsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MeetingRoomsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + B2508AEB1FB07AB700642C34 /* MeetingRoomsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingRoomsTests.swift; sourceTree = ""; }; + B2508AED1FB07AB700642C34 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + B2508AF21FB07AB700642C34 /* MeetingRoomsUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MeetingRoomsUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + B2508AF61FB07AB700642C34 /* MeetingRoomsUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingRoomsUITests.swift; sourceTree = ""; }; + B2508AF81FB07AB700642C34 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2C6EF08F1C2AB6D7002398BD /* Frameworks */ = { + B2508AD01FB07AB600642C34 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B2508AE41FB07AB600642C34 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B2508AEF1FB07AB700642C34 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -35,45 +74,67 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2C6EF0891C2AB6D7002398BD = { + B2508ACA1FB07AB600642C34 = { isa = PBXGroup; children = ( - 2C6EF0941C2AB6D7002398BD /* MeetingRooms */, - 2C6EF0931C2AB6D7002398BD /* Products */, + B2508AD51FB07AB600642C34 /* MeetingRooms */, + B2508AEA1FB07AB700642C34 /* MeetingRoomsTests */, + B2508AF51FB07AB700642C34 /* MeetingRoomsUITests */, + B2508AD41FB07AB600642C34 /* Products */, ); sourceTree = ""; }; - 2C6EF0931C2AB6D7002398BD /* Products */ = { + B2508AD41FB07AB600642C34 /* Products */ = { isa = PBXGroup; children = ( - 2C6EF0921C2AB6D7002398BD /* MeetingRooms.app */, + B2508AD31FB07AB600642C34 /* MeetingRooms.app */, + B2508AE71FB07AB600642C34 /* MeetingRoomsTests.xctest */, + B2508AF21FB07AB700642C34 /* MeetingRoomsUITests.xctest */, ); name = Products; sourceTree = ""; }; - 2C6EF0941C2AB6D7002398BD /* MeetingRooms */ = { + B2508AD51FB07AB600642C34 /* MeetingRooms */ = { isa = PBXGroup; children = ( - 2C6EF0951C2AB6D8002398BD /* AppDelegate.swift */, - 2C6EF0971C2AB6D8002398BD /* ViewController.swift */, - 2C6EF0991C2AB6D8002398BD /* Main.storyboard */, - 2C6EF09C1C2AB6D8002398BD /* Assets.xcassets */, - 2C6EF09E1C2AB6D8002398BD /* LaunchScreen.storyboard */, - 2C6EF0A11C2AB6D8002398BD /* Info.plist */, + B2508AD61FB07AB600642C34 /* AppDelegate.swift */, + B2508AD81FB07AB600642C34 /* ViewController.swift */, + B2508ADA1FB07AB600642C34 /* Main.storyboard */, + B2508ADD1FB07AB600642C34 /* Assets.xcassets */, + B2508ADF1FB07AB600642C34 /* LaunchScreen.storyboard */, + B2508AE21FB07AB600642C34 /* Info.plist */, ); path = MeetingRooms; sourceTree = ""; }; + B2508AEA1FB07AB700642C34 /* MeetingRoomsTests */ = { + isa = PBXGroup; + children = ( + B2508AEB1FB07AB700642C34 /* MeetingRoomsTests.swift */, + B2508AED1FB07AB700642C34 /* Info.plist */, + ); + path = MeetingRoomsTests; + sourceTree = ""; + }; + B2508AF51FB07AB700642C34 /* MeetingRoomsUITests */ = { + isa = PBXGroup; + children = ( + B2508AF61FB07AB700642C34 /* MeetingRoomsUITests.swift */, + B2508AF81FB07AB700642C34 /* Info.plist */, + ); + path = MeetingRoomsUITests; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 2C6EF0911C2AB6D7002398BD /* MeetingRooms */ = { + B2508AD21FB07AB600642C34 /* MeetingRooms */ = { isa = PBXNativeTarget; - buildConfigurationList = 2C6EF0A41C2AB6D8002398BD /* Build configuration list for PBXNativeTarget "MeetingRooms" */; + buildConfigurationList = B2508AFB1FB07AB700642C34 /* Build configuration list for PBXNativeTarget "MeetingRooms" */; buildPhases = ( - 2C6EF08E1C2AB6D7002398BD /* Sources */, - 2C6EF08F1C2AB6D7002398BD /* Frameworks */, - 2C6EF0901C2AB6D7002398BD /* Resources */, + B2508ACF1FB07AB600642C34 /* Sources */, + B2508AD01FB07AB600642C34 /* Frameworks */, + B2508AD11FB07AB600642C34 /* Resources */, ); buildRules = ( ); @@ -81,80 +142,172 @@ ); name = MeetingRooms; productName = MeetingRooms; - productReference = 2C6EF0921C2AB6D7002398BD /* MeetingRooms.app */; + productReference = B2508AD31FB07AB600642C34 /* MeetingRooms.app */; productType = "com.apple.product-type.application"; }; + B2508AE61FB07AB600642C34 /* MeetingRoomsTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = B2508AFE1FB07AB700642C34 /* Build configuration list for PBXNativeTarget "MeetingRoomsTests" */; + buildPhases = ( + B2508AE31FB07AB600642C34 /* Sources */, + B2508AE41FB07AB600642C34 /* Frameworks */, + B2508AE51FB07AB600642C34 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + B2508AE91FB07AB600642C34 /* PBXTargetDependency */, + ); + name = MeetingRoomsTests; + productName = MeetingRoomsTests; + productReference = B2508AE71FB07AB600642C34 /* MeetingRoomsTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + B2508AF11FB07AB700642C34 /* MeetingRoomsUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = B2508B011FB07AB700642C34 /* Build configuration list for PBXNativeTarget "MeetingRoomsUITests" */; + buildPhases = ( + B2508AEE1FB07AB700642C34 /* Sources */, + B2508AEF1FB07AB700642C34 /* Frameworks */, + B2508AF01FB07AB700642C34 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + B2508AF41FB07AB700642C34 /* PBXTargetDependency */, + ); + name = MeetingRoomsUITests; + productName = MeetingRoomsUITests; + productReference = B2508AF21FB07AB700642C34 /* MeetingRoomsUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - 2C6EF08A1C2AB6D7002398BD /* Project object */ = { + B2508ACB1FB07AB600642C34 /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 0710; - LastUpgradeCheck = 0710; - ORGANIZATIONNAME = CodersHigh; + LastSwiftUpdateCheck = 0910; + LastUpgradeCheck = 0910; + ORGANIZATIONNAME = Gompu; TargetAttributes = { - 2C6EF0911C2AB6D7002398BD = { - CreatedOnToolsVersion = 7.1; + B2508AD21FB07AB600642C34 = { + CreatedOnToolsVersion = 9.1; + ProvisioningStyle = Automatic; + }; + B2508AE61FB07AB600642C34 = { + CreatedOnToolsVersion = 9.1; + ProvisioningStyle = Automatic; + TestTargetID = B2508AD21FB07AB600642C34; + }; + B2508AF11FB07AB700642C34 = { + CreatedOnToolsVersion = 9.1; + ProvisioningStyle = Automatic; + TestTargetID = B2508AD21FB07AB600642C34; }; }; }; - buildConfigurationList = 2C6EF08D1C2AB6D7002398BD /* Build configuration list for PBXProject "MeetingRooms" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + buildConfigurationList = B2508ACE1FB07AB600642C34 /* Build configuration list for PBXProject "MeetingRooms" */; + compatibilityVersion = "Xcode 8.0"; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); - mainGroup = 2C6EF0891C2AB6D7002398BD; - productRefGroup = 2C6EF0931C2AB6D7002398BD /* Products */; + mainGroup = B2508ACA1FB07AB600642C34; + productRefGroup = B2508AD41FB07AB600642C34 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 2C6EF0911C2AB6D7002398BD /* MeetingRooms */, + B2508AD21FB07AB600642C34 /* MeetingRooms */, + B2508AE61FB07AB600642C34 /* MeetingRoomsTests */, + B2508AF11FB07AB700642C34 /* MeetingRoomsUITests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 2C6EF0901C2AB6D7002398BD /* Resources */ = { + B2508AD11FB07AB600642C34 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B2508AE11FB07AB600642C34 /* LaunchScreen.storyboard in Resources */, + B2508ADE1FB07AB600642C34 /* Assets.xcassets in Resources */, + B2508ADC1FB07AB600642C34 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B2508AE51FB07AB600642C34 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B2508AF01FB07AB700642C34 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2C6EF0A01C2AB6D8002398BD /* LaunchScreen.storyboard in Resources */, - 2C6EF09D1C2AB6D8002398BD /* Assets.xcassets in Resources */, - 2C6EF09B1C2AB6D8002398BD /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 2C6EF08E1C2AB6D7002398BD /* Sources */ = { + B2508ACF1FB07AB600642C34 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2C6EF0981C2AB6D8002398BD /* ViewController.swift in Sources */, - 2C6EF0961C2AB6D8002398BD /* AppDelegate.swift in Sources */, + B2508AD91FB07AB600642C34 /* ViewController.swift in Sources */, + B2508AD71FB07AB600642C34 /* AppDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B2508AE31FB07AB600642C34 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B2508AEC1FB07AB700642C34 /* MeetingRoomsTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B2508AEE1FB07AB700642C34 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B2508AF71FB07AB700642C34 /* MeetingRoomsUITests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + B2508AE91FB07AB600642C34 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = B2508AD21FB07AB600642C34 /* MeetingRooms */; + targetProxy = B2508AE81FB07AB600642C34 /* PBXContainerItemProxy */; + }; + B2508AF41FB07AB700642C34 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = B2508AD21FB07AB600642C34 /* MeetingRooms */; + targetProxy = B2508AF31FB07AB700642C34 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ - 2C6EF0991C2AB6D8002398BD /* Main.storyboard */ = { + B2508ADA1FB07AB600642C34 /* Main.storyboard */ = { isa = PBXVariantGroup; children = ( - 2C6EF09A1C2AB6D8002398BD /* Base */, + B2508ADB1FB07AB600642C34 /* Base */, ); name = Main.storyboard; sourceTree = ""; }; - 2C6EF09E1C2AB6D8002398BD /* LaunchScreen.storyboard */ = { + B2508ADF1FB07AB600642C34 /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( - 2C6EF09F1C2AB6D8002398BD /* Base */, + B2508AE01FB07AB600642C34 /* Base */, ); name = LaunchScreen.storyboard; sourceTree = ""; @@ -162,29 +315,41 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - 2C6EF0A21C2AB6D8002398BD /* Debug */ = { + B2508AF91FB07AB700642C34 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_IDENTITY = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; @@ -198,38 +363,50 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.1; + IPHONEOS_DEPLOYMENT_TARGET = 11.1; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; - 2C6EF0A31C2AB6D8002398BD /* Release */ = { + B2508AFA1FB07AB700642C34 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_IDENTITY = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; @@ -237,57 +414,144 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.1; + IPHONEOS_DEPLOYMENT_TARGET = 11.1; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; VALIDATE_PRODUCT = YES; }; name = Release; }; - 2C6EF0A51C2AB6D8002398BD /* Debug */ = { + B2508AFC1FB07AB700642C34 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = MeetingRooms/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.codershigh.MeetingRooms; + PRODUCT_BUNDLE_IDENTIFIER = Gompu.MeetingRooms; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; - 2C6EF0A61C2AB6D8002398BD /* Release */ = { + B2508AFD1FB07AB700642C34 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = MeetingRooms/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.codershigh.MeetingRooms; + PRODUCT_BUNDLE_IDENTIFIER = Gompu.MeetingRooms; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + B2508AFF1FB07AB700642C34 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = MeetingRoomsTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = Gompu.MeetingRoomsTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MeetingRooms.app/MeetingRooms"; + }; + name = Debug; + }; + B2508B001FB07AB700642C34 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = MeetingRoomsTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = Gompu.MeetingRoomsTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MeetingRooms.app/MeetingRooms"; + }; + name = Release; + }; + B2508B021FB07AB700642C34 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = MeetingRoomsUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = Gompu.MeetingRoomsUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = MeetingRooms; + }; + name = Debug; + }; + B2508B031FB07AB700642C34 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = MeetingRoomsUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = Gompu.MeetingRoomsUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = MeetingRooms; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 2C6EF08D1C2AB6D7002398BD /* Build configuration list for PBXProject "MeetingRooms" */ = { + B2508ACE1FB07AB600642C34 /* Build configuration list for PBXProject "MeetingRooms" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B2508AF91FB07AB700642C34 /* Debug */, + B2508AFA1FB07AB700642C34 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B2508AFB1FB07AB700642C34 /* Build configuration list for PBXNativeTarget "MeetingRooms" */ = { isa = XCConfigurationList; buildConfigurations = ( - 2C6EF0A21C2AB6D8002398BD /* Debug */, - 2C6EF0A31C2AB6D8002398BD /* Release */, + B2508AFC1FB07AB700642C34 /* Debug */, + B2508AFD1FB07AB700642C34 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 2C6EF0A41C2AB6D8002398BD /* Build configuration list for PBXNativeTarget "MeetingRooms" */ = { + B2508AFE1FB07AB700642C34 /* Build configuration list for PBXNativeTarget "MeetingRoomsTests" */ = { isa = XCConfigurationList; buildConfigurations = ( - 2C6EF0A51C2AB6D8002398BD /* Debug */, - 2C6EF0A61C2AB6D8002398BD /* Release */, + B2508AFF1FB07AB700642C34 /* Debug */, + B2508B001FB07AB700642C34 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B2508B011FB07AB700642C34 /* Build configuration list for PBXNativeTarget "MeetingRoomsUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B2508B021FB07AB700642C34 /* Debug */, + B2508B031FB07AB700642C34 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = 2C6EF08A1C2AB6D7002398BD /* Project object */; + rootObject = B2508ACB1FB07AB600642C34 /* Project object */; } diff --git a/SampleCodes/MeetingRooms/MeetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/SampleCodes/MeetingRooms/MeetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..ff41f19 --- /dev/null +++ b/SampleCodes/MeetingRooms/MeetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/SampleCodes/MeetingRooms/MeetingRooms/AppDelegate.swift b/SampleCodes/MeetingRooms/MeetingRooms/AppDelegate.swift index 22c3a0d..5d9393d 100644 --- a/SampleCodes/MeetingRooms/MeetingRooms/AppDelegate.swift +++ b/SampleCodes/MeetingRooms/MeetingRooms/AppDelegate.swift @@ -2,8 +2,8 @@ // AppDelegate.swift // MeetingRooms // -// Created by Lingostar on 2015. 12. 23.. -// Copyright © 2015년 CodersHigh. All rights reserved. +// Created by RUBIS on 2017. 11. 6.. +// Copyright © 2017년 Gompu. All rights reserved. // import UIKit @@ -14,30 +14,30 @@ class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? - func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. return true } - func applicationWillResignActive(application: UIApplication) { + 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 throttle down OpenGL ES frame rates. Games should use this method to pause the game. + // 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) { + 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 inactive state; here you can undo many of the changes made on entering the background. + 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) { + 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) { + func applicationWillTerminate(_ application: UIApplication) { // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. } diff --git a/SampleCodes/MeetingRooms/MeetingRooms/Assets.xcassets/4347286612_11577182f1_o.imageset/4347286612_11577182f1_o.jpg b/SampleCodes/MeetingRooms/MeetingRooms/Assets.xcassets/4347286612_11577182f1_o.imageset/4347286612_11577182f1_o.jpg deleted file mode 100644 index 829e21b43c12bacd242d4d95386725135c24dc15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28131 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 Zx3Hp$XqHKHeK*Rv - + - + + + - - - - - + - - + + diff --git a/SampleCodes/MeetingRooms/MeetingRooms/Base.lproj/Main.storyboard b/SampleCodes/MeetingRooms/MeetingRooms/Base.lproj/Main.storyboard index eae1517..2116112 100644 --- a/SampleCodes/MeetingRooms/MeetingRooms/Base.lproj/Main.storyboard +++ b/SampleCodes/MeetingRooms/MeetingRooms/Base.lproj/Main.storyboard @@ -1,267 +1,261 @@ - - + + + + + - + + - + - - + + - - - - + + + - - - + - - + + - - - + - + - - + + - - + + - - - - - + + - - + + - - - - - + + - - + + - - - - - + + - - + + - + + + + + + + + + + + - - - + - - + + - - + + - - - - - + + - - + + - - - - - + + - - + + - - - - - + + - - - - + - + diff --git a/SampleCodes/MeetingRooms/MeetingRooms/Info.plist b/SampleCodes/MeetingRooms/MeetingRooms/Info.plist index 40c6215..16be3b6 100644 --- a/SampleCodes/MeetingRooms/MeetingRooms/Info.plist +++ b/SampleCodes/MeetingRooms/MeetingRooms/Info.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - en + $(DEVELOPMENT_LANGUAGE) CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -16,8 +16,6 @@ APPL CFBundleShortVersionString 1.0 - CFBundleSignature - ???? CFBundleVersion 1 LSRequiresIPhoneOS diff --git a/SampleCodes/MeetingRooms/MeetingRooms/ViewController.swift b/SampleCodes/MeetingRooms/MeetingRooms/ViewController.swift index 435714c..84af176 100644 --- a/SampleCodes/MeetingRooms/MeetingRooms/ViewController.swift +++ b/SampleCodes/MeetingRooms/MeetingRooms/ViewController.swift @@ -2,8 +2,8 @@ // ViewController.swift // MeetingRooms // -// Created by Lingostar on 2015. 12. 23.. -// Copyright © 2015년 CodersHigh. All rights reserved. +// Created by RUBIS on 2017. 11. 6.. +// Copyright © 2017년 Gompu. All rights reserved. // import UIKit diff --git a/SampleCodes/MeetingRooms/MeetingRoomsTests/Info.plist b/SampleCodes/MeetingRooms/MeetingRoomsTests/Info.plist new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ b/SampleCodes/MeetingRooms/MeetingRoomsTests/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/SampleCodes/MeetingRooms/MeetingRoomsTests/MeetingRoomsTests.swift b/SampleCodes/MeetingRooms/MeetingRoomsTests/MeetingRoomsTests.swift new file mode 100644 index 0000000..2ab7e50 --- /dev/null +++ b/SampleCodes/MeetingRooms/MeetingRoomsTests/MeetingRoomsTests.swift @@ -0,0 +1,36 @@ +// +// MeetingRoomsTests.swift +// MeetingRoomsTests +// +// Created by RUBIS on 2017. 11. 6.. +// Copyright © 2017년 Gompu. All rights reserved. +// + +import XCTest +@testable import MeetingRooms + +class MeetingRoomsTests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git a/SampleCodes/MeetingRooms/MeetingRoomsUITests/Info.plist b/SampleCodes/MeetingRooms/MeetingRoomsUITests/Info.plist new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ b/SampleCodes/MeetingRooms/MeetingRoomsUITests/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/SampleCodes/MeetingRooms/MeetingRoomsUITests/MeetingRoomsUITests.swift b/SampleCodes/MeetingRooms/MeetingRoomsUITests/MeetingRoomsUITests.swift new file mode 100644 index 0000000..063cb59 --- /dev/null +++ b/SampleCodes/MeetingRooms/MeetingRoomsUITests/MeetingRoomsUITests.swift @@ -0,0 +1,36 @@ +// +// MeetingRoomsUITests.swift +// MeetingRoomsUITests +// +// Created by RUBIS on 2017. 11. 6.. +// Copyright © 2017년 Gompu. All rights reserved. +// + +import XCTest + +class MeetingRoomsUITests: XCTestCase { + + override func setUp() { + super.setUp() + + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. + XCUIApplication().launch() + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // Use recording to get started writing UI tests. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + +} diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic.xcodeproj/project.pbxproj b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic.xcodeproj/project.pbxproj index cd8935e..22fd555 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic.xcodeproj/project.pbxproj +++ b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic.xcodeproj/project.pbxproj @@ -3,47 +3,88 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 48; objects = { /* Begin PBXBuildFile section */ - 2C1A2E7B1CC7603D0069EEED /* TintColorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C1A2E7A1CC7603D0069EEED /* TintColorViewController.swift */; }; - 2C5B2DA81CC71E8D007D75DD /* EquipmentsDefault.plist in Resources */ = {isa = PBXBuildFile; fileRef = 2C5B2DA71CC71E8D007D75DD /* EquipmentsDefault.plist */; }; - 2C5B2DAA1CC726B8007D75DD /* EquipmentsListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C5B2DA91CC726B8007D75DD /* EquipmentsListViewController.swift */; }; - 2C6F67101CC233F5007EAEC7 /* RoomInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C6F670F1CC233F5007EAEC7 /* RoomInfoViewController.swift */; }; - 2C6F67121CC342F3007EAEC7 /* ReservationListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C6F67111CC342F3007EAEC7 /* ReservationListViewController.swift */; }; - 2C6F67141CC34BDF007EAEC7 /* ReserveRoomViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C6F67131CC34BDF007EAEC7 /* ReserveRoomViewController.swift */; }; - 2C9C276A1C958848002525E4 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C9C27691C958848002525E4 /* AppDelegate.swift */; }; - 2C9C276F1C958848002525E4 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2C9C276D1C958848002525E4 /* Main.storyboard */; }; - 2C9C27711C958849002525E4 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2C9C27701C958849002525E4 /* Assets.xcassets */; }; - 2C9C27741C958849002525E4 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2C9C27721C958849002525E4 /* LaunchScreen.storyboard */; }; - 2C9C277C1C9588BE002525E4 /* MeetingRoomsListController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C9C277B1C9588BE002525E4 /* MeetingRoomsListController.swift */; }; - 2CAA1EF41CB3F36D0096F3FA /* DataCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CAA1EF31CB3F36D0096F3FA /* DataCenter.swift */; }; - 2CAA1EF61CB3FA630096F3FA /* BranchListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CAA1EF51CB3FA630096F3FA /* BranchListViewController.swift */; }; - 2CAA1EF81CB3FA7C0096F3FA /* ServiceListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CAA1EF71CB3FA7C0096F3FA /* ServiceListViewController.swift */; }; + B2508B111FB07D7600642C34 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2508B101FB07D7600642C34 /* AppDelegate.swift */; }; + B2508B131FB07D7600642C34 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2508B121FB07D7600642C34 /* ViewController.swift */; }; + B2508B161FB07D7700642C34 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B2508B141FB07D7700642C34 /* Main.storyboard */; }; + B2508B181FB07D7700642C34 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B2508B171FB07D7700642C34 /* Assets.xcassets */; }; + B2508B1B1FB07D7700642C34 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B2508B191FB07D7700642C34 /* LaunchScreen.storyboard */; }; + B2508B261FB07D7700642C34 /* MeetingRoomsDynamicTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2508B251FB07D7700642C34 /* MeetingRoomsDynamicTests.swift */; }; + B2508B311FB07D7700642C34 /* MeetingRoomsDynamicUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2508B301FB07D7700642C34 /* MeetingRoomsDynamicUITests.swift */; }; + B2508B3F1FB07DB500642C34 /* MeetingRoomListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2508B3E1FB07DB500642C34 /* MeetingRoomListViewController.swift */; }; + B2F9ED7E1FB08A70007C012A /* DataCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2F9ED7D1FB08A70007C012A /* DataCenter.swift */; }; + B2F9ED801FB08BD9007C012A /* BranchListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2F9ED7F1FB08BD9007C012A /* BranchListViewController.swift */; }; + B2F9ED821FB08BEB007C012A /* ServiceListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2F9ED811FB08BEB007C012A /* ServiceListViewController.swift */; }; + B2F9ED841FB09AEC007C012A /* RoomInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2F9ED831FB09AEC007C012A /* RoomInfoViewController.swift */; }; + B2F9ED861FB09DCF007C012A /* ReservationListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2F9ED851FB09DCF007C012A /* ReservationListViewController.swift */; }; + B2F9ED881FB09E04007C012A /* ReserveRoomViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2F9ED871FB09E04007C012A /* ReserveRoomViewController.swift */; }; + B2F9ED8A1FB0A99C007C012A /* TintColorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2F9ED891FB0A99C007C012A /* TintColorViewController.swift */; }; + B2F9ED8C1FB0AC92007C012A /* EquipmentsDefault.plist in Resources */ = {isa = PBXBuildFile; fileRef = B2F9ED8B1FB0AC92007C012A /* EquipmentsDefault.plist */; }; + B2F9ED8E1FB0ACE0007C012A /* EquipmentsListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2F9ED8D1FB0ACE0007C012A /* EquipmentsListViewController.swift */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + B2508B221FB07D7700642C34 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B2508B051FB07D7600642C34 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B2508B0C1FB07D7600642C34; + remoteInfo = MeetingRoomsDynamic; + }; + B2508B2D1FB07D7700642C34 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B2508B051FB07D7600642C34 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B2508B0C1FB07D7600642C34; + remoteInfo = MeetingRoomsDynamic; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXFileReference section */ - 2C1A2E7A1CC7603D0069EEED /* TintColorViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TintColorViewController.swift; sourceTree = ""; }; - 2C5B2DA71CC71E8D007D75DD /* EquipmentsDefault.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = EquipmentsDefault.plist; sourceTree = ""; }; - 2C5B2DA91CC726B8007D75DD /* EquipmentsListViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EquipmentsListViewController.swift; sourceTree = ""; }; - 2C6F670F1CC233F5007EAEC7 /* RoomInfoViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RoomInfoViewController.swift; sourceTree = ""; }; - 2C6F67111CC342F3007EAEC7 /* ReservationListViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReservationListViewController.swift; sourceTree = ""; }; - 2C6F67131CC34BDF007EAEC7 /* ReserveRoomViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReserveRoomViewController.swift; sourceTree = ""; }; - 2C9C27661C958847002525E4 /* MeetingRoomsDynamic.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MeetingRoomsDynamic.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 2C9C27691C958848002525E4 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 2C9C276E1C958848002525E4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 2C9C27701C958849002525E4 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 2C9C27731C958849002525E4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 2C9C27751C958849002525E4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 2C9C277B1C9588BE002525E4 /* MeetingRoomsListController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MeetingRoomsListController.swift; sourceTree = ""; }; - 2CAA1EF31CB3F36D0096F3FA /* DataCenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DataCenter.swift; sourceTree = ""; }; - 2CAA1EF51CB3FA630096F3FA /* BranchListViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BranchListViewController.swift; sourceTree = ""; }; - 2CAA1EF71CB3FA7C0096F3FA /* ServiceListViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ServiceListViewController.swift; sourceTree = ""; }; + B2508B0D1FB07D7600642C34 /* MeetingRoomsDynamic.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MeetingRoomsDynamic.app; sourceTree = BUILT_PRODUCTS_DIR; }; + B2508B101FB07D7600642C34 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + B2508B121FB07D7600642C34 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + B2508B151FB07D7700642C34 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + B2508B171FB07D7700642C34 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + B2508B1A1FB07D7700642C34 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + B2508B1C1FB07D7700642C34 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + B2508B211FB07D7700642C34 /* MeetingRoomsDynamicTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MeetingRoomsDynamicTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + B2508B251FB07D7700642C34 /* MeetingRoomsDynamicTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingRoomsDynamicTests.swift; sourceTree = ""; }; + B2508B271FB07D7700642C34 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + B2508B2C1FB07D7700642C34 /* MeetingRoomsDynamicUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MeetingRoomsDynamicUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + B2508B301FB07D7700642C34 /* MeetingRoomsDynamicUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingRoomsDynamicUITests.swift; sourceTree = ""; }; + B2508B321FB07D7700642C34 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + B2508B3E1FB07DB500642C34 /* MeetingRoomListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingRoomListViewController.swift; sourceTree = ""; }; + B2F9ED7D1FB08A70007C012A /* DataCenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataCenter.swift; sourceTree = ""; }; + B2F9ED7F1FB08BD9007C012A /* BranchListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BranchListViewController.swift; sourceTree = ""; }; + B2F9ED811FB08BEB007C012A /* ServiceListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServiceListViewController.swift; sourceTree = ""; }; + B2F9ED831FB09AEC007C012A /* RoomInfoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomInfoViewController.swift; sourceTree = ""; }; + B2F9ED851FB09DCF007C012A /* ReservationListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReservationListViewController.swift; sourceTree = ""; }; + B2F9ED871FB09E04007C012A /* ReserveRoomViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReserveRoomViewController.swift; sourceTree = ""; }; + B2F9ED891FB0A99C007C012A /* TintColorViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TintColorViewController.swift; sourceTree = ""; }; + B2F9ED8B1FB0AC92007C012A /* EquipmentsDefault.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = EquipmentsDefault.plist; sourceTree = ""; }; + B2F9ED8D1FB0ACE0007C012A /* EquipmentsListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EquipmentsListViewController.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2C9C27631C958847002525E4 /* Frameworks */ = { + B2508B0A1FB07D7600642C34 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B2508B1E1FB07D7700642C34 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B2508B291FB07D7700642C34 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -53,54 +94,77 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2C9C275D1C958847002525E4 = { + B2508B041FB07D7600642C34 = { isa = PBXGroup; children = ( - 2C9C27681C958847002525E4 /* MeetingRoomsDynamic */, - 2C9C27671C958847002525E4 /* Products */, + B2F9ED831FB09AEC007C012A /* RoomInfoViewController.swift */, + B2508B0F1FB07D7600642C34 /* MeetingRoomsDynamic */, + B2508B241FB07D7700642C34 /* MeetingRoomsDynamicTests */, + B2508B2F1FB07D7700642C34 /* MeetingRoomsDynamicUITests */, + B2508B0E1FB07D7600642C34 /* Products */, ); sourceTree = ""; }; - 2C9C27671C958847002525E4 /* Products */ = { + B2508B0E1FB07D7600642C34 /* Products */ = { isa = PBXGroup; children = ( - 2C9C27661C958847002525E4 /* MeetingRoomsDynamic.app */, + B2508B0D1FB07D7600642C34 /* MeetingRoomsDynamic.app */, + B2508B211FB07D7700642C34 /* MeetingRoomsDynamicTests.xctest */, + B2508B2C1FB07D7700642C34 /* MeetingRoomsDynamicUITests.xctest */, ); name = Products; sourceTree = ""; }; - 2C9C27681C958847002525E4 /* MeetingRoomsDynamic */ = { + B2508B0F1FB07D7600642C34 /* MeetingRoomsDynamic */ = { isa = PBXGroup; children = ( - 2C9C27691C958848002525E4 /* AppDelegate.swift */, - 2CAA1EF51CB3FA630096F3FA /* BranchListViewController.swift */, - 2CAA1EF71CB3FA7C0096F3FA /* ServiceListViewController.swift */, - 2C9C277B1C9588BE002525E4 /* MeetingRoomsListController.swift */, - 2CAA1EF31CB3F36D0096F3FA /* DataCenter.swift */, - 2C6F670F1CC233F5007EAEC7 /* RoomInfoViewController.swift */, - 2C6F67111CC342F3007EAEC7 /* ReservationListViewController.swift */, - 2C6F67131CC34BDF007EAEC7 /* ReserveRoomViewController.swift */, - 2C9C276D1C958848002525E4 /* Main.storyboard */, - 2C1A2E7A1CC7603D0069EEED /* TintColorViewController.swift */, - 2C5B2DA91CC726B8007D75DD /* EquipmentsListViewController.swift */, - 2C9C27701C958849002525E4 /* Assets.xcassets */, - 2C9C27721C958849002525E4 /* LaunchScreen.storyboard */, - 2C5B2DA71CC71E8D007D75DD /* EquipmentsDefault.plist */, - 2C9C27751C958849002525E4 /* Info.plist */, + B2508B101FB07D7600642C34 /* AppDelegate.swift */, + B2508B121FB07D7600642C34 /* ViewController.swift */, + B2508B141FB07D7700642C34 /* Main.storyboard */, + B2F9ED8B1FB0AC92007C012A /* EquipmentsDefault.plist */, + B2F9ED8D1FB0ACE0007C012A /* EquipmentsListViewController.swift */, + B2F9ED891FB0A99C007C012A /* TintColorViewController.swift */, + B2F9ED871FB09E04007C012A /* ReserveRoomViewController.swift */, + B2F9ED851FB09DCF007C012A /* ReservationListViewController.swift */, + B2F9ED7D1FB08A70007C012A /* DataCenter.swift */, + B2F9ED7F1FB08BD9007C012A /* BranchListViewController.swift */, + B2F9ED811FB08BEB007C012A /* ServiceListViewController.swift */, + B2508B3E1FB07DB500642C34 /* MeetingRoomListViewController.swift */, + B2508B171FB07D7700642C34 /* Assets.xcassets */, + B2508B191FB07D7700642C34 /* LaunchScreen.storyboard */, + B2508B1C1FB07D7700642C34 /* Info.plist */, ); path = MeetingRoomsDynamic; sourceTree = ""; }; + B2508B241FB07D7700642C34 /* MeetingRoomsDynamicTests */ = { + isa = PBXGroup; + children = ( + B2508B251FB07D7700642C34 /* MeetingRoomsDynamicTests.swift */, + B2508B271FB07D7700642C34 /* Info.plist */, + ); + path = MeetingRoomsDynamicTests; + sourceTree = ""; + }; + B2508B2F1FB07D7700642C34 /* MeetingRoomsDynamicUITests */ = { + isa = PBXGroup; + children = ( + B2508B301FB07D7700642C34 /* MeetingRoomsDynamicUITests.swift */, + B2508B321FB07D7700642C34 /* Info.plist */, + ); + path = MeetingRoomsDynamicUITests; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 2C9C27651C958847002525E4 /* MeetingRoomsDynamic */ = { + B2508B0C1FB07D7600642C34 /* MeetingRoomsDynamic */ = { isa = PBXNativeTarget; - buildConfigurationList = 2C9C27781C958849002525E4 /* Build configuration list for PBXNativeTarget "MeetingRoomsDynamic" */; + buildConfigurationList = B2508B351FB07D7700642C34 /* Build configuration list for PBXNativeTarget "MeetingRoomsDynamic" */; buildPhases = ( - 2C9C27621C958847002525E4 /* Sources */, - 2C9C27631C958847002525E4 /* Frameworks */, - 2C9C27641C958847002525E4 /* Resources */, + B2508B091FB07D7600642C34 /* Sources */, + B2508B0A1FB07D7600642C34 /* Frameworks */, + B2508B0B1FB07D7600642C34 /* Resources */, ); buildRules = ( ); @@ -108,89 +172,182 @@ ); name = MeetingRoomsDynamic; productName = MeetingRoomsDynamic; - productReference = 2C9C27661C958847002525E4 /* MeetingRoomsDynamic.app */; + productReference = B2508B0D1FB07D7600642C34 /* MeetingRoomsDynamic.app */; productType = "com.apple.product-type.application"; }; + B2508B201FB07D7700642C34 /* MeetingRoomsDynamicTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = B2508B381FB07D7700642C34 /* Build configuration list for PBXNativeTarget "MeetingRoomsDynamicTests" */; + buildPhases = ( + B2508B1D1FB07D7700642C34 /* Sources */, + B2508B1E1FB07D7700642C34 /* Frameworks */, + B2508B1F1FB07D7700642C34 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + B2508B231FB07D7700642C34 /* PBXTargetDependency */, + ); + name = MeetingRoomsDynamicTests; + productName = MeetingRoomsDynamicTests; + productReference = B2508B211FB07D7700642C34 /* MeetingRoomsDynamicTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + B2508B2B1FB07D7700642C34 /* MeetingRoomsDynamicUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = B2508B3B1FB07D7700642C34 /* Build configuration list for PBXNativeTarget "MeetingRoomsDynamicUITests" */; + buildPhases = ( + B2508B281FB07D7700642C34 /* Sources */, + B2508B291FB07D7700642C34 /* Frameworks */, + B2508B2A1FB07D7700642C34 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + B2508B2E1FB07D7700642C34 /* PBXTargetDependency */, + ); + name = MeetingRoomsDynamicUITests; + productName = MeetingRoomsDynamicUITests; + productReference = B2508B2C1FB07D7700642C34 /* MeetingRoomsDynamicUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - 2C9C275E1C958847002525E4 /* Project object */ = { + B2508B051FB07D7600642C34 /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 0710; - LastUpgradeCheck = 0710; - ORGANIZATIONNAME = CodersHigh; + LastSwiftUpdateCheck = 0910; + LastUpgradeCheck = 0910; + ORGANIZATIONNAME = Gompu; TargetAttributes = { - 2C9C27651C958847002525E4 = { - CreatedOnToolsVersion = 7.1; + B2508B0C1FB07D7600642C34 = { + CreatedOnToolsVersion = 9.1; + ProvisioningStyle = Automatic; + }; + B2508B201FB07D7700642C34 = { + CreatedOnToolsVersion = 9.1; + ProvisioningStyle = Automatic; + TestTargetID = B2508B0C1FB07D7600642C34; + }; + B2508B2B1FB07D7700642C34 = { + CreatedOnToolsVersion = 9.1; + ProvisioningStyle = Automatic; + TestTargetID = B2508B0C1FB07D7600642C34; }; }; }; - buildConfigurationList = 2C9C27611C958847002525E4 /* Build configuration list for PBXProject "MeetingRoomsDynamic" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + buildConfigurationList = B2508B081FB07D7600642C34 /* Build configuration list for PBXProject "MeetingRoomsDynamic" */; + compatibilityVersion = "Xcode 8.0"; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); - mainGroup = 2C9C275D1C958847002525E4; - productRefGroup = 2C9C27671C958847002525E4 /* Products */; + mainGroup = B2508B041FB07D7600642C34; + productRefGroup = B2508B0E1FB07D7600642C34 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 2C9C27651C958847002525E4 /* MeetingRoomsDynamic */, + B2508B0C1FB07D7600642C34 /* MeetingRoomsDynamic */, + B2508B201FB07D7700642C34 /* MeetingRoomsDynamicTests */, + B2508B2B1FB07D7700642C34 /* MeetingRoomsDynamicUITests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 2C9C27641C958847002525E4 /* Resources */ = { + B2508B0B1FB07D7600642C34 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B2508B1B1FB07D7700642C34 /* LaunchScreen.storyboard in Resources */, + B2F9ED8C1FB0AC92007C012A /* EquipmentsDefault.plist in Resources */, + B2508B181FB07D7700642C34 /* Assets.xcassets in Resources */, + B2508B161FB07D7700642C34 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B2508B1F1FB07D7700642C34 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B2508B2A1FB07D7700642C34 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2C5B2DA81CC71E8D007D75DD /* EquipmentsDefault.plist in Resources */, - 2C9C27741C958849002525E4 /* LaunchScreen.storyboard in Resources */, - 2C9C27711C958849002525E4 /* Assets.xcassets in Resources */, - 2C9C276F1C958848002525E4 /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 2C9C27621C958847002525E4 /* Sources */ = { + B2508B091FB07D7600642C34 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B2F9ED841FB09AEC007C012A /* RoomInfoViewController.swift in Sources */, + B2508B131FB07D7600642C34 /* ViewController.swift in Sources */, + B2508B111FB07D7600642C34 /* AppDelegate.swift in Sources */, + B2F9ED8E1FB0ACE0007C012A /* EquipmentsListViewController.swift in Sources */, + B2F9ED861FB09DCF007C012A /* ReservationListViewController.swift in Sources */, + B2F9ED7E1FB08A70007C012A /* DataCenter.swift in Sources */, + B2F9ED801FB08BD9007C012A /* BranchListViewController.swift in Sources */, + B2F9ED821FB08BEB007C012A /* ServiceListViewController.swift in Sources */, + B2508B3F1FB07DB500642C34 /* MeetingRoomListViewController.swift in Sources */, + B2F9ED881FB09E04007C012A /* ReserveRoomViewController.swift in Sources */, + B2F9ED8A1FB0A99C007C012A /* TintColorViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B2508B1D1FB07D7700642C34 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2CAA1EF81CB3FA7C0096F3FA /* ServiceListViewController.swift in Sources */, - 2C6F67121CC342F3007EAEC7 /* ReservationListViewController.swift in Sources */, - 2C5B2DAA1CC726B8007D75DD /* EquipmentsListViewController.swift in Sources */, - 2C6F67141CC34BDF007EAEC7 /* ReserveRoomViewController.swift in Sources */, - 2CAA1EF41CB3F36D0096F3FA /* DataCenter.swift in Sources */, - 2C9C277C1C9588BE002525E4 /* MeetingRoomsListController.swift in Sources */, - 2CAA1EF61CB3FA630096F3FA /* BranchListViewController.swift in Sources */, - 2C9C276A1C958848002525E4 /* AppDelegate.swift in Sources */, - 2C6F67101CC233F5007EAEC7 /* RoomInfoViewController.swift in Sources */, - 2C1A2E7B1CC7603D0069EEED /* TintColorViewController.swift in Sources */, + B2508B261FB07D7700642C34 /* MeetingRoomsDynamicTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B2508B281FB07D7700642C34 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B2508B311FB07D7700642C34 /* MeetingRoomsDynamicUITests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + B2508B231FB07D7700642C34 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = B2508B0C1FB07D7600642C34 /* MeetingRoomsDynamic */; + targetProxy = B2508B221FB07D7700642C34 /* PBXContainerItemProxy */; + }; + B2508B2E1FB07D7700642C34 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = B2508B0C1FB07D7600642C34 /* MeetingRoomsDynamic */; + targetProxy = B2508B2D1FB07D7700642C34 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ - 2C9C276D1C958848002525E4 /* Main.storyboard */ = { + B2508B141FB07D7700642C34 /* Main.storyboard */ = { isa = PBXVariantGroup; children = ( - 2C9C276E1C958848002525E4 /* Base */, + B2508B151FB07D7700642C34 /* Base */, ); name = Main.storyboard; sourceTree = ""; }; - 2C9C27721C958849002525E4 /* LaunchScreen.storyboard */ = { + B2508B191FB07D7700642C34 /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( - 2C9C27731C958849002525E4 /* Base */, + B2508B1A1FB07D7700642C34 /* Base */, ); name = LaunchScreen.storyboard; sourceTree = ""; @@ -198,29 +355,41 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - 2C9C27761C958849002525E4 /* Debug */ = { + B2508B331FB07D7700642C34 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_IDENTITY = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; @@ -234,38 +403,50 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.1; + IPHONEOS_DEPLOYMENT_TARGET = 11.1; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; - 2C9C27771C958849002525E4 /* Release */ = { + B2508B341FB07D7700642C34 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_IDENTITY = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; @@ -273,58 +454,144 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.1; + IPHONEOS_DEPLOYMENT_TARGET = 11.1; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; VALIDATE_PRODUCT = YES; }; name = Release; }; - 2C9C27791C958849002525E4 /* Debug */ = { + B2508B361FB07D7700642C34 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = MeetingRoomsDynamic/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.codershigh.MeetingRoomsDynamic; + PRODUCT_BUNDLE_IDENTIFIER = Gompu.MeetingRoomsDynamic; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; - 2C9C277A1C958849002525E4 /* Release */ = { + B2508B371FB07D7700642C34 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = MeetingRoomsDynamic/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.codershigh.MeetingRoomsDynamic; + PRODUCT_BUNDLE_IDENTIFIER = Gompu.MeetingRoomsDynamic; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + B2508B391FB07D7700642C34 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = MeetingRoomsDynamicTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = Gompu.MeetingRoomsDynamicTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MeetingRoomsDynamic.app/MeetingRoomsDynamic"; + }; + name = Debug; + }; + B2508B3A1FB07D7700642C34 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = MeetingRoomsDynamicTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = Gompu.MeetingRoomsDynamicTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MeetingRoomsDynamic.app/MeetingRoomsDynamic"; + }; + name = Release; + }; + B2508B3C1FB07D7700642C34 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = MeetingRoomsDynamicUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = Gompu.MeetingRoomsDynamicUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = MeetingRoomsDynamic; + }; + name = Debug; + }; + B2508B3D1FB07D7700642C34 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = MeetingRoomsDynamicUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = Gompu.MeetingRoomsDynamicUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = MeetingRoomsDynamic; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 2C9C27611C958847002525E4 /* Build configuration list for PBXProject "MeetingRoomsDynamic" */ = { + B2508B081FB07D7600642C34 /* Build configuration list for PBXProject "MeetingRoomsDynamic" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B2508B331FB07D7700642C34 /* Debug */, + B2508B341FB07D7700642C34 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B2508B351FB07D7700642C34 /* Build configuration list for PBXNativeTarget "MeetingRoomsDynamic" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B2508B361FB07D7700642C34 /* Debug */, + B2508B371FB07D7700642C34 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B2508B381FB07D7700642C34 /* Build configuration list for PBXNativeTarget "MeetingRoomsDynamicTests" */ = { isa = XCConfigurationList; buildConfigurations = ( - 2C9C27761C958849002525E4 /* Debug */, - 2C9C27771C958849002525E4 /* Release */, + B2508B391FB07D7700642C34 /* Debug */, + B2508B3A1FB07D7700642C34 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 2C9C27781C958849002525E4 /* Build configuration list for PBXNativeTarget "MeetingRoomsDynamic" */ = { + B2508B3B1FB07D7700642C34 /* Build configuration list for PBXNativeTarget "MeetingRoomsDynamicUITests" */ = { isa = XCConfigurationList; buildConfigurations = ( - 2C9C27791C958849002525E4 /* Debug */, - 2C9C277A1C958849002525E4 /* Release */, + B2508B3C1FB07D7700642C34 /* Debug */, + B2508B3D1FB07D7700642C34 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = 2C9C275E1C958847002525E4 /* Project object */; + rootObject = B2508B051FB07D7600642C34 /* Project object */; } diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..c52d61b --- /dev/null +++ b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/AppDelegate.swift b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/AppDelegate.swift index 7624358..daec313 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/AppDelegate.swift +++ b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/AppDelegate.swift @@ -2,8 +2,8 @@ // AppDelegate.swift // MeetingRoomsDynamic // -// Created by Lingostar on 2016. 3. 13.. -// Copyright © 2016년 CodersHigh. All rights reserved. +// Created by RUBIS on 2017. 11. 6.. +// Copyright © 2017년 Gompu. All rights reserved. // import UIKit @@ -14,38 +14,36 @@ class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? - func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. - return true } - func applicationWillResignActive(application: UIApplication) { + 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 throttle down OpenGL ES frame rates. Games should use this method to pause the game. + // 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) { + 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. dataCenter.save() } - func applicationWillEnterForeground(application: UIApplication) { - // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. + 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) { + 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. - - let userDefaultColor = NSUserDefaults.standardUserDefaults().integerForKey(TintColorKey) + let userDefaultColor = UserDefaults.standard.integer(forKey: TintColorKey) guard let defaultColor = TintColor(rawValue: userDefaultColor)?.color else { return } applyTintColor(defaultColor) } - func applicationWillTerminate(application: UIApplication) { + func applicationWillTerminate(_ application: UIApplication) { // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. dataCenter.save() } diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/AppIcon.appiconset/Contents.json b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/AppIcon.appiconset/Contents.json index eeea76c..d8db8d6 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,5 +1,15 @@ { "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, { "idiom" : "iphone", "size" : "29x29", @@ -30,6 +40,16 @@ "size" : "60x60", "scale" : "3x" }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, { "idiom" : "ipad", "size" : "29x29", @@ -64,6 +84,11 @@ "idiom" : "ipad", "size" : "83.5x83.5", "scale" : "2x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" } ], "info" : { diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/building_tab.imageset/Contents.json b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/building_tab.imageset/Contents.json index bf9fa3c..716ffc5 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/building_tab.imageset/Contents.json +++ b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/building_tab.imageset/Contents.json @@ -6,7 +6,7 @@ }, { "idiom" : "universal", - "filename" : "building_tab.png", + "filename" : "building.png", "scale" : "2x" }, { diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/building_tab.imageset/building.png b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/building_tab.imageset/building.png new file mode 100644 index 0000000000000000000000000000000000000000..6f28471115d923b544f9b443573ececcb2094afb GIT binary patch literal 3775 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 literal 0 HcmV?d00001 diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/building_tab.imageset/building_tab.png b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/building_tab.imageset/building_tab.png deleted file mode 100644 index b8bb3f18f1df67505c3781f69cab17f186af5e52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6506 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 Q_y7O^07*qoM6N<$f{Ui7Y5)KL diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/equipment_tab.imageset/Contents.json b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/equipment_tab.imageset/Contents.json index 31ee980..61738a4 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/equipment_tab.imageset/Contents.json +++ b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/equipment_tab.imageset/Contents.json @@ -6,7 +6,7 @@ }, { "idiom" : "universal", - "filename" : "equipment_tab.png", + "filename" : "equipment.png", "scale" : "2x" }, { diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/equipment_tab.imageset/equipment.png b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/equipment_tab.imageset/equipment.png new file mode 100644 index 0000000000000000000000000000000000000000..499188dcffe39cf6926161a8c61f33d78096a993 GIT binary patch literal 2744 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 literal 0 HcmV?d00001 diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/equipment_tab.imageset/equipment_tab.png b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/equipment_tab.imageset/equipment_tab.png deleted file mode 100644 index a5ae18504c6bed259f8ac7a39c96231883b5eb44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5443 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 diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/location.imageset/location.png b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/location.imageset/location.png index 064332fd2e87f98d3fb10a9539f9e3d0b66ba728..aa6dc02151d798252f3f20699692437da07918b8 100644 GIT binary patch literal 1516 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nC-#^NA%Cx&(BWL^R}3dtTpz6=ai zY77hwEes65fIW?-jfNYSk zzLEl1NlCV?QiN}Sf^&XRs)DJWiJpOy9hZWFf=y9MnpKdC8&o@xXRDM^Qc_^0uU}qX zu2*iXmtT~wZ)j<0sc&GUZ)BtkRH0j3nOBlnp_^B%3^4>|j!SBBa#3bMNoIbY0?6FN zr2NtnTO}osMQ{LdXGvxn!lt}psJDO~)CbAv8|oS8!_5Y2wE>A*`4?rT0&NDFZ)a!& zR*518wZ}#uWI2*!AU*|)0=;U-Wup%dHajk#L+X(X3@i+uE{-7?taoR4dx!=~95?NL z1iP^L&uzQjCR8?IrP4lfQd_^uQWrz#z=;nxG5!|xc*KyZ`CON$>IXeRtA+0Py zuF|tx$^+f_tN;JIctE8*?cB_BG3)<5d|vvj=6Us*nU>GbJbA(+{8TOAcu>u{rkepg zKR*cnTEPC!N%>2Y@lLH29?7>2S{m(468u_8EPtBbe~`R)SUSLQ>jkFBg;|>{cw-l| z`2Ot5m6mDJoKRS~*kaZRsn#+BU%M0URP4l>-Sih4Tp8r9#uSCN5QpFtK zB}TJ9f4DYrf8-6#a}mzJBhuJkeii%^e&PRqF+17p-WyEDiB?k%%2+T(Ij20n`RjM} z|LvFJI6GGete+LRC&6+5tUhx`J)RIjb-w0sp9%cFD!&~!FD?#!@KKC~^?IdlQMKaS zJ%^rMs$e|yXT@5^XN?nc=1t73m?QA;tJzyEv$<2|d|}A@^HcxN`H)$nmp#l{Uu^4; zdX<-RPtv6>DPeg;SEkBrr%xYV+?8`Yr+!Hwbj`1RUG^_zP|tV4BV zi!b9_ZpZ4a1}`gr3#2{B->mtBRo3)t+sYZovN*Jtb$u&M^!vAMWyf^3vTJI_FD~)~ zZth)|Vw;gDy<+X09n67tB?tSQIVC)!`GReaY!KE`w(40_%dEk9HYwJCZ;OIndr-$D zwcgnubWR!M{r0n3rtqfgSNNO!8{ZDB?y#F@zy7`Do70MhFYjH?ea!0jD17@fyW3nj za%DgL9JOmMIXdlXyRQ~~e_QK`{aib9q)#0B$F=QNNt(;Eh(#LBAec})N>y+ItkQ*N5z`8R?w{KUB<>rrzZG(CL zyx;tZS>E6A_m&;v)7E{Q>K$IYD^SQwEzdE^+^-?*zvJX4`R2Ng=#FiQ+K$n)9VdUw z`gP?dcOlosLsep%+?Jnkxt(`AY1fO*awW6*c1<}FRlx&{fStQo{GKFD3-}cN&`!fL zI5T|BdGE;OZ&Ri)T@Jihmm72~)Y0i@0hFVdQ&MBb@08y28x&QzG literal 3383 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 N002ovPDHLkV1k#tX$$}W diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Base.lproj/LaunchScreen.storyboard b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Base.lproj/LaunchScreen.storyboard index 2e721e1..f83f6fd 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Base.lproj/LaunchScreen.storyboard +++ b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Base.lproj/LaunchScreen.storyboard @@ -1,22 +1,20 @@ - + - + + + - - - - - + - - + + diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Base.lproj/Main.storyboard b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Base.lproj/Main.storyboard index 5958a44..ee83234 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Base.lproj/Main.storyboard +++ b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Base.lproj/Main.storyboard @@ -1,208 +1,336 @@ - - + + + + + - - + + + - - + + - - - + + + - - + + - - + + - + - - + + - - + + + - + - + - + - - + + - - - + + + - - + + - - + + - + - - + + - + + + + - + - + - - + + + + + + + + + + + + + + + + + + + - - - + + + - - + + - - + + - - - - - + - - + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - - - + + + - + - - + + - - + + - - - + + - - + + - - - + + - - + + - @@ -210,72 +338,80 @@ - + - - + + - - + + - - - + + - - + + - + + + + + + + + - + - - + + - - + + - @@ -285,459 +421,291 @@ - - + + - - + + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - + + + - + - - + + - - + + - - - - - - - - - - - - - - - + + - - + + - - - - - - - - - - - - - - - - + + - - + + - - - - - - - - - - - - - - - + + - - + + - - - - - - - - - - + + - - + + - - - - - - - - - + + - - + + - + - + - + - - - - - + + + + + - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - - - - + + + - - + - + - + - + - - - + + + - - + + - - + + - @@ -745,44 +713,48 @@ - - + + - - + + - + - + - + - - + + - + - - + - - + + - + + + + + + - - + + - + - + diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/BranchListViewController.swift b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/BranchListViewController.swift index 2aaf60e..21e9937 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/BranchListViewController.swift +++ b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/BranchListViewController.swift @@ -2,8 +2,8 @@ // BranchListViewController.swift // MeetingRoomsDynamic // -// Created by Lingostar on 2016. 4. 5.. -// Copyright © 2016년 CodersHigh. All rights reserved. +// Created by RUBIS on 2017. 11. 6.. +// Copyright © 2017년 Gompu. All rights reserved. // import UIKit @@ -11,62 +11,95 @@ import UIKit class BranchListViewController: UITableViewController { override func viewDidLoad() { - self.title = "지점" + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + self.navigationController?.setToolbarHidden(true, animated: false) } - - override func numberOfSectionsInTableView(tableView: UITableView) -> Int { - + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections return 1 } - - override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows let rowCount = dataCenter.branches.count return rowCount } - - override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCellWithIdentifier("BranchCell", forIndexPath: indexPath) + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "BranchCell", for: indexPath) let branch = dataCenter.branches[indexPath.row] cell.textLabel?.text = branch.name + return cell } - - + + @IBAction func locationTurnOn(_ sender: Any) { + let locationAlert = UIAlertController(title: "위치 정보 요청", message: "위치 정보를 기반으로 가까운 지점을 자동으로 선택할 수 있습니다. 또는 지도앱에서 지점의 위치 정보를 제공해 드립니다. 선택하신 기능이 계속 제공됩니다. 환경설정에서 제공되는 기능을 변경할 수 있습니다.", preferredStyle: .actionSheet) + let locationAction = UIAlertAction(title: "위치정보 켜기", style: .default, handler: {(action: UIAlertAction) -> Void in print("위치정보 켜기 선택")}) + let openMapAction = UIAlertAction(title: "지도앱에서 열기", style: .default, handler: {(action: UIAlertAction) -> Void in print("지도앱에서 열기 선택")}) + locationAlert.addAction(locationAction) + locationAlert.addAction(openMapAction) + + self.present(locationAlert, animated: true, completion: nil) + } /* - override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { - if segue.identifier == "ServiceSegue" { - if let destination = segue.destinationViewController as? ServiceListViewController { - if let selectedIndex = self.tableView.indexPathForSelectedRow?.row { - destination.branch = dataCenter.branches[selectedIndex] as Branch - } - - } - } + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true } */ - - override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "ServiceSegue" { - guard let destination = segue.destinationViewController as? ServiceListViewController, selectedIndex = self.tableView.indexPathForSelectedRow?.row else { - return + if let destination = segue.destination as? ServiceListViewController, let selectedIndex = self.tableView.indexPathForSelectedRow?.row { + destination.branch = dataCenter.branches[selectedIndex] as Branch } - destination.branch = dataCenter.branches[selectedIndex] as Branch } } - @IBAction func locationTurnOn(sender: AnyObject) { - - let locationAlert = UIAlertController(title: "위치 정보 요청", message: "위치 정보를 기반으로 가까운 지점을 자동으로 선택할 수 있습니다. 또는 지도앱에서 지점의 위치 정보를 제공해 드립니다. 선택하신 기능이 계속 제공됩니다. 환경설정에서 제공되는 기능을 변경할 수 있습니다.", preferredStyle: .ActionSheet) - let locationAction = UIAlertAction(title: "위치정보 켜기", style: .Default, handler: { (action:UIAlertAction) -> Void in - print ("위치정보 켜기 선택") - }) - let openMapAction = UIAlertAction(title: "지도앱에서 열기", style: .Default, handler: { (action:UIAlertAction) -> Void in - print ("지도앱에서 열기 선택") - }) - - locationAlert.addAction(locationAction) - locationAlert.addAction(openMapAction) - self.presentViewController(locationAlert, animated: true, completion: nil) - } } diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/DataCenter.swift b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/DataCenter.swift index a547081..d9a2469 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/DataCenter.swift +++ b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/DataCenter.swift @@ -2,49 +2,51 @@ // DataCenter.swift // MeetingRoomsDynamic // -// Created by Lingostar on 2016. 4. 5.. -// Copyright © 2016년 CodersHigh. All rights reserved. +// Created by RUBIS on 2017. 11. 6.. +// Copyright © 2017년 Gompu. All rights reserved. // import Foundation -let dataCenter:DataCenter = DataCenter() +let dataCenter: DataCenter = DataCenter() let fileName = "BranchData.brch" class DataCenter { - var branches:[Branch] = [] + var branches: [Branch] = [] - var filePath:String { get{ - let documentDirectory = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first! - return documentDirectory + fileName - }} + var filePath: String { + get { + let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first! + return documentDirectory + fileName + } + } init() { - if NSFileManager.defaultManager().fileExistsAtPath(self.filePath) { - //read - if let unarchArray = NSKeyedUnarchiver.unarchiveObjectWithFile(self.filePath) as? [Branch] { + + if FileManager.default.fileExists(atPath: self.filePath) { + if let unarchArray = NSKeyedUnarchiver.unarchiveObject(withFile: self.filePath) as? [Branch] { branches += unarchArray } } else { - //create branches += defaultData() } - - } + func save() { + NSKeyedArchiver.archiveRootObject(self.branches, toFile: self.filePath) + } + func defaultData() -> Array { let banksyRoom = MeetingRoom(name: "Banksy", capacity: 4) let kahloRoom = MeetingRoom(name: "Kahlo", capacity: 8) let riveraRoom = MeetingRoom(name: "Rivera", capacity: 8) let picassoRoom = MeetingRoom(name: "Picasso", capacity: 10) - let vehicleService = Service(name: "차량예약") let meetingRoomService = Service(name: "회의실예약") let visitorService = Service(name: "방문자예약") let deskService = Service(name: "데스크예약") - meetingRoomService.item = [banksyRoom, kahloRoom, riveraRoom, picassoRoom] + meetingRoomService.items = [banksyRoom, kahloRoom, riveraRoom, picassoRoom] let pangyoBranch = Branch(name: "판교점") let samsungBranch = Branch(name: "삼성점") @@ -54,112 +56,101 @@ class DataCenter { let anamBranch = Branch(name: "안암점") pangyoBranch.services = [vehicleService, meetingRoomService, visitorService, deskService] - let branchArray = [samsungBranch, pangyoBranch, yeoksamBranch, sinrimBranch, songdoBranch, anamBranch] + let branchArray = [pangyoBranch, samsungBranch, yeoksamBranch, sinrimBranch, songdoBranch, anamBranch] + return branchArray } - - func save(){ - NSKeyedArchiver.archiveRootObject(self.branches, toFile: self.filePath) - } } - -class Branch:NSObject, NSCoding { - let name:String - var services:[Service]? +class Branch: NSObject, NSCoding { + let name: String + var services: [Service]? - init(name:String) { + init(name: String) { self.name = name } required init?(coder aDecoder: NSCoder) { - self.name = aDecoder.decodeObjectForKey("name") as! String - self.services = aDecoder.decodeObjectForKey("services") as? [Service] + self.name = aDecoder.decodeObject(forKey: "name") as! String + self.services = aDecoder.decodeObject(forKey: "services") as? [Service] } - func encodeWithCoder(aCoder: NSCoder) { - aCoder.encodeObject(self.name, forKey: "name") - aCoder.encodeObject(self.services, forKey: "services") + func encode(with aCoder: NSCoder) { + aCoder.encode(self.name, forKey: "name") + aCoder.encode(self.services, forKey: "services") } } - -class Service:NSObject, NSCoding { - let name:String - var item:[MeetingRoom]? +class Service: NSObject, NSCoding { + let name: String + var items: [MeetingRoom]? - init (name:String){ + init(name: String) { self.name = name } required init?(coder aDecoder: NSCoder) { - self.name = aDecoder.decodeObjectForKey("name") as! String - self.item = aDecoder.decodeObjectForKey("item") as? [MeetingRoom] + self.name = aDecoder.decodeObject(forKey: "name") as! String + self.items = aDecoder.decodeObject(forKey: "items") as? [MeetingRoom] } - func encodeWithCoder(aCoder: NSCoder) { - aCoder.encodeObject(self.name, forKey: "name") - aCoder.encodeObject(self.item, forKey: "item") + func encode(with aCoder: NSCoder) { + aCoder.encode(self.name, forKey: "name") + aCoder.encode(self.items, forKey: "items") } - } +class MeetingRoom: NSObject, NSCoding { + let name: String + let capacity: Int + var reservations: [Reservation]? -class MeetingRoom:NSObject, NSCoding { - let name:String - let capacity:Int - var reservations:[Reservation]? - - init(name:String, capacity:Int) { + init(name: String, capacity: Int) { self.name = name self.capacity = capacity } required init?(coder aDecoder: NSCoder) { - self.name = aDecoder.decodeObjectForKey("name") as! String - self.capacity = aDecoder.decodeIntegerForKey("capacity") - self.reservations = aDecoder.decodeObjectForKey("reservations") as? [Reservation] + self.name = aDecoder.decodeObject(forKey: "name") as! String + self.capacity = aDecoder.decodeInteger(forKey: "capacity") + self.reservations = aDecoder.decodeObject(forKey: "reservations") as? [Reservation] } - func encodeWithCoder(aCoder: NSCoder) { - aCoder.encodeObject(self.name, forKey: "name") - aCoder.encodeInteger(self.capacity, forKey: "capacity") - aCoder.encodeObject(self.reservations, forKey: "reservations") + func encode(with aCoder: NSCoder) { + aCoder.encode(self.name, forKey: "name") + aCoder.encode(self.capacity, forKey: "capacity") + aCoder.encode(self.reservations, forKey: "reservations") } } - - -class Reservation:NSObject, NSCoding { - var hostName:String - var date:NSDate - var attendees:Int - var equipments:[String] - var catering:Bool +class Reservation: NSObject, NSCoding { + var hostName: String + var date: NSDate + var attendees: Int + var equipments: [String] + var catering: Bool override init() { - self.hostName = "Host of meeting" + self.hostName = "Host of Meeting" self.date = NSDate() self.attendees = 1 self.equipments = [] self.catering = false } - required init?(coder aDecoder: NSCoder) { - self.hostName = aDecoder.decodeObjectForKey("hostName") as! String - self.date = aDecoder.decodeObjectForKey("date") as! NSDate - self.attendees = aDecoder.decodeIntegerForKey("attendees") - self.equipments = aDecoder.decodeObjectForKey("equipments") as! [String] - self.catering = aDecoder.decodeBoolForKey("catering") + self.hostName = aDecoder.decodeObject(forKey: "hostName") as! String + self.date = aDecoder.decodeObject(forKey: "date") as! NSDate + self.attendees = aDecoder.decodeInteger(forKey: "attendees") + self.equipments = aDecoder.decodeObject(forKey: "equipments") as! [String] + self.catering = aDecoder.decodeBool(forKey: "catering") } - func encodeWithCoder(aCoder: NSCoder) { - aCoder.encodeObject(self.hostName, forKey: "hostName") - aCoder.encodeObject(self.date, forKey: "date") - aCoder.encodeInteger(self.attendees, forKey: "attendees") - aCoder.encodeObject(self.equipments, forKey: "equipments") - aCoder.encodeBool(self.catering, forKey: "catering") + func encode(with aCoder: NSCoder) { + aCoder.encode(self.hostName, forKey: "hostName") + aCoder.encode(self.date, forKey: "date") + aCoder.encode(self.attendees, forKey: "attendees") + aCoder.encode(self.equipments, forKey: "equipments") + aCoder.encode(self.catering, forKey: "catering") } } - diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/EquipmentsListViewController.swift b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/EquipmentsListViewController.swift index b7dc7ce..9acd997 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/EquipmentsListViewController.swift +++ b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/EquipmentsListViewController.swift @@ -2,17 +2,17 @@ // EquipmentsListViewController.swift // MeetingRoomsDynamic // -// Created by Lingostar on 2016. 4. 20.. -// Copyright © 2016년 CodersHigh. All rights reserved. +// Created by RUBIS on 2017. 11. 6.. +// Copyright © 2017년 Gompu. All rights reserved. // import UIKit - let EquipmentFileName = "EquipmentsDefault" -class EquipmentsListViewController: UITableViewController { - var equipments:Array = [] +class EquipmentsListViewController: UITableViewController { + var equipments:Array = [] + override func viewDidLoad() { super.viewDidLoad() @@ -20,17 +20,16 @@ class EquipmentsListViewController: UITableViewController { // self.clearsSelectionOnViewWillAppear = false // Uncomment the following line to display an Edit button in the navigation bar for this view controller. - // self.navigationItem.rightBarButtonItem = self.editButtonItem() + // self.navigationItem.rightBarButtonItem = self.editButtonItem - guard let equipmentURL = NSBundle.mainBundle().URLForResource(EquipmentFileName, withExtension: "plist") else { + guard let equipmentURL = Bundle.main.url(forResource: EquipmentFileName, withExtension: "plist") else { print("No File") return } - if let equipmentsArray = NSArray(contentsOfURL: equipmentURL){ - print(equipmentsArray) + + if let equipmentsArray = NSArray(contentsOf: equipmentURL) { equipments += Array(equipmentsArray) } - } override func didReceiveMemoryWarning() { @@ -40,36 +39,40 @@ class EquipmentsListViewController: UITableViewController { // MARK: - Table view data source - override func numberOfSectionsInTableView(tableView: UITableView) -> Int { + override func numberOfSections(in tableView: UITableView) -> Int { // #warning Incomplete implementation, return the number of sections return 1 } - override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { // #warning Incomplete implementation, return the number of rows return equipments.count } - override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCellWithIdentifier("EquipmentCell", forIndexPath: indexPath) + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "EquipmentCell", for: indexPath) - guard let equipment = equipments[indexPath.row] as? [String:AnyObject] else { + // Configure the cell... + + guard let equipment = equipments[indexPath.row] as? [String: AnyObject] else { return cell } - + if let name = equipment["name"] as? String { cell.textLabel?.text = name } + if let amount = equipment["amount"] as? Int { cell.detailTextLabel?.text = String(amount) } - + return cell } + /* // Override to support conditional editing of the table view. - override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool { + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { // Return false if you do not want the specified item to be editable. return true } @@ -77,11 +80,11 @@ class EquipmentsListViewController: UITableViewController { /* // Override to support editing the table view. - override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { - if editingStyle == .Delete { + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { // Delete the row from the data source - tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) - } else if editingStyle == .Insert { + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view } } @@ -89,14 +92,14 @@ class EquipmentsListViewController: UITableViewController { /* // Override to support rearranging the table view. - override func tableView(tableView: UITableView, moveRowAtIndexPath fromIndexPath: NSIndexPath, toIndexPath: NSIndexPath) { + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { } */ /* // Override to support conditional rearranging of the table view. - override func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool { + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { // Return false if you do not want the item to be re-orderable. return true } @@ -106,7 +109,7 @@ class EquipmentsListViewController: UITableViewController { // MARK: - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation - override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // Get the new view controller using segue.destinationViewController. // Pass the selected object to the new view controller. } diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Info.plist b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Info.plist index 40c6215..16be3b6 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Info.plist +++ b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Info.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - en + $(DEVELOPMENT_LANGUAGE) CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -16,8 +16,6 @@ APPL CFBundleShortVersionString 1.0 - CFBundleSignature - ???? CFBundleVersion 1 LSRequiresIPhoneOS diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/MeetingRoomListViewController.swift b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/MeetingRoomListViewController.swift new file mode 100644 index 0000000..f37c36e --- /dev/null +++ b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/MeetingRoomListViewController.swift @@ -0,0 +1,108 @@ +// +// MeetingRoomListViewController.swift +// MeetingRoomsDynamic +// +// Created by RUBIS on 2017. 11. 6.. +// Copyright © 2017년 Gompu. All rights reserved. +// + +import UIKit + +class MeetingRoomListViewController: UITableViewController { + + var service: Service? + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + self.title = service?.name + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + guard let rowCount = service?.items?.count else { + return 0 + } + return rowCount + } + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "ItemCell", for: indexPath) + + guard let meetingRoom = service?.items?[indexPath.row] else { + return cell + } + cell.textLabel?.text = meetingRoom.name + cell.detailTextLabel?.text = String(meetingRoom.capacity) + // Configure the cell... + + return cell + } + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + if segue.identifier == "ReservationSegue" { + guard let destination = segue.destination as? ReservationListViewController, let selectedIndex = self.tableView.indexPathForSelectedRow?.row, let meetingRoom = service?.items?[selectedIndex] else { + return + } + destination.meetingRoom = meetingRoom + } + } + +} diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/MeetingRoomsListController.swift b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/MeetingRoomsListController.swift deleted file mode 100644 index 2fda216..0000000 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/MeetingRoomsListController.swift +++ /dev/null @@ -1,179 +0,0 @@ -// -// MeetingRoomsListController.swift -// MeetingRoomsDynamic -// -// Created by Lingostar on 2016. 3. 13.. -// Copyright © 2016년 CodersHigh. All rights reserved. -// - -import UIKit - -/* -class MeetingRoomsListController: UITableViewController { - - //var meetingRooms:[String:Int] = ["Banksy":4, "Rivera":8, "Kahlo":8, "Picasso":10, "Cezanne":20, "Matisse":30, "Renoir":40] - var meetingRooms:[String:[String:Int]] = ["Meeting":["Banksy":4, "Rivera":8, "Kahlo":8, "Picasso":10], "Seminar":["Cezanne":20, "Matisse":30, "Renoir":40]] - - func meetingRoomsAtIndex(index:Int) -> (key:String, value:[String:Int]) { - let orderedMeetingRooms = meetingRooms.sort({$0.1.first!.1 < $1.1.first!.1}) - return orderedMeetingRooms[index] - } - //Generic - - - override func viewDidLoad() { - super.viewDidLoad() - - // Uncomment the following line to preserve selection between presentations - // self.clearsSelectionOnViewWillAppear = false - - // Uncomment the following line to display an Edit button in the navigation bar for this view controller. - // self.navigationItem.rightBarButtonItem = self.editButtonItem() - - - } - - override func didReceiveMemoryWarning() { - super.didReceiveMemoryWarning() - // Dispose of any resources that can be recreated. - } - - // MARK: - Table view data source - - override func numberOfSectionsInTableView(tableView: UITableView) -> Int { - // #warning Incomplete implementation, return the number of sections - return meetingRooms.count - } - - override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - // #warning Incomplete implementation, return the number of rows - //let categoryValues = Array(meetingRooms.values)[section] - - //let orderedMeetingRooms = meetingRooms.sort({$0.1.first!.1 < $1.1.first!.1}) - - //let rowCount = orderedMeetingRooms[section].1.count - let rowCount = meetingRoomsAtIndex(section).value.count - return rowCount - } - - override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCellWithIdentifier("MyCell", forIndexPath: indexPath) - - //let orderedMeetingRooms = meetingRooms.sort({$0.1.first!.1 < $1.1.first!.1}) - //let categoryValue = orderedMeetingRooms[indexPath.section].1 - let categoryValue = meetingRoomsAtIndex(indexPath.section).value - - let orderedCategoryValues = categoryValue.sort({$0.1 < $1.1}) - let roomName = orderedCategoryValues[indexPath.row].0 - let capacity = orderedCategoryValues[indexPath.row].1 - - cell.textLabel!.text = roomName - cell.detailTextLabel!.text = "\(capacity)" - - return cell - } - - - override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { - - return Array(meetingRooms.keys)[section] - } - - override func tableView(tableView: UITableView, titleForFooterInSection section: Int) -> String? { - - let rowCount = Array(meetingRooms.values)[section].count - - return "\(rowCount) rooms" - } - - /* - // Override to support conditional editing of the table view. - override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool { - // Return false if you do not want the specified item to be editable. - return true - } - */ - - /* - // Override to support editing the table view. - override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { - if editingStyle == .Delete { - // Delete the row from the data source - tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) - } else if editingStyle == .Insert { - // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view - } - } - */ - - /* - // Override to support rearranging the table view. - override func tableView(tableView: UITableView, moveRowAtIndexPath fromIndexPath: NSIndexPath, toIndexPath: NSIndexPath) { - - } - */ - - /* - // Override to support conditional rearranging of the table view. - override func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool { - // Return false if you do not want the item to be re-orderable. - return true - } - */ - - /* - // MARK: - Navigation - - // In a storyboard-based application, you will often want to do a little preparation before navigation - override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { - // Get the new view controller using segue.destinationViewController. - // Pass the selected object to the new view controller. - } - */ - -} - - */ - - -class MeetingRoomsListController: UITableViewController { - var service:Service? - - override func viewDidLoad() { - self.title = service?.name - } - - override func numberOfSectionsInTableView(tableView: UITableView) -> Int { - - return 1 - } - - override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - guard let rowCount = service?.item?.count else { - return 0 - } - return rowCount - } - - override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCellWithIdentifier("ItemCell", forIndexPath: indexPath) - - guard let meetingRoom = service?.item?[indexPath.row] else { - return cell - } - cell.textLabel?.text = meetingRoom.name - cell.detailTextLabel?.text = String(meetingRoom.capacity) - return cell - } - - override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { - if segue.identifier == "ReservationSegue" { - guard let destination = segue.destinationViewController as? ReservationListViewController, selectedIndex = self.tableView.indexPathForSelectedRow?.row , meetingRoom = service?.item?[selectedIndex] else { - return - } - destination.meetingRoom = meetingRoom - } - } -} - - diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/ReservationListViewController.swift b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/ReservationListViewController.swift index 12b6314..cccf1e0 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/ReservationListViewController.swift +++ b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/ReservationListViewController.swift @@ -2,17 +2,17 @@ // ReservationListViewController.swift // MeetingRoomsDynamic // -// Created by Lingostar on 2016. 4. 17.. -// Copyright © 2016년 CodersHigh. All rights reserved. +// Created by RUBIS on 2017. 11. 6.. +// Copyright © 2017년 Gompu. All rights reserved. // import UIKit class ReservationListViewController: UITableViewController { - - var meetingRoom:MeetingRoom? - var newReservation:Reservation? + var meetingRoom: MeetingRoom? + var newReservation: Reservation? + override func viewDidLoad() { super.viewDidLoad() @@ -20,57 +20,55 @@ class ReservationListViewController: UITableViewController { // self.clearsSelectionOnViewWillAppear = false // Uncomment the following line to display an Edit button in the navigation bar for this view controller. - // self.navigationItem.rightBarButtonItem = self.editButtonItem() + // self.navigationItem.rightBarButtonItem = self.editButtonItem } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } - - func addNewItem(reservation:Reservation) { - if (self.meetingRoom?.reservations?.append(reservation)) == nil { + + func addNewItem(_ reservation: Reservation) { + if (self.meetingRoom?.reservations?.append(reservation) == nil) { self.meetingRoom?.reservations = [reservation] } dataCenter.save() - self.tableView.reloadData() - } - @IBAction func unwindToReserveList(segue:UIStoryboardSegue) { + @IBAction func unwindToReserveList(_ segue: UIStoryboardSegue) { print("unwind") } - // MARK: - Table view data source - override func numberOfSectionsInTableView(tableView: UITableView) -> Int { + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections return 1 } - override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows guard let rowCount = meetingRoom?.reservations?.count else { return 0 } return rowCount } - - override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCellWithIdentifier("ReservationCell", forIndexPath: indexPath) - + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "ReservationCell", for: indexPath) + guard let reservation = meetingRoom?.reservations?[indexPath.row] else { return cell } cell.textLabel?.text = reservation.date.description cell.detailTextLabel?.text = reservation.hostName + return cell } - /* // Override to support conditional editing of the table view. - override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool { + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { // Return false if you do not want the specified item to be editable. return true } @@ -78,11 +76,11 @@ class ReservationListViewController: UITableViewController { /* // Override to support editing the table view. - override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { - if editingStyle == .Delete { + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { // Delete the row from the data source - tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) - } else if editingStyle == .Insert { + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view } } @@ -90,14 +88,14 @@ class ReservationListViewController: UITableViewController { /* // Override to support rearranging the table view. - override func tableView(tableView: UITableView, moveRowAtIndexPath fromIndexPath: NSIndexPath, toIndexPath: NSIndexPath) { + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { } */ /* // Override to support conditional rearranging of the table view. - override func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool { + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { // Return false if you do not want the item to be re-orderable. return true } @@ -107,7 +105,7 @@ class ReservationListViewController: UITableViewController { // MARK: - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation - override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // Get the new view controller using segue.destinationViewController. // Pass the selected object to the new view controller. } diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/ReserveRoomViewController.swift b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/ReserveRoomViewController.swift index 49483ea..79e4f26 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/ReserveRoomViewController.swift +++ b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/ReserveRoomViewController.swift @@ -2,24 +2,19 @@ // ReserveRoomViewController.swift // MeetingRoomsDynamic // -// Created by Lingostar on 2016. 4. 17.. -// Copyright © 2016년 CodersHigh. All rights reserved. +// Created by RUBIS on 2017. 11. 6.. +// Copyright © 2017년 Gompu. All rights reserved. // import UIKit class ReserveRoomViewController: UITableViewController { - - //var reservation:Reservation? - @IBOutlet weak var hostNameField: UITextField! @IBOutlet weak var datePicker: UIDatePicker! @IBOutlet weak var attendeesField: UITextField! - @IBOutlet weak var equipmentsField: UITextField! + @IBOutlet weak var equipmentField: UITextField! @IBOutlet weak var cateringSwitch: UISwitch! - - override func viewDidLoad() { super.viewDidLoad() @@ -27,69 +22,45 @@ class ReserveRoomViewController: UITableViewController { // self.clearsSelectionOnViewWillAppear = false // Uncomment the following line to display an Edit button in the navigation bar for this view controller. - // self.navigationItem.rightBarButtonItem = self.editButtonItem() - - + // self.navigationItem.rightBarButtonItem = self.editButtonItem } - override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } - - @IBAction func makeReservation(sender: AnyObject) { - guard let reservation = makeReservation() else { - self.dismissViewControllerAnimated(true, completion: { - }) - return + + func newReservation() -> Reservation? { + let reservation = Reservation() + let host = hostNameField.text! + if host.isEmpty { + return nil } + reservation.hostName = host + reservation.date = datePicker.date as NSDate - switch self.presentingViewController { - case let tabBarC as UITabBarController: - if let navigationC = tabBarC.selectedViewController as? UINavigationController, reservationListVC = navigationC.topViewController as? ReservationListViewController { - reservationListVC.addNewItem(reservation) - } - case let navigationC as UINavigationController: - if let reservationListVC = navigationC.topViewController as? ReservationListViewController { - reservationListVC.addNewItem(reservation) - } - case let reservationListVC as ReservationListViewController: - reservationListVC.addNewItem(reservation) - default: - print("Cannot find ReservationListViewController") - break + if let equipmentArray = equipmentField.text?.split(separator: ",").map(String.init) { + reservation.equipments = equipmentArray } - - self.dismissViewControllerAnimated(true, completion: { - }) - - } - - - @IBAction func cancelReservation(sender: AnyObject) { - self.dismissViewControllerAnimated(true, completion: nil) + reservation.catering = cateringSwitch.isOn + return reservation } - - - - - + // MARK: - Table view data source - /* - override func numberOfSectionsInTableView(tableView: UITableView) -> Int { +/* + override func numberOfSections(in tableView: UITableView) -> Int { // #warning Incomplete implementation, return the number of sections return 0 } - override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { // #warning Incomplete implementation, return the number of rows return 0 } - - - override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) +*/ + /* + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) // Configure the cell... @@ -99,7 +70,7 @@ class ReserveRoomViewController: UITableViewController { /* // Override to support conditional editing of the table view. - override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool { + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { // Return false if you do not want the specified item to be editable. return true } @@ -107,11 +78,11 @@ class ReserveRoomViewController: UITableViewController { /* // Override to support editing the table view. - override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { - if editingStyle == .Delete { + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { // Delete the row from the data source - tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) - } else if editingStyle == .Insert { + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view } } @@ -119,44 +90,29 @@ class ReserveRoomViewController: UITableViewController { /* // Override to support rearranging the table view. - override func tableView(tableView: UITableView, moveRowAtIndexPath fromIndexPath: NSIndexPath, toIndexPath: NSIndexPath) { + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { } */ /* // Override to support conditional rearranging of the table view. - override func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool { + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { // Return false if you do not want the item to be re-orderable. return true } */ - // MARK: - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation - override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "ReserveDone" { - guard let newReservation = makeReservation(), reservationListVC = segue.destinationViewController as? ReservationListViewController else { + guard let reservation = newReservation(), let reservationListVC = segue.destination as? ReservationListViewController else { return } - reservationListVC.addNewItem(newReservation) + reservationListVC.addNewItem(reservation) } } - func makeReservation() -> Reservation? { - let newReservation = Reservation() - let host = hostNameField.text! - if host.isEmpty { - return nil - } - newReservation.hostName = host - newReservation.date = datePicker.date - if let equipmentArray = equipmentsField.text?.characters.split(",").map(String.init) { - newReservation.equipments = equipmentArray - } - newReservation.catering = cateringSwitch.on - return newReservation - } } diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/ServiceListViewController.swift b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/ServiceListViewController.swift index 239fb74..f5982c4 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/ServiceListViewController.swift +++ b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/ServiceListViewController.swift @@ -2,48 +2,109 @@ // ServiceListViewController.swift // MeetingRoomsDynamic // -// Created by Lingostar on 2016. 4. 5.. -// Copyright © 2016년 CodersHigh. All rights reserved. +// Created by RUBIS on 2017. 11. 6.. +// Copyright © 2017년 Gompu. All rights reserved. // import UIKit class ServiceListViewController: UITableViewController { - - var branch:Branch? - + var branch: Branch? + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + self.title = branch?.name + self.navigationItem.title = "\(branch!.name) 정보" + self.navigationController?.setToolbarHidden(false, animated: false) } - - override func numberOfSectionsInTableView(tableView: UITableView) -> Int { - + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections return 1 } - - override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + guard let rowCount = branch?.services?.count else { return 0 } return rowCount } - - override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCellWithIdentifier("ServiceCell", forIndexPath: indexPath) + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "ServiceCell", for: indexPath) guard let service = branch?.services?[indexPath.row] else { return cell } + cell.textLabel?.text = service.name return cell } - - override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + if segue.identifier == "MeetingRoomSegue" { - guard let destination = segue.destinationViewController as? MeetingRoomsListController, selectedIndex = self.tableView.indexPathForSelectedRow?.row , service = branch?.services?[selectedIndex] else { + guard let destination = segue.destination as? MeetingRoomListViewController, let selectedIndex = self.tableView.indexPathForSelectedRow?.row, let service = branch?.services?[selectedIndex] else { return } destination.service = service } } + } diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/TintColorViewController.swift b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/TintColorViewController.swift index bead065..ea8bc03 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/TintColorViewController.swift +++ b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/TintColorViewController.swift @@ -2,39 +2,40 @@ // TintColorViewController.swift // MeetingRoomsDynamic // -// Created by Lingostar on 2016. 4. 20.. -// Copyright © 2016년 CodersHigh. All rights reserved. +// Created by RUBIS on 2017. 11. 6.. +// Copyright © 2017년 Gompu. All rights reserved. // import UIKit -enum TintColor:Int { - case Blue=0, Red, Green, Purple +enum TintColor: Int { + case Blue = 0, Red, Green, Purple - var color:UIColor {get{ - switch self { - case .Blue: - return UIColor.blueColor() - case .Red: - return UIColor.redColor() - case .Green: - return UIColor.greenColor() - case .Purple: - return UIColor.purpleColor() + var color: UIColor { + get { + switch self { + case .Blue: + return UIColor.blue + case .Red: + return UIColor.red + case .Green: + return UIColor.green + case .Purple: + return UIColor.purple + } } - }} + } } + let TintColorKey = "TintColor" -func applyTintColor(color:UIColor){ - guard let window = UIApplication.sharedApplication().keyWindow else { +func applyTintColor(_ color: UIColor) { + guard let window = UIApplication.shared.keyWindow else { return } window.tintColor = color } - class TintColorViewController: UIViewController { - @IBOutlet weak var tintColorSegment: UISegmentedControl! override func viewDidLoad() { @@ -42,7 +43,7 @@ class TintColorViewController: UIViewController { // Do any additional setup after loading the view. - let userDefaultColor = NSUserDefaults.standardUserDefaults().integerForKey(TintColorKey) + let userDefaultColor = UserDefaults.standard.integer(forKey: TintColorKey) self.tintColorSegment.selectedSegmentIndex = userDefaultColor } @@ -51,22 +52,20 @@ class TintColorViewController: UIViewController { // Dispose of any resources that can be recreated. } - @IBAction func tintColorChanged(sender: AnyObject) { + @IBAction func tintColorChanged(_ sender: Any) { let selectedIndex = self.tintColorSegment.selectedSegmentIndex - NSUserDefaults.standardUserDefaults().setInteger(selectedIndex, forKey: TintColorKey) + UserDefaults.standard.set(selectedIndex, forKey: TintColorKey) guard let changedColor = TintColor(rawValue: selectedIndex)?.color else { return } applyTintColor(changedColor) } - - /* // MARK: - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation - override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // Get the new view controller using segue.destinationViewController. // Pass the selected object to the new view controller. } diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/ViewController.swift b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/ViewController.swift new file mode 100644 index 0000000..31cb94e --- /dev/null +++ b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/ViewController.swift @@ -0,0 +1,25 @@ +// +// ViewController.swift +// MeetingRoomsDynamic +// +// Created by RUBIS on 2017. 11. 6.. +// Copyright © 2017년 Gompu. All rights reserved. +// + +import UIKit + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view, typically from a nib. + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + +} + diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamicTests/Info.plist b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamicTests/Info.plist new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamicTests/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamicTests/MeetingRoomsDynamicTests.swift b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamicTests/MeetingRoomsDynamicTests.swift new file mode 100644 index 0000000..554e954 --- /dev/null +++ b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamicTests/MeetingRoomsDynamicTests.swift @@ -0,0 +1,36 @@ +// +// MeetingRoomsDynamicTests.swift +// MeetingRoomsDynamicTests +// +// Created by RUBIS on 2017. 11. 6.. +// Copyright © 2017년 Gompu. All rights reserved. +// + +import XCTest +@testable import MeetingRoomsDynamic + +class MeetingRoomsDynamicTests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamicUITests/Info.plist b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamicUITests/Info.plist new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamicUITests/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamicUITests/MeetingRoomsDynamicUITests.swift b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamicUITests/MeetingRoomsDynamicUITests.swift new file mode 100644 index 0000000..c2bf298 --- /dev/null +++ b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamicUITests/MeetingRoomsDynamicUITests.swift @@ -0,0 +1,36 @@ +// +// MeetingRoomsDynamicUITests.swift +// MeetingRoomsDynamicUITests +// +// Created by RUBIS on 2017. 11. 6.. +// Copyright © 2017년 Gompu. All rights reserved. +// + +import XCTest + +class MeetingRoomsDynamicUITests: XCTestCase { + + override func setUp() { + super.setUp() + + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. + XCUIApplication().launch() + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // Use recording to get started writing UI tests. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + +} diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/RoomInfoViewController.swift b/SampleCodes/MeetingRoomsDynamic/RoomInfoViewController.swift similarity index 58% rename from SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/RoomInfoViewController.swift rename to SampleCodes/MeetingRoomsDynamic/RoomInfoViewController.swift index c9c33b9..7a42590 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/RoomInfoViewController.swift +++ b/SampleCodes/MeetingRoomsDynamic/RoomInfoViewController.swift @@ -2,8 +2,8 @@ // RoomInfoViewController.swift // MeetingRoomsDynamic // -// Created by Lingostar on 2016. 4. 16.. -// Copyright © 2016년 CodersHigh. All rights reserved. +// Created by RUBIS on 2017. 11. 6.. +// Copyright © 2017년 Gompu. All rights reserved. // import UIKit @@ -17,34 +17,32 @@ class RoomInfoViewController: UITableViewController { // self.clearsSelectionOnViewWillAppear = false // Uncomment the following line to display an Edit button in the navigation bar for this view controller. - // self.navigationItem.rightBarButtonItem = self.editButtonItem() + // self.navigationItem.rightBarButtonItem = self.editButtonItem } - override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } - @IBAction func dismissModal(sender: AnyObject) { - self.dismissViewControllerAnimated(true, completion: nil) -} - + @IBAction func modalDismiss(_ sender: Any) { + self.dismiss(animated: true, completion: nil) + } // MARK: - Table view data source - /* - override func numberOfSectionsInTableView(tableView: UITableView) -> Int { +/* + override func numberOfSections(in tableView: UITableView) -> Int { // #warning Incomplete implementation, return the number of sections return 0 } - override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { // #warning Incomplete implementation, return the number of rows return 0 - }*/ - + } +*/ /* - override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) // Configure the cell... @@ -54,7 +52,7 @@ class RoomInfoViewController: UITableViewController { /* // Override to support conditional editing of the table view. - override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool { + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { // Return false if you do not want the specified item to be editable. return true } @@ -62,11 +60,11 @@ class RoomInfoViewController: UITableViewController { /* // Override to support editing the table view. - override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { - if editingStyle == .Delete { + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { // Delete the row from the data source - tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) - } else if editingStyle == .Insert { + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view } } @@ -74,14 +72,14 @@ class RoomInfoViewController: UITableViewController { /* // Override to support rearranging the table view. - override func tableView(tableView: UITableView, moveRowAtIndexPath fromIndexPath: NSIndexPath, toIndexPath: NSIndexPath) { + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { } */ /* // Override to support conditional rearranging of the table view. - override func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool { + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { // Return false if you do not want the item to be re-orderable. return true } @@ -91,7 +89,7 @@ class RoomInfoViewController: UITableViewController { // MARK: - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation - override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // Get the new view controller using segue.destinationViewController. // Pass the selected object to the new view controller. } diff --git a/SampleCodes/MeetingRoomsDynamic/building.png b/SampleCodes/MeetingRoomsDynamic/building.png deleted file mode 100644 index 6b1aec01dedbf7a82b98c44f45fc9324939e2b34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11950 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 Hdr$rcDdq8c diff --git a/SampleCodes/MeetingRoomsDynamic/equipment.png b/SampleCodes/MeetingRoomsDynamic/equipment.png deleted file mode 100644 index b9132b8c6e94ea59e6afa2438abff0ef94e078a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17736 zcmb`u1yohh_b$2*9TEb9fCvT%h#;kc5~6e|-JnR9lF~;oK|*QimPWcm1*8Q8q>+>^ z>3VbXd;dG$8+VL%?|Apm7-w)|@3r?{YsNRf`K@;kl%&Z>7)THVA(NH4uYw>r@D>Ll zB7lGYp8wi|f5cB^v>gzHlp1|ukWVpZ5rjn1;@-Un56tZx?HtVQp0dc^yT|g>-pLY#(Nl zED<4n?o+-g5)kRNA}eAU7yBuFTNSi5>iTtqU-ki~zpqWH+~ zjF4eEN>)#YNa+9iC_IM`}@#5qta zm_pnL!A41NwIM9GaFBcFsoQZ`6mS!+ch`<*7(RVfCWArhTEp5S^ zPh6PzYW+px5giAmDe=_Bn26|0)H1WU3LU2qgkiU<{^*ui@a)XgpBd9x>y>{ENk>+z zb{9o2tc@L2y~n{rD3v-_1`VgD`*5E&Ve*}7tul0xK@G%wY*(Luh&VxqjXuPylXXvl39dG<*>DyJ^l_wd;xTjyMr zz}Z$j30~Xn*-J-Fue=WfIl3kUzUXnC@mte+SN7ndVv}pR%7^MBHoR+It4l4+y210H5nNf`ruW28mzAAng$; zlL%7v_pILMP&$Q1A_Tdg@Pae{F5#(qn(R9An0ltFIy#(31oy>HU9P)BDM2uWJx7vw zHvBHVTAlE3yyARZhJ@3f{!kXx^WGwx9jDTJvGA0R!02q;*RxfxiSh3KAfkSBLHO#+NBqQ(@6B z5Sh#5%^#2cs_}!gv^KS8F9aeGT#cv>&V(9I6vS~eUm{g z;Pi>LJ(~7jYs$6c-k+Z=%q+IedFC7|h(~3O0Q((rpCqJF4d@8@HTGK-{$v{TpO+~V{&^Pz<*OgKy<%qwg*Q%&7L zU98tNlTjFeKg6XY!ZyB$)1snghinJ)}T7CKF^XXReiVxq-le=V-uavPZzcHH>d`>57nr(OP zakjvy$*|R(M~^M|hEl$#G)&cSw1--KGOg$;>Tzsq`@uDw{X4sPF;J*C#wzYn%|O-A zLBOk2$(RN?{~P{I;e+8Gt@z=J;oI4f8loDm8k-vZ*|L3l3tS5}eVWz}7&W6$MGHr_ zmVC~M&iU>fZ8JtQK@-H$&9SL!JIK3uut>7_X^~(_XzS4y>z2({CsW%wDyF{Mj<-GR z9i7^ot)Escr2G;1mhnB~+nlBuqgkRu?1ms+ntX68RfKZ{ovKZ`U%G9)TWi=f!*WG; zanELQbY=8#&VbFYkv5SA&#Zk#?r6ql{cj>GcmJ(!YfU_Bn~Y75PXD?QJj-L?Y@lth zUwvM=ForFz@4C&8q3^om)vfME!lEK3dmVGQqK%?B@ow>NYSL;hj)~M<^6K-7@*+Hl z+rPcndKk1*`^R;ic1;Q22vd)l##Fyxcu|OJh0BZ=g_lYwh#!DoNx*YT^o+zQVlr)J z`w+W2x^>1~WBy??u1{TOT8LuL=rHbGZ(~z9-*-CjbtlmnrI%gWuEJbf3DMheY3sLT z%og-fbi1B39GrZa-185MR2`o=ZgcfzPigO)RR^vGWxOxHJ!Dy8?`)QBX{};yyck`E zEz2x>@%+t>EV~sGPye+XJR$Nwr-8w z_Pn=e{#seesga*pS>>wh2l|iYmo^kN?)QymcMd!oxF!@D6B?7OLS_+ObhZC_DSN51 z>D8+tWK*s)HZ6=HZ(6peF6}yO44tulrO=gJq>}r9oK}J7^VR3NXLX;K$yCee{Nf)o zJ(}OWMCwE9Q5~HBpe(=eciD68wegF!l9jZV{8i~(xOw$eDxN&ISnc*~HE%5lKYTEu zrJ}xW={md~sN&n5ntJc5kETFaMrd=ZZSFsva^o|P!k(zFSVr{fYIt+fg&Af)&HkLb zlP^^^Goh(u*z2+BYBM-EDp%UFv>>yPvS6FNtzDZZS8aK>_vh>fN4fU8@W-( zL^sRL!1ki{mUdjhM}kYbZ6(=5>xnm#x7=dA^;)3$rrXC#Q>F=IvTjMqq+w2N{>T#$RJJK>h(%7Ue%o%L{DZEXRu zjmnLH^D@Fur=ziUgV9T$T#BFSaFTz$J6(TeEX~7x^1ySV*$h_zHcMhh_4n5=5&aNP!1?f3T{cAVt`WIGyP7})tE$BGrw=CK;pI6NqBBTLYQh=;I{xR+qpKm!r)H{n%sS%^n{xFl zAAkM!O^k$?_)BSFVOHw5e6}0mw1}LXoONMAfsU!Esg%d@;kGgj9i0pB*;7YFRQcyf zUS0gw)Rdm!FxzoOLPDaz*T<(IHYSF%-R3qwKmWZeN-?*T*+N_;@84gfmgFthEw#FLRHUt0Q#e^O+3jpsh~j6E&x z^&#Yej*jL2Tzb6d+H{0rjjpclP*e%BbM5BM(&}f=o-GiNF@#Qyk0-cO4h6@@uS7&f zmQ}%Dli{Iuu}*AOm-*J)q{wsU&Ut8YNA!0|QX*a&dU{;P|9X^-otKAqZT0o_ktJkR zGbT1x^$i8{QG=?oNU?URiu%|}znIg!THWt2#+vh+d$}%qE}w4LeDZcb{pk7gottv0 z>uj+vFXM`%suR>BU!V`?(9ia%5#?h1*I{VT@)wVr%?qujxEAFc=M4$1T&e87vyO zWzrJr?XvirciXFGIa58WkxRE^(e*AR&hheDzNqY}E@|fWJ=fEZ?6Wj-*5}x>xsj>q z=>hMZKW}{%Ghnmx|BL%{{%n;AGYoxn?UT*TTrgptLYM z>!L){5c>D;-zn#%!Pu0-{2e6UwEfe#No#n{>}wH(AtWS3bx_x?T9BWUlk?E4D$XEJ z^D-M7cV~M$lgUJ4@%i)T8%pU;6X4@B6&DwqoW8(y1<|YZ(!XKc_+FNtp1zPn5W9cb z?EBl(hVPlhyb|@e^XwMsD!mRX7JhuVBvx%dEvImaAbLZL=b{2JDe3L;@$tHg5|MVu zkLKoQF`}M(bUHaD%q9d+Yw_{$JZ@O^WoH-|7-%x=7c0e!j(Gk1+hxVbz#zf6Ura;N zFb!Us_AV)sik`l_v!UUYvNWSezg%Zr~;8zZBgyLgzvhm>lO0Ag4ojV6I#^jGbdVXZwaGGCOm`;`o*!#CQQ234cXRhVp;h{IB$ZU5)bpInTL z(Nfw6Qxg;R`iT#IG2M2y9>*OuRCjVJ?$1z7zv!|w7?$t4G4n|5XvbKW5&qypt=q=W zE?<61AfDbc088uT2sSGlN{ub|4+w}A1!L3>5Ui;;3J!qbrkg{qP`5ohURqir^)|R4 zc@AbePrJ}`x{U;NqVF;kw@u$!n~^2DW0AO~=m7Z7XE`JD*HYQ1JAO z9#NEnMt8ZxY;spuS2II^X;6Cl6@MbusW>m3$Qw3;=1Tjx`PbuwgoF&hYR@nUJMJX% z8q_s6XB5=bj4to2O`3Yr7j>CiyKT<*dY==rPZ@hn#yCNK{?6~Ls;c2{=z;K*sS0O0 zkb~TK&HXE?5=giVgii0(dcr)Hl~Ivm-p2kp#}*7OfrrzTAo3gc2EhYqhP|ZjrYpq; zet8>=un>Lq&f74|H>%gfiP*#B8$mQTp6gESbeaD(_r&;pEnFe7(5!Rx$()n@vu8ro zFcr!)4O6HMa?tqcm=GZ{}|f48zOy|xwx#?zP=*8 z^85Gi$OD1x(Q0?*c$l#BR@u=xIZM3>2?>{y*wY~VEiNy6g$+DO#f&%58F~Z|?j!k9 zlZ^rUni3K|&2~>r1sF^&Ne3SM`#0C~Ov6CJW`Ao*d6XR2%gbvvQeA@z>C4upu6ok^ zkxP!Cj-mNU!6HNi5xTQyBaP?3K)#cR_deQ9^+Mw60^j8=4X^ldpmC-@Ud?lO0V6hK8q z^|9lk#Ku$UZA|1H*Y)WBTzy8Fazv|ee%|u<^=kr~2yXqrC^zfdw<{}f3CZ6FKi0Rh zwEP7Lnrx`reVd>0hV|Rl*472^goNjCNk3v-Qx5_o7)I2tdQ$_Fio=3$Uw+5o+iNmq zv4hobyJ_b%^ZKv4Z7;{#!{jWh?MCPrl97{(UiN!jAeB6jtdXUC-<%thkeS(H`ZM9K zdrNDpy9y_wa+-#w=<)9QbZ3;?Fg_`5RTab-SG64%a;Y0PSixLxalioJ{WUc;vl%V8 zrx37{X|co~>E^N*aF--2L2{ z8V6fj+jIej_VW*ERDFDXDFy}xzS!2`9X&lgKGER64?$~BQVvhtFEcA^=((#alig5B zj%=QpCTCdb*3!_;k0fJ4u}ZUEGi_0;p`oEW0gN}v#k`L^u=PgyoB#fC6#)84mSDSs zdy=K6LX_jOv$9AN?jtEJLqq$mIl86feA9x9WMpLPk&%(HIyqa!oE~8#sIXysX5#ldI4VKJ@dCKx$CCw@KdK}&p0423^;K*MwlV6L?!?`T64i46kHLR z*!cLdKE>!8A|@@8=3`#_HovasRoMs6-(bjrU&@C{S#7~Sxc!M%SdeVJ@`43O2tg_g z$WETJ=oSK@-bklD1U=JRXd~0!F;|)E(smI4p zpBR#R=G0;^JKDCkxttd+{2{zc=@H3?tQrE`_!%eS?gkj{uY%yr-sZxa&e+@Aq?!BU z>@d=*yl@S%?}qOiw<5yA$}Ng@HjAzL&kH-uDD3a;?LDyiUF$ODS(?XTcgk_Dn|182 zFM$np%En9aLbi}*Ibr9;$TQT`g>&z&#Qiq4vopMuflx9rdFE$ka<-_rH1_s7)k-A` zvHLyN0hp5}k@%B8=LKOp_|DvrU2TAjyu81t+duREPoF*!$&Ww%us5?43GKh(Z zvk2jcFkexlIDjTGnt28yrVD*JzVq|*T()b`3T&;Tg=We;baWB+ssX!y-Y_c-6qvNu zMlqSXVT-3ML9Dbv5!ECN}P@2H+!w!-8eKbVDkRF$le&U z$7=mA2(6PPB_(7E+I4pZhK9ySC@93b)0N{x3knJ<4h}q0S%~7o3l61{yR!5voil>& ztpAWy4RD=oB%3WND*Dq#Uf5d%=KKvpw)EofFO$uKgF2}}L7kGSx%j;P$aTBXsyVRc zzvdi_%M%j?-bV+!dH)vr?Fh&AFs*<7{?+PDmJYH5$aA`6!AUsm?6g~$pVyh0n{ypV>U?@OKq@gM<$DQ0 ze>!|p?ZdGOr-gQ?PdpnSZj$s+NEGCMDNJ2wHLtb8Z2ZaR!gx+=QuU@}4 z&DHuc0SMdm2USTa%))eUmS(krpg{~>7Io*FfR!%5F= z?y=F*A$$XstE+1zM1v=`P#Y<8>6NXv7ZmVO6jC4! z4GsEj)%j~{YYSygY(~{E7rV^z&x4M4CW9!V?eD0HT2RjXnQ4#qiuc?a7&_eF?u-+( z>WfKAx+qq73c<(6m-4M2x9ezdbaqw>2nsrWZ-K8>isHiS+l2^ZyLG|o=LdL3)&JZ) zTT@a}WPJ(9gx6=H?YvY}RJyyfal{`zN*ti$y>Q`Cv0Q4VsW7JR8Vk$#FR|m@&cm6i z0I0J%&=7f}_j!&^F((bzcsj*_CxLJMB_SbKJ!|X5KdJH&O8gOTD4R)0NZKl%=H}+^ zpSTqVp3FS}F82IlECjSPG?9y3Sa4_u9%_rvIXRmK)oz>nkc{YWJ1?HK1=EB0Ma>W} z!(vA+E_~i==Z}Y&m{_6cH7|%FcB+B>MHZ?ZPvvA_h3amvRBcG==?&k6v_!GUc}E*+ zbZt60ng)S1QkH8lMuL!?p{#84Jv?L>z}y{P__LV!{%!$UA}jk6ccYZdY9fAJ4Qsh~ z;lhO|1!{2}1=q@vMkw<`@sP;3!XhFfwts&nz7ajzncTj5^=d3J;=@v8H+CeDevFx$ z`#{uZIrqkxE5vw%mLeoYnk|I> z(@i@A+uR|SjTyy|+zB>hyrjFkJMi7RcS8}^bhq4$d8h;y_z}pvI%&8pik8KL*0qSh zS7k)q@mwkWDS{yNEDg`q#llW6r=`JSsY(~DHX+i1Al)V%E633{?QXy-bB6iNMvouw zELW~Pj`P}^`vrfIjb{yW`=eKs7iZSf%G@?HHQn6Ye!U{4)3GYnDb~nx>ai?d22P`% z<`t`IhFY&>afL#TMnq<>rH#0FUB=tDZ|^B7DTP%XA8YCB#}0>1e(59jPJw{zy*|}! z_1M^0ELy;#`#qcDr(cm=$b-=_O#_4FPobeS?&EbY{z6nZyhr&`JQK%CRbT%aV1a{m zbk?|j4-T3_!8h%=GI|(&bhy7VKK{>}K0u0Iz0Na5NlxyQBMi@7Xxh#&1kr^*?QE#* z0V4o^i13<$OxKO-G+V>3>AEftm;X6;aDf$&LLvm6cW9Ume}PMAJ67&sc1-Bm#E1Am zeb0QFnYp%KO^kRo?I_HyW;d+~i@`17F|6?@S4#I!xENgV@#9BPyV}Do&2Mig#)2av z`d|AY6yXMWc0x|`zs`(#Y$$r;V2L5}4M5S}RDHC!zJmJw#2s~d6y$?4jG;?$W zUt1#K%s7{skoQu_){XD!SJF~b6`u%WT>ixo8vlJ0Yd?PY&=sbFgfrq?W<+XsXQIz%Y33c#^$?c16Zl?uKL0D@n46PxJ&gft@*0sP zzyem7h7!||dZ(RvX9$R!??RBdlc=z}FR=iJhu2trKAu7VnY*6LI(*^o0%gNn$O8{J zF_F?lk#KAhpqX82#7o-MwR{1VChk!t!gl%=bklM;>b<_ zL>w)sTp~Ll?!GoNF~L_QuDhdG_Vj{fM~u)43^ZBy0=G+nqOJ(s;eI9(8MHK1+O#xK zXhw+{H-n74xwl&{iYTy)i0I!tgA^vkLET)buCCsJhduU^ktEJOAXHd}*h~>C<{f8- zkC;vY%30FL)f0M$)?cWl^Rr^5PCs9pkQ8e{A|n9E9WFF6ds|=KMG|@~dld*1x<(C` z)iBq2z>MOUy${wZ@sOOpfH`FK2q)$8rAznPT3Y-*x*_9?BtKBZ$1R2{qAL zObRX**o^BG*v5ytx~==9*H73WGYF~iPjG?mRCyx6AacX{cd!h65PytvM`|V}sr(rD zNL=o;5WbxkPkZv)MHH3B;lcNpXMj9<=vG}rd~#GqM#fruM@JwF{KUfhhMZ|$7T$?J z4rCTP4=gFXgRpi8Hn#{ZRYXPxsHs+1q&Z^rlY*C*s2B{xB1p$$a2dW~5rn$^5;|~3 zMt1gpzUl4lMX#G8mELn2{s(`8ctV993oj%~Q&sgI{1>-;FLiPr$3^rLyb$!H|HC&d z#fXueowt8DZdENJ!-YV7tD-|LFt{%-e+I$9mV1eZb=hOL>5zB$$jzHKYZ8$FIt1pQ z5@}P7zG1U&F7%V#UZ>R7^93K=PGL%ydAAKPRu;F7bgt=^R4vZVMkuqwK-wxdo?sisg8SmrZIoEQnU<>gwtxp6Y+yICm*`mZ-}1DPwto6p{r(tp78C zIFf%007(2cAUL`nr0l9tPnx28yy`L5Bt*U%L5J<{=*Ydn!C?{1Li9p`cwAZZ`qX+` zKLnO1)q-Br9dEOn{yPN{%}e9E012;Po1pZ3dmYc+S*aNHa0mv za`hiG)HtC$)hX7|rv>VOlbxMi7f4%GCM?3@3e0>zfZjt9w|~Et1rekVD~UxA zN-$gm^@0C}H^FQ|tY!S0o15#9L*5kWM-z1m}*Y12f;#E4Od3`t|vt6&Ogt z9;`MbEH7tBU6D5-4KAEm7jzj0R8M0OBSCw6dz{J1$$kjFUT1s3v@9*>v!JlDl9!V^ zpTqzIPQXpR17<{5=i$Sy*g52&9C-Feop(0cDkdf-!cS~v{f%}sl(JR2hK9^7YRIwz zpyeP<16PyL_UN0@Dr9h_cg&A-si8Xo(TKWU09jV@@;Vv^s9$S${p=3?X)w6((lIah z87M~guH$2CXMZN%P>`Dpj|iEu>5LPpHot8o3~QeV zL0V6W6rxfDqyu0RFUOSNriI1DHGiu$b*D-|5r8u>ME<~ocTGF%KvuLdl7 zZthoxD)-6q0%xssMPE;EtH-&nsKRmX<3NgRh%Rark+U5wPhS7{@xu;H7Y`pkBs{sE z6;unAASX)P#9FXJjR5?z#mV8tb#-+yXnZR=e?8z~vQ&-@Fr4@&7qL6oS@VCwr+s6I za5Np|r~zHv+25btgb;oOev<9*=cy?J0yD0`8-BA_h`ZzJ3~e+~GZMtR zbG+WS6u8tYQ75UR8@){wj9f;0RtmV|%P(KPq-6yGR9XmWy^@Z1oT|p@gqHcNf`Y~SKm#_>(bAG9 zaAJe0fzw4B3iv2(DJcXwv3DLgicG0wS*UjRv1k@ig?dc|Jd6`JgK6isHt^i+4U&_Wk52#_8mGtsw(Yy$nX8Qq z0a6`!2(40j562bdxPz|kF>f(HO9UFcRArAF{HD?CY(w?4XmP0ACH8tf`0)T&ziMeyuUVd~3xNve{-ejV$#Cxn~ zeKBszeE|5bi01mj_M#XX%r8K5Ty5L{y?KMPr(TbPBM@G>a%DR(AYcSIz0PV329u5= zjx8Jtv>yq)ceWMy#0u~$+t-0dSHlOpPykQbfws_BsP0!kWMwUQ1xPuperY;?J3}K& zzSq(zs^!LJh-_y3Wp{8`fRu2T;}Lpm(0cb*DjDHQ-kV2HJz9qu{xqa++GSZc4Oh%K_k4F>@hGV?T`BUL>4YCF2&@oMPL~=9-?Qyl6bhU>7578s;;6k;RG-rjZoESB{ur= z=eVpS24;r87syjpv?B@aA8P1Fd0inq7$YXX3COw=IPy5}`HXZ84Rv)PW?{$Avk>px znS|`8;-PYmki&&*o7N2s><&ZcQxuwetKL)guCW|V&W?`Re@7~}!y&NRLFMLX0D0po zlt6Mn7dEeD+(8a_X)#G%zlVnC*e+jIIG)eSlXyeMSknEA@OTUj_K~3KXoG4zA0je$ zc=HohM+~fGnRgLbykVK={#Gu4wCGfo49=BVf3bf*??phTV`&YFT*)AA{R-1@~A6$|ioX zH>>}K!vGs}i@!N^ifsRZHUkw9M=CNAs4-EK5E1>}K=afn++D~_nWu>R)`5L*rn+)P zW#w%5HE@YKyb70rt%L9`j4UuMut0H&^H(tUEYTz#%(~!^6W$?Lg3{q@Fvl1ICy$2CimauIClT4e=0h zxtsVv4`mtHU0huJ@4O{|4oxhy5^3&I7CBO*7vUegIr`lAG4Ny0&{mrm#^YtaModYdey6i9kVeAjE zCVQQQ{_NT30v9hnX4WTw(Y!X6yg@3_n(fNm^q!tSq7Zf2x;zxOw%6DHNfTT#KDqJg zJPZKDpX|^r4*%+9Dey_ekr4)_#H;V?+sah)VvdmeiGf8tQUQ<=gciRtj|@S5M1Ip| zP#``Rmjw}DhYq1_#$p!KD5Mk=$FKkMrLfbyqr&6;XvuzfW)@dqG+9*!4U2W!!_Yek z-og9OEQgYzQse0Gm%k4Tln?jyl>{Pappkj2lT&lC*z-sTc`7ZAej$v=EDz;NBz{KG zme2^HID&n`5!Mo|GHeI=TX7q`i1zgKv?a&#wzAk^O4>ep6)te<3&ozfnVI&`#dAtH z`O+R)4K@G!2lVzhNQ!)VPX-iWa&r565UuadqT@JOW-w8vKJP=la7PSHPwhuI@Se(H z>clJ^vC*vn41ZQXSD{ z{sd|h9LU^0dk`v=WgbbVI+mP_FAt?(b&e-9w4c?Q0-31iZoqM?g`MTEZ}CwZ+7?exX0dlcCihN1l+h2 z4Gz2&r_i$u=b^jYR#Xz3`F{ru`68(EkR4nQDUcjMA7D?nM>I#fa3&0TaNZT9=sC^W zSV@1{>POcoh@hNa9jkJ6z_Gy>2UGnDT7!G0ZINHTn+xdtJIH|fjl1=1LRjMn3<7ca z3(vR)P%ozdQye-Jo%n3DrIl4RDnZ%=R8jO+bLVl<12@U`KvT1SJ=SG3O3Y<> z*oBP1SGzq6)B)+xGszyyfAmeDW*1$cv~&Zw0Y;wMgY`You9-RfPC&WOAgJ!P0UpOE ziJSyPVf(2cs<;HFejH5r^E9IUCW^<5P^|0Cwnc3m!Eh=(`V}-%nh@u(`w0aF-QJ^B zuJPX+8%;e9H~W=G^5XF=!2&>o_32lw_wgj-P1_g^0A7k-CuabPunKC2X_*AJfMRj1 zw)Pm{(>aC(#$(`I;(!VlZ-k!Y%wI=g!%PaqTS1BVsn`j>+7im~Q1O!h$0<@$d5{JQ z@$uQC#81odawLeA)|BMs7h=Q1`(~$_L-bD(_!5Q@fc>>S0Aj@jP^kyJszA&%2f42c z)r6pa43*e@i1@&^u!5*Y2N<5uSy@)=J<4JkfUwgwvNqYTUfn2jUefV@|Ni}7DD=s3 zvi8uV*!uYT**lOYMaMyTgX^_F2E~#r@L5;0pb`e|VQdjSD&wUu%ryA{@>50&N^Dq! z{~n6w4&)si7)vEtjguJu%P7L7(Kr7u{s();yf2#`y=I2%)CXx4=*R@r)}r(&@~*4I zc4W{W-eF(ff>>BqS!u`$pI9!yYKUGUxhk-Uw9^C=CDeyPe&N@rxHP{&P7QsFJAQW^qrh`4p7|q22QSV>CKq!x)7f z|LOn;k%v#>7enPt>Vq%b(>UH51L%n4KZe9QEDbc!^vSi7pzN9hnTqbN`*8qz`k8_+ zUpS)pOj@3R8dCV=HcrFn(s__u!j4zgxF%(Rlppl1^6V zRA)u+%i?FvS|ekgC}dr;qj?IHDbA;Y(EG0idU`gMA!6w5)sdi`=QR*Y@J%WmSH*n9 zAVysvGW`;-7%S|wp2xiPpV29fPR^8tHg4@utqgjm1jP|Z;dFMupK7*Uj`+}PlHS<~ zV!FMR3{c)id}Z{A@HoQ2Z7vohw+-8TL??#{@6_(iXZ0Na#fYJkko`U+q-Xae zTZ3-SCF=1V^s!C31q2+2P(|YC$jD)4M&o6;s(wYZRn80dN1%A!eMM)mv;Fq;rSK@X z(dIKGuRyYq!G{d*zOk?7XzE$mB+2v}Ti@8Y{SSbK$QbycY5;GIUWOV>#W?q8wMUu3B$CF)c(BqSnsxnC32x>(@ymf}t89aX! z&SCd=qZAjLm&c=z!QPITTv*UG%B=tAR_(KoXo=XMN;n8Y7E-8|$hq{rlmYP;$Ns65TToFSpCnqs03ILf8>)H8p|QElgef0!&;kM^kHOr}xWD zog1ji5V#N~lv(`?FtI0@$-v;oDI^rdjZ+uj3isT6V;T!h_VOwF-ClsOw)BAL zalo}bb342Iop%aE%_1Q1E2VY;+S5Tb=MJvDkxOlX zTH^0udc2ogIf#P$y0>Q|5Xy7ssxsgVC)hAaC?O%ir+6}V+K4#@G$5U1%%UE<5I_2a zg@rY=TD=abkP7FePZ6P^_tP=sEJ4q4q`(q^E4uM^PpB6EibStDJp~ zJPoR=UO$l|C)S}~KY6Rp* z=H|Vby@4Q}0LM5`0LcI$Az|!0TqOON8G(+(#_7|i_mh&7RbeXJ#52@JLoKgO)gID$ z?)}?E0hb;WHew4yr7QhlSE!;3DCzN`W6udtb6o|!FS}ne8qBBdU76H(V-d7rZ*bV@ zeN4KH!BW{IvR?t=3DClVkY0(IriiX!yDaqC#D~(Y3F;tc!QeAMk1C*Fbw%sD3o|Yj zn!EsEIsqCT7lLB+xg5SYrw{Cs0PVcZy4^8Y*cYkf59!B;t9Qr{S6?e8~?&6(W#Z^MYo2OTXYrv*3SeZ(T-R z&7_Ra9iYNn2M34Sa-aVv(XAeda(`h9vg+V=4LU;f!5==Xv6|o-*-%kaM?eug6X~W0 zkxaM9yz6=WUi?A2%~;K0^N`EL24upfY(6`ef7Eq(o695n)Hxcr1G_Q#w7|&w(*YZo z$jdD_ROzxZ39xI(IKZi}xVV~uhQ@Jf>+aadNUWqs-#G+03Tps6L0`@zSV3U(D*N*c z#lAK)qz?Zw?(gq!MI}W`AgnyhNi`rRC&!1eEt1&Tq+#O=NNzHXXtmjPM~+?rNB??l zvPtZVQN54aUCQ&RFA=UViNqf}M2@7?D!QD!aBuY7GiT(-u=if8l={A>#?A*#_%0;91i-}@3H-VMBhQks=p>gc0FieO+j?5O?{7WDRfxnRc}262%^fkfG>J{uu%qsc5#~BR)c-*J){#RQi ze%&1#8#^X^NaKQT0D>JvdKE$YC&NH=o-Hx&N*WpFBC7M9f~_@MNBb+v6sYL(cV4l_ z?)rCV^NscwKR`Fbpdgs-KZy7=z#b9L3#DWPt1Ni`8@os1>DE$F zt8#eutgG85QXMHnZ4ko@E5@Gh*b1YQ9B?|ILEUD-q1!*)RJi88(F zCBP1WesaVXyub<+EEU}Zh)Zi%7w>To`GtV>^G>5uE4f{4@J0jhR;A4$t3ErL#HgV z`O6eYBhOmHW9ScJV0)Rq>&=_{7T_C4o&Gx?zkT~w`;aq?Yr+@K%Y%EBUaC1*Z{3A$ zNkKidNbU5@Ovz2yhB5+#-ABO6j!^1D9dL+7$gyVCqhFRz%S)0TXl|Ic7xLeM-U~l0 z?LP%2C9gyP{k3%?c$kdVIe?h9z%9Uz%^{Zv&_s%TCi`FRYYW(I!_>{=)Y-ri7l1t2 z={IbOdw+tvNP@{xAwQ&^!wL}PHiJ&nZQP}F9|X%djX}({pFxIu5Kr*{(jOL!oh)4` zUzwbAh+BSv7)e0mS`pO1g83Q!P`jf(Qpo z4{f&Vw6wG&Aa#`hVHNBd-~_hgZh8+fv;}Jq3JvnoC&e!nl$O$g)*?YA120vDgFQ?x z5nz)~dU`t4Etdd(5{-_I`n-AbCZ}914z%-y$G?lMG!KLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C z0%S=R#6ndfA8xfGAt+v92%s|(gq0?hlW6cK6Hp&TWrWBqB&b~3#VNA zH)aI;|lDA<>Pd7(vUwghev><10{mcy37KLq<_!QKV52|hn9 zftLmQMPM+-J|e{L04tW$T9*n@j*kz;^`LE#HUK4RE7y z(DKM^iZuep7u5fN&($OFabTkc>~qUStbmZvbSr+-;M+y)Xa( N002ovPDHLkV1k#tX$$}W diff --git a/SampleCodes/MoneyConverter/MoneyConverter.xcodeproj/project.pbxproj b/SampleCodes/MoneyConverter/MoneyConverter.xcodeproj/project.pbxproj index f11efb9..3e91bfc 100644 --- a/SampleCodes/MoneyConverter/MoneyConverter.xcodeproj/project.pbxproj +++ b/SampleCodes/MoneyConverter/MoneyConverter.xcodeproj/project.pbxproj @@ -3,31 +3,70 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 48; objects = { /* Begin PBXBuildFile section */ - 2C99854A1C224D6000FB4C4B /* Money.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C9985491C224D6000FB4C4B /* Money.swift */; }; - 2C9AD9EF1C214348004D41FE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C9AD9EE1C214348004D41FE /* AppDelegate.swift */; }; - 2C9AD9F11C214348004D41FE /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C9AD9F01C214348004D41FE /* ViewController.swift */; }; - 2C9AD9F41C214348004D41FE /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2C9AD9F21C214348004D41FE /* Main.storyboard */; }; - 2C9AD9F61C214348004D41FE /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2C9AD9F51C214348004D41FE /* Assets.xcassets */; }; - 2C9AD9F91C214348004D41FE /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2C9AD9F71C214348004D41FE /* LaunchScreen.storyboard */; }; + B2F7D82A1FB06F3B001340FA /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2F7D8291FB06F3B001340FA /* AppDelegate.swift */; }; + B2F7D82C1FB06F3B001340FA /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2F7D82B1FB06F3B001340FA /* ViewController.swift */; }; + B2F7D82F1FB06F3B001340FA /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B2F7D82D1FB06F3B001340FA /* Main.storyboard */; }; + B2F7D8311FB06F3B001340FA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B2F7D8301FB06F3B001340FA /* Assets.xcassets */; }; + B2F7D8341FB06F3B001340FA /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B2F7D8321FB06F3B001340FA /* LaunchScreen.storyboard */; }; + B2F7D83F1FB06F3B001340FA /* MoneyConverterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2F7D83E1FB06F3B001340FA /* MoneyConverterTests.swift */; }; + B2F7D84A1FB06F3B001340FA /* MoneyConverterUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2F7D8491FB06F3B001340FA /* MoneyConverterUITests.swift */; }; + B2F7D8581FB07346001340FA /* Money.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2F7D8571FB07346001340FA /* Money.swift */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + B2F7D83B1FB06F3B001340FA /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B2F7D81E1FB06F3B001340FA /* Project object */; + proxyType = 1; + remoteGlobalIDString = B2F7D8251FB06F3B001340FA; + remoteInfo = MoneyConverter; + }; + B2F7D8461FB06F3B001340FA /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B2F7D81E1FB06F3B001340FA /* Project object */; + proxyType = 1; + remoteGlobalIDString = B2F7D8251FB06F3B001340FA; + remoteInfo = MoneyConverter; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXFileReference section */ - 2C9985491C224D6000FB4C4B /* Money.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Money.swift; sourceTree = ""; }; - 2C9AD9EB1C214347004D41FE /* MoneyConverter.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MoneyConverter.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 2C9AD9EE1C214348004D41FE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 2C9AD9F01C214348004D41FE /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; - 2C9AD9F31C214348004D41FE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 2C9AD9F51C214348004D41FE /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 2C9AD9F81C214348004D41FE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 2C9AD9FA1C214348004D41FE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + B2F7D8261FB06F3B001340FA /* MoneyConverter.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MoneyConverter.app; sourceTree = BUILT_PRODUCTS_DIR; }; + B2F7D8291FB06F3B001340FA /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + B2F7D82B1FB06F3B001340FA /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + B2F7D82E1FB06F3B001340FA /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + B2F7D8301FB06F3B001340FA /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + B2F7D8331FB06F3B001340FA /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + B2F7D8351FB06F3B001340FA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + B2F7D83A1FB06F3B001340FA /* MoneyConverterTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MoneyConverterTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + B2F7D83E1FB06F3B001340FA /* MoneyConverterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoneyConverterTests.swift; sourceTree = ""; }; + B2F7D8401FB06F3B001340FA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + B2F7D8451FB06F3B001340FA /* MoneyConverterUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MoneyConverterUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + B2F7D8491FB06F3B001340FA /* MoneyConverterUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoneyConverterUITests.swift; sourceTree = ""; }; + B2F7D84B1FB06F3B001340FA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + B2F7D8571FB07346001340FA /* Money.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Money.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2C9AD9E81C214347004D41FE /* Frameworks */ = { + B2F7D8231FB06F3B001340FA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B2F7D8371FB06F3B001340FA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B2F7D8421FB06F3B001340FA /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -37,46 +76,68 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2C9AD9E21C214347004D41FE = { + B2F7D81D1FB06F3B001340FA = { isa = PBXGroup; children = ( - 2C9AD9ED1C214348004D41FE /* MoneyConverter */, - 2C9AD9EC1C214347004D41FE /* Products */, + B2F7D8281FB06F3B001340FA /* MoneyConverter */, + B2F7D83D1FB06F3B001340FA /* MoneyConverterTests */, + B2F7D8481FB06F3B001340FA /* MoneyConverterUITests */, + B2F7D8271FB06F3B001340FA /* Products */, ); sourceTree = ""; }; - 2C9AD9EC1C214347004D41FE /* Products */ = { + B2F7D8271FB06F3B001340FA /* Products */ = { isa = PBXGroup; children = ( - 2C9AD9EB1C214347004D41FE /* MoneyConverter.app */, + B2F7D8261FB06F3B001340FA /* MoneyConverter.app */, + B2F7D83A1FB06F3B001340FA /* MoneyConverterTests.xctest */, + B2F7D8451FB06F3B001340FA /* MoneyConverterUITests.xctest */, ); name = Products; sourceTree = ""; }; - 2C9AD9ED1C214348004D41FE /* MoneyConverter */ = { + B2F7D8281FB06F3B001340FA /* MoneyConverter */ = { isa = PBXGroup; children = ( - 2C9AD9EE1C214348004D41FE /* AppDelegate.swift */, - 2C9AD9F01C214348004D41FE /* ViewController.swift */, - 2C9985491C224D6000FB4C4B /* Money.swift */, - 2C9AD9F21C214348004D41FE /* Main.storyboard */, - 2C9AD9F51C214348004D41FE /* Assets.xcassets */, - 2C9AD9F71C214348004D41FE /* LaunchScreen.storyboard */, - 2C9AD9FA1C214348004D41FE /* Info.plist */, + B2F7D8291FB06F3B001340FA /* AppDelegate.swift */, + B2F7D82B1FB06F3B001340FA /* ViewController.swift */, + B2F7D82D1FB06F3B001340FA /* Main.storyboard */, + B2F7D8571FB07346001340FA /* Money.swift */, + B2F7D8301FB06F3B001340FA /* Assets.xcassets */, + B2F7D8321FB06F3B001340FA /* LaunchScreen.storyboard */, + B2F7D8351FB06F3B001340FA /* Info.plist */, ); path = MoneyConverter; sourceTree = ""; }; + B2F7D83D1FB06F3B001340FA /* MoneyConverterTests */ = { + isa = PBXGroup; + children = ( + B2F7D83E1FB06F3B001340FA /* MoneyConverterTests.swift */, + B2F7D8401FB06F3B001340FA /* Info.plist */, + ); + path = MoneyConverterTests; + sourceTree = ""; + }; + B2F7D8481FB06F3B001340FA /* MoneyConverterUITests */ = { + isa = PBXGroup; + children = ( + B2F7D8491FB06F3B001340FA /* MoneyConverterUITests.swift */, + B2F7D84B1FB06F3B001340FA /* Info.plist */, + ); + path = MoneyConverterUITests; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 2C9AD9EA1C214347004D41FE /* MoneyConverter */ = { + B2F7D8251FB06F3B001340FA /* MoneyConverter */ = { isa = PBXNativeTarget; - buildConfigurationList = 2C9AD9FD1C214348004D41FE /* Build configuration list for PBXNativeTarget "MoneyConverter" */; + buildConfigurationList = B2F7D84E1FB06F3B001340FA /* Build configuration list for PBXNativeTarget "MoneyConverter" */; buildPhases = ( - 2C9AD9E71C214347004D41FE /* Sources */, - 2C9AD9E81C214347004D41FE /* Frameworks */, - 2C9AD9E91C214347004D41FE /* Resources */, + B2F7D8221FB06F3B001340FA /* Sources */, + B2F7D8231FB06F3B001340FA /* Frameworks */, + B2F7D8241FB06F3B001340FA /* Resources */, ); buildRules = ( ); @@ -84,81 +145,173 @@ ); name = MoneyConverter; productName = MoneyConverter; - productReference = 2C9AD9EB1C214347004D41FE /* MoneyConverter.app */; + productReference = B2F7D8261FB06F3B001340FA /* MoneyConverter.app */; productType = "com.apple.product-type.application"; }; + B2F7D8391FB06F3B001340FA /* MoneyConverterTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = B2F7D8511FB06F3B001340FA /* Build configuration list for PBXNativeTarget "MoneyConverterTests" */; + buildPhases = ( + B2F7D8361FB06F3B001340FA /* Sources */, + B2F7D8371FB06F3B001340FA /* Frameworks */, + B2F7D8381FB06F3B001340FA /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + B2F7D83C1FB06F3B001340FA /* PBXTargetDependency */, + ); + name = MoneyConverterTests; + productName = MoneyConverterTests; + productReference = B2F7D83A1FB06F3B001340FA /* MoneyConverterTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + B2F7D8441FB06F3B001340FA /* MoneyConverterUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = B2F7D8541FB06F3B001340FA /* Build configuration list for PBXNativeTarget "MoneyConverterUITests" */; + buildPhases = ( + B2F7D8411FB06F3B001340FA /* Sources */, + B2F7D8421FB06F3B001340FA /* Frameworks */, + B2F7D8431FB06F3B001340FA /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + B2F7D8471FB06F3B001340FA /* PBXTargetDependency */, + ); + name = MoneyConverterUITests; + productName = MoneyConverterUITests; + productReference = B2F7D8451FB06F3B001340FA /* MoneyConverterUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - 2C9AD9E31C214347004D41FE /* Project object */ = { + B2F7D81E1FB06F3B001340FA /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 0710; - LastUpgradeCheck = 0710; - ORGANIZATIONNAME = CodersHigh; + LastSwiftUpdateCheck = 0910; + LastUpgradeCheck = 0910; + ORGANIZATIONNAME = Gompu; TargetAttributes = { - 2C9AD9EA1C214347004D41FE = { - CreatedOnToolsVersion = 7.1; + B2F7D8251FB06F3B001340FA = { + CreatedOnToolsVersion = 9.1; + ProvisioningStyle = Automatic; + }; + B2F7D8391FB06F3B001340FA = { + CreatedOnToolsVersion = 9.1; + ProvisioningStyle = Automatic; + TestTargetID = B2F7D8251FB06F3B001340FA; + }; + B2F7D8441FB06F3B001340FA = { + CreatedOnToolsVersion = 9.1; + ProvisioningStyle = Automatic; + TestTargetID = B2F7D8251FB06F3B001340FA; }; }; }; - buildConfigurationList = 2C9AD9E61C214347004D41FE /* Build configuration list for PBXProject "MoneyConverter" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + buildConfigurationList = B2F7D8211FB06F3B001340FA /* Build configuration list for PBXProject "MoneyConverter" */; + compatibilityVersion = "Xcode 8.0"; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); - mainGroup = 2C9AD9E21C214347004D41FE; - productRefGroup = 2C9AD9EC1C214347004D41FE /* Products */; + mainGroup = B2F7D81D1FB06F3B001340FA; + productRefGroup = B2F7D8271FB06F3B001340FA /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 2C9AD9EA1C214347004D41FE /* MoneyConverter */, + B2F7D8251FB06F3B001340FA /* MoneyConverter */, + B2F7D8391FB06F3B001340FA /* MoneyConverterTests */, + B2F7D8441FB06F3B001340FA /* MoneyConverterUITests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 2C9AD9E91C214347004D41FE /* Resources */ = { + B2F7D8241FB06F3B001340FA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B2F7D8341FB06F3B001340FA /* LaunchScreen.storyboard in Resources */, + B2F7D8311FB06F3B001340FA /* Assets.xcassets in Resources */, + B2F7D82F1FB06F3B001340FA /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B2F7D8381FB06F3B001340FA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B2F7D8431FB06F3B001340FA /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2C9AD9F91C214348004D41FE /* LaunchScreen.storyboard in Resources */, - 2C9AD9F61C214348004D41FE /* Assets.xcassets in Resources */, - 2C9AD9F41C214348004D41FE /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 2C9AD9E71C214347004D41FE /* Sources */ = { + B2F7D8221FB06F3B001340FA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B2F7D8581FB07346001340FA /* Money.swift in Sources */, + B2F7D82C1FB06F3B001340FA /* ViewController.swift in Sources */, + B2F7D82A1FB06F3B001340FA /* AppDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B2F7D8361FB06F3B001340FA /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2C99854A1C224D6000FB4C4B /* Money.swift in Sources */, - 2C9AD9F11C214348004D41FE /* ViewController.swift in Sources */, - 2C9AD9EF1C214348004D41FE /* AppDelegate.swift in Sources */, + B2F7D83F1FB06F3B001340FA /* MoneyConverterTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B2F7D8411FB06F3B001340FA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B2F7D84A1FB06F3B001340FA /* MoneyConverterUITests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + B2F7D83C1FB06F3B001340FA /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = B2F7D8251FB06F3B001340FA /* MoneyConverter */; + targetProxy = B2F7D83B1FB06F3B001340FA /* PBXContainerItemProxy */; + }; + B2F7D8471FB06F3B001340FA /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = B2F7D8251FB06F3B001340FA /* MoneyConverter */; + targetProxy = B2F7D8461FB06F3B001340FA /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ - 2C9AD9F21C214348004D41FE /* Main.storyboard */ = { + B2F7D82D1FB06F3B001340FA /* Main.storyboard */ = { isa = PBXVariantGroup; children = ( - 2C9AD9F31C214348004D41FE /* Base */, + B2F7D82E1FB06F3B001340FA /* Base */, ); name = Main.storyboard; sourceTree = ""; }; - 2C9AD9F71C214348004D41FE /* LaunchScreen.storyboard */ = { + B2F7D8321FB06F3B001340FA /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( - 2C9AD9F81C214348004D41FE /* Base */, + B2F7D8331FB06F3B001340FA /* Base */, ); name = LaunchScreen.storyboard; sourceTree = ""; @@ -166,29 +319,41 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - 2C9AD9FB1C214348004D41FE /* Debug */ = { + B2F7D84C1FB06F3B001340FA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_IDENTITY = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; @@ -202,38 +367,50 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.1; + IPHONEOS_DEPLOYMENT_TARGET = 11.1; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; - 2C9AD9FC1C214348004D41FE /* Release */ = { + B2F7D84D1FB06F3B001340FA /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_IDENTITY = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; @@ -241,58 +418,144 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.1; + IPHONEOS_DEPLOYMENT_TARGET = 11.1; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; VALIDATE_PRODUCT = YES; }; name = Release; }; - 2C9AD9FE1C214348004D41FE /* Debug */ = { + B2F7D84F1FB06F3B001340FA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = MoneyConverter/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.codershigh.MoneyConverter; + PRODUCT_BUNDLE_IDENTIFIER = Gompu.MoneyConverter; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; - 2C9AD9FF1C214348004D41FE /* Release */ = { + B2F7D8501FB06F3B001340FA /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = MoneyConverter/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.codershigh.MoneyConverter; + PRODUCT_BUNDLE_IDENTIFIER = Gompu.MoneyConverter; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + B2F7D8521FB06F3B001340FA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = MoneyConverterTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = Gompu.MoneyConverterTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MoneyConverter.app/MoneyConverter"; + }; + name = Debug; + }; + B2F7D8531FB06F3B001340FA /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = MoneyConverterTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = Gompu.MoneyConverterTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MoneyConverter.app/MoneyConverter"; + }; + name = Release; + }; + B2F7D8551FB06F3B001340FA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = MoneyConverterUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = Gompu.MoneyConverterUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = MoneyConverter; + }; + name = Debug; + }; + B2F7D8561FB06F3B001340FA /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = MoneyConverterUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = Gompu.MoneyConverterUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = MoneyConverter; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 2C9AD9E61C214347004D41FE /* Build configuration list for PBXProject "MoneyConverter" */ = { + B2F7D8211FB06F3B001340FA /* Build configuration list for PBXProject "MoneyConverter" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B2F7D84C1FB06F3B001340FA /* Debug */, + B2F7D84D1FB06F3B001340FA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B2F7D84E1FB06F3B001340FA /* Build configuration list for PBXNativeTarget "MoneyConverter" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B2F7D84F1FB06F3B001340FA /* Debug */, + B2F7D8501FB06F3B001340FA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B2F7D8511FB06F3B001340FA /* Build configuration list for PBXNativeTarget "MoneyConverterTests" */ = { isa = XCConfigurationList; buildConfigurations = ( - 2C9AD9FB1C214348004D41FE /* Debug */, - 2C9AD9FC1C214348004D41FE /* Release */, + B2F7D8521FB06F3B001340FA /* Debug */, + B2F7D8531FB06F3B001340FA /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 2C9AD9FD1C214348004D41FE /* Build configuration list for PBXNativeTarget "MoneyConverter" */ = { + B2F7D8541FB06F3B001340FA /* Build configuration list for PBXNativeTarget "MoneyConverterUITests" */ = { isa = XCConfigurationList; buildConfigurations = ( - 2C9AD9FE1C214348004D41FE /* Debug */, - 2C9AD9FF1C214348004D41FE /* Release */, + B2F7D8551FB06F3B001340FA /* Debug */, + B2F7D8561FB06F3B001340FA /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = 2C9AD9E31C214347004D41FE /* Project object */; + rootObject = B2F7D81E1FB06F3B001340FA /* Project object */; } diff --git a/SampleCodes/MoneyConverter/MoneyConverter.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/SampleCodes/MoneyConverter/MoneyConverter.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..5566428 --- /dev/null +++ b/SampleCodes/MoneyConverter/MoneyConverter.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/SampleCodes/MoneyConverter/MoneyConverter/AppDelegate.swift b/SampleCodes/MoneyConverter/MoneyConverter/AppDelegate.swift index 2217838..6bfaedd 100644 --- a/SampleCodes/MoneyConverter/MoneyConverter/AppDelegate.swift +++ b/SampleCodes/MoneyConverter/MoneyConverter/AppDelegate.swift @@ -2,8 +2,8 @@ // AppDelegate.swift // MoneyConverter // -// Created by Lingostar on 2015. 12. 16.. -// Copyright © 2015년 CodersHigh. All rights reserved. +// Created by RUBIS on 2017. 11. 6.. +// Copyright © 2017년 Gompu. All rights reserved. // import UIKit @@ -14,37 +14,30 @@ class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? - func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. - - - - - - - return true } - func applicationWillResignActive(application: UIApplication) { + 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 throttle down OpenGL ES frame rates. Games should use this method to pause the game. + // 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) { + 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 inactive state; here you can undo many of the changes made on entering the background. + 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) { + 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) { + func applicationWillTerminate(_ application: UIApplication) { // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. } diff --git a/SampleCodes/MoneyConverter/MoneyConverter/Assets.xcassets/AppIcon.appiconset/Contents.json b/SampleCodes/MoneyConverter/MoneyConverter/Assets.xcassets/AppIcon.appiconset/Contents.json index 36d2c80..1d060ed 100644 --- a/SampleCodes/MoneyConverter/MoneyConverter/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/SampleCodes/MoneyConverter/MoneyConverter/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,5 +1,15 @@ { "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, { "idiom" : "iphone", "size" : "29x29", @@ -30,6 +40,16 @@ "size" : "60x60", "scale" : "3x" }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, { "idiom" : "ipad", "size" : "29x29", @@ -59,6 +79,11 @@ "idiom" : "ipad", "size" : "76x76", "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" } ], "info" : { diff --git a/SampleCodes/MoneyConverter/MoneyConverter/Base.lproj/LaunchScreen.storyboard b/SampleCodes/MoneyConverter/MoneyConverter/Base.lproj/LaunchScreen.storyboard index 2e721e1..f83f6fd 100644 --- a/SampleCodes/MoneyConverter/MoneyConverter/Base.lproj/LaunchScreen.storyboard +++ b/SampleCodes/MoneyConverter/MoneyConverter/Base.lproj/LaunchScreen.storyboard @@ -1,22 +1,20 @@ - + - + + + - - - - - + - - + + diff --git a/SampleCodes/MoneyConverter/MoneyConverter/Base.lproj/Main.storyboard b/SampleCodes/MoneyConverter/MoneyConverter/Base.lproj/Main.storyboard index 89f6126..26c6e8a 100644 --- a/SampleCodes/MoneyConverter/MoneyConverter/Base.lproj/Main.storyboard +++ b/SampleCodes/MoneyConverter/MoneyConverter/Base.lproj/Main.storyboard @@ -1,41 +1,45 @@ - - + + + + + - + + + - - - - - - + + + + + - - - - - - - - - - + + + @@ -43,39 +47,36 @@ + + + + + + + + - - + - - - - + + - - - - + + + - + diff --git a/SampleCodes/MoneyConverter/MoneyConverter/Info.plist b/SampleCodes/MoneyConverter/MoneyConverter/Info.plist index 40c6215..16be3b6 100644 --- a/SampleCodes/MoneyConverter/MoneyConverter/Info.plist +++ b/SampleCodes/MoneyConverter/MoneyConverter/Info.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - en + $(DEVELOPMENT_LANGUAGE) CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -16,8 +16,6 @@ APPL CFBundleShortVersionString 1.0 - CFBundleSignature - ???? CFBundleVersion 1 LSRequiresIPhoneOS diff --git a/SampleCodes/MoneyConverter/MoneyConverter/Money.swift b/SampleCodes/MoneyConverter/MoneyConverter/Money.swift index 169ee64..7cc75d3 100644 --- a/SampleCodes/MoneyConverter/MoneyConverter/Money.swift +++ b/SampleCodes/MoneyConverter/MoneyConverter/Money.swift @@ -2,59 +2,53 @@ // Money.swift // MoneyConverter // -// Created by Lingostar on 2015. 12. 17.. -// Copyright © 2015년 CodersHigh. All rights reserved. +// Created by RUBIS on 2017. 11. 6.. +// Copyright © 2017년 Gompu. All rights reserved. // import Foundation -import MapKit + enum Currency:Int { case USD = 0, KRW, JPY, EUR - var symbol:String { + var ratio: Double { get { switch self { - case .USD : return "$" - case .KRW : return "₩" - case .JPY : return "¥" - case .EUR : return "€" + case .USD: return 1.0 + case .KRW: return 1178.5 + case .JPY: return 122.45 + case .EUR: return 0.92 } } } - var ratio:Double { + var symbol: String { get { switch self { - case .USD : return 1.0 - case .KRW : return 1178.5 - case .JPY : return 122.45 - case .EUR : return 0.92 + case .USD: return "$" + case .KRW: return "₩" + case .JPY: return "¥" + case .EUR: return "€" } } } } struct Money { - - //var location:CLLocationCoordinate2D - var usdollar = 0.0 - - init(_ _usdollar:Double){ + + init(_ _usdollar: Double) { usdollar = _usdollar } - init(_ amount:Double, currency:Currency){ + init(_ amount: Double, currency: Currency) { usdollar = amount / currency.ratio } - - func valueInCurrency(currency:Currency) -> String { - return "\(currency.symbol) " + "\(usdollar*currency.ratio)" + + func valueInCurrency(currency: Currency) -> String { + return "\(currency.symbol)" + "\(usdollar * currency.ratio)" } } - -let money = Money(120.0) -let koreanIncome = Money(500_000 , currency:.KRW) - - +let myMoney = Money(120) +let incomeInKRW = Money(350_000, currency: .KRW) diff --git a/SampleCodes/MoneyConverter/MoneyConverter/ViewController.swift b/SampleCodes/MoneyConverter/MoneyConverter/ViewController.swift index 659723e..09f814c 100644 --- a/SampleCodes/MoneyConverter/MoneyConverter/ViewController.swift +++ b/SampleCodes/MoneyConverter/MoneyConverter/ViewController.swift @@ -2,19 +2,17 @@ // ViewController.swift // MoneyConverter // -// Created by Lingostar on 2015. 12. 16.. -// Copyright © 2015년 CodersHigh. All rights reserved. +// Created by RUBIS on 2017. 11. 6.. +// Copyright © 2017년 Gompu. All rights reserved. // import UIKit class ViewController: UIViewController { - - @IBOutlet weak var currencySegment: UISegmentedControl! - @IBOutlet weak var sourceMoneyField: UITextField! + @IBOutlet weak var targetMoneyLabel: UILabel! - - + @IBOutlet weak var sourceMoneyField: UITextField! + @IBOutlet weak var currencySegment: UISegmentedControl! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. @@ -25,43 +23,27 @@ class ViewController: UIViewController { // Dispose of any resources that can be recreated. } - @IBAction func convertMoney(sender: AnyObject) { - guard let sourceCurrecy = Currency(rawValue:currencySegment.selectedSegmentIndex) else { + @IBAction func ConvertMoney(_ sender: Any) { + guard let sourceCurrency = Currency(rawValue: currencySegment.selectedSegmentIndex) else { print("Source Currency Error") return - } // if let 의 확장판. if let을 썼을때 indent 불편을 없앰. - + } + guard let sourceAmount = Double(sourceMoneyField.text!) else { targetMoneyLabel.text = "Error" return } - let sourceMoney = Money(sourceAmount, currency: sourceCurrecy) + let sourceMoney = Money(sourceAmount, currency: sourceCurrency) var targetMoneyString = "" - for (var i=0 ; i < 4 ; i++){ - targetMoneyString += sourceMoney.valueInCurrency(Currency.init(rawValue: i)!) + for i in 0...3 { + targetMoneyString += sourceMoney.valueInCurrency(currency: Currency.init(rawValue: i)!) targetMoneyString += "\r\n" } targetMoneyLabel.text = targetMoneyString - - /*if let sourceCurrecy = Currency(rawValue:currencySegment.selectedSegmentIndex) { - - if let sourceAmount = Double(sourceMoneyField.text!) { - - let sourceMoney = Money(sourceAmount, currency: sourceCurrecy) - - var targetMoneyString = "" - for (var i=0 ; i < 4 ; i++){ - targetMoneyString += sourceMoney.valueInCurrency(Currency.init(rawValue: i)!) - targetMoneyString += "\r\n" - } - - targetMoneyLabel.text = targetMoneyString - } - }*/ } - + } diff --git a/SampleCodes/MoneyConverter/MoneyConverterTests/Info.plist b/SampleCodes/MoneyConverter/MoneyConverterTests/Info.plist new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ b/SampleCodes/MoneyConverter/MoneyConverterTests/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/SampleCodes/MoneyConverter/MoneyConverterTests/MoneyConverterTests.swift b/SampleCodes/MoneyConverter/MoneyConverterTests/MoneyConverterTests.swift new file mode 100644 index 0000000..d468c9a --- /dev/null +++ b/SampleCodes/MoneyConverter/MoneyConverterTests/MoneyConverterTests.swift @@ -0,0 +1,36 @@ +// +// MoneyConverterTests.swift +// MoneyConverterTests +// +// Created by RUBIS on 2017. 11. 6.. +// Copyright © 2017년 Gompu. All rights reserved. +// + +import XCTest +@testable import MoneyConverter + +class MoneyConverterTests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git a/SampleCodes/MoneyConverter/MoneyConverterUITests/Info.plist b/SampleCodes/MoneyConverter/MoneyConverterUITests/Info.plist new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ b/SampleCodes/MoneyConverter/MoneyConverterUITests/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/SampleCodes/MoneyConverter/MoneyConverterUITests/MoneyConverterUITests.swift b/SampleCodes/MoneyConverter/MoneyConverterUITests/MoneyConverterUITests.swift new file mode 100644 index 0000000..272ab89 --- /dev/null +++ b/SampleCodes/MoneyConverter/MoneyConverterUITests/MoneyConverterUITests.swift @@ -0,0 +1,36 @@ +// +// MoneyConverterUITests.swift +// MoneyConverterUITests +// +// Created by RUBIS on 2017. 11. 6.. +// Copyright © 2017년 Gompu. All rights reserved. +// + +import XCTest + +class MoneyConverterUITests: XCTestCase { + + override func setUp() { + super.setUp() + + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. + XCUIApplication().launch() + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // Use recording to get started writing UI tests. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + +} diff --git "a/SampleCodes/\354\272\241\354\262\230 \353\263\265\354\202\254\353\263\270.PNG" "b/SampleCodes/\354\272\241\354\262\230 \353\263\265\354\202\254\353\263\270.PNG" new file mode 100644 index 0000000000000000000000000000000000000000..8257db7e8134326c97daa7dbf40788a84414a9a3 GIT binary patch literal 21404 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 literal 0 HcmV?d00001 diff --git "a/SampleCodes/\354\272\241\354\262\230.PNG" "b/SampleCodes/\354\272\241\354\262\230.PNG" new file mode 100644 index 0000000000000000000000000000000000000000..8257db7e8134326c97daa7dbf40788a84414a9a3 GIT binary patch literal 21404 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 literal 0 HcmV?d00001 diff --git a/completed_giyeonKim.PNG b/completed_giyeonKim.PNG new file mode 100644 index 0000000000000000000000000000000000000000..8257db7e8134326c97daa7dbf40788a84414a9a3 GIT binary patch literal 21404 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 literal 0 HcmV?d00001 From 25b59ff3d9de924f366bca3c327c43f70412c98b Mon Sep 17 00:00:00 2001 From: RUBIS Date: Tue, 7 Nov 2017 00:31:12 +0900 Subject: [PATCH 2/2] Convert --- ...30 \353\263\265\354\202\254\353\263\270.PNG" | Bin 21404 -> 0 bytes "SampleCodes/\354\272\241\354\262\230.PNG" | Bin 21404 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 "SampleCodes/\354\272\241\354\262\230 \353\263\265\354\202\254\353\263\270.PNG" delete mode 100644 "SampleCodes/\354\272\241\354\262\230.PNG" diff --git "a/SampleCodes/\354\272\241\354\262\230 \353\263\265\354\202\254\353\263\270.PNG" "b/SampleCodes/\354\272\241\354\262\230 \353\263\265\354\202\254\353\263\270.PNG" deleted file mode 100644 index 8257db7e8134326c97daa7dbf40788a84414a9a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21404 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 diff --git "a/SampleCodes/\354\272\241\354\262\230.PNG" "b/SampleCodes/\354\272\241\354\262\230.PNG" deleted file mode 100644 index 8257db7e8134326c97daa7dbf40788a84414a9a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21404 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