From 5b99ef6cdf68789a08ac250c4d38d7fee03ff175 Mon Sep 17 00:00:00 2001 From: Dennis Oberhoff Date: Mon, 20 Jan 2020 13:17:25 +0100 Subject: [PATCH] Apple Watch App - Refactored Codebasis into Frameworks - Added Swift compatibility stuff - Added WatchOS App - Fixes and tweaks --- Podfile | 27 +- Podfile.lock | 14 +- Sketch/AppIcon.sketch | Bin 49152 -> 0 bytes Sketch/Bus.sketch | Bin 49152 -> 0 bytes Sketch/Ferry.sketch | Bin 32768 -> 0 bytes Sketch/Icons.sketch | Bin 0 -> 37440 bytes Sketch/MetroBus.sketch | Bin 32768 -> 0 bytes Sketch/Ubahn.sketch | Bin 32768 -> 0 bytes Sketch/local.sketch | Bin 49152 -> 0 bytes Sketch/tram.sketch | Bin 57344 -> 0 bytes VBB.xcodeproj/project.pbxproj | 1191 +++++++++++++++-- .../xcshareddata/xcschemes/VBB.xcscheme | 78 ++ .../xcschemes/VBBFramework-WatchOS.xcscheme | 67 + .../xcschemes/VBBFramework-macOS.xcscheme | 67 + .../xcschemes/VBBNow (macOS).xcscheme | 100 ++ .../xcschemes/VBBWatch App.xcscheme | 105 ++ .../AppIcon.appiconset/Contents.json | 68 + .../AppIcon.appiconset/Icon_128x128.png | Bin .../AppIcon.appiconset/Icon_128x128@2x.png | Bin .../AppIcon.appiconset/Icon_16x16.png | Bin .../AppIcon.appiconset/Icon_16x16@2x.png | Bin .../AppIcon.appiconset/Icon_256x256.png | Bin .../AppIcon.appiconset/Icon_256x256@2x.png | Bin .../AppIcon.appiconset/Icon_32x32.png | Bin .../AppIcon.appiconset/Icon_32x32@2x.png | Bin .../AppIcon.appiconset/Icon_512x512.png | Bin .../AppIcon.appiconset/Icon_512x512@2x.png | Bin VBB/Info.plist | 4 +- VBBFramework/Info.plist | 44 +- VBBFramework/Manager/VBBNetworkManager.h | 16 +- VBBFramework/Manager/VBBNetworkManager.m | 155 ++- VBBFramework/Manager/VBBPersistanceManager.h | 12 +- VBBFramework/Manager/VBBPersistanceManager.m | 62 +- VBBFramework/Miscellaneous/NSBundle+VBB.h | 15 + VBBFramework/Miscellaneous/NSBundle+VBB.m | 23 + .../NSDateComponentsFormatter+VBB.h | 16 + .../NSDateComponentsFormatter+VBB.m | 28 + VBBFramework/Miscellaneous/NSString+VBB.h | 15 + VBBFramework/Miscellaneous/NSString+VBB.m | 28 + VBBFramework/Miscellaneous/Realm-VBB.h | 21 + VBBFramework/Miscellaneous/Realm-VBB.m | 39 + VBBFramework/Model/VBBDepature.h | 14 +- VBBFramework/Model/VBBDepature.m | 16 +- VBBFramework/Model/VBBLine.h | 21 +- VBBFramework/Model/VBBLine.m | 38 +- VBBFramework/Model/VBBLocation.h | 8 +- VBBFramework/Model/VBBLocation.m | 17 +- VBBFramework/Model/VBBStation.h | 22 +- VBBFramework/Model/VBBStation.m | 34 +- VBBFramework/Parser/VBBDepatureParser.h | 2 +- VBBFramework/Parser/VBBDepatureParser.m | 62 +- VBBFramework/Parser/VBBStationParser.h | 2 +- VBBFramework/Parser/VBBStationParser.m | 32 +- VBBFramework/Parser/VBBaseParser.h | 3 +- VBBFramework/Parser/VBBaseParser.m | 10 +- .../Colors/Bus.colorset/Contents.json | 20 + .../Assets.xcassets/Colors/Contents.json | 6 + .../Colors/Ferry.colorset/Contents.json | 20 + .../Colors/Metro.colorset/Contents.json | 20 + .../Colors/Other.colorset/Contents.json | 20 + .../Colors/SBahn.colorset/Contents.json | 20 + .../Colors/Train.colorset/Contents.json | 20 + .../Colors/Tram.colorset/Contents.json | 20 + .../Colors/UBahn.colorset/Contents.json | 20 + .../Assets.xcassets/Contents.json | 6 + .../ServiceIcons/Bus.imageset/Contents.json | 16 + .../ServiceIcons/Bus.imageset/bus.pdf | Bin 0 -> 5905 bytes .../ServiceIcons/Contents.json | 6 + .../ServiceIcons/Ferry.imageset/Contents.json | 16 + .../ServiceIcons/Ferry.imageset/ferry.pdf | Bin 0 -> 4363 bytes .../ServiceIcons/Metro.imageset/Contents.json | 16 + .../ServiceIcons/Metro.imageset/metro.pdf | Bin 0 -> 4332 bytes .../ServiceIcons/SBahn.imageset/Contents.json | 16 + .../ServiceIcons/SBahn.imageset/sbahn.pdf | Bin 0 -> 4192 bytes .../ServiceIcons/Train.imageset/Contents.json | 16 + .../ServiceIcons/Train.imageset/bahn.pdf | Bin 0 -> 5047 bytes .../ServiceIcons/Tram.imageset/Contents.json | 16 + .../ServiceIcons/Tram.imageset/tram.pdf | Bin 0 -> 5380 bytes .../ServiceIcons/Ubahn.imageset/Contents.json | 16 + .../ServiceIcons/Ubahn.imageset/ubahn.pdf | Bin 0 -> 4325 bytes .../Support Files/VBBFramework-umbrella.h | 16 + .../{ => Support Files}/VBBFramework.h | 6 +- .../Support Files/VBBFramework.modulemap | 6 + .../AppIcon.appiconset/Contents.json | 68 - .../Icons.xcassets/bus.imageset/Contents.json | 23 - VBBNow/Icons.xcassets/bus.imageset/bus.png | Bin 1280 -> 0 bytes VBBNow/Icons.xcassets/bus.imageset/bus@2x.png | Bin 2615 -> 0 bytes VBBNow/Icons.xcassets/bus.imageset/bus@3x.png | Bin 3988 -> 0 bytes .../ferry.imageset/Contents.json | 23 - .../Icons.xcassets/ferry.imageset/ferry.png | Bin 1143 -> 0 bytes .../ferry.imageset/ferry@2x.png | Bin 2271 -> 0 bytes .../ferry.imageset/ferry@3x.png | Bin 3358 -> 0 bytes .../metroBus.imageset/Contents.json | 23 - .../metroBus.imageset/MetroBus.png | Bin 1682 -> 0 bytes .../metroBus.imageset/MetroBus@2x.png | Bin 3184 -> 0 bytes .../metroBus.imageset/MetroBus@3x.png | Bin 5040 -> 0 bytes .../sbahn.imageset/Contents.json | 23 - .../Icons.xcassets/sbahn.imageset/sbahn.png | Bin 1517 -> 0 bytes .../sbahn.imageset/sbahn@2x.png | Bin 3096 -> 0 bytes .../sbahn.imageset/sbahn@3x.png | Bin 4571 -> 0 bytes .../train.imageset/Contents.json | 23 - .../Icons.xcassets/train.imageset/local.png | Bin 770 -> 0 bytes .../train.imageset/local@2x.png | Bin 1534 -> 0 bytes .../train.imageset/local@3x.png | Bin 2302 -> 0 bytes .../tram.imageset/Contents.json | 23 - VBBNow/Icons.xcassets/tram.imageset/tram.png | Bin 761 -> 0 bytes .../Icons.xcassets/tram.imageset/tram@2x.png | Bin 1530 -> 0 bytes .../Icons.xcassets/tram.imageset/tram@3x.png | Bin 2211 -> 0 bytes .../ubahn.imageset/Contents.json | 23 - .../Icons.xcassets/ubahn.imageset/Ubahn.png | Bin 756 -> 0 bytes .../ubahn.imageset/Ubahn@2x.png | Bin 1491 -> 0 bytes .../ubahn.imageset/Ubahn@3x.png | Bin 2232 -> 0 bytes VBBNow/Supporting Files/Info.plist | 4 +- VBBNow/Supporting Files/vbbnow.entitlements | 2 - .../ViewController/VBBListRowViewController.h | 12 +- .../ViewController/VBBListRowViewController.m | 83 +- .../ViewController/VBBTodayViewController.m | 66 +- .../AppIcon.appiconset/Contents.json | 101 ++ .../AppIcon.appiconset/watch-marketing.png | Bin 0 -> 150108 bytes .../watch_appLauncher-38mm@2x.png | Bin 0 -> 3382 bytes .../watch_appLauncher-40mm@2x.png | Bin 0 -> 3906 bytes .../watch_appLauncher-44mm@2x.png | Bin 0 -> 4452 bytes .../watch_companionSettings-@2x.png | Bin 0 -> 2134 bytes .../watch_companionSettings-@3x.png | Bin 0 -> 3933 bytes .../watch_notificationCenter-38mm@2x.png | Bin 0 -> 1671 bytes .../watch_notificationCenter-42mm@2x.png | Bin 0 -> 2010 bytes .../watch_quickLook-38mm@2x.png | Bin 0 -> 12633 bytes .../watch_quickLook-42mm@2x.png | Bin 0 -> 14450 bytes .../watch_quickLook-44mm@2x.png | Bin 0 -> 19064 bytes VBBWatch App/Assets.xcassets/Contents.json | 6 + VBBWatch App/Base.lproj/Interface.storyboard | 17 + VBBWatch App/Info.plist | 31 + .../Controller/HostingController.swift | 15 + VBBWatch Extension/ExtensionDelegate.swift | 17 + .../NSNotification-Extensions.swift | 6 + .../Extensions/TimeInterval-Extension.swift | 6 + .../Extensions/VBBDeparture-Extension.swift | 5 + .../Extensions/VBBLine-Extension.swift | 25 + .../VBBNetworkStatus-Extension.swift | 21 + .../Extensions/VBBStation-Extension.swift | 5 + .../Extensions/View-Gradient.swift | 21 + .../Presenter/DepartureListPresenter.swift | 152 +++ .../Presenter/DeparturePresenter.swift | 58 + .../Presenter/LinePresenter.swift | 29 + .../Presenter/OnboardingPresenter.swift | 28 + .../Presenter/ParentPresenter.swift | 28 + .../Circular.imageset/Contents.json | 28 + .../Contents.json | 48 + .../Extra Large.imageset/Contents.json | 28 + .../Graphic Bezel.imageset/Contents.json | 28 + .../Graphic Circular.imageset/Contents.json | 28 + .../Graphic Corner.imageset/Contents.json | 28 + .../Contents.json | 28 + .../Modular.imageset/Contents.json | 28 + .../Utilitarian.imageset/Contents.json | 28 + .../Assets.xcassets/Contents.json | 6 + .../Location.imageset/Contents.json | 16 + .../Location.imageset/Location.pdf | Bin 0 -> 3967 bytes .../English.lproj/Localizable.strings | 7 + VBBWatch Extension/Support Files/Info.plist | 67 + .../Preview Assets.xcassets/Contents.json | 6 + .../de.lproj/Localizable.strings | 23 + .../en.lproj/Localizable.strings | 25 + .../Views/DepartureListView.swift | 104 ++ VBBWatch Extension/Views/DepartureView.swift | 41 + VBBWatch Extension/Views/LineView.swift | 27 + VBBWatch Extension/Views/LoadingView.swift | 28 + VBBWatch Extension/Views/OnboardingView.swift | 125 ++ VBBWatch Extension/Views/ParentView.swift | 26 + 169 files changed, 3896 insertions(+), 638 deletions(-) delete mode 100644 Sketch/AppIcon.sketch delete mode 100644 Sketch/Bus.sketch delete mode 100644 Sketch/Ferry.sketch create mode 100644 Sketch/Icons.sketch delete mode 100644 Sketch/MetroBus.sketch delete mode 100644 Sketch/Ubahn.sketch delete mode 100644 Sketch/local.sketch delete mode 100644 Sketch/tram.sketch create mode 100644 VBB.xcodeproj/xcshareddata/xcschemes/VBB.xcscheme create mode 100644 VBB.xcodeproj/xcshareddata/xcschemes/VBBFramework-WatchOS.xcscheme create mode 100644 VBB.xcodeproj/xcshareddata/xcschemes/VBBFramework-macOS.xcscheme create mode 100644 VBB.xcodeproj/xcshareddata/xcschemes/VBBNow (macOS).xcscheme create mode 100644 VBB.xcodeproj/xcshareddata/xcschemes/VBBWatch App.xcscheme create mode 100644 VBB/Icons.xcassets/AppIcon.appiconset/Contents.json rename {VBBNow => VBB}/Icons.xcassets/AppIcon.appiconset/Icon_128x128.png (100%) rename {VBBNow => VBB}/Icons.xcassets/AppIcon.appiconset/Icon_128x128@2x.png (100%) rename {VBBNow => VBB}/Icons.xcassets/AppIcon.appiconset/Icon_16x16.png (100%) rename {VBBNow => VBB}/Icons.xcassets/AppIcon.appiconset/Icon_16x16@2x.png (100%) rename {VBBNow => VBB}/Icons.xcassets/AppIcon.appiconset/Icon_256x256.png (100%) rename {VBBNow => VBB}/Icons.xcassets/AppIcon.appiconset/Icon_256x256@2x.png (100%) rename {VBBNow => VBB}/Icons.xcassets/AppIcon.appiconset/Icon_32x32.png (100%) rename {VBBNow => VBB}/Icons.xcassets/AppIcon.appiconset/Icon_32x32@2x.png (100%) rename {VBBNow => VBB}/Icons.xcassets/AppIcon.appiconset/Icon_512x512.png (100%) rename {VBBNow => VBB}/Icons.xcassets/AppIcon.appiconset/Icon_512x512@2x.png (100%) create mode 100644 VBBFramework/Miscellaneous/NSBundle+VBB.h create mode 100644 VBBFramework/Miscellaneous/NSBundle+VBB.m create mode 100644 VBBFramework/Miscellaneous/NSDateComponentsFormatter+VBB.h create mode 100644 VBBFramework/Miscellaneous/NSDateComponentsFormatter+VBB.m create mode 100644 VBBFramework/Miscellaneous/NSString+VBB.h create mode 100644 VBBFramework/Miscellaneous/NSString+VBB.m create mode 100644 VBBFramework/Miscellaneous/Realm-VBB.h create mode 100644 VBBFramework/Miscellaneous/Realm-VBB.m create mode 100644 VBBFramework/Support Files/Assets.xcassets/Colors/Bus.colorset/Contents.json create mode 100644 VBBFramework/Support Files/Assets.xcassets/Colors/Contents.json create mode 100644 VBBFramework/Support Files/Assets.xcassets/Colors/Ferry.colorset/Contents.json create mode 100644 VBBFramework/Support Files/Assets.xcassets/Colors/Metro.colorset/Contents.json create mode 100644 VBBFramework/Support Files/Assets.xcassets/Colors/Other.colorset/Contents.json create mode 100644 VBBFramework/Support Files/Assets.xcassets/Colors/SBahn.colorset/Contents.json create mode 100644 VBBFramework/Support Files/Assets.xcassets/Colors/Train.colorset/Contents.json create mode 100644 VBBFramework/Support Files/Assets.xcassets/Colors/Tram.colorset/Contents.json create mode 100644 VBBFramework/Support Files/Assets.xcassets/Colors/UBahn.colorset/Contents.json create mode 100644 VBBFramework/Support Files/Assets.xcassets/Contents.json create mode 100644 VBBFramework/Support Files/Assets.xcassets/ServiceIcons/Bus.imageset/Contents.json create mode 100644 VBBFramework/Support Files/Assets.xcassets/ServiceIcons/Bus.imageset/bus.pdf create mode 100644 VBBFramework/Support Files/Assets.xcassets/ServiceIcons/Contents.json create mode 100644 VBBFramework/Support Files/Assets.xcassets/ServiceIcons/Ferry.imageset/Contents.json create mode 100644 VBBFramework/Support Files/Assets.xcassets/ServiceIcons/Ferry.imageset/ferry.pdf create mode 100644 VBBFramework/Support Files/Assets.xcassets/ServiceIcons/Metro.imageset/Contents.json create mode 100644 VBBFramework/Support Files/Assets.xcassets/ServiceIcons/Metro.imageset/metro.pdf create mode 100644 VBBFramework/Support Files/Assets.xcassets/ServiceIcons/SBahn.imageset/Contents.json create mode 100644 VBBFramework/Support Files/Assets.xcassets/ServiceIcons/SBahn.imageset/sbahn.pdf create mode 100644 VBBFramework/Support Files/Assets.xcassets/ServiceIcons/Train.imageset/Contents.json create mode 100644 VBBFramework/Support Files/Assets.xcassets/ServiceIcons/Train.imageset/bahn.pdf create mode 100644 VBBFramework/Support Files/Assets.xcassets/ServiceIcons/Tram.imageset/Contents.json create mode 100644 VBBFramework/Support Files/Assets.xcassets/ServiceIcons/Tram.imageset/tram.pdf create mode 100644 VBBFramework/Support Files/Assets.xcassets/ServiceIcons/Ubahn.imageset/Contents.json create mode 100644 VBBFramework/Support Files/Assets.xcassets/ServiceIcons/Ubahn.imageset/ubahn.pdf create mode 100644 VBBFramework/Support Files/VBBFramework-umbrella.h rename VBBFramework/{ => Support Files}/VBBFramework.h (81%) create mode 100644 VBBFramework/Support Files/VBBFramework.modulemap delete mode 100644 VBBNow/Icons.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 VBBNow/Icons.xcassets/bus.imageset/Contents.json delete mode 100644 VBBNow/Icons.xcassets/bus.imageset/bus.png delete mode 100644 VBBNow/Icons.xcassets/bus.imageset/bus@2x.png delete mode 100644 VBBNow/Icons.xcassets/bus.imageset/bus@3x.png delete mode 100644 VBBNow/Icons.xcassets/ferry.imageset/Contents.json delete mode 100644 VBBNow/Icons.xcassets/ferry.imageset/ferry.png delete mode 100644 VBBNow/Icons.xcassets/ferry.imageset/ferry@2x.png delete mode 100644 VBBNow/Icons.xcassets/ferry.imageset/ferry@3x.png delete mode 100644 VBBNow/Icons.xcassets/metroBus.imageset/Contents.json delete mode 100644 VBBNow/Icons.xcassets/metroBus.imageset/MetroBus.png delete mode 100644 VBBNow/Icons.xcassets/metroBus.imageset/MetroBus@2x.png delete mode 100644 VBBNow/Icons.xcassets/metroBus.imageset/MetroBus@3x.png delete mode 100644 VBBNow/Icons.xcassets/sbahn.imageset/Contents.json delete mode 100644 VBBNow/Icons.xcassets/sbahn.imageset/sbahn.png delete mode 100644 VBBNow/Icons.xcassets/sbahn.imageset/sbahn@2x.png delete mode 100644 VBBNow/Icons.xcassets/sbahn.imageset/sbahn@3x.png delete mode 100644 VBBNow/Icons.xcassets/train.imageset/Contents.json delete mode 100644 VBBNow/Icons.xcassets/train.imageset/local.png delete mode 100644 VBBNow/Icons.xcassets/train.imageset/local@2x.png delete mode 100644 VBBNow/Icons.xcassets/train.imageset/local@3x.png delete mode 100644 VBBNow/Icons.xcassets/tram.imageset/Contents.json delete mode 100644 VBBNow/Icons.xcassets/tram.imageset/tram.png delete mode 100644 VBBNow/Icons.xcassets/tram.imageset/tram@2x.png delete mode 100644 VBBNow/Icons.xcassets/tram.imageset/tram@3x.png delete mode 100644 VBBNow/Icons.xcassets/ubahn.imageset/Contents.json delete mode 100644 VBBNow/Icons.xcassets/ubahn.imageset/Ubahn.png delete mode 100644 VBBNow/Icons.xcassets/ubahn.imageset/Ubahn@2x.png delete mode 100644 VBBNow/Icons.xcassets/ubahn.imageset/Ubahn@3x.png create mode 100644 VBBWatch App/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 VBBWatch App/Assets.xcassets/AppIcon.appiconset/watch-marketing.png create mode 100644 VBBWatch App/Assets.xcassets/AppIcon.appiconset/watch_appLauncher-38mm@2x.png create mode 100644 VBBWatch App/Assets.xcassets/AppIcon.appiconset/watch_appLauncher-40mm@2x.png create mode 100644 VBBWatch App/Assets.xcassets/AppIcon.appiconset/watch_appLauncher-44mm@2x.png create mode 100644 VBBWatch App/Assets.xcassets/AppIcon.appiconset/watch_companionSettings-@2x.png create mode 100644 VBBWatch App/Assets.xcassets/AppIcon.appiconset/watch_companionSettings-@3x.png create mode 100644 VBBWatch App/Assets.xcassets/AppIcon.appiconset/watch_notificationCenter-38mm@2x.png create mode 100644 VBBWatch App/Assets.xcassets/AppIcon.appiconset/watch_notificationCenter-42mm@2x.png create mode 100644 VBBWatch App/Assets.xcassets/AppIcon.appiconset/watch_quickLook-38mm@2x.png create mode 100644 VBBWatch App/Assets.xcassets/AppIcon.appiconset/watch_quickLook-42mm@2x.png create mode 100644 VBBWatch App/Assets.xcassets/AppIcon.appiconset/watch_quickLook-44mm@2x.png create mode 100644 VBBWatch App/Assets.xcassets/Contents.json create mode 100644 VBBWatch App/Base.lproj/Interface.storyboard create mode 100644 VBBWatch App/Info.plist create mode 100644 VBBWatch Extension/Controller/HostingController.swift create mode 100644 VBBWatch Extension/ExtensionDelegate.swift create mode 100644 VBBWatch Extension/Extensions/NSNotification-Extensions.swift create mode 100644 VBBWatch Extension/Extensions/TimeInterval-Extension.swift create mode 100644 VBBWatch Extension/Extensions/VBBDeparture-Extension.swift create mode 100644 VBBWatch Extension/Extensions/VBBLine-Extension.swift create mode 100644 VBBWatch Extension/Extensions/VBBNetworkStatus-Extension.swift create mode 100644 VBBWatch Extension/Extensions/VBBStation-Extension.swift create mode 100644 VBBWatch Extension/Extensions/View-Gradient.swift create mode 100644 VBBWatch Extension/Presenter/DepartureListPresenter.swift create mode 100644 VBBWatch Extension/Presenter/DeparturePresenter.swift create mode 100644 VBBWatch Extension/Presenter/LinePresenter.swift create mode 100644 VBBWatch Extension/Presenter/OnboardingPresenter.swift create mode 100644 VBBWatch Extension/Presenter/ParentPresenter.swift create mode 100644 VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Circular.imageset/Contents.json create mode 100644 VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Contents.json create mode 100644 VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Extra Large.imageset/Contents.json create mode 100644 VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Graphic Bezel.imageset/Contents.json create mode 100644 VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Graphic Circular.imageset/Contents.json create mode 100644 VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Graphic Corner.imageset/Contents.json create mode 100644 VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Graphic Large Rectangular.imageset/Contents.json create mode 100644 VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Modular.imageset/Contents.json create mode 100644 VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Utilitarian.imageset/Contents.json create mode 100644 VBBWatch Extension/Support Files/Assets.xcassets/Contents.json create mode 100644 VBBWatch Extension/Support Files/Assets.xcassets/Location.imageset/Contents.json create mode 100644 VBBWatch Extension/Support Files/Assets.xcassets/Location.imageset/Location.pdf create mode 100644 VBBWatch Extension/Support Files/English.lproj/Localizable.strings create mode 100644 VBBWatch Extension/Support Files/Info.plist create mode 100644 VBBWatch Extension/Support Files/Preview Content/Preview Assets.xcassets/Contents.json create mode 100644 VBBWatch Extension/Support Files/de.lproj/Localizable.strings create mode 100644 VBBWatch Extension/Support Files/en.lproj/Localizable.strings create mode 100644 VBBWatch Extension/Views/DepartureListView.swift create mode 100644 VBBWatch Extension/Views/DepartureView.swift create mode 100644 VBBWatch Extension/Views/LineView.swift create mode 100644 VBBWatch Extension/Views/LoadingView.swift create mode 100644 VBBWatch Extension/Views/OnboardingView.swift create mode 100644 VBBWatch Extension/Views/ParentView.swift diff --git a/Podfile b/Podfile index 0e787b0..33f1e79 100644 --- a/Podfile +++ b/Podfile @@ -1,13 +1,22 @@ inhibit_all_warnings! use_frameworks! -platform :osx, '10.10' -inhibit_all_warnings! -use_frameworks! -abstract_target :VBBPods do - pod 'Realm', '~> 3.0' - target "VBBFramework" - target "VBBNow" - target "VBB" -end \ No newline at end of file +abstract_target :VBBFrameworkPods do + pod 'Realm' + + target :'VBB' do + end + + target :'VBBNow' do + end + + target :'VBBWatch Extension' do + end + + target :'VBBFramework-macOS' do + end + + target :'VBBFramework-WatchOS' do + end +end diff --git a/Podfile.lock b/Podfile.lock index f8d9fc2..ee85d02 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,18 +1,18 @@ PODS: - - Realm (3.13.0): - - Realm/Headers (= 3.13.0) - - Realm/Headers (3.13.0) + - Realm (4.3.1): + - Realm/Headers (= 4.3.1) + - Realm/Headers (4.3.1) DEPENDENCIES: - - Realm (~> 3.0) + - Realm SPEC REPOS: https://github.com/cocoapods/specs.git: - Realm SPEC CHECKSUMS: - Realm: 5edd2ee65406aef591a4f9895de5a3440e51b3d8 + Realm: 31dc40934081ef740f60feedc46d88473cbfeb40 -PODFILE CHECKSUM: f19745799be5bdfb8c29ddec6fd1423907c59999 +PODFILE CHECKSUM: 6e2f38ddafeab222e67edf494ab5a420080186cf -COCOAPODS: 1.5.3 +COCOAPODS: 1.7.5 diff --git a/Sketch/AppIcon.sketch b/Sketch/AppIcon.sketch deleted file mode 100644 index d048ab6a7c411a18e5a3428e4fdcadb4ded82a09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49152 zcmeHw2UrwW_xIeXbQX}_S*ox&TV@MI*ovt1V%MOc5D^ft#i%oOjp?SCYV0w_^q69d zQDaF=G`46oF;x>yucn#r%;%PKQTFqlV79iOmgdb#t0q>*`$}gtgLcuC^ysn=Qlb z39iC~^p?754GEnMvpcgAX4W;&Xh@jY+&VF%7}4Rev1p3)oN4g5`npbN=={WcJgKX+ zzekB{^Gxh9EdIXuq49xnFU3ubi-E769}fpS9Pn_!!vPNmJRI z4+lIP@NmGx0S^Z}9Pn_!!vPNmJRIXErIj60mUih3?j0zVoUhGv`Rn^(v)G`H0*JTs0Z=k-7&WPNTK2@&#)fIYp-HXvz=!OPsSTZz z8nsJJ1QFgcxwWOUqwlA}7|reNb#tyAV-vQt6elBv0nH69Q#u>_z8SdkH<=~uoV>Ii z!Sf1%)@e=uSd8iQEUPgXChBy0t!ARmpkpU$^!54%qgJPzXfSXZb%TL5>L;0&itGO< zG7W>jo*xefJRI4+lIP@NmGx0S^Z}9Pn_!!vPNmJRIt6jThNo}DfBdY3B7_|Lx<5ZbR4~pK0z1ICG-pW6ZgaYaRnZRN8^cj5}uB$a4oLG zIXoB7!yWi=ybQ0xC*xD`7Q7Abz-Qp|@cH;6d?|h#{xH54e*|BLZ^56$pTeKUpTS?o zcjB+$yYT(^0sJ6-2tR@!#ZTjB@K5lc@!#>Q1V#`9Mfei|L?97LL=Z7V5}_ngiGhTM zFcO7?nXnN)-lQL? zAQQY| z*OQNt+sMbs?d0?14)O)^Me;Rr54o4zN4`$JNuDJ?BtIcPBR?lEk>8U)kUx@F$loc3 z3ZxWN5EV>CQPETk6-%X1sZ<)3PO+4l(ok9|m&&8^slikMRYp})BdAf-SZX{qnVLd1 zQq5E=wSZbiEvHscE2%rEJE_&wUDSirL)636T51dRD7BS(jCzK8mU@nQp4vsdO6{gz zqYhDTP;XL)skf;2sgJ48sEgDk>PzZJ>L==F>No07I+Tv3*=XUT(X(lu7U+fa zBKjtJ6@4>(3wv%F=$-Vd^cVDZ^!M}+^pEr(^q=%q`Y(oI zycloBhY4mvm;p>E6U)Rg@k|1f&SWqHnM_8@=opUCGlQ7|rjRi+#mrD<7&DxyW@?yP zW&|^VxsIu0CNkGEQ<-LF8Z(2L$;@JAGdv?O3z=Zss25USIJtrM_WyZPPTk>=@HrH>aV!s&h_rLq|=UR8rqM!HF)#wh4-`h8FQ<@~Y;h zNpN3hLwnt%PFSt4O`gRS5h&eX4R4S;pW(h^xcFSz9b=sx&6zf_wYfuq@il zfV+Qow>yU$Hn zHCBVwVk5AT;<);01vK{@lKcLDJDR^ciqY5@K8O!-j$#~)BKVq7OvENlP{j8bg(Tu_f42 zY#Fv3TY;^_Zo*b!H^b+x*lhrUw_|r;cVesI`%3H{>|TIDvCRY0?-c-ut?f-ynp)~y z$}3`BNK=QSxv33yG7W*s8$^w1uIUh=ab$aIXPt-pHA}iBqc^+goQ$ zX@r{_-Sp*4Am# z&L#jJ@Z>t1Ce<~&p8;iVvT9wGV?-P*?r=2Ch9`*EwbFw-Mm2TRHgz-sURO_PZ>k^J z)G@qu($t3fu^p4z0p`l25sPhGXLL?b4CrWVozYxxf&E)kOX@nNS{nf%#&^i1SZw1l zFFrxp<%#pLUIO}*4_6j^>nsw`mje1qKwo%y@$r0;H#8T}=i*J+N$e499kw1swgKCS zZ32O8##YvJG~FNqx1yCQ_RX*l`fnDJ*@Yh#ul>@7ar! z_oso+O5W!LEm;PXrPw-P4HO6*(gI}p{xx=B-~fQq%$gQ0G12Qv(sXX#n! z)y>`%UgHI`kmtO3qZdp{1Fw@$#2>I9ofDBy=TqJD>I#f4O*V(bdG#lhW$->Hus{U= zV-3PFBO(!nXxTV>j9FH$fzfC419|o&@`5Mv$Q$_}U*w1Uu@Dqc(*fEI2%?zj)YK~R zs|W+N&i^CFty{c`&*C$y+FGWROEN>jC}eEcG_3+X+JFY2P!tBfj=Xf7dn$`v7;#pVNRUS0|uT=b85vrLcBC^XuoNBMkimmZ<$?U5};$ z8PiaUIAQpEr76J|Dt8a%rAu#jp>p@gLa7MYuh*LOR*S)*vY72^m5$RGRVG%eQQ6fR zy_K_>4F;oQglod|!bcGbMIZz{M>Bywn^Vu{pc~L!(DQj{K3X8t=YOT=H}iIW|9M5Y z++RVWK<1)_pcsMJe6$EH7QGd;MDkk}cX=ylIa+}vtV65N&G6?IbgP7XA?S7xlPI3M z#NQbBDnSh`^|ppdt?iNzB7()3SxqhC#$wS;04$j#x-IZkG~;4K0`5phXI*<|&zszC zi@U8T<-gsf_E0Wi$L&dy%{zZn>8vUs}c3i zY6HPrS(VoAaF{u@O|7-E)#Y`aji*4k&!A_)E{fLi9rQff0k#n=G! zb8`ou$d~c8;*4;T{W99gm-98?o1$GX7k10$f#{o7z(CL*%pdJV`_SuXKRN)CJBSXU zH$iNcZ>IZVQ_UA5wuo*?EV=>v3LioTpZNPPq7x}x%p=tJ}oHW+;@dTtPK_SpzrYgvcg zH(%SEsPUho&-f91lPKYfAmJ~rk?_d(pkgmb_%g`%OY{}`8hrzD{uX_QzDGZRw84Ww zKY_F(Moww3t8apw%J`PnrVc4P(gNZKmoTuct`q#O7Lhxm)PZTPlIkYNrHB@PwCf(o z#PE&$D1Hh*+O3CfQG55C6u+Y1(C_FEaZ+54dU)5&gU`BK%1T^Sr_ojP7mncw3&e4p zz)6_<;8@`d?uC2fKDcjfTWb@%hXAZ|y4zLLT3b6C8(PZR>L$S`#&(TP96jIR;Xm(hvRtu}r+cd07r?Hw;W{u9Ga_G#Q*}^(Z8VxJWOk9a4k1wez za>=<0#=iki!BcTaFkMp)LWgNCZ`pJ1$wxF0&&0D}MD=bm`AI!TGze#LHLejy^ku>a zUyL2T*4-3JyjupXIqB=ZfDv&z)&ee)1F%r1Q|Zh`waR4G=~Wiiz;RlQ!=Y2_TtZQU zP#{Rc^|)blH^CclBW}WTuyk437}+C2WAKZloqCRZF3-ChRj9YLkZo}7Hl{Hqf+89wXLT>vc;TU(nO>OgNHIV&2U+J<_F`s%9zavEi!(KNo@ z>DG06@hicuui#5$E*(AvZ-i$;jLx_5EnSu!7gIH@ZY%Co=jl*3-Cfqpvg5Px+4vlw zZZ3YK+_HDL^;c%uC8H0&U`DBpI+Mo4nN)T=3v*a)H>fNYhe2iM)H;n$?=Wat({Xea zUjQJ&V-fg5NN-r1TRR%+`5E5)awlzzfwq~v4`>s<3}23~z*hqASK&9~x8S$RB+vtL zWaV1fwHU_T$j{;z^ZaT2cKi-_+uZ`f=C3Gi=e*&--vI* zH%sA1cc~bD$iDT+ZTH84$M9|VoWn2R7xB*}59^W`&f%B4!a4kFXE=v{548}^i4N1<-81M;Fa8$(bur@F zB1T+yT@!KPzu;F~xO_W*s~ea90GzwcjlmN35eUleaF_MMWr88R2ybj9;Y;|5xV+%S z&5zkq?%-D|3sW1G40~nMhk(njLU$41vQ}faJMo8=9-v`2qJ==F&9Kx_we_-qbwo}qO5zRD2s^1j6}2yc17d3rdO1Og%EMr zB?1yrV4$k``*==SnCvtjUO=PCq|qB$upJhS+N{!PZ4e(CZFZHNH2`&5htXs;JDHRW z-v0xV_fMoj&l%VB{9r%cKaoYKh-`E-F$gGOfr<$5+8^RK^AEcv>GsfidhLXc;0Qfo z5Pi9?$4fu%mdb*I5z>#c-~(q>KVCbLi+d6I#9*R8oIPv7-F}4MXX|wu zum)f&oWD&@51g>T)K~`|IAO;E2?tRGBQKVXyoWjDH-H4zABPBc4>ZmqhU4M&J_K+UZHj z{V1ZH=y2)lc79uzz7n&5(#PGp>7@QfD0{+P)>~f}5{rn%K+jTQnOt9=a?3)duQERh zTqP~5u^3dW4ZJ6v#VY0~ZLCV8(X%?W+G=nZEG|EafI;I6`DeP^C*l?$=~>BrB5o({ zAnqhq16%JV?ji0a*2tLKW4_4BuXUeZ%Yviy*!sz7-X-bE;PS;onjg zj%r#1Klee-x^3G>McW6=RTf^?5%)sHHb`8n^(L*| zZqRc!^++*j)2P+lDM(rdI@6cLj}ZF3L;NC|QsUPUus~biI;%rWVe?1f_X#J_zk^|W z$7$HEVnz~^sila8$IiIYT3@@;T2fLAyF`*Cg@uqbu*PZBIR1DyPItiy%$j7DbEqvg zn--D^tW~Ac8!alMNoQ06Tx&IElUifff*S|0O!|<%{7L>CWY|c5ASLh`Qck@`2BE!V zFd2eDhMXKghLT}uKN(I&kdb5*8BNAuE6F%A9$Q)4(FTjt^&?s*Pwr^w9Oe2PISL{s za1wzFqhYDX6;43{1{Q~;mCuIGPRNCKxQD^N>t5sPo-gn5X8}K*OHmkqx@Z2CRFcVL z3YjVzuRUMB`+d;$xyphMo!n3s?0)C$fdjWMb6*@M(_tJLdRrr>A zF$(Oa%%2y~Faag~&BP8_Nmh~7PAC&q zj~oTFevAlw@Hw8GAaguEWynU>krUxAF?I6^|4|pRk&|J} zAG=Y^shLxu>{EAHFJvR9lkH>&^gn}~DI%MtW7vID9($d?pe$_Ko;-Bbh;Kn6=cylgHFN2-cuqMu`GFZ$ea5?lAmDy;ssq`kbT5r`DH9DhdoD8&6kqwzKWWjA7c1(8NqGDfRcvnGv>;|xZFEE&T=4o1zY z4V+%9)|!kOLwBC0&#FGi5EDz}{p17WgXBX_1O7e#Z8s6$^>kBAKm{x|!*7kr)HAKZ znpnshiN86c;oqiJ$W7#CatryWv&*0PAG^E!N#>>)Ar+^A0czBGy|HIn(5c}UEKkZ*|SD5l7Jq+kAhO6KnZ)LZ1+I13_2}|`St4;w_X$=;WS_^>@r{N$vQfsULRSvVtWOSIctXXYg zZ8nz^rs+yIlRt?lB_LlnO#Ld7=jX(!Kgd7HtK?r4h8ZcGA}ErgsQ$JI{cVF1B%oLU z`3opgK%u>-ZiF~>DIdz0@}v9#toXSCQV6h@r^{gzP@oH~#AK*mga`wt(`nRNDL?E4 zGM&i;p){bgR&Ue;g8#d!KIjn9iVCH|sBkJm(pmw*rtV-F9UEC$rF8WgA)qi>ui-A;6`!l-44gp(WB9A@#;iUV(}h`mFs5J3qB5y0 zN=0S6=!g+el#GsOi4J$FyXO$a(Mwgm8S^i);1X<6ddffN={9nux8W>Zt}1TUhmxmkOqQCZG&up-D~duev20P-epX3p4LJ3)L0(l~o7j zP6li->A??jXduUJGsBvwnqyT)tJ$KmS}ZosY*ury5yOQoTCK|iqMDr8lGTMR)HIPi z74LJJYQqAl=~O$_L3L6ysF~C(K$tny4b)ufMrs~4U*-#GWY=Sra5^NU^5j3;EM~djv zFP&m#|2OtQizJ`*)COuJwaF!)d;#UkXvuTS$7F!TL#tG-q|FipDf*ret31|6Wch%usk{!LYHGMu7$k$Q=G zncC?Rja@)i85uSgX!g;Wh>U$x*oB#W-qZ&fl2rCluT%S}11_l)3#dp&#t^qu{@1id zbbEAwK}Mra1O@rHuE3Q# zOP!Nr_izDKxUjpr3%eHys7j9AA5iDJu)9n^C2s8gM8v_;Yq0xsv9R1-*c-dQroN%R z1?>Kw`a#6*QS5Njsa+KUs#F#Z|DfEqJohue?x{;hZocc~N0fzzlFbiCK3540(p%v~ zQ@hTlvVva@8%iNVXR#Y#(Lv|1IjlMZtgm+^=d@fGcK_nU?ix3C|1OeO%ln+8u2O%| z7>#Hg3#18}q$!%F8QP2XrhRB%+K-0B7#&C}=pZ_n4xtCguvw1N23fgLc5Q;!+qzzv zQOf~bek})oxq*;_zuZ^=Y_jl&(8%0x>Ed~()4#GM%eFR(IbA_lx>Te^K+Q5*rnyxFmgvCH0e6fb zSre#8mx0+(&Jo`Z5L3RjE?CpI!q?e54{*1YK@>D^3V`O2XH{=HoU&=4C(~2tMwe`63aC>?#|)6oK=Fwt*wF~H+Ng)Ap@U!I z{OW7IWQYz#kJ-qHy4&Ym{09&2O}vwdZS-`yorYAY6nftvpzcju0-6I%6m`&~)0;H# zRtWG&54+b`5%2oeScxLAIU0x=^g2CfGJ-QIw(biJ{z2p3EuuDW|0-wkT!K=z12^Wmn!v zjAFG`c!vpAc5P}itn;xpa1|YD*gpUWuW>*wiM4UAWWJh{C-dnSVdDhI@D?xEZcO?W zk;YqjpYw`PdN=(Vy@%dQ@1tL*_tOXHgY+T#4f;*`Fb!`m(r?p8=%e&I^fCH4eS$to zpQ7KTPt#}U_vo|qIr@G21NuDuA^j0JO`p)8(x1^6=!^8{awkYD|Dut9k-I@AnGYrR zr{sQ?UVgLOpOX7Zavw_WTgf|<-^(c!z`_Wif*8Sx6YF18_qXMe z{)N6m|4RSn%BtNXpu1$W-0kw9z(LZ0X#k@P$rf?%un3v3v;3+}K z0joL&HK%itBo4|1*-Sm8FrbOF0Fy1IGPE#Q9S57fU|GiCZv8i(-Nyh#Y-aqK049)8 zxUl(Q0X--iz(X(_!kv3q;pICM>`PV~ISsf4tmv=)^P2vMh+ra_D5fi}STCSQWJIiU zPDxQPMgxcxwp75%Hu%nZy+{QZs()P7A00|2nMq+Fu8<7XW&v%K(Xk2WkbG{V7DNL} zp5Us$dON&#)nEVrz1F=4An7)f%?x5#M(xt=#{~4KYyewf0HRmH_Avl4F9TzOnFSFE z_@xG}Yc}@LSoF6{zQl}>b^tg=v?JjQ-LJ@Ga zAjJn;pFs#3mj~FJq6`rZdN=NKtRiFjXxrCN`ygIYB^zUB988gG_Bwxa<(nb28RH@1h)0uXrD@xicpx0#7?*ZyX zJ?w*^e)X`AwteZL6V3i+5M@e<-JWtK6^nXbUL^zdbGqZ(xl-cUC-0uqLq>PADK!oT_m>|g@x~ni5H2?xSF;?%}HIybI z02m7k?%>92ATuF3!hJcNf4^-X#EV-4n5UU%m}i;iTyFeX0iBT%|DMYWhIE%2d<+(% z2G}>H7B^G@@%=gGu<6tQfrn13=2Q9Vk%jp-%H^ROsaG5namUS-p!IS^K6aNac zi+PpV?eaQcgWvly@;?Cb#bgLU~@QMyrlryo`(RN(N!J{E%o-oG{3Ih8|i z1KiU%;9Lxo7|e4vgWU>S@mR>s!fqp2oHp5vaAk(AyB2tv!pu2e(`61ZZ}fP5Y76rw zbC`LHd0X6T#2k^{yOO<5^`E|6b)0#JfsMgf2y>h{Q9ZG)qoH=njHddA4gtXm`$Z|Y z!JHEF1{d794QV?RbCx*=J51f@Vr^jFXFg!gOYf_>3&r=<++TX`f*m~tOZz{jQffC8D3VmwN9Eb4Gt?1&n4Ty{K8yeewAKgmzO(VVwaa(!$a}> zLFaL^?=XKbe^$4{kpVnxNriJJldw!U<}e2qoDjy{>qV@ow>6?7h2s_jf*&Poz(Z z&p;owPp(g)Pq9y}&p4k>pG7`Pe3tqw_qpBYPM_62_xP;wS?9CSXN%8cKHGdA_j$tS zDW9i(p7nXo=LMgad|vi>#pjsMX`jnJS9}Ry%9ru=_Vw`%@eTD2_l@z5^G);3@XhpP zeKo$hz9qi3zKy-_L!&^Zm^a`T6(-`z83L z`5FBzekFcoeieRIel>pM{U-ah`px!R>UXQ(?S6Oqt@YdH_k!O`emnhk`6K@j|8)Nh ze~rJ+U+-`5H~Q!J=lSRR7x)+YoBb{RHh+iz82@qp6a4G^C;CtIpXT4{-|0Woe}TW? zzsP^J|62cT{xA5yc4THJ~D3 zazJaq^ni|l83A(wZV9+2U`@dN0S^W|60j>^cfg^5Hv>)toDBFN;9_7vU__uQP#tIp z%nP&x+5$@gYXc_)HU>@)oD;Y(@TR~ufx80_1)d80B=Fn7s|s2XsEAcGDw-5i6`hKi zirI=A6mu0fD&{K|Cp2R8&y32qB+5AFz_5j-n+PVn5|8-wQuF9_y?h2TZO zi-VU0FAIJk_@Usn!Rvz82X71B9{gnRbHO`;cL(nY-WPl*_|4$YgD(aD5d2f{)!@HE zyh4IPj3N0UwISm}>O&@nG=^Ls(j3wfGAm?G$lQ>{A-9Fx5wbeusgRdKc89zXay;by zknM;C>tb|H4q8^G` zAGI-RPt?Asx1x?josK#a^>NhY=-}x1==A7;(V5YzXnnLXIw!g;dQ9|`=#JirE(Pc+3+qPsKbFvomH_%&Rf)#rza=H8wsrAvP&CIW{$RP^>yu6I&A77&|@o zj@Ub6?~1)Ac1`TM*bT88V|T}%jr}zCtJq)T@VJ1u=(voy^0-lP4RJH$7RKEgw=VAa zxP5V#<9>`s@nP}Gcy;{X_~G%R~U zOiL_H9FaIGaZF-;Vq0Q+VrSxmi4P|}lDIx`W8(J29f>a_zLj_+@pR%xiI)<8NE(n7 zmK2^8nG~HAn-rgvo@7fZNh(XKNE)AXebUUN*-1Af-I%l@>87OBNp~l$PuiHYJ?Y7$ z*OLw;9Zfou^l{SVq#u>h%4B7#GF_=w<|_-7X60h#66Gz*+mv@G?^Lc<-mQFCxmLMO zxn8+Zxk;#sN^(>3^~uf2Gm>W|&q=-|`M%^$$xkQmO5UBkCwX7;{^WznUnE~j{xbRN zM0HQEG8&WomV5O=?@}O{uF>Urviki%E-3i%&~W8<>`vrb=Ve zG-=v2E=`|iNHeD8q~)gNr43H2N~=j5kv1xAblRk}hO{YZ&1o%Zv(o0I%}wLe7N$L% z_DI^+v~6k6r9GeaYTCiHZ_=)$2c<`*N2kZ8$EPQzE7P;mv(wphQ@TC9D7`qnCA}@Z zJ-su1Ui#AXW$D|~ccj0V{&M=h^rPv=(odxSnL%dwWemuO%gD&c&9G%SGRiVWW{l1l zn=vk9azlsovoNzbb693c=H$%w%=wusGw;q^m$@NxbLQ5} zZJAGGKArh%=5JX<7L~7 z<}63nkgSTVs;ru<(OF}&=48#yTAZ~s>(;E>vesm+%Q}?xZq}z+7qTv9eUbHj){j{~ zs{&Qgsx*~WRiGNCDp8fGDpXaf8r2BZY}FjqT-7|)0+pazsamDFS+zyASM`DFuWT$E z&nC0!?7-}x?BHxw_K@s~?Dp)A>>1g!vgc$k%wC+mBztZ4%h{*0f62a*{af}Q*;fZK zgS-d%3`!YPIH-8g^@FAknl`9)(DXq!47zd9yg~O4dS=kugMJ!xl?`I!AegeVRqTE2 z{p<#IGrN_2jNQg=XP;o7W}ji7XLqnKurIT_*yHRe_6&QLJ;#2=e$HNEzhS>)e`Eh- z|5B4`TCG&4s9`^hI!B!g=c<*cJJs{lE7dovZ&BZ-UZZ|M{g8TxdawG3`mFk*`Umw- z>MQEs)mJr0LuyhqshV_6rY0L!RdO`Bnp(|t%__~~n(dk=HP2|C*SxCPquHzZK=Z2> z*DAHi+Ei_ZHVd}Fz@`FiwYF8eQu~;8n|8bQDebe`SG2peuW8R|f6-yOL|u|DS(m08 z2*Drh1<+OMrs|cqud$p0`~=XiTjfKiMzu6rjORA z>9zU-{V@Fq{Um*>zFps`pQXP+KTpr=7wMPkH|w|Px9T6)KdFCFzf=E;{#?Op@nWA8ktJXBaG|DvAG{Mwpnrdn`Ei*l0 z+G%><^nvL^(I+au6J&5ZfI_JZcJ`mZf?%-fUqdfxuLkMjP=56?H|oAPt> z2j`pfhvt{$m*!uezc~M){8#gL=kLjXJ^x_-JNYN_PYxyqYX)C8SQxx;@Z!PC2Cp1^ z=is{s-!pjs;GYXp3yKPc6bvmWDJU-(RWP<-T)~`zy9=H!I9_m~;8ekxf^!9*6?|Us zMIl)jUzk%krf_WG_`9owS+-7;qvfpyi^10=b zkR8o>nqm%)5@OXV~?2tG&!V#y-W~Vdw3u?DyI?*q^lTv>&vew0~^>#{P%H+Y#o7 zbi_E~9Z8N9N4g`^k?l}BbPj_f$C2+SbikUwV~AszqtsF1sCLY7%yi6l%yrCnEOV@M z+~nBgc+GLn@u%Zz5mrPL(M5qp!9^iO=Azc32a9$Uy;}5I(Y~SsMMsN{7o8Y_4`GLl zAF^NwKV;#MB}0}ExqZm$A$JXVV#uK(pA?hDR54TRQ|wHa7f&r-ReW>t zt;Kf~-&Ooj@gv3SijNjw9hxDTaj% z3mXSoyFUhdny%jbU#Ndu!OyVaJD^8+Lx!hr|7c=M0}ReEIMd!*3dX%kbNW z-#7fh;SUXebNH2#loCftQAu&h@RG8UktJhF#+IxodA{V6QnHjPWlDWY{Y%42BTJ)7 zi%L67A1U2ay0`T8(u1XMmYyhmxAb%wS*9)xjny-%msa0d{Ydo_ z)w`+>SD&f=p!&1w&#Nz2|5*J?^{>@eYp@#cn$ViKnt?Tj8hcH7&A6KDY9`e**R2zhJG!>1c5dy8+SRpdY9DfL9Kmtt OCv(;L+4Z}2?f(JBvSQi* diff --git a/Sketch/Bus.sketch b/Sketch/Bus.sketch deleted file mode 100644 index 9d3632e6606a07aa60dd29080595d1a3241f96d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49152 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 diff --git a/Sketch/Ferry.sketch b/Sketch/Ferry.sketch deleted file mode 100644 index 868703f9d2c5a32accdf1229330bab8a40b3b99d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 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 diff --git a/Sketch/Icons.sketch b/Sketch/Icons.sketch new file mode 100644 index 0000000000000000000000000000000000000000..1e3797312ade2a0a526653c5f89ad234fd3f541c GIT binary patch literal 37440 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 _a(520UxYK#RmSOOr9IPRMheH~V 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 F`X4Ij;vE10 literal 0 HcmV?d00001 diff --git a/Sketch/MetroBus.sketch b/Sketch/MetroBus.sketch deleted file mode 100644 index 0c4d9e5d2f0fd64ec27b5d810ef446cbe5166cf6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeHv2Y6Fe|Nj|jn>1~DleS4$R-0~8vWJS$DJW&N)KW%G+t>!$rX(p-^n$E9aEp6U z5m5wDlvhD;51fdA6SpEN4xF#N{=fI$Hc65Ce|>+i&+qv?Poiz^J?GqWKIij2-*xVx zb(6>YLSEgu{y>)}q_ZL&!WfOw=@3E^_z}U+;D^9P^gSM|_>*r5GJYDD3=N333u(8( zuh=KXK#YMH12G0-48$0SF%V-Q#z2gL7y~f|VhqF>h%pdjAjUw9ffxfZ24W1v7>F?t zV<5&rjDZ*fF$Q7`{9k9FhQzC~v#~eiY3cO#coug0J#7PDv~o&yd4096zPw_5wQitL zSJdt4^6Em~1)&kTd7jQ*udb!j-%>md$E(z8+|KvY1>LoILeNn7CPR7}EFG>Z?%jNX zdN0!6pgmKYqIpC!N0S4$u}_SF7y~f|VhqF>h%pdjAjUw9ffxfZ24W1v7>F?tV<5&r zjDZ*fF$Q7`#2AP%5Mv<5K#YMH12G0-4E(P%Fg8Jyy)=HFC*bpRheXm~DB$&Ug%4b?B$|p^#tDiWfdSz`q^u)~b z27*3+_pm)p=w!WPdi)s zd%?;&ktlVk!PC<-Y-hvFF{{OR-s9SWYj zSD0gYAmCYe;v9Ww1?st99Bz<&1o~WSR8E*ughw)wK$!2i`nZmxg4$TmE8M(ES-el|JWzSK#YMH12G0- z48$0SF%V-Q#z2gLzsSJhd>og)bZ=Fc$JgD`)9DL_Os0JZBZ4UW@vJx$FS3ekjfR1w zs?p%*bFbhugD241;e+COL&)EwKzQYCo0%_B0urNaq=7%nRfvqpjO@sXPDP{98R$$@ zizcG8Q4^YpnvoB6q8@ZB+JNpso6r`t6>UdPq36*H=ryz-y@?K?Z_!WaSM(eD9Vg%v z%wRcI;T){Sxi}9Sa48;v9r#py8m__(csibi&%v$Oi@R_)_TwO)htI>;;2ZGG_*Q%e z?#K7yP53^%9Y2Ym!Y|@i@ay;;{3-qtAI0C}~u&QdXz+ExWpH|@XQ4Mx7h2fq4NmRhN*WBUot|K@ znNfPXxg+LvoxWChB;*ZvT0@Y-H!~^xGxczwTzD?rbUfErRMQzk=L@@9{GCAtv4o9h z)7T>tmXWYYdjWPb%0X(DvT?7$rIr=#MS7Hr@{plP0KuJHZxk-QfGBlBU2QLaUcJi4 zWAOwQu7l?Js9?r~x=2~$;Ld^2UlA&9X5_VX`%-XtIf19^c*p}Ff$^i99WIB65|JVdpx))iX(28u09xlaiZu7HZHj$g2gOvzy zT*y5uJQ02)U>$OyQ&7R#1N#C(v(wP1vulNof_3OLbUG?Had?iaF{r$m$*!%d>+l4; zZM*<@p;W^516U7lU_Gipm8c3;qZ)3ef7Y~_$$>c!+fy^68mtuv2#?XsWP~3)q3T4; z9A#tCI5wG05vV!~*;v^L3{66lVNDGV#!o6d)_ODr)uDPc6*X}48KxCr4I>)*{C{m0 zjc6JxXH$h)Oov%0PMF0x$kWVdhs+|ZGvVoMKrN^hwIMG$7qz1fZc6{ZN17Sk(7FAw z*Z+Mvb6PMPNJ(cC_rhftav=Zo33X+Hs+5^n39CHBWT3eyfPyH5deJ;IA1y!&(IT`M z9ykvzLFc0j5Q~P_f`2tL)4QO@9|%qC;T{D$mCoC}@!+?s z7xZ|*+P2lh*6FlGet#FgxjDVf-z*Tp!I6W*4*6O=o#FnVEDW(>pmI8A3&#a(d<&pA z?z({=Bsk3%Z14qrV5sZc1HQIKUvRv?b&j`fMzA#irfwoXd#cIej{@ z3h;pb3~4>oO6^DgfT12ikD?uDCwdI+g7x$`dICK;c_A>^3L*{#fVN2iKQ|yJ@~QKE zZJ~~a4zI7hBQ$wIgglKnZ%kk}&t>FdkXpgcKaHMgsI8j@RnfHMf>_IOA!qxEKE9li}p+QgF1iQT6z<3{gv7k9jBC8k1*o$5VU&1?vezX_u z1925Jaz=z(^g~AxxIX|q=dp>eqqkt3x6wPGzVAh;uQ}@4#JX7tYdFL(pr9d8;a*VP zrJ&gFqYvQW04VQ5Q02v-%zfx1^fCGbzBwg54BtoKrwQNkH0m>UQun1wmkucyG%Yx{38fd2z z+KI!!%v?L`f@a20?r@jeohFmfRP8VuZB|#MvBFkiGFDW(YfSEHr_)(kJw%CcKBq*u z2p8j$yj_EH<&&H&)#t?sT8o`$gB@ia;t|+%xnr!7p zr>)##v{|aEjTMfXDx=lrsCLxYs$6bUwb1VuO9Gj3itbE&}RJ)m7DY3vgZIsDQQRwwD_# zEH1OL+*NLO+3hZqrP>Z&xyKXguv*L(T`By#*HDMW#%0VW7)s72auyL(9ftsI6&N@? zA8r=lg`nz-qttnbnzMbN+|`E|Rdlq1mvGSv<_udhT7oaYT<=TqQa)qTwSlyeXWz1mq-<#JeRj8zUN2;JfYq1TjG8>`JWyS>U? z<8(Qlje{bGQSoN93U9&p^N#UV`~X^wx8a94_jq=TKhOp*pQoPd>+B42#v;J#*(o5b zv)PF(+K<82<45qLcn98zAH%!wZeCbVGz2_tzTV*UE1|uGt&ngZUul?kDtZQ;pg!S zcn>Owu9(4@17#f*K7bFx5_}VupaLD97V3Zqx7!;GHgYU+E3dJ~AN28oa4YAB!JJkuk+1MhXQxV7 zyD*`5@q2(mfXZ{c0UyHe;}7tM_#^x={)Eq0qpD|xC&ssi^*s2rC+KUffq_87=jK4sq;Uip32$}3j8$s+ofQn-|^6<&{{tAE1 zHnKA~zP|y!zdM2NX$PU=06vD_z(3$0@lU|}&-fSoEAakL&Hx}4PylNf)=+o75B6EO zm|#}7-xuU}Te^XN2scv(T5$Yuf@vCP06RGBbhatt=LB;Ke{g@Ozx3(G5-CZFtX8gaMl*~n;>I4JO_1Y% zU9?0-Qh3>L{hugU!Voz+jVL(5g7{9-QVg&ZXF1hFuU6M_5 zh#CUj^=8Ow`k03@6ev9AV>GgC^?18N{PS+Z|Z4ke= z)pLd|D#$&D^>Q9M_4k2~gzXTsE5T;3VB4cyH5o}v&^e@CY%A*-wA#c5(`gA?Xx>r~ zHqyePUNT!h{GM&sIGo$2WiMqB$T}OL$YgD-@>e>#bGQ^(8_OJ`s zIV^jSG?Q~+SPy9-t)z{30cktwAU-mi%pskqZw9wR&>NWNtqJ(Mrok@jJTK>)r}C2# z?zx&7;MZX{ZVK;J&gPrd`Y?rv1DPC+YGr`B@vY735lhbUr zn>nxIbUMsths|Yo+N@58!)jmB%w&PfaSI=()olT^f3O+8I+hKA$`FWlML?6G{Zz4C7Tga_QB?js)V3$NdoDU%WblnZNfKNv0pLFy` zdLWpFwRIQSK<*|RQ6GowLUw5c*)q_cKk4v4uN2f}3%Q?jk{zBN?<6o}{bVb7fIKKT z$H78AVjH{}8bNT0jiaK%Rp~GpE#(fo(N9!dMTJ?LxFP z*q4x5l7Em#xXh9~$~ivH#7>>)35u9v*bC1K>1!6c0A6_PNrA8Py1YA#c{GO~s) z6SEhw?{Rt3^<18G1^h(kN#t$v&Va|gl)X6Yao-1LbxGK}3J&ZOC|eUQ`=iG_LcSzl zfonNRzTrHs`K1{*yj(Vky*zJ>>V-A+%Wpmid6Mk|SyskZQ}f0svaAMI2c&<73VV&U z(rI=W!5e_bHQURL;1a5g)m4=yu%%{OdAXI(lem0%Kg6S(@fO%R!T;t+{Fm6di2Vu053&Pkt2ZJtp z1^`^oCLUr^=$Z5^I-b_j33MWzL?_cJAlN!uPp8rbdNysO(`XZ&PG``WbQW!<=YS+y zXe(`_UV3hnL>y7q&Zuiw)U_L44V zrF4w|;vx3I2#9R}q8K7dIL{6!+zyA+?lzgs7Cr=XINfk*aak;I(A{e0qR+pl?QpoS zrEBSR^m+mJBkcAF?tcuB=j5ofIb9}`-44p@<~9B=2DN71&LfJMmN%X=)H84@aS&#vB;yl2JpMA5NcQ;n76pC4vWJA-30HOqh?{M-cOjauxK)2gzg*idmWOYHhWV1WmkT!vm0Ih#l z1JM7D z#=}A1LtmsX(U%42FS0L0pzi_bDo*8i=ysC};#!N{WDz9)*K3ADu%8~F2kDyvf>+s> zBM4p@SbSEy1=QZ@u-QyDUdEBd_gAZi1Mva>cqw#RizocK$ujx?%`ayPo1p0vi=-{}_@V3R_ zw!%V#fBnNRzTx!d?`S+6^q=U@^cVW80R0{ItqAnD1<~^g{$Fyx5MWhRIZYOGmD^}C zSz&L>Tw^nq!@KUk78iF)X6SuL#X{s=m+s%+4R=R4cYn*%nCZZzIkQ{1*C{7eF zN)U;;Oak}UKdG4+*v|}C|M+{Z}9}Z4ehqRND29H_ykM8NF~Y;W%BuOxRA?-!#6|ox@n7nk`X#Eypi#9L^AfX!7;Tk=I7xt zfjE<^y2@&)a2Q=KGi0tcrWz1Kr4MBEXfevwIJ7Fkfi3FWZE593F- z97;?RcLY#4)ccyqE^^cd{QeM&;Y4pH%7x>Lb~rdV8qUb-;ACtg>{ZTz^RNrZ6>#cx z2YDXS-j~QLFWqNHI;MI!JG9bQGLyZGwn>KEzHpKmc$L z-2^9Bw}VG|5>BkX0OtJ-`Y}BMCsThDiC}?bigHC`M75$hqKicRqFthwMEgYtMQ@2d z5`7~2O!TGbYtc_}Oq@E-5jQDrcHD}%tKx2oyCv?nxVz)-iQ5#nHSWQi9ZnkX8hX;rzcEKXiw-$n3r%~!kUEsgsllLBrA`xPign@=@kp^tTrD0iZWRZ_A#tyGzL*s+6JID^AzmfETzsYYYVoz=wc_i< zH;8W%-z>gWe4F?ValiOZ@m=B_;wQv!h(8p6B|a+tR{XvAnE1H(cL|onOT-enBvq0w z$&%zq@+D5m7|9fgR}z$5B3UE3Q*w`FtK>n+PRTCGZprhKy^^;jA4`r%j!Aw?OiYv~ z<|d9vbSAnJPfZ+^I684`;-tiBi7kmei3<}KCoW06DDm3FI}-a7*C%dBJd$`^s*t8i zbEF!nPO6vYN)6HiX`!@OS|Tl#j*yl~P114Fv!u1siPFi^DbnfEnbKxyoAg|%UpiMB zlrEQEF1<;*LAp_Tuk=3Y7U|Q{J<|82pGd!!ek1)(dQAGW^p_-(l#-N@l%HfxDo<)i zYEJSbwI+F!d`aggtxD=kx;W|5q$`rPC%u;RR?<63?pY z8`YQ)l3aDmYK}dG4)IX)5tV2Gnko7Gjk5(VOp3r#>X zI7LyT7^^r_(W>ZD%u`&TSfN;>xLk3C;wr^Wij9g#70)XUDvl_APnD)-q!y%(OdXe6 zpW2O-m9Qy)ovJN4_-<7p{rS!p?GnzX_+Q<^!gCT(omnRq1`{ zucm*L{zdxH^l#FCN&jd1@$`SC|E|Q!M5R=jtduDkrCg~{rYV)mQl(KjQfXFNl&303 zDMu@-lr_qU%E`()Wuvl5IbXR@xlFlSd8u-Za;@?<<+I8+lpiV&E5B17Q~sd*Nd@}| zDv?UBGOFCFYSm=bOqEYHN7beBtLCbLs$SK6)pe>nRhw1YRJ&9!s`jZ4soqz8sQOs- zsp@mpx2o?|$1-#oqcWN@S~Gew7G|u>xH{vGj3+am%6KN@xr`SwUd(tS<3Ps2jPEmL znZ=oBW}cNjIaa%NNJjLeytYch9b9?C*lIE!Y*WhG=WS&FRGtg@_eS#4P>vQ}oT z&blb;lB{d8)@EIowJqy|tbb)|vvt|I*@o?^Zx$-XQ5f$ZJc zFK7Rd{jVH(jwZ*PQ=LCpreVU6k{hCdh z&6+Kmt(r$QJ2ksB&uR8)_G=Dme$o6>b6gv*P0=#iOl`JStu4@6v^K3nyF`1wc9phI zd$INs?WNkww3lnI)Lx~%MtiMxt@e8DjoK~Rt=b2*4{0CP?$$n`eML7`_vi!qkba(ifqs$xJpK84R=-TYPT#Lzuiv2G zsDD7eP5+SoHT{>l3AshN#kr-q#@vy)uG~{{Pt9$}ott|}?xx)Pa<}Ae&3!O;XYQ`t z-MMe){+K7vv*cOx?0L>ScV0zaRbF-8+`OCfp3nOt??~QPc}MfU&HFX)x4h$q41?7$ z!QeOa7y^cnVV>av!&1XCL!V)z;U2>#!)C+%hDQuL3_A@64d3U>@<-;I@-6wcd`JH1 z{PO&Ye1HB;`OoKnk$)urtNf$+-{$|C|6Bg?f|7!>3ziq$S+KrfL&3&^dkeM|JY2B7 zU~j>fh4F=jg++xWg(C{f3Y~@S!cz*T7WNcgTzGHcrozpI_ZL1;xTEl~!d-=57G)OI z6tx$16wNN`Eb1*j4C;+q^YE%q_<>I$w@z_W%F@ diff --git a/Sketch/Ubahn.sketch b/Sketch/Ubahn.sketch deleted file mode 100644 index 52c4ba89fb5baf67c74e1b34ca4bbd19009f0c5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 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 diff --git a/Sketch/tram.sketch b/Sketch/tram.sketch deleted file mode 100644 index 08f6b8e154645911c602018cf56d28efbd32e9bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57344 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

