From eb0256a45a403143771ff45cc6aa5c35532faff9 Mon Sep 17 00:00:00 2001 From: Vin Bui Date: Wed, 10 Apr 2024 03:23:45 -0400 Subject: [PATCH] Add Apollo --- .gitignore | 4 + .swiftlint.yml | 1 + LICENSE | 21 - Podfile | 16 +- Podfile.lock | 223 ++- README.md | 69 +- Siri/Base.lproj/Intents.intentdefinition | 128 -- Siri/Info.plist | 42 - Siri/IntentHandler.swift | 32 - Siri/en.lproj/Intents.intentdefinition | 128 -- Siri/en.lproj/Intents.strings | 6 - TCAT.xcodeproj/project.pbxproj | 1538 +++++++---------- .../xcshareddata/xcschemes/Siri.xcscheme | 106 -- .../xcshareddata/xcschemes/TCATTests.xcscheme | 52 - .../xcschemes/Today Extension Debug.xcscheme | 107 -- .../Today Extension Release.xcscheme | 107 -- TCAT/{ => Base}/AppDelegate.swift | 40 +- .../LaunchScreen.storyboard | 0 .../AddFavoritesCollectionViewCell.swift | 0 .../NotificationToggleTableViewCell.swift | 0 .../ParentHomeViewController.swift | 12 +- .../RouteOptionsViewController.swift | 15 - .../SearchResultsViewController.swift | 1 - TCAT/Ecosystem/ApolloClientProtocol.swift | 79 + TCAT/Ecosystem/ApolloNetwork.swift | 18 + TCAT/Ecosystem/Publishers.swift | 151 ++ TCAT/Ecosystem/UpliftQueries.graphql | 50 + TCAT/{ => Models}/AppleSearchResponse.swift | 0 TCAT/{Model => Models}/BusLocation.swift | 0 TCAT/{Model => Models}/BusPath.swift | 0 TCAT/{Model => Models}/Direction.swift | 0 TCAT/{Model => Models}/LocationObject.swift | 0 TCAT/{Model => Models}/Place.swift | 0 TCAT/{ => Models}/PlaceCoordinates.swift | 0 TCAT/{Model => Models}/Route.swift | 0 TCAT/{ => Models}/SearchManager.swift | 0 TCAT/{Model => Models}/Section.swift | 0 TCAT/{Model => Models}/ServiceAlert.swift | 0 TCAT/{Model => Models}/WalkPath.swift | 0 TCAT/{Model => Models}/Waypoint.swift | 0 TCAT/Network/Endpoints.swift | 2 +- TCAT/Supporting Files/TCAT.entitlements | 12 - .../Constants.swift | 0 .../Fonts/SFProDisplay-Bold.otf | Bin .../Fonts/SFProDisplay-Medium.otf | Bin .../Fonts/SFProDisplay-Regular.otf | Bin .../Fonts/SFProDisplay-Semibold.otf | Bin .../Fonts/SFUIText-Bold.otf | Bin .../Fonts/SFUIText-Medium.otf | Bin .../Fonts/SFUIText-Regular.otf | Bin .../Fonts/SFUIText-Semibold.otf | Bin .../Info.plist | 0 .../Supporting/TCAT.entitlements | 0 .../{ => Supporting}/TransitEnvironment.swift | 69 +- TCAT/Utilities/Network.swift | 362 ---- TCAT/{Utilities => Utils}/Analytics.swift | 1 - TCAT/{Utilities => Utils}/AppShortcuts.swift | 0 TCAT/{Utilities => Utils}/EventPayload.swift | 0 .../{Utilities => Utils}/Extensions+App.swift | 0 .../Extensions+Shared.swift | 0 .../JSONFileManager.swift | 0 TCAT/{Utilities => Utils}/Loader.swift | 0 TCAT/{Utilities => Utils}/Phrases.swift | 0 .../SearchTableViewHelpers.swift | 0 TCAT/{Utilities => Utils}/Shared.swift | 0 .../StoreReviewHelper.swift | 0 TCAT/{Utilities => Utils}/Styles.swift | 0 TCAT/{Utilities => Utils}/Time.swift | 0 TCAT/{ => Views}/NotificationBannerView.swift | 0 TCATTests/Info.plist | 24 - TCATTests/RetainTest.swift | 57 - TCATTests/TCATTests.swift | 53 - ci_scripts/ci_post_clone.sh | 28 +- 73 files changed, 1183 insertions(+), 2371 deletions(-) delete mode 100644 LICENSE delete mode 100644 Siri/Base.lproj/Intents.intentdefinition delete mode 100644 Siri/Info.plist delete mode 100644 Siri/IntentHandler.swift delete mode 100644 Siri/en.lproj/Intents.intentdefinition delete mode 100644 Siri/en.lproj/Intents.strings delete mode 100644 TCAT.xcodeproj/xcshareddata/xcschemes/Siri.xcscheme delete mode 100644 TCAT.xcodeproj/xcshareddata/xcschemes/TCATTests.xcscheme delete mode 100644 TCAT.xcodeproj/xcshareddata/xcschemes/Today Extension Debug.xcscheme delete mode 100644 TCAT.xcodeproj/xcshareddata/xcschemes/Today Extension Release.xcscheme rename TCAT/{ => Base}/AppDelegate.swift (83%) rename TCAT/{Base.lproj => Base}/LaunchScreen.storyboard (100%) rename TCAT/{ => Cells}/AddFavoritesCollectionViewCell.swift (100%) rename TCAT/{ => Cells}/NotificationToggleTableViewCell.swift (100%) create mode 100644 TCAT/Ecosystem/ApolloClientProtocol.swift create mode 100644 TCAT/Ecosystem/ApolloNetwork.swift create mode 100644 TCAT/Ecosystem/Publishers.swift create mode 100644 TCAT/Ecosystem/UpliftQueries.graphql rename TCAT/{ => Models}/AppleSearchResponse.swift (100%) rename TCAT/{Model => Models}/BusLocation.swift (100%) rename TCAT/{Model => Models}/BusPath.swift (100%) rename TCAT/{Model => Models}/Direction.swift (100%) rename TCAT/{Model => Models}/LocationObject.swift (100%) rename TCAT/{Model => Models}/Place.swift (100%) rename TCAT/{ => Models}/PlaceCoordinates.swift (100%) rename TCAT/{Model => Models}/Route.swift (100%) rename TCAT/{ => Models}/SearchManager.swift (100%) rename TCAT/{Model => Models}/Section.swift (100%) rename TCAT/{Model => Models}/ServiceAlert.swift (100%) rename TCAT/{Model => Models}/WalkPath.swift (100%) rename TCAT/{Model => Models}/Waypoint.swift (100%) delete mode 100644 TCAT/Supporting Files/TCAT.entitlements rename TCAT/{Supporting Files => Supporting}/Constants.swift (100%) rename TCAT/{Supporting Files => Supporting}/Fonts/SFProDisplay-Bold.otf (100%) rename TCAT/{Supporting Files => Supporting}/Fonts/SFProDisplay-Medium.otf (100%) rename TCAT/{Supporting Files => Supporting}/Fonts/SFProDisplay-Regular.otf (100%) rename TCAT/{Supporting Files => Supporting}/Fonts/SFProDisplay-Semibold.otf (100%) rename TCAT/{Supporting Files => Supporting}/Fonts/SFUIText-Bold.otf (100%) rename TCAT/{Supporting Files => Supporting}/Fonts/SFUIText-Medium.otf (100%) rename TCAT/{Supporting Files => Supporting}/Fonts/SFUIText-Regular.otf (100%) rename TCAT/{Supporting Files => Supporting}/Fonts/SFUIText-Semibold.otf (100%) rename TCAT/{Supporting Files => Supporting}/Info.plist (100%) rename Siri/Siri.entitlements => TCAT/Supporting/TCAT.entitlements (100%) rename TCAT/{ => Supporting}/TransitEnvironment.swift (58%) delete mode 100755 TCAT/Utilities/Network.swift rename TCAT/{Utilities => Utils}/Analytics.swift (99%) rename TCAT/{Utilities => Utils}/AppShortcuts.swift (100%) rename TCAT/{Utilities => Utils}/EventPayload.swift (100%) rename TCAT/{Utilities => Utils}/Extensions+App.swift (100%) rename TCAT/{Utilities => Utils}/Extensions+Shared.swift (100%) rename TCAT/{Utilities => Utils}/JSONFileManager.swift (100%) rename TCAT/{Utilities => Utils}/Loader.swift (100%) rename TCAT/{Utilities => Utils}/Phrases.swift (100%) rename TCAT/{Utilities => Utils}/SearchTableViewHelpers.swift (100%) rename TCAT/{Utilities => Utils}/Shared.swift (100%) rename TCAT/{Utilities => Utils}/StoreReviewHelper.swift (100%) rename TCAT/{Utilities => Utils}/Styles.swift (100%) rename TCAT/{Utilities => Utils}/Time.swift (100%) rename TCAT/{ => Views}/NotificationBannerView.swift (100%) delete mode 100644 TCATTests/Info.plist delete mode 100644 TCATTests/RetainTest.swift delete mode 100644 TCATTests/TCATTests.swift diff --git a/.gitignore b/.gitignore index 03beb835..ed6e5d24 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,10 @@ **/config.json **/Keys.plist **/GoogleService-Info.plist +**/uplift-codegen-config-dev.json +**/uplift-codegen-config-prod.json +**/UpliftAPI +**/schema.graphqls .DS_Store */.DS_Store diff --git a/.swiftlint.yml b/.swiftlint.yml index 6166afd6..f1ec5bf0 100644 --- a/.swiftlint.yml +++ b/.swiftlint.yml @@ -32,3 +32,4 @@ excluded: # paths to ignore during linting. Takes precedence over `included`. - TCAT/AppDelegate.swift - TCAT/Utilities/Loader.swift - TCAT/Views/RPCircularProgress.swift +- UpliftAPI diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 75b1928c..00000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2017 cuappdev - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/Podfile b/Podfile index 07f30b1c..b2049e0c 100644 --- a/Podfile +++ b/Podfile @@ -13,6 +13,7 @@ target 'TCAT' do pod 'GoogleMaps' # Networking + Data + pod 'Apollo' pod 'SwiftyJSON', '~> 5.0' pod 'FutureNova', :git => 'https://github.com/cuappdev/ios-networking.git' pod 'Wormholy', :configurations => ['Debug'] @@ -33,14 +34,8 @@ target 'TCAT' do pod 'WhatsNewKit', '~> 1.1' # Other - pod 'AppDevAnnouncements', :git => 'https://github.com/cuappdev/appdev-announcements.git' pod 'SwiftLint' - target 'TCATTests' do - inherit! :search_paths - # Pods for testing - end - end @@ -51,4 +46,13 @@ post_install do |installer| config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '15.0' end end + + installer.pods_project.targets.each do |target| + target.build_configurations.each do |config| + xcconfig_path = config.base_configuration_reference.real_path + xcconfig = File.read(xcconfig_path) + xcconfig_mod = xcconfig.gsub(/DT_TOOLCHAIN_DIR/, "TOOLCHAIN_DIR") + File.open(xcconfig_path, "w") { |file| file << xcconfig_mod } + end + end end diff --git a/Podfile.lock b/Podfile.lock index 27b8c017..b667f830 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,88 +1,135 @@ PODS: - - AppDevAnnouncements (0.0.1) + - Apollo (1.9.3): + - Apollo/Core (= 1.9.3) + - Apollo/Core (1.9.3) - DZNEmptyDataSet (1.8.1) - - Firebase (7.7.0): - - Firebase/Core (= 7.7.0) - - Firebase/Core (7.7.0): + - Firebase (10.24.0): + - Firebase/Core (= 10.24.0) + - Firebase/Core (10.24.0): - Firebase/CoreOnly - - FirebaseAnalytics (= 7.7.0) - - Firebase/CoreOnly (7.7.0): - - FirebaseCore (= 7.7.0) - - FirebaseAnalytics (7.7.0): - - FirebaseCore (~> 7.0) - - FirebaseInstallations (~> 7.0) - - GoogleAppMeasurement (= 7.7.0) - - GoogleUtilities/AppDelegateSwizzler (~> 7.0) - - GoogleUtilities/MethodSwizzler (~> 7.0) - - GoogleUtilities/Network (~> 7.0) - - "GoogleUtilities/NSData+zlib (~> 7.0)" - - nanopb (~> 2.30907.0) - - FirebaseCore (7.7.0): - - FirebaseCoreDiagnostics (~> 7.4) - - GoogleUtilities/Environment (~> 7.0) - - GoogleUtilities/Logger (~> 7.0) - - FirebaseCoreDiagnostics (7.9.0): - - GoogleDataTransport (~> 8.0) - - GoogleUtilities/Environment (~> 7.0) - - GoogleUtilities/Logger (~> 7.0) - - nanopb (~> 2.30907.0) - - FirebaseCrashlytics (7.9.0): - - FirebaseCore (~> 7.0) - - FirebaseInstallations (~> 7.0) - - GoogleDataTransport (~> 8.0) - - nanopb (~> 2.30907.0) - - PromisesObjC (~> 1.2) - - FirebaseInstallations (7.11.0): - - FirebaseCore (~> 7.0) - - GoogleUtilities/Environment (~> 7.0) - - GoogleUtilities/UserDefaults (~> 7.0) - - PromisesObjC (~> 1.2) + - FirebaseAnalytics (~> 10.24.0) + - Firebase/CoreOnly (10.24.0): + - FirebaseCore (= 10.24.0) + - FirebaseAnalytics (10.24.0): + - FirebaseAnalytics/AdIdSupport (= 10.24.0) + - FirebaseCore (~> 10.0) + - FirebaseInstallations (~> 10.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.11) + - GoogleUtilities/MethodSwizzler (~> 7.11) + - GoogleUtilities/Network (~> 7.11) + - "GoogleUtilities/NSData+zlib (~> 7.11)" + - nanopb (< 2.30911.0, >= 2.30908.0) + - FirebaseAnalytics/AdIdSupport (10.24.0): + - FirebaseCore (~> 10.0) + - FirebaseInstallations (~> 10.0) + - GoogleAppMeasurement (= 10.24.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.11) + - GoogleUtilities/MethodSwizzler (~> 7.11) + - GoogleUtilities/Network (~> 7.11) + - "GoogleUtilities/NSData+zlib (~> 7.11)" + - nanopb (< 2.30911.0, >= 2.30908.0) + - FirebaseCore (10.24.0): + - FirebaseCoreInternal (~> 10.0) + - GoogleUtilities/Environment (~> 7.12) + - GoogleUtilities/Logger (~> 7.12) + - FirebaseCoreExtension (10.24.0): + - FirebaseCore (~> 10.0) + - FirebaseCoreInternal (10.24.0): + - "GoogleUtilities/NSData+zlib (~> 7.8)" + - FirebaseCrashlytics (10.24.0): + - FirebaseCore (~> 10.5) + - FirebaseInstallations (~> 10.0) + - FirebaseRemoteConfigInterop (~> 10.23) + - FirebaseSessions (~> 10.5) + - GoogleDataTransport (~> 9.2) + - GoogleUtilities/Environment (~> 7.8) + - nanopb (< 2.30911.0, >= 2.30908.0) + - PromisesObjC (~> 2.1) + - FirebaseInstallations (10.24.0): + - FirebaseCore (~> 10.0) + - GoogleUtilities/Environment (~> 7.8) + - GoogleUtilities/UserDefaults (~> 7.8) + - PromisesObjC (~> 2.1) + - FirebaseRemoteConfigInterop (10.24.0) + - FirebaseSessions (10.24.0): + - FirebaseCore (~> 10.5) + - FirebaseCoreExtension (~> 10.0) + - FirebaseInstallations (~> 10.0) + - GoogleDataTransport (~> 9.2) + - GoogleUtilities/Environment (~> 7.10) + - nanopb (< 2.30911.0, >= 2.30908.0) + - PromisesSwift (~> 2.1) - FutureNova (0.1.6) - - GoogleAppMeasurement (7.7.0): - - GoogleUtilities/AppDelegateSwizzler (~> 7.0) - - GoogleUtilities/MethodSwizzler (~> 7.0) - - GoogleUtilities/Network (~> 7.0) - - "GoogleUtilities/NSData+zlib (~> 7.0)" - - nanopb (~> 2.30907.0) - - GoogleDataTransport (8.3.1): - - GoogleUtilities/Environment (~> 7.2) - - nanopb (~> 2.30907.0) - - PromisesObjC (~> 1.2) - - GoogleMaps (8.2.0): - - GoogleMaps/Maps (= 8.2.0) - - GoogleMaps/Base (8.2.0) - - GoogleMaps/Maps (8.2.0): + - GoogleAppMeasurement (10.24.0): + - GoogleAppMeasurement/AdIdSupport (= 10.24.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.11) + - GoogleUtilities/MethodSwizzler (~> 7.11) + - GoogleUtilities/Network (~> 7.11) + - "GoogleUtilities/NSData+zlib (~> 7.11)" + - nanopb (< 2.30911.0, >= 2.30908.0) + - GoogleAppMeasurement/AdIdSupport (10.24.0): + - GoogleAppMeasurement/WithoutAdIdSupport (= 10.24.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.11) + - GoogleUtilities/MethodSwizzler (~> 7.11) + - GoogleUtilities/Network (~> 7.11) + - "GoogleUtilities/NSData+zlib (~> 7.11)" + - nanopb (< 2.30911.0, >= 2.30908.0) + - GoogleAppMeasurement/WithoutAdIdSupport (10.24.0): + - GoogleUtilities/AppDelegateSwizzler (~> 7.11) + - GoogleUtilities/MethodSwizzler (~> 7.11) + - GoogleUtilities/Network (~> 7.11) + - "GoogleUtilities/NSData+zlib (~> 7.11)" + - nanopb (< 2.30911.0, >= 2.30908.0) + - GoogleDataTransport (9.4.1): + - GoogleUtilities/Environment (~> 7.7) + - nanopb (< 2.30911.0, >= 2.30908.0) + - PromisesObjC (< 3.0, >= 1.2) + - GoogleMaps (8.4.0): + - GoogleMaps/Maps (= 8.4.0) + - GoogleMaps/Base (8.4.0) + - GoogleMaps/Maps (8.4.0): - GoogleMaps/Base - - GoogleUtilities/AppDelegateSwizzler (7.12.0): + - GoogleUtilities/AppDelegateSwizzler (7.13.0): - GoogleUtilities/Environment - GoogleUtilities/Logger - GoogleUtilities/Network - - GoogleUtilities/Environment (7.12.0): + - GoogleUtilities/Privacy + - GoogleUtilities/Environment (7.13.0): + - GoogleUtilities/Privacy - PromisesObjC (< 3.0, >= 1.2) - - GoogleUtilities/Logger (7.12.0): + - GoogleUtilities/Logger (7.13.0): - GoogleUtilities/Environment - - GoogleUtilities/MethodSwizzler (7.12.0): + - GoogleUtilities/Privacy + - GoogleUtilities/MethodSwizzler (7.13.0): - GoogleUtilities/Logger - - GoogleUtilities/Network (7.12.0): + - GoogleUtilities/Privacy + - GoogleUtilities/Network (7.13.0): - GoogleUtilities/Logger - "GoogleUtilities/NSData+zlib" + - GoogleUtilities/Privacy - GoogleUtilities/Reachability - - "GoogleUtilities/NSData+zlib (7.12.0)" - - GoogleUtilities/Reachability (7.12.0): + - "GoogleUtilities/NSData+zlib (7.13.0)": + - GoogleUtilities/Privacy + - GoogleUtilities/Privacy (7.13.0) + - GoogleUtilities/Reachability (7.13.0): - GoogleUtilities/Logger - - GoogleUtilities/UserDefaults (7.12.0): + - GoogleUtilities/Privacy + - GoogleUtilities/UserDefaults (7.13.0): - GoogleUtilities/Logger + - GoogleUtilities/Privacy - MarqueeLabel (4.0.5) - - nanopb (2.30907.0): - - nanopb/decode (= 2.30907.0) - - nanopb/encode (= 2.30907.0) - - nanopb/decode (2.30907.0) - - nanopb/encode (2.30907.0) + - nanopb (2.30910.0): + - nanopb/decode (= 2.30910.0) + - nanopb/encode (= 2.30910.0) + - nanopb/decode (2.30910.0) + - nanopb/encode (2.30910.0) - NotificationBannerSwift (3.0.6): - MarqueeLabel (~> 4.0.5) - SnapKit (~> 5.0.1) - Presentation (4.2.4) - - PromisesObjC (1.2.12) + - PromisesObjC (2.4.0) + - PromisesSwift (2.4.0): + - PromisesObjC (= 2.4.0) - Pulley (2.9.1) - SnapKit (5.0.1) - SwiftLint (0.54.0) @@ -92,7 +139,7 @@ PODS: - Zip (1.1.0) DEPENDENCIES: - - AppDevAnnouncements (from `https://github.com/cuappdev/appdev-announcements.git`) + - Apollo - DZNEmptyDataSet (from `https://github.com/cuappdev/DZNEmptyDataSet.git`) - Firebase - FirebaseCrashlytics @@ -110,12 +157,16 @@ DEPENDENCIES: SPEC REPOS: trunk: + - Apollo - Firebase - FirebaseAnalytics - FirebaseCore - - FirebaseCoreDiagnostics + - FirebaseCoreExtension + - FirebaseCoreInternal - FirebaseCrashlytics - FirebaseInstallations + - FirebaseRemoteConfigInterop + - FirebaseSessions - GoogleAppMeasurement - GoogleDataTransport - GoogleMaps @@ -124,6 +175,7 @@ SPEC REPOS: - nanopb - NotificationBannerSwift - PromisesObjC + - PromisesSwift - Pulley - SnapKit - SwiftLint @@ -133,8 +185,6 @@ SPEC REPOS: - Zip EXTERNAL SOURCES: - AppDevAnnouncements: - :git: https://github.com/cuappdev/appdev-announcements.git DZNEmptyDataSet: :git: https://github.com/cuappdev/DZNEmptyDataSet.git FutureNova: @@ -143,9 +193,6 @@ EXTERNAL SOURCES: :git: https://github.com/cuappdev/Presentation.git CHECKOUT OPTIONS: - AppDevAnnouncements: - :commit: ae01d4b73c8a5edc6c6c03b9c5670d016a5a63ef - :git: https://github.com/cuappdev/appdev-announcements.git DZNEmptyDataSet: :commit: a4a007e7ade7d9711f067f4d6510085fa1d92629 :git: https://github.com/cuappdev/DZNEmptyDataSet.git @@ -157,24 +204,28 @@ CHECKOUT OPTIONS: :git: https://github.com/cuappdev/Presentation.git SPEC CHECKSUMS: - AppDevAnnouncements: e17a7f441fb0664583bb08e21dc709214d15b70f + Apollo: b339a44b439f6b64208eb8761a0336813287a903 DZNEmptyDataSet: b94434220f87d9dda46660eb4f07a424778e93b4 - Firebase: cd2ab85eec8170dc260186159f21072ecb679ad5 - FirebaseAnalytics: f3f8f75de34fe04141a69bb1c4bd7e24a80178e1 - FirebaseCore: ac35d680a0bf32319a59966a1478e0741536b97b - FirebaseCoreDiagnostics: 3d36e05da74cb8b7ce30e6594a8f201b982c725c - FirebaseCrashlytics: 73cfa8d24d573ed1ff648acce3900df39ca32d77 - FirebaseInstallations: a58d4f72ec5861840b84df489f2668d970df558a + Firebase: 91fefd38712feb9186ea8996af6cbdef41473442 + FirebaseAnalytics: b5efc493eb0f40ec560b04a472e3e1a15d39ca13 + FirebaseCore: 11dc8a16dfb7c5e3c3f45ba0e191a33ac4f50894 + FirebaseCoreExtension: af5fd85e817ea9d19f9a2659a376cf9cf99f03c0 + FirebaseCoreInternal: bcb5acffd4ea05e12a783ecf835f2210ce3dc6af + FirebaseCrashlytics: af38ea4adfa606f6e63fcc22091b61e7938fcf66 + FirebaseInstallations: 8f581fca6478a50705d2bd2abd66d306e0f5736e + FirebaseRemoteConfigInterop: 6c349a466490aeace3ce9c091c86be1730711634 + FirebaseSessions: 2651b464e241c93fd44112f995d5ab663c970487 FutureNova: 95f9aa352b2c250253b96fdf380754afcc87c7f3 - GoogleAppMeasurement: 0c3b134b2c0a90c4c24833873894bfe0e42a0384 - GoogleDataTransport: 8b0e733ea77c9218778e5a9e34ba9508b8328939 - GoogleMaps: 081f2547b60a1c0870a8f49166a653900e5055d5 - GoogleUtilities: 0759d1a57ebb953965c2dfe0ba4c82e95ccc2e34 + GoogleAppMeasurement: f3abf08495ef2cba7829f15318c373b8d9226491 + GoogleDataTransport: 6c09b596d841063d76d4288cc2d2f42cc36e1e2a + GoogleMaps: 8939898920281c649150e0af74aa291c60f2e77d + GoogleUtilities: d053d902a8edaa9904e1bd00c37535385b8ed152 MarqueeLabel: 00cc0bcd087111dca575878b3531af980559707d - nanopb: 59221d7f958fb711001e6a449489542d92ae113e + nanopb: 438bc412db1928dac798aa6fd75726007be04262 NotificationBannerSwift: 7021be2338f8f29cf424b0aca43da462bf9e2a1a Presentation: c66e877bb3e8a6437ca9c19ab018cfa4b04a98ee - PromisesObjC: 3113f7f76903778cf4a0586bd1ab89329a0b7b97 + PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 + PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851 Pulley: a4c28c930958f42978d69631000bc1abb82cb232 SnapKit: 97b92857e3df3a0c71833cce143274bf6ef8e5eb SwiftLint: c1de071d9d08c8aba837545f6254315bc900e211 @@ -183,6 +234,6 @@ SPEC CHECKSUMS: Wormholy: ab1c8c2f02f58587a0941deb0088555ffbf039a1 Zip: 8877eede3dda76bcac281225c20e71c25270774c -PODFILE CHECKSUM: 4687c2ccc9b4c276b7ea3f6c48ab78be8cf219ae +PODFILE CHECKSUM: 2bc2917c9852873acd565e06b273a1884fa7d20b -COCOAPODS: 1.15.2 +COCOAPODS: 1.12.1 diff --git a/README.md b/README.md index 9fcca8ae..2fb87ed7 100644 --- a/README.md +++ b/README.md @@ -4,37 +4,66 @@ Introducing Ithaca Transit, a new end-to-end navigation service for built for the TCAT bus service. A free and open-source app, Ithaca Transit offers a diverse range of features in a beautiful, clean interface to help get you where you need to go. Download the current release on the [App Store](https://itunes.apple.com/app/id1290883721). -# Build Instructions +## System Requirements -## Download Project +You must have at least Xcode 14.0, iOS 15.0, and Swift 5.5 to run this app. -0. Install [Xcode](https://itunes.apple.com/us/app/xcode/id497799835?mt=12). -1. Clone this repository. -2. Open Terminal and run the below code. Installing Cocoapods takes a bit, you can do Step 3 while it downloads. +## Dependencies + +This app uses CocoaPods for dependencies. + +## Getting Started + +1. Clone the repository. +2. Go to `TransitSecrets/` and drag the following four files into **FINDER (NOT Xcode). You must create this folder through Finder.** For AppDev members, you can find these pinned in the `#transit-ios` Slack channel. + - `GoogleService-Info.plist` + - `Keys.plist` + - `uplift-codegen-config-dev.json` + - `uplift-codegen-config-prod.json` +3. Install CocoaPods dependencies with `pod install`. +4. Open the **Workspace**, select **TCAT** under Targets, then choose the **Build Phases** tab. + +- There should be a run script labeled **SwiftLint**. If not, create a **New Run Script Phase** with the following script: + +```bash +"${PODS_ROOT}/SwiftLint/swiftlint" + +if which swiftlint >/dev/null; then + swiftlint --fix && swiftlint +else + echo "WARNING: SwiftLint not installed" +fi ``` -cd ithaca-transit-ios -sudo gem install cocoapods // can skip if already installed -pod install -``` -3. Go to pinned messages in `#transit-ios` in Slack and download `Keys.plist` and the two `GoogleService-Info.plist` files. Within the root directory, place `Keys.plist` in `~/TCAT/Supporting Files/`. Within the `TCAT` folder, create a new folder named `Firebase` so that the path from the root directory is `~/TCAT/Firebase`. Inside this new folder, create two new folders named `Dev` and `Prod`. Place the respective `GoogleService-Info.plist` file in each folder. +- There should also be another run script labeled **UpliftAPI** If not, create a **New Run Script Phase** with the following script: + +```bash +CLI_PATH="./Pods/Apollo/apollo-ios-cli" +SECRETS_PATH="${SRCROOT}/TransitSecrets" ->If you aren't an AppDev member, you can plug in your own API keys! View the `Sample Keys.plist` file in the root directory, and refer to instructions [here](https://support.google.com/firebase/answer/7015592?hl=en) on generating a `GoogleService-Info.plist`. For the latter step, you will need to create a project within Firebase. Let us know if you have any trouble with this, we're happy to help! +if [ "${CONFIGURATION}" != "Release" ]; then + CONFIG_PATH="${SECRETS_PATH}/uplift-codegen-config-dev.json" +fi -4. Open the `.xcworkspace` file. +if [ "${CONFIGURATION}" = "Release" ]; then + CONFIG_PATH="${SECRETS_PATH}/uplift-codegen-config-prod.json" +fi -## Build & Run +"${CLI_PATH}" generate -p "${CONFIG_PATH}" -f + +``` -1. Click the Play icon in the top-left of the toolbar. Use the By default, this will load the app in the simulator. -2. To change the simulator's location, within the Simulator.app menu bar, go to `Debug > Location` and click on `Custom Location`. Goldwin Smith Hall's coordinates are **42.449071, -76.483759**. +5. Select the `TCAT Debug` schema to use our development server and `TCAT Release` to use our production server. +6. Generate the Uplift API with the following command: `./Pods/Apollo/apollo-ios-cli generate -p "TransitSecrets/uplift-codegen-config-dev.json" -f` +7. Build the project and you should be good to go. -*Note:* To build on your own device, you need to be signed into an Apple Developer account and have proper provisioning profiles. Talk to Matt about this (it's a pain). Hopefully he will update this in the future with better instructions. +## Common Issues -# Contributions +- If the build script for generating the API folder doesn't work, you can manually generate the API via `./Pods/Apollo/apollo-ios-cli generate -p "TransitSecrets/uplift-codegen-config-dev.json" -f` -We're proud to be an open-source development team. If you want to help contribute or improve Ithaca Transit, feel free to submit any issues or pull requests. You can also contact us at [ithacatransit@cornellappdev.com](mailto:ithacatransit@cornellappdev.com). +- If UpliftAPI is not detected or if your new written queries/mutations are not generated by Apollo, make sure that the generated UpliftAPI folder is linked to the TCAT target. You can do this by simply deleting the UpliftAPI group via the project navigator on Xcode and dragging the generated UpliftAPI folder from Finder to Xcode. -# Made by Cornell App Development +## Location -Cornell AppDev is an engineering project team at Cornell University dedicated to designing and developing mobile applications. We were founded in 2014 and have since released apps for Cornell and beyond, like [Eatery](https://itunes.apple.com/us/app/eatery-cornell-dining/id1089672962?mt=8). Our goal is to produce apps that benefit the Cornell community and the local Ithaca area as well as promote open-source development with the community. We have a diverse team of software engineers and product designers that collaborate to create apps from an idea to a reality. Cornell AppDev also aims to foster innovation and learning through training courses, campus initiatives, and collaborative research and development. For more information, visit our [website](http://www.cornellappdev.com) and follow us on [Instagram](https://www.instagram.com/cornellappdev/). +- To change the simulator's location, within the Simulator.app menu bar, go to `Debug > Location` and click on `Custom Location`. Goldwin Smith Hall's coordinates are **42.449071, -76.483759**. diff --git a/Siri/Base.lproj/Intents.intentdefinition b/Siri/Base.lproj/Intents.intentdefinition deleted file mode 100644 index d223c2c8..00000000 --- a/Siri/Base.lproj/Intents.intentdefinition +++ /dev/null @@ -1,128 +0,0 @@ - - - - - INEnums - - INIntentDefinitionModelVersion - 1.0 - INIntentDefinitionSystemVersion - 18B75 - INIntentDefinitionToolsBuildVersion - 10B61 - INIntentDefinitionToolsVersion - 10.1 - INIntents - - - INIntentCategory - request - INIntentDescriptionID - wweA1z - INIntentLastParameterTag - 9 - INIntentName - GetRoutes - INIntentParameterCombinations - - searchTo,latitude,longitude - - INIntentParameterCombinationIsPrimary - - INIntentParameterCombinationSubtitle - - INIntentParameterCombinationSubtitleID - KKOS3V - INIntentParameterCombinationSupportsBackgroundExecution - - INIntentParameterCombinationTitle - Find bus to ${searchTo} - INIntentParameterCombinationTitleID - DexuVZ - - - INIntentParameters - - - INIntentParameterDisplayPriority - 1 - INIntentParameterName - searchTo - INIntentParameterSupportsMultipleValues - - INIntentParameterTag - 2 - INIntentParameterType - String - - - INIntentParameterDisplayPriority - 2 - INIntentParameterName - latitude - INIntentParameterSupportsMultipleValues - - INIntentParameterTag - 7 - INIntentParameterType - String - - - INIntentParameterDisplayPriority - 3 - INIntentParameterName - longitude - INIntentParameterSupportsMultipleValues - - INIntentParameterTag - 8 - INIntentParameterType - String - - - INIntentResponse - - INIntentResponseCodes - - - INIntentResponseCodeFormatString - Failed to find routes - INIntentResponseCodeFormatStringID - JvOfFg - INIntentResponseCodeName - failure - INIntentResponseCodeSuccess - - - - INIntentResponseCodeFormatString - - INIntentResponseCodeFormatStringID - yRbqhi - INIntentResponseCodeName - success - INIntentResponseCodeSuccess - - - - INIntentResponseLastParameterTag - 7 - INIntentResponseParameters - - - INIntentRestrictions - 0 - INIntentTitle - Get Routes - INIntentTitleID - 6mhV59 - INIntentType - Custom - INIntentUserConfirmationRequired - - INIntentVerb - Request - - - - diff --git a/Siri/Info.plist b/Siri/Info.plist deleted file mode 100644 index 5fd53fbd..00000000 --- a/Siri/Info.plist +++ /dev/null @@ -1,42 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleDisplayName - Siri - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - XPC! - CFBundleShortVersionString - $(MARKETING_VERSION) - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - NSExtension - - NSExtensionAttributes - - IntentsRestrictedWhileLocked - - IntentsRestrictedWhileProtectedDataUnavailable - - IntentsSupported - - GetRoutesIntent - - - NSExtensionPointIdentifier - com.apple.intents-service - NSExtensionPrincipalClass - $(PRODUCT_MODULE_NAME).IntentHandler - - - diff --git a/Siri/IntentHandler.swift b/Siri/IntentHandler.swift deleted file mode 100644 index f8ee3f7c..00000000 --- a/Siri/IntentHandler.swift +++ /dev/null @@ -1,32 +0,0 @@ -// -// IntentHandler.swift -// Siri -// -// Created by Yana Sang on 10/17/18. -// Copyright © 2018 cuappdev. All rights reserved. -// - -import Intents - -class IntentHandler: INExtension { - - override func handler(for intent: INIntent) -> Any { - if #available(iOS 12.0, *), intent is GetRoutesIntent { - return GetRoutesIntentHandler() - } - return self - } -} - -@available(iOS 12.0, *) -class GetRoutesIntentHandler: INExtension, GetRoutesIntentHandling { - func handle(intent: GetRoutesIntent, completion: @escaping (GetRoutesIntentResponse) -> Void) { - if (intent.latitude != nil && intent.longitude != nil && intent.searchTo != nil) { - let response = GetRoutesIntentResponse(code: .success, userActivity: nil) - completion(response) - } else { - completion(GetRoutesIntentResponse(code: .failure, userActivity: nil)) - } - - } -} diff --git a/Siri/en.lproj/Intents.intentdefinition b/Siri/en.lproj/Intents.intentdefinition deleted file mode 100644 index 0a2ef5bb..00000000 --- a/Siri/en.lproj/Intents.intentdefinition +++ /dev/null @@ -1,128 +0,0 @@ - - - - - INEnums - - INIntentDefinitionModelVersion - 1.0 - INIntentDefinitionSystemVersion - 17G65 - INIntentDefinitionToolsBuildVersion - 10B61 - INIntentDefinitionToolsVersion - 10.1 - INIntents - - - INIntentCategory - request - INIntentDescriptionID - wweA1z - INIntentLastParameterTag - 9 - INIntentName - GetRoutes - INIntentParameterCombinations - - searchTo,latitude,longitude - - INIntentParameterCombinationIsPrimary - - INIntentParameterCombinationSubtitle - - INIntentParameterCombinationSubtitleID - KKOS3V - INIntentParameterCombinationSupportsBackgroundExecution - - INIntentParameterCombinationTitle - Find bus to ${searchTo} - INIntentParameterCombinationTitleID - DexuVZ - - - INIntentParameters - - - INIntentParameterDisplayPriority - 1 - INIntentParameterName - searchTo - INIntentParameterSupportsMultipleValues - - INIntentParameterTag - 2 - INIntentParameterType - String - - - INIntentParameterDisplayPriority - 2 - INIntentParameterName - latitude - INIntentParameterSupportsMultipleValues - - INIntentParameterTag - 7 - INIntentParameterType - String - - - INIntentParameterDisplayPriority - 3 - INIntentParameterName - longitude - INIntentParameterSupportsMultipleValues - - INIntentParameterTag - 8 - INIntentParameterType - String - - - INIntentResponse - - INIntentResponseCodes - - - INIntentResponseCodeFormatString - Failed to find routes - INIntentResponseCodeFormatStringID - JvOfFg - INIntentResponseCodeName - failure - INIntentResponseCodeSuccess - - - - INIntentResponseCodeFormatString - - INIntentResponseCodeFormatStringID - yRbqhi - INIntentResponseCodeName - success - INIntentResponseCodeSuccess - - - - INIntentResponseLastParameterTag - 7 - INIntentResponseParameters - - - INIntentRestrictions - 0 - INIntentTitle - Get Routes - INIntentTitleID - 6mhV59 - INIntentType - Custom - INIntentUserConfirmationRequired - - INIntentVerb - Request - - - - diff --git a/Siri/en.lproj/Intents.strings b/Siri/en.lproj/Intents.strings deleted file mode 100644 index ac79e25b..00000000 --- a/Siri/en.lproj/Intents.strings +++ /dev/null @@ -1,6 +0,0 @@ -"6mhV59" = "Get Routes"; - -"DexuVZ" = "Find bus to ${searchTo}"; - -"JvOfFg" = "Failed to find routes"; - diff --git a/TCAT.xcodeproj/project.pbxproj b/TCAT.xcodeproj/project.pbxproj index f6f0b25e..bf1c5596 100644 --- a/TCAT.xcodeproj/project.pbxproj +++ b/TCAT.xcodeproj/project.pbxproj @@ -3,134 +3,132 @@ archiveVersion = 1; classes = { }; - objectVersion = 54; + objectVersion = 56; objects = { /* Begin PBXBuildFile section */ - 22443222231871CD00987417 /* RouteDetailContentViewController+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22443221231871CD00987417 /* RouteDetailContentViewController+Extensions.swift */; }; - 224432242318741500987417 /* HomeOptionsCardViewController+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 224432232318741500987417 /* HomeOptionsCardViewController+Extensions.swift */; }; - 224D8A5B229F5E3000C5D86A /* Section.swift in Sources */ = {isa = PBXBuildFile; fileRef = 224D8A5A229F5E3000C5D86A /* Section.swift */; }; - 224EB5A5214F2F01008232C2 /* AppShortcuts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 224EB5A4214F2F01008232C2 /* AppShortcuts.swift */; }; - 2292486C21B8ECB90004279C /* ServiceAlertsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2292486B21B8ECB90004279C /* ServiceAlertsViewController.swift */; }; - 2292486E21BB82180004279C /* ServiceAlertTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2292486D21BB82180004279C /* ServiceAlertTableViewCell.swift */; }; 22948BFD221B75C5003FC43F /* Models.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22948BFB221B75C5003FC43F /* Models.swift */; }; - 229BD4E7229792A90042D9D3 /* RouteDiagramSegment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 229BD4E6229792A90042D9D3 /* RouteDiagramSegment.swift */; }; - 229BD4E9229947D80042D9D3 /* RouteOptionsViewController+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 229BD4E8229947D80042D9D3 /* RouteOptionsViewController+Extensions.swift */; }; - 22A83FD4228B85CE005DE4EB /* RouteDetailDrawerViewController+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22A83FD3228B85CE005DE4EB /* RouteDetailDrawerViewController+Extensions.swift */; }; - 22D76E8E2263E21F00FA21B9 /* HomeMapViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22D76E8C2263E21F00FA21B9 /* HomeMapViewController.swift */; }; - 22D76E8F2263E21F00FA21B9 /* HomeOptionsCardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22D76E8D2263E21F00FA21B9 /* HomeOptionsCardViewController.swift */; }; - 22D76E912266CCC000FA21B9 /* RoundShadowedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22D76E902266CCC000FA21B9 /* RoundShadowedView.swift */; }; - 22D9599F2269AB1700D115EC /* ServiceAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22D9599E2269AB1700D115EC /* ServiceAlert.swift */; }; - 22FD6E8922925EDA0053A174 /* InformationTableHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22FD6E8822925EDA0053A174 /* InformationTableHeaderView.swift */; }; - 2E029E972BA284D800CF6079 /* TransitEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E029E962BA284D800CF6079 /* TransitEnvironment.swift */; }; + 28EA3E17A0C473892F5506EC /* Pods_TCAT.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 542B073726DFD1EE044EA97F /* Pods_TCAT.framework */; }; 2E70434E2BB75E10003AC1D6 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 2E70434D2BB75E10003AC1D6 /* PrivacyInfo.xcprivacy */; }; - 30F148B4236F9F0500291AE2 /* NotificationToggleTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30F148B3236F9F0500291AE2 /* NotificationToggleTableViewCell.swift */; }; - 30F148BE237CA02F00291AE2 /* NotificationBannerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30F148BD237CA02F00291AE2 /* NotificationBannerView.swift */; }; - 449A7C791D80D0E80019300C /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 449A7C781D80D0E80019300C /* AppDelegate.swift */; }; + 2E9416602BC60A59003DEB44 /* UpliftQueries.graphql in Resources */ = {isa = PBXBuildFile; fileRef = 2E94165F2BC60A59003DEB44 /* UpliftQueries.graphql */; }; + 2E9416692BC615DF003DEB44 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416672BC615DF003DEB44 /* AppDelegate.swift */; }; + 2E94166A2BC615DF003DEB44 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2E9416682BC615DF003DEB44 /* LaunchScreen.storyboard */; }; + 2E9416772BC61679003DEB44 /* ServiceAlertTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E94166D2BC61678003DEB44 /* ServiceAlertTableViewCell.swift */; }; + 2E9416782BC61679003DEB44 /* LargeDetailTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E94166E2BC61679003DEB44 /* LargeDetailTableViewCell.swift */; }; + 2E9416792BC61679003DEB44 /* AddFavoritesCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E94166F2BC61679003DEB44 /* AddFavoritesCollectionViewCell.swift */; }; + 2E94167A2BC61679003DEB44 /* GeneralTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416702BC61679003DEB44 /* GeneralTableViewCell.swift */; }; + 2E94167B2BC61679003DEB44 /* NotificationToggleTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416712BC61679003DEB44 /* NotificationToggleTableViewCell.swift */; }; + 2E94167C2BC61679003DEB44 /* SmallDetailTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416722BC61679003DEB44 /* SmallDetailTableViewCell.swift */; }; + 2E94167D2BC61679003DEB44 /* FavoritesCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416732BC61679003DEB44 /* FavoritesCollectionViewCell.swift */; }; + 2E94167E2BC61679003DEB44 /* BusStopTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416742BC61679003DEB44 /* BusStopTableViewCell.swift */; }; + 2E94167F2BC61679003DEB44 /* PlaceTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416752BC61679003DEB44 /* PlaceTableViewCell.swift */; }; + 2E9416802BC61679003DEB44 /* RouteTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416762BC61679003DEB44 /* RouteTableViewCell.swift */; }; + 2E9416962BC616B9003DEB44 /* RouteDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416832BC616B9003DEB44 /* RouteDetailViewController.swift */; }; + 2E9416972BC616B9003DEB44 /* RouteDetail+ContentViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416842BC616B9003DEB44 /* RouteDetail+ContentViewController.swift */; }; + 2E9416982BC616B9003DEB44 /* RouteDetail+DrawerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416852BC616B9003DEB44 /* RouteDetail+DrawerViewController.swift */; }; + 2E9416992BC616B9003DEB44 /* RouteDetailContentViewController+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416862BC616B9003DEB44 /* RouteDetailContentViewController+Extensions.swift */; }; + 2E94169A2BC616B9003DEB44 /* CustomNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416872BC616B9003DEB44 /* CustomNavigationController.swift */; }; + 2E94169B2BC616B9003DEB44 /* StopPickerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416882BC616B9003DEB44 /* StopPickerViewController.swift */; }; + 2E94169C2BC616B9003DEB44 /* RouteOptionsViewController+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416892BC616B9003DEB44 /* RouteOptionsViewController+Extensions.swift */; }; + 2E94169D2BC616B9003DEB44 /* FavoritesTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E94168A2BC616B9003DEB44 /* FavoritesTableViewController.swift */; }; + 2E94169E2BC616B9003DEB44 /* SearchResultsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E94168B2BC616B9003DEB44 /* SearchResultsViewController.swift */; }; + 2E94169F2BC616B9003DEB44 /* HomeOptionsCardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E94168C2BC616B9003DEB44 /* HomeOptionsCardViewController.swift */; }; + 2E9416A02BC616B9003DEB44 /* InformationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E94168D2BC616B9003DEB44 /* InformationViewController.swift */; }; + 2E9416A12BC616B9003DEB44 /* RouteOptionsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E94168E2BC616B9003DEB44 /* RouteOptionsViewController.swift */; }; + 2E9416A22BC616B9003DEB44 /* ServiceAlertsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E94168F2BC616B9003DEB44 /* ServiceAlertsViewController.swift */; }; + 2E9416A32BC616B9003DEB44 /* HomeMapViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416902BC616B9003DEB44 /* HomeMapViewController.swift */; }; + 2E9416A42BC616B9003DEB44 /* FavoritesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416912BC616B9003DEB44 /* FavoritesViewController.swift */; }; + 2E9416A52BC616B9003DEB44 /* HomeOptionsCardViewController+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416922BC616B9003DEB44 /* HomeOptionsCardViewController+Extensions.swift */; }; + 2E9416A62BC616B9003DEB44 /* OnboardingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416932BC616B9003DEB44 /* OnboardingViewController.swift */; }; + 2E9416A72BC616B9003DEB44 /* ParentHomeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416942BC616B9003DEB44 /* ParentHomeViewController.swift */; }; + 2E9416A82BC616B9003DEB44 /* RouteDetailDrawerViewController+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416952BC616B9003DEB44 /* RouteDetailDrawerViewController+Extensions.swift */; }; + 2E9416B92BC61731003DEB44 /* PlaceCoordinates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416AC2BC61731003DEB44 /* PlaceCoordinates.swift */; }; + 2E9416BA2BC61731003DEB44 /* Place.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416AD2BC61731003DEB44 /* Place.swift */; }; + 2E9416BB2BC61731003DEB44 /* ServiceAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416AE2BC61731003DEB44 /* ServiceAlert.swift */; }; + 2E9416BC2BC61731003DEB44 /* Waypoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416AF2BC61731003DEB44 /* Waypoint.swift */; }; + 2E9416BD2BC61731003DEB44 /* LocationObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416B02BC61731003DEB44 /* LocationObject.swift */; }; + 2E9416BE2BC61731003DEB44 /* BusLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416B12BC61731003DEB44 /* BusLocation.swift */; }; + 2E9416BF2BC61731003DEB44 /* Direction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416B22BC61731003DEB44 /* Direction.swift */; }; + 2E9416C02BC61731003DEB44 /* Route.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416B32BC61731003DEB44 /* Route.swift */; }; + 2E9416C12BC61731003DEB44 /* WalkPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416B42BC61731003DEB44 /* WalkPath.swift */; }; + 2E9416C22BC61731003DEB44 /* AppleSearchResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416B52BC61731003DEB44 /* AppleSearchResponse.swift */; }; + 2E9416C32BC61731003DEB44 /* SearchManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416B62BC61731003DEB44 /* SearchManager.swift */; }; + 2E9416C42BC61731003DEB44 /* Section.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416B72BC61731003DEB44 /* Section.swift */; }; + 2E9416C52BC61731003DEB44 /* BusPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416B82BC61731003DEB44 /* BusPath.swift */; }; + 2E9416D12BC618CA003DEB44 /* SFProDisplay-Semibold.otf in Resources */ = {isa = PBXBuildFile; fileRef = 2E9416C92BC618CA003DEB44 /* SFProDisplay-Semibold.otf */; }; + 2E9416D22BC618CA003DEB44 /* SFProDisplay-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = 2E9416CA2BC618CA003DEB44 /* SFProDisplay-Bold.otf */; }; + 2E9416D32BC618CA003DEB44 /* SFProDisplay-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 2E9416CB2BC618CA003DEB44 /* SFProDisplay-Regular.otf */; }; + 2E9416D42BC618CA003DEB44 /* SFUIText-Semibold.otf in Resources */ = {isa = PBXBuildFile; fileRef = 2E9416CC2BC618CA003DEB44 /* SFUIText-Semibold.otf */; }; + 2E9416D52BC618CA003DEB44 /* SFUIText-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = 2E9416CD2BC618CA003DEB44 /* SFUIText-Bold.otf */; }; + 2E9416D62BC618CA003DEB44 /* SFUIText-Medium.otf in Resources */ = {isa = PBXBuildFile; fileRef = 2E9416CE2BC618CA003DEB44 /* SFUIText-Medium.otf */; }; + 2E9416D72BC618CA003DEB44 /* SFProDisplay-Medium.otf in Resources */ = {isa = PBXBuildFile; fileRef = 2E9416CF2BC618CA003DEB44 /* SFProDisplay-Medium.otf */; }; + 2E9416D82BC618CA003DEB44 /* SFUIText-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 2E9416D02BC618CA003DEB44 /* SFUIText-Regular.otf */; }; + 2E9416DE2BC618DA003DEB44 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416DA2BC618DA003DEB44 /* Constants.swift */; }; + 2E9416DF2BC618DA003DEB44 /* TransitEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416DB2BC618DA003DEB44 /* TransitEnvironment.swift */; }; + 2E9416EF2BC61984003DEB44 /* EventPayload.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416E12BC61983003DEB44 /* EventPayload.swift */; }; + 2E9416F02BC61984003DEB44 /* Extensions+Shared.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416E22BC61983003DEB44 /* Extensions+Shared.swift */; }; + 2E9416F12BC61984003DEB44 /* Shared.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416E32BC61983003DEB44 /* Shared.swift */; }; + 2E9416F22BC61984003DEB44 /* Styles.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416E42BC61983003DEB44 /* Styles.swift */; }; + 2E9416F32BC61984003DEB44 /* StoreReviewHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416E52BC61983003DEB44 /* StoreReviewHelper.swift */; }; + 2E9416F42BC61984003DEB44 /* Analytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416E62BC61984003DEB44 /* Analytics.swift */; }; + 2E9416F52BC61984003DEB44 /* Extensions+App.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416E72BC61984003DEB44 /* Extensions+App.swift */; }; + 2E9416F62BC61984003DEB44 /* Time.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416E82BC61984003DEB44 /* Time.swift */; }; + 2E9416F72BC61984003DEB44 /* SearchTableViewHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416E92BC61984003DEB44 /* SearchTableViewHelpers.swift */; }; + 2E9416F92BC61984003DEB44 /* Loader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416EB2BC61984003DEB44 /* Loader.swift */; }; + 2E9416FA2BC61984003DEB44 /* JSONFileManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416EC2BC61984003DEB44 /* JSONFileManager.swift */; }; + 2E9416FB2BC61984003DEB44 /* AppShortcuts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416ED2BC61984003DEB44 /* AppShortcuts.swift */; }; + 2E9416FC2BC61984003DEB44 /* Phrases.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416EE2BC61984003DEB44 /* Phrases.swift */; }; + 2E9417122BC61CF1003DEB44 /* LoadingIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416FE2BC61CF1003DEB44 /* LoadingIndicator.swift */; }; + 2E9417132BC61CF1003DEB44 /* InformationTableHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9416FF2BC61CF1003DEB44 /* InformationTableHeaderView.swift */; }; + 2E9417142BC61CF1003DEB44 /* RouteLine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9417002BC61CF1003DEB44 /* RouteLine.swift */; }; + 2E9417152BC61CF1003DEB44 /* RPCircularProgress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9417012BC61CF1003DEB44 /* RPCircularProgress.swift */; }; + 2E9417162BC61CF1003DEB44 /* SearchBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9417022BC61CF1003DEB44 /* SearchBarView.swift */; }; + 2E9417172BC61CF1003DEB44 /* HeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9417032BC61CF1003DEB44 /* HeaderView.swift */; }; + 2E9417182BC61CF1003DEB44 /* RouteDiagramSegment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9417042BC61CF1003DEB44 /* RouteDiagramSegment.swift */; }; + 2E9417192BC61CF1003DEB44 /* PhraseLabelFooterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9417052BC61CF1003DEB44 /* PhraseLabelFooterView.swift */; }; + 2E94171A2BC61CF1003DEB44 /* SummaryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9417062BC61CF1003DEB44 /* SummaryView.swift */; }; + 2E94171B2BC61CF1003DEB44 /* LiveIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9417072BC61CF1003DEB44 /* LiveIndicator.swift */; }; + 2E94171C2BC61CF1003DEB44 /* Circle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9417082BC61CF1003DEB44 /* Circle.swift */; }; + 2E94171D2BC61CF1003DEB44 /* RoundShadowedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9417092BC61CF1003DEB44 /* RoundShadowedView.swift */; }; + 2E94171E2BC61CF1003DEB44 /* RouteDiagram.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E94170A2BC61CF1003DEB44 /* RouteDiagram.swift */; }; + 2E94171F2BC61CF1003DEB44 /* BusIcon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E94170B2BC61CF1003DEB44 /* BusIcon.swift */; }; + 2E9417202BC61CF1003DEB44 /* WalkWithDistanceIcon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E94170C2BC61CF1003DEB44 /* WalkWithDistanceIcon.swift */; }; + 2E9417212BC61CF1003DEB44 /* NotificationBannerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E94170D2BC61CF1003DEB44 /* NotificationBannerView.swift */; }; + 2E9417222BC61CF1003DEB44 /* BusLocationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E94170E2BC61CF1003DEB44 /* BusLocationView.swift */; }; + 2E9417232BC61CF1003DEB44 /* DatePickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E94170F2BC61CF1003DEB44 /* DatePickerView.swift */; }; + 2E9417242BC61CF1003DEB44 /* DetailIconView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9417102BC61CF1003DEB44 /* DetailIconView.swift */; }; + 2E9417252BC61CF1003DEB44 /* RouteSelectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9417112BC61CF1003DEB44 /* RouteSelectionView.swift */; }; + 2E9FFA802BC673240051793C /* CapacityFields.graphql.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9FFA682BC673240051793C /* CapacityFields.graphql.swift */; }; + 2E9FFA812BC673240051793C /* FacilityFields.graphql.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9FFA692BC673240051793C /* FacilityFields.graphql.swift */; }; + 2E9FFA822BC673240051793C /* GymFields.graphql.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9FFA6A2BC673240051793C /* GymFields.graphql.swift */; }; + 2E9FFA832BC673240051793C /* OpenHoursFields.graphql.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9FFA6B2BC673240051793C /* OpenHoursFields.graphql.swift */; }; + 2E9FFA842BC673240051793C /* GetAllGymsQuery.graphql.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9FFA6D2BC673240051793C /* GetAllGymsQuery.graphql.swift */; }; + 2E9FFA852BC673240051793C /* AmenityType.graphql.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9FFA702BC673240051793C /* AmenityType.graphql.swift */; }; + 2E9FFA862BC673240051793C /* CourtType.graphql.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9FFA712BC673240051793C /* CourtType.graphql.swift */; }; + 2E9FFA872BC673240051793C /* FacilityType.graphql.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9FFA722BC673240051793C /* FacilityType.graphql.swift */; }; + 2E9FFA882BC673240051793C /* Amenity.graphql.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9FFA742BC673240051793C /* Amenity.graphql.swift */; }; + 2E9FFA892BC673240051793C /* Capacity.graphql.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9FFA752BC673240051793C /* Capacity.graphql.swift */; }; + 2E9FFA8A2BC673240051793C /* Facility.graphql.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9FFA762BC673240051793C /* Facility.graphql.swift */; }; + 2E9FFA8B2BC673240051793C /* Gym.graphql.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9FFA772BC673240051793C /* Gym.graphql.swift */; }; + 2E9FFA8C2BC673240051793C /* OpenHours.graphql.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9FFA782BC673240051793C /* OpenHours.graphql.swift */; }; + 2E9FFA8D2BC673240051793C /* Query.graphql.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9FFA792BC673240051793C /* Query.graphql.swift */; }; + 2E9FFA8E2BC673240051793C /* SchemaConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9FFA7B2BC673240051793C /* SchemaConfiguration.swift */; }; + 2E9FFA8F2BC673240051793C /* SchemaMetadata.graphql.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9FFA7C2BC673240051793C /* SchemaMetadata.graphql.swift */; }; + 2E9FFA902BC673240051793C /* UpliftAPI.graphql.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9FFA7E2BC673240051793C /* UpliftAPI.graphql.swift */; }; + 2EC1F50F2BC66708001D9F66 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 2EC1F50D2BC66708001D9F66 /* GoogleService-Info.plist */; }; + 2EC1F5102BC66708001D9F66 /* Keys.plist in Resources */ = {isa = PBXBuildFile; fileRef = 2EC1F50E2BC66708001D9F66 /* Keys.plist */; }; + 2EC1F5122BC66972001D9F66 /* ApolloClientProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EC1F5112BC66972001D9F66 /* ApolloClientProtocol.swift */; }; + 2EC1F5142BC66A19001D9F66 /* ApolloNetwork.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EC1F5132BC66A19001D9F66 /* ApolloNetwork.swift */; }; + 2EC1F5162BC66CBA001D9F66 /* Publishers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EC1F5152BC66CBA001D9F66 /* Publishers.swift */; }; 449A7C801D80D0E80019300C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 449A7C7F1D80D0E80019300C /* Assets.xcassets */; }; - 449A7C831D80D0E80019300C /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 449A7C811D80D0E80019300C /* LaunchScreen.storyboard */; }; - 449A7C8E1D80D0E80019300C /* TCATTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 449A7C8D1D80D0E80019300C /* TCATTests.swift */; }; - 5006F7BA1EC0F59A005ACAF2 /* SearchTableViewHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5006F7B91EC0F59A005ACAF2 /* SearchTableViewHelpers.swift */; }; - 502D8F5F1E55161D005280F1 /* SearchBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 502D8F5E1E55161D005280F1 /* SearchBarView.swift */; }; - 503EC37D1E969ADF00B3D4D4 /* PlaceTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 503EC37C1E969ADF00B3D4D4 /* PlaceTableViewCell.swift */; }; - 503EC37F1E969B2100B3D4D4 /* SearchResultsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 503EC37E1E969B2100B3D4D4 /* SearchResultsViewController.swift */; }; - 7E0A65192226367100441967 /* WalkPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFD5B4E31FAADFAE00955C37 /* WalkPath.swift */; }; - 7E14AEDD2177E884006A344D /* IntentHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E14AEDC2177E884006A344D /* IntentHandler.swift */; }; - 7E14AEF12177E884006A344D /* Siri.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 7E14AEDA2177E884006A344D /* Siri.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - 7E155FD72231DA8600FE7A9B /* BusLocationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF1209FA1F7759C200A7C930 /* BusLocationView.swift */; }; - 7E155FD82231DAAE00FE7A9B /* Direction.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD36A7011F6637C900E4789E /* Direction.swift */; }; - 7E7E4E79218E19C200C72376 /* IntentHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E14AEDC2177E884006A344D /* IntentHandler.swift */; }; - 7EBD9D8722263089008BF900 /* BusLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF456E0220489990005C611D /* BusLocation.swift */; }; - 7EBD9D8A22263094008BF900 /* LocationObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF73F0F21F60B0BD003B479D /* LocationObject.swift */; }; - 7EBD9D8B22263096008BF900 /* Place.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDE3BC221F5863D50014D2BB /* Place.swift */; }; - 7EBD9D8D2226309A008BF900 /* Route.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD2F989A1E50F99A0005F6BC /* Route.swift */; }; - 7EBD9D92222630DE008BF900 /* EventPayload.swift in Sources */ = {isa = PBXBuildFile; fileRef = D94BD30021599E3200C9214E /* EventPayload.swift */; }; - 7EBD9D94222630E4008BF900 /* Extensions+Shared.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EE04A6C21B461D7002F0C52 /* Extensions+Shared.swift */; }; - 7EBD9D95222630EF008BF900 /* Styles.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF84609D217139A30027FB62 /* Styles.swift */; }; - 7EBD9D96222630F2008BF900 /* Time.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD5D233B1E6367A100F8DECE /* Time.swift */; }; - 7EBD9D97222630F9008BF900 /* Shared.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EE04A6721B454F4002F0C52 /* Shared.swift */; }; - 7EBD9D9822263103008BF900 /* BusIcon.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD16B8E41E7046390089B7B2 /* BusIcon.swift */; }; - 7EBD9D9A22263107008BF900 /* Circle.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDBCD5E61E989E5800014641 /* Circle.swift */; }; - 7EBD9D9B22263114008BF900 /* LiveIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF5C52A3207B96F0003C93B9 /* LiveIndicator.swift */; }; - 7EBD9D9C22263118008BF900 /* RouteLine.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDA134441EC6A8CB00460B18 /* RouteLine.swift */; }; - 7EBD9D9E22263120008BF900 /* WalkWithDistanceIcon.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD659C8920508E1A00506BAC /* WalkWithDistanceIcon.swift */; }; - 7EEB14242231A34200134C8B /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD99E2F51F6DB06A0073E8F7 /* Constants.swift */; }; - 7EEB14272231A3CA00134C8B /* Analytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC27BD081FF6C91C00DAA7D5 /* Analytics.swift */; }; - 7EF304692227502E006B327E /* Keys.plist in Resources */ = {isa = PBXBuildFile; fileRef = D94BD2FC2159993D00C9214E /* Keys.plist */; }; - AD1B7F4DAC497BD369A28358 /* Pods_TCATTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 27C5CB0F6FDBF523F5ADA0C2 /* Pods_TCATTests.framework */; }; - BF0002221FB37D0A00773109 /* LoadingIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF0002211FB37D0A00773109 /* LoadingIndicator.swift */; }; - BF18AE102083B7F6000C3D82 /* StoreReviewHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF18AE0F2083B7F6000C3D82 /* StoreReviewHelper.swift */; }; - BF18AE122083B9B8000C3D82 /* Phrases.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF18AE112083B9B8000C3D82 /* Phrases.swift */; }; BF250D7F222FB12400E7F271 /* Endpoints.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF250D7E222FB12300E7F271 /* Endpoints.swift */; }; - BF2DA891224539DE006E527D /* RouteDiagram.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF2DA890224539DD006E527D /* RouteDiagram.swift */; }; - BF316CB02096352B005A14EF /* PhraseLabelFooterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF316CAF2096352B005A14EF /* PhraseLabelFooterView.swift */; }; - BF5CBAD11FCE6CCE00478C6F /* RouteDetail+DrawerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF5CBAD01FCE6CCE00478C6F /* RouteDetail+DrawerViewController.swift */; }; - BF6095271FD7091B0013E538 /* CustomNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF6095261FD7091B0013E538 /* CustomNavigationController.swift */; }; BF74AC1A1F945D7D00AFD4E4 /* GoogleMapsBase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF74AC191F945D7D00AFD4E4 /* GoogleMapsBase.framework */; }; BF74AC1D1F945D8E00AFD4E4 /* GoogleMapsCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF74AC1B1F945D8E00AFD4E4 /* GoogleMapsCore.framework */; }; BF74AC1E1F945D8E00AFD4E4 /* GoogleMaps.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF74AC1C1F945D8E00AFD4E4 /* GoogleMaps.framework */; }; - BF8460A32172A5220027FB62 /* SFProDisplay-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = BF84609F2172A5200027FB62 /* SFProDisplay-Regular.otf */; }; - BF8460A42172A5220027FB62 /* SFProDisplay-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = BF8460A02172A5200027FB62 /* SFProDisplay-Bold.otf */; }; - BF8460A52172A5220027FB62 /* SFProDisplay-Semibold.otf in Resources */ = {isa = PBXBuildFile; fileRef = BF8460A12172A5210027FB62 /* SFProDisplay-Semibold.otf */; }; - BF8460A62172A5220027FB62 /* SFProDisplay-Medium.otf in Resources */ = {isa = PBXBuildFile; fileRef = BF8460A22172A5210027FB62 /* SFProDisplay-Medium.otf */; }; - BF8460AC2172B0F80027FB62 /* SFUIText-Semibold.otf in Resources */ = {isa = PBXBuildFile; fileRef = BF8460A82172B0F70027FB62 /* SFUIText-Semibold.otf */; }; - BF8460AD2172B0F80027FB62 /* SFUIText-Medium.otf in Resources */ = {isa = PBXBuildFile; fileRef = BF8460A92172B0F70027FB62 /* SFUIText-Medium.otf */; }; - BF8460AE2172B0F80027FB62 /* SFUIText-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = BF8460AA2172B0F80027FB62 /* SFUIText-Bold.otf */; }; - BF8460AF2172B0F80027FB62 /* SFUIText-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = BF8460AB2172B0F80027FB62 /* SFUIText-Regular.otf */; }; - BFA53FEE1FD45D7000E770DF /* RouteDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFA53FED1FD45D7000E770DF /* RouteDetailViewController.swift */; }; - BFB86A07205C614C000794B2 /* OnboardingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFB86A06205C614C000794B2 /* OnboardingViewController.swift */; }; - BFC367F321B66E9A00ABD9AC /* Intents.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = BFC367F621B66E9A00ABD9AC /* Intents.intentdefinition */; }; - BFC367F421B66E9A00ABD9AC /* Intents.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = BFC367F621B66E9A00ABD9AC /* Intents.intentdefinition */; }; - BFEDB85B2232F22100052D49 /* GeneralTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFEDB85A2232F22100052D49 /* GeneralTableViewCell.swift */; }; - BFF41EB2204365E800E0696B /* SummaryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF41EB1204365E800E0696B /* SummaryView.swift */; }; - C2240435231838C300095C5C /* PlaceCoordinates.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2240434231838C300095C5C /* PlaceCoordinates.swift */; }; - C2AAAF6C23392F790025C640 /* AppleSearchResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2AAAF6B23392F790025C640 /* AppleSearchResponse.swift */; }; - C2AAAF6E233976B50025C640 /* SearchManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2AAAF6D233976B50025C640 /* SearchManager.swift */; }; - D183AA021E6CB092006A9A15 /* Extensions+App.swift in Sources */ = {isa = PBXBuildFile; fileRef = D183AA011E6CB092006A9A15 /* Extensions+App.swift */; }; - D423AAF823749EC700EF2EB7 /* AddFavoritesCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D423AAF723749EC700EF2EB7 /* AddFavoritesCollectionViewCell.swift */; }; D4756EA223986CB500FE7F0D /* ReachabilityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4756EA123986CB500FE7F0D /* ReachabilityManager.swift */; }; - D4756EA423986CCE00FE7F0D /* RetainTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4756EA323986CCE00FE7F0D /* RetainTest.swift */; }; - D4B70A06237390EE00FEB7EA /* FavoritesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4B70A05237390EE00FEB7EA /* FavoritesViewController.swift */; }; - D4B70A082373910900FEB7EA /* ParentHomeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4B70A072373910900FEB7EA /* ParentHomeViewController.swift */; }; - D4B70A0A2373912800FEB7EA /* FavoritesCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4B70A092373912800FEB7EA /* FavoritesCollectionViewCell.swift */; }; - DC2E96441FBF41CB009955C6 /* FavoritesTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC2E96431FBF41CB009955C6 /* FavoritesTableViewController.swift */; }; - DC2E96461FC21B29009955C6 /* HeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC2E96451FC21B29009955C6 /* HeaderView.swift */; }; - DCB717101FB76EA600BE4D26 /* StopPickerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCB7170F1FB76EA600BE4D26 /* StopPickerViewController.swift */; }; - DD2F98A31E5150990005F6BC /* RouteOptionsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD2F98A21E5150990005F6BC /* RouteOptionsViewController.swift */; }; DD3D9C211F94297100B164D4 /* Reachability.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD3D9C201F94297100B164D4 /* Reachability.swift */; }; - DD3D9C361F945F2A00B164D4 /* RPCircularProgress.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD3D9C351F945F2A00B164D4 /* RPCircularProgress.swift */; }; - DD87F20A1E878CB5000C244B /* Loader.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD87F2091E878CB5000C244B /* Loader.swift */; }; - DDB49C941E8857D000A99C35 /* RouteDetail+ContentViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB49C921E8857D000A99C35 /* RouteDetail+ContentViewController.swift */; }; - DDB49C981E8857E000A99C35 /* LargeDetailTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB49C951E8857E000A99C35 /* LargeDetailTableViewCell.swift */; }; - DDB49C991E8857E000A99C35 /* SmallDetailTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB49C961E8857E000A99C35 /* SmallDetailTableViewCell.swift */; }; - DDB49C9A1E8857E000A99C35 /* BusStopTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB49C971E8857E000A99C35 /* BusStopTableViewCell.swift */; }; - DDB49C9D1E8857FC00A99C35 /* BusPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB49C9B1E8857FC00A99C35 /* BusPath.swift */; }; - DDB49C9E1E8857FC00A99C35 /* Waypoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB49C9C1E8857FC00A99C35 /* Waypoint.swift */; }; - DDB49CA21E88584B00A99C35 /* DetailIconView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB49CA11E88584B00A99C35 /* DetailIconView.swift */; }; - DDBFEAA01E787008002BBD96 /* DatePickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDBFEA9E1E787008002BBD96 /* DatePickerView.swift */; }; - DDBFEAA11E787008002BBD96 /* RouteSelectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDBFEA9F1E787008002BBD96 /* RouteSelectionView.swift */; }; - DDC83CA51E52B0D400D4EDDF /* RouteTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDC83CA41E52B0D400D4EDDF /* RouteTableViewCell.swift */; }; - E337970D1FC1606D00BCB28F /* InformationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E337970C1FC1606D00BCB28F /* InformationViewController.swift */; }; - E68700B61F9B4E069D17931E /* Pods_TCAT.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E8A1C717EB340065803DAFD0 /* Pods_TCAT.framework */; }; /* End PBXBuildFile section */ -/* Begin PBXContainerItemProxy section */ - 449A7C8A1D80D0E80019300C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 449A7C6D1D80D0E80019300C /* Project object */; - proxyType = 1; - remoteGlobalIDString = 449A7C741D80D0E80019300C; - remoteInfo = TCAT; - }; - 7E14AEEF2177E884006A344D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 449A7C6D1D80D0E80019300C /* Project object */; - proxyType = 1; - remoteGlobalIDString = 7E14AED92177E884006A344D; - remoteInfo = Siri; - }; -/* End PBXContainerItemProxy section */ - /* Begin PBXCopyFilesBuildPhase section */ 7E14AED52177E846006A344D /* Embed Foundation Extensions */ = { isa = PBXCopyFilesBuildPhase; @@ -138,7 +136,6 @@ dstPath = ""; dstSubfolderSpec = 13; files = ( - 7E14AEF12177E884006A344D /* Siri.appex in Embed Foundation Extensions */, ); name = "Embed Foundation Extensions"; runOnlyForDeploymentPostprocessing = 0; @@ -146,135 +143,135 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 150AC52CEDC601C508F1CB76 /* Pods-TCATUITests.local.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TCATUITests.local.xcconfig"; path = "Target Support Files/Pods-TCATUITests/Pods-TCATUITests.local.xcconfig"; sourceTree = ""; }; - 22443221231871CD00987417 /* RouteDetailContentViewController+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = "RouteDetailContentViewController+Extensions.swift"; path = "Controllers/RouteDetailContentViewController+Extensions.swift"; sourceTree = ""; }; - 224432232318741500987417 /* HomeOptionsCardViewController+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = "HomeOptionsCardViewController+Extensions.swift"; path = "Controllers/HomeOptionsCardViewController+Extensions.swift"; sourceTree = ""; }; - 224D8A5A229F5E3000C5D86A /* Section.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Section.swift; path = Model/Section.swift; sourceTree = ""; }; - 224EB5A4214F2F01008232C2 /* AppShortcuts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppShortcuts.swift; path = Utilities/AppShortcuts.swift; sourceTree = ""; }; - 2292486B21B8ECB90004279C /* ServiceAlertsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ServiceAlertsViewController.swift; path = Controllers/ServiceAlertsViewController.swift; sourceTree = ""; }; - 2292486D21BB82180004279C /* ServiceAlertTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ServiceAlertTableViewCell.swift; path = Cells/ServiceAlertTableViewCell.swift; sourceTree = ""; }; 22948BFB221B75C5003FC43F /* Models.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Models.swift; sourceTree = ""; }; - 229BD4E6229792A90042D9D3 /* RouteDiagramSegment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = RouteDiagramSegment.swift; path = Views/RouteDiagramSegment.swift; sourceTree = ""; }; - 229BD4E8229947D80042D9D3 /* RouteOptionsViewController+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = "RouteOptionsViewController+Extensions.swift"; path = "Controllers/RouteOptionsViewController+Extensions.swift"; sourceTree = ""; }; - 22A83FD3228B85CE005DE4EB /* RouteDetailDrawerViewController+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = "RouteDetailDrawerViewController+Extensions.swift"; path = "Controllers/RouteDetailDrawerViewController+Extensions.swift"; sourceTree = ""; }; - 22D76E8C2263E21F00FA21B9 /* HomeMapViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = HomeMapViewController.swift; path = Controllers/HomeMapViewController.swift; sourceTree = ""; }; - 22D76E8D2263E21F00FA21B9 /* HomeOptionsCardViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = HomeOptionsCardViewController.swift; path = Controllers/HomeOptionsCardViewController.swift; sourceTree = ""; }; - 22D76E902266CCC000FA21B9 /* RoundShadowedView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = RoundShadowedView.swift; path = Views/RoundShadowedView.swift; sourceTree = ""; }; - 22D9599E2269AB1700D115EC /* ServiceAlert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ServiceAlert.swift; path = Model/ServiceAlert.swift; sourceTree = ""; }; - 22FD6E8822925EDA0053A174 /* InformationTableHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = InformationTableHeaderView.swift; path = Views/InformationTableHeaderView.swift; sourceTree = ""; }; - 27C5CB0F6FDBF523F5ADA0C2 /* Pods_TCATTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_TCATTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2E029E962BA284D800CF6079 /* TransitEnvironment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransitEnvironment.swift; sourceTree = ""; }; 2E70434D2BB75E10003AC1D6 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; - 30F148B3236F9F0500291AE2 /* NotificationToggleTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationToggleTableViewCell.swift; sourceTree = ""; }; - 30F148BD237CA02F00291AE2 /* NotificationBannerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationBannerView.swift; sourceTree = ""; }; - 319A023F5367F28985F123A2 /* Pods-Today Extension.local.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Today Extension.local.xcconfig"; path = "Target Support Files/Pods-Today Extension/Pods-Today Extension.local.xcconfig"; sourceTree = ""; }; + 2E94165F2BC60A59003DEB44 /* UpliftQueries.graphql */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = UpliftQueries.graphql; sourceTree = ""; }; + 2E9416672BC615DF003DEB44 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 2E9416682BC615DF003DEB44 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; }; + 2E94166D2BC61678003DEB44 /* ServiceAlertTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ServiceAlertTableViewCell.swift; sourceTree = ""; }; + 2E94166E2BC61679003DEB44 /* LargeDetailTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LargeDetailTableViewCell.swift; sourceTree = ""; }; + 2E94166F2BC61679003DEB44 /* AddFavoritesCollectionViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddFavoritesCollectionViewCell.swift; sourceTree = ""; }; + 2E9416702BC61679003DEB44 /* GeneralTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneralTableViewCell.swift; sourceTree = ""; }; + 2E9416712BC61679003DEB44 /* NotificationToggleTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NotificationToggleTableViewCell.swift; sourceTree = ""; }; + 2E9416722BC61679003DEB44 /* SmallDetailTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SmallDetailTableViewCell.swift; sourceTree = ""; }; + 2E9416732BC61679003DEB44 /* FavoritesCollectionViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FavoritesCollectionViewCell.swift; sourceTree = ""; }; + 2E9416742BC61679003DEB44 /* BusStopTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BusStopTableViewCell.swift; sourceTree = ""; }; + 2E9416752BC61679003DEB44 /* PlaceTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PlaceTableViewCell.swift; sourceTree = ""; }; + 2E9416762BC61679003DEB44 /* RouteTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RouteTableViewCell.swift; sourceTree = ""; }; + 2E9416832BC616B9003DEB44 /* RouteDetailViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RouteDetailViewController.swift; sourceTree = ""; }; + 2E9416842BC616B9003DEB44 /* RouteDetail+ContentViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "RouteDetail+ContentViewController.swift"; sourceTree = ""; }; + 2E9416852BC616B9003DEB44 /* RouteDetail+DrawerViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "RouteDetail+DrawerViewController.swift"; sourceTree = ""; }; + 2E9416862BC616B9003DEB44 /* RouteDetailContentViewController+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "RouteDetailContentViewController+Extensions.swift"; sourceTree = ""; }; + 2E9416872BC616B9003DEB44 /* CustomNavigationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CustomNavigationController.swift; sourceTree = ""; }; + 2E9416882BC616B9003DEB44 /* StopPickerViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StopPickerViewController.swift; sourceTree = ""; }; + 2E9416892BC616B9003DEB44 /* RouteOptionsViewController+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "RouteOptionsViewController+Extensions.swift"; sourceTree = ""; }; + 2E94168A2BC616B9003DEB44 /* FavoritesTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FavoritesTableViewController.swift; sourceTree = ""; }; + 2E94168B2BC616B9003DEB44 /* SearchResultsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchResultsViewController.swift; sourceTree = ""; }; + 2E94168C2BC616B9003DEB44 /* HomeOptionsCardViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeOptionsCardViewController.swift; sourceTree = ""; }; + 2E94168D2BC616B9003DEB44 /* InformationViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InformationViewController.swift; sourceTree = ""; }; + 2E94168E2BC616B9003DEB44 /* RouteOptionsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RouteOptionsViewController.swift; sourceTree = ""; }; + 2E94168F2BC616B9003DEB44 /* ServiceAlertsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ServiceAlertsViewController.swift; sourceTree = ""; }; + 2E9416902BC616B9003DEB44 /* HomeMapViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeMapViewController.swift; sourceTree = ""; }; + 2E9416912BC616B9003DEB44 /* FavoritesViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FavoritesViewController.swift; sourceTree = ""; }; + 2E9416922BC616B9003DEB44 /* HomeOptionsCardViewController+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "HomeOptionsCardViewController+Extensions.swift"; sourceTree = ""; }; + 2E9416932BC616B9003DEB44 /* OnboardingViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OnboardingViewController.swift; sourceTree = ""; }; + 2E9416942BC616B9003DEB44 /* ParentHomeViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ParentHomeViewController.swift; sourceTree = ""; }; + 2E9416952BC616B9003DEB44 /* RouteDetailDrawerViewController+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "RouteDetailDrawerViewController+Extensions.swift"; sourceTree = ""; }; + 2E9416AC2BC61731003DEB44 /* PlaceCoordinates.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PlaceCoordinates.swift; sourceTree = ""; }; + 2E9416AD2BC61731003DEB44 /* Place.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Place.swift; sourceTree = ""; }; + 2E9416AE2BC61731003DEB44 /* ServiceAlert.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ServiceAlert.swift; sourceTree = ""; }; + 2E9416AF2BC61731003DEB44 /* Waypoint.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Waypoint.swift; sourceTree = ""; }; + 2E9416B02BC61731003DEB44 /* LocationObject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LocationObject.swift; sourceTree = ""; }; + 2E9416B12BC61731003DEB44 /* BusLocation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BusLocation.swift; sourceTree = ""; }; + 2E9416B22BC61731003DEB44 /* Direction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Direction.swift; sourceTree = ""; }; + 2E9416B32BC61731003DEB44 /* Route.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Route.swift; sourceTree = ""; }; + 2E9416B42BC61731003DEB44 /* WalkPath.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalkPath.swift; sourceTree = ""; }; + 2E9416B52BC61731003DEB44 /* AppleSearchResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppleSearchResponse.swift; sourceTree = ""; }; + 2E9416B62BC61731003DEB44 /* SearchManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchManager.swift; sourceTree = ""; }; + 2E9416B72BC61731003DEB44 /* Section.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Section.swift; sourceTree = ""; }; + 2E9416B82BC61731003DEB44 /* BusPath.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BusPath.swift; sourceTree = ""; }; + 2E9416C92BC618CA003DEB44 /* SFProDisplay-Semibold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SFProDisplay-Semibold.otf"; sourceTree = ""; }; + 2E9416CA2BC618CA003DEB44 /* SFProDisplay-Bold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SFProDisplay-Bold.otf"; sourceTree = ""; }; + 2E9416CB2BC618CA003DEB44 /* SFProDisplay-Regular.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SFProDisplay-Regular.otf"; sourceTree = ""; }; + 2E9416CC2BC618CA003DEB44 /* SFUIText-Semibold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SFUIText-Semibold.otf"; sourceTree = ""; }; + 2E9416CD2BC618CA003DEB44 /* SFUIText-Bold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SFUIText-Bold.otf"; sourceTree = ""; }; + 2E9416CE2BC618CA003DEB44 /* SFUIText-Medium.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SFUIText-Medium.otf"; sourceTree = ""; }; + 2E9416CF2BC618CA003DEB44 /* SFProDisplay-Medium.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SFProDisplay-Medium.otf"; sourceTree = ""; }; + 2E9416D02BC618CA003DEB44 /* SFUIText-Regular.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SFUIText-Regular.otf"; sourceTree = ""; }; + 2E9416D92BC618DA003DEB44 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 2E9416DA2BC618DA003DEB44 /* Constants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; + 2E9416DB2BC618DA003DEB44 /* TransitEnvironment.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransitEnvironment.swift; sourceTree = ""; }; + 2E9416DC2BC618DA003DEB44 /* TCAT.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = TCAT.entitlements; sourceTree = ""; }; + 2E9416E12BC61983003DEB44 /* EventPayload.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EventPayload.swift; sourceTree = ""; }; + 2E9416E22BC61983003DEB44 /* Extensions+Shared.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Extensions+Shared.swift"; sourceTree = ""; }; + 2E9416E32BC61983003DEB44 /* Shared.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Shared.swift; sourceTree = ""; }; + 2E9416E42BC61983003DEB44 /* Styles.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Styles.swift; sourceTree = ""; }; + 2E9416E52BC61983003DEB44 /* StoreReviewHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoreReviewHelper.swift; sourceTree = ""; }; + 2E9416E62BC61984003DEB44 /* Analytics.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Analytics.swift; sourceTree = ""; }; + 2E9416E72BC61984003DEB44 /* Extensions+App.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Extensions+App.swift"; sourceTree = ""; }; + 2E9416E82BC61984003DEB44 /* Time.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Time.swift; sourceTree = ""; }; + 2E9416E92BC61984003DEB44 /* SearchTableViewHelpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchTableViewHelpers.swift; sourceTree = ""; }; + 2E9416EB2BC61984003DEB44 /* Loader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Loader.swift; sourceTree = ""; }; + 2E9416EC2BC61984003DEB44 /* JSONFileManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JSONFileManager.swift; sourceTree = ""; }; + 2E9416ED2BC61984003DEB44 /* AppShortcuts.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppShortcuts.swift; sourceTree = ""; }; + 2E9416EE2BC61984003DEB44 /* Phrases.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Phrases.swift; sourceTree = ""; }; + 2E9416FE2BC61CF1003DEB44 /* LoadingIndicator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoadingIndicator.swift; sourceTree = ""; }; + 2E9416FF2BC61CF1003DEB44 /* InformationTableHeaderView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InformationTableHeaderView.swift; sourceTree = ""; }; + 2E9417002BC61CF1003DEB44 /* RouteLine.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RouteLine.swift; sourceTree = ""; }; + 2E9417012BC61CF1003DEB44 /* RPCircularProgress.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RPCircularProgress.swift; sourceTree = ""; }; + 2E9417022BC61CF1003DEB44 /* SearchBarView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchBarView.swift; sourceTree = ""; }; + 2E9417032BC61CF1003DEB44 /* HeaderView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HeaderView.swift; sourceTree = ""; }; + 2E9417042BC61CF1003DEB44 /* RouteDiagramSegment.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RouteDiagramSegment.swift; sourceTree = ""; }; + 2E9417052BC61CF1003DEB44 /* PhraseLabelFooterView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PhraseLabelFooterView.swift; sourceTree = ""; }; + 2E9417062BC61CF1003DEB44 /* SummaryView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SummaryView.swift; sourceTree = ""; }; + 2E9417072BC61CF1003DEB44 /* LiveIndicator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiveIndicator.swift; sourceTree = ""; }; + 2E9417082BC61CF1003DEB44 /* Circle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Circle.swift; sourceTree = ""; }; + 2E9417092BC61CF1003DEB44 /* RoundShadowedView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RoundShadowedView.swift; sourceTree = ""; }; + 2E94170A2BC61CF1003DEB44 /* RouteDiagram.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RouteDiagram.swift; sourceTree = ""; }; + 2E94170B2BC61CF1003DEB44 /* BusIcon.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BusIcon.swift; sourceTree = ""; }; + 2E94170C2BC61CF1003DEB44 /* WalkWithDistanceIcon.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalkWithDistanceIcon.swift; sourceTree = ""; }; + 2E94170D2BC61CF1003DEB44 /* NotificationBannerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NotificationBannerView.swift; sourceTree = ""; }; + 2E94170E2BC61CF1003DEB44 /* BusLocationView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BusLocationView.swift; sourceTree = ""; }; + 2E94170F2BC61CF1003DEB44 /* DatePickerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DatePickerView.swift; sourceTree = ""; }; + 2E9417102BC61CF1003DEB44 /* DetailIconView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DetailIconView.swift; sourceTree = ""; }; + 2E9417112BC61CF1003DEB44 /* RouteSelectionView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RouteSelectionView.swift; sourceTree = ""; }; + 2E9FFA682BC673240051793C /* CapacityFields.graphql.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CapacityFields.graphql.swift; sourceTree = ""; }; + 2E9FFA692BC673240051793C /* FacilityFields.graphql.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FacilityFields.graphql.swift; sourceTree = ""; }; + 2E9FFA6A2BC673240051793C /* GymFields.graphql.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GymFields.graphql.swift; sourceTree = ""; }; + 2E9FFA6B2BC673240051793C /* OpenHoursFields.graphql.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OpenHoursFields.graphql.swift; sourceTree = ""; }; + 2E9FFA6D2BC673240051793C /* GetAllGymsQuery.graphql.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GetAllGymsQuery.graphql.swift; sourceTree = ""; }; + 2E9FFA702BC673240051793C /* AmenityType.graphql.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AmenityType.graphql.swift; sourceTree = ""; }; + 2E9FFA712BC673240051793C /* CourtType.graphql.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CourtType.graphql.swift; sourceTree = ""; }; + 2E9FFA722BC673240051793C /* FacilityType.graphql.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FacilityType.graphql.swift; sourceTree = ""; }; + 2E9FFA742BC673240051793C /* Amenity.graphql.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Amenity.graphql.swift; sourceTree = ""; }; + 2E9FFA752BC673240051793C /* Capacity.graphql.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Capacity.graphql.swift; sourceTree = ""; }; + 2E9FFA762BC673240051793C /* Facility.graphql.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Facility.graphql.swift; sourceTree = ""; }; + 2E9FFA772BC673240051793C /* Gym.graphql.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Gym.graphql.swift; sourceTree = ""; }; + 2E9FFA782BC673240051793C /* OpenHours.graphql.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OpenHours.graphql.swift; sourceTree = ""; }; + 2E9FFA792BC673240051793C /* Query.graphql.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Query.graphql.swift; sourceTree = ""; }; + 2E9FFA7B2BC673240051793C /* SchemaConfiguration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SchemaConfiguration.swift; sourceTree = ""; }; + 2E9FFA7C2BC673240051793C /* SchemaMetadata.graphql.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SchemaMetadata.graphql.swift; sourceTree = ""; }; + 2E9FFA7E2BC673240051793C /* UpliftAPI.graphql.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpliftAPI.graphql.swift; sourceTree = ""; }; + 2EC1F50D2BC66708001D9F66 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; + 2EC1F50E2BC66708001D9F66 /* Keys.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Keys.plist; sourceTree = ""; }; + 2EC1F5112BC66972001D9F66 /* ApolloClientProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApolloClientProtocol.swift; sourceTree = ""; }; + 2EC1F5132BC66A19001D9F66 /* ApolloNetwork.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApolloNetwork.swift; sourceTree = ""; }; + 2EC1F5152BC66CBA001D9F66 /* Publishers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Publishers.swift; sourceTree = ""; }; 449A7C751D80D0E80019300C /* TCAT.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TCAT.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 449A7C781D80D0E80019300C /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 449A7C7F1D80D0E80019300C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 449A7C821D80D0E80019300C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 449A7C841D80D0E80019300C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = "Supporting Files/Info.plist"; sourceTree = ""; }; - 449A7C891D80D0E80019300C /* TCATTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TCATTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 449A7C8D1D80D0E80019300C /* TCATTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TCATTests.swift; sourceTree = ""; }; - 449A7C8F1D80D0E80019300C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 45788A342647D19AE0D2823E /* Pods-TCATTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TCATTests.release.xcconfig"; path = "Target Support Files/Pods-TCATTests/Pods-TCATTests.release.xcconfig"; sourceTree = ""; }; - 5006F7B91EC0F59A005ACAF2 /* SearchTableViewHelpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; name = SearchTableViewHelpers.swift; path = Utilities/SearchTableViewHelpers.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 502D8F5E1E55161D005280F1 /* SearchBarView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SearchBarView.swift; path = Views/SearchBarView.swift; sourceTree = ""; }; - 503EC37C1E969ADF00B3D4D4 /* PlaceTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PlaceTableViewCell.swift; path = Cells/PlaceTableViewCell.swift; sourceTree = ""; }; - 503EC37E1E969B2100B3D4D4 /* SearchResultsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; name = SearchResultsViewController.swift; path = Controllers/SearchResultsViewController.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 50A19BAD1E4C214000AD6768 /* HomeViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; name = HomeViewController.swift; path = Controllers/HomeViewController.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 5EA2F024E47855738046B69B /* Pods-Today Extension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Today Extension.debug.xcconfig"; path = "Target Support Files/Pods-Today Extension/Pods-Today Extension.debug.xcconfig"; sourceTree = ""; }; - 7E14AEB12177E661006A344D /* TCAT.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = TCAT.entitlements; path = "Supporting Files/TCAT.entitlements"; sourceTree = ""; }; + 542B073726DFD1EE044EA97F /* Pods_TCAT.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_TCAT.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 78CE6235AE56D8B3776331B2 /* Pods-TCAT.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TCAT.release.xcconfig"; path = "Target Support Files/Pods-TCAT/Pods-TCAT.release.xcconfig"; sourceTree = ""; }; + 7A621E1F21DF0FC2CACD61FE /* Pods-TCAT.local.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TCAT.local.xcconfig"; path = "Target Support Files/Pods-TCAT/Pods-TCAT.local.xcconfig"; sourceTree = ""; }; + 7C562FAA4261465E07ACE741 /* Pods-TCAT.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TCAT.debug.xcconfig"; path = "Target Support Files/Pods-TCAT/Pods-TCAT.debug.xcconfig"; sourceTree = ""; }; 7E14AEC02177E846006A344D /* IntentsUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IntentsUI.framework; path = System/Library/Frameworks/IntentsUI.framework; sourceTree = SDKROOT; }; - 7E14AEDA2177E884006A344D /* Siri.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = Siri.appex; sourceTree = BUILT_PRODUCTS_DIR; }; - 7E14AEDC2177E884006A344D /* IntentHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntentHandler.swift; sourceTree = ""; }; - 7E14AEDE2177E884006A344D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 7EE04A6721B454F4002F0C52 /* Shared.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Shared.swift; path = Utilities/Shared.swift; sourceTree = ""; }; - 7EE04A6C21B461D7002F0C52 /* Extensions+Shared.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "Extensions+Shared.swift"; path = "Utilities/Extensions+Shared.swift"; sourceTree = ""; }; - 7EE2478C23135EAC009C21ED /* Siri.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Siri.entitlements; sourceTree = ""; }; 7EEF189C21B39C6200343FFD /* NotificationCenter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NotificationCenter.framework; path = System/Library/Frameworks/NotificationCenter.framework; sourceTree = SDKROOT; }; - 7F2FC5C9D02BA940FC57D58F /* Pods_Today_Extension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Today_Extension.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 9184DD9DA907B4E003CB9F2E /* Pods-Today Extension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Today Extension.release.xcconfig"; path = "Target Support Files/Pods-Today Extension/Pods-Today Extension.release.xcconfig"; sourceTree = ""; }; - A781591737EAB3208B7C5185 /* Pods-TCAT.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TCAT.release.xcconfig"; path = "Target Support Files/Pods-TCAT/Pods-TCAT.release.xcconfig"; sourceTree = ""; }; - AA4D65C70B34F6EB84BE347A /* Pods-TCATTests.local.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TCATTests.local.xcconfig"; path = "Target Support Files/Pods-TCATTests/Pods-TCATTests.local.xcconfig"; sourceTree = ""; }; - B4E42C41F3415E83D9F43607 /* Pods-TCAT.local.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TCAT.local.xcconfig"; path = "Target Support Files/Pods-TCAT/Pods-TCAT.local.xcconfig"; sourceTree = ""; }; - B9EE9A33DC0B648CAC3581D5 /* Pods-TCATTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TCATTests.debug.xcconfig"; path = "Target Support Files/Pods-TCATTests/Pods-TCATTests.debug.xcconfig"; sourceTree = ""; }; - BF0002211FB37D0A00773109 /* LoadingIndicator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LoadingIndicator.swift; path = Views/LoadingIndicator.swift; sourceTree = ""; }; - BF1209FA1F7759C200A7C930 /* BusLocationView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = BusLocationView.swift; path = Views/BusLocationView.swift; sourceTree = ""; }; - BF18AE0F2083B7F6000C3D82 /* StoreReviewHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = StoreReviewHelper.swift; path = Utilities/StoreReviewHelper.swift; sourceTree = ""; }; - BF18AE112083B9B8000C3D82 /* Phrases.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Phrases.swift; path = Utilities/Phrases.swift; sourceTree = ""; }; BF250D7E222FB12300E7F271 /* Endpoints.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Endpoints.swift; sourceTree = ""; }; - BF2DA890224539DD006E527D /* RouteDiagram.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RouteDiagram.swift; path = Views/RouteDiagram.swift; sourceTree = ""; }; - BF316CAF2096352B005A14EF /* PhraseLabelFooterView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PhraseLabelFooterView.swift; path = Views/PhraseLabelFooterView.swift; sourceTree = ""; }; - BF456E0220489990005C611D /* BusLocation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = BusLocation.swift; path = Model/BusLocation.swift; sourceTree = ""; }; - BF5C52A3207B96F0003C93B9 /* LiveIndicator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LiveIndicator.swift; path = Views/LiveIndicator.swift; sourceTree = ""; }; - BF5CBAD01FCE6CCE00478C6F /* RouteDetail+DrawerViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "RouteDetail+DrawerViewController.swift"; path = "Controllers/RouteDetail+DrawerViewController.swift"; sourceTree = ""; }; - BF6095261FD7091B0013E538 /* CustomNavigationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CustomNavigationController.swift; path = Controllers/CustomNavigationController.swift; sourceTree = ""; }; - BF73322021B67D7100F26620 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Intents.strings; sourceTree = ""; }; - BF73F0F21F60B0BD003B479D /* LocationObject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LocationObject.swift; path = Model/LocationObject.swift; sourceTree = ""; }; BF74AC191F945D7D00AFD4E4 /* GoogleMapsBase.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleMapsBase.framework; path = Pods/GoogleMaps/Base/Frameworks/GoogleMapsBase.framework; sourceTree = ""; }; BF74AC1B1F945D8E00AFD4E4 /* GoogleMapsCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleMapsCore.framework; path = Pods/GoogleMaps/Maps/Frameworks/GoogleMapsCore.framework; sourceTree = ""; }; BF74AC1C1F945D8E00AFD4E4 /* GoogleMaps.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleMaps.framework; path = Pods/GoogleMaps/Maps/Frameworks/GoogleMaps.framework; sourceTree = ""; }; - BF84609D217139A30027FB62 /* Styles.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Styles.swift; path = Utilities/Styles.swift; sourceTree = ""; }; - BF84609F2172A5200027FB62 /* SFProDisplay-Regular.otf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "SFProDisplay-Regular.otf"; path = "Supporting Files/Fonts/SFProDisplay-Regular.otf"; sourceTree = ""; }; - BF8460A02172A5200027FB62 /* SFProDisplay-Bold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "SFProDisplay-Bold.otf"; path = "Supporting Files/Fonts/SFProDisplay-Bold.otf"; sourceTree = ""; }; - BF8460A12172A5210027FB62 /* SFProDisplay-Semibold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "SFProDisplay-Semibold.otf"; path = "Supporting Files/Fonts/SFProDisplay-Semibold.otf"; sourceTree = ""; }; - BF8460A22172A5210027FB62 /* SFProDisplay-Medium.otf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "SFProDisplay-Medium.otf"; path = "Supporting Files/Fonts/SFProDisplay-Medium.otf"; sourceTree = ""; }; - BF8460A82172B0F70027FB62 /* SFUIText-Semibold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "SFUIText-Semibold.otf"; path = "Supporting Files/Fonts/SFUIText-Semibold.otf"; sourceTree = ""; }; - BF8460A92172B0F70027FB62 /* SFUIText-Medium.otf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "SFUIText-Medium.otf"; path = "Supporting Files/Fonts/SFUIText-Medium.otf"; sourceTree = ""; }; - BF8460AA2172B0F80027FB62 /* SFUIText-Bold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "SFUIText-Bold.otf"; path = "Supporting Files/Fonts/SFUIText-Bold.otf"; sourceTree = ""; }; - BF8460AB2172B0F80027FB62 /* SFUIText-Regular.otf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "SFUIText-Regular.otf"; path = "Supporting Files/Fonts/SFUIText-Regular.otf"; sourceTree = ""; }; - BFA53FED1FD45D7000E770DF /* RouteDetailViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RouteDetailViewController.swift; path = Controllers/RouteDetailViewController.swift; sourceTree = ""; }; - BFB86A06205C614C000794B2 /* OnboardingViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OnboardingViewController.swift; path = Controllers/OnboardingViewController.swift; sourceTree = ""; }; - BFC367F521B66E9A00ABD9AC /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.intentdefinition; name = Base; path = Base.lproj/Intents.intentdefinition; sourceTree = ""; }; - BFCE7D560E7713FD58F4D932 /* Pods-TCAT.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TCAT.debug.xcconfig"; path = "Target Support Files/Pods-TCAT/Pods-TCAT.debug.xcconfig"; sourceTree = ""; }; - BFD5B4E31FAADFAE00955C37 /* WalkPath.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = WalkPath.swift; path = Model/WalkPath.swift; sourceTree = ""; }; - BFEDB85A2232F22100052D49 /* GeneralTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GeneralTableViewCell.swift; path = Cells/GeneralTableViewCell.swift; sourceTree = ""; }; - BFF41EB1204365E800E0696B /* SummaryView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SummaryView.swift; path = Views/SummaryView.swift; sourceTree = ""; }; - C2240434231838C300095C5C /* PlaceCoordinates.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaceCoordinates.swift; sourceTree = ""; }; - C2AAAF6B23392F790025C640 /* AppleSearchResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppleSearchResponse.swift; sourceTree = ""; }; - C2AAAF6D233976B50025C640 /* SearchManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchManager.swift; sourceTree = ""; }; - CC27BD081FF6C91C00DAA7D5 /* Analytics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Analytics.swift; path = Utilities/Analytics.swift; sourceTree = ""; }; - D183AA011E6CB092006A9A15 /* Extensions+App.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "Extensions+App.swift"; path = "Utilities/Extensions+App.swift"; sourceTree = ""; }; - D423AAF723749EC700EF2EB7 /* AddFavoritesCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddFavoritesCollectionViewCell.swift; sourceTree = ""; }; D4756EA123986CB500FE7F0D /* ReachabilityManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReachabilityManager.swift; sourceTree = ""; }; - D4756EA323986CCE00FE7F0D /* RetainTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RetainTest.swift; sourceTree = ""; }; - D4B70A05237390EE00FEB7EA /* FavoritesViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = FavoritesViewController.swift; path = Controllers/FavoritesViewController.swift; sourceTree = ""; }; - D4B70A072373910900FEB7EA /* ParentHomeViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ParentHomeViewController.swift; path = Controllers/ParentHomeViewController.swift; sourceTree = ""; }; - D4B70A092373912800FEB7EA /* FavoritesCollectionViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = FavoritesCollectionViewCell.swift; path = Cells/FavoritesCollectionViewCell.swift; sourceTree = ""; }; - D94BD2FC2159993D00C9214E /* Keys.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Keys.plist; path = "Supporting Files/Keys.plist"; sourceTree = ""; }; - D94BD30021599E3200C9214E /* EventPayload.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = EventPayload.swift; path = Utilities/EventPayload.swift; sourceTree = ""; }; - DC2E96431FBF41CB009955C6 /* FavoritesTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = FavoritesTableViewController.swift; path = Controllers/FavoritesTableViewController.swift; sourceTree = ""; }; - DC2E96451FC21B29009955C6 /* HeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = HeaderView.swift; path = Views/HeaderView.swift; sourceTree = ""; }; - DCB7170F1FB76EA600BE4D26 /* StopPickerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = StopPickerViewController.swift; path = Controllers/StopPickerViewController.swift; sourceTree = ""; }; - DD16B8E41E7046390089B7B2 /* BusIcon.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = BusIcon.swift; path = Views/BusIcon.swift; sourceTree = ""; }; - DD2F989A1E50F99A0005F6BC /* Route.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Route.swift; path = Model/Route.swift; sourceTree = ""; }; - DD2F98A21E5150990005F6BC /* RouteOptionsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RouteOptionsViewController.swift; path = Controllers/RouteOptionsViewController.swift; sourceTree = ""; }; - DD36A7011F6637C900E4789E /* Direction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Direction.swift; path = Model/Direction.swift; sourceTree = ""; }; DD3D9C201F94297100B164D4 /* Reachability.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Reachability.swift; sourceTree = ""; }; - DD3D9C351F945F2A00B164D4 /* RPCircularProgress.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = RPCircularProgress.swift; path = Views/RPCircularProgress.swift; sourceTree = ""; }; - DD5D233B1E6367A100F8DECE /* Time.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Time.swift; path = Utilities/Time.swift; sourceTree = ""; }; - DD659C8920508E1A00506BAC /* WalkWithDistanceIcon.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = WalkWithDistanceIcon.swift; path = Views/WalkWithDistanceIcon.swift; sourceTree = ""; }; - DD87F2091E878CB5000C244B /* Loader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Loader.swift; path = Utilities/Loader.swift; sourceTree = ""; }; - DD99E2F51F6DB06A0073E8F7 /* Constants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Constants.swift; path = "Supporting Files/Constants.swift"; sourceTree = ""; }; - DDA134441EC6A8CB00460B18 /* RouteLine.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RouteLine.swift; path = Views/RouteLine.swift; sourceTree = ""; }; - DDB49C921E8857D000A99C35 /* RouteDetail+ContentViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "RouteDetail+ContentViewController.swift"; path = "Controllers/RouteDetail+ContentViewController.swift"; sourceTree = ""; }; - DDB49C951E8857E000A99C35 /* LargeDetailTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LargeDetailTableViewCell.swift; path = Cells/LargeDetailTableViewCell.swift; sourceTree = ""; }; - DDB49C961E8857E000A99C35 /* SmallDetailTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SmallDetailTableViewCell.swift; path = Cells/SmallDetailTableViewCell.swift; sourceTree = ""; }; - DDB49C971E8857E000A99C35 /* BusStopTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = BusStopTableViewCell.swift; path = Cells/BusStopTableViewCell.swift; sourceTree = ""; }; - DDB49C9B1E8857FC00A99C35 /* BusPath.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = BusPath.swift; path = Model/BusPath.swift; sourceTree = ""; }; - DDB49C9C1E8857FC00A99C35 /* Waypoint.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Waypoint.swift; path = Model/Waypoint.swift; sourceTree = ""; }; - DDB49CA11E88584B00A99C35 /* DetailIconView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = DetailIconView.swift; path = Views/DetailIconView.swift; sourceTree = ""; }; - DDBCD5E61E989E5800014641 /* Circle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Circle.swift; path = Views/Circle.swift; sourceTree = ""; }; - DDBFEA9E1E787008002BBD96 /* DatePickerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = DatePickerView.swift; path = Views/DatePickerView.swift; sourceTree = ""; }; - DDBFEA9F1E787008002BBD96 /* RouteSelectionView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RouteSelectionView.swift; path = Views/RouteSelectionView.swift; sourceTree = ""; }; - DDC83CA41E52B0D400D4EDDF /* RouteTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RouteTableViewCell.swift; path = Cells/RouteTableViewCell.swift; sourceTree = ""; }; - DDE3BC221F5863D50014D2BB /* Place.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Place.swift; path = Model/Place.swift; sourceTree = ""; }; - E337970C1FC1606D00BCB28F /* InformationViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = InformationViewController.swift; path = Controllers/InformationViewController.swift; sourceTree = ""; }; - E8A1C717EB340065803DAFD0 /* Pods_TCAT.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_TCAT.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F6EF74B05355CCB79CA81128 /* Pods_TCATUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_TCATUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FA07B88835AF4B4B57825EA7 /* Pods-TCATUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TCATUITests.release.xcconfig"; path = "Target Support Files/Pods-TCATUITests/Pods-TCATUITests.release.xcconfig"; sourceTree = ""; }; FD69AF2A2B89212F00970C7E /* ci_post_clone.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = ci_post_clone.sh; sourceTree = ""; }; - FDB1BCCCB27128551499EC7C /* Pods-TCATUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TCATUITests.debug.xcconfig"; path = "Target Support Files/Pods-TCATUITests/Pods-TCATUITests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -285,22 +282,7 @@ BF74AC1D1F945D8E00AFD4E4 /* GoogleMapsCore.framework in Frameworks */, BF74AC1E1F945D8E00AFD4E4 /* GoogleMaps.framework in Frameworks */, BF74AC1A1F945D7D00AFD4E4 /* GoogleMapsBase.framework in Frameworks */, - E68700B61F9B4E069D17931E /* Pods_TCAT.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 449A7C861D80D0E80019300C /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - AD1B7F4DAC497BD369A28358 /* Pods_TCATTests.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7E14AED72177E884006A344D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( + 28EA3E17A0C473892F5506EC /* Pods_TCAT.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -315,10 +297,7 @@ BF74AC191F945D7D00AFD4E4 /* GoogleMapsBase.framework */, 7E14AEC02177E846006A344D /* IntentsUI.framework */, 7EEF189C21B39C6200343FFD /* NotificationCenter.framework */, - E8A1C717EB340065803DAFD0 /* Pods_TCAT.framework */, - 27C5CB0F6FDBF523F5ADA0C2 /* Pods_TCATTests.framework */, - F6EF74B05355CCB79CA81128 /* Pods_TCATUITests.framework */, - 7F2FC5C9D02BA940FC57D58F /* Pods_Today_Extension.framework */, + 542B073726DFD1EE044EA97F /* Pods_TCAT.framework */, ); name = Frameworks; sourceTree = ""; @@ -334,239 +313,291 @@ path = Network; sourceTree = ""; }; - 22D76E8B2263E1E500FA21B9 /* Recovered References */ = { + 2E94165E2BC60A3B003DEB44 /* Ecosystem */ = { isa = PBXGroup; children = ( - 50A19BAD1E4C214000AD6768 /* HomeViewController.swift */, + 2EC1F5112BC66972001D9F66 /* ApolloClientProtocol.swift */, + 2EC1F5132BC66A19001D9F66 /* ApolloNetwork.swift */, + 2EC1F5152BC66CBA001D9F66 /* Publishers.swift */, + 2E94165F2BC60A59003DEB44 /* UpliftQueries.graphql */, ); - name = "Recovered References"; + path = Ecosystem; sourceTree = ""; }; - 449A7C6C1D80D0E80019300C = { + 2E9416662BC615B0003DEB44 /* Base */ = { isa = PBXGroup; children = ( - FD69AF292B8920D500970C7E /* ci_scripts */, - 449A7C771D80D0E80019300C /* TCAT */, - 449A7C8C1D80D0E80019300C /* TCATTests */, - 7E14AEDB2177E884006A344D /* Siri */, - 449A7C761D80D0E80019300C /* Products */, - 12F774CEB5023E6938BDCF3A /* Frameworks */, - 44BE841D0263A527944A6E0F /* Pods */, - 22D76E8B2263E1E500FA21B9 /* Recovered References */, + 2E9416672BC615DF003DEB44 /* AppDelegate.swift */, + 2E9416682BC615DF003DEB44 /* LaunchScreen.storyboard */, ); + path = Base; sourceTree = ""; }; - 449A7C761D80D0E80019300C /* Products */ = { + 2E94166C2BC61604003DEB44 /* Cells */ = { isa = PBXGroup; children = ( - 449A7C751D80D0E80019300C /* TCAT.app */, - 449A7C891D80D0E80019300C /* TCATTests.xctest */, - 7E14AEDA2177E884006A344D /* Siri.appex */, - ); - name = Products; + 2E94166F2BC61679003DEB44 /* AddFavoritesCollectionViewCell.swift */, + 2E9416742BC61679003DEB44 /* BusStopTableViewCell.swift */, + 2E9416732BC61679003DEB44 /* FavoritesCollectionViewCell.swift */, + 2E9416702BC61679003DEB44 /* GeneralTableViewCell.swift */, + 2E94166E2BC61679003DEB44 /* LargeDetailTableViewCell.swift */, + 2E9416712BC61679003DEB44 /* NotificationToggleTableViewCell.swift */, + 2E9416752BC61679003DEB44 /* PlaceTableViewCell.swift */, + 2E9416762BC61679003DEB44 /* RouteTableViewCell.swift */, + 2E94166D2BC61678003DEB44 /* ServiceAlertTableViewCell.swift */, + 2E9416722BC61679003DEB44 /* SmallDetailTableViewCell.swift */, + ); + path = Cells; sourceTree = ""; }; - 449A7C771D80D0E80019300C /* TCAT */ = { + 2E9416822BC6168C003DEB44 /* Controllers */ = { isa = PBXGroup; children = ( - 449A7C7F1D80D0E80019300C /* Assets.xcassets */, - 2E70434D2BB75E10003AC1D6 /* PrivacyInfo.xcprivacy */, - DD2F988E1E50D8660005F6BC /* Base */, - DD2F988F1E50D89C0005F6BC /* Cells */, - DD47EA501E50D77D009C68EB /* Controllers */, - DD2F98911E50D8C90005F6BC /* Models */, - 2292486621B891790004279C /* Network */, - 50A19BA81E4BC5BC00AD6768 /* Supporting Files */, - DD2F98941E50D8DC0005F6BC /* Utilities */, - DD2F98951E50D8E60005F6BC /* Views */, + 2E9416872BC616B9003DEB44 /* CustomNavigationController.swift */, + 2E94168A2BC616B9003DEB44 /* FavoritesTableViewController.swift */, + 2E9416912BC616B9003DEB44 /* FavoritesViewController.swift */, + 2E9416902BC616B9003DEB44 /* HomeMapViewController.swift */, + 2E94168C2BC616B9003DEB44 /* HomeOptionsCardViewController.swift */, + 2E9416922BC616B9003DEB44 /* HomeOptionsCardViewController+Extensions.swift */, + 2E94168D2BC616B9003DEB44 /* InformationViewController.swift */, + 2E9416932BC616B9003DEB44 /* OnboardingViewController.swift */, + 2E9416942BC616B9003DEB44 /* ParentHomeViewController.swift */, + 2E9416842BC616B9003DEB44 /* RouteDetail+ContentViewController.swift */, + 2E9416852BC616B9003DEB44 /* RouteDetail+DrawerViewController.swift */, + 2E9416862BC616B9003DEB44 /* RouteDetailContentViewController+Extensions.swift */, + 2E9416952BC616B9003DEB44 /* RouteDetailDrawerViewController+Extensions.swift */, + 2E9416832BC616B9003DEB44 /* RouteDetailViewController.swift */, + 2E94168E2BC616B9003DEB44 /* RouteOptionsViewController.swift */, + 2E9416892BC616B9003DEB44 /* RouteOptionsViewController+Extensions.swift */, + 2E94168B2BC616B9003DEB44 /* SearchResultsViewController.swift */, + 2E94168F2BC616B9003DEB44 /* ServiceAlertsViewController.swift */, + 2E9416882BC616B9003DEB44 /* StopPickerViewController.swift */, + ); + path = Controllers; + sourceTree = ""; + }; + 2E9416AB2BC616DE003DEB44 /* Models */ = { + isa = PBXGroup; + children = ( + 2E9416B52BC61731003DEB44 /* AppleSearchResponse.swift */, + 2E9416B12BC61731003DEB44 /* BusLocation.swift */, + 2E9416B82BC61731003DEB44 /* BusPath.swift */, + 2E9416B22BC61731003DEB44 /* Direction.swift */, + 2E9416B02BC61731003DEB44 /* LocationObject.swift */, + 2E9416AD2BC61731003DEB44 /* Place.swift */, + 2E9416AC2BC61731003DEB44 /* PlaceCoordinates.swift */, + 2E9416B32BC61731003DEB44 /* Route.swift */, + 2E9416B62BC61731003DEB44 /* SearchManager.swift */, + 2E9416B72BC61731003DEB44 /* Section.swift */, + 2E9416AE2BC61731003DEB44 /* ServiceAlert.swift */, + 2E9416B42BC61731003DEB44 /* WalkPath.swift */, + 2E9416AF2BC61731003DEB44 /* Waypoint.swift */, + ); + path = Models; + sourceTree = ""; + }; + 2E9416C72BC61763003DEB44 /* Supporting */ = { + isa = PBXGroup; + children = ( + 2E9416C82BC6177B003DEB44 /* Fonts */, + 2E9416DA2BC618DA003DEB44 /* Constants.swift */, + 2E9416DB2BC618DA003DEB44 /* TransitEnvironment.swift */, + 2E9416D92BC618DA003DEB44 /* Info.plist */, + 2E9416DC2BC618DA003DEB44 /* TCAT.entitlements */, ); - path = TCAT; + path = Supporting; + sourceTree = ""; + }; + 2E9416C82BC6177B003DEB44 /* Fonts */ = { + isa = PBXGroup; + children = ( + 2E9416CA2BC618CA003DEB44 /* SFProDisplay-Bold.otf */, + 2E9416CF2BC618CA003DEB44 /* SFProDisplay-Medium.otf */, + 2E9416CB2BC618CA003DEB44 /* SFProDisplay-Regular.otf */, + 2E9416C92BC618CA003DEB44 /* SFProDisplay-Semibold.otf */, + 2E9416CD2BC618CA003DEB44 /* SFUIText-Bold.otf */, + 2E9416CE2BC618CA003DEB44 /* SFUIText-Medium.otf */, + 2E9416D02BC618CA003DEB44 /* SFUIText-Regular.otf */, + 2E9416CC2BC618CA003DEB44 /* SFUIText-Semibold.otf */, + ); + path = Fonts; sourceTree = ""; }; - 449A7C8C1D80D0E80019300C /* TCATTests */ = { + 2E9416E02BC618E6003DEB44 /* Utils */ = { isa = PBXGroup; children = ( - D4756EA323986CCE00FE7F0D /* RetainTest.swift */, - 449A7C8D1D80D0E80019300C /* TCATTests.swift */, - 449A7C8F1D80D0E80019300C /* Info.plist */, + 2E9416E62BC61984003DEB44 /* Analytics.swift */, + 2E9416ED2BC61984003DEB44 /* AppShortcuts.swift */, + 2E9416E12BC61983003DEB44 /* EventPayload.swift */, + 2E9416E72BC61984003DEB44 /* Extensions+App.swift */, + 2E9416E22BC61983003DEB44 /* Extensions+Shared.swift */, + 2E9416EC2BC61984003DEB44 /* JSONFileManager.swift */, + 2E9416EB2BC61984003DEB44 /* Loader.swift */, + 2E9416EE2BC61984003DEB44 /* Phrases.swift */, + 2E9416E92BC61984003DEB44 /* SearchTableViewHelpers.swift */, + 2E9416E32BC61983003DEB44 /* Shared.swift */, + 2E9416E52BC61983003DEB44 /* StoreReviewHelper.swift */, + 2E9416E42BC61983003DEB44 /* Styles.swift */, + 2E9416E82BC61984003DEB44 /* Time.swift */, + ); + path = Utils; + sourceTree = ""; + }; + 2E9416FD2BC61CAE003DEB44 /* Views */ = { + isa = PBXGroup; + children = ( + 2E94170B2BC61CF1003DEB44 /* BusIcon.swift */, + 2E94170E2BC61CF1003DEB44 /* BusLocationView.swift */, + 2E9417082BC61CF1003DEB44 /* Circle.swift */, + 2E94170F2BC61CF1003DEB44 /* DatePickerView.swift */, + 2E9417102BC61CF1003DEB44 /* DetailIconView.swift */, + 2E9417032BC61CF1003DEB44 /* HeaderView.swift */, + 2E9416FF2BC61CF1003DEB44 /* InformationTableHeaderView.swift */, + 2E9417072BC61CF1003DEB44 /* LiveIndicator.swift */, + 2E9416FE2BC61CF1003DEB44 /* LoadingIndicator.swift */, + 2E94170D2BC61CF1003DEB44 /* NotificationBannerView.swift */, + 2E9417052BC61CF1003DEB44 /* PhraseLabelFooterView.swift */, + 2E9417092BC61CF1003DEB44 /* RoundShadowedView.swift */, + 2E94170A2BC61CF1003DEB44 /* RouteDiagram.swift */, + 2E9417042BC61CF1003DEB44 /* RouteDiagramSegment.swift */, + 2E9417002BC61CF1003DEB44 /* RouteLine.swift */, + 2E9417112BC61CF1003DEB44 /* RouteSelectionView.swift */, + 2E9417012BC61CF1003DEB44 /* RPCircularProgress.swift */, + 2E9417022BC61CF1003DEB44 /* SearchBarView.swift */, + 2E9417062BC61CF1003DEB44 /* SummaryView.swift */, + 2E94170C2BC61CF1003DEB44 /* WalkWithDistanceIcon.swift */, + ); + path = Views; + sourceTree = ""; + }; + 2E9FFA6C2BC673240051793C /* Fragments */ = { + isa = PBXGroup; + children = ( + 2E9FFA682BC673240051793C /* CapacityFields.graphql.swift */, + 2E9FFA692BC673240051793C /* FacilityFields.graphql.swift */, + 2E9FFA6A2BC673240051793C /* GymFields.graphql.swift */, + 2E9FFA6B2BC673240051793C /* OpenHoursFields.graphql.swift */, ); - path = TCATTests; + path = Fragments; sourceTree = ""; }; - 44BE841D0263A527944A6E0F /* Pods */ = { + 2E9FFA6E2BC673240051793C /* Queries */ = { isa = PBXGroup; children = ( - BFCE7D560E7713FD58F4D932 /* Pods-TCAT.debug.xcconfig */, - B4E42C41F3415E83D9F43607 /* Pods-TCAT.local.xcconfig */, - A781591737EAB3208B7C5185 /* Pods-TCAT.release.xcconfig */, - B9EE9A33DC0B648CAC3581D5 /* Pods-TCATTests.debug.xcconfig */, - AA4D65C70B34F6EB84BE347A /* Pods-TCATTests.local.xcconfig */, - 45788A342647D19AE0D2823E /* Pods-TCATTests.release.xcconfig */, - FDB1BCCCB27128551499EC7C /* Pods-TCATUITests.debug.xcconfig */, - 150AC52CEDC601C508F1CB76 /* Pods-TCATUITests.local.xcconfig */, - FA07B88835AF4B4B57825EA7 /* Pods-TCATUITests.release.xcconfig */, - 5EA2F024E47855738046B69B /* Pods-Today Extension.debug.xcconfig */, - 319A023F5367F28985F123A2 /* Pods-Today Extension.local.xcconfig */, - 9184DD9DA907B4E003CB9F2E /* Pods-Today Extension.release.xcconfig */, + 2E9FFA6D2BC673240051793C /* GetAllGymsQuery.graphql.swift */, ); - path = Pods; + path = Queries; sourceTree = ""; }; - 50A19BA81E4BC5BC00AD6768 /* Supporting Files */ = { + 2E9FFA6F2BC673240051793C /* Operations */ = { isa = PBXGroup; children = ( - BF8460A72172A7A90027FB62 /* Fonts */, - DD99E2F51F6DB06A0073E8F7 /* Constants.swift */, - 2E029E962BA284D800CF6079 /* TransitEnvironment.swift */, - 449A7C841D80D0E80019300C /* Info.plist */, - D94BD2FC2159993D00C9214E /* Keys.plist */, - 7E14AEB12177E661006A344D /* TCAT.entitlements */, + 2E9FFA6E2BC673240051793C /* Queries */, ); - name = "Supporting Files"; + path = Operations; sourceTree = ""; }; - 7E14AEDB2177E884006A344D /* Siri */ = { + 2E9FFA732BC673240051793C /* Enums */ = { isa = PBXGroup; children = ( - 7EE2478C23135EAC009C21ED /* Siri.entitlements */, - 7E14AEDC2177E884006A344D /* IntentHandler.swift */, - BFC367F621B66E9A00ABD9AC /* Intents.intentdefinition */, - 7E14AEDE2177E884006A344D /* Info.plist */, + 2E9FFA702BC673240051793C /* AmenityType.graphql.swift */, + 2E9FFA712BC673240051793C /* CourtType.graphql.swift */, + 2E9FFA722BC673240051793C /* FacilityType.graphql.swift */, ); - path = Siri; + path = Enums; + sourceTree = ""; + }; + 2E9FFA7A2BC673240051793C /* Objects */ = { + isa = PBXGroup; + children = ( + 2E9FFA742BC673240051793C /* Amenity.graphql.swift */, + 2E9FFA752BC673240051793C /* Capacity.graphql.swift */, + 2E9FFA762BC673240051793C /* Facility.graphql.swift */, + 2E9FFA772BC673240051793C /* Gym.graphql.swift */, + 2E9FFA782BC673240051793C /* OpenHours.graphql.swift */, + 2E9FFA792BC673240051793C /* Query.graphql.swift */, + ); + path = Objects; sourceTree = ""; }; - BF8460A72172A7A90027FB62 /* Fonts */ = { + 2E9FFA7D2BC673240051793C /* Schema */ = { isa = PBXGroup; children = ( - BF8460A02172A5200027FB62 /* SFProDisplay-Bold.otf */, - BF8460A22172A5210027FB62 /* SFProDisplay-Medium.otf */, - BF84609F2172A5200027FB62 /* SFProDisplay-Regular.otf */, - BF8460A12172A5210027FB62 /* SFProDisplay-Semibold.otf */, - BF8460AA2172B0F80027FB62 /* SFUIText-Bold.otf */, - BF8460A92172B0F70027FB62 /* SFUIText-Medium.otf */, - BF8460AB2172B0F80027FB62 /* SFUIText-Regular.otf */, - BF8460A82172B0F70027FB62 /* SFUIText-Semibold.otf */, + 2E9FFA732BC673240051793C /* Enums */, + 2E9FFA7A2BC673240051793C /* Objects */, + 2E9FFA7B2BC673240051793C /* SchemaConfiguration.swift */, + 2E9FFA7C2BC673240051793C /* SchemaMetadata.graphql.swift */, ); - name = Fonts; + path = Schema; sourceTree = ""; }; - DD2F988E1E50D8660005F6BC /* Base */ = { + 2E9FFA7F2BC673240051793C /* UpliftAPI */ = { isa = PBXGroup; children = ( - 449A7C781D80D0E80019300C /* AppDelegate.swift */, - 449A7C811D80D0E80019300C /* LaunchScreen.storyboard */, + 2E9FFA6C2BC673240051793C /* Fragments */, + 2E9FFA6F2BC673240051793C /* Operations */, + 2E9FFA7D2BC673240051793C /* Schema */, + 2E9FFA7E2BC673240051793C /* UpliftAPI.graphql.swift */, ); - name = Base; + path = UpliftAPI; sourceTree = ""; }; - DD2F988F1E50D89C0005F6BC /* Cells */ = { + 2EC1F50C2BC666F5001D9F66 /* TransitSecrets */ = { isa = PBXGroup; children = ( - DDB49C971E8857E000A99C35 /* BusStopTableViewCell.swift */, - BFEDB85A2232F22100052D49 /* GeneralTableViewCell.swift */, - DDB49C951E8857E000A99C35 /* LargeDetailTableViewCell.swift */, - DDC83CA41E52B0D400D4EDDF /* RouteTableViewCell.swift */, - 2292486D21BB82180004279C /* ServiceAlertTableViewCell.swift */, - 503EC37C1E969ADF00B3D4D4 /* PlaceTableViewCell.swift */, - 30F148B3236F9F0500291AE2 /* NotificationToggleTableViewCell.swift */, - DDB49C961E8857E000A99C35 /* SmallDetailTableViewCell.swift */, - D4B70A092373912800FEB7EA /* FavoritesCollectionViewCell.swift */, - D423AAF723749EC700EF2EB7 /* AddFavoritesCollectionViewCell.swift */, + 2EC1F50D2BC66708001D9F66 /* GoogleService-Info.plist */, + 2EC1F50E2BC66708001D9F66 /* Keys.plist */, ); - name = Cells; + path = TransitSecrets; sourceTree = ""; }; - DD2F98911E50D8C90005F6BC /* Models */ = { + 449A7C6C1D80D0E80019300C = { isa = PBXGroup; children = ( - BF456E0220489990005C611D /* BusLocation.swift */, - DDB49C9B1E8857FC00A99C35 /* BusPath.swift */, - DD36A7011F6637C900E4789E /* Direction.swift */, - BF73F0F21F60B0BD003B479D /* LocationObject.swift */, - DDE3BC221F5863D50014D2BB /* Place.swift */, - DD2F989A1E50F99A0005F6BC /* Route.swift */, - 224D8A5A229F5E3000C5D86A /* Section.swift */, - 22D9599E2269AB1700D115EC /* ServiceAlert.swift */, - BFD5B4E31FAADFAE00955C37 /* WalkPath.swift */, - DDB49C9C1E8857FC00A99C35 /* Waypoint.swift */, - C2240434231838C300095C5C /* PlaceCoordinates.swift */, - C2AAAF6B23392F790025C640 /* AppleSearchResponse.swift */, - C2AAAF6D233976B50025C640 /* SearchManager.swift */, + FD69AF292B8920D500970C7E /* ci_scripts */, + 449A7C771D80D0E80019300C /* TCAT */, + 2EC1F50C2BC666F5001D9F66 /* TransitSecrets */, + 2E9FFA7F2BC673240051793C /* UpliftAPI */, + 449A7C761D80D0E80019300C /* Products */, + 12F774CEB5023E6938BDCF3A /* Frameworks */, + 44BE841D0263A527944A6E0F /* Pods */, ); - name = Models; sourceTree = ""; }; - DD2F98941E50D8DC0005F6BC /* Utilities */ = { + 449A7C761D80D0E80019300C /* Products */ = { isa = PBXGroup; children = ( - CC27BD081FF6C91C00DAA7D5 /* Analytics.swift */, - 224EB5A4214F2F01008232C2 /* AppShortcuts.swift */, - D94BD30021599E3200C9214E /* EventPayload.swift */, - D183AA011E6CB092006A9A15 /* Extensions+App.swift */, - 7EE04A6C21B461D7002F0C52 /* Extensions+Shared.swift */, - DD87F2091E878CB5000C244B /* Loader.swift */, - BF18AE112083B9B8000C3D82 /* Phrases.swift */, - 5006F7B91EC0F59A005ACAF2 /* SearchTableViewHelpers.swift */, - 7EE04A6721B454F4002F0C52 /* Shared.swift */, - BF18AE0F2083B7F6000C3D82 /* StoreReviewHelper.swift */, - BF84609D217139A30027FB62 /* Styles.swift */, - DD5D233B1E6367A100F8DECE /* Time.swift */, + 449A7C751D80D0E80019300C /* TCAT.app */, ); - name = Utilities; + name = Products; sourceTree = ""; }; - DD2F98951E50D8E60005F6BC /* Views */ = { + 449A7C771D80D0E80019300C /* TCAT */ = { isa = PBXGroup; children = ( - DD16B8E41E7046390089B7B2 /* BusIcon.swift */, - BF1209FA1F7759C200A7C930 /* BusLocationView.swift */, - DDBCD5E61E989E5800014641 /* Circle.swift */, - DDBFEA9E1E787008002BBD96 /* DatePickerView.swift */, - DDB49CA11E88584B00A99C35 /* DetailIconView.swift */, - DC2E96451FC21B29009955C6 /* HeaderView.swift */, - BF5C52A3207B96F0003C93B9 /* LiveIndicator.swift */, - BF0002211FB37D0A00773109 /* LoadingIndicator.swift */, - BF316CAF2096352B005A14EF /* PhraseLabelFooterView.swift */, - 30F148BD237CA02F00291AE2 /* NotificationBannerView.swift */, - 22D76E902266CCC000FA21B9 /* RoundShadowedView.swift */, - BF2DA890224539DD006E527D /* RouteDiagram.swift */, - 229BD4E6229792A90042D9D3 /* RouteDiagramSegment.swift */, - DDA134441EC6A8CB00460B18 /* RouteLine.swift */, - DDBFEA9F1E787008002BBD96 /* RouteSelectionView.swift */, - DD3D9C351F945F2A00B164D4 /* RPCircularProgress.swift */, - 502D8F5E1E55161D005280F1 /* SearchBarView.swift */, - BFF41EB1204365E800E0696B /* SummaryView.swift */, - DD659C8920508E1A00506BAC /* WalkWithDistanceIcon.swift */, - 22FD6E8822925EDA0053A174 /* InformationTableHeaderView.swift */, + 449A7C7F1D80D0E80019300C /* Assets.xcassets */, + 2E70434D2BB75E10003AC1D6 /* PrivacyInfo.xcprivacy */, + 2E9416662BC615B0003DEB44 /* Base */, + 2E94166C2BC61604003DEB44 /* Cells */, + 2E9416822BC6168C003DEB44 /* Controllers */, + 2E94165E2BC60A3B003DEB44 /* Ecosystem */, + 2E9416AB2BC616DE003DEB44 /* Models */, + 2292486621B891790004279C /* Network */, + 2E9416C72BC61763003DEB44 /* Supporting */, + 2E9416E02BC618E6003DEB44 /* Utils */, + 2E9416FD2BC61CAE003DEB44 /* Views */, ); - name = Views; + path = TCAT; sourceTree = ""; }; - DD47EA501E50D77D009C68EB /* Controllers */ = { + 44BE841D0263A527944A6E0F /* Pods */ = { isa = PBXGroup; children = ( - BF6095261FD7091B0013E538 /* CustomNavigationController.swift */, - DC2E96431FBF41CB009955C6 /* FavoritesTableViewController.swift */, - 22D76E8C2263E21F00FA21B9 /* HomeMapViewController.swift */, - 22D76E8D2263E21F00FA21B9 /* HomeOptionsCardViewController.swift */, - 224432232318741500987417 /* HomeOptionsCardViewController+Extensions.swift */, - E337970C1FC1606D00BCB28F /* InformationViewController.swift */, - BFB86A06205C614C000794B2 /* OnboardingViewController.swift */, - BFA53FED1FD45D7000E770DF /* RouteDetailViewController.swift */, - DDB49C921E8857D000A99C35 /* RouteDetail+ContentViewController.swift */, - 22443221231871CD00987417 /* RouteDetailContentViewController+Extensions.swift */, - BF5CBAD01FCE6CCE00478C6F /* RouteDetail+DrawerViewController.swift */, - 22A83FD3228B85CE005DE4EB /* RouteDetailDrawerViewController+Extensions.swift */, - DD2F98A21E5150990005F6BC /* RouteOptionsViewController.swift */, - 229BD4E8229947D80042D9D3 /* RouteOptionsViewController+Extensions.swift */, - 503EC37E1E969B2100B3D4D4 /* SearchResultsViewController.swift */, - 2292486B21B8ECB90004279C /* ServiceAlertsViewController.swift */, - DCB7170F1FB76EA600BE4D26 /* StopPickerViewController.swift */, - D4B70A05237390EE00FEB7EA /* FavoritesViewController.swift */, - D4B70A072373910900FEB7EA /* ParentHomeViewController.swift */, + 7C562FAA4261465E07ACE741 /* Pods-TCAT.debug.xcconfig */, + 7A621E1F21DF0FC2CACD61FE /* Pods-TCAT.local.xcconfig */, + 78CE6235AE56D8B3776331B2 /* Pods-TCAT.release.xcconfig */, ); - name = Controllers; + path = Pods; sourceTree = ""; }; FD69AF292B8920D500970C7E /* ci_scripts */ = { @@ -584,64 +615,26 @@ isa = PBXNativeTarget; buildConfigurationList = 449A7C9D1D80D0E80019300C /* Build configuration list for PBXNativeTarget "TCAT" */; buildPhases = ( - 1B3BBAEF4322E579A3144740 /* [CP] Check Pods Manifest.lock */, + E23EEB875E8C363D642AB893 /* [CP] Check Pods Manifest.lock */, 449A7C711D80D0E80019300C /* Sources */, 449A7C721D80D0E80019300C /* Frameworks */, - 7EE2479B23136DF7009C21ED /* Setup Firebase Environment GoogleService-Info.plist */, 449A7C731D80D0E80019300C /* Resources */, - 2292F9DB215722ED00C8C931 /* SwiftLint Script */, + 2292F9DB215722ED00C8C931 /* SwiftLint */, 7E14AED52177E846006A344D /* Embed Foundation Extensions */, - 9A6FEFF1214CED5F4453A9FE /* Setup Firebase Environment GoogleService-Info.plist */, - 5A33F199DB4AF04538DFC589 /* [CP] Copy Pods Resources */, - EA6A24256D95E248AE35F1C6 /* [CP] Embed Pods Frameworks */, - CE26CBF62B879837005D099A /* ShellScript */, + CE26CBF62B879837005D099A /* Crashlytics */, + 2E9416612BC60AE7003DEB44 /* UpliftAPI */, + 882B9E91268F347446806E32 /* [CP] Embed Pods Frameworks */, + 0B4CA64206AF6DA1763F9ACB /* [CP] Copy Pods Resources */, ); buildRules = ( ); dependencies = ( - 7E14AEF02177E884006A344D /* PBXTargetDependency */, ); name = TCAT; productName = TCAT; productReference = 449A7C751D80D0E80019300C /* TCAT.app */; productType = "com.apple.product-type.application"; }; - 449A7C881D80D0E80019300C /* TCATTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 449A7CA01D80D0E80019300C /* Build configuration list for PBXNativeTarget "TCATTests" */; - buildPhases = ( - 860B3689699F733A5952D32B /* [CP] Check Pods Manifest.lock */, - 449A7C851D80D0E80019300C /* Sources */, - 449A7C861D80D0E80019300C /* Frameworks */, - 449A7C871D80D0E80019300C /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 449A7C8B1D80D0E80019300C /* PBXTargetDependency */, - ); - name = TCATTests; - productName = TCATTests; - productReference = 449A7C891D80D0E80019300C /* TCATTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 7E14AED92177E884006A344D /* Siri */ = { - isa = PBXNativeTarget; - buildConfigurationList = 7E14AEF52177E884006A344D /* Build configuration list for PBXNativeTarget "Siri" */; - buildPhases = ( - 7E14AED62177E884006A344D /* Sources */, - 7E14AED72177E884006A344D /* Frameworks */, - 7E14AED82177E884006A344D /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Siri; - productName = Siri; - productReference = 7E14AEDA2177E884006A344D /* Siri.appex */; - productType = "com.apple.product-type.app-extension"; - }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -651,7 +644,7 @@ BuildIndependentTargetsInParallel = YES; LastSwiftUpdateCheck = 1010; LastUpgradeCheck = 1500; - ORGANIZATIONNAME = cuappdev; + ORGANIZATIONNAME = "Cornell AppDev"; TargetAttributes = { 449A7C741D80D0E80019300C = { CreatedOnToolsVersion = 7.3.1; @@ -670,26 +663,10 @@ }; }; }; - 449A7C881D80D0E80019300C = { - CreatedOnToolsVersion = 7.3.1; - LastSwiftMigration = 1000; - TestTargetID = 449A7C741D80D0E80019300C; - }; - 7E14AED92177E884006A344D = { - CreatedOnToolsVersion = 10.0; - DevelopmentTeam = ZGMCXU7X3U; - LastSwiftMigration = 1020; - ProvisioningStyle = Automatic; - SystemCapabilities = { - com.apple.ApplicationGroups.iOS = { - enabled = 1; - }; - }; - }; }; }; buildConfigurationList = 449A7C701D80D0E80019300C /* Build configuration list for PBXProject "TCAT" */; - compatibilityVersion = "Xcode 3.2"; + compatibilityVersion = "Xcode 14.0"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( @@ -702,8 +679,6 @@ projectRoot = ""; targets = ( 449A7C741D80D0E80019300C /* TCAT */, - 449A7C881D80D0E80019300C /* TCATTests */, - 7E14AED92177E884006A344D /* Siri */, ); }; /* End PBXProject section */ @@ -713,61 +688,44 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 7EF304692227502E006B327E /* Keys.plist in Resources */, - BF8460A52172A5220027FB62 /* SFProDisplay-Semibold.otf in Resources */, - BF8460A62172A5220027FB62 /* SFProDisplay-Medium.otf in Resources */, - 449A7C831D80D0E80019300C /* LaunchScreen.storyboard in Resources */, - BF8460AF2172B0F80027FB62 /* SFUIText-Regular.otf in Resources */, - BF8460AC2172B0F80027FB62 /* SFUIText-Semibold.otf in Resources */, + 2EC1F50F2BC66708001D9F66 /* GoogleService-Info.plist in Resources */, + 2E9416D22BC618CA003DEB44 /* SFProDisplay-Bold.otf in Resources */, + 2E9416602BC60A59003DEB44 /* UpliftQueries.graphql in Resources */, + 2E9416D82BC618CA003DEB44 /* SFUIText-Regular.otf in Resources */, + 2EC1F5102BC66708001D9F66 /* Keys.plist in Resources */, 2E70434E2BB75E10003AC1D6 /* PrivacyInfo.xcprivacy in Resources */, - BF8460AD2172B0F80027FB62 /* SFUIText-Medium.otf in Resources */, - BF8460AE2172B0F80027FB62 /* SFUIText-Bold.otf in Resources */, + 2E9416D72BC618CA003DEB44 /* SFProDisplay-Medium.otf in Resources */, + 2E94166A2BC615DF003DEB44 /* LaunchScreen.storyboard in Resources */, + 2E9416D62BC618CA003DEB44 /* SFUIText-Medium.otf in Resources */, + 2E9416D42BC618CA003DEB44 /* SFUIText-Semibold.otf in Resources */, + 2E9416D52BC618CA003DEB44 /* SFUIText-Bold.otf in Resources */, + 2E9416D12BC618CA003DEB44 /* SFProDisplay-Semibold.otf in Resources */, + 2E9416D32BC618CA003DEB44 /* SFProDisplay-Regular.otf in Resources */, 449A7C801D80D0E80019300C /* Assets.xcassets in Resources */, - BF8460A32172A5220027FB62 /* SFProDisplay-Regular.otf in Resources */, - BF8460A42172A5220027FB62 /* SFProDisplay-Bold.otf in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 449A7C871D80D0E80019300C /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7E14AED82177E884006A344D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 1B3BBAEF4322E579A3144740 /* [CP] Check Pods Manifest.lock */ = { + 0B4CA64206AF6DA1763F9ACB /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-TCAT/Pods-TCAT-resources-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-TCAT-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-TCAT/Pods-TCAT-resources-${CONFIGURATION}-output-files.xcfilelist", ); 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"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-TCAT/Pods-TCAT-resources.sh\"\n"; showEnvVarsInLog = 0; }; - 2292F9DB215722ED00C8C931 /* SwiftLint Script */ = { + 2292F9DB215722ED00C8C931 /* SwiftLint */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; @@ -777,7 +735,7 @@ "${PODS_PODFILE_DIR_PATH}/Podfile.lock", "${PODS_ROOT}/Manifest.lock", ); - name = "SwiftLint Script"; + name = SwiftLint; outputPaths = ( "$(DERIVED_FILE_DIR)/Pods-TCATUITests-checkManifestLockResult.txt", ); @@ -785,27 +743,9 @@ shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/SwiftLint/swiftlint\"\n\nif which swiftlint >/dev/null; then\n swiftlint --fix && swiftlint\nelse\n echo \"WARNING: SwiftLint not installed\"\nfi\n"; }; - 5A33F199DB4AF04538DFC589 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-TCAT/Pods-TCAT-resources.sh", - "${PODS_ROOT}/GoogleMaps/Maps/Frameworks/GoogleMaps.xcframework/ios-arm64/GoogleMaps.framework/Resources/GoogleMaps.bundle", - "${PODS_ROOT}/GoogleMaps/Maps/Frameworks/GoogleMaps.xcframework/ios-arm64_x86_64-simulator/GoogleMaps.framework/Resources/GoogleMaps.bundle", - ); - name = "[CP] Copy Pods Resources"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleMaps.bundle", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-TCAT/Pods-TCAT-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - 7EE2479B23136DF7009C21ED /* Setup Firebase Environment GoogleService-Info.plist */ = { + 2E9416612BC60AE7003DEB44 /* UpliftAPI */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -813,56 +753,33 @@ ); inputPaths = ( ); - name = "Setup Firebase Environment GoogleService-Info.plist"; + name = UpliftAPI; outputFileListPaths = ( ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# Name of the resource we're selectively copying\nGOOGLESERVICE_INFO_PLIST=GoogleService-Info.plist\n\n# Get references to dev and prod versions of the GoogleService-Info.plist\n# NOTE: These should only live on the file system and should NOT be part of the target (since we'll be adding them to the target manually)\nGOOGLESERVICE_INFO_DEV=${PROJECT_DIR}/${TARGET_NAME}/Firebase/Dev/${GOOGLESERVICE_INFO_PLIST}\nGOOGLESERVICE_INFO_PROD=${PROJECT_DIR}/${TARGET_NAME}/Firebase/Prod/${GOOGLESERVICE_INFO_PLIST}\n\n# Make sure the dev version of GoogleService-Info.plist exists\necho \"Looking for ${GOOGLESERVICE_INFO_PLIST} in ${GOOGLESERVICE_INFO_DEV}\"\nif [ ! -f $GOOGLESERVICE_INFO_DEV ]\nthen\necho \"No Development GoogleService-Info.plist found. Please ensure it's in the proper directory.\"\nexit 1\nfi\n\n# Make sure the prod version of GoogleService-Info.plist exists\necho \"Looking for ${GOOGLESERVICE_INFO_PLIST} in ${GOOGLESERVICE_INFO_PROD}\"\nif [ ! -f $GOOGLESERVICE_INFO_PROD ]\nthen\necho \"No Production GoogleService-Info.plist found. Please ensure it's in the proper directory.\"\nexit 1\nfi\n\n# Get a reference to the destination location for the GoogleService-Info.plist\nPLIST_DESTINATION=${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app\necho \"Will copy ${GOOGLESERVICE_INFO_PLIST} to final destination: ${PLIST_DESTINATION}\"\n\n# Copy over the prod GoogleService-Info.plist for Release builds\nif [ \"${CONFIGURATION}\" == \"Release\" ]\nthen\necho \"Using ${GOOGLESERVICE_INFO_PROD}\"\ncp \"${GOOGLESERVICE_INFO_PROD}\" \"${PLIST_DESTINATION}\"\nelse\necho \"Using ${GOOGLESERVICE_INFO_DEV}\"\ncp \"${GOOGLESERVICE_INFO_DEV}\" \"${PLIST_DESTINATION}\"\nfi\n"; + shellScript = "CLI_PATH=\"./Pods/Apollo/apollo-ios-cli\"\nSECRETS_PATH=\"${SRCROOT}/TransitSecrets\"\n\nif [ \"${CONFIGURATION}\" != \"Release\" ]; then\n CONFIG_PATH=\"${SECRETS_PATH}/uplift-codegen-config-dev.json\"\nfi\n\nif [ \"${CONFIGURATION}\" = \"Release\" ]; then\n CONFIG_PATH=\"${SECRETS_PATH}/uplift-codegen-config-prod.json\"\nfi\n\n\"${CLI_PATH}\" generate -p \"${CONFIG_PATH}\" -f\n"; }; - 860B3689699F733A5952D32B /* [CP] Check Pods Manifest.lock */ = { + 882B9E91268F347446806E32 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-TCAT/Pods-TCAT-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-TCATTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-TCAT/Pods-TCAT-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); 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"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-TCAT/Pods-TCAT-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 9A6FEFF1214CED5F4453A9FE /* Setup Firebase Environment GoogleService-Info.plist */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - ); - name = "Setup Firebase Environment GoogleService-Info.plist"; - outputFileListPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "# Name of the resource we're selectively copying\nGOOGLESERVICE_INFO_PLIST=GoogleService-Info.plist\n\n# Get references to dev and prod versions of the GoogleService-Info.plist\n# NOTE: These should only live on the file system and should NOT be part of the target (since we'll be adding them to the target manually)\nGOOGLESERVICE_INFO_DEV=${PROJECT_DIR}/${TARGET_NAME}/Firebase/Dev/${GOOGLESERVICE_INFO_PLIST}\nGOOGLESERVICE_INFO_PROD=${PROJECT_DIR}/${TARGET_NAME}/Firebase/Prod/${GOOGLESERVICE_INFO_PLIST}\n\n# Make sure the dev version of GoogleService-Info.plist exists\necho \"Looking for ${GOOGLESERVICE_INFO_PLIST} in ${GOOGLESERVICE_INFO_DEV}\"\nif [ ! -f $GOOGLESERVICE_INFO_DEV ]\nthen\necho \"No Development GoogleService-Info.plist found. Please ensure it's in the proper directory.\"\nexit 1\nfi\n\n# Make sure the prod version of GoogleService-Info.plist exists\necho \"Looking for ${GOOGLESERVICE_INFO_PLIST} in ${GOOGLESERVICE_INFO_PROD}\"\nif [ ! -f $GOOGLESERVICE_INFO_PROD ]\nthen\necho \"No Production GoogleService-Info.plist found. Please ensure it's in the proper directory.\"\nexit 1\nfi\n\n# Get a reference to the destination location for the GoogleService-Info.plist\nPLIST_DESTINATION=${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app\necho \"Will copy ${GOOGLESERVICE_INFO_PLIST} to final destination: ${PLIST_DESTINATION}\"\n\n# Copy over the prod GoogleService-Info.plist for Release builds\nif [ \"${CONFIGURATION}\" == \"Release\" ]\nthen\necho \"Using ${GOOGLESERVICE_INFO_PROD}\"\ncp \"${GOOGLESERVICE_INFO_PROD}\" \"${PLIST_DESTINATION}\"\nelse\necho \"Using ${GOOGLESERVICE_INFO_DEV}\"\ncp \"${GOOGLESERVICE_INFO_DEV}\" \"${PLIST_DESTINATION}\"\nfi\n"; - }; - CE26CBF62B879837005D099A /* ShellScript */ = { + CE26CBF62B879837005D099A /* Crashlytics */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -876,6 +793,7 @@ "$(TARGET_BUILD_DIR)/$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/GoogleService-Info.plist", "$(TARGET_BUILD_DIR)/$(EXECUTABLE_PATH)", ); + name = Crashlytics; outputFileListPaths = ( ); outputPaths = ( @@ -884,60 +802,26 @@ shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/FirebaseCrashlytics/run\"\n"; }; - EA6A24256D95E248AE35F1C6 /* [CP] Embed Pods Frameworks */ = { + E23EEB875E8C363D642AB893 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-TCAT/Pods-TCAT-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/AppDevAnnouncements/AppDevAnnouncements.framework", - "${BUILT_PRODUCTS_DIR}/DZNEmptyDataSet/DZNEmptyDataSet.framework", - "${BUILT_PRODUCTS_DIR}/FirebaseCore/FirebaseCore.framework", - "${BUILT_PRODUCTS_DIR}/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.framework", - "${BUILT_PRODUCTS_DIR}/FirebaseCrashlytics/FirebaseCrashlytics.framework", - "${BUILT_PRODUCTS_DIR}/FirebaseInstallations/FirebaseInstallations.framework", - "${BUILT_PRODUCTS_DIR}/FutureNova/FutureNova.framework", - "${BUILT_PRODUCTS_DIR}/GoogleDataTransport/GoogleDataTransport.framework", - "${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework", - "${BUILT_PRODUCTS_DIR}/MarqueeLabel/MarqueeLabel.framework", - "${BUILT_PRODUCTS_DIR}/NotificationBannerSwift/NotificationBannerSwift.framework", - "${BUILT_PRODUCTS_DIR}/Presentation/Presentation.framework", - "${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework", - "${BUILT_PRODUCTS_DIR}/Pulley/Pulley.framework", - "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework", - "${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework", - "${BUILT_PRODUCTS_DIR}/WhatsNewKit/WhatsNewKit.framework", - "${BUILT_PRODUCTS_DIR}/Wormholy/Wormholy.framework", - "${BUILT_PRODUCTS_DIR}/Zip/Zip.framework", - "${BUILT_PRODUCTS_DIR}/nanopb/nanopb.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}/AppDevAnnouncements.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DZNEmptyDataSet.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCore.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCoreDiagnostics.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCrashlytics.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseInstallations.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FutureNova.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleDataTransport.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleUtilities.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MarqueeLabel.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/NotificationBannerSwift.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Presentation.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBLPromises.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Pulley.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyJSON.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/WhatsNewKit.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Wormholy.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Zip.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/nanopb.framework", + "$(DERIVED_FILE_DIR)/Pods-TCAT-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-TCAT/Pods-TCAT-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; }; /* End PBXShellScriptBuildPhase section */ @@ -947,145 +831,113 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 503EC37D1E969ADF00B3D4D4 /* PlaceTableViewCell.swift in Sources */, - 502D8F5F1E55161D005280F1 /* SearchBarView.swift in Sources */, - D4B70A0A2373912800FEB7EA /* FavoritesCollectionViewCell.swift in Sources */, - 5006F7BA1EC0F59A005ACAF2 /* SearchTableViewHelpers.swift in Sources */, - 22D76E8F2263E21F00FA21B9 /* HomeOptionsCardViewController.swift in Sources */, - C2240435231838C300095C5C /* PlaceCoordinates.swift in Sources */, - 224432242318741500987417 /* HomeOptionsCardViewController+Extensions.swift in Sources */, - DDB49C9D1E8857FC00A99C35 /* BusPath.swift in Sources */, - BFF41EB2204365E800E0696B /* SummaryView.swift in Sources */, - DDB49CA21E88584B00A99C35 /* DetailIconView.swift in Sources */, - 7E155FD72231DA8600FE7A9B /* BusLocationView.swift in Sources */, - 22FD6E8922925EDA0053A174 /* InformationTableHeaderView.swift in Sources */, - 7EEB14272231A3CA00134C8B /* Analytics.swift in Sources */, - 224EB5A5214F2F01008232C2 /* AppShortcuts.swift in Sources */, - BF2DA891224539DE006E527D /* RouteDiagram.swift in Sources */, - 229BD4E7229792A90042D9D3 /* RouteDiagramSegment.swift in Sources */, - BF0002221FB37D0A00773109 /* LoadingIndicator.swift in Sources */, - 7EBD9D8D2226309A008BF900 /* Route.swift in Sources */, - BFEDB85B2232F22100052D49 /* GeneralTableViewCell.swift in Sources */, - BFA53FEE1FD45D7000E770DF /* RouteDetailViewController.swift in Sources */, - 7EBD9D9822263103008BF900 /* BusIcon.swift in Sources */, - E337970D1FC1606D00BCB28F /* InformationViewController.swift in Sources */, - 7EBD9D96222630F2008BF900 /* Time.swift in Sources */, - BF18AE122083B9B8000C3D82 /* Phrases.swift in Sources */, - 7E0A65192226367100441967 /* WalkPath.swift in Sources */, - DDB49C9A1E8857E000A99C35 /* BusStopTableViewCell.swift in Sources */, - C2AAAF6E233976B50025C640 /* SearchManager.swift in Sources */, - 30F148B4236F9F0500291AE2 /* NotificationToggleTableViewCell.swift in Sources */, - 2E029E972BA284D800CF6079 /* TransitEnvironment.swift in Sources */, - 7EBD9D94222630E4008BF900 /* Extensions+Shared.swift in Sources */, - DC2E96461FC21B29009955C6 /* HeaderView.swift in Sources */, - DD87F20A1E878CB5000C244B /* Loader.swift in Sources */, + 2E9416982BC616B9003DEB44 /* RouteDetail+DrawerViewController.swift in Sources */, + 2E94169D2BC616B9003DEB44 /* FavoritesTableViewController.swift in Sources */, + 2E9416692BC615DF003DEB44 /* AppDelegate.swift in Sources */, + 2E9FFA802BC673240051793C /* CapacityFields.graphql.swift in Sources */, + 2E9416F32BC61984003DEB44 /* StoreReviewHelper.swift in Sources */, + 2E9416C12BC61731003DEB44 /* WalkPath.swift in Sources */, + 2E9416BC2BC61731003DEB44 /* Waypoint.swift in Sources */, + 2E9417202BC61CF1003DEB44 /* WalkWithDistanceIcon.swift in Sources */, + 2E94169B2BC616B9003DEB44 /* StopPickerViewController.swift in Sources */, + 2E9417162BC61CF1003DEB44 /* SearchBarView.swift in Sources */, + 2E9FFA882BC673240051793C /* Amenity.graphql.swift in Sources */, + 2E9FFA852BC673240051793C /* AmenityType.graphql.swift in Sources */, + 2E9416F02BC61984003DEB44 /* Extensions+Shared.swift in Sources */, + 2E9FFA8F2BC673240051793C /* SchemaMetadata.graphql.swift in Sources */, + 2E9416A22BC616B9003DEB44 /* ServiceAlertsViewController.swift in Sources */, + 2E9416F42BC61984003DEB44 /* Analytics.swift in Sources */, + 2E9416A62BC616B9003DEB44 /* OnboardingViewController.swift in Sources */, + 2E9416A72BC616B9003DEB44 /* ParentHomeViewController.swift in Sources */, + 2E94167D2BC61679003DEB44 /* FavoritesCollectionViewCell.swift in Sources */, + 2E94167F2BC61679003DEB44 /* PlaceTableViewCell.swift in Sources */, + 2E9417192BC61CF1003DEB44 /* PhraseLabelFooterView.swift in Sources */, + 2E9416FC2BC61984003DEB44 /* Phrases.swift in Sources */, + 2E9417132BC61CF1003DEB44 /* InformationTableHeaderView.swift in Sources */, + 2E9416A42BC616B9003DEB44 /* FavoritesViewController.swift in Sources */, + 2E9416A82BC616B9003DEB44 /* RouteDetailDrawerViewController+Extensions.swift in Sources */, + 2E9416C22BC61731003DEB44 /* AppleSearchResponse.swift in Sources */, + 2E9416A12BC616B9003DEB44 /* RouteOptionsViewController.swift in Sources */, + 2E9416BF2BC61731003DEB44 /* Direction.swift in Sources */, + 2EC1F5122BC66972001D9F66 /* ApolloClientProtocol.swift in Sources */, + 2E9FFA902BC673240051793C /* UpliftAPI.graphql.swift in Sources */, + 2E9416BD2BC61731003DEB44 /* LocationObject.swift in Sources */, + 2E9416802BC61679003DEB44 /* RouteTableViewCell.swift in Sources */, + 2E94171B2BC61CF1003DEB44 /* LiveIndicator.swift in Sources */, + 2E94167C2BC61679003DEB44 /* SmallDetailTableViewCell.swift in Sources */, DD3D9C211F94297100B164D4 /* Reachability.swift in Sources */, - DDBFEAA11E787008002BBD96 /* RouteSelectionView.swift in Sources */, - C2AAAF6C23392F790025C640 /* AppleSearchResponse.swift in Sources */, BF250D7F222FB12400E7F271 /* Endpoints.swift in Sources */, - 7E7E4E79218E19C200C72376 /* IntentHandler.swift in Sources */, - DC2E96441FBF41CB009955C6 /* FavoritesTableViewController.swift in Sources */, + 2E9416A32BC616B9003DEB44 /* HomeMapViewController.swift in Sources */, + 2E9FFA8A2BC673240051793C /* Facility.graphql.swift in Sources */, + 2E9416B92BC61731003DEB44 /* PlaceCoordinates.swift in Sources */, + 2E9417142BC61CF1003DEB44 /* RouteLine.swift in Sources */, + 2E9FFA8C2BC673240051793C /* OpenHours.graphql.swift in Sources */, + 2E9417182BC61CF1003DEB44 /* RouteDiagramSegment.swift in Sources */, + 2E9416C32BC61731003DEB44 /* SearchManager.swift in Sources */, + 2E9417212BC61CF1003DEB44 /* NotificationBannerView.swift in Sources */, D4756EA223986CB500FE7F0D /* ReachabilityManager.swift in Sources */, - D183AA021E6CB092006A9A15 /* Extensions+App.swift in Sources */, - 7EEB14242231A34200134C8B /* Constants.swift in Sources */, - 503EC37F1E969B2100B3D4D4 /* SearchResultsViewController.swift in Sources */, - BF6095271FD7091B0013E538 /* CustomNavigationController.swift in Sources */, - 7EBD9D9A22263107008BF900 /* Circle.swift in Sources */, - 7EBD9D97222630F9008BF900 /* Shared.swift in Sources */, - 7EBD9D8722263089008BF900 /* BusLocation.swift in Sources */, - 7EBD9D92222630DE008BF900 /* EventPayload.swift in Sources */, - BF5CBAD11FCE6CCE00478C6F /* RouteDetail+DrawerViewController.swift in Sources */, - 7EBD9D8A22263094008BF900 /* LocationObject.swift in Sources */, - 22D76E912266CCC000FA21B9 /* RoundShadowedView.swift in Sources */, - 7E155FD82231DAAE00FE7A9B /* Direction.swift in Sources */, - 22443222231871CD00987417 /* RouteDetailContentViewController+Extensions.swift in Sources */, - DDB49C991E8857E000A99C35 /* SmallDetailTableViewCell.swift in Sources */, - D423AAF823749EC700EF2EB7 /* AddFavoritesCollectionViewCell.swift in Sources */, - 7EBD9D8B22263096008BF900 /* Place.swift in Sources */, - DDBFEAA01E787008002BBD96 /* DatePickerView.swift in Sources */, - DDC83CA51E52B0D400D4EDDF /* RouteTableViewCell.swift in Sources */, - DCB717101FB76EA600BE4D26 /* StopPickerViewController.swift in Sources */, - 30F148BE237CA02F00291AE2 /* NotificationBannerView.swift in Sources */, - 22D76E8E2263E21F00FA21B9 /* HomeMapViewController.swift in Sources */, - 7EBD9D9E22263120008BF900 /* WalkWithDistanceIcon.swift in Sources */, - 449A7C791D80D0E80019300C /* AppDelegate.swift in Sources */, - DDB49C981E8857E000A99C35 /* LargeDetailTableViewCell.swift in Sources */, - 22A83FD4228B85CE005DE4EB /* RouteDetailDrawerViewController+Extensions.swift in Sources */, - BF316CB02096352B005A14EF /* PhraseLabelFooterView.swift in Sources */, - 224D8A5B229F5E3000C5D86A /* Section.swift in Sources */, - BF18AE102083B7F6000C3D82 /* StoreReviewHelper.swift in Sources */, - DDB49C9E1E8857FC00A99C35 /* Waypoint.swift in Sources */, - D4B70A082373910900FEB7EA /* ParentHomeViewController.swift in Sources */, - BFB86A07205C614C000794B2 /* OnboardingViewController.swift in Sources */, - 7EBD9D95222630EF008BF900 /* Styles.swift in Sources */, - 7EBD9D9B22263114008BF900 /* LiveIndicator.swift in Sources */, - 7EBD9D9C22263118008BF900 /* RouteLine.swift in Sources */, + 2E9FFA832BC673240051793C /* OpenHoursFields.graphql.swift in Sources */, + 2E9416972BC616B9003DEB44 /* RouteDetail+ContentViewController.swift in Sources */, + 2E9416F62BC61984003DEB44 /* Time.swift in Sources */, + 2E9FFA8D2BC673240051793C /* Query.graphql.swift in Sources */, + 2E9416792BC61679003DEB44 /* AddFavoritesCollectionViewCell.swift in Sources */, + 2E9FFA812BC673240051793C /* FacilityFields.graphql.swift in Sources */, + 2E94171F2BC61CF1003DEB44 /* BusIcon.swift in Sources */, + 2E9417242BC61CF1003DEB44 /* DetailIconView.swift in Sources */, + 2E94171A2BC61CF1003DEB44 /* SummaryView.swift in Sources */, + 2E9416992BC616B9003DEB44 /* RouteDetailContentViewController+Extensions.swift in Sources */, + 2E9416F12BC61984003DEB44 /* Shared.swift in Sources */, + 2E9FFA892BC673240051793C /* Capacity.graphql.swift in Sources */, + 2E9416BB2BC61731003DEB44 /* ServiceAlert.swift in Sources */, + 2EC1F5162BC66CBA001D9F66 /* Publishers.swift in Sources */, + 2E94169E2BC616B9003DEB44 /* SearchResultsViewController.swift in Sources */, + 2E9FFA822BC673240051793C /* GymFields.graphql.swift in Sources */, + 2E9416A02BC616B9003DEB44 /* InformationViewController.swift in Sources */, + 2E9416772BC61679003DEB44 /* ServiceAlertTableViewCell.swift in Sources */, + 2E9416A52BC616B9003DEB44 /* HomeOptionsCardViewController+Extensions.swift in Sources */, + 2E9416F72BC61984003DEB44 /* SearchTableViewHelpers.swift in Sources */, + 2E94171D2BC61CF1003DEB44 /* RoundShadowedView.swift in Sources */, + 2E9416962BC616B9003DEB44 /* RouteDetailViewController.swift in Sources */, + 2E9416BA2BC61731003DEB44 /* Place.swift in Sources */, + 2E9416F52BC61984003DEB44 /* Extensions+App.swift in Sources */, + 2E9416782BC61679003DEB44 /* LargeDetailTableViewCell.swift in Sources */, + 2E94169F2BC616B9003DEB44 /* HomeOptionsCardViewController.swift in Sources */, + 2E94169A2BC616B9003DEB44 /* CustomNavigationController.swift in Sources */, + 2E9416DE2BC618DA003DEB44 /* Constants.swift in Sources */, + 2E9FFA862BC673240051793C /* CourtType.graphql.swift in Sources */, + 2E94167E2BC61679003DEB44 /* BusStopTableViewCell.swift in Sources */, + 2E94167B2BC61679003DEB44 /* NotificationToggleTableViewCell.swift in Sources */, + 2E9416BE2BC61731003DEB44 /* BusLocation.swift in Sources */, + 2EC1F5142BC66A19001D9F66 /* ApolloNetwork.swift in Sources */, + 2E9416C02BC61731003DEB44 /* Route.swift in Sources */, + 2E94171E2BC61CF1003DEB44 /* RouteDiagram.swift in Sources */, + 2E9416C52BC61731003DEB44 /* BusPath.swift in Sources */, + 2E9417232BC61CF1003DEB44 /* DatePickerView.swift in Sources */, + 2E9416FA2BC61984003DEB44 /* JSONFileManager.swift in Sources */, + 2E9416FB2BC61984003DEB44 /* AppShortcuts.swift in Sources */, + 2E9416F22BC61984003DEB44 /* Styles.swift in Sources */, + 2E9416DF2BC618DA003DEB44 /* TransitEnvironment.swift in Sources */, + 2E9FFA8B2BC673240051793C /* Gym.graphql.swift in Sources */, + 2E9FFA8E2BC673240051793C /* SchemaConfiguration.swift in Sources */, + 2E9416EF2BC61984003DEB44 /* EventPayload.swift in Sources */, 22948BFD221B75C5003FC43F /* Models.swift in Sources */, - DDB49C941E8857D000A99C35 /* RouteDetail+ContentViewController.swift in Sources */, - D4B70A06237390EE00FEB7EA /* FavoritesViewController.swift in Sources */, - 22D9599F2269AB1700D115EC /* ServiceAlert.swift in Sources */, - 2292486E21BB82180004279C /* ServiceAlertTableViewCell.swift in Sources */, - 2292486C21B8ECB90004279C /* ServiceAlertsViewController.swift in Sources */, - 229BD4E9229947D80042D9D3 /* RouteOptionsViewController+Extensions.swift in Sources */, - DD3D9C361F945F2A00B164D4 /* RPCircularProgress.swift in Sources */, - BFC367F321B66E9A00ABD9AC /* Intents.intentdefinition in Sources */, - DD2F98A31E5150990005F6BC /* RouteOptionsViewController.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 449A7C851D80D0E80019300C /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D4756EA423986CCE00FE7F0D /* RetainTest.swift in Sources */, - 449A7C8E1D80D0E80019300C /* TCATTests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7E14AED62177E884006A344D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - BFC367F421B66E9A00ABD9AC /* Intents.intentdefinition in Sources */, - 7E14AEDD2177E884006A344D /* IntentHandler.swift in Sources */, + 2E94167A2BC61679003DEB44 /* GeneralTableViewCell.swift in Sources */, + 2E9417222BC61CF1003DEB44 /* BusLocationView.swift in Sources */, + 2E9416C42BC61731003DEB44 /* Section.swift in Sources */, + 2E9417252BC61CF1003DEB44 /* RouteSelectionView.swift in Sources */, + 2E94171C2BC61CF1003DEB44 /* Circle.swift in Sources */, + 2E9FFA842BC673240051793C /* GetAllGymsQuery.graphql.swift in Sources */, + 2E9417122BC61CF1003DEB44 /* LoadingIndicator.swift in Sources */, + 2E9FFA872BC673240051793C /* FacilityType.graphql.swift in Sources */, + 2E9417152BC61CF1003DEB44 /* RPCircularProgress.swift in Sources */, + 2E94169C2BC616B9003DEB44 /* RouteOptionsViewController+Extensions.swift in Sources */, + 2E9416F92BC61984003DEB44 /* Loader.swift in Sources */, + 2E9417172BC61CF1003DEB44 /* HeaderView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ -/* Begin PBXTargetDependency section */ - 449A7C8B1D80D0E80019300C /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 449A7C741D80D0E80019300C /* TCAT */; - targetProxy = 449A7C8A1D80D0E80019300C /* PBXContainerItemProxy */; - }; - 7E14AEF02177E884006A344D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 7E14AED92177E884006A344D /* Siri */; - targetProxy = 7E14AEEF2177E884006A344D /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 449A7C811D80D0E80019300C /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 449A7C821D80D0E80019300C /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; - BFC367F621B66E9A00ABD9AC /* Intents.intentdefinition */ = { - isa = PBXVariantGroup; - children = ( - BFC367F521B66E9A00ABD9AC /* Base */, - BF73322021B67D7100F26620 /* en */, - ); - name = Intents.intentdefinition; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - /* Begin XCBuildConfiguration section */ 449A7C9C1D80D0E80019300C /* Release */ = { isa = XCBuildConfiguration; @@ -1131,7 +983,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_COMPILATION_MODE = wholemodule; @@ -1144,24 +996,24 @@ }; 449A7C9F1D80D0E80019300C /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A781591737EAB3208B7C5185 /* Pods-TCAT.release.xcconfig */; + baseConfigurationReference = 78CE6235AE56D8B3776331B2 /* Pods-TCAT.release.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; BUNDLE_APP_DISPLAY_NAME = "Ithaca Transit"; - CODE_SIGN_ENTITLEMENTS = "TCAT/Supporting Files/TCAT.entitlements"; + CODE_SIGN_ENTITLEMENTS = TCAT/Supporting/TCAT.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 11; DEVELOPMENT_TEAM = ZGMCXU7X3U; EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = YES; + EXCLUDED_ARCHS = ""; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Pods/GoogleMaps/Base/Frameworks", "$(PROJECT_DIR)/Pods/GoogleMaps/Maps/Frameworks", ); - INFOPLIST_FILE = "TCAT/Supporting Files/Info.plist"; + INFOPLIST_FILE = TCAT/Supporting/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = "Ithaca Transit"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.travel"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; @@ -1179,58 +1031,6 @@ }; name = Release; }; - 449A7CA21D80D0E80019300C /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 45788A342647D19AE0D2823E /* Pods-TCATTests.release.xcconfig */; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CURRENT_PROJECT_VERSION = 47; - INFOPLIST_FILE = TCATTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.cuappdev.TCATTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 4.2; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TCAT.app/TCAT"; - }; - name = Release; - }; - 7E14AEF72177E884006A344D /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - 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_ENTITLEMENTS = Siri/Siri.entitlements; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 4; - DEVELOPMENT_TEAM = ZGMCXU7X3U; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = Siri/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@executable_path/../../Frameworks", - ); - MARKETING_VERSION = 1.9.1; - MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = com.cornellappdev.tcat.Siri; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; BFF7E5EE223BFDF0001C6032 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1281,7 +1081,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -1293,24 +1093,24 @@ }; BFF7E5EF223BFDF0001C6032 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BFCE7D560E7713FD58F4D932 /* Pods-TCAT.debug.xcconfig */; + baseConfigurationReference = 7C562FAA4261465E07ACE741 /* Pods-TCAT.debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; BUNDLE_APP_DISPLAY_NAME = "Ithaca Transit Beta"; - CODE_SIGN_ENTITLEMENTS = "TCAT/Supporting Files/TCAT.entitlements"; + CODE_SIGN_ENTITLEMENTS = TCAT/Supporting/TCAT.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 11; DEVELOPMENT_TEAM = ZGMCXU7X3U; EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = YES; + EXCLUDED_ARCHS = ""; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Pods/GoogleMaps/Base/Frameworks", "$(PROJECT_DIR)/Pods/GoogleMaps/Maps/Frameworks", ); - INFOPLIST_FILE = "TCAT/Supporting Files/Info.plist"; + INFOPLIST_FILE = TCAT/Supporting/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = "Ithaca Transit"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.travel"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; @@ -1330,61 +1130,6 @@ }; name = Debug; }; - BFF7E5F0223BFDF0001C6032 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B9EE9A33DC0B648CAC3581D5 /* Pods-TCATTests.debug.xcconfig */; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CURRENT_PROJECT_VERSION = 47; - INFOPLIST_FILE = TCATTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.cuappdev.TCATTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 4.2; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TCAT.app/TCAT"; - }; - name = Debug; - }; - BFF7E5F2223BFDF0001C6032 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - 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_ENTITLEMENTS = Siri/Siri.entitlements; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 4; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = ZGMCXU7X3U; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = Siri/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@executable_path/../../Frameworks", - ); - MARKETING_VERSION = 1.9.1; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = com.cornellappdev.tcat.debug.Siri; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; C27549D4233491FA00D5A754 /* Local */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1435,7 +1180,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -1447,24 +1192,24 @@ }; C27549D5233491FA00D5A754 /* Local */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B4E42C41F3415E83D9F43607 /* Pods-TCAT.local.xcconfig */; + baseConfigurationReference = 7A621E1F21DF0FC2CACD61FE /* Pods-TCAT.local.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; BUNDLE_APP_DISPLAY_NAME = "Ithaca Transit Local"; - CODE_SIGN_ENTITLEMENTS = "TCAT/Supporting Files/TCAT.entitlements"; + CODE_SIGN_ENTITLEMENTS = TCAT/Supporting/TCAT.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 11; DEVELOPMENT_TEAM = ZGMCXU7X3U; EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = YES; + EXCLUDED_ARCHS = ""; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Pods/GoogleMaps/Base/Frameworks", "$(PROJECT_DIR)/Pods/GoogleMaps/Maps/Frameworks", ); - INFOPLIST_FILE = "TCAT/Supporting Files/Info.plist"; + INFOPLIST_FILE = TCAT/Supporting/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = "Ithaca Transit"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.travel"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; @@ -1484,61 +1229,6 @@ }; name = Local; }; - C27549D6233491FA00D5A754 /* Local */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = AA4D65C70B34F6EB84BE347A /* Pods-TCATTests.local.xcconfig */; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CURRENT_PROJECT_VERSION = 47; - INFOPLIST_FILE = TCATTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.cuappdev.TCATTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 4.2; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TCAT.app/TCAT"; - }; - name = Local; - }; - C27549D8233491FA00D5A754 /* Local */ = { - isa = XCBuildConfiguration; - buildSettings = { - 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_ENTITLEMENTS = Siri/Siri.entitlements; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 4; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = ZGMCXU7X3U; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = Siri/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@executable_path/../../Frameworks", - ); - MARKETING_VERSION = 1.9.1; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = com.cornellappdev.tcat.debug.Siri; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Local; - }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -1562,26 +1252,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - 449A7CA01D80D0E80019300C /* Build configuration list for PBXNativeTarget "TCATTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BFF7E5F0223BFDF0001C6032 /* Debug */, - C27549D6233491FA00D5A754 /* Local */, - 449A7CA21D80D0E80019300C /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; - }; - 7E14AEF52177E884006A344D /* Build configuration list for PBXNativeTarget "Siri" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BFF7E5F2223BFDF0001C6032 /* Debug */, - C27549D8233491FA00D5A754 /* Local */, - 7E14AEF72177E884006A344D /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; - }; /* End XCConfigurationList section */ }; rootObject = 449A7C6D1D80D0E80019300C /* Project object */; diff --git a/TCAT.xcodeproj/xcshareddata/xcschemes/Siri.xcscheme b/TCAT.xcodeproj/xcshareddata/xcschemes/Siri.xcscheme deleted file mode 100644 index 799af52a..00000000 --- a/TCAT.xcodeproj/xcshareddata/xcschemes/Siri.xcscheme +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/TCAT.xcodeproj/xcshareddata/xcschemes/TCATTests.xcscheme b/TCAT.xcodeproj/xcshareddata/xcschemes/TCATTests.xcscheme deleted file mode 100644 index c0b55485..00000000 --- a/TCAT.xcodeproj/xcshareddata/xcschemes/TCATTests.xcscheme +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/TCAT.xcodeproj/xcshareddata/xcschemes/Today Extension Debug.xcscheme b/TCAT.xcodeproj/xcshareddata/xcschemes/Today Extension Debug.xcscheme deleted file mode 100644 index 2943b12a..00000000 --- a/TCAT.xcodeproj/xcshareddata/xcschemes/Today Extension Debug.xcscheme +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/TCAT.xcodeproj/xcshareddata/xcschemes/Today Extension Release.xcscheme b/TCAT.xcodeproj/xcshareddata/xcschemes/Today Extension Release.xcscheme deleted file mode 100644 index 65d6aa58..00000000 --- a/TCAT.xcodeproj/xcshareddata/xcschemes/Today Extension Release.xcscheme +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/TCAT/AppDelegate.swift b/TCAT/Base/AppDelegate.swift similarity index 83% rename from TCAT/AppDelegate.swift rename to TCAT/Base/AppDelegate.swift index 2c984631..fc137710 100755 --- a/TCAT/AppDelegate.swift +++ b/TCAT/Base/AppDelegate.swift @@ -6,9 +6,7 @@ // Copyright © 2016 cuappdev. All rights reserved. // -import AppDevAnnouncements import Firebase -import FirebaseCrashlytics import FutureNova import GoogleMaps import Intents @@ -80,12 +78,13 @@ class AppDelegate: UIResponder, UIApplicationDelegate { CustomNavigationController(rootViewController: rootVC) // Setup networking for AppDevAnnouncements - AnnouncementNetworking.setupConfig( - scheme: TransitEnvironment.announcementsScheme, - host: TransitEnvironment.announcementsHost, - commonPath: TransitEnvironment.announcementsCommonPath, - announcementPath: TransitEnvironment.announcementsPath - ) + // TODO: Set up announcements once it's done +// AnnouncementNetworking.setupConfig( +// scheme: TransitEnvironment.announcementsScheme, +// host: TransitEnvironment.announcementsHost, +// commonPath: TransitEnvironment.announcementsCommonPath, +// announcementPath: TransitEnvironment.announcementsPath +// ) // Initalize window without storyboard self.window = UIWindow(frame: UIScreen.main.bounds) @@ -197,31 +196,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate { return false } - func application(_ application: UIApplication, continue userActivity: NSUserActivity, - restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { - - if #available(iOS 12.0, *) { - if let intent = userActivity.interaction?.intent as? GetRoutesIntent, - let latitude = intent.latitude, - let longitude = intent.longitude, - let searchTo = intent.searchTo, - let stopName = searchTo.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed), - let url = URL(string: "ithaca-transit://getRoutes?lat=\(latitude)&long=\(longitude)&stopName=\(stopName)") { - UIApplication.shared.open(url, options: [:]) { didComplete in - let intentDescription = userActivity.interaction?.intent.intentDescription ?? "No Intent Description" - let payload = SiriShortcutUsedPayload( - didComplete: didComplete, - intentDescription: intentDescription, - locationName: stopName - ) - TransitAnalytics.shared.log(payload) - } - return true - } - } - return false - } - } extension UIWindow { diff --git a/TCAT/Base.lproj/LaunchScreen.storyboard b/TCAT/Base/LaunchScreen.storyboard similarity index 100% rename from TCAT/Base.lproj/LaunchScreen.storyboard rename to TCAT/Base/LaunchScreen.storyboard diff --git a/TCAT/AddFavoritesCollectionViewCell.swift b/TCAT/Cells/AddFavoritesCollectionViewCell.swift similarity index 100% rename from TCAT/AddFavoritesCollectionViewCell.swift rename to TCAT/Cells/AddFavoritesCollectionViewCell.swift diff --git a/TCAT/NotificationToggleTableViewCell.swift b/TCAT/Cells/NotificationToggleTableViewCell.swift similarity index 100% rename from TCAT/NotificationToggleTableViewCell.swift rename to TCAT/Cells/NotificationToggleTableViewCell.swift diff --git a/TCAT/Controllers/ParentHomeViewController.swift b/TCAT/Controllers/ParentHomeViewController.swift index 7789a31d..ce1f486c 100644 --- a/TCAT/Controllers/ParentHomeViewController.swift +++ b/TCAT/Controllers/ParentHomeViewController.swift @@ -6,7 +6,6 @@ // Copyright © 2019 cuappdev. All rights reserved. // -import AppDevAnnouncements import Pulley import UIKit @@ -16,11 +15,12 @@ class ParentHomeMapViewController: PulleyViewController { super.viewDidLoad() // Present announcement if there are any new ones to present - presentAnnouncement { presented in - if presented { - TransitAnalytics.shared.log(AnnouncementPresentedPayload()) - } - } + // TODO: Set up announcements once it's done +// presentAnnouncement { presented in +// if presented { +// TransitAnalytics.shared.log(AnnouncementPresentedPayload()) +// } +// } } required init(contentViewController: UIViewController, drawerViewController: UIViewController) { diff --git a/TCAT/Controllers/RouteOptionsViewController.swift b/TCAT/Controllers/RouteOptionsViewController.swift index ef465b1f..2ca2dfa9 100755 --- a/TCAT/Controllers/RouteOptionsViewController.swift +++ b/TCAT/Controllers/RouteOptionsViewController.swift @@ -8,7 +8,6 @@ import CoreLocation import DZNEmptyDataSet -import FirebaseCrashlytics import FutureNova import Intents import NotificationBannerSwift @@ -492,20 +491,6 @@ class RouteOptionsViewController: UIViewController { // Search for Routes Data Request processRequest(start: searchFrom, end: searchTo, time: time, type: self.searchTimeType) - - // Donate GetRoutes intent - if #available(iOS 12.0, *) { - let intent = GetRoutesIntent() - intent.searchTo = searchTo.name - intent.latitude = String(describing: searchTo.latitude) - intent.longitude = String(describing: searchTo.longitude) - intent.suggestedInvocationPhrase = "Find bus to \(searchTo.name)" - let interaction = INInteraction(intent: intent, response: nil) - interaction.donate(completion: { (error) in - guard let error = error else { return } - print("Intent Donation Error: \(error.localizedDescription)") - }) - } } } diff --git a/TCAT/Controllers/SearchResultsViewController.swift b/TCAT/Controllers/SearchResultsViewController.swift index edf4af18..73633253 100755 --- a/TCAT/Controllers/SearchResultsViewController.swift +++ b/TCAT/Controllers/SearchResultsViewController.swift @@ -8,7 +8,6 @@ import CoreLocation import DZNEmptyDataSet -import FirebaseCrashlytics import FutureNova import MapKit import SwiftyJSON diff --git a/TCAT/Ecosystem/ApolloClientProtocol.swift b/TCAT/Ecosystem/ApolloClientProtocol.swift new file mode 100644 index 00000000..e65a698e --- /dev/null +++ b/TCAT/Ecosystem/ApolloClientProtocol.swift @@ -0,0 +1,79 @@ +// +// ApolloClientProtocol.swift +// TCAT +// +// Created by Vin Bui on 4/10/24. +// Copyright © 2024 Cornell AppDev. All rights reserved. +// + +import Apollo +import Combine +import Foundation + +extension ApolloClientProtocol { + + // MARK: - Queries + + /** + Fetch a query from the server or local cache, depending on the cache contents and specified cache policy. + + - Parameters: + - query: The query to fetch. + - cachePolicy: A cache policy that specifies when results should be fetched from the server and when + data should be loaded from the local cache. Defaults to `.default`. + - contextIdentifier: [optional] A unique identifier for this request, to help with deduping cache hits + for watchers. Defaults to `nil`. + - context: [optional] A context that is being passed through the request chain. Defaults to `nil`. + - queue: A dispatch queue on which the result handler will be called. Defaults to the main queue. + + - Returns: A publisher that delivers results from the fetch operation. + */ + func queryPublisher( + query: Query, + cachePolicy: CachePolicy = .default, + contextIdentifier: UUID? = nil, + context: RequestContext? = nil, + queue: DispatchQueue = .main + ) -> Publishers.ApolloQueryPublisher { + let config = Publishers.ApolloQueryConfiguration( + cachePolicy: cachePolicy, + client: self, + context: context, + contextIdentifier: contextIdentifier, + query: query, + queue: queue + ) + return Publishers.ApolloQueryPublisher(with: config) + } + + // MARK: - Mutations + + /** + Perform a mutation by sending it to the server. + + - Parameters: + - mutation: The mutation to perform. + - publishResultToStore: If `true`, this will publish the result returned from the operation to the cache store. + Defaults to `true`. + - context: [optional] A context that is being passed through the request chain. Defaults to `nil`. + - queue: A dispatch queue on which the result handler will be called. Defaults to the main queue. + + - Returns: A publisher that delivers results from the perform operation. + */ + func mutationPublisher( + mutation: Mutation, + publishResultToStore: Bool = true, + context: RequestContext? = nil, + queue: DispatchQueue = .main + ) -> Publishers.ApolloMutationPublisher { + let config = Publishers.ApolloMutationConfiguration( + client: self, + context: context, + mutation: mutation, + publishResultToStore: publishResultToStore, + queue: queue + ) + return Publishers.ApolloMutationPublisher(with: config) + } + +} diff --git a/TCAT/Ecosystem/ApolloNetwork.swift b/TCAT/Ecosystem/ApolloNetwork.swift new file mode 100644 index 00000000..e10531f6 --- /dev/null +++ b/TCAT/Ecosystem/ApolloNetwork.swift @@ -0,0 +1,18 @@ +// +// ApolloNetwork.swift +// TCAT +// +// Created by Vin Bui on 4/10/24. +// Copyright © 2024 Cornell AppDev. All rights reserved. +// + +import Apollo +import Foundation + +/// An API that used Combine Publishers to execute GraphQL requests and return responses via ApolloClient. +final class ApolloNetwork { + + /// The Apollo client for Uplift. + static let upliftClient = ApolloClient(url: URL(string: TransitEnvironment.upliftURL)!) + +} diff --git a/TCAT/Ecosystem/Publishers.swift b/TCAT/Ecosystem/Publishers.swift new file mode 100644 index 00000000..73a7a59b --- /dev/null +++ b/TCAT/Ecosystem/Publishers.swift @@ -0,0 +1,151 @@ +// +// Publishers.swift +// TCAT +// +// Created by Vin Bui on 4/10/24. +// Copyright © 2024 Cornell AppDev. All rights reserved. +// + +import Apollo +import Combine +import Foundation + +extension Publishers { + + // MARK: - Queries + + /// A configuration for an a GraphQL Query used by Apollo. + struct ApolloQueryConfiguration { + let cachePolicy: CachePolicy + let client: ApolloClientProtocol + let context: RequestContext? + let contextIdentifier: UUID? + let query: Query + let queue: DispatchQueue + } + + /// A Combine Publisher for a GraphQL Query used by Apollo. + struct ApolloQueryPublisher: Publisher { + typealias Output = GraphQLResult + typealias Failure = Error + + private let configuration: ApolloQueryConfiguration + + init(with configuration: ApolloQueryConfiguration) { + self.configuration = configuration + } + + func receive(subscriber: S) where Failure == S.Failure, Output == S.Input { + let subscription = ApolloQuerySubscription(subscriber: subscriber, configuration: configuration) + subscriber.receive(subscription: subscription) + } + } + + /// A Combine Subscription for a GraphQL Query used by Apollo. + private final class ApolloQuerySubscription: Subscription + where S.Failure == Error, S.Input == GraphQLResult { + private let configuration: ApolloQueryConfiguration + var subscriber: S? + private var task: Apollo.Cancellable? + + init(subscriber: S?, configuration: ApolloQueryConfiguration) { + self.subscriber = subscriber + self.configuration = configuration + } + + func request(_ demand: Subscribers.Demand) { + task = configuration.client.fetch( + query: configuration.query, + cachePolicy: configuration.cachePolicy, + contextIdentifier: configuration.contextIdentifier, + context: configuration.context, + queue: configuration.queue + ) { [weak self] result in + switch result { + case .success(let data): + _ = self?.subscriber?.receive(data) + + if self?.configuration.cachePolicy == .returnCacheDataAndFetch && data.source == .cache { + return + } + self?.subscriber?.receive(completion: .finished) + + case .failure(let error): + self?.subscriber?.receive(completion: .failure(error)) + } + } + } + + func cancel() { + task?.cancel() + task = nil + subscriber = nil + } + } + + // MARK: - Mutations + + /// A configuration for an a GraphQL Mutation used by Apollo. + struct ApolloMutationConfiguration { + let client: ApolloClientProtocol + let context: RequestContext? + let mutation: Mutation + let publishResultToStore: Bool + let queue: DispatchQueue + } + + /// A Combine Publisher for a GraphQL Mutation used by Apollo. + struct ApolloMutationPublisher: Publisher { + typealias Output = GraphQLResult + typealias Failure = Error + + private let configuration: ApolloMutationConfiguration + + init(with configuration: ApolloMutationConfiguration) { + self.configuration = configuration + } + + func receive(subscriber: S) where Failure == S.Failure, Output == S.Input { + let subscription = ApolloMutationSubscription(subscriber: subscriber, configuration: configuration) + subscriber.receive(subscription: subscription) + } + } + + /// A Combine Subscription for a GraphQL Mutation used by Apollo. + private final class ApolloMutationSubscription: Subscription + where S.Failure == Error, S.Input == GraphQLResult { + private let configuration: ApolloMutationConfiguration + private var subscriber: S? + private var task: Apollo.Cancellable? + + init(subscriber: S, configuration: ApolloMutationConfiguration) { + self.subscriber = subscriber + self.configuration = configuration + } + + func request(_ demand: Subscribers.Demand) { + task = configuration.client.perform( + mutation: configuration.mutation, + publishResultToStore: configuration.publishResultToStore, + context: configuration.context, + queue: configuration.queue + ) { [weak self] result in + switch result { + case .success(let data): + _ = self?.subscriber?.receive(data) + self?.subscriber?.receive(completion: .finished) + + case .failure(let error): + self?.subscriber?.receive(completion: .failure(error)) + } + } + } + + func cancel() { + task?.cancel() + task = nil + subscriber = nil + } + } + +} diff --git a/TCAT/Ecosystem/UpliftQueries.graphql b/TCAT/Ecosystem/UpliftQueries.graphql new file mode 100644 index 00000000..b2f884b7 --- /dev/null +++ b/TCAT/Ecosystem/UpliftQueries.graphql @@ -0,0 +1,50 @@ +fragment capacityFields on Capacity { + count + percent + updated +} + +fragment openHoursFields on OpenHours { + courtType + endTime + isShallow + isSpecial + isWomen + startTime +} + +fragment facilityFields on Facility { + id + capacity { + ...capacityFields + } + facilityType + hours { + ...openHoursFields + } + name +} + +fragment gymFields on Gym { + id + address + amenities { + type + } + facilities { + ...facilityFields + } + hours { + ...openHoursFields + } + imageUrl + latitude + longitude + name +} + +query GetAllGyms { + gyms { + ...gymFields + } +} diff --git a/TCAT/AppleSearchResponse.swift b/TCAT/Models/AppleSearchResponse.swift similarity index 100% rename from TCAT/AppleSearchResponse.swift rename to TCAT/Models/AppleSearchResponse.swift diff --git a/TCAT/Model/BusLocation.swift b/TCAT/Models/BusLocation.swift similarity index 100% rename from TCAT/Model/BusLocation.swift rename to TCAT/Models/BusLocation.swift diff --git a/TCAT/Model/BusPath.swift b/TCAT/Models/BusPath.swift similarity index 100% rename from TCAT/Model/BusPath.swift rename to TCAT/Models/BusPath.swift diff --git a/TCAT/Model/Direction.swift b/TCAT/Models/Direction.swift similarity index 100% rename from TCAT/Model/Direction.swift rename to TCAT/Models/Direction.swift diff --git a/TCAT/Model/LocationObject.swift b/TCAT/Models/LocationObject.swift similarity index 100% rename from TCAT/Model/LocationObject.swift rename to TCAT/Models/LocationObject.swift diff --git a/TCAT/Model/Place.swift b/TCAT/Models/Place.swift similarity index 100% rename from TCAT/Model/Place.swift rename to TCAT/Models/Place.swift diff --git a/TCAT/PlaceCoordinates.swift b/TCAT/Models/PlaceCoordinates.swift similarity index 100% rename from TCAT/PlaceCoordinates.swift rename to TCAT/Models/PlaceCoordinates.swift diff --git a/TCAT/Model/Route.swift b/TCAT/Models/Route.swift similarity index 100% rename from TCAT/Model/Route.swift rename to TCAT/Models/Route.swift diff --git a/TCAT/SearchManager.swift b/TCAT/Models/SearchManager.swift similarity index 100% rename from TCAT/SearchManager.swift rename to TCAT/Models/SearchManager.swift diff --git a/TCAT/Model/Section.swift b/TCAT/Models/Section.swift similarity index 100% rename from TCAT/Model/Section.swift rename to TCAT/Models/Section.swift diff --git a/TCAT/Model/ServiceAlert.swift b/TCAT/Models/ServiceAlert.swift similarity index 100% rename from TCAT/Model/ServiceAlert.swift rename to TCAT/Models/ServiceAlert.swift diff --git a/TCAT/Model/WalkPath.swift b/TCAT/Models/WalkPath.swift similarity index 100% rename from TCAT/Model/WalkPath.swift rename to TCAT/Models/WalkPath.swift diff --git a/TCAT/Model/Waypoint.swift b/TCAT/Models/Waypoint.swift similarity index 100% rename from TCAT/Model/Waypoint.swift rename to TCAT/Models/Waypoint.swift diff --git a/TCAT/Network/Endpoints.swift b/TCAT/Network/Endpoints.swift index 0dacba00..be7fe540 100755 --- a/TCAT/Network/Endpoints.swift +++ b/TCAT/Network/Endpoints.swift @@ -14,7 +14,7 @@ extension Endpoint { static func setupEndpointConfig() { Endpoint.config.scheme = "https" - Endpoint.config.host = TransitEnvironment.baseURL + Endpoint.config.host = TransitEnvironment.transitURL.replacingOccurrences(of: "https://", with: "") Endpoint.config.commonPath = "/api/v3" } diff --git a/TCAT/Supporting Files/TCAT.entitlements b/TCAT/Supporting Files/TCAT.entitlements deleted file mode 100644 index 16f4da6d..00000000 --- a/TCAT/Supporting Files/TCAT.entitlements +++ /dev/null @@ -1,12 +0,0 @@ - - - - - com.apple.developer.siri - - com.apple.security.application-groups - - group.tcat - - - diff --git a/TCAT/Supporting Files/Constants.swift b/TCAT/Supporting/Constants.swift similarity index 100% rename from TCAT/Supporting Files/Constants.swift rename to TCAT/Supporting/Constants.swift diff --git a/TCAT/Supporting Files/Fonts/SFProDisplay-Bold.otf b/TCAT/Supporting/Fonts/SFProDisplay-Bold.otf similarity index 100% rename from TCAT/Supporting Files/Fonts/SFProDisplay-Bold.otf rename to TCAT/Supporting/Fonts/SFProDisplay-Bold.otf diff --git a/TCAT/Supporting Files/Fonts/SFProDisplay-Medium.otf b/TCAT/Supporting/Fonts/SFProDisplay-Medium.otf similarity index 100% rename from TCAT/Supporting Files/Fonts/SFProDisplay-Medium.otf rename to TCAT/Supporting/Fonts/SFProDisplay-Medium.otf diff --git a/TCAT/Supporting Files/Fonts/SFProDisplay-Regular.otf b/TCAT/Supporting/Fonts/SFProDisplay-Regular.otf similarity index 100% rename from TCAT/Supporting Files/Fonts/SFProDisplay-Regular.otf rename to TCAT/Supporting/Fonts/SFProDisplay-Regular.otf diff --git a/TCAT/Supporting Files/Fonts/SFProDisplay-Semibold.otf b/TCAT/Supporting/Fonts/SFProDisplay-Semibold.otf similarity index 100% rename from TCAT/Supporting Files/Fonts/SFProDisplay-Semibold.otf rename to TCAT/Supporting/Fonts/SFProDisplay-Semibold.otf diff --git a/TCAT/Supporting Files/Fonts/SFUIText-Bold.otf b/TCAT/Supporting/Fonts/SFUIText-Bold.otf similarity index 100% rename from TCAT/Supporting Files/Fonts/SFUIText-Bold.otf rename to TCAT/Supporting/Fonts/SFUIText-Bold.otf diff --git a/TCAT/Supporting Files/Fonts/SFUIText-Medium.otf b/TCAT/Supporting/Fonts/SFUIText-Medium.otf similarity index 100% rename from TCAT/Supporting Files/Fonts/SFUIText-Medium.otf rename to TCAT/Supporting/Fonts/SFUIText-Medium.otf diff --git a/TCAT/Supporting Files/Fonts/SFUIText-Regular.otf b/TCAT/Supporting/Fonts/SFUIText-Regular.otf similarity index 100% rename from TCAT/Supporting Files/Fonts/SFUIText-Regular.otf rename to TCAT/Supporting/Fonts/SFUIText-Regular.otf diff --git a/TCAT/Supporting Files/Fonts/SFUIText-Semibold.otf b/TCAT/Supporting/Fonts/SFUIText-Semibold.otf similarity index 100% rename from TCAT/Supporting Files/Fonts/SFUIText-Semibold.otf rename to TCAT/Supporting/Fonts/SFUIText-Semibold.otf diff --git a/TCAT/Supporting Files/Info.plist b/TCAT/Supporting/Info.plist similarity index 100% rename from TCAT/Supporting Files/Info.plist rename to TCAT/Supporting/Info.plist diff --git a/Siri/Siri.entitlements b/TCAT/Supporting/TCAT.entitlements similarity index 100% rename from Siri/Siri.entitlements rename to TCAT/Supporting/TCAT.entitlements diff --git a/TCAT/TransitEnvironment.swift b/TCAT/Supporting/TransitEnvironment.swift similarity index 58% rename from TCAT/TransitEnvironment.swift rename to TCAT/Supporting/TransitEnvironment.swift index 92909436..468a3c19 100644 --- a/TCAT/TransitEnvironment.swift +++ b/TCAT/Supporting/TransitEnvironment.swift @@ -14,19 +14,20 @@ enum TransitEnvironment { /// Keys from Keys.plist. enum Keys { #if DEBUG - static let baseURL: String = "TRANSIT_DEV_URL" + static let eateryURL = "EATERY_DEV_URL" + static let googleMaps = "GOOGLE_MAPS_DEBUG" + static let transitURL = "TRANSIT_DEV_URL" + static let upliftURL = "UPLIFT_DEV_URL" #else - static let baseURL: String = "TRANSIT_PROD_URL" + static let eateryURL = "EATERY_PROD_URL" + static let googleMaps = "GOOGLE_MAPS_RELEASE" + static let transitURL = "TRANSIT_PROD_URL" + static let upliftURL = "UPLIFT_PROD_URL" #endif static let announcementsCommonPath = "ANNOUNCEMENTS_COMMON_PATH" static let announcementsHost = "ANNOUNCEMENTS_HOST" static let announcementsPath = "ANNOUNCEMENTS_PATH" static let announcementsScheme = "ANNOUNCEMENTS_SCHEME" -#if DEBUG - static let googleMaps = "GOOGLE_MAPS_DEBUG" -#else - static let googleMaps = "GOOGLE_MAPS_RELEASE" -#endif } /// A dictionary storing key-value pairs from Keys.plist. @@ -44,12 +45,46 @@ enum TransitEnvironment { * If the scheme is set to DEBUG, the development server URL is used. * If the scheme is set to RELEASE, the production server URL is used. */ - static let baseURL: String = { - guard let baseURLString = TransitEnvironment.keysDict[Keys.baseURL] as? String else { + static let transitURL: String = { + guard let baseURLString = TransitEnvironment.keysDict[Keys.transitURL] as? String else { +#if DEBUG + fatalError("TRANSIT_DEV_URL not found in Keys.plist") +#else + fatalError("TRANSIT_PROD_URL not found in Keys.plist") +#endif + } + return baseURLString + }() + + /** + The base URL of Uplift's backend server. + + * If the scheme is set to DEBUG, the development server URL is used. + * If the scheme is set to RELEASE, the production server URL is used. + */ + static let upliftURL: String = { + guard let baseURLString = TransitEnvironment.keysDict[Keys.upliftURL] as? String else { +#if DEBUG + fatalError("UPLIFT_DEV_URL not found in Keys.plist") +#else + fatalError("UPLIFT_PROD_URL not found in Keys.plist") +#endif + } + return baseURLString + }() + + /** + The base URL of Eatery's backend server. + + * If the scheme is set to DEBUG, the development server URL is used. + * If the scheme is set to RELEASE, the production server URL is used. + */ + static let eateryURL: String = { + guard let baseURLString = TransitEnvironment.keysDict[Keys.eateryURL] as? String else { #if DEBUG - fatalError("TRANSIT_DEV_URL not found in Info.plist") + fatalError("EATERY_DEV_URL not found in Keys.plist") #else - fatalError("TRANSIT_PROD_URL not found in Info.plist") + fatalError("EATERY_PROD_URL not found in Keys.plist") #endif } return baseURLString @@ -58,7 +93,7 @@ enum TransitEnvironment { /// The common path for AppDev Announcements. static let announcementsCommonPath: String = { guard let value = TransitEnvironment.keysDict[Keys.announcementsCommonPath] as? String else { - fatalError("ANNOUNCEMENTS_COMMON_PATH not found in Info.plist") + fatalError("ANNOUNCEMENTS_COMMON_PATH not found in Keys.plist") } return value }() @@ -66,7 +101,7 @@ enum TransitEnvironment { /// The host for AppDev Announcements. static let announcementsHost: String = { guard let value = TransitEnvironment.keysDict[Keys.announcementsHost] as? String else { - fatalError("ANNOUNCEMENTS_HOST not found in Info.plist") + fatalError("ANNOUNCEMENTS_HOST not found in Keys.plist") } return value }() @@ -74,7 +109,7 @@ enum TransitEnvironment { /// The path for AppDev Announcements. static let announcementsPath: String = { guard let value = TransitEnvironment.keysDict[Keys.announcementsPath] as? String else { - fatalError("ANNOUNCEMENTS_PATH not found in Info.plist") + fatalError("ANNOUNCEMENTS_PATH not found in Keys.plist") } return value }() @@ -82,7 +117,7 @@ enum TransitEnvironment { /// The scheme for AppDev Announcements. static let announcementsScheme: String = { guard let value = TransitEnvironment.keysDict[Keys.announcementsScheme] as? String else { - fatalError("ANNOUNCEMENTS_SCHEME not found in Info.plist") + fatalError("ANNOUNCEMENTS_SCHEME not found in Keys.plist") } return value }() @@ -96,9 +131,9 @@ enum TransitEnvironment { static let googleMaps: String = { guard let value = TransitEnvironment.keysDict[Keys.googleMaps] as? String else { #if DEBUG - fatalError("GOOGLE_MAPS_DEBUG not found in Info.plist") + fatalError("GOOGLE_MAPS_DEBUG not found in Keys.plist") #else - fatalError("GOOGLE_MAPS_RELEASE not found in Info.plist") + fatalError("GOOGLE_MAPS_RELEASE not found in Keys.plist") #endif } return value diff --git a/TCAT/Utilities/Network.swift b/TCAT/Utilities/Network.swift deleted file mode 100755 index 8eb2e87a..00000000 --- a/TCAT/Utilities/Network.swift +++ /dev/null @@ -1,362 +0,0 @@ -// -// Network.swift -// TCAT -// -// Created by Austin Astorga on 4/6/17. -// Copyright © 2017 cuappdev. All rights reserved. -// - -import Alamofire -import CoreLocation -import Foundation -import GooglePlaces -import SwiftyJSON -import TRON - -enum NetworkType: String { - case local, debug, release -} - -class Network { - - // MARK: - Global Network Variables - - /// Testing local servers for Network - /// Change `networkType` to `.local` to work locally. - /// Change `localIPAddress` to be the proper address - - static let apiVersion = "v1" - static let networkType: NetworkType = .release - - /// Used for local backend testing - static let localIPAddress = "10.132.0.68" - static let localSource = "http://\(localIPAddress):3000/api/\(apiVersion)/" - - /// Test server used for development - static let debugIPAddress = "34.238.157.63" - static let debugSource = "http://\(debugIPAddress)/api/\(apiVersion)/" - - /// Deployed server instance used for release - static let releaseIPAddress = "transit-backend.cornellappdev.com" - static let releaseSource = "http://\(releaseIPAddress)/api/\(apiVersion)/" - - /// Network IP address being used for specified networkType - static var ipAddress: String { - switch networkType { - case .debug: return debugIPAddress - case .local: return localIPAddress - case .release: return releaseIPAddress - } - } - - /// Network source currently being used - static var address: String { - switch networkType { - case .local: return localSource - case .debug: return debugSource - case .release: return releaseSource - } - } - - static let tron = TRON(baseURL: Network.address) - - class func getAllStops() -> APIRequest { - let request: APIRequest = tron.swiftyJSON.request("allStops") - request.method = .get - return request - } - - class func getCoordinates( - start: CoordinateAcceptor, - end: CoordinateAcceptor, - callback: @escaping ( - _ startCoord: CLLocationCoordinate2D?, - _ endCoord: CLLocationCoordinate2D?, - _ error: CoordinateVisitorError? - ) -> Void - ) { - let visitor = CoordinateVisitor() - start.accept(visitor: visitor) { (startCoord, error) in - guard let startCoord = startCoord else { - callback(nil, nil, error) - return - } - end.accept(visitor: visitor) { (endCoord, error) in - guard let endCoord = endCoord else { - callback(nil, nil, error) - return - } - callback(startCoord, endCoord, nil) - } - } - } - - class func getRoutes( - startCoord: CLLocationCoordinate2D, - endCoord: CLLocationCoordinate2D, - startPlaceName: String, - endPlaceName: String, - time: Date, - type: SearchType, - callback: @escaping (_ request: APIRequest) -> Void - ) { - let request: APIRequest = tron.swiftyJSON.request("route") - request.method = .get - request.parameters = [ - "arriveBy": type == .arriveBy, - "end": "\(endCoord.latitude),\(endCoord.longitude)", - "start": "\(startCoord.latitude),\(startCoord.longitude)", - "time": time.timeIntervalSince1970, - "destinationName": endPlaceName, - "originName": startPlaceName - ] - - // Add unique identifier to request - if let uid = userDefaults.string(forKey: Constants.UserDefaults.uid) { - request.parameters["uid"] = uid - } - - callback(request) - } - - class func getRequestUrl( - startCoord: CLLocationCoordinate2D, - endCoord: CLLocationCoordinate2D, - originName: String, - destinationName: String, - time: Date, - type: SearchType - ) -> String { - let path = "route" - let arriveBy = (type == .arriveBy) - let end = "\(endCoord.latitude),\(endCoord.longitude)" - let start = "\(startCoord.latitude),\(startCoord.longitude)" - let time = time.timeIntervalSince1970 - - // swiftlint:disable:next line_length - return "\(address)\(path)?arriveBy=\(arriveBy)&end=\(end)&start=\(start)&time=\(time)&destinationName=\(destinationName)&originName=\(originName)" - } - - class func getMultiRoutes( - startCoord: CLLocationCoordinate2D, - time: Date, - endCoords: [String], - endPlaceNames: [String], - callback: @escaping (_ request: APIRequest) -> Void - ) { - let request: APIRequest = tron.swiftyJSON.request("multiroute") - request.method = .get - request.parameters = [ - "start": "\(startCoord.latitude),\(startCoord.longitude)", - "time": time.timeIntervalSince1970, - "end": endCoords, - "destinationNames": endPlaceNames - ] - - callback(request) - } - - class func getGooglePlacesAutocompleteResults(searchText: String) -> APIRequest { - let request: APIRequest = tron.swiftyJSON.request("places") - request.method = .post - request.parameterEncoding = JSONEncoding.default - request.parameters = ["query": searchText] - - // Add unique identifier to request - if let uid = userDefaults.string(forKey: Constants.UserDefaults.uid) { - request.parameters["uid"] = uid - } - - return request - } - - // MARK: - #182 • To be updated with Route string identifier - - @discardableResult - class func routeSelected(url: String, rowIndex: Int) -> APIRequest { - let request: APIRequest = tron.swiftyJSON.request("routeSelected") - request.method = .post - request.parameterEncoding = JSONEncoding.default - request.parameters = [ - "tripId": url, - "rowIndex": rowIndex - ] - - // Add unique identifier to request - if let uid = userDefaults.string(forKey: Constants.UserDefaults.uid) { - request.parameters["uid"] = uid - } - - return request - } - - class func getBusLocations(_ directions: [Direction]) -> APIRequest { - let request: APIRequest = tron.swiftyJSON.request("tracking") - request.method = .post - let departDirections = directions.filter { $0.type == .depart && $0.tripIdentifiers != nil } - let dictionary = departDirections.map { (direction) -> [String: Any] in - // The id of the location, or bus stop, the bus needs to get to - let stopID = direction.startLocation.id - - return [ - "stopID": stopID, - "routeID": String(direction.routeNumber), - "tripIdentifiers": direction.tripIdentifiers! - ] - } - - request.parameters = ["data": dictionary] - request.parameterEncoding = JSONEncoding.default - - // Add unique identifier to request - if let uid = userDefaults.string(forKey: Constants.UserDefaults.uid) { - request.parameters["uid"] = uid - } - - return request - } - - class func getDelay(tripId: String, stopId: String) -> APIRequest { - let request: APIRequest = tron.swiftyJSON.request("delay") - request.method = .get - request.parameters = [ - "stopID": stopId, - "tripID": tripId - ] - - // Add unique identifier to request - if let uid = userDefaults.string(forKey: Constants.UserDefaults.uid) { - request.parameters["uid"] = uid - } - - return request - } - - class func getDelayUrl(tripId: String, stopId: String) -> String { - let path = "delay" - return "\(address)\(path)?stopID=\(stopId)&tripID=\(tripId)" - } - -} - -class Error: JSONDecodable { - required init(json: JSON) {} -} - -class AllBusStops: JSONDecodable { - - var allStops: [BusStop] = [BusStop]() - - required init(json: JSON) throws { - if json["success"].boolValue { - let data = json["data"].arrayValue - allStops = parseAllStops(json: data) - } - } - - func parseAllStops(json: [JSON]) -> [BusStop] { - var allStopsArray = [BusStop]() - for stop in json { - let busStop = BusStop( - name: stop["name"].stringValue, - lat: stop["lat"].doubleValue, - long: stop["long"].doubleValue - ) - allStopsArray.append(busStop) - } - - // These next few lines take duplicate stops and find the middle coordinate between - // them and will use that as the condensed bus stop if they are less than 0.1 miles apart - // else just use both stops because they are far apart - let crossReference = allStopsArray.reduce(into: [String: [BusStop]]()) { - $0[$1.name, default: []].append($1) - } - - var nonDuplicateStops = crossReference.filter {$1.count == 1}.map { (_, value) -> BusStop in - return value.first! - } - - let duplicates = crossReference.filter { $1.count > 1 } - - var middleGroundBusStops: [BusStop] = [] - for key in duplicates.keys { - if let currentBusStops = duplicates[key], - let first = currentBusStops.first, - let second = currentBusStops.last { - - let firstStopLocation = CLLocation(latitude: first.lat, longitude: first.long) - let secondStopLocation = CLLocation(latitude: second.lat, longitude: second.long) - - let distanceBetween = firstStopLocation.distance(from: secondStopLocation) - let middleCoordinate = firstStopLocation.coordinate.middleLocationWith( - location: secondStopLocation.coordinate - ) - if distanceBetween < Constants.Values.maxDistanceBetweenStops { - let middleBusStop = BusStop( - name: first.name, - lat: middleCoordinate.latitude, - long: middleCoordinate.longitude - ) - middleGroundBusStops.append(middleBusStop) - } else { - nonDuplicateStops.append(contentsOf: [first, second]) - } - } - } - nonDuplicateStops.append(contentsOf: middleGroundBusStops) - - let sortedStops = nonDuplicateStops.sorted(by: {$0.name.uppercased() < $1.name.uppercased()}) - return sortedStops - } - -} - -class BusLocationResult: JSONDecodable { - - var busLocations: [BusLocation] = [] - - required init(json: JSON) throws { - if json["success"].boolValue { - self.busLocations = json["data"].arrayValue.map { - parseBusLocation(json: $0) - } - } else { - print("BusLocation Init Failure") - } - } - - func parseBusLocation(json: JSON) -> BusLocation { - let dataType: BusDataType = { - switch json["case"].stringValue { - case "noData": return .noData - case "validData": return .validData - default: return .invalidData - } - }() - - let busLocation = BusLocation( - dataType: dataType, - destination: json["destination"].stringValue, - deviation: json["deviation"].intValue, - delay: json["delay"].intValue, - direction: json["direction"].stringValue, - displayStatus: json["displayStatus"].stringValue, - gpsStatus: json["gpsStatus"].intValue, - heading: json["heading"].intValue, - lastStop: json["lastStop"].stringValue, - lastUpdated: Date(timeIntervalSince1970: json["lastUpdated"].doubleValue), - latitude: json["latitude"].doubleValue, - longitude: json["longitude"].doubleValue, - name: json["name"].intValue, - opStatus: json["opStatus"].stringValue, - routeID: json["routeID"].stringValue, - runID: json["runID"].intValue, - speed: json["speed"].intValue, - tripID: json["tripID"].stringValue, - vehicleID: json["vehicleID"].intValue - ) - - return busLocation - } - -} diff --git a/TCAT/Utilities/Analytics.swift b/TCAT/Utils/Analytics.swift similarity index 99% rename from TCAT/Utilities/Analytics.swift rename to TCAT/Utils/Analytics.swift index 1a3f0dbe..7a438ec3 100644 --- a/TCAT/Utilities/Analytics.swift +++ b/TCAT/Utils/Analytics.swift @@ -8,7 +8,6 @@ // To log an event, use the shared RegisterSession (RegisterSession.shared) import FirebaseAnalytics -import FirebaseCrashlytics import Foundation import SwiftyJSON diff --git a/TCAT/Utilities/AppShortcuts.swift b/TCAT/Utils/AppShortcuts.swift similarity index 100% rename from TCAT/Utilities/AppShortcuts.swift rename to TCAT/Utils/AppShortcuts.swift diff --git a/TCAT/Utilities/EventPayload.swift b/TCAT/Utils/EventPayload.swift similarity index 100% rename from TCAT/Utilities/EventPayload.swift rename to TCAT/Utils/EventPayload.swift diff --git a/TCAT/Utilities/Extensions+App.swift b/TCAT/Utils/Extensions+App.swift similarity index 100% rename from TCAT/Utilities/Extensions+App.swift rename to TCAT/Utils/Extensions+App.swift diff --git a/TCAT/Utilities/Extensions+Shared.swift b/TCAT/Utils/Extensions+Shared.swift similarity index 100% rename from TCAT/Utilities/Extensions+Shared.swift rename to TCAT/Utils/Extensions+Shared.swift diff --git a/TCAT/Utilities/JSONFileManager.swift b/TCAT/Utils/JSONFileManager.swift similarity index 100% rename from TCAT/Utilities/JSONFileManager.swift rename to TCAT/Utils/JSONFileManager.swift diff --git a/TCAT/Utilities/Loader.swift b/TCAT/Utils/Loader.swift similarity index 100% rename from TCAT/Utilities/Loader.swift rename to TCAT/Utils/Loader.swift diff --git a/TCAT/Utilities/Phrases.swift b/TCAT/Utils/Phrases.swift similarity index 100% rename from TCAT/Utilities/Phrases.swift rename to TCAT/Utils/Phrases.swift diff --git a/TCAT/Utilities/SearchTableViewHelpers.swift b/TCAT/Utils/SearchTableViewHelpers.swift similarity index 100% rename from TCAT/Utilities/SearchTableViewHelpers.swift rename to TCAT/Utils/SearchTableViewHelpers.swift diff --git a/TCAT/Utilities/Shared.swift b/TCAT/Utils/Shared.swift similarity index 100% rename from TCAT/Utilities/Shared.swift rename to TCAT/Utils/Shared.swift diff --git a/TCAT/Utilities/StoreReviewHelper.swift b/TCAT/Utils/StoreReviewHelper.swift similarity index 100% rename from TCAT/Utilities/StoreReviewHelper.swift rename to TCAT/Utils/StoreReviewHelper.swift diff --git a/TCAT/Utilities/Styles.swift b/TCAT/Utils/Styles.swift similarity index 100% rename from TCAT/Utilities/Styles.swift rename to TCAT/Utils/Styles.swift diff --git a/TCAT/Utilities/Time.swift b/TCAT/Utils/Time.swift similarity index 100% rename from TCAT/Utilities/Time.swift rename to TCAT/Utils/Time.swift diff --git a/TCAT/NotificationBannerView.swift b/TCAT/Views/NotificationBannerView.swift similarity index 100% rename from TCAT/NotificationBannerView.swift rename to TCAT/Views/NotificationBannerView.swift diff --git a/TCATTests/Info.plist b/TCATTests/Info.plist deleted file mode 100644 index a7b88a85..00000000 --- a/TCATTests/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 47 - - diff --git a/TCATTests/RetainTest.swift b/TCATTests/RetainTest.swift deleted file mode 100644 index f9fbdf94..00000000 --- a/TCATTests/RetainTest.swift +++ /dev/null @@ -1,57 +0,0 @@ -// -// RetainTest.swift -// TCATTests -// -// Created by Daniel Vebman on 11/10/19. -// Copyright © 2019 cuappdev. All rights reserved. -// - -import Foundation -import UIKit - -class TestRetainVC: UIViewController { - - let v = UIView() - - init() { - super.init(nibName: nil, bundle: nil) - - TestManager.shared.addListener(self) { [weak self] s in - self?.v.backgroundColor = .red - print("Recevied " + s) - } - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - -} - -class TestManager { - - static let shared = TestManager() - - private var listeners: [Pair] = [] - - private struct Pair { - weak var listener: Listener? - var closure: Closure - } - typealias Listener = AnyObject - typealias Closure = (String) -> Void - - func addListener(_ listener: Listener, _ closure: @escaping Closure) { - listeners.append(Pair(listener: listener, closure: closure)) - } - - func fire(_ s: String) { - listeners = listeners.filter { pair -> Bool in - pair.closure(s) - return pair.listener != nil - } - - print("*", listeners) - } - -} diff --git a/TCATTests/TCATTests.swift b/TCATTests/TCATTests.swift deleted file mode 100644 index 9418eb8b..00000000 --- a/TCATTests/TCATTests.swift +++ /dev/null @@ -1,53 +0,0 @@ -// -// TCATTests.swift -// TCATTests -// -// Created by Kevin Greer on 9/7/16. -// Copyright © 2016 cuappdev. All rights reserved. -// - -import XCTest - -class TCATTests: XCTestCase { - - var vc: TestRetainVC? - - override func setUp() { - super.setUp() - // Put setup code here. This method is called before the invocation of each test method in the class. - - } - - override func tearDown() { - // Put teardown code here. This method is called after the invocation of each test method in the class. - super.tearDown() - } - - func testRetain() { - print("* Test retain...") - - vc = TestRetainVC() - - TestManager.shared.fire("* Hello") - TestManager.shared.fire("* Banana") - - vc = nil - - TestManager.shared.fire("* world") - - print("* Done.") - } - - func testExample() { - // This is an example of a functional test case. - // Use XCTAssert and related functions to verify your tests produce the correct results. - } - - func testPerformanceExample() { - // This is an example of a performance test case. - self.measure { - // Put the code you want to measure the time of here. - } - } - -} diff --git a/ci_scripts/ci_post_clone.sh b/ci_scripts/ci_post_clone.sh index 838f670e..92fe2759 100755 --- a/ci_scripts/ci_post_clone.sh +++ b/ci_scripts/ci_post_clone.sh @@ -8,29 +8,29 @@ echo "Installing Pods" -# Install CocoaPods using Homebrew. +# Install CocoaPods using Homebrew brew install cocoapods -# Install dependencies you manage with CocoaPods. +# Install dependencies with CocoaPods pod install echo "Downloading Secrets" -# Install wget using Homebrew. +# Install wget using Homebrew brew install wget -# Create directories if they don't exist. -cd ../TCAT -mkdir Firebase -cd Firebase -mkdir Dev -mkdir Prod - # Change directory to ci_scripts cd $CI_PRIMARY_REPOSITORY_PATH/ci_scripts -# Download files -wget -O ../TCAT/Firebase/Prod/GoogleService-Info.plist "$DEV_GOOGLE_SERVICE_PLIST" -wget -O ../TCAT/Firebase/Dev/GoogleService-Info.plist "$PROD_GOOGLE_SERVICE_PLIST" -wget -O ../TCAT/Supporting\ Files/Keys.plist "$KEYS_PLIST" +# Create directories +mkdir ../TransitSecrets +# Download files +wget -O ../TransitSecrets/uplift-codegen-config-dev.json "$UPLIFT_CODEGEN_DEV" +wget -O ../TransitSecrets/uplift-codegen-config-prod.json "$UPLIFT_CODEGEN_PROD" +wget -O ../TransitSecrets/Keys.plist "$KEYS_PLIST" +wget -O ../TransitSecrets/GoogleService-Info.plist "$GOOGLE_PLIST" + +# Generate API file via Apollo +echo "Generating API file" +../Pods/Apollo/apollo-ios-cli generate -p "TransitSecrets/uplift-codegen-config-prod.json" -f