xeumVnw2eh!Xl|#*PGiA-{-U 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 diff --git a/VBB.xcodeproj/project.pbxproj b/VBB.xcodeproj/project.pbxproj index 67f3301..bc07f9a 100644 --- a/VBB.xcodeproj/project.pbxproj +++ b/VBB.xcodeproj/project.pbxproj @@ -7,11 +7,84 @@ objects = { /* Begin PBXBuildFile section */ - 41CECF18E34FE366E3303421 /* Pods_VBBPods_VBBNow.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9E218DF1D9207421C3487148 /* Pods_VBBPods_VBBNow.framework */; }; + 0F4BD038674E6ECDF4E53CA9 /* Pods_VBBFrameworkPods_VBB.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 285021482A6ED538287500DD /* Pods_VBBFrameworkPods_VBB.framework */; }; + 790388C022F4C993002326D9 /* NSBundle+VBB.h in Headers */ = {isa = PBXBuildFile; fileRef = 790388BE22F4C993002326D9 /* NSBundle+VBB.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 790388C122F4C993002326D9 /* NSBundle+VBB.h in Headers */ = {isa = PBXBuildFile; fileRef = 790388BE22F4C993002326D9 /* NSBundle+VBB.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 790388C222F4C993002326D9 /* NSBundle+VBB.m in Sources */ = {isa = PBXBuildFile; fileRef = 790388BF22F4C993002326D9 /* NSBundle+VBB.m */; }; + 790388C322F4C993002326D9 /* NSBundle+VBB.m in Sources */ = {isa = PBXBuildFile; fileRef = 790388BF22F4C993002326D9 /* NSBundle+VBB.m */; }; + 79051D6022B57B3B00694592 /* DepartureListPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79051D5F22B57B3B00694592 /* DepartureListPresenter.swift */; }; + 791EDCDE22F37BF9006F6113 /* DeparturePresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 791EDCDD22F37BF9006F6113 /* DeparturePresenter.swift */; }; + 79290564233558C8001D6737 /* OnboardingPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79290563233558C8001D6737 /* OnboardingPresenter.swift */; }; + 794A506D2337AFDE00AFA228 /* VBBNetworkStatus-Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 794A506C2337AFDE00AFA228 /* VBBNetworkStatus-Extension.swift */; }; + 7951B06B22F4085800FBA206 /* View-Gradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7951B06A22F4085800FBA206 /* View-Gradient.swift */; }; + 7951B06D22F4129400FBA206 /* VBBDeparture-Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7951B06C22F4129400FBA206 /* VBBDeparture-Extension.swift */; }; + 7951B07022F4B69800FBA206 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7951B06E22F4B69200FBA206 /* Assets.xcassets */; }; + 7951B07122F4B69800FBA206 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7951B06E22F4B69200FBA206 /* Assets.xcassets */; }; + 7962705E234126E20076EB39 /* TimeInterval-Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7962705D234126E20076EB39 /* TimeInterval-Extension.swift */; }; + 79653F5022BABAA60040A51F /* NSString+VBB.h in Headers */ = {isa = PBXBuildFile; fileRef = 79653F4E22BABAA60040A51F /* NSString+VBB.h */; }; + 79653F5122BABAA60040A51F /* NSString+VBB.m in Sources */ = {isa = PBXBuildFile; fileRef = 79653F4F22BABAA60040A51F /* NSString+VBB.m */; }; + 79653F5222BABEA60040A51F /* NSDateComponentsFormatter+VBB.m in Sources */ = {isa = PBXBuildFile; fileRef = 7967A74D22B6715D004FA671 /* NSDateComponentsFormatter+VBB.m */; }; + 79653F5322BABEA60040A51F /* NSString+VBB.m in Sources */ = {isa = PBXBuildFile; fileRef = 79653F4F22BABAA60040A51F /* NSString+VBB.m */; }; + 7967A74822B66AF3004FA671 /* VBBLine-Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7967A74722B66AF3004FA671 /* VBBLine-Extension.swift */; }; + 7967A74E22B6715D004FA671 /* NSDateComponentsFormatter+VBB.h in Headers */ = {isa = PBXBuildFile; fileRef = 7967A74C22B6715D004FA671 /* NSDateComponentsFormatter+VBB.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7967A74F22B6715D004FA671 /* NSDateComponentsFormatter+VBB.m in Sources */ = {isa = PBXBuildFile; fileRef = 7967A74D22B6715D004FA671 /* NSDateComponentsFormatter+VBB.m */; }; + 7967A75022B671F3004FA671 /* NSDateComponentsFormatter+VBB.h in Headers */ = {isa = PBXBuildFile; fileRef = 7967A74C22B6715D004FA671 /* NSDateComponentsFormatter+VBB.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7967A75422B679EB004FA671 /* VBBStation-Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7967A75322B679EA004FA671 /* VBBStation-Extension.swift */; }; + 7968953E22B5574E002EAF84 /* VBBWatch App.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = 7968953D22B5574E002EAF84 /* VBBWatch App.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 7968954422B5574E002EAF84 /* Interface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7968954222B5574E002EAF84 /* Interface.storyboard */; }; + 7968954622B5574F002EAF84 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7968954522B5574F002EAF84 /* Assets.xcassets */; }; + 7968954D22B5574F002EAF84 /* VBBWatch Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 7968954C22B5574F002EAF84 /* VBBWatch Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 7968955222B5574F002EAF84 /* DepartureListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7968955122B5574F002EAF84 /* DepartureListView.swift */; }; + 7968955422B5574F002EAF84 /* HostingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7968955322B5574F002EAF84 /* HostingController.swift */; }; + 7968955622B5574F002EAF84 /* ExtensionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7968955522B5574F002EAF84 /* ExtensionDelegate.swift */; }; + 7968955822B5574F002EAF84 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7968955722B5574F002EAF84 /* Assets.xcassets */; }; + 7968955B22B5574F002EAF84 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7968955A22B5574F002EAF84 /* Preview Assets.xcassets */; }; + 7968956822B55762002EAF84 /* VBBFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 79A8682C22B54CA40002F85D /* VBBFramework.framework */; }; + 7968956922B55762002EAF84 /* VBBFramework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 79A8682C22B54CA40002F85D /* VBBFramework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 7970D99822F3636400D96BEB /* VBBNetworkManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E19086EF1A79886400364EA2 /* VBBNetworkManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 797DF3AF233FF4CE00764404 /* NSNotification-Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 797DF3AE233FF4CE00764404 /* NSNotification-Extensions.swift */; }; + 79A32CF022E4CB2F0030A481 /* Pods_VBBFrameworkPods_VBBFramework_macOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BDCCB7D0C262E7F2817D7DE4 /* Pods_VBBFrameworkPods_VBBFramework_macOS.framework */; }; + 79A32CF322E4CB490030A481 /* VBBFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E157C33A2099CC2400C0CD60 /* VBBFramework.framework */; }; + 79A32CF422E4CB490030A481 /* VBBFramework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E157C33A2099CC2400C0CD60 /* VBBFramework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 79A867DD22B54B160002F85D /* VBBFramework-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 79A867DC22B54B160002F85D /* VBBFramework-umbrella.h */; }; + 79A8681122B54CA40002F85D /* VBBLine.m in Sources */ = {isa = PBXBuildFile; fileRef = E14CDF0B1A7EB911007B1C46 /* VBBLine.m */; }; + 79A8681222B54CA40002F85D /* VBBStationParser.m in Sources */ = {isa = PBXBuildFile; fileRef = E1A5689E1A7990C500C2EA16 /* VBBStationParser.m */; }; + 79A8681322B54CA40002F85D /* VBBLocation.m in Sources */ = {isa = PBXBuildFile; fileRef = E1FA45AA1D4F7F1800D6F33D /* VBBLocation.m */; }; + 79A8681422B54CA40002F85D /* VBBDepature.m in Sources */ = {isa = PBXBuildFile; fileRef = E1948A9E1A7A46F1005C9D97 /* VBBDepature.m */; }; + 79A8681522B54CA40002F85D /* VBBPersistanceManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E1A5689A1A79893100C2EA16 /* VBBPersistanceManager.m */; }; + 79A8681622B54CA40002F85D /* VBBDepatureParser.m in Sources */ = {isa = PBXBuildFile; fileRef = E1948A9B1A7A46DB005C9D97 /* VBBDepatureParser.m */; }; + 79A8681722B54CA40002F85D /* VBBNetworkManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E19086F01A79886400364EA2 /* VBBNetworkManager.m */; }; + 79A8681822B54CA40002F85D /* VBBaseParser.m in Sources */ = {isa = PBXBuildFile; fileRef = E1948A961A7A3EB0005C9D97 /* VBBaseParser.m */; }; + 79A8681922B54CA40002F85D /* VBBStation.m in Sources */ = {isa = PBXBuildFile; fileRef = E1A568A11A7991CE00C2EA16 /* VBBStation.m */; }; + 79A8681D22B54CA40002F85D /* VBBFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = E157C33C2099CC2400C0CD60 /* VBBFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 79A8681E22B54CA40002F85D /* VBBNetworkManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E19086EF1A79886400364EA2 /* VBBNetworkManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 79A8681F22B54CA40002F85D /* VBBPersistanceManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E1A568991A79893100C2EA16 /* VBBPersistanceManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 79A8682022B54CA40002F85D /* VBBStation.h in Headers */ = {isa = PBXBuildFile; fileRef = E1A568A01A7991CE00C2EA16 /* VBBStation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 79A8682122B54CA40002F85D /* VBBDepature.h in Headers */ = {isa = PBXBuildFile; fileRef = E1948A9D1A7A46F1005C9D97 /* VBBDepature.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 79A8682222B54CA40002F85D /* VBBLine.h in Headers */ = {isa = PBXBuildFile; fileRef = E14CDF0A1A7EB911007B1C46 /* VBBLine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 79A8682322B54CA40002F85D /* VBBLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = E1FA45A91D4F7F1800D6F33D /* VBBLocation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 79A8682422B54CA40002F85D /* VBBaseParser.h in Headers */ = {isa = PBXBuildFile; fileRef = E1948A951A7A3EB0005C9D97 /* VBBaseParser.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 79A8682522B54CA40002F85D /* VBBStationParser.h in Headers */ = {isa = PBXBuildFile; fileRef = E1A5689D1A7990C500C2EA16 /* VBBStationParser.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 79A8682722B54CA40002F85D /* VBBDepatureParser.h in Headers */ = {isa = PBXBuildFile; fileRef = E1948A9A1A7A46DB005C9D97 /* VBBDepatureParser.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 79A8683E22B5518E0002F85D /* VBBFramework-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 79A867DC22B54B160002F85D /* VBBFramework-umbrella.h */; }; + 79A8C61A22BEB842002BE5D6 /* ParentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79A8C61922BEB842002BE5D6 /* ParentView.swift */; }; + 79AF31BD22F59AEA006F7881 /* Icons.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7951B07222F4BC1600FBA206 /* Icons.xcassets */; }; + 79AF31C122F6157A006F7881 /* LinePresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79AF31C022F6157A006F7881 /* LinePresenter.swift */; }; + 79AF31C322F61609006F7881 /* LineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79AF31C222F61609006F7881 /* LineView.swift */; }; + 79AF31C822F61A8F006F7881 /* Realm-VBB.h in Headers */ = {isa = PBXBuildFile; fileRef = 79AF31C522F61A7B006F7881 /* Realm-VBB.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 79AF31C922F61A8F006F7881 /* Realm-VBB.m in Sources */ = {isa = PBXBuildFile; fileRef = 79AF31C622F61A7B006F7881 /* Realm-VBB.m */; }; + 79AF31CA22F61A90006F7881 /* Realm-VBB.h in Headers */ = {isa = PBXBuildFile; fileRef = 79AF31C522F61A7B006F7881 /* Realm-VBB.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 79AF31CB22F61A90006F7881 /* Realm-VBB.m in Sources */ = {isa = PBXBuildFile; fileRef = 79AF31C622F61A7B006F7881 /* Realm-VBB.m */; }; 79B1495A21DCB3A4001E5FEB /* VBBTodayViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 791C44FA21DBDB8F00269E47 /* VBBTodayViewController.xib */; }; 79B1495B21DCB3A7001E5FEB /* VBBListRowViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 791C44FC21DBDC0F00269E47 /* VBBListRowViewController.xib */; }; - 8CD4F290FE6C1AB8362E5EA6 /* Pods_VBBPods_VBBFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46BFD4E2F68B97E4359A32B4 /* Pods_VBBPods_VBBFramework.framework */; }; - ACFB3B0EA651E6F34979F4CE /* Pods_VBBPods_VBB.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 667BF803F6EC46231455275D /* Pods_VBBPods_VBB.framework */; }; + 79B2591522F6E526005224E2 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 79B2591722F6E526005224E2 /* Localizable.strings */; }; + 79C3AA4422B9689E00EACD7A /* OnboardingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79C3AA4322B9689E00EACD7A /* OnboardingView.swift */; }; + 79C5648822B55BD000039D3C /* DepartureView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79C5648722B55BD000039D3C /* DepartureView.swift */; }; + 79C6FB9422B832E000ABF0F4 /* MapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 79C6FB9322B832E000ABF0F4 /* MapKit.framework */; }; + 79EA57D222FA0279009A2D15 /* LoadingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79EA57D122FA0279009A2D15 /* LoadingView.swift */; }; + 79ED02A222B96CE00089AB45 /* ParentPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79ED02A122B96CE00089AB45 /* ParentPresenter.swift */; }; + B0FA7E675B626B64CA9E295A /* Pods_VBBFrameworkPods_VBBNow.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEE9A1EECB9500388A2A98A /* Pods_VBBFrameworkPods_VBBNow.framework */; }; + B11114E7D32C0C2D70604DC9 /* Pods_VBBFrameworkPods_VBBFramework_WatchOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7968953522B554F3002EAF84 /* Pods_VBBFrameworkPods_VBBFramework_WatchOS.framework */; }; E157C33E2099CC2400C0CD60 /* VBBFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = E157C33C2099CC2400C0CD60 /* VBBFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; E157C3412099CC2400C0CD60 /* VBBFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E157C33A2099CC2400C0CD60 /* VBBFramework.framework */; }; E157C3422099CC2400C0CD60 /* VBBFramework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E157C33A2099CC2400C0CD60 /* VBBFramework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; @@ -26,8 +99,6 @@ E157C37E2099CD9A00C0CD60 /* VBBLocation.m in Sources */ = {isa = PBXBuildFile; fileRef = E1FA45AA1D4F7F1800D6F33D /* VBBLocation.m */; }; E157C37F2099CD9E00C0CD60 /* VBBNetworkManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E19086F01A79886400364EA2 /* VBBNetworkManager.m */; }; E157C3802099CD9E00C0CD60 /* VBBPersistanceManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E1A5689A1A79893100C2EA16 /* VBBPersistanceManager.m */; }; - E157C3812099CDAB00C0CD60 /* VBBFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E157C33A2099CC2400C0CD60 /* VBBFramework.framework */; }; - E157C3822099D06A00C0CD60 /* VBBNetworkManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E19086EF1A79886400364EA2 /* VBBNetworkManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; E157C3832099D06A00C0CD60 /* VBBPersistanceManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E1A568991A79893100C2EA16 /* VBBPersistanceManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; E157C3842099D06A00C0CD60 /* VBBStation.h in Headers */ = {isa = PBXBuildFile; fileRef = E1A568A01A7991CE00C2EA16 /* VBBStation.h */; settings = {ATTRIBUTES = (Public, ); }; }; E157C3852099D06A00C0CD60 /* VBBDepature.h in Headers */ = {isa = PBXBuildFile; fileRef = E1948A9D1A7A46F1005C9D97 /* VBBDepature.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -38,16 +109,36 @@ E157C38A2099D06A00C0CD60 /* VBBDepatureParser.h in Headers */ = {isa = PBXBuildFile; fileRef = E1948A9A1A7A46DB005C9D97 /* VBBDepatureParser.h */; settings = {ATTRIBUTES = (Private, ); }; }; E15C8B6B1A7C0F3C0080EE8B /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = E19086D61A79870300364EA2 /* MainMenu.xib */; }; E17F97A51A7C0E4800623FB2 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = E17F97A01A7C0E4800623FB2 /* InfoPlist.strings */; }; - E17F97A61A7C0E4800623FB2 /* Icons.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E17F97A21A7C0E4800623FB2 /* Icons.xcassets */; }; E17F97A81A7C0E4800623FB2 /* vbbnow.entitlements in Resources */ = {isa = PBXBuildFile; fileRef = E17F97A41A7C0E4800623FB2 /* vbbnow.entitlements */; }; E19086D11A79870300364EA2 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E19086D01A79870300364EA2 /* AppDelegate.m */; }; E19086D31A79870300364EA2 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = E19086D21A79870300364EA2 /* main.m */; }; E1AEBBE81A7B701D00196F97 /* NotificationCenter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E1948A7E1A7A3DEB005C9D97 /* NotificationCenter.framework */; }; E1AEBBFC1A7B701D00196F97 /* VBBNow.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = E1AEBBE71A7B701D00196F97 /* VBBNow.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - E1F6153B1A7D407F00EEA639 /* Icons.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E17F97A21A7C0E4800623FB2 /* Icons.xcassets */; }; + EE6B87726DE4BF0128458003 /* Pods_VBBFrameworkPods_VBBWatch_Extension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3421FA8B2C099BFC93F860C2 /* Pods_VBBFrameworkPods_VBBWatch_Extension.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 7968953F22B5574E002EAF84 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E19086C21A79870300364EA2 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 7968953C22B5574E002EAF84; + remoteInfo = "VBBWatch WatchKit App"; + }; + 7968954E22B5574F002EAF84 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E19086C21A79870300364EA2 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 7968954B22B5574F002EAF84; + remoteInfo = "VBBWatch WatchKit Extension"; + }; + 7968956A22B55762002EAF84 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E19086C21A79870300364EA2 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 79A8680E22B54CA40002F85D; + remoteInfo = "VBBFramework-WatchOS"; + }; 79B1496221DCB5A2001E5FEB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = E19086C21A79870300364EA2 /* Project object */; @@ -72,6 +163,50 @@ /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ + 7968956022B5574F002EAF84 /* Embed App Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + 7968954D22B5574F002EAF84 /* VBBWatch Extension.appex in Embed App Extensions */, + ); + name = "Embed App Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; + 7968956422B5574F002EAF84 /* Embed Watch Content */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "$(CONTENTS_FOLDER_PATH)/Watch"; + dstSubfolderSpec = 16; + files = ( + 7968953E22B5574E002EAF84 /* VBBWatch App.app in Embed Watch Content */, + ); + name = "Embed Watch Content"; + runOnlyForDeploymentPostprocessing = 0; + }; + 7968956C22B55762002EAF84 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 7968956922B55762002EAF84 /* VBBFramework.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 79A32CF522E4CB490030A481 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 79A32CF422E4CB490030A481 /* VBBFramework.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; E157C3462099CC2400C0CD60 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -97,22 +232,86 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0167B0997B867BBF926B3FB2 /* Pods-VBBFrameworkPods-VBBWatch Extension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VBBFrameworkPods-VBBWatch Extension.release.xcconfig"; path = "Pods/Target Support Files/Pods-VBBFrameworkPods-VBBWatch Extension/Pods-VBBFrameworkPods-VBBWatch Extension.release.xcconfig"; sourceTree = ""; }; + 0ADE7AED1B652065D933F38B /* Pods-VBBFrameworkPods-VBBFramework.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VBBFrameworkPods-VBBFramework.release.xcconfig"; path = "Pods/Target Support Files/Pods-VBBFrameworkPods-VBBFramework/Pods-VBBFrameworkPods-VBBFramework.release.xcconfig"; sourceTree = ""; }; 0B61806681AAA7E29F1AA122 /* Pods-VBBPods-VBBFramework.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VBBPods-VBBFramework.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VBBPods-VBBFramework/Pods-VBBPods-VBBFramework.debug.xcconfig"; sourceTree = ""; }; 0C26A8B1F7DEF56ACD31B606 /* Pods_VBBFramework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_VBBFramework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 12191626B6A522251DF25AA0 /* Pods-VBBFramework.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VBBFramework.release.xcconfig"; path = "Pods/Target Support Files/Pods-VBBFramework/Pods-VBBFramework.release.xcconfig"; sourceTree = ""; }; - 16AAB8987028C777D0FBCE02 /* Pods-VBBPods-VBBNow.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VBBPods-VBBNow.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VBBPods-VBBNow/Pods-VBBPods-VBBNow.debug.xcconfig"; sourceTree = ""; }; - 46BFD4E2F68B97E4359A32B4 /* Pods_VBBPods_VBBFramework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_VBBPods_VBBFramework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 16D192B187425E69B9B2A938 /* Pods-VBBFrameworkPods-VBBFramework-WatchOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VBBFrameworkPods-VBBFramework-WatchOS.release.xcconfig"; path = "Pods/Target Support Files/Pods-VBBFrameworkPods-VBBFramework-WatchOS/Pods-VBBFrameworkPods-VBBFramework-WatchOS.release.xcconfig"; sourceTree = ""; }; + 17869F29851E0C35950B3E0A /* Pods-VBBWatch Extension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VBBWatch Extension.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VBBWatch Extension/Pods-VBBWatch Extension.debug.xcconfig"; sourceTree = ""; }; + 20973B06F87F036D3A4110F2 /* Pods-VBBFrameworkPods-VBBFramework-macOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VBBFrameworkPods-VBBFramework-macOS.release.xcconfig"; path = "Pods/Target Support Files/Pods-VBBFrameworkPods-VBBFramework-macOS/Pods-VBBFrameworkPods-VBBFramework-macOS.release.xcconfig"; sourceTree = ""; }; + 285021482A6ED538287500DD /* Pods_VBBFrameworkPods_VBB.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_VBBFrameworkPods_VBB.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 28E87E95EDA4B923462F4D83 /* Pods-VBBFrameworkPods-VBBFramework-WatchOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VBBFrameworkPods-VBBFramework-WatchOS.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VBBFrameworkPods-VBBFramework-WatchOS/Pods-VBBFrameworkPods-VBBFramework-WatchOS.debug.xcconfig"; sourceTree = ""; }; + 2BC934B59A728B7BEA0636B3 /* Pods-VBBFrameworkPods-VBBNow.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VBBFrameworkPods-VBBNow.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VBBFrameworkPods-VBBNow/Pods-VBBFrameworkPods-VBBNow.debug.xcconfig"; sourceTree = ""; }; + 3421FA8B2C099BFC93F860C2 /* Pods_VBBFrameworkPods_VBBWatch_Extension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_VBBFrameworkPods_VBBWatch_Extension.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3C7FF169CB98E57F7920091C /* Pods-VBBFrameworkPods-VBBFramework-macOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VBBFrameworkPods-VBBFramework-macOS.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VBBFrameworkPods-VBBFramework-macOS/Pods-VBBFrameworkPods-VBBFramework-macOS.debug.xcconfig"; sourceTree = ""; }; + 4EA4D3DCA40C5D292659654B /* Pods-VBB.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VBB.release.xcconfig"; path = "Pods/Target Support Files/Pods-VBB/Pods-VBB.release.xcconfig"; sourceTree = ""; }; + 4F4E06631C481A8587DE5947 /* Pods-VBBWatch WatchKit Extension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VBBWatch WatchKit Extension.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VBBWatch WatchKit Extension/Pods-VBBWatch WatchKit Extension.debug.xcconfig"; sourceTree = ""; }; + 54086035F2CBD9CEEAE40458 /* Pods-VBBNow.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VBBNow.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VBBNow/Pods-VBBNow.debug.xcconfig"; sourceTree = ""; }; + 5D7324615ABC71518CDB615F /* Pods-VBBFrameworkPods-VBBFramework.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VBBFrameworkPods-VBBFramework.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VBBFrameworkPods-VBBFramework/Pods-VBBFrameworkPods-VBBFramework.debug.xcconfig"; sourceTree = ""; }; 667BF803F6EC46231455275D /* Pods_VBBPods_VBB.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_VBBPods_VBB.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 67F15DD87868EF68F4B521BF /* Pods-VBBPods-VBBNow.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VBBPods-VBBNow.release.xcconfig"; path = "Pods/Target Support Files/Pods-VBBPods-VBBNow/Pods-VBBPods-VBBNow.release.xcconfig"; sourceTree = ""; }; + 69955D582DA31771816542E1 /* Pods_VBBFrameworkPods_VBBFramework_WatchOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_VBBFrameworkPods_VBBFramework_WatchOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7891A1221A1C1E755E21A434 /* Pods-VBBFramework.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VBBFramework.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VBBFramework/Pods-VBBFramework.debug.xcconfig"; sourceTree = ""; }; + 790388BE22F4C993002326D9 /* NSBundle+VBB.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSBundle+VBB.h"; sourceTree = ""; }; + 790388BF22F4C993002326D9 /* NSBundle+VBB.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSBundle+VBB.m"; sourceTree = ""; }; + 79051D5F22B57B3B00694592 /* DepartureListPresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DepartureListPresenter.swift; sourceTree = ""; }; 791C44FA21DBDB8F00269E47 /* VBBTodayViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = VBBTodayViewController.xib; sourceTree = ""; }; 791C44FC21DBDC0F00269E47 /* VBBListRowViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = VBBListRowViewController.xib; sourceTree = ""; }; - 90DAD5A44B2AE01CFEFFBCA4 /* Pods_VBBNow.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_VBBNow.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 791EDCDD22F37BF9006F6113 /* DeparturePresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeparturePresenter.swift; sourceTree = ""; }; + 79290563233558C8001D6737 /* OnboardingPresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingPresenter.swift; sourceTree = ""; }; + 7929056523356C1C001D6737 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; + 794A506C2337AFDE00AFA228 /* VBBNetworkStatus-Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "VBBNetworkStatus-Extension.swift"; sourceTree = ""; }; + 7951B06A22F4085800FBA206 /* View-Gradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View-Gradient.swift"; sourceTree = ""; }; + 7951B06C22F4129400FBA206 /* VBBDeparture-Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "VBBDeparture-Extension.swift"; sourceTree = ""; }; + 7951B06E22F4B69200FBA206 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 7951B07222F4BC1600FBA206 /* Icons.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Icons.xcassets; path = VBB/Icons.xcassets; sourceTree = SOURCE_ROOT; }; + 7962705D234126E20076EB39 /* TimeInterval-Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TimeInterval-Extension.swift"; sourceTree = ""; }; + 79653F4E22BABAA60040A51F /* NSString+VBB.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSString+VBB.h"; sourceTree = ""; }; + 79653F4F22BABAA60040A51F /* NSString+VBB.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSString+VBB.m"; sourceTree = ""; }; + 7967A74722B66AF3004FA671 /* VBBLine-Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "VBBLine-Extension.swift"; sourceTree = ""; }; + 7967A74C22B6715D004FA671 /* NSDateComponentsFormatter+VBB.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSDateComponentsFormatter+VBB.h"; sourceTree = ""; }; + 7967A74D22B6715D004FA671 /* NSDateComponentsFormatter+VBB.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSDateComponentsFormatter+VBB.m"; sourceTree = ""; }; + 7967A75322B679EA004FA671 /* VBBStation-Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "VBBStation-Extension.swift"; sourceTree = ""; }; + 7968953522B554F3002EAF84 /* Pods_VBBFrameworkPods_VBBFramework_WatchOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Pods_VBBFrameworkPods_VBBFramework_WatchOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7968953A22B5574E002EAF84 /* VBBWatch.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = VBBWatch.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 7968953D22B5574E002EAF84 /* VBBWatch App.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "VBBWatch App.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 7968954322B5574E002EAF84 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Interface.storyboard; sourceTree = ""; }; + 7968954522B5574F002EAF84 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 7968954722B5574F002EAF84 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 7968954C22B5574F002EAF84 /* VBBWatch Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "VBBWatch Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; + 7968955122B5574F002EAF84 /* DepartureListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DepartureListView.swift; sourceTree = ""; }; + 7968955322B5574F002EAF84 /* HostingController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HostingController.swift; sourceTree = ""; }; + 7968955522B5574F002EAF84 /* ExtensionDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionDelegate.swift; sourceTree = ""; }; + 7968955722B5574F002EAF84 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 7968955A22B5574F002EAF84 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; + 7968955C22B5574F002EAF84 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 797DF3AE233FF4CE00764404 /* NSNotification-Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSNotification-Extensions.swift"; sourceTree = ""; }; + 79A867DB22B54B160002F85D /* VBBFramework.modulemap */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = "sourcecode.module-map"; path = VBBFramework.modulemap; sourceTree = ""; }; + 79A867DC22B54B160002F85D /* VBBFramework-umbrella.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "VBBFramework-umbrella.h"; sourceTree = ""; }; + 79A8682C22B54CA40002F85D /* VBBFramework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = VBBFramework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 79A8C61922BEB842002BE5D6 /* ParentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParentView.swift; sourceTree = ""; }; + 79AF31C022F6157A006F7881 /* LinePresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LinePresenter.swift; sourceTree = ""; }; + 79AF31C222F61609006F7881 /* LineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LineView.swift; sourceTree = ""; }; + 79AF31C522F61A7B006F7881 /* Realm-VBB.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Realm-VBB.h"; sourceTree = ""; }; + 79AF31C622F61A7B006F7881 /* Realm-VBB.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "Realm-VBB.m"; sourceTree = ""; }; + 79B2591622F6E526005224E2 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + 79C3AA4322B9689E00EACD7A /* OnboardingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingView.swift; sourceTree = ""; }; + 79C5648722B55BD000039D3C /* DepartureView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DepartureView.swift; sourceTree = ""; }; + 79C6FB9322B832E000ABF0F4 /* MapKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MapKit.framework; path = Platforms/WatchOS.platform/Developer/SDKs/WatchOS6.0.sdk/System/Library/Frameworks/MapKit.framework; sourceTree = DEVELOPER_DIR; }; + 79EA57D122FA0279009A2D15 /* LoadingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadingView.swift; sourceTree = ""; }; + 79ED02A122B96CE00089AB45 /* ParentPresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParentPresenter.swift; sourceTree = ""; }; + 7AA5C8D3A5AC7FE7FFE62ACD /* Pods-VBBFrameworkPods-VBB.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VBBFrameworkPods-VBB.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VBBFrameworkPods-VBB/Pods-VBBFrameworkPods-VBB.debug.xcconfig"; sourceTree = ""; }; + 89322760E49051FD19D10F36 /* Pods-VBBWatch.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VBBWatch.release.xcconfig"; path = "Pods/Target Support Files/Pods-VBBWatch/Pods-VBBWatch.release.xcconfig"; sourceTree = ""; }; + 93E3B5B9C59E98CA7CFD6885 /* Pods-VBBWatch WatchKit Extension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VBBWatch WatchKit Extension.release.xcconfig"; path = "Pods/Target Support Files/Pods-VBBWatch WatchKit Extension/Pods-VBBWatch WatchKit Extension.release.xcconfig"; sourceTree = ""; }; 9E218DF1D9207421C3487148 /* Pods_VBBPods_VBBNow.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_VBBPods_VBBNow.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B0957EF3840658A2EB7B3B1A /* Pods-VBBPods-VBB.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VBBPods-VBB.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VBBPods-VBB/Pods-VBBPods-VBB.debug.xcconfig"; sourceTree = ""; }; - B4EDD8701BB4D2A7152E0253 /* Pods-VBBPods-VBB.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VBBPods-VBB.release.xcconfig"; path = "Pods/Target Support Files/Pods-VBBPods-VBB/Pods-VBBPods-VBB.release.xcconfig"; sourceTree = ""; }; - C3D0945F3F45278CE0C206A7 /* Pods_VBB.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_VBB.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9F15AF78642C8708D51A0C35 /* Pods-VBBFrameworkPods-VBBNow.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VBBFrameworkPods-VBBNow.release.xcconfig"; path = "Pods/Target Support Files/Pods-VBBFrameworkPods-VBBNow/Pods-VBBFrameworkPods-VBBNow.release.xcconfig"; sourceTree = ""; }; + 9F580EADBF13D1ED2D28A965 /* Pods-VBBWatch Extension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VBBWatch Extension.release.xcconfig"; path = "Pods/Target Support Files/Pods-VBBWatch Extension/Pods-VBBWatch Extension.release.xcconfig"; sourceTree = ""; }; + AFEE9A1EECB9500388A2A98A /* Pods_VBBFrameworkPods_VBBNow.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_VBBFrameworkPods_VBBNow.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B2968187C6C527FD730FFB01 /* Pods-VBB.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VBB.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VBB/Pods-VBB.debug.xcconfig"; sourceTree = ""; }; + BDCCB7D0C262E7F2817D7DE4 /* Pods_VBBFrameworkPods_VBBFramework_macOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_VBBFrameworkPods_VBBFramework_macOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CB625DCF924575090FED786C /* Pods-VBBFrameworkPods-VBBWatch Extension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VBBFrameworkPods-VBBWatch Extension.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VBBFrameworkPods-VBBWatch Extension/Pods-VBBFrameworkPods-VBBWatch Extension.debug.xcconfig"; sourceTree = ""; }; DA14C1F48BCDD3F011F7DA68 /* Pods-VBBPods-VBBFramework.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VBBPods-VBBFramework.release.xcconfig"; path = "Pods/Target Support Files/Pods-VBBPods-VBBFramework/Pods-VBBPods-VBBFramework.release.xcconfig"; sourceTree = ""; }; + DBC5C40767773931E189155B /* Pods-VBBNow.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VBBNow.release.xcconfig"; path = "Pods/Target Support Files/Pods-VBBNow/Pods-VBBNow.release.xcconfig"; sourceTree = ""; }; E14CDF0A1A7EB911007B1C46 /* VBBLine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VBBLine.h; sourceTree = ""; }; E14CDF0B1A7EB911007B1C46 /* VBBLine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VBBLine.m; sourceTree = ""; }; E157C33A2099CC2400C0CD60 /* VBBFramework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = VBBFramework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -125,10 +324,9 @@ E16440861A7AAB890008ECA3 /* libPods.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libPods.a; path = Pods/build/Debug/libPods.a; sourceTree = ""; }; E17A6ABA1C770CF900506B8A /* VBB.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = VBB.entitlements; sourceTree = ""; }; E17F97A11A7C0E4800623FB2 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = InfoPlist.strings; sourceTree = ""; }; - E17F97A21A7C0E4800623FB2 /* Icons.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Icons.xcassets; path = VBBNow/Icons.xcassets; sourceTree = SOURCE_ROOT; }; E17F97A31A7C0E4800623FB2 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = "VBBNow/Supporting Files/Info.plist"; sourceTree = SOURCE_ROOT; }; E17F97A41A7C0E4800623FB2 /* vbbnow.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; name = vbbnow.entitlements; path = "VBBNow/Supporting Files/vbbnow.entitlements"; sourceTree = SOURCE_ROOT; }; - E19086CA1A79870300364EA2 /* VBB.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = VBB.app; sourceTree = BUILT_PRODUCTS_DIR; }; + E19086CA1A79870300364EA2 /* VBBNow.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = VBBNow.app; sourceTree = BUILT_PRODUCTS_DIR; }; E19086CE1A79870300364EA2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; E19086CF1A79870300364EA2 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; E19086D01A79870300364EA2 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; @@ -152,14 +350,49 @@ E1AEBBE71A7B701D00196F97 /* VBBNow.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = VBBNow.appex; sourceTree = BUILT_PRODUCTS_DIR; }; E1FA45A91D4F7F1800D6F33D /* VBBLocation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VBBLocation.h; sourceTree = ""; }; E1FA45AA1D4F7F1800D6F33D /* VBBLocation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VBBLocation.m; sourceTree = ""; }; + E8708C61D9B673753DA164E6 /* Pods_VBBWatch.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_VBBWatch.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F0B41255AA6C835D0479A7B6 /* Pods-VBBFrameworkPods-VBB.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VBBFrameworkPods-VBB.release.xcconfig"; path = "Pods/Target Support Files/Pods-VBBFrameworkPods-VBB/Pods-VBBFrameworkPods-VBB.release.xcconfig"; sourceTree = ""; }; + F4CA7E39BC970F70DF84E2A1 /* Pods-VBBWatch.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VBBWatch.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VBBWatch/Pods-VBBWatch.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 389B04799A1AAFD2E3F38482 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7968954922B5574F002EAF84 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 79C6FB9422B832E000ABF0F4 /* MapKit.framework in Frameworks */, + 7968956822B55762002EAF84 /* VBBFramework.framework in Frameworks */, + EE6B87726DE4BF0128458003 /* Pods_VBBFrameworkPods_VBBWatch_Extension.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 79A8681A22B54CA40002F85D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + B11114E7D32C0C2D70604DC9 /* Pods_VBBFrameworkPods_VBBFramework_WatchOS.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B62765DEBCD442FD0EF7E12B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; E157C3362099CC2400C0CD60 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8CD4F290FE6C1AB8362E5EA6 /* Pods_VBBPods_VBBFramework.framework in Frameworks */, + 79A32CF022E4CB2F0030A481 /* Pods_VBBFrameworkPods_VBBFramework_macOS.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -168,7 +401,7 @@ buildActionMask = 2147483647; files = ( E157C3412099CC2400C0CD60 /* VBBFramework.framework in Frameworks */, - ACFB3B0EA651E6F34979F4CE /* Pods_VBBPods_VBB.framework in Frameworks */, + 0F4BD038674E6ECDF4E53CA9 /* Pods_VBBFrameworkPods_VBB.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -176,15 +409,130 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E157C3812099CDAB00C0CD60 /* VBBFramework.framework in Frameworks */, E1AEBBE81A7B701D00196F97 /* NotificationCenter.framework in Frameworks */, - 41CECF18E34FE366E3303421 /* Pods_VBBPods_VBBNow.framework in Frameworks */, + 79A32CF322E4CB490030A481 /* VBBFramework.framework in Frameworks */, + B0FA7E675B626B64CA9E295A /* Pods_VBBFrameworkPods_VBBNow.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 790E9CC322B5710100DBC9C4 /* Extensions */ = { + isa = PBXGroup; + children = ( + 797DF3AE233FF4CE00764404 /* NSNotification-Extensions.swift */, + 7962705D234126E20076EB39 /* TimeInterval-Extension.swift */, + 7951B06C22F4129400FBA206 /* VBBDeparture-Extension.swift */, + 7967A74722B66AF3004FA671 /* VBBLine-Extension.swift */, + 794A506C2337AFDE00AFA228 /* VBBNetworkStatus-Extension.swift */, + 7967A75322B679EA004FA671 /* VBBStation-Extension.swift */, + 7951B06A22F4085800FBA206 /* View-Gradient.swift */, + ); + path = Extensions; + sourceTree = ""; + }; + 7967A74922B67108004FA671 /* Miscellaneous */ = { + isa = PBXGroup; + children = ( + 79AF31C522F61A7B006F7881 /* Realm-VBB.h */, + 79AF31C622F61A7B006F7881 /* Realm-VBB.m */, + 7967A74C22B6715D004FA671 /* NSDateComponentsFormatter+VBB.h */, + 7967A74D22B6715D004FA671 /* NSDateComponentsFormatter+VBB.m */, + 79653F4E22BABAA60040A51F /* NSString+VBB.h */, + 79653F4F22BABAA60040A51F /* NSString+VBB.m */, + 790388BE22F4C993002326D9 /* NSBundle+VBB.h */, + 790388BF22F4C993002326D9 /* NSBundle+VBB.m */, + ); + path = Miscellaneous; + sourceTree = ""; + }; + 7968954122B5574E002EAF84 /* VBBWatch App */ = { + isa = PBXGroup; + children = ( + 7968954222B5574E002EAF84 /* Interface.storyboard */, + 7968954522B5574F002EAF84 /* Assets.xcassets */, + 7968954722B5574F002EAF84 /* Info.plist */, + ); + path = "VBBWatch App"; + sourceTree = ""; + }; + 7968955022B5574F002EAF84 /* VBBWatch Extension */ = { + isa = PBXGroup; + children = ( + 79C5648622B5599600039D3C /* Controller */, + 7968955522B5574F002EAF84 /* ExtensionDelegate.swift */, + 790E9CC322B5710100DBC9C4 /* Extensions */, + 79C3AA4222B95A9E00EACD7A /* Presenter */, + 79C5648522B5598900039D3C /* Support Files */, + 79C5648422B5598000039D3C /* Views */, + ); + path = "VBBWatch Extension"; + sourceTree = ""; + }; + 7968955922B5574F002EAF84 /* Preview Content */ = { + isa = PBXGroup; + children = ( + 7968955A22B5574F002EAF84 /* Preview Assets.xcassets */, + ); + path = "Preview Content"; + sourceTree = ""; + }; + 79A867DA22B54B040002F85D /* Support Files */ = { + isa = PBXGroup; + children = ( + E157C33C2099CC2400C0CD60 /* VBBFramework.h */, + 79A867DC22B54B160002F85D /* VBBFramework-umbrella.h */, + 79A867DB22B54B160002F85D /* VBBFramework.modulemap */, + 7951B06E22F4B69200FBA206 /* Assets.xcassets */, + ); + path = "Support Files"; + sourceTree = ""; + }; + 79C3AA4222B95A9E00EACD7A /* Presenter */ = { + isa = PBXGroup; + children = ( + 79051D5F22B57B3B00694592 /* DepartureListPresenter.swift */, + 791EDCDD22F37BF9006F6113 /* DeparturePresenter.swift */, + 79AF31C022F6157A006F7881 /* LinePresenter.swift */, + 79290563233558C8001D6737 /* OnboardingPresenter.swift */, + 79ED02A122B96CE00089AB45 /* ParentPresenter.swift */, + ); + path = Presenter; + sourceTree = ""; + }; + 79C5648422B5598000039D3C /* Views */ = { + isa = PBXGroup; + children = ( + 7968955122B5574F002EAF84 /* DepartureListView.swift */, + 79C5648722B55BD000039D3C /* DepartureView.swift */, + 79C3AA4322B9689E00EACD7A /* OnboardingView.swift */, + 79A8C61922BEB842002BE5D6 /* ParentView.swift */, + 79AF31C222F61609006F7881 /* LineView.swift */, + 79EA57D122FA0279009A2D15 /* LoadingView.swift */, + ); + path = Views; + sourceTree = ""; + }; + 79C5648522B5598900039D3C /* Support Files */ = { + isa = PBXGroup; + children = ( + 7968955722B5574F002EAF84 /* Assets.xcassets */, + 7968955C22B5574F002EAF84 /* Info.plist */, + 7968955922B5574F002EAF84 /* Preview Content */, + 79B2591722F6E526005224E2 /* Localizable.strings */, + ); + path = "Support Files"; + sourceTree = ""; + }; + 79C5648622B5599600039D3C /* Controller */ = { + isa = PBXGroup; + children = ( + 7968955322B5574F002EAF84 /* HostingController.swift */, + ); + path = Controller; + sourceTree = ""; + }; 8D27E6BEE4206BC56C37BDCD /* Pods */ = { isa = PBXGroup; children = ( @@ -192,10 +540,28 @@ 12191626B6A522251DF25AA0 /* Pods-VBBFramework.release.xcconfig */, 0B61806681AAA7E29F1AA122 /* Pods-VBBPods-VBBFramework.debug.xcconfig */, DA14C1F48BCDD3F011F7DA68 /* Pods-VBBPods-VBBFramework.release.xcconfig */, - B0957EF3840658A2EB7B3B1A /* Pods-VBBPods-VBB.debug.xcconfig */, - B4EDD8701BB4D2A7152E0253 /* Pods-VBBPods-VBB.release.xcconfig */, - 16AAB8987028C777D0FBCE02 /* Pods-VBBPods-VBBNow.debug.xcconfig */, - 67F15DD87868EF68F4B521BF /* Pods-VBBPods-VBBNow.release.xcconfig */, + 5D7324615ABC71518CDB615F /* Pods-VBBFrameworkPods-VBBFramework.debug.xcconfig */, + 28E87E95EDA4B923462F4D83 /* Pods-VBBFrameworkPods-VBBFramework-WatchOS.debug.xcconfig */, + 16D192B187425E69B9B2A938 /* Pods-VBBFrameworkPods-VBBFramework-WatchOS.release.xcconfig */, + 0ADE7AED1B652065D933F38B /* Pods-VBBFrameworkPods-VBBFramework.release.xcconfig */, + F4CA7E39BC970F70DF84E2A1 /* Pods-VBBWatch.debug.xcconfig */, + 89322760E49051FD19D10F36 /* Pods-VBBWatch.release.xcconfig */, + 4F4E06631C481A8587DE5947 /* Pods-VBBWatch WatchKit Extension.debug.xcconfig */, + 93E3B5B9C59E98CA7CFD6885 /* Pods-VBBWatch WatchKit Extension.release.xcconfig */, + 3C7FF169CB98E57F7920091C /* Pods-VBBFrameworkPods-VBBFramework-macOS.debug.xcconfig */, + 20973B06F87F036D3A4110F2 /* Pods-VBBFrameworkPods-VBBFramework-macOS.release.xcconfig */, + B2968187C6C527FD730FFB01 /* Pods-VBB.debug.xcconfig */, + 4EA4D3DCA40C5D292659654B /* Pods-VBB.release.xcconfig */, + 17869F29851E0C35950B3E0A /* Pods-VBBWatch Extension.debug.xcconfig */, + 9F580EADBF13D1ED2D28A965 /* Pods-VBBWatch Extension.release.xcconfig */, + 54086035F2CBD9CEEAE40458 /* Pods-VBBNow.debug.xcconfig */, + DBC5C40767773931E189155B /* Pods-VBBNow.release.xcconfig */, + 7AA5C8D3A5AC7FE7FFE62ACD /* Pods-VBBFrameworkPods-VBB.debug.xcconfig */, + F0B41255AA6C835D0479A7B6 /* Pods-VBBFrameworkPods-VBB.release.xcconfig */, + 2BC934B59A728B7BEA0636B3 /* Pods-VBBFrameworkPods-VBBNow.debug.xcconfig */, + 9F15AF78642C8708D51A0C35 /* Pods-VBBFrameworkPods-VBBNow.release.xcconfig */, + CB625DCF924575090FED786C /* Pods-VBBFrameworkPods-VBBWatch Extension.debug.xcconfig */, + 0167B0997B867BBF926B3FB2 /* Pods-VBBFrameworkPods-VBBWatch Extension.release.xcconfig */, ); name = Pods; sourceTree = ""; @@ -203,14 +569,19 @@ E114AB8D017F74B47967DFA8 /* Frameworks */ = { isa = PBXGroup; children = ( + 79C6FB9322B832E000ABF0F4 /* MapKit.framework */, + 7968953522B554F3002EAF84 /* Pods_VBBFrameworkPods_VBBFramework_WatchOS.framework */, E16440861A7AAB890008ECA3 /* libPods.a */, E1948A7E1A7A3DEB005C9D97 /* NotificationCenter.framework */, - C3D0945F3F45278CE0C206A7 /* Pods_VBB.framework */, - 90DAD5A44B2AE01CFEFFBCA4 /* Pods_VBBNow.framework */, 0C26A8B1F7DEF56ACD31B606 /* Pods_VBBFramework.framework */, 667BF803F6EC46231455275D /* Pods_VBBPods_VBB.framework */, - 46BFD4E2F68B97E4359A32B4 /* Pods_VBBPods_VBBFramework.framework */, 9E218DF1D9207421C3487148 /* Pods_VBBPods_VBBNow.framework */, + 69955D582DA31771816542E1 /* Pods_VBBFrameworkPods_VBBFramework_WatchOS.framework */, + E8708C61D9B673753DA164E6 /* Pods_VBBWatch.framework */, + BDCCB7D0C262E7F2817D7DE4 /* Pods_VBBFrameworkPods_VBBFramework_macOS.framework */, + 285021482A6ED538287500DD /* Pods_VBBFrameworkPods_VBB.framework */, + AFEE9A1EECB9500388A2A98A /* Pods_VBBFrameworkPods_VBBNow.framework */, + 3421FA8B2C099BFC93F860C2 /* Pods_VBBFrameworkPods_VBBWatch_Extension.framework */, ); name = Frameworks; sourceTree = ""; @@ -220,9 +591,10 @@ children = ( E157C33D2099CC2400C0CD60 /* Info.plist */, E157C3492099CC3800C0CD60 /* Manager */, + 7967A74922B67108004FA671 /* Miscellaneous */, E157C3482099CC3000C0CD60 /* Model */, E157C3472099CC2A00C0CD60 /* Parser */, - E157C33C2099CC2400C0CD60 /* VBBFramework.h */, + 79A867DA22B54B040002F85D /* Support Files */, ); path = VBBFramework; sourceTree = ""; @@ -303,6 +675,8 @@ children = ( E19086CC1A79870300364EA2 /* VBB */, E1AEBBE91A7B701D00196F97 /* VBBNow */, + 7968954122B5574E002EAF84 /* VBBWatch App */, + 7968955022B5574F002EAF84 /* VBBWatch Extension */, E157C33B2099CC2400C0CD60 /* VBBFramework */, E19086CB1A79870300364EA2 /* Products */, E114AB8D017F74B47967DFA8 /* Frameworks */, @@ -313,9 +687,13 @@ E19086CB1A79870300364EA2 /* Products */ = { isa = PBXGroup; children = ( - E19086CA1A79870300364EA2 /* VBB.app */, + E19086CA1A79870300364EA2 /* VBBNow.app */, E1AEBBE71A7B701D00196F97 /* VBBNow.appex */, E157C33A2099CC2400C0CD60 /* VBBFramework.framework */, + 79A8682C22B54CA40002F85D /* VBBFramework.framework */, + 7968953A22B5574E002EAF84 /* VBBWatch.app */, + 7968953D22B5574E002EAF84 /* VBBWatch App.app */, + 7968954C22B5574F002EAF84 /* VBBWatch Extension.appex */, ); name = Products; sourceTree = ""; @@ -326,7 +704,6 @@ E17A6ABA1C770CF900506B8A /* VBB.entitlements */, E19086CF1A79870300364EA2 /* AppDelegate.h */, E19086D01A79870300364EA2 /* AppDelegate.m */, - E17F97A21A7C0E4800623FB2 /* Icons.xcassets */, E19086D61A79870300364EA2 /* MainMenu.xib */, E19086CD1A79870300364EA2 /* Supporting Files */, ); @@ -337,6 +714,7 @@ E19086CD1A79870300364EA2 /* Supporting Files */ = { isa = PBXGroup; children = ( + 7951B07222F4BC1600FBA206 /* Icons.xcassets */, E19086CE1A79870300364EA2 /* Info.plist */, E19086D21A79870300364EA2 /* main.m */, ); @@ -355,19 +733,45 @@ /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ + 79A8681C22B54CA40002F85D /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 79A8681D22B54CA40002F85D /* VBBFramework.h in Headers */, + 79A8681E22B54CA40002F85D /* VBBNetworkManager.h in Headers */, + 79A8681F22B54CA40002F85D /* VBBPersistanceManager.h in Headers */, + 7967A75022B671F3004FA671 /* NSDateComponentsFormatter+VBB.h in Headers */, + 79A8682022B54CA40002F85D /* VBBStation.h in Headers */, + 79A8682122B54CA40002F85D /* VBBDepature.h in Headers */, + 79A8682222B54CA40002F85D /* VBBLine.h in Headers */, + 79A8682322B54CA40002F85D /* VBBLocation.h in Headers */, + 79A8683E22B5518E0002F85D /* VBBFramework-umbrella.h in Headers */, + 790388C122F4C993002326D9 /* NSBundle+VBB.h in Headers */, + 79AF31CA22F61A90006F7881 /* Realm-VBB.h in Headers */, + 79A8682422B54CA40002F85D /* VBBaseParser.h in Headers */, + 79A8682522B54CA40002F85D /* VBBStationParser.h in Headers */, + 79A8682722B54CA40002F85D /* VBBDepatureParser.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; E157C3372099CC2400C0CD60 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( E157C33E2099CC2400C0CD60 /* VBBFramework.h in Headers */, - E157C3822099D06A00C0CD60 /* VBBNetworkManager.h in Headers */, E157C3832099D06A00C0CD60 /* VBBPersistanceManager.h in Headers */, E157C3842099D06A00C0CD60 /* VBBStation.h in Headers */, + 790388C022F4C993002326D9 /* NSBundle+VBB.h in Headers */, E157C3852099D06A00C0CD60 /* VBBDepature.h in Headers */, E157C3862099D06A00C0CD60 /* VBBLine.h in Headers */, + 7967A74E22B6715D004FA671 /* NSDateComponentsFormatter+VBB.h in Headers */, E157C3872099D06A00C0CD60 /* VBBLocation.h in Headers */, + 7970D99822F3636400D96BEB /* VBBNetworkManager.h in Headers */, E157C3882099D06A00C0CD60 /* VBBaseParser.h in Headers */, E157C3892099D06A00C0CD60 /* VBBStationParser.h in Headers */, + 79653F5022BABAA60040A51F /* NSString+VBB.h in Headers */, + 79A867DD22B54B160002F85D /* VBBFramework-umbrella.h in Headers */, + 79AF31C822F61A8F006F7881 /* Realm-VBB.h in Headers */, E157C38A2099D06A00C0CD60 /* VBBDepatureParser.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; @@ -375,9 +779,85 @@ /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - E157C3392099CC2400C0CD60 /* VBBFramework */ = { + 7968953922B5574E002EAF84 /* VBBWatch */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7968956522B5574F002EAF84 /* Build configuration list for PBXNativeTarget "VBBWatch" */; + buildPhases = ( + 7968953822B5574E002EAF84 /* Resources */, + 7968956422B5574F002EAF84 /* Embed Watch Content */, + B62765DEBCD442FD0EF7E12B /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 7968954022B5574E002EAF84 /* PBXTargetDependency */, + ); + name = VBBWatch; + productName = VBBWatch; + productReference = 7968953A22B5574E002EAF84 /* VBBWatch.app */; + productType = "com.apple.product-type.application.watchapp2-container"; + }; + 7968953C22B5574E002EAF84 /* VBBWatch App */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7968956122B5574F002EAF84 /* Build configuration list for PBXNativeTarget "VBBWatch App" */; + buildPhases = ( + 7968953B22B5574E002EAF84 /* Resources */, + 7968956022B5574F002EAF84 /* Embed App Extensions */, + 389B04799A1AAFD2E3F38482 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 7968954F22B5574F002EAF84 /* PBXTargetDependency */, + ); + name = "VBBWatch App"; + productName = "VBBWatch WatchKit App"; + productReference = 7968953D22B5574E002EAF84 /* VBBWatch App.app */; + productType = "com.apple.product-type.application.watchapp2"; + }; + 7968954B22B5574F002EAF84 /* VBBWatch Extension */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7968955D22B5574F002EAF84 /* Build configuration list for PBXNativeTarget "VBBWatch Extension" */; + buildPhases = ( + 3924C1B2F8F28EC4FF923B99 /* [CP] Check Pods Manifest.lock */, + 7968954822B5574F002EAF84 /* Sources */, + 7968954922B5574F002EAF84 /* Frameworks */, + 7968954A22B5574F002EAF84 /* Resources */, + 7968956C22B55762002EAF84 /* Embed Frameworks */, + FF51DDE7E25771F1B1424D93 /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 7968956B22B55762002EAF84 /* PBXTargetDependency */, + ); + name = "VBBWatch Extension"; + productName = "VBBWatch WatchKit Extension"; + productReference = 7968954C22B5574F002EAF84 /* VBBWatch Extension.appex */; + productType = "com.apple.product-type.watchkit2-extension"; + }; + 79A8680E22B54CA40002F85D /* VBBFramework-WatchOS */ = { isa = PBXNativeTarget; - buildConfigurationList = E157C3452099CC2400C0CD60 /* Build configuration list for PBXNativeTarget "VBBFramework" */; + buildConfigurationList = 79A8682922B54CA40002F85D /* Build configuration list for PBXNativeTarget "VBBFramework-WatchOS" */; + buildPhases = ( + 79A8680F22B54CA40002F85D /* [CP] Check Pods Manifest.lock */, + 79A8681022B54CA40002F85D /* Sources */, + 79A8681A22B54CA40002F85D /* Frameworks */, + 79A8681C22B54CA40002F85D /* Headers */, + 79A8682822B54CA40002F85D /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "VBBFramework-WatchOS"; + productName = VBBFramework; + productReference = 79A8682C22B54CA40002F85D /* VBBFramework.framework */; + productType = "com.apple.product-type.framework"; + }; + E157C3392099CC2400C0CD60 /* VBBFramework-macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = E157C3452099CC2400C0CD60 /* Build configuration list for PBXNativeTarget "VBBFramework-macOS" */; buildPhases = ( 264B07C77728EA84BC85CA4F /* [CP] Check Pods Manifest.lock */, E157C3352099CC2400C0CD60 /* Sources */, @@ -389,7 +869,7 @@ ); dependencies = ( ); - name = VBBFramework; + name = "VBBFramework-macOS"; productName = VBBFramework; productReference = E157C33A2099CC2400C0CD60 /* VBBFramework.framework */; productType = "com.apple.product-type.framework"; @@ -398,13 +878,13 @@ isa = PBXNativeTarget; buildConfigurationList = E19086E71A79870300364EA2 /* Build configuration list for PBXNativeTarget "VBB" */; buildPhases = ( - 614ACA198863A10FF6843720 /* [CP] Check Pods Manifest.lock */, + 3F1BB7193E36977CE2FF86E6 /* [CP] Check Pods Manifest.lock */, E19086C61A79870300364EA2 /* Sources */, E19086C71A79870300364EA2 /* Frameworks */, E19086C81A79870300364EA2 /* Resources */, E1948A921A7A3DEB005C9D97 /* Embed App Extensions */, E157C3462099CC2400C0CD60 /* Embed Frameworks */, - 86541FE9AA960EC91AE11AC2 /* [CP] Embed Pods Frameworks */, + 1770E394FD22251233F49B16 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -414,17 +894,18 @@ ); name = VBB; productName = VBB/; - productReference = E19086CA1A79870300364EA2 /* VBB.app */; + productReference = E19086CA1A79870300364EA2 /* VBBNow.app */; productType = "com.apple.product-type.application"; }; E1AEBBE61A7B701D00196F97 /* VBBNow */ = { isa = PBXNativeTarget; buildConfigurationList = E1AEBBFD1A7B701D00196F97 /* Build configuration list for PBXNativeTarget "VBBNow" */; buildPhases = ( - 9284CEDE3076668EC2ECA92D /* [CP] Check Pods Manifest.lock */, + 8861021FDE16031313BF649E /* [CP] Check Pods Manifest.lock */, E1AEBBE31A7B701D00196F97 /* Sources */, E1AEBBE41A7B701D00196F97 /* Frameworks */, E1AEBBE51A7B701D00196F97 /* Resources */, + 79A32CF522E4CB490030A481 /* Embed Frameworks */, ); buildRules = ( ); @@ -443,9 +924,29 @@ isa = PBXProject; attributes = { CLASSPREFIX = VBB; - LastUpgradeCheck = 1010; + LastSwiftUpdateCheck = 1100; + LastUpgradeCheck = 1100; ORGANIZATIONNAME = "Dennis Oberhoff"; TargetAttributes = { + 7968953922B5574E002EAF84 = { + CreatedOnToolsVersion = 11.0; + DevelopmentTeam = YE33ZK7Z99; + ProvisioningStyle = Automatic; + }; + 7968953C22B5574E002EAF84 = { + CreatedOnToolsVersion = 11.0; + DevelopmentTeam = YE33ZK7Z99; + ProvisioningStyle = Automatic; + }; + 7968954B22B5574F002EAF84 = { + CreatedOnToolsVersion = 11.0; + DevelopmentTeam = YE33ZK7Z99; + ProvisioningStyle = Automatic; + }; + 79A8680E22B54CA40002F85D = { + DevelopmentTeam = YE33ZK7Z99; + ProvisioningStyle = Automatic; + }; E157C3392099CC2400C0CD60 = { CreatedOnToolsVersion = 9.3; DevelopmentTeam = YE33ZK7Z99; @@ -477,11 +978,12 @@ }; buildConfigurationList = E19086C51A79870300364EA2 /* Build configuration list for PBXProject "VBB" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, Base, + de, ); mainGroup = E19086C11A79870300364EA2; productRefGroup = E19086CB1A79870300364EA2 /* Products */; @@ -490,16 +992,55 @@ targets = ( E19086C91A79870300364EA2 /* VBB */, E1AEBBE61A7B701D00196F97 /* VBBNow */, - E157C3392099CC2400C0CD60 /* VBBFramework */, + 7968953922B5574E002EAF84 /* VBBWatch */, + 7968953C22B5574E002EAF84 /* VBBWatch App */, + 7968954B22B5574F002EAF84 /* VBBWatch Extension */, + E157C3392099CC2400C0CD60 /* VBBFramework-macOS */, + 79A8680E22B54CA40002F85D /* VBBFramework-WatchOS */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 7968953822B5574E002EAF84 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7968953B22B5574E002EAF84 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7968954622B5574F002EAF84 /* Assets.xcassets in Resources */, + 7968954422B5574E002EAF84 /* Interface.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7968954A22B5574F002EAF84 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7968955B22B5574F002EAF84 /* Preview Assets.xcassets in Resources */, + 79B2591522F6E526005224E2 /* Localizable.strings in Resources */, + 7968955822B5574F002EAF84 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 79A8682822B54CA40002F85D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7951B07122F4B69800FBA206 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; E157C3382099CC2400C0CD60 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 7951B07022F4B69800FBA206 /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -507,7 +1048,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - E1F6153B1A7D407F00EEA639 /* Icons.xcassets in Resources */, + 79AF31BD22F59AEA006F7881 /* Icons.xcassets in Resources */, E15C8B6B1A7C0F3C0080EE8B /* MainMenu.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -519,7 +1060,6 @@ E17F97A81A7C0E4800623FB2 /* vbbnow.entitlements in Resources */, 79B1495B21DCB3A7001E5FEB /* VBBListRowViewController.xib in Resources */, 79B1495A21DCB3A4001E5FEB /* VBBTodayViewController.xib in Resources */, - E17F97A61A7C0E4800623FB2 /* Icons.xcassets in Resources */, E17F97A51A7C0E4800623FB2 /* InfoPlist.strings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -527,6 +1067,24 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 1770E394FD22251233F49B16 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-VBBFrameworkPods-VBB/Pods-VBBFrameworkPods-VBB-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/Realm-macOS/Realm.framework", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Realm.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-VBBFrameworkPods-VBB/Pods-VBBFrameworkPods-VBB-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 264B07C77728EA84BC85CA4F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -538,50 +1096,58 @@ ); name = "[CP] Check Pods Manifest.lock"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-VBBPods-VBBFramework-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-VBBFrameworkPods-VBBFramework-macOS-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 614ACA198863A10FF6843720 /* [CP] Check Pods Manifest.lock */ = { + 3924C1B2F8F28EC4FF923B99 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( "${PODS_PODFILE_DIR_PATH}/Podfile.lock", "${PODS_ROOT}/Manifest.lock", ); name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-VBBPods-VBB-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-VBBFrameworkPods-VBBWatch Extension-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 86541FE9AA960EC91AE11AC2 /* [CP] Embed Pods Frameworks */ = { + 3F1BB7193E36977CE2FF86E6 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${SRCROOT}/Pods/Target Support Files/Pods-VBBPods-VBB/Pods-VBBPods-VBB-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/Realm/Realm.framework", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "[CP] Embed Pods Frameworks"; outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Realm.framework", + "$(DERIVED_FILE_DIR)/Pods-VBBFrameworkPods-VBB-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-VBBPods-VBB/Pods-VBBPods-VBB-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9284CEDE3076668EC2ECA92D /* [CP] Check Pods Manifest.lock */ = { + 79A8680F22B54CA40002F85D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -592,20 +1158,108 @@ ); name = "[CP] Check Pods Manifest.lock"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-VBBPods-VBBNow-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-VBBFrameworkPods-VBBFramework-WatchOS-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + 8861021FDE16031313BF649E /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-VBBFrameworkPods-VBBNow-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + FF51DDE7E25771F1B1424D93 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-VBBFrameworkPods-VBBWatch Extension/Pods-VBBFrameworkPods-VBBWatch Extension-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/Realm-watchOS/Realm.framework", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Realm.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-VBBFrameworkPods-VBBWatch Extension/Pods-VBBFrameworkPods-VBBWatch Extension-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 7968954822B5574F002EAF84 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 79290564233558C8001D6737 /* OnboardingPresenter.swift in Sources */, + 7968955422B5574F002EAF84 /* HostingController.swift in Sources */, + 79C3AA4422B9689E00EACD7A /* OnboardingView.swift in Sources */, + 79ED02A222B96CE00089AB45 /* ParentPresenter.swift in Sources */, + 7968955222B5574F002EAF84 /* DepartureListView.swift in Sources */, + 7962705E234126E20076EB39 /* TimeInterval-Extension.swift in Sources */, + 797DF3AF233FF4CE00764404 /* NSNotification-Extensions.swift in Sources */, + 7951B06B22F4085800FBA206 /* View-Gradient.swift in Sources */, + 79A8C61A22BEB842002BE5D6 /* ParentView.swift in Sources */, + 7967A74822B66AF3004FA671 /* VBBLine-Extension.swift in Sources */, + 791EDCDE22F37BF9006F6113 /* DeparturePresenter.swift in Sources */, + 794A506D2337AFDE00AFA228 /* VBBNetworkStatus-Extension.swift in Sources */, + 79AF31C122F6157A006F7881 /* LinePresenter.swift in Sources */, + 7951B06D22F4129400FBA206 /* VBBDeparture-Extension.swift in Sources */, + 7968955622B5574F002EAF84 /* ExtensionDelegate.swift in Sources */, + 79AF31C322F61609006F7881 /* LineView.swift in Sources */, + 79051D6022B57B3B00694592 /* DepartureListPresenter.swift in Sources */, + 79C5648822B55BD000039D3C /* DepartureView.swift in Sources */, + 7967A75422B679EB004FA671 /* VBBStation-Extension.swift in Sources */, + 79EA57D222FA0279009A2D15 /* LoadingView.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 79A8681022B54CA40002F85D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 790388C322F4C993002326D9 /* NSBundle+VBB.m in Sources */, + 79A8681122B54CA40002F85D /* VBBLine.m in Sources */, + 79A8681222B54CA40002F85D /* VBBStationParser.m in Sources */, + 79A8681322B54CA40002F85D /* VBBLocation.m in Sources */, + 79A8681422B54CA40002F85D /* VBBDepature.m in Sources */, + 79653F5222BABEA60040A51F /* NSDateComponentsFormatter+VBB.m in Sources */, + 79A8681522B54CA40002F85D /* VBBPersistanceManager.m in Sources */, + 79A8681622B54CA40002F85D /* VBBDepatureParser.m in Sources */, + 79A8681722B54CA40002F85D /* VBBNetworkManager.m in Sources */, + 79653F5322BABEA60040A51F /* NSString+VBB.m in Sources */, + 79A8681822B54CA40002F85D /* VBBaseParser.m in Sources */, + 79AF31CB22F61A90006F7881 /* Realm-VBB.m in Sources */, + 79A8681922B54CA40002F85D /* VBBStation.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; E157C3352099CC2400C0CD60 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 790388C222F4C993002326D9 /* NSBundle+VBB.m in Sources */, E157C37D2099CD9A00C0CD60 /* VBBLine.m in Sources */, E157C3792099CD9400C0CD60 /* VBBStationParser.m in Sources */, E157C37E2099CD9A00C0CD60 /* VBBLocation.m in Sources */, @@ -613,7 +1267,10 @@ E157C3802099CD9E00C0CD60 /* VBBPersistanceManager.m in Sources */, E157C37A2099CD9400C0CD60 /* VBBDepatureParser.m in Sources */, E157C37F2099CD9E00C0CD60 /* VBBNetworkManager.m in Sources */, + 7967A74F22B6715D004FA671 /* NSDateComponentsFormatter+VBB.m in Sources */, + 79653F5122BABAA60040A51F /* NSString+VBB.m in Sources */, E157C3782099CD9400C0CD60 /* VBBaseParser.m in Sources */, + 79AF31C922F61A8F006F7881 /* Realm-VBB.m in Sources */, E157C37B2099CD9A00C0CD60 /* VBBStation.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -639,6 +1296,21 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 7968954022B5574E002EAF84 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 7968953C22B5574E002EAF84 /* VBBWatch App */; + targetProxy = 7968953F22B5574E002EAF84 /* PBXContainerItemProxy */; + }; + 7968954F22B5574F002EAF84 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 7968954B22B5574F002EAF84 /* VBBWatch Extension */; + targetProxy = 7968954E22B5574F002EAF84 /* PBXContainerItemProxy */; + }; + 7968956B22B55762002EAF84 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 79A8680E22B54CA40002F85D /* VBBFramework-WatchOS */; + targetProxy = 7968956A22B55762002EAF84 /* PBXContainerItemProxy */; + }; 79B1496321DCB5A2001E5FEB /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = E1AEBBE61A7B701D00196F97 /* VBBNow */; @@ -646,17 +1318,34 @@ }; E157C3402099CC2400C0CD60 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = E157C3392099CC2400C0CD60 /* VBBFramework */; + target = E157C3392099CC2400C0CD60 /* VBBFramework-macOS */; targetProxy = E157C33F2099CC2400C0CD60 /* PBXContainerItemProxy */; }; E157C38C2099D5DD00C0CD60 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = E157C3392099CC2400C0CD60 /* VBBFramework */; + target = E157C3392099CC2400C0CD60 /* VBBFramework-macOS */; targetProxy = E157C38B2099D5DD00C0CD60 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ + 7968954222B5574E002EAF84 /* Interface.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 7968954322B5574E002EAF84 /* Base */, + ); + name = Interface.storyboard; + sourceTree = ""; + }; + 79B2591722F6E526005224E2 /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + 79B2591622F6E526005224E2 /* en */, + 7929056523356C1C001D6737 /* de */, + ); + name = Localizable.strings; + sourceTree = ""; + }; E17F97A01A7C0E4800623FB2 /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( @@ -676,9 +1365,198 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - E157C3432099CC2400C0CD60 /* Debug */ = { + 7968955E22B5574F002EAF84 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CB625DCF924575090FED786C /* Pods-VBBFrameworkPods-VBBWatch Extension.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication; + CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 20; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_ASSET_PATHS = "VBBWatch\\ Extension/Support\\ Files/Preview\\ Content"; + DEVELOPMENT_TEAM = YE33ZK7Z99; + ENABLE_PREVIEWS = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + INFOPLIST_FILE = "VBBWatch Extension/Support Files/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.obrhoff.VBBWatch.watchkitapp.watchkitextension; + PRODUCT_NAME = "${TARGET_NAME}"; + SDKROOT = watchos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 4; + WATCHOS_DEPLOYMENT_TARGET = 6.0; + }; + name = Debug; + }; + 7968955F22B5574F002EAF84 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 0167B0997B867BBF926B3FB2 /* Pods-VBBFrameworkPods-VBBWatch Extension.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication; + CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 20; + DEVELOPMENT_ASSET_PATHS = "VBBWatch\\ Extension/Support\\ Files/Preview\\ Content"; + DEVELOPMENT_TEAM = YE33ZK7Z99; + ENABLE_PREVIEWS = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + INFOPLIST_FILE = "VBBWatch Extension/Support Files/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.obrhoff.VBBWatch.watchkitapp.watchkitextension; + PRODUCT_NAME = "${TARGET_NAME}"; + SDKROOT = watchos; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 4; + VALIDATE_PRODUCT = YES; + WATCHOS_DEPLOYMENT_TARGET = 6.0; + }; + name = Release; + }; + 7968956222B5574F002EAF84 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 20; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = YE33ZK7Z99; + GCC_C_LANGUAGE_STANDARD = gnu11; + IBSC_MODULE = VBBWatch_Extension; + INFOPLIST_FILE = "VBBWatch App/Info.plist"; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.obrhoff.VBBWatch.watchkitapp; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = watchos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 4; + WATCHOS_DEPLOYMENT_TARGET = 6.0; + }; + name = Debug; + }; + 7968956322B5574F002EAF84 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 20; + DEVELOPMENT_TEAM = YE33ZK7Z99; + GCC_C_LANGUAGE_STANDARD = gnu11; + IBSC_MODULE = VBBWatch_Extension; + INFOPLIST_FILE = "VBBWatch App/Info.plist"; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.obrhoff.VBBWatch.watchkitapp; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = watchos; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 4; + VALIDATE_PRODUCT = YES; + WATCHOS_DEPLOYMENT_TARGET = 6.0; + }; + name = Release; + }; + 7968956622B5574F002EAF84 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 20; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = YE33ZK7Z99; + GCC_C_LANGUAGE_STANDARD = gnu11; + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.obrhoff.VBBWatch; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 7968956722B5574F002EAF84 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 20; + DEVELOPMENT_TEAM = YE33ZK7Z99; + GCC_C_LANGUAGE_STANDARD = gnu11; + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.obrhoff.VBBWatch; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 79A8682A22B54CA40002F85D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0B61806681AAA7E29F1AA122 /* Pods-VBBPods-VBBFramework.debug.xcconfig */; + baseConfigurationReference = 28E87E95EDA4B923462F4D83 /* Pods-VBBFrameworkPods-VBBFramework-WatchOS.debug.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; @@ -711,18 +1589,20 @@ INFOPLIST_FILE = VBBFramework/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MODULEMAP_FILE = "VBBFramework/Support Files/VBBFramework.modulemap"; PRODUCT_BUNDLE_IDENTIFIER = com.obrhoff.VBBFramework; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PRODUCT_NAME = VBBFramework; + SDKROOT = watchos; SKIP_INSTALL = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; + WATCHOS_DEPLOYMENT_TARGET = 6.0; }; name = Debug; }; - E157C3442099CC2400C0CD60 /* Release */ = { + 79A8682B22B54CA40002F85D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DA14C1F48BCDD3F011F7DA68 /* Pods-VBBPods-VBBFramework.release.xcconfig */; + baseConfigurationReference = 16D192B187425E69B9B2A938 /* Pods-VBBFrameworkPods-VBBFramework-WatchOS.release.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; @@ -755,12 +1635,110 @@ INFOPLIST_FILE = VBBFramework/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MODULEMAP_FILE = "VBBFramework/Support Files/VBBFramework.modulemap"; PRODUCT_BUNDLE_IDENTIFIER = com.obrhoff.VBBFramework; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PRODUCT_NAME = VBBFramework; + SDKROOT = watchos; SKIP_INSTALL = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; + WATCHOS_DEPLOYMENT_TARGET = 6.0; + }; + name = Release; + }; + E157C3432099CC2400C0CD60 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3C7FF169CB98E57F7920091C /* Pods-VBBFrameworkPods-VBBFramework-macOS.debug.xcconfig */; + buildSettings = { + APPLICATION_EXTENSION_API_ONLY = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = YE33ZK7Z99; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_VERSION = A; + GCC_C_LANGUAGE_STANDARD = gnu11; + INFOPLIST_FILE = VBBFramework/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.13; + MODULEMAP_FILE = "VBBFramework/Support Files/VBBFramework.modulemap"; + PRODUCT_BUNDLE_IDENTIFIER = com.obrhoff.VBBFramework; + PRODUCT_MODULE_NAME = VBBFramework; + PRODUCT_NAME = VBBFramework; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTS_UIKITFORMAC = NO; + TARGETED_DEVICE_FAMILY = 1; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + E157C3442099CC2400C0CD60 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 20973B06F87F036D3A4110F2 /* Pods-VBBFrameworkPods-VBBFramework-macOS.release.xcconfig */; + buildSettings = { + APPLICATION_EXTENSION_API_ONLY = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = YE33ZK7Z99; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_VERSION = A; + GCC_C_LANGUAGE_STANDARD = gnu11; + INFOPLIST_FILE = VBBFramework/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.13; + MODULEMAP_FILE = "VBBFramework/Support Files/VBBFramework.modulemap"; + PRODUCT_BUNDLE_IDENTIFIER = com.obrhoff.VBBFramework; + PRODUCT_MODULE_NAME = VBBFramework; + PRODUCT_NAME = VBBFramework; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTS_UIKITFORMAC = NO; + TARGETED_DEVICE_FAMILY = 1; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; }; name = Release; }; @@ -768,6 +1746,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; @@ -821,6 +1800,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; @@ -860,53 +1840,63 @@ MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; }; name = Release; }; E19086E81A79870300364EA2 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B0957EF3840658A2EB7B3B1A /* Pods-VBBPods-VBB.debug.xcconfig */; + baseConfigurationReference = 7AA5C8D3A5AC7FE7FFE62ACD /* Pods-VBBFrameworkPods-VBB.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = VBB/VBB.entitlements; CODE_SIGN_IDENTITY = "Mac Developer"; COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 11; + DEFINES_MODULE = NO; DEVELOPMENT_TEAM = YE33ZK7Z99; + ENABLE_HARDENED_RUNTIME = YES; INFOPLIST_FILE = "VBB//Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; - PRODUCT_BUNDLE_IDENTIFIER = "com.obrhoff.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; + MACOSX_DEPLOYMENT_TARGET = 10.13; + MARKETING_VERSION = 1.2; + PRODUCT_BUNDLE_IDENTIFIER = com.obrhoff.VBBMac; + PRODUCT_NAME = VBBNow; }; name = Debug; }; E19086E91A79870300364EA2 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B4EDD8701BB4D2A7152E0253 /* Pods-VBBPods-VBB.release.xcconfig */; + baseConfigurationReference = F0B41255AA6C835D0479A7B6 /* Pods-VBBFrameworkPods-VBB.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = VBB/VBB.entitlements; CODE_SIGN_IDENTITY = "Mac Developer"; COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 11; + DEFINES_MODULE = NO; DEVELOPMENT_TEAM = YE33ZK7Z99; + ENABLE_HARDENED_RUNTIME = YES; INFOPLIST_FILE = "VBB//Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; - PRODUCT_BUNDLE_IDENTIFIER = "com.obrhoff.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; + MACOSX_DEPLOYMENT_TARGET = 10.13; + MARKETING_VERSION = 1.2; + PRODUCT_BUNDLE_IDENTIFIER = com.obrhoff.VBBMac; + PRODUCT_NAME = VBBNow; }; name = Release; }; E1AEBBFE1A7B701D00196F97 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 16AAB8987028C777D0FBCE02 /* Pods-VBBPods-VBBNow.debug.xcconfig */; + baseConfigurationReference = 2BC934B59A728B7BEA0636B3 /* Pods-VBBFrameworkPods-VBBNow.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; CODE_SIGN_ENTITLEMENTS = "VBBNow/Supporting Files/VBBNow.entitlements"; CODE_SIGN_IDENTITY = "Mac Developer"; COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 9; DEVELOPMENT_TEAM = YE33ZK7Z99; + ENABLE_HARDENED_RUNTIME = YES; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", @@ -914,8 +1904,9 @@ HEADER_SEARCH_PATHS = "${SRCROOT}/**"; INFOPLIST_FILE = "VBBNow/Supporting Files/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @executable_path/../../../../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; - PRODUCT_BUNDLE_IDENTIFIER = com.obrhoff.VBB.Widget; + MACOSX_DEPLOYMENT_TARGET = 10.13; + MARKETING_VERSION = 1.1; + PRODUCT_BUNDLE_IDENTIFIER = com.obrhoff.VBBMac.Widget; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; }; @@ -923,19 +1914,21 @@ }; E1AEBBFF1A7B701D00196F97 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 67F15DD87868EF68F4B521BF /* Pods-VBBPods-VBBNow.release.xcconfig */; + baseConfigurationReference = 9F15AF78642C8708D51A0C35 /* Pods-VBBFrameworkPods-VBBNow.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; CODE_SIGN_ENTITLEMENTS = "VBBNow/Supporting Files/VBBNow.entitlements"; CODE_SIGN_IDENTITY = "Mac Developer"; COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 9; DEVELOPMENT_TEAM = YE33ZK7Z99; + ENABLE_HARDENED_RUNTIME = YES; HEADER_SEARCH_PATHS = "${SRCROOT}/**"; INFOPLIST_FILE = "VBBNow/Supporting Files/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @executable_path/../../../../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; - PRODUCT_BUNDLE_IDENTIFIER = com.obrhoff.VBB.Widget; + MACOSX_DEPLOYMENT_TARGET = 10.13; + MARKETING_VERSION = 1.1; + PRODUCT_BUNDLE_IDENTIFIER = com.obrhoff.VBBMac.Widget; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; }; @@ -944,7 +1937,43 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - E157C3452099CC2400C0CD60 /* Build configuration list for PBXNativeTarget "VBBFramework" */ = { + 7968955D22B5574F002EAF84 /* Build configuration list for PBXNativeTarget "VBBWatch Extension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7968955E22B5574F002EAF84 /* Debug */, + 7968955F22B5574F002EAF84 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 7968956122B5574F002EAF84 /* Build configuration list for PBXNativeTarget "VBBWatch App" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7968956222B5574F002EAF84 /* Debug */, + 7968956322B5574F002EAF84 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 7968956522B5574F002EAF84 /* Build configuration list for PBXNativeTarget "VBBWatch" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7968956622B5574F002EAF84 /* Debug */, + 7968956722B5574F002EAF84 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 79A8682922B54CA40002F85D /* Build configuration list for PBXNativeTarget "VBBFramework-WatchOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 79A8682A22B54CA40002F85D /* Debug */, + 79A8682B22B54CA40002F85D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E157C3452099CC2400C0CD60 /* Build configuration list for PBXNativeTarget "VBBFramework-macOS" */ = { isa = XCConfigurationList; buildConfigurations = ( E157C3432099CC2400C0CD60 /* Debug */, diff --git a/VBB.xcodeproj/xcshareddata/xcschemes/VBB.xcscheme b/VBB.xcodeproj/xcshareddata/xcschemes/VBB.xcscheme new file mode 100644 index 0000000..39e1ad7 --- /dev/null +++ b/VBB.xcodeproj/xcshareddata/xcschemes/VBB.xcscheme @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/VBB.xcodeproj/xcshareddata/xcschemes/VBBFramework-WatchOS.xcscheme b/VBB.xcodeproj/xcshareddata/xcschemes/VBBFramework-WatchOS.xcscheme new file mode 100644 index 0000000..b319121 --- /dev/null +++ b/VBB.xcodeproj/xcshareddata/xcschemes/VBBFramework-WatchOS.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/VBB.xcodeproj/xcshareddata/xcschemes/VBBFramework-macOS.xcscheme b/VBB.xcodeproj/xcshareddata/xcschemes/VBBFramework-macOS.xcscheme new file mode 100644 index 0000000..805501d --- /dev/null +++ b/VBB.xcodeproj/xcshareddata/xcschemes/VBBFramework-macOS.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/VBB.xcodeproj/xcshareddata/xcschemes/VBBNow (macOS).xcscheme b/VBB.xcodeproj/xcshareddata/xcschemes/VBBNow (macOS).xcscheme new file mode 100644 index 0000000..25dfa6c --- /dev/null +++ b/VBB.xcodeproj/xcshareddata/xcschemes/VBBNow (macOS).xcscheme @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/VBB.xcodeproj/xcshareddata/xcschemes/VBBWatch App.xcscheme b/VBB.xcodeproj/xcshareddata/xcschemes/VBBWatch App.xcscheme new file mode 100644 index 0000000..27d9785 --- /dev/null +++ b/VBB.xcodeproj/xcshareddata/xcschemes/VBBWatch App.xcscheme @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/VBB/Icons.xcassets/AppIcon.appiconset/Contents.json b/VBB/Icons.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..5177ecb --- /dev/null +++ b/VBB/Icons.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images": [ + { + "size": "16x16", + "idiom": "mac", + "filename": "Icon_16x16.png", + "scale": "1x" + }, + { + "size": "16x16", + "idiom": "mac", + "filename": "Icon_16x16@2x.png", + "scale": "2x" + }, + { + "size": "32x32", + "idiom": "mac", + "filename": "Icon_32x32.png", + "scale": "1x" + }, + { + "size": "32x32", + "idiom": "mac", + "filename": "Icon_32x32@2x.png", + "scale": "2x" + }, + { + "size": "128x128", + "idiom": "mac", + "filename": "Icon_128x128.png", + "scale": "1x" + }, + { + "size": "128x128", + "idiom": "mac", + "filename": "Icon_128x128@2x.png", + "scale": "2x" + }, + { + "size": "256x256", + "idiom": "mac", + "filename": "Icon_256x256.png", + "scale": "1x" + }, + { + "size": "256x256", + "idiom": "mac", + "filename": "Icon_256x256@2x.png", + "scale": "2x" + }, + { + "size": "512x512", + "idiom": "mac", + "filename": "Icon_512x512.png", + "scale": "1x" + }, + { + "size": "512x512", + "idiom": "mac", + "filename": "Icon_512x512@2x.png", + "scale": "2x" + } + ], + "info": { + "version": 1, + "author": "xcode" + } +} \ No newline at end of file diff --git a/VBBNow/Icons.xcassets/AppIcon.appiconset/Icon_128x128.png b/VBB/Icons.xcassets/AppIcon.appiconset/Icon_128x128.png similarity index 100% rename from VBBNow/Icons.xcassets/AppIcon.appiconset/Icon_128x128.png rename to VBB/Icons.xcassets/AppIcon.appiconset/Icon_128x128.png diff --git a/VBBNow/Icons.xcassets/AppIcon.appiconset/Icon_128x128@2x.png b/VBB/Icons.xcassets/AppIcon.appiconset/Icon_128x128@2x.png similarity index 100% rename from VBBNow/Icons.xcassets/AppIcon.appiconset/Icon_128x128@2x.png rename to VBB/Icons.xcassets/AppIcon.appiconset/Icon_128x128@2x.png diff --git a/VBBNow/Icons.xcassets/AppIcon.appiconset/Icon_16x16.png b/VBB/Icons.xcassets/AppIcon.appiconset/Icon_16x16.png similarity index 100% rename from VBBNow/Icons.xcassets/AppIcon.appiconset/Icon_16x16.png rename to VBB/Icons.xcassets/AppIcon.appiconset/Icon_16x16.png diff --git a/VBBNow/Icons.xcassets/AppIcon.appiconset/Icon_16x16@2x.png b/VBB/Icons.xcassets/AppIcon.appiconset/Icon_16x16@2x.png similarity index 100% rename from VBBNow/Icons.xcassets/AppIcon.appiconset/Icon_16x16@2x.png rename to VBB/Icons.xcassets/AppIcon.appiconset/Icon_16x16@2x.png diff --git a/VBBNow/Icons.xcassets/AppIcon.appiconset/Icon_256x256.png b/VBB/Icons.xcassets/AppIcon.appiconset/Icon_256x256.png similarity index 100% rename from VBBNow/Icons.xcassets/AppIcon.appiconset/Icon_256x256.png rename to VBB/Icons.xcassets/AppIcon.appiconset/Icon_256x256.png diff --git a/VBBNow/Icons.xcassets/AppIcon.appiconset/Icon_256x256@2x.png b/VBB/Icons.xcassets/AppIcon.appiconset/Icon_256x256@2x.png similarity index 100% rename from VBBNow/Icons.xcassets/AppIcon.appiconset/Icon_256x256@2x.png rename to VBB/Icons.xcassets/AppIcon.appiconset/Icon_256x256@2x.png diff --git a/VBBNow/Icons.xcassets/AppIcon.appiconset/Icon_32x32.png b/VBB/Icons.xcassets/AppIcon.appiconset/Icon_32x32.png similarity index 100% rename from VBBNow/Icons.xcassets/AppIcon.appiconset/Icon_32x32.png rename to VBB/Icons.xcassets/AppIcon.appiconset/Icon_32x32.png diff --git a/VBBNow/Icons.xcassets/AppIcon.appiconset/Icon_32x32@2x.png b/VBB/Icons.xcassets/AppIcon.appiconset/Icon_32x32@2x.png similarity index 100% rename from VBBNow/Icons.xcassets/AppIcon.appiconset/Icon_32x32@2x.png rename to VBB/Icons.xcassets/AppIcon.appiconset/Icon_32x32@2x.png diff --git a/VBBNow/Icons.xcassets/AppIcon.appiconset/Icon_512x512.png b/VBB/Icons.xcassets/AppIcon.appiconset/Icon_512x512.png similarity index 100% rename from VBBNow/Icons.xcassets/AppIcon.appiconset/Icon_512x512.png rename to VBB/Icons.xcassets/AppIcon.appiconset/Icon_512x512.png diff --git a/VBBNow/Icons.xcassets/AppIcon.appiconset/Icon_512x512@2x.png b/VBB/Icons.xcassets/AppIcon.appiconset/Icon_512x512@2x.png similarity index 100% rename from VBBNow/Icons.xcassets/AppIcon.appiconset/Icon_512x512@2x.png rename to VBB/Icons.xcassets/AppIcon.appiconset/Icon_512x512@2x.png diff --git a/VBB/Info.plist b/VBB/Info.plist index c98cde8..ad5f6c4 100644 --- a/VBB/Info.plist +++ b/VBB/Info.plist @@ -15,11 +15,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.0.4 + $(MARKETING_VERSION) CFBundleSignature ???? CFBundleVersion - 7 + $(CURRENT_PROJECT_VERSION) LSApplicationCategoryType public.app-category.travel LSMinimumSystemVersion diff --git a/VBBFramework/Info.plist b/VBBFramework/Info.plist index f476d83..6ab1586 100644 --- a/VBBFramework/Info.plist +++ b/VBBFramework/Info.plist @@ -1,26 +1,26 @@ - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - NSHumanReadableCopyright - Copyright © 2018 Dennis Oberhoff. All rights reserved. - NSPrincipalClass - - + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSHumanReadableCopyright + Copyright © 2018 Dennis Oberhoff. All rights reserved. + NSPrincipalClass + + diff --git a/VBBFramework/Manager/VBBNetworkManager.h b/VBBFramework/Manager/VBBNetworkManager.h index 1a962ca..80d8cdb 100644 --- a/VBBFramework/Manager/VBBNetworkManager.h +++ b/VBBFramework/Manager/VBBNetworkManager.h @@ -7,10 +7,24 @@ // @import CoreLocation; +@import Realm; + #import "VBBLocation.h" +#import "VBBStation.h" + + +typedef NS_ENUM (NSInteger, VBBNetworkStatus) { + VBBNetworkStatusFinished = 0, + VBBNetworkStatusGeocoding = 1, + VBBNetworkStatusLoading = 2, + VBBNetworkStatusLoadingDetails = 3, + VBBNetworkStatusFailed = 4, +}; @interface VBBNetworkManager : NSObject --(void)fetchNearedStations:(CLLocation*)location andCompletionHandler:(void (^)(NSArray *stations, VBBLocation *location))completionHandler; +@property(nonatomic, readonly, assign) VBBNetworkStatus status; +- (void)fetchNearedStations:(CLLocation * _Nonnull)location + andCompletionHandler:(void (^ _Nonnull)(NSArray * _Nullable stations, VBBLocation * _Nullable location))completionHandler; @end diff --git a/VBBFramework/Manager/VBBNetworkManager.m b/VBBFramework/Manager/VBBNetworkManager.m index a760c83..ba982e7 100644 --- a/VBBFramework/Manager/VBBNetworkManager.m +++ b/VBBFramework/Manager/VBBNetworkManager.m @@ -9,120 +9,157 @@ @import CoreLocation; @import Contacts; @import MapKit; +@import Contacts; #import "VBBNetworkManager.h" #import "VBBStationParser.h" #import "VBBDepatureParser.h" -@interface VBBNetworkManager () +@interface VBBNetworkManager () + +@property(class, nonatomic, readonly) CNPostalAddressFormatter *addressFormatter; -@property (nonatomic, readwrite, strong) NSURLSession *session; +@property(nonatomic, readwrite, strong) NSURLSession *session; +@property(nonatomic, readwrite, strong) CLGeocoder *geocoder; +@property(nonatomic, readwrite, assign) VBBNetworkStatus status; @end @implementation VBBNetworkManager --(instancetype)init { +- (instancetype)init { self = [super init]; if (self) { - self.session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration ephemeralSessionConfiguration]]; - self.session.delegateQueue.underlyingQueue = [VBBPersistanceManager manager].operationQueue.underlyingQueue; + self.session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] + delegate:self + delegateQueue:[[self class] operationQueue]]; } return self; } --(void)fetchNearedStations:(CLLocation*)location andCompletionHandler:(void (^)(NSArray *stations, VBBLocation *location))completionHandler{ - - [[VBBPersistanceManager manager] trim]; +- (void)fetchNearedStations:(CLLocation * _Nonnull)location + andCompletionHandler:(void (^ _Nonnull)(NSArray * _Nullable stations, VBBLocation * _Nullable location))completionHandler { - NSNumber *latitude = @(location.coordinate.latitude * 1000000); - NSNumber *longitude = @(location.coordinate.longitude * 1000000); - - NSMutableArray *query = [NSMutableArray array]; - [query addObject:[NSURLQueryItem queryItemWithName:@"performLocating" value:@"2"]]; - [query addObject:[NSURLQueryItem queryItemWithName:@"L" value:@"vs_java"]]; - [query addObject:[NSURLQueryItem queryItemWithName:@"look_x" value:longitude.stringValue]]; - [query addObject:[NSURLQueryItem queryItemWithName:@"look_y" value:latitude.stringValue]]; - [query addObject:[NSURLQueryItem queryItemWithName:@"look_maxdist" value:@"25000"]]; - [query addObject:[NSURLQueryItem queryItemWithName:@"look_maxno" value:@"10"]]; - - NSURLComponents *components = [NSURLComponents new]; - components.scheme = @"http"; - components.host = @"fahrinfo.vbb.de"; - components.path = @"/bin/query.exe/dol"; - components.queryItems = query.copy; + __weak typeof(self) weakSelf = self; - void (^ requestBlock)(VBBLocation *stationLocation) = ^void (VBBLocation *stationLocation) { + void (^ finalizeBlock)(NSArray *stations, VBBLocation *location) = ^void(NSArray *stations, VBBLocation * location) { + dispatch_async(dispatch_get_main_queue(), ^{ + weakSelf.status = VBBNetworkStatusFinished; + if (completionHandler) completionHandler(stations, location); + }); + }; + + void (^ stationsBlock)(VBBLocation *stationLocation) = ^void(VBBLocation *stationLocation) { + NSNumber *latitude = @(location.coordinate.latitude * 1000000); + NSNumber *longitude = @(location.coordinate.longitude * 1000000); + + NSMutableArray *query = [NSMutableArray array]; + [query addObject:[NSURLQueryItem queryItemWithName:@"performLocating" value:@"2"]]; + [query addObject:[NSURLQueryItem queryItemWithName:@"L" value:@"vs_java"]]; + [query addObject:[NSURLQueryItem queryItemWithName:@"look_x" value:longitude.stringValue]]; + [query addObject:[NSURLQueryItem queryItemWithName:@"look_y" value:latitude.stringValue]]; + [query addObject:[NSURLQueryItem queryItemWithName:@"look_maxdist" value:@"1000"]]; + [query addObject:[NSURLQueryItem queryItemWithName:@"look_maxno" value:@"10"]]; + + NSURLComponents *components = [NSURLComponents new]; + components.scheme = @"http"; + components.host = @"fahrinfo.vbb.de"; + components.path = @"/bin/query.exe/dol"; + components.queryItems = query.copy; + NSURLRequest *request = [NSURLRequest requestWithURL:components.URL]; - NSURLSessionDataTask *task = [self.session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError * error) { + + NSURLSessionDataTask *task = [self.session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { if (error) { NSLog(@"%@: %@", NSStringFromClass([self class]), error.localizedDescription); - if (completionHandler) completionHandler(nil, stationLocation); + weakSelf.status = VBBNetworkStatusFailed; + finalizeBlock(nil, nil); return; } NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data]; VBBStationParser *stationParser = [VBBStationParser new]; parser.delegate = stationParser; [parser parse]; + + weakSelf.status = VBBNetworkStatusFinished; + + if (stationParser.stations.count == 0) { + finalizeBlock(nil, stationLocation); + return; + } + [self fetchDeparturesFromStations:stationParser.stations andCompletionHandler:^(NSArray *stations) { - if (completionHandler) completionHandler(stations, stationLocation); + finalizeBlock(stations, stationLocation); }]; }]; + + self.status = VBBNetworkStatusLoading; [task resume]; }; - + VBBLocation *storedLocation = [VBBPersistanceManager manager].storedLocation; + if (storedLocation && !location) { - requestBlock(storedLocation); + stationsBlock(storedLocation); + } else if (location && storedLocation && [storedLocation.location distanceFromLocation:location] < 15) { + stationsBlock(storedLocation); } else if (location) { - CLGeocoder *geocoder = [CLGeocoder new]; - [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) { + self.status = VBBNetworkStatusGeocoding; + self.geocoder = [CLGeocoder new]; + [self.geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) { CLPlacemark *placemark = placemarks.firstObject; VBBLocation *stationLocation = [VBBLocation new]; stationLocation.location = location; - stationLocation.address = [placemark.addressDictionary[@"FormattedAddressLines"] componentsJoinedByString:@", "]; stationLocation.date = [NSDate new]; - [[VBBPersistanceManager manager] storeLocation:stationLocation]; - requestBlock(stationLocation); + stationLocation.address = [[VBBNetworkManager addressFormatter] stringFromPostalAddress:placemark.postalAddress]; + [VBBPersistanceManager manager].storedLocation = stationLocation; + weakSelf.status = VBBNetworkStatusFinished; + stationsBlock(stationLocation); }]; } else { - if (completionHandler) completionHandler(nil, nil); + finalizeBlock(nil, nil); } } --(void)fetchDeparturesFromStations:(NSArray*)stations andCompletionHandler:(void (^)(NSArray *stations))completionHandler { - +- (void)fetchDeparturesFromStations:(NSArray *)stations andCompletionHandler:(void (^)(NSArray *stations))completionHandler { + __block NSUInteger count = stations.count; + __weak typeof(self) weakSelf = self; + void (^responseBlock)(VBBStation *station) = ^void(VBBStation *station) { if (--count) return; dispatch_async(dispatch_get_main_queue(), ^{ + weakSelf.status = VBBNetworkStatusFinished; if (completionHandler) completionHandler(stations); }); }; - for (VBBStation *station in stations) [self fetchDepature:station andCompletionHandler:responseBlock]; + self.status = VBBNetworkStatusLoadingDetails; + for (VBBStation *station in stations) { + [self fetchDepature:station andCompletionHandler:responseBlock]; + } } --(void)fetchDepature:(VBBStation *)station andCompletionHandler:(void (^)(VBBStation *station))completionHandler{ - - NSString *stationId = station.stationId.copy; - +- (void)fetchDepature:(VBBStation *)station andCompletionHandler:(void (^)(VBBStation *station))completionHandler { + + NSString * stationId = station.stationId.copy; + NSMutableArray *query = [NSMutableArray array]; [query addObject:[NSURLQueryItem queryItemWithName:@"boardType" value:@"yes"]]; [query addObject:[NSURLQueryItem queryItemWithName:@"disableEquivs" value:@"yes"]]; - [query addObject:[NSURLQueryItem queryItemWithName:@"maxJourneys" value:@"50"]]; + [query addObject:[NSURLQueryItem queryItemWithName:@"maxJourneys" value:@"30"]]; [query addObject:[NSURLQueryItem queryItemWithName:@"L" value:@"vs_java3"]]; [query addObject:[NSURLQueryItem queryItemWithName:@"start" value:@"yes"]]; [query addObject:[NSURLQueryItem queryItemWithName:@"input" value:station.stationId]]; - + NSURLComponents *components = [NSURLComponents new]; components.scheme = @"http"; components.host = @"fahrinfo.vbb.de"; components.path = @"/bin/stboard.exe/dn"; components.queryItems = query.copy; NSURLRequest *request = [NSURLRequest requestWithURL:components.URL]; - - NSURLSessionDataTask *task = [self.session dataTaskWithRequest:request completionHandler:^(NSData * data, NSURLResponse * response, NSError * error) { + + NSURLSessionDataTask *task = [self.session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { if (error) { NSLog(@"%@: %@", NSStringFromClass([self class]), error.localizedDescription); if (completionHandler) completionHandler(nil); @@ -132,9 +169,33 @@ -(void)fetchDepature:(VBBStation *)station andCompletionHandler:(void (^)(VBBSta VBBDepatureParser *departureParser = [[VBBDepatureParser alloc] initWithStationId:stationId]; parser.delegate = departureParser; [parser parse]; + if (completionHandler) completionHandler(station); }]; [task resume]; } ++(CNPostalAddressFormatter *)addressFormatter { + static dispatch_once_t pred; + static CNPostalAddressFormatter *formatter; + dispatch_once(&pred, ^{ + formatter = [CNPostalAddressFormatter new]; + }); + return formatter; +} + ++ (NSOperationQueue *)operationQueue { + static dispatch_once_t onceToken; + static NSOperationQueue *operationQueue; + + dispatch_once(&onceToken, ^{ + dispatch_queue_t queue = dispatch_queue_create("com.obrhoff.vbbnow", DISPATCH_QUEUE_SERIAL); + operationQueue = [NSOperationQueue new]; + operationQueue.maxConcurrentOperationCount = 1; + operationQueue.qualityOfService = NSQualityOfServiceDefault; + operationQueue.underlyingQueue = queue; + }); + return operationQueue; +} + @end diff --git a/VBBFramework/Manager/VBBPersistanceManager.h b/VBBFramework/Manager/VBBPersistanceManager.h index 3be056c..43941db 100644 --- a/VBBFramework/Manager/VBBPersistanceManager.h +++ b/VBBFramework/Manager/VBBPersistanceManager.h @@ -14,12 +14,12 @@ @interface VBBPersistanceManager : NSObject -@property (nonatomic, readonly) NSOperationQueue *operationQueue; +@property(class, readonly, strong, nonnull) VBBPersistanceManager *manager; +@property(class, readonly, strong, nonnull) RLMRealm *realm; --(void)trim; --(VBBLocation*)storedLocation; --(void)storeLocation:(VBBLocation*)location; -+(VBBPersistanceManager *)manager; -+(RLMRealm*)realm; +@property(nonatomic, readonly, nonnull) NSOperationQueue *operationQueue; +@property(nonatomic, nullable) VBBLocation *storedLocation; + ++ (void)trim; @end diff --git a/VBBFramework/Manager/VBBPersistanceManager.m b/VBBFramework/Manager/VBBPersistanceManager.m index 53807fb..ed8df6d 100644 --- a/VBBFramework/Manager/VBBPersistanceManager.m +++ b/VBBFramework/Manager/VBBPersistanceManager.m @@ -9,29 +9,28 @@ #import "VBBPersistanceManager.h" #import "VBBDepature.h" - @interface VBBPersistanceManager () -@property (nonatomic, readonly) dispatch_queue_t backgroundQueue; +@property(nonatomic, readonly) dispatch_queue_t backgroundQueue; @end @implementation VBBPersistanceManager -- (void)trim { ++ (void)trim { RLMRealm *realm = [[self class] realm]; - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"arrivalDate < %@", [NSDate date]]; + NSDate *trimDate = [[NSDate date] dateByAddingTimeInterval:-60 * 60]; + NSPredicate *predicate = [NSPredicate predicateWithFormat:@"scheduledDate < %@", trimDate] ; RLMResults *oldDates = [VBBDepature objectsInRealm:realm withPredicate:predicate]; - + [realm beginWriteTransaction]; [realm deleteObjects:oldDates]; [realm commitWriteTransaction]; } -- (void)storeLocation:(VBBLocation *)location { +- (void)setStoredLocation:(VBBLocation *)storedLocation { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - NSData *data = [NSKeyedArchiver archivedDataWithRootObject:location]; - + NSData *data = [NSKeyedArchiver archivedDataWithRootObject:storedLocation]; [defaults setObject:data forKey:@"savedLocation"]; [defaults synchronize]; } @@ -39,7 +38,15 @@ - (void)storeLocation:(VBBLocation *)location { - (VBBLocation *)storedLocation { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSData *data = [defaults dataForKey:@"savedLocation"]; - VBBLocation *location = [NSKeyedUnarchiver unarchiveObjectWithData:data]; + NSError *error; + + NSSet *classes = [NSSet setWithArray:@[[VBBLocation class], [CLLocation class], [NSMutableString class], [NSDate class]]]; + + VBBLocation *location = [NSKeyedUnarchiver unarchivedObjectOfClasses:classes fromData:data error:&error]; + + if (error) { + + } return location; } @@ -47,21 +54,22 @@ - (VBBLocation *)storedLocation { + (RLMRealm *)realm { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ - NSString *documentPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject; + NSString * documentPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject; documentPath = [documentPath stringByAppendingPathComponent:[NSBundle mainBundle].bundleIdentifier]; - NSString *realmFileName = [documentPath stringByAppendingPathComponent:@"stations.realm"]; - + NSString * realmFileName = [documentPath stringByAppendingPathComponent:@"stations.realm"]; + NSFileManager *fileManager = [NSFileManager defaultManager]; - + BOOL isDirectory; if (![fileManager fileExistsAtPath:documentPath isDirectory:&isDirectory]) { [fileManager createDirectoryAtPath:documentPath withIntermediateDirectories:YES attributes:nil error:nil]; } - + NSURL *url = [NSURL URLWithString:realmFileName]; RLMRealmConfiguration *config = [RLMRealmConfiguration defaultConfiguration]; config.fileURL = url; - config.shouldCompactOnLaunch = ^BOOL(NSUInteger totalBytes, NSUInteger usedBytes){ + config.deleteRealmIfMigrationNeeded = YES; + config.shouldCompactOnLaunch = ^BOOL(NSUInteger totalBytes, NSUInteger usedBytes) { NSUInteger oneHundredMB = 10 * 1024 * 1024; BOOL needsCompact = (totalBytes > oneHundredMB) && (usedBytes / totalBytes) < 0.5; return needsCompact; @@ -71,32 +79,10 @@ + (RLMRealm *)realm { return [RLMRealm defaultRealm]; } -- (NSOperationQueue *)operationQueue { - static dispatch_once_t onceToken; - static NSOperationQueue *operationQueue; - - dispatch_once(&onceToken, ^{ - operationQueue = [NSOperationQueue new]; - operationQueue.maxConcurrentOperationCount = 1; - operationQueue.qualityOfService = NSQualityOfServiceBackground; - operationQueue.underlyingQueue = self.backgroundQueue; - }); - return operationQueue; -} - -- (dispatch_queue_t)backgroundQueue { - static dispatch_once_t queueCreationGuard; - static dispatch_queue_t backgroundQueue; - dispatch_once(&queueCreationGuard, ^{ - backgroundQueue = dispatch_queue_create("com.obrhoff.background", DISPATCH_QUEUE_CONCURRENT); - }); - return backgroundQueue; -} - + (VBBPersistanceManager *)manager { static dispatch_once_t pred; static VBBPersistanceManager *manager; - + dispatch_once(&pred, ^{ manager = [self new]; }); diff --git a/VBBFramework/Miscellaneous/NSBundle+VBB.h b/VBBFramework/Miscellaneous/NSBundle+VBB.h new file mode 100644 index 0000000..27d1da8 --- /dev/null +++ b/VBBFramework/Miscellaneous/NSBundle+VBB.h @@ -0,0 +1,15 @@ +// +// NSBundle.h +// VBB +// +// Created by Dennis Oberhoff on 02.08.19. +// Copyright © 2019 Dennis Oberhoff. All rights reserved. +// + +@import Foundation; + +@interface NSBundle (VBB) + +@property (class, nonnull, readonly) NSBundle* frameworkBundle; + +@end diff --git a/VBBFramework/Miscellaneous/NSBundle+VBB.m b/VBBFramework/Miscellaneous/NSBundle+VBB.m new file mode 100644 index 0000000..75de6eb --- /dev/null +++ b/VBBFramework/Miscellaneous/NSBundle+VBB.m @@ -0,0 +1,23 @@ +// +// NSBundle.m +// VBB +// +// Created by Dennis Oberhoff on 02.08.19. +// Copyright © 2019 Dennis Oberhoff. All rights reserved. +// + +#import "NSBundle+VBB.h" + +@interface BundleClass : NSObject +@end + +@implementation BundleClass +@end + +@implementation NSBundle (VBB) + ++(NSBundle* _Nonnull)frameworkBundle { + return [NSBundle bundleForClass:[BundleClass class]]; +} + +@end diff --git a/VBBFramework/Miscellaneous/NSDateComponentsFormatter+VBB.h b/VBBFramework/Miscellaneous/NSDateComponentsFormatter+VBB.h new file mode 100644 index 0000000..bb2b578 --- /dev/null +++ b/VBBFramework/Miscellaneous/NSDateComponentsFormatter+VBB.h @@ -0,0 +1,16 @@ +// +// Bla.h +// VBBFramework +// +// Created by Dennis Oberhoff on 16.06.19. +// Copyright © 2019 Dennis Oberhoff. All rights reserved. +// + +#import + +@interface NSDateComponentsFormatter (BB) + +@property(class, readonly, nonnull) NSDateComponentsFormatter *timeFormatter; + +@end + diff --git a/VBBFramework/Miscellaneous/NSDateComponentsFormatter+VBB.m b/VBBFramework/Miscellaneous/NSDateComponentsFormatter+VBB.m new file mode 100644 index 0000000..4bd4d31 --- /dev/null +++ b/VBBFramework/Miscellaneous/NSDateComponentsFormatter+VBB.m @@ -0,0 +1,28 @@ +// +// Bla.m +// VBBFramework +// +// Created by Dennis Oberhoff on 16.06.19. +// Copyright © 2019 Dennis Oberhoff. All rights reserved. +// + +#import "NSDateComponentsFormatter+VBB.h" + +@implementation NSDateComponentsFormatter (BB) + ++(NSDateComponentsFormatter *)timeFormatter { + static dispatch_once_t onceToken; + static NSDateComponentsFormatter *timeFormatter; + dispatch_once(&onceToken, ^{ + timeFormatter = [NSDateComponentsFormatter new]; + timeFormatter.allowedUnits = NSCalendarUnitMinute | NSCalendarUnitHour | NSCalendarUnitDay; + timeFormatter.unitsStyle = NSDateComponentsFormatterUnitsStyleShort; + timeFormatter.includesApproximationPhrase = NO; + timeFormatter.includesTimeRemainingPhrase = NO; + timeFormatter.collapsesLargestUnit = YES; + timeFormatter.maximumUnitCount = 1; + }); + return timeFormatter; +} + +@end diff --git a/VBBFramework/Miscellaneous/NSString+VBB.h b/VBBFramework/Miscellaneous/NSString+VBB.h new file mode 100644 index 0000000..f04a0ee --- /dev/null +++ b/VBBFramework/Miscellaneous/NSString+VBB.h @@ -0,0 +1,15 @@ +// +// NSString+VBB.h +// VBBFramework +// +// Created by Dennis Oberhoff on 19.06.19. +// Copyright © 2019 Dennis Oberhoff. All rights reserved. +// + +#import + +@interface NSString (VBB) + +- (NSString *)sha1; + +@end diff --git a/VBBFramework/Miscellaneous/NSString+VBB.m b/VBBFramework/Miscellaneous/NSString+VBB.m new file mode 100644 index 0000000..29d5698 --- /dev/null +++ b/VBBFramework/Miscellaneous/NSString+VBB.m @@ -0,0 +1,28 @@ +// +// NSString+VBB.m +// VBBFramework +// +// Created by Dennis Oberhoff on 19.06.19. +// Copyright © 2019 Dennis Oberhoff. All rights reserved. +// + +#import "NSString+VBB.h" +#import + +@implementation NSString (VBB) + +- (NSString *)sha1 { + NSData *data = [self dataUsingEncoding:NSUTF8StringEncoding]; + uint8_t digest[CC_SHA1_DIGEST_LENGTH]; + CC_SHA1(data.bytes, (CC_LONG)data.length, digest); + + NSMutableString *output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2]; + + for (int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++) + { + [output appendFormat:@"%02x", digest[i]]; + } + + return output; +} +@end diff --git a/VBBFramework/Miscellaneous/Realm-VBB.h b/VBBFramework/Miscellaneous/Realm-VBB.h new file mode 100644 index 0000000..3027d4a --- /dev/null +++ b/VBBFramework/Miscellaneous/Realm-VBB.h @@ -0,0 +1,21 @@ +// +// BB.h +// BicycleFramework-WatchOS +// +// Created by Dennis Oberhoff on 23.07.19. +// Copyright © 2019 Dennis Oberhoff. All rights reserved. +// + +@import Realm; + +@interface RLMResults (VBB) + +-(NSArray* _Nonnull)mapItems; + +@end + +@interface RLMArray (VBB) + +-(NSArray* _Nonnull)mapItems; + +@end diff --git a/VBBFramework/Miscellaneous/Realm-VBB.m b/VBBFramework/Miscellaneous/Realm-VBB.m new file mode 100644 index 0000000..3ed1bcf --- /dev/null +++ b/VBBFramework/Miscellaneous/Realm-VBB.m @@ -0,0 +1,39 @@ +// +// BB.m +// BicycleFramework-WatchOS +// +// Created by Dennis Oberhoff on 23.07.19. +// Copyright © 2019 Dennis Oberhoff. All rights reserved. +// + +@import Foundation; + +#import "Realm-VBB.h" + +@implementation RLMResults (VBB) + +-(NSArray* _Nonnull)mapItems { + NSMutableArray *array = [NSMutableArray new]; + for (RLMObject *item in self) { + [array addObject:item]; + } + + return array.copy; +} + +@end + +@implementation RLMArray (VBB) + +-(NSArray* _Nonnull)mapItems { + NSMutableArray *array = [NSMutableArray new]; + for (RLMObject *item in self) { + [array addObject:item]; + } + + return array.copy; +} + +@end + + diff --git a/VBBFramework/Model/VBBDepature.h b/VBBFramework/Model/VBBDepature.h index ccee0c0..84a1ba8 100644 --- a/VBBFramework/Model/VBBDepature.h +++ b/VBBFramework/Model/VBBDepature.h @@ -6,14 +6,20 @@ // Copyright (c) 2015 Dennis Oberhoff. All rights reserved. // -#import +@import Realm; + #import "VBBLine.h" @interface VBBDepature : RLMObject -@property (nonatomic) NSDate *arrivalDate; -@property (readonly) RLMLinkingObjects *station; -@property (nonatomic) VBBLine *line; +@property(nonatomic, nullable) VBBLine *line; +@property(nonatomic, nonnull) NSString *departureId; +@property(nonatomic, nonnull) NSDate *scheduledDate; +@property(nonatomic, assign) NSTimeInterval delay; +@property(nonatomic, readonly, nonnull) NSDate *arrivalDate; +@property(nonatomic, readonly, assign) BOOL delayed; + +@property(readonly, nonnull) RLMLinkingObjects *station; @end diff --git a/VBBFramework/Model/VBBDepature.m b/VBBFramework/Model/VBBDepature.m index 1e9c837..32d4f63 100644 --- a/VBBFramework/Model/VBBDepature.m +++ b/VBBFramework/Model/VBBDepature.m @@ -11,9 +11,21 @@ @implementation VBBDepature -+(NSDictionary *)linkingObjectsProperties { - return [NSDictionary dictionaryWithObject:[RLMPropertyDescriptor descriptorWithClass:VBBStation.class propertyName:NSStringFromSelector(@selector(depatures))] forKey:NSStringFromSelector(@selector(station))]; +-(BOOL)delayed { + return self.delay > 0; } +-(NSDate *)arrivalDate { + return [self.scheduledDate dateByAddingTimeInterval:self.delay]; +} + ++ (NSDictionary *)linkingObjectsProperties { + return @{NSStringFromSelector(@selector(station)): [RLMPropertyDescriptor descriptorWithClass:VBBStation.class + propertyName:NSStringFromSelector(@selector(depatures))] }; +} + ++ (NSString *)primaryKey { + return NSStringFromSelector(@selector(departureId)); +} @end diff --git a/VBBFramework/Model/VBBLine.h b/VBBFramework/Model/VBBLine.h index 7c1b0fa..2b4ef2c 100644 --- a/VBBFramework/Model/VBBLine.h +++ b/VBBFramework/Model/VBBLine.h @@ -8,12 +8,25 @@ #import +typedef NS_ENUM (NSInteger, VBBLineType) { + VBBLineTypeSBahn = 1, + VBBLineTypeUBahn = 2, + VBBLineTypeTram = 4, + VBBLineTypeBus = 8, + VBBLineTypeMetro = 12, + VBBLineTypeBahn = 32, +}; + @interface VBBLine : RLMObject -@property (nonatomic) NSString *lineId; -@property (nonatomic) NSString *lineEnd; -@property (nonatomic) NSString *lineName; -@property (nonatomic) NSInteger departureType; +@property(readonly, nonnull) RLMLinkingObjects *departures; +@property(nonatomic, nonnull) NSString *lineId; +@property(nonatomic, nonnull) NSString *lineEnd; +@property(nonatomic, nonnull) NSString *lineName; +@property(nonatomic) NSInteger departureType; + +-(VBBLineType)lineType; ++(NSString* _Nonnull)assetNameForType:(VBBLineType)lineType; @end diff --git a/VBBFramework/Model/VBBLine.m b/VBBFramework/Model/VBBLine.m index d1bd7c9..e83f111 100644 --- a/VBBFramework/Model/VBBLine.m +++ b/VBBFramework/Model/VBBLine.m @@ -7,16 +7,48 @@ // #import "VBBLine.h" +#import "VBBDepature.h" @implementation VBBLine --(BOOL)isEqual:(VBBLine*)object { +- (BOOL)isEqual:(VBBLine *)object { return ([object isKindOfClass:[self class]]) ? ([self.lineEnd isEqualToString:object.lineEnd] && - [self.lineName isEqualToString:object.lineName]) : [super isEqual:object]; + [self.lineName isEqualToString:object.lineName]) : [super isEqual:object]; } -+(NSString *)primaryKey { +-(VBBLineType)lineType { + VBBLineType lineType = (VBBLineType) self.departureType; + NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", @"^Bus M\\d+"]; + if ([predicate evaluateWithObject:self.lineName]) { + return VBBLineTypeMetro; + } + return lineType; +} + ++(NSString*)assetNameForType:(VBBLineType)lineType; { + switch (lineType) { + case VBBLineTypeSBahn: + return @"SBahn"; + case VBBLineTypeUBahn: + return @"UBahn"; + case VBBLineTypeTram: + return @"Tram"; + case VBBLineTypeBus: + return @"Bus"; + case VBBLineTypeMetro: + return @"Metro"; + case VBBLineTypeBahn: + return @"Train"; + } +} + ++ (NSString *)primaryKey { return NSStringFromSelector(@selector(lineId)); } ++ (NSDictionary *)linkingObjectsProperties { + return @{NSStringFromSelector(@selector(departures)): [RLMPropertyDescriptor descriptorWithClass:VBBDepature.class + propertyName:NSStringFromSelector(@selector(line))] }; +} + @end diff --git a/VBBFramework/Model/VBBLocation.h b/VBBFramework/Model/VBBLocation.h index 394e5b6..929f251 100644 --- a/VBBFramework/Model/VBBLocation.h +++ b/VBBFramework/Model/VBBLocation.h @@ -9,10 +9,10 @@ @import CoreLocation; @import Contacts; -@interface VBBLocation : NSObject +@interface VBBLocation : NSObject -@property (nonatomic, readwrite, strong) CLLocation *location; -@property (nonatomic, readwrite, strong) NSString *address; -@property (nonatomic, readwrite, strong) NSDate *date; +@property(nonatomic, readwrite, strong, nullable) CLLocation *location; +@property(nonatomic, readwrite, strong, nullable) NSString *address; +@property(nonatomic, readwrite, strong, nullable) NSDate *date; @end diff --git a/VBBFramework/Model/VBBLocation.m b/VBBFramework/Model/VBBLocation.m index cb95720..af2c442 100644 --- a/VBBFramework/Model/VBBLocation.m +++ b/VBBFramework/Model/VBBLocation.m @@ -13,7 +13,7 @@ @implementation VBBLocation --(instancetype)initWithCoder:(NSCoder *)aDecoder { +- (instancetype)initWithCoder:(NSCoder *)aDecoder { VBBLocation *location = [VBBLocation new]; location.location = [aDecoder decodeObjectForKey:@"location"]; location.address = [aDecoder decodeObjectForKey:@"address"]; @@ -21,17 +21,22 @@ -(instancetype)initWithCoder:(NSCoder *)aDecoder { return location; } --(void)encodeWithCoder:(NSCoder *)aCoder { - [aCoder encodeObject:self.location forKey:@"location"]; - [aCoder encodeObject:self.date forKey:@"date"]; - [aCoder encodeObject:self.address forKey:@"address"]; +-(void)encodeWithCoder:(NSCoder *)coder { + [coder encodeObject:self.location forKey:@"location"]; + [coder encodeObject:self.date forKey:@"date"]; + [coder encodeObject:self.address forKey:@"address"]; } --(BOOL)isEqual:(VBBLocation*)object { ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (BOOL)isEqual:(VBBLocation *)object { if ([object isKindOfClass:[self class]]) return NO; MKMapPoint this = MKMapPointForCoordinate(self.location.coordinate); MKMapPoint other = MKMapPointForCoordinate(object.location.coordinate); return MKMapPointEqualToPoint(this, other); } + @end diff --git a/VBBFramework/Model/VBBStation.h b/VBBFramework/Model/VBBStation.h index a24de2d..7455417 100644 --- a/VBBFramework/Model/VBBStation.h +++ b/VBBFramework/Model/VBBStation.h @@ -16,19 +16,21 @@ @interface VBBStation : RLMObject -@property (nonatomic) NSString *stationName; -@property (nonatomic) NSString *stationId; -@property (nonatomic) NSInteger stationClass; -@property (nonatomic) NSString *stationType; +@property(nonatomic, nonnull) NSString *stationName; +@property(nonatomic, nonnull) NSString *stationId; +@property(nonatomic, nonnull) NSString *stationType; +@property(nonatomic) NSInteger stationClass; -@property (readonly) CLLocation *location; +@property(nonnull, readonly) CLLocation *location; -@property RLMArray *depatures; -@property RLMArray *lines; +@property(nonnull) RLMArray *depatures; +@property(nonnull) RLMArray *lines; --(void)setLocation:(CLLocation*)location; --(CLLocation*)location; -+ (NSArray *)sortByRelevance:(VBBLocation*)userLocation andLimit:(NSUInteger)limit; ++ (NSArray * _Nonnull)sortByRelevance:(VBBLocation* _Nonnull)userLocation andLimit:(NSUInteger)limit; + +- (VBBDepature* _Nullable)nextDeparture: (NSTimeInterval)futureInterval; +- (void)setLocation:(CLLocation * _Nonnull)location; +- (CLLocation * _Nonnull)location; @end diff --git a/VBBFramework/Model/VBBStation.m b/VBBFramework/Model/VBBStation.m index 66c9fd2..8f714af 100644 --- a/VBBFramework/Model/VBBStation.m +++ b/VBBFramework/Model/VBBStation.m @@ -11,18 +11,26 @@ @interface VBBStation () -@property (nonatomic) double latitude; -@property (nonatomic) double longitude; +@property(nonatomic) double latitude; +@property(nonatomic) double longitude; @end @implementation VBBStation -+ (NSArray *)sortByRelevance:(VBBLocation*)userLocation andLimit:(NSUInteger)limit { - +- (VBBDepature*)nextDeparture: (NSTimeInterval)futureInterval { + NSDate *future = [NSDate dateWithTimeInterval:futureInterval sinceDate:[NSDate date]]; + NSPredicate *predicate = [NSPredicate predicateWithFormat:@"scheduledDate > %@", future]; + VBBDepature *nextDepature = [[self.depatures objectsWithPredicate:predicate] + sortedResultsUsingKeyPath:NSStringFromSelector(@selector(scheduledDate)) ascending:YES].firstObject; + return nextDepature; +} + ++ (NSArray * _Nonnull)sortByRelevance:(VBBLocation* _Nonnull)userLocation andLimit:(NSUInteger)limit { + RLMRealm *realm = [[VBBPersistanceManager class] realm]; RLMResults *stations = [VBBStation allObjectsInRealm:realm]; - + NSDate *now = [NSDate date]; NSMutableArray *unsorted = [NSMutableArray arrayWithCapacity:stations.count]; for (VBBStation *station in stations) { @@ -31,34 +39,34 @@ + (NSArray *)sortByRelevance:(VBBLocation*)userLocation andLimit:(NSUInteger)lim NSDictionary *dict = @{@"station": station, @"distance": @(distance)}; [unsorted addObject:dict]; } - + NSSortOptions sortOptions = NSSortStable; [unsorted sortWithOptions:sortOptions usingComparator:^NSComparisonResult(NSDictionary *dictOne, NSDictionary *dictTwo) { return [dictOne[@"distance"] doubleValue] > [dictTwo[@"distance"] doubleValue]; }]; - + NSDate *future = [NSDate dateWithTimeInterval:60 sinceDate:now]; - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"arrivalDate > %@", future]; + NSPredicate *predicate = [NSPredicate predicateWithFormat:@"scheduledDate > %@", future]; [unsorted enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(NSDictionary *dict, NSUInteger idx, BOOL *stop) { VBBStation *station = dict[@"station"]; VBBDepature *nextDepature = [station.depatures objectsWithPredicate:predicate].firstObject; - if (!nextDepature || [nextDepature.arrivalDate timeIntervalSinceDate:now] > 3600) [unsorted removeObject:dict]; + if (!nextDepature || [nextDepature.scheduledDate timeIntervalSinceDate:now] > 3600) [unsorted removeObject:dict]; }]; if (limit < unsorted.count) [unsorted removeObjectsInRange:NSMakeRange(limit, unsorted.count - limit)]; - - NSMutableArray *sortByRelevance = [NSMutableArray arrayWithCapacity:stations.count]; + + NSMutableArray *sortByRelevance = [NSMutableArray arrayWithCapacity:stations.count]; [unsorted enumerateObjectsUsingBlock:^(NSDictionary *placeDict, NSUInteger idx, BOOL *stop) { [sortByRelevance insertObject:placeDict[@"station"] atIndex:idx]; }]; return sortByRelevance.copy; } --(void)setLocation:(CLLocation *)location { +- (void)setLocation:(CLLocation *_Nonnull)location { self.latitude = location.coordinate.latitude; self.longitude = location.coordinate.longitude; } --(CLLocation *)location { +- (CLLocation *_Nonnull)location { return [[CLLocation alloc] initWithLatitude:self.latitude longitude:self.longitude]; } diff --git a/VBBFramework/Parser/VBBDepatureParser.h b/VBBFramework/Parser/VBBDepatureParser.h index 5658aae..9dcb838 100644 --- a/VBBFramework/Parser/VBBDepatureParser.h +++ b/VBBFramework/Parser/VBBDepatureParser.h @@ -11,6 +11,6 @@ @interface VBBDepatureParser : VBBaseParser --(instancetype)initWithStationId:(NSString*)stationId; +- (instancetype)initWithStationId:(NSString *)stationId; @end diff --git a/VBBFramework/Parser/VBBDepatureParser.m b/VBBFramework/Parser/VBBDepatureParser.m index 68020a0..94c4357 100644 --- a/VBBFramework/Parser/VBBDepatureParser.m +++ b/VBBFramework/Parser/VBBDepatureParser.m @@ -7,17 +7,18 @@ // #import "VBBDepatureParser.h" +#import "NSString+VBB.h" @interface VBBDepatureParser () -@property (nonatomic, readwrite, strong) VBBStation *station; -@property (nonatomic, readonly) NSDateFormatter *formatter; +@property(nonatomic, readwrite, strong) VBBStation *station; +@property(nonatomic, readonly) NSDateFormatter *formatter; @end @implementation VBBDepatureParser --(instancetype)initWithStationId:(NSString*)stationId { +- (instancetype)initWithStationId:(NSString *)stationId { self = [super init]; if (self) { self.station = [VBBStation objectInRealm:self.realm forPrimaryKey:stationId]; @@ -25,41 +26,64 @@ -(instancetype)initWithStationId:(NSString*)stationId { return self; } --(void)parserDidStartDocument:(NSXMLParser *)parser { +- (void)parserDidStartDocument:(NSXMLParser *)parser { [super parserDidStartDocument:parser]; - [self.realm deleteObjects:self.station.depatures]; } --(void)parseTable:(NSDictionary*)dict { +- (void)parseTable:(NSDictionary *)dict { + NSString *directionId = dict[@"dirnr"]; + NSString *direction = dict[@"dir"]; + NSString *lineKey = [NSString stringWithFormat:@"%@-%@", directionId, direction]; + NSString *lineId = lineKey.sha1; - VBBDepature *departure = [VBBDepature new]; - NSString *lineId = dict[@"dirnr"]; VBBLine *line = [VBBLine objectInRealm:self.realm forPrimaryKey:lineId]; if (!line) { line = [VBBLine new]; line.lineId = lineId; - line.lineEnd = dict[@"dir"]; - line.lineName = dict[@"hafasname"]; - line.departureType = [dict[@"class"] integerValue]; - [self.realm addObject:line]; } - if ([self.station.lines indexOfObject:line] == NSNotFound) [self.station.lines addObject:line]; + + line.lineEnd = dict[@"dir"]; + line.lineName = dict[@"hafasname"]; + line.departureType = [dict[@"class"] integerValue]; + [self.realm addOrUpdateObject:line]; + + if ([self.station.lines indexOfObject:line] == NSNotFound) { + [self.station.lines addObject:line]; + } + + NSString * dateFormatted = [NSString stringWithFormat:@"%@ %@", dict[@"fpDate"], dict[@"fpTime"]]; + NSDate *scheduledDate = [self.formatter dateFromString:dateFormatted]; + NSString *departureKey = [NSString stringWithFormat:@"%@-%@-%@-%@", self.station.stationId, line.lineId, line.lineEnd, dateFormatted]; + NSString *departureId = departureKey.sha1; + NSNumber *delay = dict[@"e_delay"]; + - NSString *dateFormatted = [NSString stringWithFormat:@"%@ %@", dict[@"fpDate"], dict[@"fpTime"]]; - departure.arrivalDate = [self.formatter dateFromString:dateFormatted]; + VBBDepature *departure = [VBBDepature objectInRealm:self.realm forPrimaryKey:departureId]; + + if (!departure) { + departure = [VBBDepature new]; + departure.departureId = departureId; + } + + departure.scheduledDate = scheduledDate; + departure.delay = delay.doubleValue * 60; departure.line = line; - [self.station.depatures addObject:departure]; + [self.realm addOrUpdateObject:departure]; + + if ([self.station.depatures indexOfObject:departure] == NSNotFound) { + [self.station.depatures addObject:departure]; + } } --(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName - namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { +- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName + namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { if ([elementName isEqualToString:@"Journey"]) [self parseTable:attributeDict]; } --(NSDateFormatter*)formatter { +- (NSDateFormatter *)formatter { static dispatch_once_t onceToken; static NSDateFormatter *formatter; dispatch_once(&onceToken, ^{ diff --git a/VBBFramework/Parser/VBBStationParser.h b/VBBFramework/Parser/VBBStationParser.h index cac7396..a0d01ae 100644 --- a/VBBFramework/Parser/VBBStationParser.h +++ b/VBBFramework/Parser/VBBStationParser.h @@ -11,6 +11,6 @@ @interface VBBStationParser : VBBaseParser -@property (nonatomic, readonly, strong) NSArray *stations; +@property(nonatomic, readonly, strong) NSArray *stations; @end \ No newline at end of file diff --git a/VBBFramework/Parser/VBBStationParser.m b/VBBFramework/Parser/VBBStationParser.m index 75c25b9..a508583 100644 --- a/VBBFramework/Parser/VBBStationParser.m +++ b/VBBFramework/Parser/VBBStationParser.m @@ -10,43 +10,43 @@ @interface VBBStationParser () -@property (nonatomic, readwrite, strong) NSMutableArray *fetchedStations; +@property(nonatomic, readwrite, strong) NSMutableArray *fetchedStations; @end @implementation VBBStationParser --(void)parserDidStartDocument:(NSXMLParser *)parser { +- (void)parserDidStartDocument:(NSXMLParser *)parser { self.fetchedStations = [NSMutableArray array]; [super parserDidStartDocument:parser]; } --(void)parseStations:(NSDictionary*)dict { - NSString *stationId = dict[@"externalId"]; - VBBStation *station = [VBBStation objectInRealm:self.realm forPrimaryKey:stationId]; +- (void)parseStations:(NSDictionary *)dict { + NSString * stationId = dict[@"externalId"]; + VBBStation *station = [VBBStation objectInRealm:self.realm forPrimaryKey:stationId]; if (!station) { - NSNumber *latitude = @([dict[@"y"] doubleValue] / 1000000); - NSNumber *longitude = @([dict[@"x"] doubleValue] / 1000000); station = [VBBStation new]; - station.stationName = dict[@"n"]; station.stationId = stationId; - station.stationClass = [dict[@"class"] integerValue]; - station.stationType = dict[@"t"]; - station.location = [[CLLocation alloc] initWithLatitude:latitude.doubleValue longitude:longitude.doubleValue]; - [self.realm addOrUpdateObject:station]; } - [self.fetchedStations addObject:station]; + NSNumber *latitude = @([dict[@"y"] doubleValue] / 1000000); + NSNumber *longitude = @([dict[@"x"] doubleValue] / 1000000); + station.stationName = dict[@"n"]; + station.stationClass = [dict[@"class"] integerValue]; + station.stationType = dict[@"t"]; + station.location = [[CLLocation alloc] initWithLatitude:latitude.doubleValue longitude:longitude.doubleValue]; + [self.realm addOrUpdateObject:station]; + [self.fetchedStations addObject:station]; } --(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName - namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { +- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName + namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { if ([elementName isEqualToString:@"MLc"]) [self parseStations:attributeDict]; } --(NSArray *)stations{ +- (NSArray *)stations { return self.fetchedStations.copy; } diff --git a/VBBFramework/Parser/VBBaseParser.h b/VBBFramework/Parser/VBBaseParser.h index 219fb79..f58bfe2 100644 --- a/VBBFramework/Parser/VBBaseParser.h +++ b/VBBFramework/Parser/VBBaseParser.h @@ -6,11 +6,12 @@ // Copyright (c) 2015 Dennis Oberhoff. All rights reserved. // +@import Realm; @import Foundation; #import "VBBPersistanceManager.h" @interface VBBaseParser : NSObject -@property (nonatomic, readonly, strong) RLMRealm *realm; +@property(nonatomic, readonly, strong) RLMRealm *realm; @end diff --git a/VBBFramework/Parser/VBBaseParser.m b/VBBFramework/Parser/VBBaseParser.m index 4442970..87079d4 100644 --- a/VBBFramework/Parser/VBBaseParser.m +++ b/VBBFramework/Parser/VBBaseParser.m @@ -8,15 +8,15 @@ #import "VBBaseParser.h" -@interface VBBaseParser() +@interface VBBaseParser () -@property (nonatomic, readwrite, strong) RLMRealm *realm; +@property(nonatomic, readwrite, strong) RLMRealm *realm; @end @implementation VBBaseParser --(instancetype)init{ +- (instancetype)init { self = [super init]; if (self) { self.realm = [[VBBPersistanceManager class] realm]; @@ -24,11 +24,11 @@ -(instancetype)init{ return self; } --(void)parserDidStartDocument:(NSXMLParser *)parser { +- (void)parserDidStartDocument:(NSXMLParser *)parser { [self.realm beginWriteTransaction]; } --(void)parserDidEndDocument:(NSXMLParser *)parser { +- (void)parserDidEndDocument:(NSXMLParser *)parser { [self.realm commitWriteTransaction]; } diff --git a/VBBFramework/Support Files/Assets.xcassets/Colors/Bus.colorset/Contents.json b/VBBFramework/Support Files/Assets.xcassets/Colors/Bus.colorset/Contents.json new file mode 100644 index 0000000..b0225b0 --- /dev/null +++ b/VBBFramework/Support Files/Assets.xcassets/Colors/Bus.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + }, + "colors" : [ + { + "idiom" : "universal", + "color" : { + "color-space" : "srgb", + "components" : { + "red" : "0.639", + "alpha" : "1.000", + "blue" : "0.486", + "green" : "0.000" + } + } + } + ] +} \ No newline at end of file diff --git a/VBBFramework/Support Files/Assets.xcassets/Colors/Contents.json b/VBBFramework/Support Files/Assets.xcassets/Colors/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/VBBFramework/Support Files/Assets.xcassets/Colors/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/VBBFramework/Support Files/Assets.xcassets/Colors/Ferry.colorset/Contents.json b/VBBFramework/Support Files/Assets.xcassets/Colors/Ferry.colorset/Contents.json new file mode 100644 index 0000000..1e49640 --- /dev/null +++ b/VBBFramework/Support Files/Assets.xcassets/Colors/Ferry.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + }, + "colors" : [ + { + "idiom" : "universal", + "color" : { + "color-space" : "srgb", + "components" : { + "red" : "0.000", + "alpha" : "1.000", + "blue" : "0.753", + "green" : "0.502" + } + } + } + ] +} \ No newline at end of file diff --git a/VBBFramework/Support Files/Assets.xcassets/Colors/Metro.colorset/Contents.json b/VBBFramework/Support Files/Assets.xcassets/Colors/Metro.colorset/Contents.json new file mode 100644 index 0000000..b77c0b0 --- /dev/null +++ b/VBBFramework/Support Files/Assets.xcassets/Colors/Metro.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + }, + "colors" : [ + { + "idiom" : "universal", + "color" : { + "color-space" : "srgb", + "components" : { + "red" : "0.957", + "alpha" : "1.000", + "blue" : "0.125", + "green" : "0.475" + } + } + } + ] +} \ No newline at end of file diff --git a/VBBFramework/Support Files/Assets.xcassets/Colors/Other.colorset/Contents.json b/VBBFramework/Support Files/Assets.xcassets/Colors/Other.colorset/Contents.json new file mode 100644 index 0000000..52882ad --- /dev/null +++ b/VBBFramework/Support Files/Assets.xcassets/Colors/Other.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + }, + "colors" : [ + { + "idiom" : "universal", + "color" : { + "color-space" : "srgb", + "components" : { + "red" : "0x4D", + "alpha" : "1.000", + "blue" : "0x5E", + "green" : "0x55" + } + } + } + ] +} \ No newline at end of file diff --git a/VBBFramework/Support Files/Assets.xcassets/Colors/SBahn.colorset/Contents.json b/VBBFramework/Support Files/Assets.xcassets/Colors/SBahn.colorset/Contents.json new file mode 100644 index 0000000..c4e3bde --- /dev/null +++ b/VBBFramework/Support Files/Assets.xcassets/Colors/SBahn.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + }, + "colors" : [ + { + "idiom" : "universal", + "color" : { + "color-space" : "srgb", + "components" : { + "red" : "0.000", + "alpha" : "1.000", + "blue" : "0.208", + "green" : "0.435" + } + } + } + ] +} \ No newline at end of file diff --git a/VBBFramework/Support Files/Assets.xcassets/Colors/Train.colorset/Contents.json b/VBBFramework/Support Files/Assets.xcassets/Colors/Train.colorset/Contents.json new file mode 100644 index 0000000..c2f0991 --- /dev/null +++ b/VBBFramework/Support Files/Assets.xcassets/Colors/Train.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + }, + "colors" : [ + { + "idiom" : "universal", + "color" : { + "color-space" : "srgb", + "components" : { + "red" : "0.855", + "alpha" : "1.000", + "blue" : "0.114", + "green" : "0.145" + } + } + } + ] +} \ No newline at end of file diff --git a/VBBFramework/Support Files/Assets.xcassets/Colors/Tram.colorset/Contents.json b/VBBFramework/Support Files/Assets.xcassets/Colors/Tram.colorset/Contents.json new file mode 100644 index 0000000..f45cd52 --- /dev/null +++ b/VBBFramework/Support Files/Assets.xcassets/Colors/Tram.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + }, + "colors" : [ + { + "idiom" : "universal", + "color" : { + "color-space" : "srgb", + "components" : { + "red" : "0.800", + "alpha" : "1.000", + "blue" : "0.000", + "green" : "0.000" + } + } + } + ] +} \ No newline at end of file diff --git a/VBBFramework/Support Files/Assets.xcassets/Colors/UBahn.colorset/Contents.json b/VBBFramework/Support Files/Assets.xcassets/Colors/UBahn.colorset/Contents.json new file mode 100644 index 0000000..519310e --- /dev/null +++ b/VBBFramework/Support Files/Assets.xcassets/Colors/UBahn.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + }, + "colors" : [ + { + "idiom" : "universal", + "color" : { + "color-space" : "srgb", + "components" : { + "red" : "0.024", + "alpha" : "1.000", + "blue" : "0.671", + "green" : "0.392" + } + } + } + ] +} \ No newline at end of file diff --git a/VBBFramework/Support Files/Assets.xcassets/Contents.json b/VBBFramework/Support Files/Assets.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/VBBFramework/Support Files/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/VBBFramework/Support Files/Assets.xcassets/ServiceIcons/Bus.imageset/Contents.json b/VBBFramework/Support Files/Assets.xcassets/ServiceIcons/Bus.imageset/Contents.json new file mode 100644 index 0000000..ac7bd6d --- /dev/null +++ b/VBBFramework/Support Files/Assets.xcassets/ServiceIcons/Bus.imageset/Contents.json @@ -0,0 +1,16 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "bus.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "original", + "preserves-vector-representation" : true + } +} \ No newline at end of file diff --git a/VBBFramework/Support Files/Assets.xcassets/ServiceIcons/Bus.imageset/bus.pdf b/VBBFramework/Support Files/Assets.xcassets/ServiceIcons/Bus.imageset/bus.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5d82577380ae1e65fdbe2eabfa25123b8d6e8c19 GIT binary patch literal 5905 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 literal 0 HcmV?d00001 diff --git a/VBBFramework/Support Files/Assets.xcassets/ServiceIcons/Metro.imageset/Contents.json b/VBBFramework/Support Files/Assets.xcassets/ServiceIcons/Metro.imageset/Contents.json new file mode 100644 index 0000000..33b26a7 --- /dev/null +++ b/VBBFramework/Support Files/Assets.xcassets/ServiceIcons/Metro.imageset/Contents.json @@ -0,0 +1,16 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "metro.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "original", + "preserves-vector-representation" : true + } +} \ No newline at end of file diff --git a/VBBFramework/Support Files/Assets.xcassets/ServiceIcons/Metro.imageset/metro.pdf b/VBBFramework/Support Files/Assets.xcassets/ServiceIcons/Metro.imageset/metro.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b5f1c29fea36338222885afde5f1d3be262c3be5 GIT binary patch literal 4332 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 K2&AH|O8-B7jp+ga literal 0 HcmV?d00001 diff --git a/VBBFramework/Support Files/Assets.xcassets/ServiceIcons/Tram.imageset/Contents.json b/VBBFramework/Support Files/Assets.xcassets/ServiceIcons/Tram.imageset/Contents.json new file mode 100644 index 0000000..d7c07db --- /dev/null +++ b/VBBFramework/Support Files/Assets.xcassets/ServiceIcons/Tram.imageset/Contents.json @@ -0,0 +1,16 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "tram.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "original", + "preserves-vector-representation" : true + } +} \ No newline at end of file diff --git a/VBBFramework/Support Files/Assets.xcassets/ServiceIcons/Tram.imageset/tram.pdf b/VBBFramework/Support Files/Assets.xcassets/ServiceIcons/Tram.imageset/tram.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c63fc48f8830edfdc614e44a56e85780b086f04e GIT binary patch literal 5380 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 +#import //! Project version number for VBBFramework. FOUNDATION_EXPORT double VBBFrameworkVersionNumber; @@ -18,8 +18,10 @@ FOUNDATION_EXPORT const unsigned char VBBFrameworkVersionString[]; #import #import - #import #import #import #import +#import +#import +#import diff --git a/VBBFramework/Support Files/VBBFramework.modulemap b/VBBFramework/Support Files/VBBFramework.modulemap new file mode 100644 index 0000000..3574706 --- /dev/null +++ b/VBBFramework/Support Files/VBBFramework.modulemap @@ -0,0 +1,6 @@ +framework module VBBFramework { + umbrella header "VBBFramework.h" + + export * + module * { export * } +} diff --git a/VBBNow/Icons.xcassets/AppIcon.appiconset/Contents.json b/VBBNow/Icons.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index db41bc0..0000000 --- a/VBBNow/Icons.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "images" : [ - { - "size" : "16x16", - "idiom" : "mac", - "filename" : "Icon_16x16.png", - "scale" : "1x" - }, - { - "size" : "16x16", - "idiom" : "mac", - "filename" : "Icon_16x16@2x.png", - "scale" : "2x" - }, - { - "size" : "32x32", - "idiom" : "mac", - "filename" : "Icon_32x32.png", - "scale" : "1x" - }, - { - "size" : "32x32", - "idiom" : "mac", - "filename" : "Icon_32x32@2x.png", - "scale" : "2x" - }, - { - "size" : "128x128", - "idiom" : "mac", - "filename" : "Icon_128x128.png", - "scale" : "1x" - }, - { - "size" : "128x128", - "idiom" : "mac", - "filename" : "Icon_128x128@2x.png", - "scale" : "2x" - }, - { - "size" : "256x256", - "idiom" : "mac", - "filename" : "Icon_256x256.png", - "scale" : "1x" - }, - { - "size" : "256x256", - "idiom" : "mac", - "filename" : "Icon_256x256@2x.png", - "scale" : "2x" - }, - { - "size" : "512x512", - "idiom" : "mac", - "filename" : "Icon_512x512.png", - "scale" : "1x" - }, - { - "size" : "512x512", - "idiom" : "mac", - "filename" : "Icon_512x512@2x.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/VBBNow/Icons.xcassets/bus.imageset/Contents.json b/VBBNow/Icons.xcassets/bus.imageset/Contents.json deleted file mode 100644 index cace7ff..0000000 --- a/VBBNow/Icons.xcassets/bus.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "bus.png" - }, - { - "idiom" : "universal", - "scale" : "2x", - "filename" : "bus@2x.png" - }, - { - "idiom" : "universal", - "scale" : "3x", - "filename" : "bus@3x.png" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/VBBNow/Icons.xcassets/bus.imageset/bus.png b/VBBNow/Icons.xcassets/bus.imageset/bus.png deleted file mode 100644 index b3791cb3248a65b9f603b370fffc63de857df2c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1280 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 Z_kW%LXOpS}I)MNH002ovPDHLkV1i!X4m$t< diff --git a/VBBNow/Icons.xcassets/bus.imageset/bus@3x.png b/VBBNow/Icons.xcassets/bus.imageset/bus@3x.png deleted file mode 100644 index c6cdf10acc11d2f6843d2994d8dd4a34ece938cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3988 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 JPDHLkV1ftzJXZh! diff --git a/VBBNow/Icons.xcassets/ferry.imageset/ferry@2x.png b/VBBNow/Icons.xcassets/ferry.imageset/ferry@2x.png deleted file mode 100644 index 10b1b7eec71cec0d15f2f80076d91e703b44a1aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2271 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 oSqszadz>% diff --git a/VBBNow/Icons.xcassets/metroBus.imageset/Contents.json b/VBBNow/Icons.xcassets/metroBus.imageset/Contents.json deleted file mode 100644 index 1fb7b27..0000000 --- a/VBBNow/Icons.xcassets/metroBus.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "MetroBus.png" - }, - { - "idiom" : "universal", - "scale" : "2x", - "filename" : "MetroBus@2x.png" - }, - { - "idiom" : "universal", - "scale" : "3x", - "filename" : "MetroBus@3x.png" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/VBBNow/Icons.xcassets/metroBus.imageset/MetroBus.png b/VBBNow/Icons.xcassets/metroBus.imageset/MetroBus.png deleted file mode 100644 index e5841fdd2a6e4951f3422afaabe1841655c4ed3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1682 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 W7Oxv9&;msO0000#w2 diff --git a/VBBNow/Icons.xcassets/metroBus.imageset/MetroBus@3x.png b/VBBNow/Icons.xcassets/metroBus.imageset/MetroBus@3x.png deleted file mode 100644 index fc97b50a27b5fb309951fec929e53c1edacc6c8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5040 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 FV1knI^H~4@ diff --git a/VBBNow/Icons.xcassets/train.imageset/Contents.json b/VBBNow/Icons.xcassets/train.imageset/Contents.json deleted file mode 100644 index aa0867a..0000000 --- a/VBBNow/Icons.xcassets/train.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "local.png" - }, - { - "idiom" : "universal", - "scale" : "2x", - "filename" : "local@2x.png" - }, - { - "idiom" : "universal", - "scale" : "3x", - "filename" : "local@3x.png" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/VBBNow/Icons.xcassets/train.imageset/local.png b/VBBNow/Icons.xcassets/train.imageset/local.png deleted file mode 100644 index 3edc20a4b6dadf88af63f5948ec4eada546adf8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 770 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 diff --git a/VBBNow/Icons.xcassets/tram.imageset/tram@3x.png b/VBBNow/Icons.xcassets/tram.imageset/tram@3x.png deleted file mode 100644 index e2dd2152b7c1590b31b3e21578b109007bdbd3c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2211 zcmbW3`8yMi1IK3?p*44eoRJtpk$dJEITM*mV&=|$POiD- zE@E?kLLueT_b>Q9&-aJ-`}I7p-`~&ker{oA2xh&^3IG7W2qQhKzeN5w=b8StYAFo( z7Yu<`hPr?c!-8}G;JhP34`v<0u>IB^&1J_IeOBZl@HB9;?t^zN<|FbF%%VQ2_1g7B zt*woiBwhz=ZWwz+b>4gIeVB!Cb9B}HprvUZU+zPgWivO4)#0%a5~? zte`cQVF?f1IC2Eil`{|}w?Cxq{wL54M|u{g0k~!aJYu|O^To!6klevi@rB@$ZS)-(o+ z);8RK$9;EZeCGVZ&z&CYKD4wK;BAYy!0OgKf4#Hk#~>C5&YDkmUyS-I$!sP`pgpzx z2QuViASZ1@$=L5Va0Y{2M(W;VW=lUA_k;)At3uNYiI$ucd=k|f){f?!DA<39Z zGS|uIej4z>o?0^$sv{t?D36+vfY1M410Qh^xwRM=(Ye_}@xGE0Iuu`X8ED)Def-O2 zPcrq_X=qi(t4>`$rKh)40|GnJ@r*wXf-E$yJl^!hU~@Mxer*Mp9yoK&5pJY4y0EBL zlSQSKxWe9P#>fRA=*9L1Mk>z#Jn|bRFx)EP3P(pTycCZ4)x%~mE@2EeY^W$J&?Vud zva;gUwBBlZ5*I_3qlvco%#xa=W)EuU$FSP$>41}(v87oIWkr9socQWeadCXzVc*v$ zjdzmka@2~g=eCXEp^aa+Y3E1jo@k53j12yb;)eC{5_U&pT0?|=S^tO%ZSxoGVZKV& zDgtlK1`R!8uYL_xy1jjLYotJbnV`_2{L*v~Ndg*EPkJ*mNOlibLK7hHKk4E`9`YyY z<70)xP7q~5b8k$GZq_9u$6qO{)bG&5?Y7v$hH&o7b}jed01M5JS-KV7$pYfdbE02i zvDZw#PkLWWVC|V6W!TP?-{*OJyG&m{tv0+-?y9m;*SA%?l&I^hGJy|pg?N*IOA5O? zobznf^bHf&W6^wGQ}@XEcyQC&3fDxQ9&&CbL*|*8g#;&yOGWNK0xHP+4A*(VT`Nb5YAjLVgUjsZQV)}JQIu9=Et8uMvE)y58%?UC>hu(WA+a zs(h|t>OBJlX{DN}y*ylXan@*OlA;FF2}i!EG;_qlXOS zlR)UIH|hbMu<;OgNoCNVZ@u72vckY_VB>^za8#g@O98|Sv&|vLLxA0*8Da!kM(Y9I z$slDro#t3cUN_vw;7VzikzYUed=}Jby`PIDd!{Sj#7uE_ZV%-lg~S=BHj4ISXXl5r zUi1c9BK$vQ%`z7#KUctq36>wGA^HYum1G7?$ykg{;-q`~X7Zk_ni%yY=@B@=A^sU_ zKUsmRsf*k>?s~|{TMrPz>-PoH6zn4QZ6lcxd7aMCAq~ROiyz)E6Bt;{?%wKJoy_QD>Db8<0szNU}5dKcX^5tmG zmkw65pE1nT`%XT^1#35VmLMoU%gFmZz@R(u1mOtONZ-p-XXkcexxZjU*iIjQtKVpxxpz()1K6l z?;4IM+f0~kGM|$QmD8{@_X=gKP(BLvuIZqEzs*n=B~I^31PLM5+oawm_R@Cg(FPdQ zRW!`q0Q))*#KAt1QiEnevNOPjjFSIvalx+Uc;6o;bOg($SFgMo;g$C~72)FyCv+2J zXET0?F;>z< z>o8)n44%;HbnK7POcjmmikiG3Z1f`R@9O{{^v(1>=sv*y3&9p2 A>;M1& diff --git a/VBBNow/Icons.xcassets/ubahn.imageset/Contents.json b/VBBNow/Icons.xcassets/ubahn.imageset/Contents.json deleted file mode 100644 index fef7fa3..0000000 --- a/VBBNow/Icons.xcassets/ubahn.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "Ubahn.png" - }, - { - "idiom" : "universal", - "scale" : "2x", - "filename" : "Ubahn@2x.png" - }, - { - "idiom" : "universal", - "scale" : "3x", - "filename" : "Ubahn@3x.png" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/VBBNow/Icons.xcassets/ubahn.imageset/Ubahn.png b/VBBNow/Icons.xcassets/ubahn.imageset/Ubahn.png deleted file mode 100644 index d0c5005a1253eb7e09ca26662ed87beb22c6767e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 756 zcmVPx%u1Q2eR7efwS3zhKQ4pQYCL3d7kW^bz>%sP75K*h5$6BFBi&z9v=%qwG)Ptf| zLGV&M3Zkb9sV(;EMFgoJ3N_LO6cmazR7|ZjLK985NjA=3vcDTjazXoEQO?3DI{t*qJ2Uk&{YQV@;0H%rs^BRnu`=r^Vn~apEX^{qyk&u;2C0krw z+vlxTDoKNW9qtVtA`V|xOt?HTOZ0BV-NAzp@_XGXTaMpP!gsT5%c4NR>8-X`f(_jR z1BZ9YwIh7^nnz-1#m^@W?0`tnAjaXb8A&XRg42U@qyAHw0Jc}kRUs;f8$JjvGB$;n ztE?%+w9`$hxB|4E^O5cc^vQqX@c=0MHd6iz%5@TrBgAkC5m76WX-_iVt>xwy8jE$j!MmxQz1To1-KWo^bqj~cnPx)jY&j7RA>e5TYYR)MG&98_U?M+I106gK#@Rz0BuzoYDA+6AjXe`keGrb_z!KO z;#V}9kZ3d-|M9PC1Y#of4?hUBQ4@kG0Slo`h|yRr&>Bi3p&(qVK`iU>v$Q zzzGJi1CiQi&nFrzaK%eyoyQ&EHNe;l0;EePPv>6&J_ekB7VTrNL;bc0Vi^OhfrVp? zu?^E1pv-p8`Kf3hJb|D!Poig?3Rd%~aHJN!=wWTlGFPir7|-(Nz~d!%%Q`TH-rY9@ zXF6}B&{YVVOXh>$n@bis-WGzv;ZZ3+hBxD}`*O!7DC;r1V2%$Cy|`Yg%-HZ_dpA5? z(`+Ow)oXU#4=d)+Cd-t*a||wa4@mjZp@`Lmv$2%RVGW4Yg-eeUaB;B?r7MV4czAlP zv*|!twIfzXthWeKEIn3O$J?9(cpQ@TgJS?&!<=Y!3}9kJgL44G3>(7}L2Lcw91qhR z?3|Fc_UlCJ{~n&`i|O?wc0(kC9phmVTEXNPz%y_iruo=09;U%{R7huW(i%GorS`cw zpEy)BZ;()D+!&VhLkc+~V_4BSDMn3(KnrN%7^a>kOvX@|j9Nfv`NTt<9m#Nz>8eqZ z)iJDUtXVJE(P?ISNn@BgKJ*vZ0$4Ffs5a67Q?=qxrM;02{?b)bPfmMjfPjOiZIKmv2E+$KTK& z9udF*{CRG8Y)uf#iVH|O%$U}H*r@3>Ycr$KQ{9C0$v=9a{+BCIS+Uqmmn987w@!pN z{@GQ&`}L|4SbQ%zq;(_TI@}8VL-Y{R-zQ}TlU|_=`1VUcPmQ>hFX6&?Jk3wD3ik~Pq8e|rwTJabuw$&#)#h7&b?(R>MTL$h~h zxyUKE;fNzqx#Sr)`EQCLwYRZT!jYalX~3xZK+`3-ax)B{?pzB?3e`Rq(wmmdadR*N zyJ~-ihI66h2E`h4SJ(Ap4x*x55_`Vb*}T8C6kgu6TzMT$Qe;xWjmzh!|AY^Yw84!5 zEsNiTi$>D!LwKs{+C)sQp@~>?l@-s?KyMSvR=z@Vx0%*H@iBpO#r~6>a3R!h#-dK+ zyq&qL>OK}@@HKU5xkSL1tF6@=R|VnW6?egc0-u~Yq2+pS7#iDq0JGbVwqCQ$a8D2; zKZ-fv6Vep`vPKExGO-z0R^*3;1$nS&t`G1u1NX3alG1x8qGht97eivn%T&>?0BF;z zyXx>h#$3BI^|Gm;m-E>EXzliwv~?Ko^$2&LnhJ(x!Un{q-CYvO$38s7eIC5mgS~*R t&%{f!p%bxao{isGLK{-P7@U3;?_Vn&z2MJppX2}l002ovPDHLkV1g65%d-Fg diff --git a/VBBNow/Icons.xcassets/ubahn.imageset/Ubahn@3x.png b/VBBNow/Icons.xcassets/ubahn.imageset/Ubahn@3x.png deleted file mode 100644 index 57557fcc90fbf0c56bbe3af04d241de845b0cc26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2232 zcmV;p2uJscP)Px-a!Eu%RCodHooQ@UMHGO~Tly#k3PsiyS{5ZBWm8$ju$d?zVMzoRP!ZxENeIRW ziHRs7O8j9Yn3xa<#DJEfLBiq>WCsOY0D+dRPzn@Ei-oq7wy*D9&w2Hd;n`l^z3065 zT01vs?o4Oq%*;3Eo>}g^J1(%gUf<9yA<;L@1+GcpGI|>TspxKPm87|Z8DLbn01Cly zR1Zavo<*=Y$r_yi1i%jI%;>WQKM6-K}?i~zV`y}t&Q!Z$Oo zhXrF$*yWj1|~u;X?idaoE=#A%2qXrTlFN&%Ui9I| zhHyFmKQRprDo}(A=6=^b!R@(hcXTnVS9{pMc%1W6{F`$1{!6g%+v99GRs!}d9t*>J zJ!TapqOftF?}Hoz3)vLncJs}-fC#fV4c^_@@ko@l!3-<{ zh%L=Uu%0*>(N{zSP&*@v7aoZiyJ^N39-#fg1dy?trq#k?|F`0t=`-L28&b)1=(URo zRl}j>z!3*dVj|2#M`IGupltwj+8I(78ng}2oTwVK4SG&HL&`#fwgZ|$T7$L$niExn zwm}b9<7~u!II0HyFb_+g({VHj)u1iW$^~lBHdtznwgD?%QME?fAg?<^8?ZQ0wdvr{ zi&0u_I&6T}8f^m>C#ts59C|TIt4)Uu(Asp^fW?XGe5IoiOu=#A1E=myCapFdcAAP| zJDLS(sfUKaS+CyNQD{!wW}(p>Kx*11-WjS@iH=*U!`0gjqSHR2QXQKPPRF3upeYUR znzZRqp-0Ot)tDURa;(u(P^9dqRC%oA#KlH)GF2-hrERLraJSSrI$W+DeSt zSL&&Wi;d=Fs^XG@pvnw)OFcDB+eU{|iGp9sbi`%hpVPW3ODPDd%y2jTDof(x)Y-9( z=CrO_Y5duN>Wzw9h%>|mbTBBx#O=7LBhOzN1Qa8@f<0jV=<1FYRn*mv}28~Wn`*w1}O-t%y75Y zBV(U}jHj3ZT4vZG1tA=+>h}r_Z2}DCatzuZkTD(J7}#i^*Ksw~_JTk>G`h+kc&HFg zJyH;?@=x-~d{M5Jppeqq{EhA&I z=KWHWquL=3NpELn#k$iNnqw{yJhZ#%6uq}b+dQFP zClQ%vuHR+JVS)ZVzm%1^nRsCLb};&h4yIS^K4(-0v_R7&aUDEg!V<#*y(jk;D|0pR z@)?<`m+ekTN`NJk`?2Mi0`{LPHl2>{EYPR%apKx8v(zIW?*L0C^)Q_gk!}O=qVAHXyK-xt1v8J~ESs9Hi#^cE1&Cxwz z;()H=lb>xT3gNG-yb%Z0$>p2BnY}tRWpFBd|L!P~7nO@ujuRA#n~HY@&K)(POO*P3z~%iWKrYT4EtvEqnf-f4%^h zOYVskLku*P=+o`Fwm)PoRue%%2hSJ7M_Wz{N)$95R4OtZGrl?u7jIRF7BZH?atg~} z*4Mv^n?X^HCLp&fYGBHj2jS-3s#x+7$tw>PWYQN0LUj-ks0a}UO|mZ)--9tL_P~WA znbkd|yis$Wx^@S~<2U?oL`gxS0-9*#msG;o6?@^Ai@a5@sF76!@6IU-L5}8A7&XvT zj}kN^6HrT*Z_5$4c?u`TPU=&rY?IN{mElAvnwKkKes*~*zKTw7I##|m7zU@yyjtQy z*^^rY?{7LOHX*Sp4{ivpz$tk4Ih=|2v5F`aM*EcKjLd+Kr)7eZMI(uFoV`&7AO3I( zwx7HqAud80#(9@--sYXS7kpxbDMX^tHn1tUj5&WyPk8>x&JgYWcVr@HnPBz4JlHMx zvLa#_2K?m0Q_2=#MOQ_fNH}884y|DBb3NgO%+4^dTRX7@qH5gWa~M0~U1y3Q>u3QK z-ihCE6Hg~w;DWkSIP(#<%*!=KLnOEK!n63MWptm8FanQ=%D_hGif>71QOW9})xA6% zQl3Mza28(}AHw&02XJ;LwaLdS??;8{nWuA-#E^|vMeDJDHBV<(=%`J>eV?Ee5TXrO+&o^0000CFBundlePackageType XPC! CFBundleShortVersionString - 1.0.3 + $(MARKETING_VERSION) CFBundleSignature ???? CFBundleVersion - 6 + $(CURRENT_PROJECT_VERSION) LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) NSAppTransportSecurity diff --git a/VBBNow/Supporting Files/vbbnow.entitlements b/VBBNow/Supporting Files/vbbnow.entitlements index 9f2bc64..fc07546 100644 --- a/VBBNow/Supporting Files/vbbnow.entitlements +++ b/VBBNow/Supporting Files/vbbnow.entitlements @@ -6,8 +6,6 @@ com.apple.security.network.client - com.apple.security.network.server - com.apple.security.personal-information.location diff --git a/VBBNow/ViewController/VBBListRowViewController.h b/VBBNow/ViewController/VBBListRowViewController.h index a3e5403..aeb0172 100644 --- a/VBBNow/ViewController/VBBListRowViewController.h +++ b/VBBNow/ViewController/VBBListRowViewController.h @@ -11,12 +11,12 @@ @interface VBBListRowViewController : NSViewController -@property (nonatomic, weak) IBOutlet NSTextField *lineNameLabel; -@property (nonatomic, weak) IBOutlet NSTextField *lineEndLabel; -@property (nonatomic, weak) IBOutlet NSTextField *stationLabel; -@property (nonatomic, weak) IBOutlet NSTextField *timeLabel; -@property (nonatomic, weak) IBOutlet NSTextField *timeDescLabel; +@property(nonatomic, weak) IBOutlet NSTextField *lineNameLabel; +@property(nonatomic, weak) IBOutlet NSTextField *lineEndLabel; +@property(nonatomic, weak) IBOutlet NSTextField *stationLabel; +@property(nonatomic, weak) IBOutlet NSTextField *timeLabel; +@property(nonatomic, weak) IBOutlet NSTextField *timeDescLabel; -@property (nonatomic, weak) IBOutlet NSImageView *iconView; +@property(nonatomic, weak) IBOutlet NSImageView *iconView; @end diff --git a/VBBNow/ViewController/VBBListRowViewController.m b/VBBNow/ViewController/VBBListRowViewController.m index 9451a6f..2bcf6d6 100644 --- a/VBBNow/ViewController/VBBListRowViewController.m +++ b/VBBNow/ViewController/VBBListRowViewController.m @@ -8,77 +8,45 @@ @import VBBFramework; -#import #import "VBBListRowViewController.h" @interface VBBListRowViewController () -@property (nonatomic, readwrite, strong) CALayer *seperatorLayer; +@property(nonatomic, readwrite, strong) CALayer *seperatorLayer; @end @implementation VBBListRowViewController --(void)viewDidLoad{ +- (void)viewDidLoad { self.seperatorLayer = [CALayer new]; [self.view.layer addSublayer:self.seperatorLayer]; [super viewDidLoad]; } --(void)viewDidLayout { - self.seperatorLayer.frame = CGRectMake(CGRectGetMaxX(self.timeLabel.frame), CGRectGetMinY(self.stationLabel.frame), - 2.5, CGRectGetMinY(self.timeLabel.frame) + CGRectGetMaxY(self.timeDescLabel.frame)); +- (void)viewDidLayout { + self.seperatorLayer.frame = CGRectMake(CGRectGetMaxX(self.timeLabel.frame), CGRectGetMinY(self.stationLabel.frame), + 2.5, CGRectGetMinY(self.timeLabel.frame) + CGRectGetMaxY(self.timeDescLabel.frame)); } --(void)setInformations: (VBBStation *)station { - +- (void)setInformations:(VBBStation *)station { NSDate *future = [NSDate dateWithTimeInterval:60 sinceDate:[NSDate date]]; - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"arrivalDate > %@", future]; + NSPredicate *predicate = [NSPredicate predicateWithFormat:@"scheduledDate > %@", future]; VBBDepature *nextDepature = [station.depatures objectsWithPredicate:predicate].firstObject; - NSTimeInterval left = [nextDepature.arrivalDate timeIntervalSinceDate:[NSDate date]]; - - NSArray *timeDescriptions = [[[self timeFormatter] stringFromTimeInterval:left] componentsSeparatedByString:@" "]; + NSTimeInterval seconds = [nextDepature.arrivalDate timeIntervalSinceDate:[NSDate date]]; + NSArray *timeDescriptions = [[[NSDateComponentsFormatter timeFormatter] stringFromTimeInterval:seconds] componentsSeparatedByString:@" "]; + self.stationLabel.stringValue = station.stationName; - self.timeLabel.stringValue = timeDescriptions.firstObject; - self.timeDescLabel.stringValue = timeDescriptions.lastObject; + self.timeLabel.stringValue = timeDescriptions.firstObject; + self.timeDescLabel.stringValue = timeDescriptions.lastObject; self.lineEndLabel.stringValue = nextDepature.line.lineEnd; self.lineNameLabel.stringValue = nextDepature.line.lineName; - - NSImage *image; - NSColor *color = [NSColor colorWithWhite:0.5 alpha:0.5]; - - switch (nextDepature.line.departureType) { - case 1: - image = [NSImage imageNamed:@"sbahn"]; - color = [NSColor colorWithRed:0 green:0.6 blue:0.37 alpha:1]; - break; - case 2: - image = [NSImage imageNamed:@"ubahn"]; - color = [NSColor colorWithRed:0 green:0.35 blue:0.58 alpha:1]; - break; - case 4: - image = [NSImage imageNamed:@"tram"]; - color = [NSColor colorWithRed:0.88 green:0 blue:0 alpha:1]; - break; - case 8: { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", @"^Bus M\\d+"]; - if ([predicate evaluateWithObject:nextDepature.line.lineName]) { - image = [NSImage imageNamed:@"metroBus"]; - color = [NSColor colorWithRed:1 green:0.44 blue:0 alpha:1]; - } else { - image = [NSImage imageNamed:@"bus"]; - color = [NSColor colorWithRed:0.65 green:0 blue:0.42 alpha:1]; - } - } - break; - case 32 : - image = [NSImage imageNamed:@"train"]; - color = [NSColor colorWithRed:0.82 green:0 blue:0 alpha:1]; - break; - default: - break; - } - + + NSBundle *frameworkBundle = [NSBundle frameworkBundle]; + NSString *assetName = [VBBLine assetNameForType:nextDepature.line.lineType]; + NSImage *image = [frameworkBundle imageForResource:assetName]; + NSColor *color = [NSColor colorNamed:assetName bundle:frameworkBundle]; + self.seperatorLayer.backgroundColor = color.CGColor; self.iconView.image = image; } @@ -87,22 +55,9 @@ - (NSString *)nibName { return NSStringFromClass([self class]); } --(void)setRepresentedObject:(id)representedObject { +- (void)setRepresentedObject:(id)representedObject { [super setRepresentedObject:representedObject]; [self setInformations:representedObject]; } --(NSDateComponentsFormatter*)timeFormatter { - static dispatch_once_t onceToken; - static NSDateComponentsFormatter *timeFormatter; - dispatch_once(&onceToken, ^{ - timeFormatter = [NSDateComponentsFormatter new]; - timeFormatter.allowedUnits = NSCalendarUnitMinute | NSCalendarUnitMinute | NSCalendarUnitDay; - timeFormatter.unitsStyle = NSDateComponentsFormatterUnitsStyleShort; - timeFormatter.includesApproximationPhrase = NO; - timeFormatter.includesTimeRemainingPhrase = NO; - }); - return timeFormatter; -} - @end diff --git a/VBBNow/ViewController/VBBTodayViewController.m b/VBBNow/ViewController/VBBTodayViewController.m index 6cd6af2..44f4ad5 100644 --- a/VBBNow/ViewController/VBBTodayViewController.m +++ b/VBBNow/ViewController/VBBTodayViewController.m @@ -15,17 +15,18 @@ #import "VBBListRowViewController.h" typedef void (^didUpdateLocationBlock)(CLLocation *location); + typedef void (^didChangeAuthorizationStatus)(CLAuthorizationStatus status); @interface VBBTodayViewController () -@property (nonatomic, readwrite, strong) VBBNetworkManager *networkManager; -@property (nonatomic, readwrite, strong) CLLocationManager *locationManager; -@property (nonatomic, readwrite, strong) NSTimer *reloadTimer; -@property (nonatomic, readwrite, weak) IBOutlet NSTextField *locationLabel; -@property (nonatomic, readwrite, weak) IBOutlet NCWidgetListViewController *listViewController; -@property (nonatomic, readwrite, copy) didUpdateLocationBlock didUpdateLocationBlock; -@property (nonatomic, readwrite, copy) didChangeAuthorizationStatus didChangeAuthorizationStatus; +@property(nonatomic, readwrite, strong) VBBNetworkManager *networkManager; +@property(nonatomic, readwrite, strong) CLLocationManager *locationManager; +@property(nonatomic, readwrite, strong) NSTimer *reloadTimer; +@property(nonatomic, readwrite, weak) IBOutlet NSTextField *locationLabel; +@property(nonatomic, readwrite, weak) IBOutlet NCWidgetListViewController *listViewController; +@property(nonatomic, readwrite, copy) didUpdateLocationBlock didUpdateLocationBlock; +@property(nonatomic, readwrite, copy) didChangeAuthorizationStatus didChangeAuthorizationStatus; @end @@ -38,23 +39,23 @@ - (void)viewDidLoad { self.networkManager = [VBBNetworkManager new]; self.locationManager = [CLLocationManager new]; self.locationManager.delegate = self; - + VBBLocation *storedLocation = [VBBPersistanceManager manager].storedLocation; - if (storedLocation.address) [self.locationLabel setStringValue:storedLocation.address]; + if (storedLocation.address) [self.locationLabel setStringValue:[storedLocation.address stringByReplacingOccurrencesOfString:@"\n" withString:@", "]]; self.listViewController.preferredContentSize = CGSizeMake(320, 350); - self.listViewController.contents = [[VBBStation class] sortByRelevance:storedLocation andLimit:5]; + self.listViewController.contents = [VBBStation sortByRelevance:storedLocation andLimit:5]; } --(void)reloadData { - +- (void)reloadData { + [self.reloadTimer invalidate]; - + VBBLocation *location = [VBBPersistanceManager manager].storedLocation; - + if (!location) { return; } - + CABasicAnimation *opacity = [CABasicAnimation animationWithKeyPath:@"opacity"]; opacity.toValue = @(0.0); opacity.duration = 0.35; @@ -65,7 +66,7 @@ -(void)reloadData { [opacity setValue:@"opacity" forKey:@"identifier"]; [opacity setValue:location forKey:@"location"]; [self.view.layer addAnimation:opacity forKey:@"opacity"]; - + NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitSecond fromDate:[NSDate date]]; NSTimeInterval refreshInterval = 60 - components.second; @@ -75,24 +76,27 @@ -(void)reloadData { #pragma mark - NCWidgetProviding --(void)fetchNearby: (void (^)(NCUpdateResult result))completionHandler { - +- (void)fetchNearby:(void (^)(NCUpdateResult result))completionHandler { + __weak typeof(self) weakSelf = self; - + void (^completionBlock)(NSArray *stations, VBBLocation *location) = ^(NSArray *stations, VBBLocation *location) { dispatch_async(dispatch_get_main_queue(), ^{ [weakSelf reloadData]; completionHandler(stations.count ? NCUpdateResultNewData : NCUpdateResultFailed); }); }; - + void (^responseBlock)(CLLocation *location) = ^void(CLLocation *location) { + if (location == nil) { + location = [VBBPersistanceManager manager].storedLocation.location; + } [self.networkManager fetchNearedStations:location andCompletionHandler:completionBlock]; }; - + [self setDidUpdateLocationBlock:responseBlock]; [self.locationManager startUpdatingLocation]; - + } - (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult result))completionHandler { @@ -124,9 +128,9 @@ - (BOOL)widgetAllowsEditing { #pragma mark CoreAnimation Delegate --(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag { - - NSString *key = [anim valueForKey:@"identifier"]; +- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag { + + NSString * key = [anim valueForKey:@"identifier"]; if ([key isEqualTo:@"opacity"]) { VBBLocation *location = [anim valueForKey:@"location"]; CABasicAnimation *opacity = [CABasicAnimation animationWithKeyPath:@"opacity"]; @@ -138,28 +142,28 @@ -(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag { opacity.fromValue = [self.view.layer.presentationLayer ?: self.view.layer valueForKeyPath:opacity.keyPath]; [CATransaction begin]; [CATransaction setDisableActions:YES]; - self.listViewController.contents = [[VBBStation class] sortByRelevance:location andLimit:5]; + self.listViewController.contents = [VBBStation sortByRelevance:location andLimit:5]; [self.view.layer setValue:opacity.toValue forKeyPath:opacity.keyPath]; - if (location.address) [self.locationLabel setStringValue:location.address]; + if (location.address) [self.locationLabel setStringValue:[location.address stringByReplacingOccurrencesOfString:@"\n" withString:@", "]]; [CATransaction commit]; [self.view.layer addAnimation:opacity forKey:@"opacity"]; } - + } #pragma mark CLLocationManagerDelegate --(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { +- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { if (self.didUpdateLocationBlock) self.didUpdateLocationBlock(locations.firstObject); self.didUpdateLocationBlock = nil; } --(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { +- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { if (self.didUpdateLocationBlock) self.didUpdateLocationBlock(nil); self.didUpdateLocationBlock = nil; } --(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status { +- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status { if (self.didChangeAuthorizationStatus) { self.didChangeAuthorizationStatus(status); self.didChangeAuthorizationStatus = nil; diff --git a/VBBWatch App/Assets.xcassets/AppIcon.appiconset/Contents.json b/VBBWatch App/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..a4e81b8 --- /dev/null +++ b/VBBWatch App/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,101 @@ +{ + "version" : "1.0", + "images" : [ + { + "subtype" : "38mm", + "scale" : "2x", + "role" : "quickLook", + "filename" : "watch_quickLook-38mm@2x.png", + "size" : "86x86", + "idiom" : "watch", + "expected-size" : "172" + }, + { + "subtype" : "38mm", + "scale" : "2x", + "role" : "appLauncher", + "filename" : "watch_appLauncher-38mm@2x.png", + "size" : "40x40", + "idiom" : "watch", + "expected-size" : "80" + }, + { + "subtype" : "42mm", + "scale" : "2x", + "role" : "quickLook", + "filename" : "watch_quickLook-42mm@2x.png", + "size" : "98x98", + "idiom" : "watch", + "expected-size" : "196" + }, + { + "subtype" : "40mm", + "scale" : "2x", + "role" : "appLauncher", + "filename" : "watch_appLauncher-40mm@2x.png", + "size" : "44x44", + "idiom" : "watch", + "expected-size" : "88" + }, + { + "subtype" : "44mm", + "scale" : "2x", + "role" : "quickLook", + "filename" : "watch_quickLook-44mm@2x.png", + "size" : "108x108", + "idiom" : "watch", + "expected-size" : "216" + }, + { + "subtype" : "44mm", + "scale" : "2x", + "role" : "appLauncher", + "filename" : "watch_appLauncher-44mm@2x.png", + "size" : "50x50", + "idiom" : "watch", + "expected-size" : "100" + }, + { + "subtype" : "38mm", + "scale" : "2x", + "role" : "notificationCenter", + "filename" : "watch_notificationCenter-38mm@2x.png", + "size" : "24x24", + "idiom" : "watch", + "expected-size" : "48" + }, + { + "subtype" : "42mm", + "scale" : "2x", + "role" : "notificationCenter", + "filename" : "watch_notificationCenter-42mm@2x.png", + "size" : "27.5x27.5", + "idiom" : "watch", + "expected-size" : "55" + }, + { + "role" : "companionSettings", + "size" : "29x29", + "filename" : "watch_companionSettings-@3x.png", + "scale" : "3x", + "idiom" : "watch", + "expected-size" : "87" + }, + { + "role" : "companionSettings", + "size" : "29x29", + "filename" : "watch_companionSettings-@2x.png", + "scale" : "2x", + "idiom" : "watch", + "expected-size" : "58" + }, + { + "size" : "1024x1024", + "filename" : "watch-marketing.png", + "scale" : "1x", + "idiom" : "watch-marketing", + "expected-size" : "1024" + } + ], + "author" : "Iconizer" +} \ No newline at end of file diff --git a/VBBWatch App/Assets.xcassets/AppIcon.appiconset/watch-marketing.png b/VBBWatch App/Assets.xcassets/AppIcon.appiconset/watch-marketing.png new file mode 100644 index 0000000000000000000000000000000000000000..485e17eb5f46d8dfe4074ee73155387cce5acb6d GIT binary patch literal 150108 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 VW;0d4@PU5@y2jVauG;_hzW}F=2tfb< literal 0 HcmV?d00001 diff --git a/VBBWatch App/Assets.xcassets/AppIcon.appiconset/watch_appLauncher-38mm@2x.png b/VBBWatch App/Assets.xcassets/AppIcon.appiconset/watch_appLauncher-38mm@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..79531efd386703d40d403cca732b74869cd94f6c GIT binary patch literal 3382 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 M07*qoM6N<$g6MEphyVZp literal 0 HcmV?d00001 diff --git a/VBBWatch App/Assets.xcassets/AppIcon.appiconset/watch_appLauncher-40mm@2x.png b/VBBWatch App/Assets.xcassets/AppIcon.appiconset/watch_appLauncher-40mm@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..20bbd417993fa33ed401aaa65328cfc2a09ba9b4 GIT binary patch literal 3906 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 M07*qoM6N<$g6q2aL;wH) literal 0 HcmV?d00001 diff --git a/VBBWatch App/Assets.xcassets/AppIcon.appiconset/watch_companionSettings-@3x.png b/VBBWatch App/Assets.xcassets/AppIcon.appiconset/watch_companionSettings-@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..47fa2778ff6cfc74553c02e32c842fe4600387a4 GIT binary patch literal 3933 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 RY-Iod002ovPDHLkV1la={9gb7 literal 0 HcmV?d00001 diff --git a/VBBWatch App/Assets.xcassets/AppIcon.appiconset/watch_notificationCenter-42mm@2x.png b/VBBWatch App/Assets.xcassets/AppIcon.appiconset/watch_notificationCenter-42mm@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9f3f3531dd00b1aa267aeff2cad74e4ca655e029 GIT binary patch literal 2010 zcmV<02POE4P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91H=qLm1ONa40RR91Hvj+t07-?+R{#J9L`g(JRA>e5SEGgxG@?x{sC@e#mcQ36XU`SD|LY;ej7t#Fwr1E2)ZC5 z0f~Ir3jLrhZQpxy{r&E|JMX@EUo-c;lGvnU(H;rb;L_L*J@pyS6mkRz7-8ij?i<4sJYri%-Ei@$7bGKlg=ew zXXrM&cA&As!%|gX6BBdI%=7_>m<+wSibSH3G7j1kCd8v3=^4EuDB!so1*|6<8OtQQL6;uX{Js*D=5kITPqBvg; z=V4fn7S;1UI5p9@EiX&BChK|=mK3;Bf@~13&@cYbuw;fd;kr@0!S&+ztrai7DpU}P zsl_`I%uR}#9+zO^x>P2vNiaPovM`HU30j$4NXwGlWmv0oO^nu&AOulR$}6sx?8pwu zZrLuG;SuqnP$z&d>mY!lm9dLbzI;|HSALUV{aW|ZjglMPEy3gsSv>QVl+K@k67Jy&&#}%K zpgD|L>?`NZTsWr33cC*C{{SCE5KLT^*-s8bx%p(FrIjm6|Dm@K#+x-A8mjozYvT0} z$-*zk;6dzH4aQx@6Go=^m5W_V0g?sxRN?VwL!Q>JH*lX6_Pi)+ekQqc#Q`B+97w-> z;V10NYhlufFX(Vz3(F1*?P*mmiNAg;+U~slSdYD2QS#fKX?X7R0QAYHGX9r%S>v_j zl-#lj{bk z>K*B3pd9&-pKc5qm$!Z55SEA=)E^&=3BlBusPZEA1oxlGVtUH?hxAA{v+3cG59?h8 zT}{f6M_3}BBZG5b1jLvdKojJ%>Rf=jgre>B4Qk=l)b+5PQl=~?prJ9_tV0(QOoA@J zTQ#WbpqiaT#w3mnZD>TL!02P+nQ?p$#?Z>4%_6XU())q^WGjf%=(G-7MH%Ia{hFV; z{V%YL0b3EkbBkB%uv7>SZ(u0w6G4mJgtjO5ZjXTUNLK?IZq4t;g=!QfXVO_YTEdP7 zgiMqv%L}4zkB8iPp`67_(*=FW7Bs&y_^0$Q(XL558KEANRa;RMiQV2>L0u7;-$%b0TH z+d|$(&qYGou@XIOjC&OCuz*`@mSRZ7{B~g(m)GUUqpjG&R7;^0Y3h)yMNCpQ$+D$Q zO&@OWvT{1ZK)EH)mQ5I_xhe73u|y|k+ZrjyXc80}XRmKfJt9j1-;$+(HhZoG6+0}U z=)&<2q;%?2{feM?@QC=sTU#J@ejJQllKEpt(9&I%+|C11*!MaV!ZFG*EdB5uW7XyK zN|OI-dJ6uzAd5eIh*EG<$`?<{;*Uo=YtUu|@kxjDNSE|Oz&4;!lgMVRiFuBDiCKqW z?<*@4Y0rf#^ov%m=Q~TZM{Je40^*Ynk2gF*@kK6yqEKibp{c=^(Tq7^hglzx#!nmAjzFS9+^nemC@<@me?Zy1=cW_CSytF^qadulqMT zby6*_8#m?j`;xn;h$FxBdk%%Pboz6tT>4e~jSorgv8N*~`QD>+>N6xXp5A2iBmPA{$RlZ>;k~k_!h3F&-Tj^+&o8Scu`upa!wY$d0TS$@S(q{egD4G z-q5mRPb~tU4LIvv>Fn2q#Ge%vGXTn@rIe- z_Z-79B;t}#45qnK0Egpgv*m$t&vVPe59y`&559x^$txH}asU7T07*qoM6N<$f)iTIUjP6A literal 0 HcmV?d00001 diff --git a/VBBWatch App/Assets.xcassets/AppIcon.appiconset/watch_quickLook-38mm@2x.png b/VBBWatch App/Assets.xcassets/AppIcon.appiconset/watch_quickLook-38mm@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a4617af1cc4032192aeddb0023861661239e3a70 GIT binary patch literal 12633 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 Ub!yoD_pL!uPDQpt+9=@v0L`aSN&o-= literal 0 HcmV?d00001 diff --git a/VBBWatch App/Assets.xcassets/AppIcon.appiconset/watch_quickLook-42mm@2x.png b/VBBWatch App/Assets.xcassets/AppIcon.appiconset/watch_quickLook-42mm@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fb28c5b3d72b4452e14abcc53bf7c5e19cd8dc32 GIT binary patch literal 14450 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 literal 0 HcmV?d00001 diff --git a/VBBWatch App/Assets.xcassets/Contents.json b/VBBWatch App/Assets.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/VBBWatch App/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/VBBWatch App/Base.lproj/Interface.storyboard b/VBBWatch App/Base.lproj/Interface.storyboard new file mode 100644 index 0000000..a766c41 --- /dev/null +++ b/VBBWatch App/Base.lproj/Interface.storyboard @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/VBBWatch App/Info.plist b/VBBWatch App/Info.plist new file mode 100644 index 0000000..af76646 --- /dev/null +++ b/VBBWatch App/Info.plist @@ -0,0 +1,31 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + VBBNow + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + + WKWatchKitApp + + + diff --git a/VBBWatch Extension/Controller/HostingController.swift b/VBBWatch Extension/Controller/HostingController.swift new file mode 100644 index 0000000..f27c142 --- /dev/null +++ b/VBBWatch Extension/Controller/HostingController.swift @@ -0,0 +1,15 @@ +import CoreLocation +import Foundation +import SwiftUI +import VBBFramework +import WatchKit + +class HostingController: WKHostingController { + override init() { + super.init() + } + + override var body: ParentView { + return ParentView(presenter: ParentPresenter()) + } +} diff --git a/VBBWatch Extension/ExtensionDelegate.swift b/VBBWatch Extension/ExtensionDelegate.swift new file mode 100644 index 0000000..de53725 --- /dev/null +++ b/VBBWatch Extension/ExtensionDelegate.swift @@ -0,0 +1,17 @@ +import Foundation +import VBBFramework +import WatchKit + +class ExtensionDelegate: NSObject, WKExtensionDelegate { + func applicationDidFinishLaunching() { + VBBPersistanceManager.trim() + } + + func applicationDidBecomeActive() { + NotificationCenter.default.post(name: .active, object: self) + } + + func applicationWillResignActive() { + NotificationCenter.default.post(name: .resign, object: self) + } +} diff --git a/VBBWatch Extension/Extensions/NSNotification-Extensions.swift b/VBBWatch Extension/Extensions/NSNotification-Extensions.swift new file mode 100644 index 0000000..16fbffc --- /dev/null +++ b/VBBWatch Extension/Extensions/NSNotification-Extensions.swift @@ -0,0 +1,6 @@ +import Foundation + +extension NSNotification.Name { + static let active = NSNotification.Name("applicationDidBecomeActive") + static let resign = NSNotification.Name("applicationWillResignActive") +} diff --git a/VBBWatch Extension/Extensions/TimeInterval-Extension.swift b/VBBWatch Extension/Extensions/TimeInterval-Extension.swift new file mode 100644 index 0000000..22114b0 --- /dev/null +++ b/VBBWatch Extension/Extensions/TimeInterval-Extension.swift @@ -0,0 +1,6 @@ +import Foundation + +extension TimeInterval { + static let backgroundInterval: TimeInterval = 60 * 10 + static let deparuteUpdateInterval: TimeInterval = 60 +} diff --git a/VBBWatch Extension/Extensions/VBBDeparture-Extension.swift b/VBBWatch Extension/Extensions/VBBDeparture-Extension.swift new file mode 100644 index 0000000..f270c2d --- /dev/null +++ b/VBBWatch Extension/Extensions/VBBDeparture-Extension.swift @@ -0,0 +1,5 @@ +import Foundation +import SwiftUI +import VBBFramework + +extension VBBDepature: Identifiable {} diff --git a/VBBWatch Extension/Extensions/VBBLine-Extension.swift b/VBBWatch Extension/Extensions/VBBLine-Extension.swift new file mode 100644 index 0000000..4765832 --- /dev/null +++ b/VBBWatch Extension/Extensions/VBBLine-Extension.swift @@ -0,0 +1,25 @@ +import Foundation +import SwiftUI +import UIKit +import VBBFramework + +extension VBBLineType { + var assetsName: String { + switch self { + case .sBahn: + return "SBahn" + case .uBahn: + return "UBahn" + case .tram: + return "Tram" + case .bus: + return "Bus" + case .metro: + return "Metro" + case .bahn: + return "Train" + @unknown default: + fatalError() + } + } +} diff --git a/VBBWatch Extension/Extensions/VBBNetworkStatus-Extension.swift b/VBBWatch Extension/Extensions/VBBNetworkStatus-Extension.swift new file mode 100644 index 0000000..bec93e5 --- /dev/null +++ b/VBBWatch Extension/Extensions/VBBNetworkStatus-Extension.swift @@ -0,0 +1,21 @@ +import Foundation +import VBBFramework + +extension VBBNetworkStatus { + var statusText: String { + let localizedKey: String + switch self { + case .geocoding: + localizedKey = "STATUS_GEOCODING" + case .loading: + localizedKey = "STATUS_LOADING_STATIONS" + case .loadingDetails: + localizedKey = "STATUS_LOADING_STATIONS_DETAILS" + case .failed: + localizedKey = "STATUS_FAILED" + default: + localizedKey = "STATUS_LOADING_UNKNOWN" + } + return NSLocalizedString(localizedKey, comment: "") + } +} diff --git a/VBBWatch Extension/Extensions/VBBStation-Extension.swift b/VBBWatch Extension/Extensions/VBBStation-Extension.swift new file mode 100644 index 0000000..03a30cc --- /dev/null +++ b/VBBWatch Extension/Extensions/VBBStation-Extension.swift @@ -0,0 +1,5 @@ +import Foundation +import SwiftUI +import VBBFramework + +extension VBBStation: Identifiable {} diff --git a/VBBWatch Extension/Extensions/View-Gradient.swift b/VBBWatch Extension/Extensions/View-Gradient.swift new file mode 100644 index 0000000..cec24be --- /dev/null +++ b/VBBWatch Extension/Extensions/View-Gradient.swift @@ -0,0 +1,21 @@ +import Foundation +import SwiftUI +import VBBFramework + +extension View { + func gradientColor(_ type: VBBLineType, + cornerRadius _: CGFloat = 8.0, + intensity: Double = 0.7) -> some View { + return gradientColor(Color(VBBLine.assetName(for: type), bundle: Bundle.framework), + intensity: intensity) + } + + func gradientColor(_ color: Color, + cornerRadius: CGFloat = 8.0, + intensity: Double = 0.7) -> some View { + background(LinearGradient(gradient: Gradient(colors: [color.opacity(intensity), color]), + startPoint: .top, endPoint: .bottom)) + .background(Color.white) + .cornerRadius(cornerRadius) + } +} diff --git a/VBBWatch Extension/Presenter/DepartureListPresenter.swift b/VBBWatch Extension/Presenter/DepartureListPresenter.swift new file mode 100644 index 0000000..f419824 --- /dev/null +++ b/VBBWatch Extension/Presenter/DepartureListPresenter.swift @@ -0,0 +1,152 @@ +import Combine +import CoreLocation +import Foundation +import SwiftUI +import VBBFramework + +final class DepartureListPresenter: NSObject, ObservableObject { + var objectWillChange = PassthroughSubject() + private let networkManager = VBBNetworkManager() + private let locationManager = CLLocationManager() + private var timer: Timer? + private var lastFetch: Date? + private var observer: NSKeyValueObservation? + + private var departures: [VBBStation: [VBBDepature]] = [:] + + @Published var stations: [VBBStation] = [] { + didSet { + objectWillChange.send() + } + } + + @Published var location: VBBLocation? { + didSet { + objectWillChange.send() + } + } + + var status: VBBNetworkStatus { + return networkManager.status + } + + var isLoading: Bool { + let states: [VBBNetworkStatus] = [.geocoding, .loading, .loadingDetails] + return states.contains(self.status) + } + + override init() { + super.init() + NotificationCenter.default.addObserver(self, selector: #selector(didBecomeActive), name: .active, object: nil) + + locationManager.delegate = self + locationManager.desiredAccuracy = kCLLocationAccuracyThreeKilometers + + configureTimer() + updateProperties() + observer = networkManager.observe(\.status) { [weak self] _, _ in + DispatchQueue.main.async { self?.objectWillChange.send() } + } + } + + func update() { + locationManager.requestLocation() + } + + @objc func didBecomeActive() { + updateProperties() + + let lastTimeInterval = fabs(lastFetch?.timeIntervalSinceNow ?? 0) + if lastTimeInterval > .backgroundInterval { + fetch() + } + } + + deinit { + timer?.invalidate() + observer?.invalidate() + } +} + +extension DepartureListPresenter { + func departures(_ station: VBBStation) -> [VBBDepature] { + return departures[station] ?? [] + } +} + +private extension DepartureListPresenter { + func updateProperties() { + guard let location = VBBPersistanceManager.manager.storedLocation else { + return + } + + let stations = VBBStation.sort(byRelevance: location, andLimit: 3) + stations.forEach { station in + let lines = station.lines.mapItems().compactMap { $0 as? VBBLine } + var departures = lines.compactMap { + $0.departures.mapItems().compactMap { $0 as? VBBDepature } + .sorted(by: { (firstDeparture, secondDeparture) -> Bool in + firstDeparture.arrivalDate < secondDeparture.arrivalDate + }).filter { + $0.arrivalDate > Date() + }.first + } + + departures.sort { (firstDeparture, secondDeparture) -> Bool in + let firstType = firstDeparture.line?.lineType() ?? .uBahn + let secondType = secondDeparture.line?.lineType() ?? .uBahn + let firstArrival = firstDeparture.arrivalDate + let secondArrival = secondDeparture.arrivalDate + return firstType == secondType ? firstArrival < secondArrival : firstType.rawValue < secondType.rawValue + } + + self.departures[station] = departures + } + + self.stations = stations + } + + func fetch() { + let storedLocation = VBBPersistanceManager.manager.storedLocation + let currentLocation = locationManager.location ?? storedLocation?.location + + guard let location = currentLocation, status == .finished || status == .failed else { + return + } + + networkManager.fetchNearedStations(location) { [weak self] _, location in + guard let location = location else { + return + } + self?.lastFetch = Date() + self?.location = location + self?.updateProperties() + } + } + + func configureTimer() { + let components = Calendar.current.component(.second, from: Date()) + let refreshInterval = 60.0 - TimeInterval(components) + 1 + + timer?.invalidate() + timer = Timer.scheduledTimer(withTimeInterval: refreshInterval, repeats: false, block: { [weak self] _ in + self?.updateProperties() + self?.configureTimer() + }) + } +} + +extension DepartureListPresenter: CLLocationManagerDelegate { + func locationManager(_: CLLocationManager, didUpdateLocations _: [CLLocation]) { + fetch() + } + + func locationManager(_: CLLocationManager, didFailWithError _: Error) { + fetch() + } + + func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) { + guard status == .authorizedWhenInUse else { return } + manager.requestLocation() + } +} diff --git a/VBBWatch Extension/Presenter/DeparturePresenter.swift b/VBBWatch Extension/Presenter/DeparturePresenter.swift new file mode 100644 index 0000000..7642db0 --- /dev/null +++ b/VBBWatch Extension/Presenter/DeparturePresenter.swift @@ -0,0 +1,58 @@ +import Combine +import Foundation +import SwiftUI +import VBBFramework + +final class DeparturePresenter: ObservableObject { + var objectWillChange = PassthroughSubject() + var timeMinutesText: String = "" + var timeUnitsText: String = "" + var lineEnd: String = "" + var lineName: String = "" + var stationName: String = "" + var timer: Timer? + + var lineImage: Image? + var lineType: VBBLineType = .bahn + var departure: VBBDepature? + var station: VBBStation? + + init(departure: VBBDepature?) { + self.departure = departure + configureContent() + configureTimer() + } + + deinit { + timer?.invalidate() + } +} + +private extension DeparturePresenter { + func configureTimer() { + timer = Timer.scheduledTimer(withTimeInterval: .deparuteUpdateInterval, repeats: false, block: { [weak self] _ in + self?.configureContent() + self?.configureTimer() + }) + } + + func configureContent() { + station = departure?.station.firstObject() as? VBBStation + lineType = departure?.line?.lineType() ?? .bus + + let assetName = VBBLine.assetName(for: lineType) + let departureInterval = departure?.arrivalDate.timeIntervalSince(Date()) ?? 0 + let timeComponents = DateComponentsFormatter.time.string(from: departureInterval)? + .components(separatedBy: " ") ?? [String]() + + stationName = station?.stationName ?? "" + lineName = departure?.line?.lineName ?? "" + lineImage = Image(assetName, bundle: Bundle.framework) + lineEnd = "▶︎ \(departure?.line?.lineEnd ?? "Osloer Straße")" + + timeMinutesText = timeComponents.first ?? "2" + timeUnitsText = timeComponents.last ?? "min" + + objectWillChange.send() + } +} diff --git a/VBBWatch Extension/Presenter/LinePresenter.swift b/VBBWatch Extension/Presenter/LinePresenter.swift new file mode 100644 index 0000000..a682599 --- /dev/null +++ b/VBBWatch Extension/Presenter/LinePresenter.swift @@ -0,0 +1,29 @@ +import Combine +import Foundation +import Realm +import VBBFramework + +final class LinePresenter: ObservableObject { + var objectWillChange = PassthroughSubject() + var departures: [VBBDepature] = [] + var notificationToken: RLMNotificationToken? + let lineName: String + + init(departure: VBBDepature?) { + let station = departure?.station.firstObject() as? VBBStation + lineName = station?.stationName ?? "" + + if let station = station { + let predicate = NSPredicate(format: "scheduledDate > %@ AND (ANY station == %@)", NSDate(), station) + let sortDescriptor = [RLMSortDescriptor(keyPath: #keyPath(VBBDepature.scheduledDate), ascending: true)] + let results = VBBDepature.objects(with: predicate).sortedResults(using: sortDescriptor) + notificationToken = results.addNotificationBlock { [weak self] results, _, _ in + self?.departures = results?.mapItems().compactMap { $0 as? VBBDepature } ?? [] + } + } + } + + deinit { + notificationToken?.invalidate() + } +} diff --git a/VBBWatch Extension/Presenter/OnboardingPresenter.swift b/VBBWatch Extension/Presenter/OnboardingPresenter.swift new file mode 100644 index 0000000..514f950 --- /dev/null +++ b/VBBWatch Extension/Presenter/OnboardingPresenter.swift @@ -0,0 +1,28 @@ +import Combine +import Foundation +import SwiftUI +import VBBFramework + +final class OnboardingPresenter: ObservableObject { + enum Page: Int, CaseIterable, Identifiable { + case welcome + case description + case permission + + var id: Int { + return rawValue + } + } + + @Published var currentPage: Page = .welcome + let locationManager = CLLocationManager() + + func next() { + switch currentPage { + case .welcome: + currentPage = .description + case .description, .permission: + currentPage = .permission + } + } +} diff --git a/VBBWatch Extension/Presenter/ParentPresenter.swift b/VBBWatch Extension/Presenter/ParentPresenter.swift new file mode 100644 index 0000000..4f11c36 --- /dev/null +++ b/VBBWatch Extension/Presenter/ParentPresenter.swift @@ -0,0 +1,28 @@ +import Combine +import CoreLocation +import Foundation +import SwiftUI +import VBBFramework + +final class ParentPresenter: NSObject, ObservableObject { + private let locationManager = CLLocationManager() + var objectWillChange = PassthroughSubject() + + @Published var permission: CLAuthorizationStatus = .notDetermined { + didSet { + objectWillChange.send(()) + } + } + + public override init() { + super.init() + permission = CLLocationManager.authorizationStatus() + locationManager.delegate = self + } +} + +extension ParentPresenter: CLLocationManagerDelegate { + public func locationManager(_: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) { + permission = status + } +} diff --git a/VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Circular.imageset/Contents.json b/VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Circular.imageset/Contents.json new file mode 100644 index 0000000..aefef29 --- /dev/null +++ b/VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Circular.imageset/Contents.json @@ -0,0 +1,28 @@ +{ + "images" : [ + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : "<=145" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">161" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">145" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">183" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Contents.json b/VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Contents.json new file mode 100644 index 0000000..1571c7e --- /dev/null +++ b/VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Contents.json @@ -0,0 +1,48 @@ +{ + "assets" : [ + { + "idiom" : "watch", + "filename" : "Circular.imageset", + "role" : "circular" + }, + { + "idiom" : "watch", + "filename" : "Extra Large.imageset", + "role" : "extra-large" + }, + { + "idiom" : "watch", + "filename" : "Graphic Bezel.imageset", + "role" : "graphic-bezel" + }, + { + "idiom" : "watch", + "filename" : "Graphic Circular.imageset", + "role" : "graphic-circular" + }, + { + "idiom" : "watch", + "filename" : "Graphic Corner.imageset", + "role" : "graphic-corner" + }, + { + "idiom" : "watch", + "filename" : "Graphic Large Rectangular.imageset", + "role" : "graphic-large-rectangular" + }, + { + "idiom" : "watch", + "filename" : "Modular.imageset", + "role" : "modular" + }, + { + "idiom" : "watch", + "filename" : "Utilitarian.imageset", + "role" : "utilitarian" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Extra Large.imageset/Contents.json b/VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Extra Large.imageset/Contents.json new file mode 100644 index 0000000..aefef29 --- /dev/null +++ b/VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Extra Large.imageset/Contents.json @@ -0,0 +1,28 @@ +{ + "images" : [ + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : "<=145" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">161" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">145" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">183" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Graphic Bezel.imageset/Contents.json b/VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Graphic Bezel.imageset/Contents.json new file mode 100644 index 0000000..aefef29 --- /dev/null +++ b/VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Graphic Bezel.imageset/Contents.json @@ -0,0 +1,28 @@ +{ + "images" : [ + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : "<=145" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">161" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">145" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">183" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Graphic Circular.imageset/Contents.json b/VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Graphic Circular.imageset/Contents.json new file mode 100644 index 0000000..aefef29 --- /dev/null +++ b/VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Graphic Circular.imageset/Contents.json @@ -0,0 +1,28 @@ +{ + "images" : [ + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : "<=145" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">161" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">145" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">183" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Graphic Corner.imageset/Contents.json b/VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Graphic Corner.imageset/Contents.json new file mode 100644 index 0000000..aefef29 --- /dev/null +++ b/VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Graphic Corner.imageset/Contents.json @@ -0,0 +1,28 @@ +{ + "images" : [ + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : "<=145" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">161" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">145" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">183" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Graphic Large Rectangular.imageset/Contents.json b/VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Graphic Large Rectangular.imageset/Contents.json new file mode 100644 index 0000000..aefef29 --- /dev/null +++ b/VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Graphic Large Rectangular.imageset/Contents.json @@ -0,0 +1,28 @@ +{ + "images" : [ + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : "<=145" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">161" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">145" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">183" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Modular.imageset/Contents.json b/VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Modular.imageset/Contents.json new file mode 100644 index 0000000..aefef29 --- /dev/null +++ b/VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Modular.imageset/Contents.json @@ -0,0 +1,28 @@ +{ + "images" : [ + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : "<=145" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">161" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">145" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">183" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Utilitarian.imageset/Contents.json b/VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Utilitarian.imageset/Contents.json new file mode 100644 index 0000000..aefef29 --- /dev/null +++ b/VBBWatch Extension/Support Files/Assets.xcassets/Complication.complicationset/Utilitarian.imageset/Contents.json @@ -0,0 +1,28 @@ +{ + "images" : [ + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : "<=145" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">161" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">145" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">183" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/VBBWatch Extension/Support Files/Assets.xcassets/Contents.json b/VBBWatch Extension/Support Files/Assets.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/VBBWatch Extension/Support Files/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/VBBWatch Extension/Support Files/Assets.xcassets/Location.imageset/Contents.json b/VBBWatch Extension/Support Files/Assets.xcassets/Location.imageset/Contents.json new file mode 100644 index 0000000..2726d44 --- /dev/null +++ b/VBBWatch Extension/Support Files/Assets.xcassets/Location.imageset/Contents.json @@ -0,0 +1,16 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "Location.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template", + "preserves-vector-representation" : true + } +} \ No newline at end of file diff --git a/VBBWatch Extension/Support Files/Assets.xcassets/Location.imageset/Location.pdf b/VBBWatch Extension/Support Files/Assets.xcassets/Location.imageset/Location.pdf new file mode 100644 index 0000000000000000000000000000000000000000..61c31d3f2ddb39180f1f808f8309dd2d58eb443a GIT binary patch literal 3967 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 literal 0 HcmV?d00001 diff --git a/VBBWatch Extension/Support Files/English.lproj/Localizable.strings b/VBBWatch Extension/Support Files/English.lproj/Localizable.strings new file mode 100644 index 0000000..4b2cb96 --- /dev/null +++ b/VBBWatch Extension/Support Files/English.lproj/Localizable.strings @@ -0,0 +1,7 @@ +/* + Localizable.strings + VBB + + Created by Dennis Oberhoff on 04.08.19. + Copyright © 2019 Dennis Oberhoff. All rights reserved. +*/ diff --git a/VBBWatch Extension/Support Files/Info.plist b/VBBWatch Extension/Support Files/Info.plist new file mode 100644 index 0000000..ee1735c --- /dev/null +++ b/VBBWatch Extension/Support Files/Info.plist @@ -0,0 +1,67 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + VBBNow Extension + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + MKDirectionsApplicationSupportedModes + + NSAppTransportSecurity + + NSExceptionDomains + + fahrinfo.vbb.de + + NSExceptionAllowsInsecureHTTPLoads + + NSExceptionRequiresForwardSecrecy + + NSIncludesSubdomains + + + + + NSExtension + + NSExtensionAttributes + + WKAppBundleIdentifier + com.obrhoff.VBBWatch.watchkitapp + + NSExtensionPointIdentifier + com.apple.watchkit + + NSLocationAlwaysAndWhenInUseUsageDescription + Text + NSLocationWhenInUseUsageDescription + Text + UIBackgroundModes + + location + + WKBackgroundModes + + alarm + + WKExtensionDelegateClassName + $(PRODUCT_MODULE_NAME).ExtensionDelegate + WKWatchOnly + + + diff --git a/VBBWatch Extension/Support Files/Preview Content/Preview Assets.xcassets/Contents.json b/VBBWatch Extension/Support Files/Preview Content/Preview Assets.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/VBBWatch Extension/Support Files/Preview Content/Preview Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/VBBWatch Extension/Support Files/de.lproj/Localizable.strings b/VBBWatch Extension/Support Files/de.lproj/Localizable.strings new file mode 100644 index 0000000..baac788 --- /dev/null +++ b/VBBWatch Extension/Support Files/de.lproj/Localizable.strings @@ -0,0 +1,23 @@ +/* + Localizable.strings + VBB + + Created by Dennis Oberhoff on 04.08.19. + Copyright © 2019 Dennis Oberhoff. All rights reserved. +*/ + +"NEXT" = "Weiter"; +"ALLOW" = "Erlauben"; + +"VBBNOW_TITLE" = "VBB"; +"VBBNOW_TITLE_PERMISSIONS" = "Erlaubnis"; +"VBBNOW_INTRODUCTION_TEXT" = "Wilkommen VBBNow."; +"VBBNOW_INTRODUCTION_DETAIL_TEXT" = "VBBNow zeigt dir in Echtzeit die Abfahrtzeiten des Nahverkehrs in deiner Nähe an."; +"VBBNOW_INTRODUCTION_PERMISSION_TEXT" = "Damit VBBNow funktioniert, braucht es einen Zugang zu einer Umgebung."; + +"STATUS_GEOCODING" = "Geocoding..."; +"STATUS_LOADING_STATIONS" = "Lade Stationen"; +"STATUS_LOADING_STATIONS_DETAILS" = "Lade Stationsdetails"; +"STATUS_FAILED" = "Fehler :("; +"STATUS_LOADING_UNKNOWN" = "Unbekannter Standort"; +"STATUS_RELOAD" = "Stationen Neuladen"; diff --git a/VBBWatch Extension/Support Files/en.lproj/Localizable.strings b/VBBWatch Extension/Support Files/en.lproj/Localizable.strings new file mode 100644 index 0000000..1cc4356 --- /dev/null +++ b/VBBWatch Extension/Support Files/en.lproj/Localizable.strings @@ -0,0 +1,25 @@ +/* + Localizable.strings + VBB + + Created by Dennis Oberhoff on 04.08.19. + Copyright © 2019 Dennis Oberhoff. All rights reserved. +*/ + +"NEXT" = "Next"; +"ALLOW" = "Allow"; + +"VBBNOW_TITLE" = "VBB"; +"VBBNOW_TITLE_PERMISSIONS" = "Permissions"; +"VBBNOW_INTRODUCTION_TEXT" = "Welcome to VBBNow. A Transit App for Berlin/Brandenburg."; +"VBBNOW_INTRODUCTION_DETAIL_TEXT" = "VBBNow shows you realtime departure times in Berlin/Brandenburg."; +"VBBNOW_INTRODUCTION_PERMISSION_TEXT" = "VBBNow work only with access to your location."; + +"STATUS_GEOCODING" = "Geocoding..."; +"STATUS_LOADING_STATIONS" = "Loading stations"; +"STATUS_LOADING_STATIONS_DETAILS" = "Loading station details"; +"STATUS_FAILED" = "Failed :("; +"STATUS_LOADING_UNKNOWN" = "Unknown Location"; +"STATUS_RELOAD" = "Refresh Stations"; + +"NO_STATIONS" = "No Stations around you."; diff --git a/VBBWatch Extension/Views/DepartureListView.swift b/VBBWatch Extension/Views/DepartureListView.swift new file mode 100644 index 0000000..76c8573 --- /dev/null +++ b/VBBWatch Extension/Views/DepartureListView.swift @@ -0,0 +1,104 @@ +import SwiftUI +import VBBFramework + +struct DepartureListView: View { + @ObservedObject var presenter: DepartureListPresenter + + var body: some View { + Group { + if !self.presenter.stations.isEmpty { + self.listView + } else if self.presenter.status == .loading { + self.loadingView + } else { + self.emptyView + } + }.navigationBarTitle("VBBNow").onAppear { + self.presenter.didBecomeActive() + }.contextMenu(menuItems: { + Button(action: { + self.presenter.update() + }, label: { + VStack { + Image(systemName: "arrow.clockwise") + .font(.title) + Text("STATUS_RELOAD") + } + }) + }) + } +} + +private extension DepartureListView { + var listView: some View { + List { + Group { + if self.presenter.isLoading { + HStack(alignment: .center) { + Spacer() + LoadingView(strokeBackgroundColor: .clear, + lineColor: .white) + .frame(width: 22, height: 22, alignment: .center) + Spacer() + } + } + + ForEach(self.presenter.stations) { (station: VBBStation) in + Section(header: Text(station.stationName) + .font(.footnote)) { + ForEach(self.presenter.departures(station)) { (departure: VBBDepature) in + NavigationLink(destination: LineView(presenter: LinePresenter(departure: departure))) { + DepartureView(presenter: DeparturePresenter(departure: departure)) + } + .listRowInsets(EdgeInsets(top: 4, leading: 0, bottom: 4, trailing: 0)) + }.navigationBarTitle(Text(station.stationName)) + } + } + + }.listRowPlatterColor(.clear) + + }.listStyle(CarouselListStyle()) + } + + var loadingView: some View { + VStack { + LoadingView(strokeBackgroundColor: .clear, lineColor: .white) + .frame(width: 22, height: 22, alignment: .center) + Text(self.loadingTitle) + .multilineTextAlignment(.center) + .lineLimit(2) + .minimumScaleFactor(0.75) + } + } + + var emptyView: some View { + VStack { + Image(systemName: "location.slash.fill") + .font(.title) + .foregroundColor(.primary) + + Text("NO_STATIONS") + .font(.subheadline) + .foregroundColor(.secondary) + .multilineTextAlignment(.center) + } + .padding() + } + + var loadingTitle: String { + switch presenter.status { + case .finished: + return presenter.location?.address ?? presenter.status.statusText + default: + return presenter.status.statusText + } + } +} + +#if DEBUG + struct DepartureList_Previews: PreviewProvider { + static var previews: some View { + DepartureListView(presenter: DepartureListPresenter()) + } + } +#endif diff --git a/VBBWatch Extension/Views/DepartureView.swift b/VBBWatch Extension/Views/DepartureView.swift new file mode 100644 index 0000000..7bbcb3e --- /dev/null +++ b/VBBWatch Extension/Views/DepartureView.swift @@ -0,0 +1,41 @@ +import Foundation +import SwiftUI +import VBBFramework + +struct DepartureView: View { + @ObservedObject var presenter: DeparturePresenter + + var body: some View { + HStack(alignment: .center) { + (Text(presenter.timeMinutesText) + .font(.system(size: 24, design: .rounded)).bold() + + Text("\n") + + Text(presenter.timeUnitsText).font(.subheadline)) + .multilineTextAlignment(.center) + Divider() + VStack(alignment: .leading, spacing: 2) { + Text(presenter.lineName) + .font(.system(size: 26, design: .rounded)) + .bold() + .minimumScaleFactor(0.8) + Divider() + Text(presenter.lineEnd) + .font(.system(size: 16, design: .default)) + .lineLimit(3) + .truncationMode(.tail) + } + } + .padding() + .frame(idealWidth: 90) + .gradientColor(presenter.lineType) + .drawingGroup() + } +} + +#if DEBUG + struct DepartureView_Previews: PreviewProvider { + static var previews: some View { + DepartureView(presenter: DeparturePresenter(departure: nil)) + } + } +#endif diff --git a/VBBWatch Extension/Views/LineView.swift b/VBBWatch Extension/Views/LineView.swift new file mode 100644 index 0000000..5cdab7a --- /dev/null +++ b/VBBWatch Extension/Views/LineView.swift @@ -0,0 +1,27 @@ +import Foundation +import Realm +import SwiftUI +import VBBFramework + +struct LineView: View { + @ObservedObject var presenter: LinePresenter + + var body: some View { + List { + ForEach(presenter.departures) { departure in + DepartureView(presenter: DeparturePresenter(departure: departure)) + .listRowPlatterColor(.clear) + .listRowInsets(EdgeInsets(top: 4, leading: 0, bottom: 4, trailing: 0)) + .fixedSize(horizontal: false, vertical: true) + } + }.navigationBarTitle(Text(self.presenter.lineName)) + } +} + +#if DEBUG + struct LineView_Previews: PreviewProvider { + static var previews: some View { + LineView(presenter: LinePresenter(departure: nil)) + } + } +#endif diff --git a/VBBWatch Extension/Views/LoadingView.swift b/VBBWatch Extension/Views/LoadingView.swift new file mode 100644 index 0000000..7b5be05 --- /dev/null +++ b/VBBWatch Extension/Views/LoadingView.swift @@ -0,0 +1,28 @@ +import SwiftUI + +struct LoadingView: View { + @State private var animate = false + @State var strokeWidth: CGFloat = 4 + @State var duration: TimeInterval = 1.25 + @State var strokeBackgroundColor: Color = .clear + @State var lineColor: Color = .white + + var body: some View { + ZStack { + Circle() + .stroke(Color.purple, lineWidth: strokeWidth) + .opacity(0.2) + + Circle() + .trim(from: 1 / 8, to: 1 / 2) + .stroke(lineColor, lineWidth: strokeWidth) + .rotationEffect(.degrees(animate ? 1 : -360), anchor: .center) + .animation(Animation.linear(duration: duration).repeatForever(autoreverses: false)) + } + .padding(2) + .drawingGroup() + .onAppear { + self.animate.toggle() + } + } +} diff --git a/VBBWatch Extension/Views/OnboardingView.swift b/VBBWatch Extension/Views/OnboardingView.swift new file mode 100644 index 0000000..6a7e68f --- /dev/null +++ b/VBBWatch Extension/Views/OnboardingView.swift @@ -0,0 +1,125 @@ +import Combine +import Foundation +import SwiftUI +import VBBFramework + +struct OnboardingView: View { + @ObservedObject var presenter: OnboardingPresenter + + init(presenter: OnboardingPresenter = OnboardingPresenter()) { + self.presenter = presenter + } + + var body: some View { + ScrollView { + ZStack { + ForEach([self.presenter.currentPage]) { page in + OnboardingPageView(title: page.title, + subtitle: page.subtitle, + buttonTitle: page.buttonTitle, + lineType: page.lineType) { + switch page { + case .welcome, .description: + self.presenter.next() + case .permission: + self.presenter.locationManager.requestWhenInUseAuthorization() + } + } + }.transition(.asymmetric(insertion: .move(edge: .trailing), removal: .move(edge: .leading))) + } + } + } +} + +struct OnboardingPageView: View { + let title: LocalizedStringKey + let subtitle: LocalizedStringKey + let buttonTitle: LocalizedStringKey + let lineType: VBBLineType + let primaryAction: () -> Void + + init(title: LocalizedStringKey, subtitle: LocalizedStringKey, buttonTitle: LocalizedStringKey, lineType: VBBLineType, primaryAction: @escaping (() -> Void)) { + self.title = title + self.subtitle = subtitle + self.lineType = lineType + self.buttonTitle = buttonTitle + self.primaryAction = primaryAction + } + + var body: some View { + VStack { + Text(title) + .foregroundColor(.primary) + .font(.system(size: 24, design: .rounded)) + .bold() + + Text(subtitle) + .foregroundColor(.secondary) + .font(.body) + .multilineTextAlignment(.center) + + Button(action: self.primaryAction) { + Text(self.buttonTitle) + }.gradientColor(self.lineType) + }.padding() + } +} + +private extension OnboardingPresenter.Page { + var title: LocalizedStringKey { + switch self { + case .welcome, .description: + return "VBBNOW_TITLE" + case .permission: + return "VBBNOW_TITLE_PERMISSIONS" + } + } + + var subtitle: LocalizedStringKey { + switch self { + case .welcome: + return "VBBNOW_INTRODUCTION_TEXT" + case .description: + return "VBBNOW_INTRODUCTION_DETAIL_TEXT" + case .permission: + return "VBBNOW_INTRODUCTION_PERMISSION_TEXT" + } + } + + var buttonTitle: LocalizedStringKey { + switch self { + case .welcome, .description: + return "NEXT" + case .permission: + return "ALLOW" + } + } + + var lineType: VBBLineType { + switch self { + case .welcome: + return .uBahn + case .permission: + return .bus + case .description: + return .tram + } + } +} + +#if DEBUG + struct OnboardingView_Previews: PreviewProvider { + static var previews: some View { + OnboardingView() + } + } + + struct OnboardingPageView_Previews: PreviewProvider { + static var previews: some View { + OnboardingPageView(title: "Title", + subtitle: "This is a title with nothing to mean", + buttonTitle: "Text", lineType: .metro, + primaryAction: {}) + } + } +#endif diff --git a/VBBWatch Extension/Views/ParentView.swift b/VBBWatch Extension/Views/ParentView.swift new file mode 100644 index 0000000..3826b8c --- /dev/null +++ b/VBBWatch Extension/Views/ParentView.swift @@ -0,0 +1,26 @@ + +import Combine +import SwiftUI +import VBBFramework + +struct ParentView: View { + @ObservedObject var presenter: ParentPresenter + + var body: some View { + Group { + if presenter.permission == .authorizedWhenInUse { + DepartureListView(presenter: DepartureListPresenter()) + } else { + OnboardingView() + } + }.animation(.default) + } +} + +#if DEBUG + struct ParentView_Previews: PreviewProvider { + static var previews: some View { + ParentView(presenter: ParentPresenter()) + } + } +#endif