├── .github
├── CONTRIBUTING.md
├── ISSUE_TEMPLATE.md
└── PULL_REQUEST_TEMPLATE.md
├── .gitignore
├── README.md
├── mvvm
├── SUI Koober.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
└── SUI Koober
│ ├── App
│ ├── AppDelegate.swift
│ ├── Koober.swift
│ ├── KooberDependencyContainer.swift
│ ├── Launching
│ │ └── LaunchingView.swift
│ ├── MainView.swift
│ ├── Running
│ │ ├── NewRide
│ │ │ ├── ConfirmNewRide
│ │ │ │ └── EnjoyTheRideView.swift
│ │ │ ├── LocateUser
│ │ │ │ └── LocatingUserView.swift
│ │ │ ├── NewRideView.swift
│ │ │ ├── SelectDropoffLocation
│ │ │ │ └── SelectDropoffLocationView.swift
│ │ │ ├── SelectRideOptionView.swift
│ │ │ └── SendNewRideRequest
│ │ │ │ └── SendingNewRideRequestView.swift
│ │ ├── Onboard
│ │ │ ├── OnboardView.swift
│ │ │ ├── SignInView.swift
│ │ │ ├── SignInViewModel.swift
│ │ │ ├── SignUpView.swift
│ │ │ └── WelcomeView.swift
│ │ ├── RunningView.swift
│ │ └── UserProfile
│ │ │ └── UserProfileView.swift
│ └── SceneDelegate.swift
│ ├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ ├── Colors
│ │ ├── BackgroundColor.colorset
│ │ │ └── Contents.json
│ │ ├── Contents.json
│ │ ├── PlaceholderTextColor.colorset
│ │ │ └── Contents.json
│ │ ├── SearchBackgroundColor.colorset
│ │ │ └── Contents.json
│ │ └── SecondaryBackgroundColor.colorset
│ │ │ └── Contents.json
│ ├── Contents.json
│ └── Images
│ │ ├── Contents.json
│ │ ├── Onboard
│ │ ├── Contents.json
│ │ ├── email_icon.imageset
│ │ │ ├── Contents.json
│ │ │ ├── email_icon.png
│ │ │ ├── email_icon@2x.png
│ │ │ └── email_icon@3x.png
│ │ ├── mobile_icon.imageset
│ │ │ ├── Contents.json
│ │ │ ├── mobile_icon.png
│ │ │ ├── mobile_icon@2x.png
│ │ │ └── mobile_icon@3x.png
│ │ ├── password_icon.imageset
│ │ │ ├── Contents.json
│ │ │ ├── password_icon.png
│ │ │ ├── password_icon@2x.png
│ │ │ └── password_icon@3x.png
│ │ ├── person_icon.imageset
│ │ │ ├── Contents.json
│ │ │ ├── person.png
│ │ │ ├── person@2x.png
│ │ │ └── person@3x.png
│ │ ├── roo_logo.imageset
│ │ │ ├── Contents.json
│ │ │ ├── roo_logo.png
│ │ │ ├── roo_logo@2x.png
│ │ │ └── roo_logo@3x.png
│ │ └── tag_icon.imageset
│ │ │ ├── Contents.json
│ │ │ ├── tag.png
│ │ │ ├── tag@2x.png
│ │ │ └── tag@3x.png
│ │ ├── RequestRide
│ │ ├── CancelButton.imageset
│ │ │ ├── CancelButton.png
│ │ │ ├── CancelButton@2x.png
│ │ │ ├── CancelButton@3x.png
│ │ │ └── Contents.json
│ │ ├── Contents.json
│ │ ├── DriverEnRoute.imageset
│ │ │ ├── Contents.json
│ │ │ ├── Driver En Route@1x.png
│ │ │ ├── Driver En Route@2x.png
│ │ │ └── Driver En Route@3x.png
│ │ ├── MapMarkerDropoffLocation.imageset
│ │ │ ├── Contents.json
│ │ │ ├── map_marker_destination_location.png
│ │ │ ├── map_marker_destination_location@2x.png
│ │ │ └── map_marker_destination_location@3x.png
│ │ ├── MapMarkerPickupLocation.imageset
│ │ │ ├── Contents.json
│ │ │ ├── map_marker_pickup_location.png
│ │ │ ├── map_marker_pickup_location@2x.png
│ │ │ └── map_marker_pickup_location@3x.png
│ │ ├── ProgressKangaroo.imageset
│ │ │ ├── Contents.json
│ │ │ ├── progress_kangaroo.png
│ │ │ ├── progress_kangaroo@2x.png
│ │ │ └── progress_kangaroo@3x.png
│ │ ├── RideOptionPicker
│ │ │ ├── Contents.json
│ │ │ ├── available_kangaroo_marker.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── available_kangaroo_marker.png
│ │ │ │ ├── available_kangaroo_marker@2x.png
│ │ │ │ └── available_kangaroo_marker@3x.png
│ │ │ ├── available_wallabe_marker.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── available_wallabe_marker.png
│ │ │ │ ├── available_wallabe_marker@2x.png
│ │ │ │ └── available_wallabe_marker@3x.png
│ │ │ ├── available_wallaroo_marker.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── available_wallaroo_marker.png
│ │ │ │ ├── available_wallaroo_marker@2x.png
│ │ │ │ └── available_wallaroo_marker@3x.png
│ │ │ ├── ride_option_kangaroo.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── ride_option_kangaroo.png
│ │ │ │ ├── ride_option_kangaroo@2x.png
│ │ │ │ └── ride_option_kangaroo@3x.png
│ │ │ ├── ride_option_kangaroo_selected.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── ride_option_kangaroo_selected.png
│ │ │ │ ├── ride_option_kangaroo_selected@2x.png
│ │ │ │ └── ride_option_kangaroo_selected@3x.png
│ │ │ ├── ride_option_wallabee.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── ride_option_wallabee.png
│ │ │ │ ├── ride_option_wallabee@2x.png
│ │ │ │ └── ride_option_wallabee@3x.png
│ │ │ ├── ride_option_wallabee_selected.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── ride_option_wallabee_selected.png
│ │ │ │ ├── ride_option_wallabee_selected@2x.png
│ │ │ │ └── ride_option_wallabee_selected@3x.png
│ │ │ ├── ride_option_wallaroo.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── ride_option_wallaroo.png
│ │ │ │ ├── ride_option_wallaroo@2x.png
│ │ │ │ └── ride_option_wallaroo@3x.png
│ │ │ └── ride_option_wallaroo_selected.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── ride_option_wallaroo_selected.png
│ │ │ │ ├── ride_option_wallaroo_selected@2x.png
│ │ │ │ └── ride_option_wallaroo_selected@3x.png
│ │ ├── SetPickupLocationLoader.imageset
│ │ │ ├── Contents.json
│ │ │ ├── set_pickup_location_loader.png
│ │ │ ├── set_pickup_location_loader@2x.png
│ │ │ └── set_pickup_location_loader@3x.png
│ │ ├── available_placeholder_marker.imageset
│ │ │ ├── Contents.json
│ │ │ ├── available_placeholder_marker.png
│ │ │ ├── available_placeholder_marker@2x.png
│ │ │ └── available_placeholder_marker@3x.png
│ │ ├── koober.imageset
│ │ │ ├── Contents.json
│ │ │ ├── Icon-60@2x.png
│ │ │ └── Icon-60@3x.png
│ │ ├── requesting_indicator.imageset
│ │ │ ├── Contents.json
│ │ │ ├── requesting_indicator.png
│ │ │ ├── requesting_indicator@2x.png
│ │ │ └── requesting_indicator@3x.png
│ │ ├── ride_option_placeholder.imageset
│ │ │ ├── Contents.json
│ │ │ ├── ride_option_placeholder.png
│ │ │ ├── ride_option_placeholder@2x.png
│ │ │ └── ride_option_placeholder@3x.png
│ │ ├── ride_option_placeholder_selected.imageset
│ │ │ ├── Contents.json
│ │ │ ├── ride_option_wallabee_selected.png
│ │ │ ├── ride_option_wallabee_selected@2x.png
│ │ │ └── ride_option_wallabee_selected@3x.png
│ │ └── success_message.imageset
│ │ │ ├── Contents.json
│ │ │ ├── success_message.png
│ │ │ ├── success_message@2x.png
│ │ │ └── success_message@3x.png
│ │ ├── SelectPaymentMethod
│ │ ├── Contents.json
│ │ ├── card_icon.imageset
│ │ │ ├── Contents.json
│ │ │ ├── card_icon.png
│ │ │ ├── card_icon@2x.png
│ │ │ └── card_icon@3x.png
│ │ └── selected_icon.imageset
│ │ │ ├── Contents.json
│ │ │ ├── selected_icon.png
│ │ │ ├── selected_icon@2x.png
│ │ │ └── selected_icon@3x.png
│ │ ├── roo-icon.imageset
│ │ ├── Contents.json
│ │ ├── roo-icon.png
│ │ ├── roo-icon@2x.png
│ │ └── roo-icon@3x.png
│ │ ├── rw-logo.imageset
│ │ ├── Contents.json
│ │ └── Razewarelogo_1024.png
│ │ ├── rwdevcon-bg.imageset
│ │ ├── Contents.json
│ │ └── rwdevcon-bg.png
│ │ └── rwdevcon-logo.imageset
│ │ ├── Contents.json
│ │ └── rwdevcon-logo.png
│ ├── Base.lproj
│ └── LaunchScreen.storyboard
│ ├── Info.plist
│ ├── Preview Content
│ └── Preview Assets.xcassets
│ │ └── Contents.json
│ ├── ReusableModels
│ └── ErrorMessage.swift
│ ├── ReusableViews
│ └── FullscreenView.swift
│ ├── Subsystems
│ ├── UserAuthenticationRemoteAPI.swift
│ └── UserSessionStore.swift
│ └── UseCases
│ └── SignInUseCase.swift
└── swift-state
├── SUI Koober.xcodeproj
├── project.pbxproj
└── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ └── IDEWorkspaceChecks.plist
└── SUI Koober
├── App
├── AppDelegate.swift
├── Koober.swift
├── KooberDependencyContainer.swift
├── Launching
│ └── LaunchingView.swift
├── MainView.swift
├── Running
│ ├── NewRide
│ │ ├── ConfirmNewRide
│ │ │ └── EnjoyTheRideView.swift
│ │ ├── LocateUser
│ │ │ └── LocatingUserView.swift
│ │ ├── NewRideView.swift
│ │ ├── SelectDropoffLocation
│ │ │ └── SelectDropoffLocationView.swift
│ │ ├── SelectRideOptionView.swift
│ │ └── SendNewRideRequest
│ │ │ └── SendingNewRideRequestView.swift
│ ├── Onboard
│ │ ├── OnboardView.swift
│ │ ├── SignInView.swift
│ │ ├── SignInViewModel.swift
│ │ ├── SignUpView.swift
│ │ └── WelcomeView.swift
│ ├── RunningView.swift
│ └── UserProfile
│ │ └── UserProfileView.swift
└── SceneDelegate.swift
├── Assets.xcassets
├── AppIcon.appiconset
│ └── Contents.json
├── Colors
│ ├── BackgroundColor.colorset
│ │ └── Contents.json
│ ├── Contents.json
│ ├── PlaceholderTextColor.colorset
│ │ └── Contents.json
│ ├── SearchBackgroundColor.colorset
│ │ └── Contents.json
│ └── SecondaryBackgroundColor.colorset
│ │ └── Contents.json
├── Contents.json
└── Images
│ ├── Contents.json
│ ├── Onboard
│ ├── Contents.json
│ ├── email_icon.imageset
│ │ ├── Contents.json
│ │ ├── email_icon.png
│ │ ├── email_icon@2x.png
│ │ └── email_icon@3x.png
│ ├── mobile_icon.imageset
│ │ ├── Contents.json
│ │ ├── mobile_icon.png
│ │ ├── mobile_icon@2x.png
│ │ └── mobile_icon@3x.png
│ ├── password_icon.imageset
│ │ ├── Contents.json
│ │ ├── password_icon.png
│ │ ├── password_icon@2x.png
│ │ └── password_icon@3x.png
│ ├── person_icon.imageset
│ │ ├── Contents.json
│ │ ├── person.png
│ │ ├── person@2x.png
│ │ └── person@3x.png
│ ├── roo_logo.imageset
│ │ ├── Contents.json
│ │ ├── roo_logo.png
│ │ ├── roo_logo@2x.png
│ │ └── roo_logo@3x.png
│ └── tag_icon.imageset
│ │ ├── Contents.json
│ │ ├── tag.png
│ │ ├── tag@2x.png
│ │ └── tag@3x.png
│ ├── RequestRide
│ ├── CancelButton.imageset
│ │ ├── CancelButton.png
│ │ ├── CancelButton@2x.png
│ │ ├── CancelButton@3x.png
│ │ └── Contents.json
│ ├── Contents.json
│ ├── DriverEnRoute.imageset
│ │ ├── Contents.json
│ │ ├── Driver En Route@1x.png
│ │ ├── Driver En Route@2x.png
│ │ └── Driver En Route@3x.png
│ ├── MapMarkerDropoffLocation.imageset
│ │ ├── Contents.json
│ │ ├── map_marker_destination_location.png
│ │ ├── map_marker_destination_location@2x.png
│ │ └── map_marker_destination_location@3x.png
│ ├── MapMarkerPickupLocation.imageset
│ │ ├── Contents.json
│ │ ├── map_marker_pickup_location.png
│ │ ├── map_marker_pickup_location@2x.png
│ │ └── map_marker_pickup_location@3x.png
│ ├── ProgressKangaroo.imageset
│ │ ├── Contents.json
│ │ ├── progress_kangaroo.png
│ │ ├── progress_kangaroo@2x.png
│ │ └── progress_kangaroo@3x.png
│ ├── RideOptionPicker
│ │ ├── Contents.json
│ │ ├── available_kangaroo_marker.imageset
│ │ │ ├── Contents.json
│ │ │ ├── available_kangaroo_marker.png
│ │ │ ├── available_kangaroo_marker@2x.png
│ │ │ └── available_kangaroo_marker@3x.png
│ │ ├── available_wallabe_marker.imageset
│ │ │ ├── Contents.json
│ │ │ ├── available_wallabe_marker.png
│ │ │ ├── available_wallabe_marker@2x.png
│ │ │ └── available_wallabe_marker@3x.png
│ │ ├── available_wallaroo_marker.imageset
│ │ │ ├── Contents.json
│ │ │ ├── available_wallaroo_marker.png
│ │ │ ├── available_wallaroo_marker@2x.png
│ │ │ └── available_wallaroo_marker@3x.png
│ │ ├── ride_option_kangaroo.imageset
│ │ │ ├── Contents.json
│ │ │ ├── ride_option_kangaroo.png
│ │ │ ├── ride_option_kangaroo@2x.png
│ │ │ └── ride_option_kangaroo@3x.png
│ │ ├── ride_option_kangaroo_selected.imageset
│ │ │ ├── Contents.json
│ │ │ ├── ride_option_kangaroo_selected.png
│ │ │ ├── ride_option_kangaroo_selected@2x.png
│ │ │ └── ride_option_kangaroo_selected@3x.png
│ │ ├── ride_option_wallabee.imageset
│ │ │ ├── Contents.json
│ │ │ ├── ride_option_wallabee.png
│ │ │ ├── ride_option_wallabee@2x.png
│ │ │ └── ride_option_wallabee@3x.png
│ │ ├── ride_option_wallabee_selected.imageset
│ │ │ ├── Contents.json
│ │ │ ├── ride_option_wallabee_selected.png
│ │ │ ├── ride_option_wallabee_selected@2x.png
│ │ │ └── ride_option_wallabee_selected@3x.png
│ │ ├── ride_option_wallaroo.imageset
│ │ │ ├── Contents.json
│ │ │ ├── ride_option_wallaroo.png
│ │ │ ├── ride_option_wallaroo@2x.png
│ │ │ └── ride_option_wallaroo@3x.png
│ │ └── ride_option_wallaroo_selected.imageset
│ │ │ ├── Contents.json
│ │ │ ├── ride_option_wallaroo_selected.png
│ │ │ ├── ride_option_wallaroo_selected@2x.png
│ │ │ └── ride_option_wallaroo_selected@3x.png
│ ├── SetPickupLocationLoader.imageset
│ │ ├── Contents.json
│ │ ├── set_pickup_location_loader.png
│ │ ├── set_pickup_location_loader@2x.png
│ │ └── set_pickup_location_loader@3x.png
│ ├── available_placeholder_marker.imageset
│ │ ├── Contents.json
│ │ ├── available_placeholder_marker.png
│ │ ├── available_placeholder_marker@2x.png
│ │ └── available_placeholder_marker@3x.png
│ ├── koober.imageset
│ │ ├── Contents.json
│ │ ├── Icon-60@2x.png
│ │ └── Icon-60@3x.png
│ ├── requesting_indicator.imageset
│ │ ├── Contents.json
│ │ ├── requesting_indicator.png
│ │ ├── requesting_indicator@2x.png
│ │ └── requesting_indicator@3x.png
│ ├── ride_option_placeholder.imageset
│ │ ├── Contents.json
│ │ ├── ride_option_placeholder.png
│ │ ├── ride_option_placeholder@2x.png
│ │ └── ride_option_placeholder@3x.png
│ ├── ride_option_placeholder_selected.imageset
│ │ ├── Contents.json
│ │ ├── ride_option_wallabee_selected.png
│ │ ├── ride_option_wallabee_selected@2x.png
│ │ └── ride_option_wallabee_selected@3x.png
│ └── success_message.imageset
│ │ ├── Contents.json
│ │ ├── success_message.png
│ │ ├── success_message@2x.png
│ │ └── success_message@3x.png
│ ├── SelectPaymentMethod
│ ├── Contents.json
│ ├── card_icon.imageset
│ │ ├── Contents.json
│ │ ├── card_icon.png
│ │ ├── card_icon@2x.png
│ │ └── card_icon@3x.png
│ └── selected_icon.imageset
│ │ ├── Contents.json
│ │ ├── selected_icon.png
│ │ ├── selected_icon@2x.png
│ │ └── selected_icon@3x.png
│ ├── roo-icon.imageset
│ ├── Contents.json
│ ├── roo-icon.png
│ ├── roo-icon@2x.png
│ └── roo-icon@3x.png
│ ├── rw-logo.imageset
│ ├── Contents.json
│ └── Razewarelogo_1024.png
│ ├── rwdevcon-bg.imageset
│ ├── Contents.json
│ └── rwdevcon-bg.png
│ └── rwdevcon-logo.imageset
│ ├── Contents.json
│ └── rwdevcon-logo.png
├── Base.lproj
└── LaunchScreen.storyboard
├── Info.plist
├── Preview Content
└── Preview Assets.xcassets
│ └── Contents.json
├── ReusableModels
└── ErrorMessage.swift
├── ReusableViews
└── FullscreenView.swift
├── Subsystems
├── UserAuthenticationRemoteAPI.swift
└── UserSessionStore.swift
└── UseCases
└── SignInUseCase.swift
/.github/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # SUI Koober
2 |
3 | The purpose of this project is to experiment with the new frameworks released in WWDC 2019. As such, the main focus of this project is for **learning**.
4 |
5 | Here are the basic guidelines for contribution:
6 |
7 | * Write small, bite-sized PRs with accompanying details to explain the changes. You should write the description as if you are trying to teach a concept. This is really helpful for reviewers to understand how your changes affect the app - especially since we're all tackling a brand new way to iOS development.
8 | * Make sure you adhere to the . This really helps with review and keeps the flow of the codebase as consistent as possible.
9 |
10 | Since this app is based on , it would be useful to read through the book to get an understanding on the direction of the project
11 |
12 |
13 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | ## Brief
2 |
3 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | ## Checklist
2 |
3 | - [ ] I've looked at the [contribution guidelines](CONTRIBUTING.md).
4 |
5 | ## Description
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # General
2 | .DS_Store
3 | .AppleDouble
4 | .LSOverride
5 |
6 | # Icon must end with two \r
7 | Icon
8 |
9 | # Thumbnails
10 | ._*
11 |
12 | # Files that might appear in the root of a volume
13 | .DocumentRevisions-V100
14 | .fseventsd
15 | .Spotlight-V100
16 | .TemporaryItems
17 | .Trashes
18 | .VolumeIcon.icns
19 | .com.apple.timemachine.donotpresent
20 |
21 | # Directories potentially created on remote AFP share
22 | .AppleDB
23 | .AppleDesktop
24 | Network Trash Folder
25 | Temporary Items
26 | .apdisk
27 |
28 | # Xcode
29 | #
30 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
31 |
32 | ## Build generated
33 | build/
34 | DerivedData/
35 |
36 | ## Various settings
37 | *.pbxuser
38 | !default.pbxuser
39 | *.mode1v3
40 | !default.mode1v3
41 | *.mode2v3
42 | !default.mode2v3
43 | *.perspectivev3
44 | !default.perspectivev3
45 | xcuserdata/
46 |
47 | ## Other
48 | *.moved-aside
49 | *.xccheckout
50 | *.xcscmblueprint
51 |
52 | ## Obj-C/Swift specific
53 | *.hmap
54 | *.ipa
55 | *.dSYM.zip
56 | *.dSYM
57 |
58 | ## Playgrounds
59 | timeline.xctimeline
60 | playground.xcworkspace
61 |
62 | # Swift Package Manager
63 | #
64 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
65 | # Packages/
66 | # Package.pins
67 | # Package.resolved
68 | .build/
69 |
70 | # CocoaPods
71 | #
72 | # We recommend against adding the Pods directory to your .gitignore. However
73 | # you should judge for yourself, the pros and cons are mentioned at:
74 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
75 | #
76 | # Pods/
77 |
78 | # Carthage
79 | #
80 | # Add this line if you want to avoid checking in source code from Carthage dependencies.
81 | # Carthage/Checkouts
82 |
83 | Carthage/Build
84 |
85 | # fastlane
86 | #
87 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
88 | # screenshots whenever they are needed.
89 | # For more information about the recommended setup visit:
90 | # https://docs.fastlane.tools/best-practices/source-control/#source-control
91 |
92 | fastlane/report.xml
93 | fastlane/Preview.html
94 | fastlane/screenshots/**/*.png
95 | fastlane/test_output
96 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # SwiftUI example app: Koober
2 | We're porting the example app from our Advanced iOS App Architecture book from UIKit to SwiftUI and we are sharing the code in this repo.
3 |
4 | Please feel free to follow along and/or contribute. This is an experimental codebase we're using to learn how to best architect SwiftUI apps.
5 |
6 | ## Architectures
7 |
8 | This repo holds examples for two architectures, Swift-State and MVVM. The Swift-State example is in the **swift-state** directory and the MVVM example is in the **mvvm** directory. **Note: the examples are a work in progress and may not be complete.**
9 |
--------------------------------------------------------------------------------
/mvvm/SUI Koober.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/mvvm/SUI Koober.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/mvvm/SUI Koober/App/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | /// Copyright (c) 2019 Razeware LLC
2 | ///
3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy
4 | /// of this software and associated documentation files (the "Software"), to deal
5 | /// in the Software without restriction, including without limitation the rights
6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | /// copies of the Software, and to permit persons to whom the Software is
8 | /// furnished to do so, subject to the following conditions:
9 | ///
10 | /// The above copyright notice and this permission notice shall be included in
11 | /// all copies or substantial portions of the Software.
12 | ///
13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish,
14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the
15 | /// Software in any work that is designed, intended, or marketed for pedagogical or
16 | /// instructional purposes related to programming, coding, application development,
17 | /// or information technology. Permission for such use, copying, modification,
18 | /// merger, publication, distribution, sublicensing, creation of derivative works,
19 | /// or sale is expressly withheld.
20 | ///
21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27 | /// THE SOFTWARE.
28 |
29 | import UIKit
30 |
31 | @UIApplicationMain
32 | class AppDelegate: UIResponder, UIApplicationDelegate {
33 |
34 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
35 | // Override point for customization after application launch.
36 | return true
37 | }
38 |
39 | // MARK: UISceneSession Lifecycle
40 |
41 | func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
42 | // Called when a new scene session is being created.
43 | // Use this method to select a configuration to create the new scene with.
44 | return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
45 | }
46 |
47 | func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) {
48 | // Called when the user discards a scene session.
49 | // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
50 | // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
51 | }
52 | }
53 |
54 |
--------------------------------------------------------------------------------
/mvvm/SUI Koober/App/KooberDependencyContainer.swift:
--------------------------------------------------------------------------------
1 | /// Copyright (c) 2019 Razeware LLC
2 | ///
3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy
4 | /// of this software and associated documentation files (the "Software"), to deal
5 | /// in the Software without restriction, including without limitation the rights
6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | /// copies of the Software, and to permit persons to whom the Software is
8 | /// furnished to do so, subject to the following conditions:
9 | ///
10 | /// The above copyright notice and this permission notice shall be included in
11 | /// all copies or substantial portions of the Software.
12 | ///
13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish,
14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the
15 | /// Software in any work that is designed, intended, or marketed for pedagogical or
16 | /// instructional purposes related to programming, coding, application development,
17 | /// or information technology. Permission for such use, copying, modification,
18 | /// merger, publication, distribution, sublicensing, creation of derivative works,
19 | /// or sale is expressly withheld.
20 | ///
21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27 | /// THE SOFTWARE.
28 |
29 | import Foundation
30 |
31 | /// Root dependency container for Koober which holds objects who live throught the lifetime of Koober's process, i.e. singletons.
32 | final class KooberDependencyContainer {
33 | // MARK: Subsystems
34 | /// Data store that holds the authenticated user's session. This uses a fake implementation to simulate whether a user is signed when the app launches.
35 | let userSessionStore: UserSessionStore = FakeUserSessionStore(userAlreadySignedIn: false)
36 |
37 | // MARK: Factories
38 | /// Factory method for creating a new sign in use case to sign users into Koober.
39 | func makeSignInUseCase(username: String, password: String) -> SignInUseCase {
40 | // Gather dependencies.
41 | let remoteAPI = makeUserAuthenticationRemoteAPI()
42 | let userSessionStore = self.userSessionStore
43 | // Make use case.
44 | return SignInUseCase(username: username,
45 | password: password,
46 | remoteAPI: remoteAPI,
47 | userSessionStore: userSessionStore)
48 | }
49 |
50 | /// Makes a new user authentication remote API for authenticating users using the cloud.
51 | func makeUserAuthenticationRemoteAPI() -> UserAuthenticationRemoteAPI {
52 | return FakeUserAuthenticationRemoteAPI()
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/mvvm/SUI Koober/App/Launching/LaunchingView.swift:
--------------------------------------------------------------------------------
1 | /// Copyright (c) 2019 Razeware LLC
2 | ///
3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy
4 | /// of this software and associated documentation files (the "Software"), to deal
5 | /// in the Software without restriction, including without limitation the rights
6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | /// copies of the Software, and to permit persons to whom the Software is
8 | /// furnished to do so, subject to the following conditions:
9 | ///
10 | /// The above copyright notice and this permission notice shall be included in
11 | /// all copies or substantial portions of the Software.
12 | ///
13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish,
14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the
15 | /// Software in any work that is designed, intended, or marketed for pedagogical or
16 | /// instructional purposes related to programming, coding, application development,
17 | /// or information technology. Permission for such use, copying, modification,
18 | /// merger, publication, distribution, sublicensing, creation of derivative works,
19 | /// or sale is expressly withheld.
20 | ///
21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27 | /// THE SOFTWARE.
28 |
29 | import SwiftUI
30 |
31 | /// This view is presented while the app is launching, i.e. determining if a user is signed in.
32 | struct LaunchingView : View {
33 | var body: some View {
34 | FullscreenView(backgroundColor: Color("BackgroundColor")) {
35 | Image("roo_logo")
36 | .background(Color("BackgroundColor"))
37 | .padding()
38 | HStack {
39 | Text("Launching...")
40 | .font(.headline)
41 | .foregroundColor(.white)
42 | .padding()
43 | }
44 | .background(Color("BackgroundColor"))
45 | }
46 | .background(Color("BackgroundColor"))
47 | }
48 | }
49 |
50 | #if DEBUG
51 | struct LaunchingView_Previews : PreviewProvider {
52 | static var previews: some View {
53 | LaunchingView()
54 | }
55 | }
56 | #endif
57 |
58 |
--------------------------------------------------------------------------------
/mvvm/SUI Koober/App/MainView.swift:
--------------------------------------------------------------------------------
1 | /// Copyright (c) 2019 Razeware LLC
2 | ///
3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy
4 | /// of this software and associated documentation files (the "Software"), to deal
5 | /// in the Software without restriction, including without limitation the rights
6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | /// copies of the Software, and to permit persons to whom the Software is
8 | /// furnished to do so, subject to the following conditions:
9 | ///
10 | /// The above copyright notice and this permission notice shall be included in
11 | /// all copies or substantial portions of the Software.
12 | ///
13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish,
14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the
15 | /// Software in any work that is designed, intended, or marketed for pedagogical or
16 | /// instructional purposes related to programming, coding, application development,
17 | /// or information technology. Permission for such use, copying, modification,
18 | /// merger, publication, distribution, sublicensing, creation of derivative works,
19 | /// or sale is expressly withheld.
20 | ///
21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27 | /// THE SOFTWARE.
28 |
29 | import SwiftUI
30 |
31 | /// The app's root view.
32 | struct MainView : View {
33 | /// This is the app's state store that is threaded down the view hierachy. It's a kind of Redux-like usage of SwiftUI. Anytime any state in `Koober` changes, this view and the entire view hierarchy is recomputed to reflect changes. This is supposed to be cheap because only the views that change are re-rendered.
34 | @ObservedObject var koober: Koober
35 |
36 | var body: some View {
37 | VStack(content: contentView)
38 | }
39 |
40 | func contentView() -> AnyView {
41 | switch koober.appState {
42 | case .launching:
43 | return AnyView(LaunchingView())
44 | case .running(let userState):
45 | return AnyView(RunningView(userState: userState, koober: koober))
46 | }
47 | }
48 | }
49 |
50 | #if DEBUG
51 | struct MainView_Previews : PreviewProvider {
52 | static var previews: some View {
53 | MainView(koober: Koober())
54 | }
55 | }
56 | #endif
57 |
--------------------------------------------------------------------------------
/mvvm/SUI Koober/App/Running/NewRide/LocateUser/LocatingUserView.swift:
--------------------------------------------------------------------------------
1 | /// Copyright (c) 2019 Razeware LLC
2 | ///
3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy
4 | /// of this software and associated documentation files (the "Software"), to deal
5 | /// in the Software without restriction, including without limitation the rights
6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | /// copies of the Software, and to permit persons to whom the Software is
8 | /// furnished to do so, subject to the following conditions:
9 | ///
10 | /// The above copyright notice and this permission notice shall be included in
11 | /// all copies or substantial portions of the Software.
12 | ///
13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish,
14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the
15 | /// Software in any work that is designed, intended, or marketed for pedagogical or
16 | /// instructional purposes related to programming, coding, application development,
17 | /// or information technology. Permission for such use, copying, modification,
18 | /// merger, publication, distribution, sublicensing, creation of derivative works,
19 | /// or sale is expressly withheld.
20 | ///
21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27 | /// THE SOFTWARE.
28 |
29 | import SwiftUI
30 |
31 | struct LocatingUserView : View {
32 | var body: some View {
33 | ZStack {
34 | Color("BackgroundColor")
35 | VStack(alignment: .center) {
36 | Image("roo_logo")
37 | Text("Finding your location...")
38 | .font(.headline)
39 | .foregroundColor(.white)
40 | .padding(.top)
41 | }
42 | }
43 | }
44 | }
45 |
46 | #if DEBUG
47 | struct LocatingUserView_Previews : PreviewProvider {
48 | static var previews: some View {
49 | LocatingUserView()
50 | }
51 | }
52 | #endif
53 |
--------------------------------------------------------------------------------
/mvvm/SUI Koober/App/Running/NewRide/NewRideView.swift:
--------------------------------------------------------------------------------
1 | /// Copyright (c) 2019 Razeware LLC
2 | ///
3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy
4 | /// of this software and associated documentation files (the "Software"), to deal
5 | /// in the Software without restriction, including without limitation the rights
6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | /// copies of the Software, and to permit persons to whom the Software is
8 | /// furnished to do so, subject to the following conditions:
9 | ///
10 | /// The above copyright notice and this permission notice shall be included in
11 | /// all copies or substantial portions of the Software.
12 | ///
13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish,
14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the
15 | /// Software in any work that is designed, intended, or marketed for pedagogical or
16 | /// instructional purposes related to programming, coding, application development,
17 | /// or information technology. Permission for such use, copying, modification,
18 | /// merger, publication, distribution, sublicensing, creation of derivative works,
19 | /// or sale is expressly withheld.
20 | ///
21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27 | /// THE SOFTWARE.
28 |
29 | import SwiftUI
30 |
31 | /// This view is presented if a user is signed in and ready to start a new ride.
32 | struct NewRideView : View {
33 | let userSession: UserSession
34 |
35 | var body: some View {
36 | ZStack(alignment: .top) {
37 | MapView()
38 | HStack(alignment: .bottom) {
39 | Spacer()
40 | Image(systemName: "person")
41 | .font(.title)
42 | .padding(.all)
43 | }
44 | WhereToButton(action: goToDropoffLocationSelectionScreen)
45 | .padding(.top, 60)
46 | }
47 | }
48 |
49 | func goToDropoffLocationSelectionScreen() {
50 | // TODO: Navigate to dropoff location selection.
51 | }
52 | }
53 |
54 | struct WhereToButton: View {
55 | let action: () -> Void
56 |
57 | var body: some View {
58 | Button(action: action) {
59 | Text("Where to?")
60 | .foregroundColor(.black)
61 | .padding(EdgeInsets(top: 15, leading: 80, bottom: 15, trailing: 80))
62 | .background(Color.white)
63 | .shadow(radius: /*@START_MENU_TOKEN@*/10/*@END_MENU_TOKEN@*/)
64 | }
65 | }
66 | }
67 |
68 | struct MapView: View {
69 | var body: some View {
70 | Color.red
71 | }
72 | }
73 |
74 | #if DEBUG
75 | struct NewRideView_Previews : PreviewProvider {
76 | static var previews: some View {
77 | NewRideView(userSession: UserSession.fake)
78 | }
79 | }
80 | #endif
81 |
--------------------------------------------------------------------------------
/mvvm/SUI Koober/App/Running/NewRide/SendNewRideRequest/SendingNewRideRequestView.swift:
--------------------------------------------------------------------------------
1 | /// Copyright (c) 2019 Razeware LLC
2 | ///
3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy
4 | /// of this software and associated documentation files (the "Software"), to deal
5 | /// in the Software without restriction, including without limitation the rights
6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | /// copies of the Software, and to permit persons to whom the Software is
8 | /// furnished to do so, subject to the following conditions:
9 | ///
10 | /// The above copyright notice and this permission notice shall be included in
11 | /// all copies or substantial portions of the Software.
12 | ///
13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish,
14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the
15 | /// Software in any work that is designed, intended, or marketed for pedagogical or
16 | /// instructional purposes related to programming, coding, application development,
17 | /// or information technology. Permission for such use, copying, modification,
18 | /// merger, publication, distribution, sublicensing, creation of derivative works,
19 | /// or sale is expressly withheld.
20 | ///
21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27 | /// THE SOFTWARE.
28 |
29 | import SwiftUI
30 |
31 | struct SendingNewRideRequestView : View {
32 | var body: some View {
33 | VStack {
34 | Image("requesting_indicator")
35 | Text("Requesting Ride...")
36 | .font(.title)
37 | }
38 | }
39 | }
40 |
41 | #if DEBUG
42 | struct SendingNewRideRequestView_Previews : PreviewProvider {
43 | static var previews: some View {
44 | SendingNewRideRequestView()
45 | }
46 | }
47 | #endif
48 |
--------------------------------------------------------------------------------
/mvvm/SUI Koober/App/Running/Onboard/OnboardView.swift:
--------------------------------------------------------------------------------
1 | /// Copyright (c) 2019 Razeware LLC
2 | ///
3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy
4 | /// of this software and associated documentation files (the "Software"), to deal
5 | /// in the Software without restriction, including without limitation the rights
6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | /// copies of the Software, and to permit persons to whom the Software is
8 | /// furnished to do so, subject to the following conditions:
9 | ///
10 | /// The above copyright notice and this permission notice shall be included in
11 | /// all copies or substantial portions of the Software.
12 | ///
13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish,
14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the
15 | /// Software in any work that is designed, intended, or marketed for pedagogical or
16 | /// instructional purposes related to programming, coding, application development,
17 | /// or information technology. Permission for such use, copying, modification,
18 | /// merger, publication, distribution, sublicensing, creation of derivative works,
19 | /// or sale is expressly withheld.
20 | ///
21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27 | /// THE SOFTWARE.
28 |
29 | import SwiftUI
30 |
31 | /// This view is presented when a user is not signed in.
32 | struct OnboardView : View {
33 | @ObservedObject var koober: Koober
34 |
35 | var body: some View {
36 | NavigationView {
37 | WelcomeView(koober: koober)
38 | }
39 | }
40 | }
41 |
42 | #if DEBUG
43 | struct OnboardView_Previews : PreviewProvider {
44 | static var previews: some View {
45 | OnboardView(koober: Koober())
46 | }
47 | }
48 | #endif
49 |
--------------------------------------------------------------------------------
/mvvm/SUI Koober/App/Running/Onboard/SignInViewModel.swift:
--------------------------------------------------------------------------------
1 | /// Copyright (c) 2019 Razeware LLC
2 | ///
3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy
4 | /// of this software and associated documentation files (the "Software"), to deal
5 | /// in the Software without restriction, including without limitation the rights
6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | /// copies of the Software, and to permit persons to whom the Software is
8 | /// furnished to do so, subject to the following conditions:
9 | ///
10 | /// The above copyright notice and this permission notice shall be included in
11 | /// all copies or substantial portions of the Software.
12 | ///
13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish,
14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the
15 | /// Software in any work that is designed, intended, or marketed for pedagogical or
16 | /// instructional purposes related to programming, coding, application development,
17 | /// or information technology. Permission for such use, copying, modification,
18 | /// merger, publication, distribution, sublicensing, creation of derivative works,
19 | /// or sale is expressly withheld.
20 | ///
21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27 | /// THE SOFTWARE.
28 |
29 | import SwiftUI
30 |
31 | protocol SignInViewModelProtocol {
32 |
33 | var email: Binding { get }
34 | var password: Binding { get }
35 |
36 | func signIn()
37 | }
38 |
39 |
40 | final class SignInViewModel {
41 |
42 | private var _email = ""
43 | private var _password = ""
44 |
45 | private let startSignInUseCase: (String, String) -> Void
46 |
47 | init(startSignInUseCase: @escaping (String, String) -> Void) {
48 | self.startSignInUseCase = startSignInUseCase
49 | }
50 | }
51 |
52 | extension SignInViewModel: SignInViewModelProtocol {
53 |
54 | var email: Binding {
55 | return .init(get: { self._email }, set: { self._email = $0 })
56 | }
57 |
58 | var password: Binding {
59 | return .init(get: { self._password }, set: { self._password = $0 })
60 | }
61 |
62 | func signIn() {
63 | startSignInUseCase(_email, _password)
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/mvvm/SUI Koober/App/Running/Onboard/SignUpView.swift:
--------------------------------------------------------------------------------
1 | /// Copyright (c) 2019 Razeware LLC
2 | ///
3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy
4 | /// of this software and associated documentation files (the "Software"), to deal
5 | /// in the Software without restriction, including without limitation the rights
6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | /// copies of the Software, and to permit persons to whom the Software is
8 | /// furnished to do so, subject to the following conditions:
9 | ///
10 | /// The above copyright notice and this permission notice shall be included in
11 | /// all copies or substantial portions of the Software.
12 | ///
13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish,
14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the
15 | /// Software in any work that is designed, intended, or marketed for pedagogical or
16 | /// instructional purposes related to programming, coding, application development,
17 | /// or information technology. Permission for such use, copying, modification,
18 | /// merger, publication, distribution, sublicensing, creation of derivative works,
19 | /// or sale is expressly withheld.
20 | ///
21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27 | /// THE SOFTWARE.
28 |
29 | import SwiftUI
30 |
31 | /// To be implemented...
32 | struct SignUpView : View {
33 | var body: some View {
34 | VStack {
35 | Spacer()
36 | HStack {
37 | Spacer()
38 | Text("Sign Up, under construction...")
39 | Spacer()
40 | }
41 | Spacer()
42 | }
43 | .padding()
44 | .background(Color("BackgroundColor"))
45 | .edgesIgnoringSafeArea(.bottom)
46 | .navigationBarTitle(Text("Sign Up"))
47 | }
48 | }
49 |
50 | #if DEBUG
51 | struct SignUpView_Previews : PreviewProvider {
52 | static var previews: some View {
53 | NavigationView {
54 | SignUpView()
55 | }
56 | }
57 | }
58 | #endif
59 |
--------------------------------------------------------------------------------
/mvvm/SUI Koober/App/Running/RunningView.swift:
--------------------------------------------------------------------------------
1 | /// Copyright (c) 2019 Razeware LLC
2 | ///
3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy
4 | /// of this software and associated documentation files (the "Software"), to deal
5 | /// in the Software without restriction, including without limitation the rights
6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | /// copies of the Software, and to permit persons to whom the Software is
8 | /// furnished to do so, subject to the following conditions:
9 | ///
10 | /// The above copyright notice and this permission notice shall be included in
11 | /// all copies or substantial portions of the Software.
12 | ///
13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish,
14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the
15 | /// Software in any work that is designed, intended, or marketed for pedagogical or
16 | /// instructional purposes related to programming, coding, application development,
17 | /// or information technology. Permission for such use, copying, modification,
18 | /// merger, publication, distribution, sublicensing, creation of derivative works,
19 | /// or sale is expressly withheld.
20 | ///
21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27 | /// THE SOFTWARE.
28 |
29 | import SwiftUI
30 |
31 | /// This view is presented once the app is finished launching and is running.
32 | struct RunningView : View {
33 | let userState: UserState
34 | @ObservedObject var koober: Koober
35 |
36 | var body: some View {
37 | VStack(content: content)
38 | }
39 |
40 | func content() -> AnyView {
41 | switch userState {
42 | case .unauthenticated:
43 | return AnyView(OnboardView(koober: koober))
44 | case .authenticated(let userSession):
45 | return AnyView(NewRideView(userSession: userSession))
46 | }
47 | }
48 | }
49 |
50 | #if DEBUG
51 | struct RunningView_Previews : PreviewProvider {
52 | static var previews: some View {
53 | RunningView(userState: .unauthenticated(.idle), koober: Koober())
54 | }
55 | }
56 | #endif
57 |
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "20x20",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "20x20",
11 | "scale" : "3x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "29x29",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "29x29",
21 | "scale" : "3x"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "size" : "40x40",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "size" : "40x40",
31 | "scale" : "3x"
32 | },
33 | {
34 | "idiom" : "iphone",
35 | "size" : "60x60",
36 | "scale" : "2x"
37 | },
38 | {
39 | "idiom" : "iphone",
40 | "size" : "60x60",
41 | "scale" : "3x"
42 | },
43 | {
44 | "idiom" : "ipad",
45 | "size" : "20x20",
46 | "scale" : "1x"
47 | },
48 | {
49 | "idiom" : "ipad",
50 | "size" : "20x20",
51 | "scale" : "2x"
52 | },
53 | {
54 | "idiom" : "ipad",
55 | "size" : "29x29",
56 | "scale" : "1x"
57 | },
58 | {
59 | "idiom" : "ipad",
60 | "size" : "29x29",
61 | "scale" : "2x"
62 | },
63 | {
64 | "idiom" : "ipad",
65 | "size" : "40x40",
66 | "scale" : "1x"
67 | },
68 | {
69 | "idiom" : "ipad",
70 | "size" : "40x40",
71 | "scale" : "2x"
72 | },
73 | {
74 | "idiom" : "ipad",
75 | "size" : "76x76",
76 | "scale" : "1x"
77 | },
78 | {
79 | "idiom" : "ipad",
80 | "size" : "76x76",
81 | "scale" : "2x"
82 | },
83 | {
84 | "idiom" : "ipad",
85 | "size" : "83.5x83.5",
86 | "scale" : "2x"
87 | },
88 | {
89 | "idiom" : "ios-marketing",
90 | "size" : "1024x1024",
91 | "scale" : "1x"
92 | }
93 | ],
94 | "info" : {
95 | "version" : 1,
96 | "author" : "xcode"
97 | }
98 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Colors/BackgroundColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | },
6 | "colors" : [
7 | {
8 | "idiom" : "universal",
9 | "color" : {
10 | "color-space" : "srgb",
11 | "components" : {
12 | "red" : "0.000",
13 | "alpha" : "1.000",
14 | "blue" : "0.737",
15 | "green" : "0.808"
16 | }
17 | }
18 | }
19 | ]
20 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Colors/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Colors/PlaceholderTextColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | },
6 | "colors" : [
7 | {
8 | "idiom" : "universal",
9 | "color" : {
10 | "color-space" : "srgb",
11 | "components" : {
12 | "red" : "0x84",
13 | "alpha" : "1.000",
14 | "blue" : "0x88",
15 | "green" : "0x84"
16 | }
17 | }
18 | }
19 | ]
20 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Colors/SearchBackgroundColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | },
6 | "colors" : [
7 | {
8 | "idiom" : "universal",
9 | "color" : {
10 | "platform" : "ios",
11 | "reference" : "secondarySystemBackgroundColor"
12 | }
13 | }
14 | ]
15 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Colors/SecondaryBackgroundColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | },
6 | "colors" : [
7 | {
8 | "idiom" : "universal",
9 | "color" : {
10 | "color-space" : "srgb",
11 | "components" : {
12 | "red" : "0xFF",
13 | "alpha" : "1.000",
14 | "blue" : "0x31",
15 | "green" : "0x88"
16 | }
17 | }
18 | }
19 | ]
20 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/email_icon.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "email_icon.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "email_icon@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "email_icon@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/email_icon.imageset/email_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/email_icon.imageset/email_icon.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/email_icon.imageset/email_icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/email_icon.imageset/email_icon@2x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/email_icon.imageset/email_icon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/email_icon.imageset/email_icon@3x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/mobile_icon.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "mobile_icon.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "mobile_icon@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "mobile_icon@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/mobile_icon.imageset/mobile_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/mobile_icon.imageset/mobile_icon.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/mobile_icon.imageset/mobile_icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/mobile_icon.imageset/mobile_icon@2x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/mobile_icon.imageset/mobile_icon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/mobile_icon.imageset/mobile_icon@3x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/password_icon.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "password_icon.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "password_icon@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "password_icon@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/password_icon.imageset/password_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/password_icon.imageset/password_icon.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/password_icon.imageset/password_icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/password_icon.imageset/password_icon@2x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/password_icon.imageset/password_icon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/password_icon.imageset/password_icon@3x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/person_icon.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "person.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "person@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "person@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/person_icon.imageset/person.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/person_icon.imageset/person.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/person_icon.imageset/person@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/person_icon.imageset/person@2x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/person_icon.imageset/person@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/person_icon.imageset/person@3x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/roo_logo.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "roo_logo.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "roo_logo@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "roo_logo@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/roo_logo.imageset/roo_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/roo_logo.imageset/roo_logo.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/roo_logo.imageset/roo_logo@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/roo_logo.imageset/roo_logo@2x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/roo_logo.imageset/roo_logo@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/roo_logo.imageset/roo_logo@3x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/tag_icon.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "tag.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "tag@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "tag@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/tag_icon.imageset/tag.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/tag_icon.imageset/tag.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/tag_icon.imageset/tag@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/tag_icon.imageset/tag@2x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/tag_icon.imageset/tag@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/tag_icon.imageset/tag@3x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/CancelButton.imageset/CancelButton.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/CancelButton.imageset/CancelButton.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/CancelButton.imageset/CancelButton@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/CancelButton.imageset/CancelButton@2x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/CancelButton.imageset/CancelButton@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/CancelButton.imageset/CancelButton@3x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/CancelButton.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "CancelButton.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "CancelButton@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "CancelButton@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/DriverEnRoute.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Driver En Route@1x.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "Driver En Route@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "Driver En Route@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/DriverEnRoute.imageset/Driver En Route@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/DriverEnRoute.imageset/Driver En Route@1x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/DriverEnRoute.imageset/Driver En Route@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/DriverEnRoute.imageset/Driver En Route@2x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/DriverEnRoute.imageset/Driver En Route@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/DriverEnRoute.imageset/Driver En Route@3x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerDropoffLocation.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "map_marker_destination_location.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "map_marker_destination_location@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "map_marker_destination_location@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerDropoffLocation.imageset/map_marker_destination_location.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerDropoffLocation.imageset/map_marker_destination_location.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerDropoffLocation.imageset/map_marker_destination_location@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerDropoffLocation.imageset/map_marker_destination_location@2x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerDropoffLocation.imageset/map_marker_destination_location@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerDropoffLocation.imageset/map_marker_destination_location@3x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerPickupLocation.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "map_marker_pickup_location.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "map_marker_pickup_location@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "map_marker_pickup_location@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerPickupLocation.imageset/map_marker_pickup_location.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerPickupLocation.imageset/map_marker_pickup_location.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerPickupLocation.imageset/map_marker_pickup_location@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerPickupLocation.imageset/map_marker_pickup_location@2x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerPickupLocation.imageset/map_marker_pickup_location@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerPickupLocation.imageset/map_marker_pickup_location@3x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ProgressKangaroo.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "progress_kangaroo.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "progress_kangaroo@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "progress_kangaroo@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ProgressKangaroo.imageset/progress_kangaroo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ProgressKangaroo.imageset/progress_kangaroo.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ProgressKangaroo.imageset/progress_kangaroo@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ProgressKangaroo.imageset/progress_kangaroo@2x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ProgressKangaroo.imageset/progress_kangaroo@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ProgressKangaroo.imageset/progress_kangaroo@3x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_kangaroo_marker.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "available_kangaroo_marker.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "available_kangaroo_marker@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "available_kangaroo_marker@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_kangaroo_marker.imageset/available_kangaroo_marker.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_kangaroo_marker.imageset/available_kangaroo_marker.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_kangaroo_marker.imageset/available_kangaroo_marker@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_kangaroo_marker.imageset/available_kangaroo_marker@2x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_kangaroo_marker.imageset/available_kangaroo_marker@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_kangaroo_marker.imageset/available_kangaroo_marker@3x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallabe_marker.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "available_wallabe_marker.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "available_wallabe_marker@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "available_wallabe_marker@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallabe_marker.imageset/available_wallabe_marker.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallabe_marker.imageset/available_wallabe_marker.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallabe_marker.imageset/available_wallabe_marker@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallabe_marker.imageset/available_wallabe_marker@2x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallabe_marker.imageset/available_wallabe_marker@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallabe_marker.imageset/available_wallabe_marker@3x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallaroo_marker.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "available_wallaroo_marker.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "available_wallaroo_marker@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "available_wallaroo_marker@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallaroo_marker.imageset/available_wallaroo_marker.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallaroo_marker.imageset/available_wallaroo_marker.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallaroo_marker.imageset/available_wallaroo_marker@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallaroo_marker.imageset/available_wallaroo_marker@2x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallaroo_marker.imageset/available_wallaroo_marker@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallaroo_marker.imageset/available_wallaroo_marker@3x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "ride_option_kangaroo.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "ride_option_kangaroo@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "ride_option_kangaroo@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | },
23 | "properties" : {
24 | "template-rendering-intent" : "original"
25 | }
26 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo.imageset/ride_option_kangaroo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo.imageset/ride_option_kangaroo.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo.imageset/ride_option_kangaroo@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo.imageset/ride_option_kangaroo@2x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo.imageset/ride_option_kangaroo@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo.imageset/ride_option_kangaroo@3x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo_selected.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "ride_option_kangaroo_selected.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "ride_option_kangaroo_selected@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "ride_option_kangaroo_selected@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | },
23 | "properties" : {
24 | "template-rendering-intent" : "original"
25 | }
26 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo_selected.imageset/ride_option_kangaroo_selected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo_selected.imageset/ride_option_kangaroo_selected.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo_selected.imageset/ride_option_kangaroo_selected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo_selected.imageset/ride_option_kangaroo_selected@2x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo_selected.imageset/ride_option_kangaroo_selected@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo_selected.imageset/ride_option_kangaroo_selected@3x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "ride_option_wallabee.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "ride_option_wallabee@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "ride_option_wallabee@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | },
23 | "properties" : {
24 | "template-rendering-intent" : "original"
25 | }
26 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee.imageset/ride_option_wallabee.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee.imageset/ride_option_wallabee.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee.imageset/ride_option_wallabee@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee.imageset/ride_option_wallabee@2x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee.imageset/ride_option_wallabee@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee.imageset/ride_option_wallabee@3x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee_selected.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "ride_option_wallabee_selected.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "ride_option_wallabee_selected@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "ride_option_wallabee_selected@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | },
23 | "properties" : {
24 | "template-rendering-intent" : "original"
25 | }
26 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee_selected.imageset/ride_option_wallabee_selected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee_selected.imageset/ride_option_wallabee_selected.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee_selected.imageset/ride_option_wallabee_selected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee_selected.imageset/ride_option_wallabee_selected@2x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee_selected.imageset/ride_option_wallabee_selected@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee_selected.imageset/ride_option_wallabee_selected@3x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "ride_option_wallaroo.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "ride_option_wallaroo@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "ride_option_wallaroo@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | },
23 | "properties" : {
24 | "template-rendering-intent" : "original"
25 | }
26 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo.imageset/ride_option_wallaroo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo.imageset/ride_option_wallaroo.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo.imageset/ride_option_wallaroo@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo.imageset/ride_option_wallaroo@2x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo.imageset/ride_option_wallaroo@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo.imageset/ride_option_wallaroo@3x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo_selected.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "ride_option_wallaroo_selected.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "ride_option_wallaroo_selected@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "ride_option_wallaroo_selected@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | },
23 | "properties" : {
24 | "template-rendering-intent" : "original"
25 | }
26 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo_selected.imageset/ride_option_wallaroo_selected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo_selected.imageset/ride_option_wallaroo_selected.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo_selected.imageset/ride_option_wallaroo_selected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo_selected.imageset/ride_option_wallaroo_selected@2x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo_selected.imageset/ride_option_wallaroo_selected@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo_selected.imageset/ride_option_wallaroo_selected@3x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/SetPickupLocationLoader.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "set_pickup_location_loader.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "set_pickup_location_loader@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "set_pickup_location_loader@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/SetPickupLocationLoader.imageset/set_pickup_location_loader.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/SetPickupLocationLoader.imageset/set_pickup_location_loader.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/SetPickupLocationLoader.imageset/set_pickup_location_loader@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/SetPickupLocationLoader.imageset/set_pickup_location_loader@2x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/SetPickupLocationLoader.imageset/set_pickup_location_loader@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/SetPickupLocationLoader.imageset/set_pickup_location_loader@3x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/available_placeholder_marker.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "available_placeholder_marker.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "available_placeholder_marker@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "available_placeholder_marker@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/available_placeholder_marker.imageset/available_placeholder_marker.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/available_placeholder_marker.imageset/available_placeholder_marker.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/available_placeholder_marker.imageset/available_placeholder_marker@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/available_placeholder_marker.imageset/available_placeholder_marker@2x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/available_placeholder_marker.imageset/available_placeholder_marker@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/available_placeholder_marker.imageset/available_placeholder_marker@3x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/koober.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "Icon-60@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "Icon-60@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/koober.imageset/Icon-60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/koober.imageset/Icon-60@2x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/koober.imageset/Icon-60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/koober.imageset/Icon-60@3x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/requesting_indicator.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "requesting_indicator.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "requesting_indicator@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "requesting_indicator@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/requesting_indicator.imageset/requesting_indicator.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/requesting_indicator.imageset/requesting_indicator.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/requesting_indicator.imageset/requesting_indicator@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/requesting_indicator.imageset/requesting_indicator@2x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/requesting_indicator.imageset/requesting_indicator@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/requesting_indicator.imageset/requesting_indicator@3x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "ride_option_placeholder.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "ride_option_placeholder@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "ride_option_placeholder@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder.imageset/ride_option_placeholder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder.imageset/ride_option_placeholder.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder.imageset/ride_option_placeholder@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder.imageset/ride_option_placeholder@2x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder.imageset/ride_option_placeholder@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder.imageset/ride_option_placeholder@3x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder_selected.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "ride_option_wallabee_selected.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "ride_option_wallabee_selected@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "ride_option_wallabee_selected@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder_selected.imageset/ride_option_wallabee_selected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder_selected.imageset/ride_option_wallabee_selected.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder_selected.imageset/ride_option_wallabee_selected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder_selected.imageset/ride_option_wallabee_selected@2x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder_selected.imageset/ride_option_wallabee_selected@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder_selected.imageset/ride_option_wallabee_selected@3x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/success_message.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "success_message.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "success_message@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "success_message@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/success_message.imageset/success_message.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/success_message.imageset/success_message.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/success_message.imageset/success_message@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/success_message.imageset/success_message@2x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/success_message.imageset/success_message@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/success_message.imageset/success_message@3x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/card_icon.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "card_icon.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "card_icon@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "card_icon@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/card_icon.imageset/card_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/card_icon.imageset/card_icon.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/card_icon.imageset/card_icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/card_icon.imageset/card_icon@2x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/card_icon.imageset/card_icon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/card_icon.imageset/card_icon@3x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/selected_icon.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "selected_icon.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "selected_icon@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "selected_icon@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/selected_icon.imageset/selected_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/selected_icon.imageset/selected_icon.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/selected_icon.imageset/selected_icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/selected_icon.imageset/selected_icon@2x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/selected_icon.imageset/selected_icon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/selected_icon.imageset/selected_icon@3x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/roo-icon.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "roo-icon.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "roo-icon@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "roo-icon@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/roo-icon.imageset/roo-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/roo-icon.imageset/roo-icon.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/roo-icon.imageset/roo-icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/roo-icon.imageset/roo-icon@2x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/roo-icon.imageset/roo-icon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/roo-icon.imageset/roo-icon@3x.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/rw-logo.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "Razewarelogo_1024.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/rw-logo.imageset/Razewarelogo_1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/rw-logo.imageset/Razewarelogo_1024.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/rwdevcon-bg.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "rwdevcon-bg.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/rwdevcon-bg.imageset/rwdevcon-bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/rwdevcon-bg.imageset/rwdevcon-bg.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/rwdevcon-logo.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "rwdevcon-logo.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Assets.xcassets/Images/rwdevcon-logo.imageset/rwdevcon-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/rwdevcon-logo.imageset/rwdevcon-logo.png
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 | LSRequiresIPhoneOS
22 |
23 | UIApplicationSceneManifest
24 |
25 | UIApplicationSupportsMultipleScenes
26 |
27 | UISceneConfigurations
28 |
29 | UIWindowSceneSessionRoleApplication
30 |
31 |
32 | UILaunchStoryboardName
33 | LaunchScreen
34 | UISceneConfigurationName
35 | Default Configuration
36 | UISceneDelegateClassName
37 | $(PRODUCT_MODULE_NAME).SceneDelegate
38 |
39 |
40 |
41 |
42 | UILaunchStoryboardName
43 | LaunchScreen
44 | UIRequiredDeviceCapabilities
45 |
46 | armv7
47 |
48 | UISupportedInterfaceOrientations
49 |
50 | UIInterfaceOrientationPortrait
51 | UIInterfaceOrientationLandscapeLeft
52 | UIInterfaceOrientationLandscapeRight
53 |
54 | UISupportedInterfaceOrientations~ipad
55 |
56 | UIInterfaceOrientationPortrait
57 | UIInterfaceOrientationPortraitUpsideDown
58 | UIInterfaceOrientationLandscapeLeft
59 | UIInterfaceOrientationLandscapeRight
60 |
61 |
62 |
63 |
--------------------------------------------------------------------------------
/mvvm/SUI Koober/Preview Content/Preview Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/mvvm/SUI Koober/ReusableModels/ErrorMessage.swift:
--------------------------------------------------------------------------------
1 | /// Copyright (c) 2019 Razeware LLC
2 | ///
3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy
4 | /// of this software and associated documentation files (the "Software"), to deal
5 | /// in the Software without restriction, including without limitation the rights
6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | /// copies of the Software, and to permit persons to whom the Software is
8 | /// furnished to do so, subject to the following conditions:
9 | ///
10 | /// The above copyright notice and this permission notice shall be included in
11 | /// all copies or substantial portions of the Software.
12 | ///
13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish,
14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the
15 | /// Software in any work that is designed, intended, or marketed for pedagogical or
16 | /// instructional purposes related to programming, coding, application development,
17 | /// or information technology. Permission for such use, copying, modification,
18 | /// merger, publication, distribution, sublicensing, creation of derivative works,
19 | /// or sale is expressly withheld.
20 | ///
21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27 | /// THE SOFTWARE.
28 |
29 | import Foundation
30 |
31 | struct ErrorMessage: Error {
32 | let id = UUID()
33 | var message: String
34 | }
35 |
36 | protocol ErrorMessageConvertible {
37 | var errorMessage: ErrorMessage { get }
38 | }
39 |
40 | extension ErrorMessageConvertible {
41 | var errorMessage: ErrorMessage {
42 | ErrorMessage(message: "Unknown error. Please try again.")
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/mvvm/SUI Koober/ReusableViews/FullscreenView.swift:
--------------------------------------------------------------------------------
1 | /// Copyright (c) 2019 Razeware LLC
2 | ///
3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy
4 | /// of this software and associated documentation files (the "Software"), to deal
5 | /// in the Software without restriction, including without limitation the rights
6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | /// copies of the Software, and to permit persons to whom the Software is
8 | /// furnished to do so, subject to the following conditions:
9 | ///
10 | /// The above copyright notice and this permission notice shall be included in
11 | /// all copies or substantial portions of the Software.
12 | ///
13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish,
14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the
15 | /// Software in any work that is designed, intended, or marketed for pedagogical or
16 | /// instructional purposes related to programming, coding, application development,
17 | /// or information technology. Permission for such use, copying, modification,
18 | /// merger, publication, distribution, sublicensing, creation of derivative works,
19 | /// or sale is expressly withheld.
20 | ///
21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27 | /// THE SOFTWARE.
28 |
29 | import SwiftUI
30 |
31 | /// Container view that spans the entire screen, ignoring safe areas.
32 | struct FullscreenView : View {
33 | let content: Content
34 | let backgroundColor: Color
35 |
36 |
37 | public init(backgroundColor: Color = Color.white,
38 | @ViewBuilder content: () -> Content) {
39 | self.backgroundColor = backgroundColor
40 | self.content = content()
41 | }
42 |
43 | var body: some View {
44 | HStack {
45 | Spacer()
46 | VStack {
47 | Spacer()
48 | content
49 | Spacer()
50 | }
51 | Spacer()
52 | }
53 | .background(backgroundColor)
54 | .edgesIgnoringSafeArea(.all)
55 | }
56 | }
57 |
58 | #if DEBUG
59 | struct FullscreenView_Previews : PreviewProvider {
60 | static var previews: some View {
61 | FullscreenView {
62 | Text("Content")
63 | }
64 | }
65 | }
66 | #endif
67 |
--------------------------------------------------------------------------------
/swift-state/SUI Koober.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/swift-state/SUI Koober.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/swift-state/SUI Koober/App/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | /// Copyright (c) 2019 Razeware LLC
2 | ///
3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy
4 | /// of this software and associated documentation files (the "Software"), to deal
5 | /// in the Software without restriction, including without limitation the rights
6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | /// copies of the Software, and to permit persons to whom the Software is
8 | /// furnished to do so, subject to the following conditions:
9 | ///
10 | /// The above copyright notice and this permission notice shall be included in
11 | /// all copies or substantial portions of the Software.
12 | ///
13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish,
14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the
15 | /// Software in any work that is designed, intended, or marketed for pedagogical or
16 | /// instructional purposes related to programming, coding, application development,
17 | /// or information technology. Permission for such use, copying, modification,
18 | /// merger, publication, distribution, sublicensing, creation of derivative works,
19 | /// or sale is expressly withheld.
20 | ///
21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27 | /// THE SOFTWARE.
28 |
29 | import UIKit
30 |
31 | @UIApplicationMain
32 | class AppDelegate: UIResponder, UIApplicationDelegate {
33 |
34 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
35 | // Override point for customization after application launch.
36 | return true
37 | }
38 |
39 | // MARK: UISceneSession Lifecycle
40 |
41 | func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
42 | // Called when a new scene session is being created.
43 | // Use this method to select a configuration to create the new scene with.
44 | return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
45 | }
46 |
47 | func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) {
48 | // Called when the user discards a scene session.
49 | // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
50 | // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
51 | }
52 | }
53 |
54 |
--------------------------------------------------------------------------------
/swift-state/SUI Koober/App/KooberDependencyContainer.swift:
--------------------------------------------------------------------------------
1 | /// Copyright (c) 2019 Razeware LLC
2 | ///
3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy
4 | /// of this software and associated documentation files (the "Software"), to deal
5 | /// in the Software without restriction, including without limitation the rights
6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | /// copies of the Software, and to permit persons to whom the Software is
8 | /// furnished to do so, subject to the following conditions:
9 | ///
10 | /// The above copyright notice and this permission notice shall be included in
11 | /// all copies or substantial portions of the Software.
12 | ///
13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish,
14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the
15 | /// Software in any work that is designed, intended, or marketed for pedagogical or
16 | /// instructional purposes related to programming, coding, application development,
17 | /// or information technology. Permission for such use, copying, modification,
18 | /// merger, publication, distribution, sublicensing, creation of derivative works,
19 | /// or sale is expressly withheld.
20 | ///
21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27 | /// THE SOFTWARE.
28 |
29 | import Foundation
30 |
31 | /// Root dependency container for Koober which holds objects who live throught the lifetime of Koober's process, i.e. singletons.
32 | final class KooberDependencyContainer {
33 | // MARK: Subsystems
34 | /// Data store that holds the authenticated user's session. This uses a fake implementation to simulate whether a user is signed when the app launches.
35 | let userSessionStore: UserSessionStore = FakeUserSessionStore(userAlreadySignedIn: false)
36 |
37 | // MARK: Factories
38 | /// Factory method for creating a new sign in use case to sign users into Koober.
39 | func makeSignInUseCase(username: String, password: String) -> SignInUseCase {
40 | // Gather dependencies.
41 | let remoteAPI = makeUserAuthenticationRemoteAPI()
42 | let userSessionStore = self.userSessionStore
43 | // Make use case.
44 | return SignInUseCase(username: username,
45 | password: password,
46 | remoteAPI: remoteAPI,
47 | userSessionStore: userSessionStore)
48 | }
49 |
50 | /// Makes a new user authentication remote API for authenticating users using the cloud.
51 | func makeUserAuthenticationRemoteAPI() -> UserAuthenticationRemoteAPI {
52 | return FakeUserAuthenticationRemoteAPI()
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/swift-state/SUI Koober/App/Launching/LaunchingView.swift:
--------------------------------------------------------------------------------
1 | /// Copyright (c) 2019 Razeware LLC
2 | ///
3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy
4 | /// of this software and associated documentation files (the "Software"), to deal
5 | /// in the Software without restriction, including without limitation the rights
6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | /// copies of the Software, and to permit persons to whom the Software is
8 | /// furnished to do so, subject to the following conditions:
9 | ///
10 | /// The above copyright notice and this permission notice shall be included in
11 | /// all copies or substantial portions of the Software.
12 | ///
13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish,
14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the
15 | /// Software in any work that is designed, intended, or marketed for pedagogical or
16 | /// instructional purposes related to programming, coding, application development,
17 | /// or information technology. Permission for such use, copying, modification,
18 | /// merger, publication, distribution, sublicensing, creation of derivative works,
19 | /// or sale is expressly withheld.
20 | ///
21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27 | /// THE SOFTWARE.
28 |
29 | import SwiftUI
30 |
31 | /// This view is presented while the app is launching, i.e. determining if a user is signed in.
32 | struct LaunchingView : View {
33 | var body: some View {
34 | FullscreenView(backgroundColor: Color("BackgroundColor")) {
35 | Image("roo_logo")
36 | .background(Color("BackgroundColor"))
37 | .padding()
38 | HStack {
39 | Text("Launching...")
40 | .font(.headline)
41 | .foregroundColor(.white)
42 | .padding()
43 | }
44 | .background(Color("BackgroundColor"))
45 | }
46 | .background(Color("BackgroundColor"))
47 | }
48 | }
49 |
50 | #if DEBUG
51 | struct LaunchingView_Previews : PreviewProvider {
52 | static var previews: some View {
53 | LaunchingView()
54 | }
55 | }
56 | #endif
57 |
58 |
--------------------------------------------------------------------------------
/swift-state/SUI Koober/App/MainView.swift:
--------------------------------------------------------------------------------
1 | /// Copyright (c) 2019 Razeware LLC
2 | ///
3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy
4 | /// of this software and associated documentation files (the "Software"), to deal
5 | /// in the Software without restriction, including without limitation the rights
6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | /// copies of the Software, and to permit persons to whom the Software is
8 | /// furnished to do so, subject to the following conditions:
9 | ///
10 | /// The above copyright notice and this permission notice shall be included in
11 | /// all copies or substantial portions of the Software.
12 | ///
13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish,
14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the
15 | /// Software in any work that is designed, intended, or marketed for pedagogical or
16 | /// instructional purposes related to programming, coding, application development,
17 | /// or information technology. Permission for such use, copying, modification,
18 | /// merger, publication, distribution, sublicensing, creation of derivative works,
19 | /// or sale is expressly withheld.
20 | ///
21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27 | /// THE SOFTWARE.
28 |
29 | import SwiftUI
30 |
31 | /// The app's root view.
32 | struct MainView : View {
33 | /// This is the app's state store that is threaded down the view hierachy. It's a kind of Redux-like usage of SwiftUI. Anytime any state in `Koober` changes, this view and the entire view hierarchy is recomputed to reflect changes. This is supposed to be cheap because only the views that change are re-rendered.
34 | @ObservedObject var koober: Koober
35 |
36 | var body: some View {
37 | VStack(content: contentView)
38 | }
39 |
40 | func contentView() -> AnyView {
41 | switch koober.appState {
42 | case .launching:
43 | return AnyView(LaunchingView())
44 | case .running(let userState):
45 | return AnyView(RunningView(userState: userState, koober: koober))
46 | }
47 | }
48 | }
49 |
50 | #if DEBUG
51 | struct MainView_Previews : PreviewProvider {
52 | static var previews: some View {
53 | MainView(koober: Koober())
54 | }
55 | }
56 | #endif
57 |
--------------------------------------------------------------------------------
/swift-state/SUI Koober/App/Running/NewRide/LocateUser/LocatingUserView.swift:
--------------------------------------------------------------------------------
1 | /// Copyright (c) 2019 Razeware LLC
2 | ///
3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy
4 | /// of this software and associated documentation files (the "Software"), to deal
5 | /// in the Software without restriction, including without limitation the rights
6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | /// copies of the Software, and to permit persons to whom the Software is
8 | /// furnished to do so, subject to the following conditions:
9 | ///
10 | /// The above copyright notice and this permission notice shall be included in
11 | /// all copies or substantial portions of the Software.
12 | ///
13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish,
14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the
15 | /// Software in any work that is designed, intended, or marketed for pedagogical or
16 | /// instructional purposes related to programming, coding, application development,
17 | /// or information technology. Permission for such use, copying, modification,
18 | /// merger, publication, distribution, sublicensing, creation of derivative works,
19 | /// or sale is expressly withheld.
20 | ///
21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27 | /// THE SOFTWARE.
28 |
29 | import SwiftUI
30 |
31 | struct LocatingUserView : View {
32 | var body: some View {
33 | ZStack {
34 | Color("BackgroundColor")
35 | VStack(alignment: .center) {
36 | Image("roo_logo")
37 | Text("Finding your location...")
38 | .font(.headline)
39 | .foregroundColor(.white)
40 | .padding(.top)
41 | }
42 | }
43 | }
44 | }
45 |
46 | #if DEBUG
47 | struct LocatingUserView_Previews : PreviewProvider {
48 | static var previews: some View {
49 | LocatingUserView()
50 | }
51 | }
52 | #endif
53 |
--------------------------------------------------------------------------------
/swift-state/SUI Koober/App/Running/NewRide/SendNewRideRequest/SendingNewRideRequestView.swift:
--------------------------------------------------------------------------------
1 | /// Copyright (c) 2019 Razeware LLC
2 | ///
3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy
4 | /// of this software and associated documentation files (the "Software"), to deal
5 | /// in the Software without restriction, including without limitation the rights
6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | /// copies of the Software, and to permit persons to whom the Software is
8 | /// furnished to do so, subject to the following conditions:
9 | ///
10 | /// The above copyright notice and this permission notice shall be included in
11 | /// all copies or substantial portions of the Software.
12 | ///
13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish,
14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the
15 | /// Software in any work that is designed, intended, or marketed for pedagogical or
16 | /// instructional purposes related to programming, coding, application development,
17 | /// or information technology. Permission for such use, copying, modification,
18 | /// merger, publication, distribution, sublicensing, creation of derivative works,
19 | /// or sale is expressly withheld.
20 | ///
21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27 | /// THE SOFTWARE.
28 |
29 | import SwiftUI
30 |
31 | struct SendingNewRideRequestView : View {
32 | var body: some View {
33 | VStack {
34 | Image("requesting_indicator")
35 | Text("Requesting Ride...")
36 | .font(.title)
37 | }
38 | }
39 | }
40 |
41 | #if DEBUG
42 | struct SendingNewRideRequestView_Previews : PreviewProvider {
43 | static var previews: some View {
44 | SendingNewRideRequestView()
45 | }
46 | }
47 | #endif
48 |
--------------------------------------------------------------------------------
/swift-state/SUI Koober/App/Running/Onboard/OnboardView.swift:
--------------------------------------------------------------------------------
1 | /// Copyright (c) 2019 Razeware LLC
2 | ///
3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy
4 | /// of this software and associated documentation files (the "Software"), to deal
5 | /// in the Software without restriction, including without limitation the rights
6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | /// copies of the Software, and to permit persons to whom the Software is
8 | /// furnished to do so, subject to the following conditions:
9 | ///
10 | /// The above copyright notice and this permission notice shall be included in
11 | /// all copies or substantial portions of the Software.
12 | ///
13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish,
14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the
15 | /// Software in any work that is designed, intended, or marketed for pedagogical or
16 | /// instructional purposes related to programming, coding, application development,
17 | /// or information technology. Permission for such use, copying, modification,
18 | /// merger, publication, distribution, sublicensing, creation of derivative works,
19 | /// or sale is expressly withheld.
20 | ///
21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27 | /// THE SOFTWARE.
28 |
29 | import SwiftUI
30 |
31 | /// This view is presented when a user is not signed in.
32 | struct OnboardView : View {
33 | @ObservedObject var koober: Koober
34 |
35 | var body: some View {
36 | NavigationView {
37 | WelcomeView(koober: koober)
38 | }
39 | }
40 | }
41 |
42 | #if DEBUG
43 | struct OnboardView_Previews : PreviewProvider {
44 | static var previews: some View {
45 | OnboardView(koober: Koober())
46 | }
47 | }
48 | #endif
49 |
--------------------------------------------------------------------------------
/swift-state/SUI Koober/App/Running/Onboard/SignInViewModel.swift:
--------------------------------------------------------------------------------
1 | /// Copyright (c) 2019 Razeware LLC
2 | ///
3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy
4 | /// of this software and associated documentation files (the "Software"), to deal
5 | /// in the Software without restriction, including without limitation the rights
6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | /// copies of the Software, and to permit persons to whom the Software is
8 | /// furnished to do so, subject to the following conditions:
9 | ///
10 | /// The above copyright notice and this permission notice shall be included in
11 | /// all copies or substantial portions of the Software.
12 | ///
13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish,
14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the
15 | /// Software in any work that is designed, intended, or marketed for pedagogical or
16 | /// instructional purposes related to programming, coding, application development,
17 | /// or information technology. Permission for such use, copying, modification,
18 | /// merger, publication, distribution, sublicensing, creation of derivative works,
19 | /// or sale is expressly withheld.
20 | ///
21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27 | /// THE SOFTWARE.
28 |
29 | import SwiftUI
30 |
31 | protocol SignInViewModelProtocol {
32 |
33 | var email: Binding { get }
34 | var password: Binding { get }
35 |
36 | func signIn()
37 | }
38 |
39 |
40 | final class SignInViewModel {
41 |
42 | private var _email = ""
43 | private var _password = ""
44 |
45 | private let startSignInUseCase: (String, String) -> Void
46 |
47 | init(startSignInUseCase: @escaping (String, String) -> Void) {
48 | self.startSignInUseCase = startSignInUseCase
49 | }
50 | }
51 |
52 | extension SignInViewModel: SignInViewModelProtocol {
53 |
54 | var email: Binding {
55 | return .init(get: { self._email }, set: { self._email = $0 })
56 | }
57 |
58 | var password: Binding {
59 | return .init(get: { self._password }, set: { self._password = $0 })
60 | }
61 |
62 | func signIn() {
63 | startSignInUseCase(_email, _password)
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/swift-state/SUI Koober/App/Running/Onboard/SignUpView.swift:
--------------------------------------------------------------------------------
1 | /// Copyright (c) 2019 Razeware LLC
2 | ///
3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy
4 | /// of this software and associated documentation files (the "Software"), to deal
5 | /// in the Software without restriction, including without limitation the rights
6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | /// copies of the Software, and to permit persons to whom the Software is
8 | /// furnished to do so, subject to the following conditions:
9 | ///
10 | /// The above copyright notice and this permission notice shall be included in
11 | /// all copies or substantial portions of the Software.
12 | ///
13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish,
14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the
15 | /// Software in any work that is designed, intended, or marketed for pedagogical or
16 | /// instructional purposes related to programming, coding, application development,
17 | /// or information technology. Permission for such use, copying, modification,
18 | /// merger, publication, distribution, sublicensing, creation of derivative works,
19 | /// or sale is expressly withheld.
20 | ///
21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27 | /// THE SOFTWARE.
28 |
29 | import SwiftUI
30 |
31 | /// To be implemented...
32 | struct SignUpView : View {
33 | var body: some View {
34 | VStack {
35 | Spacer()
36 | HStack {
37 | Spacer()
38 | Text("Sign Up, under construction...")
39 | Spacer()
40 | }
41 | Spacer()
42 | }
43 | .padding()
44 | .background(Color("BackgroundColor"))
45 | .edgesIgnoringSafeArea(.bottom)
46 | .navigationBarTitle(Text("Sign Up"))
47 | }
48 | }
49 |
50 | #if DEBUG
51 | struct SignUpView_Previews : PreviewProvider {
52 | static var previews: some View {
53 | NavigationView {
54 | SignUpView()
55 | }
56 | }
57 | }
58 | #endif
59 |
--------------------------------------------------------------------------------
/swift-state/SUI Koober/App/Running/RunningView.swift:
--------------------------------------------------------------------------------
1 | /// Copyright (c) 2019 Razeware LLC
2 | ///
3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy
4 | /// of this software and associated documentation files (the "Software"), to deal
5 | /// in the Software without restriction, including without limitation the rights
6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | /// copies of the Software, and to permit persons to whom the Software is
8 | /// furnished to do so, subject to the following conditions:
9 | ///
10 | /// The above copyright notice and this permission notice shall be included in
11 | /// all copies or substantial portions of the Software.
12 | ///
13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish,
14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the
15 | /// Software in any work that is designed, intended, or marketed for pedagogical or
16 | /// instructional purposes related to programming, coding, application development,
17 | /// or information technology. Permission for such use, copying, modification,
18 | /// merger, publication, distribution, sublicensing, creation of derivative works,
19 | /// or sale is expressly withheld.
20 | ///
21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27 | /// THE SOFTWARE.
28 |
29 | import SwiftUI
30 |
31 | /// This view is presented once the app is finished launching and is running.
32 | struct RunningView : View {
33 | let userState: UserState
34 | @ObservedObject var koober: Koober
35 |
36 | var body: some View {
37 | VStack(content: content)
38 | }
39 |
40 | func content() -> AnyView {
41 | switch userState {
42 | case .unauthenticated:
43 | return AnyView(OnboardView(koober: koober))
44 | case .authenticated(let userSession):
45 | return AnyView(NewRideView(userSession: userSession))
46 | }
47 | }
48 | }
49 |
50 | #if DEBUG
51 | struct RunningView_Previews : PreviewProvider {
52 | static var previews: some View {
53 | RunningView(userState: .unauthenticated(.idle), koober: Koober())
54 | }
55 | }
56 | #endif
57 |
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "20x20",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "20x20",
11 | "scale" : "3x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "29x29",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "29x29",
21 | "scale" : "3x"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "size" : "40x40",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "size" : "40x40",
31 | "scale" : "3x"
32 | },
33 | {
34 | "idiom" : "iphone",
35 | "size" : "60x60",
36 | "scale" : "2x"
37 | },
38 | {
39 | "idiom" : "iphone",
40 | "size" : "60x60",
41 | "scale" : "3x"
42 | },
43 | {
44 | "idiom" : "ipad",
45 | "size" : "20x20",
46 | "scale" : "1x"
47 | },
48 | {
49 | "idiom" : "ipad",
50 | "size" : "20x20",
51 | "scale" : "2x"
52 | },
53 | {
54 | "idiom" : "ipad",
55 | "size" : "29x29",
56 | "scale" : "1x"
57 | },
58 | {
59 | "idiom" : "ipad",
60 | "size" : "29x29",
61 | "scale" : "2x"
62 | },
63 | {
64 | "idiom" : "ipad",
65 | "size" : "40x40",
66 | "scale" : "1x"
67 | },
68 | {
69 | "idiom" : "ipad",
70 | "size" : "40x40",
71 | "scale" : "2x"
72 | },
73 | {
74 | "idiom" : "ipad",
75 | "size" : "76x76",
76 | "scale" : "1x"
77 | },
78 | {
79 | "idiom" : "ipad",
80 | "size" : "76x76",
81 | "scale" : "2x"
82 | },
83 | {
84 | "idiom" : "ipad",
85 | "size" : "83.5x83.5",
86 | "scale" : "2x"
87 | },
88 | {
89 | "idiom" : "ios-marketing",
90 | "size" : "1024x1024",
91 | "scale" : "1x"
92 | }
93 | ],
94 | "info" : {
95 | "version" : 1,
96 | "author" : "xcode"
97 | }
98 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Colors/BackgroundColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | },
6 | "colors" : [
7 | {
8 | "idiom" : "universal",
9 | "color" : {
10 | "color-space" : "srgb",
11 | "components" : {
12 | "red" : "0.000",
13 | "alpha" : "1.000",
14 | "blue" : "0.737",
15 | "green" : "0.808"
16 | }
17 | }
18 | }
19 | ]
20 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Colors/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Colors/PlaceholderTextColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | },
6 | "colors" : [
7 | {
8 | "idiom" : "universal",
9 | "color" : {
10 | "color-space" : "srgb",
11 | "components" : {
12 | "red" : "0x84",
13 | "alpha" : "1.000",
14 | "blue" : "0x88",
15 | "green" : "0x84"
16 | }
17 | }
18 | }
19 | ]
20 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Colors/SearchBackgroundColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | },
6 | "colors" : [
7 | {
8 | "idiom" : "universal",
9 | "color" : {
10 | "platform" : "ios",
11 | "reference" : "secondarySystemBackgroundColor"
12 | }
13 | }
14 | ]
15 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Colors/SecondaryBackgroundColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | },
6 | "colors" : [
7 | {
8 | "idiom" : "universal",
9 | "color" : {
10 | "color-space" : "srgb",
11 | "components" : {
12 | "red" : "0xFF",
13 | "alpha" : "1.000",
14 | "blue" : "0x31",
15 | "green" : "0x88"
16 | }
17 | }
18 | }
19 | ]
20 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/email_icon.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "email_icon.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "email_icon@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "email_icon@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/email_icon.imageset/email_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/email_icon.imageset/email_icon.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/email_icon.imageset/email_icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/email_icon.imageset/email_icon@2x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/email_icon.imageset/email_icon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/email_icon.imageset/email_icon@3x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/mobile_icon.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "mobile_icon.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "mobile_icon@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "mobile_icon@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/mobile_icon.imageset/mobile_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/mobile_icon.imageset/mobile_icon.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/mobile_icon.imageset/mobile_icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/mobile_icon.imageset/mobile_icon@2x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/mobile_icon.imageset/mobile_icon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/mobile_icon.imageset/mobile_icon@3x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/password_icon.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "password_icon.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "password_icon@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "password_icon@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/password_icon.imageset/password_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/password_icon.imageset/password_icon.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/password_icon.imageset/password_icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/password_icon.imageset/password_icon@2x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/password_icon.imageset/password_icon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/password_icon.imageset/password_icon@3x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/person_icon.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "person.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "person@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "person@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/person_icon.imageset/person.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/person_icon.imageset/person.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/person_icon.imageset/person@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/person_icon.imageset/person@2x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/person_icon.imageset/person@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/person_icon.imageset/person@3x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/roo_logo.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "roo_logo.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "roo_logo@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "roo_logo@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/roo_logo.imageset/roo_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/roo_logo.imageset/roo_logo.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/roo_logo.imageset/roo_logo@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/roo_logo.imageset/roo_logo@2x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/roo_logo.imageset/roo_logo@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/roo_logo.imageset/roo_logo@3x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/tag_icon.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "tag.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "tag@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "tag@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/tag_icon.imageset/tag.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/tag_icon.imageset/tag.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/tag_icon.imageset/tag@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/tag_icon.imageset/tag@2x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/tag_icon.imageset/tag@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/tag_icon.imageset/tag@3x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/CancelButton.imageset/CancelButton.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/CancelButton.imageset/CancelButton.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/CancelButton.imageset/CancelButton@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/CancelButton.imageset/CancelButton@2x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/CancelButton.imageset/CancelButton@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/CancelButton.imageset/CancelButton@3x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/CancelButton.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "CancelButton.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "CancelButton@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "CancelButton@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/DriverEnRoute.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Driver En Route@1x.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "Driver En Route@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "Driver En Route@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/DriverEnRoute.imageset/Driver En Route@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/DriverEnRoute.imageset/Driver En Route@1x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/DriverEnRoute.imageset/Driver En Route@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/DriverEnRoute.imageset/Driver En Route@2x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/DriverEnRoute.imageset/Driver En Route@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/DriverEnRoute.imageset/Driver En Route@3x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerDropoffLocation.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "map_marker_destination_location.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "map_marker_destination_location@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "map_marker_destination_location@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerDropoffLocation.imageset/map_marker_destination_location.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerDropoffLocation.imageset/map_marker_destination_location.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerDropoffLocation.imageset/map_marker_destination_location@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerDropoffLocation.imageset/map_marker_destination_location@2x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerDropoffLocation.imageset/map_marker_destination_location@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerDropoffLocation.imageset/map_marker_destination_location@3x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerPickupLocation.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "map_marker_pickup_location.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "map_marker_pickup_location@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "map_marker_pickup_location@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerPickupLocation.imageset/map_marker_pickup_location.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerPickupLocation.imageset/map_marker_pickup_location.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerPickupLocation.imageset/map_marker_pickup_location@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerPickupLocation.imageset/map_marker_pickup_location@2x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerPickupLocation.imageset/map_marker_pickup_location@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerPickupLocation.imageset/map_marker_pickup_location@3x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ProgressKangaroo.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "progress_kangaroo.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "progress_kangaroo@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "progress_kangaroo@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ProgressKangaroo.imageset/progress_kangaroo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ProgressKangaroo.imageset/progress_kangaroo.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ProgressKangaroo.imageset/progress_kangaroo@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ProgressKangaroo.imageset/progress_kangaroo@2x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ProgressKangaroo.imageset/progress_kangaroo@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ProgressKangaroo.imageset/progress_kangaroo@3x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_kangaroo_marker.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "available_kangaroo_marker.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "available_kangaroo_marker@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "available_kangaroo_marker@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_kangaroo_marker.imageset/available_kangaroo_marker.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_kangaroo_marker.imageset/available_kangaroo_marker.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_kangaroo_marker.imageset/available_kangaroo_marker@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_kangaroo_marker.imageset/available_kangaroo_marker@2x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_kangaroo_marker.imageset/available_kangaroo_marker@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_kangaroo_marker.imageset/available_kangaroo_marker@3x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallabe_marker.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "available_wallabe_marker.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "available_wallabe_marker@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "available_wallabe_marker@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallabe_marker.imageset/available_wallabe_marker.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallabe_marker.imageset/available_wallabe_marker.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallabe_marker.imageset/available_wallabe_marker@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallabe_marker.imageset/available_wallabe_marker@2x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallabe_marker.imageset/available_wallabe_marker@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallabe_marker.imageset/available_wallabe_marker@3x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallaroo_marker.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "available_wallaroo_marker.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "available_wallaroo_marker@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "available_wallaroo_marker@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallaroo_marker.imageset/available_wallaroo_marker.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallaroo_marker.imageset/available_wallaroo_marker.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallaroo_marker.imageset/available_wallaroo_marker@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallaroo_marker.imageset/available_wallaroo_marker@2x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallaroo_marker.imageset/available_wallaroo_marker@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallaroo_marker.imageset/available_wallaroo_marker@3x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "ride_option_kangaroo.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "ride_option_kangaroo@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "ride_option_kangaroo@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | },
23 | "properties" : {
24 | "template-rendering-intent" : "original"
25 | }
26 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo.imageset/ride_option_kangaroo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo.imageset/ride_option_kangaroo.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo.imageset/ride_option_kangaroo@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo.imageset/ride_option_kangaroo@2x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo.imageset/ride_option_kangaroo@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo.imageset/ride_option_kangaroo@3x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo_selected.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "ride_option_kangaroo_selected.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "ride_option_kangaroo_selected@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "ride_option_kangaroo_selected@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | },
23 | "properties" : {
24 | "template-rendering-intent" : "original"
25 | }
26 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo_selected.imageset/ride_option_kangaroo_selected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo_selected.imageset/ride_option_kangaroo_selected.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo_selected.imageset/ride_option_kangaroo_selected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo_selected.imageset/ride_option_kangaroo_selected@2x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo_selected.imageset/ride_option_kangaroo_selected@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo_selected.imageset/ride_option_kangaroo_selected@3x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "ride_option_wallabee.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "ride_option_wallabee@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "ride_option_wallabee@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | },
23 | "properties" : {
24 | "template-rendering-intent" : "original"
25 | }
26 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee.imageset/ride_option_wallabee.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee.imageset/ride_option_wallabee.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee.imageset/ride_option_wallabee@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee.imageset/ride_option_wallabee@2x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee.imageset/ride_option_wallabee@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee.imageset/ride_option_wallabee@3x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee_selected.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "ride_option_wallabee_selected.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "ride_option_wallabee_selected@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "ride_option_wallabee_selected@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | },
23 | "properties" : {
24 | "template-rendering-intent" : "original"
25 | }
26 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee_selected.imageset/ride_option_wallabee_selected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee_selected.imageset/ride_option_wallabee_selected.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee_selected.imageset/ride_option_wallabee_selected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee_selected.imageset/ride_option_wallabee_selected@2x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee_selected.imageset/ride_option_wallabee_selected@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee_selected.imageset/ride_option_wallabee_selected@3x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "ride_option_wallaroo.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "ride_option_wallaroo@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "ride_option_wallaroo@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | },
23 | "properties" : {
24 | "template-rendering-intent" : "original"
25 | }
26 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo.imageset/ride_option_wallaroo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo.imageset/ride_option_wallaroo.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo.imageset/ride_option_wallaroo@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo.imageset/ride_option_wallaroo@2x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo.imageset/ride_option_wallaroo@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo.imageset/ride_option_wallaroo@3x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo_selected.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "ride_option_wallaroo_selected.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "ride_option_wallaroo_selected@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "ride_option_wallaroo_selected@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | },
23 | "properties" : {
24 | "template-rendering-intent" : "original"
25 | }
26 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo_selected.imageset/ride_option_wallaroo_selected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo_selected.imageset/ride_option_wallaroo_selected.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo_selected.imageset/ride_option_wallaroo_selected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo_selected.imageset/ride_option_wallaroo_selected@2x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo_selected.imageset/ride_option_wallaroo_selected@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo_selected.imageset/ride_option_wallaroo_selected@3x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/SetPickupLocationLoader.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "set_pickup_location_loader.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "set_pickup_location_loader@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "set_pickup_location_loader@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/SetPickupLocationLoader.imageset/set_pickup_location_loader.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/SetPickupLocationLoader.imageset/set_pickup_location_loader.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/SetPickupLocationLoader.imageset/set_pickup_location_loader@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/SetPickupLocationLoader.imageset/set_pickup_location_loader@2x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/SetPickupLocationLoader.imageset/set_pickup_location_loader@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/SetPickupLocationLoader.imageset/set_pickup_location_loader@3x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/available_placeholder_marker.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "available_placeholder_marker.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "available_placeholder_marker@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "available_placeholder_marker@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/available_placeholder_marker.imageset/available_placeholder_marker.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/available_placeholder_marker.imageset/available_placeholder_marker.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/available_placeholder_marker.imageset/available_placeholder_marker@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/available_placeholder_marker.imageset/available_placeholder_marker@2x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/available_placeholder_marker.imageset/available_placeholder_marker@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/available_placeholder_marker.imageset/available_placeholder_marker@3x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/koober.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "Icon-60@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "Icon-60@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/koober.imageset/Icon-60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/koober.imageset/Icon-60@2x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/koober.imageset/Icon-60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/koober.imageset/Icon-60@3x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/requesting_indicator.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "requesting_indicator.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "requesting_indicator@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "requesting_indicator@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/requesting_indicator.imageset/requesting_indicator.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/requesting_indicator.imageset/requesting_indicator.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/requesting_indicator.imageset/requesting_indicator@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/requesting_indicator.imageset/requesting_indicator@2x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/requesting_indicator.imageset/requesting_indicator@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/requesting_indicator.imageset/requesting_indicator@3x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "ride_option_placeholder.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "ride_option_placeholder@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "ride_option_placeholder@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder.imageset/ride_option_placeholder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder.imageset/ride_option_placeholder.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder.imageset/ride_option_placeholder@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder.imageset/ride_option_placeholder@2x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder.imageset/ride_option_placeholder@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder.imageset/ride_option_placeholder@3x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder_selected.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "ride_option_wallabee_selected.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "ride_option_wallabee_selected@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "ride_option_wallabee_selected@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder_selected.imageset/ride_option_wallabee_selected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder_selected.imageset/ride_option_wallabee_selected.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder_selected.imageset/ride_option_wallabee_selected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder_selected.imageset/ride_option_wallabee_selected@2x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder_selected.imageset/ride_option_wallabee_selected@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder_selected.imageset/ride_option_wallabee_selected@3x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/success_message.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "success_message.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "success_message@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "success_message@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/success_message.imageset/success_message.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/success_message.imageset/success_message.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/success_message.imageset/success_message@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/success_message.imageset/success_message@2x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/success_message.imageset/success_message@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/success_message.imageset/success_message@3x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/card_icon.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "card_icon.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "card_icon@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "card_icon@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/card_icon.imageset/card_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/card_icon.imageset/card_icon.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/card_icon.imageset/card_icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/card_icon.imageset/card_icon@2x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/card_icon.imageset/card_icon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/card_icon.imageset/card_icon@3x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/selected_icon.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "selected_icon.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "selected_icon@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "selected_icon@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/selected_icon.imageset/selected_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/selected_icon.imageset/selected_icon.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/selected_icon.imageset/selected_icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/selected_icon.imageset/selected_icon@2x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/selected_icon.imageset/selected_icon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/selected_icon.imageset/selected_icon@3x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/roo-icon.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "roo-icon.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "roo-icon@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "roo-icon@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/roo-icon.imageset/roo-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/roo-icon.imageset/roo-icon.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/roo-icon.imageset/roo-icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/roo-icon.imageset/roo-icon@2x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/roo-icon.imageset/roo-icon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/roo-icon.imageset/roo-icon@3x.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/rw-logo.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "Razewarelogo_1024.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/rw-logo.imageset/Razewarelogo_1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/rw-logo.imageset/Razewarelogo_1024.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/rwdevcon-bg.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "rwdevcon-bg.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/rwdevcon-bg.imageset/rwdevcon-bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/rwdevcon-bg.imageset/rwdevcon-bg.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/rwdevcon-logo.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "rwdevcon-logo.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Assets.xcassets/Images/rwdevcon-logo.imageset/rwdevcon-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/rwdevcon-logo.imageset/rwdevcon-logo.png
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 | LSRequiresIPhoneOS
22 |
23 | UIApplicationSceneManifest
24 |
25 | UIApplicationSupportsMultipleScenes
26 |
27 | UISceneConfigurations
28 |
29 | UIWindowSceneSessionRoleApplication
30 |
31 |
32 | UILaunchStoryboardName
33 | LaunchScreen
34 | UISceneConfigurationName
35 | Default Configuration
36 | UISceneDelegateClassName
37 | $(PRODUCT_MODULE_NAME).SceneDelegate
38 |
39 |
40 |
41 |
42 | UILaunchStoryboardName
43 | LaunchScreen
44 | UIRequiredDeviceCapabilities
45 |
46 | armv7
47 |
48 | UISupportedInterfaceOrientations
49 |
50 | UIInterfaceOrientationPortrait
51 | UIInterfaceOrientationLandscapeLeft
52 | UIInterfaceOrientationLandscapeRight
53 |
54 | UISupportedInterfaceOrientations~ipad
55 |
56 | UIInterfaceOrientationPortrait
57 | UIInterfaceOrientationPortraitUpsideDown
58 | UIInterfaceOrientationLandscapeLeft
59 | UIInterfaceOrientationLandscapeRight
60 |
61 |
62 |
63 |
--------------------------------------------------------------------------------
/swift-state/SUI Koober/Preview Content/Preview Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/swift-state/SUI Koober/ReusableModels/ErrorMessage.swift:
--------------------------------------------------------------------------------
1 | /// Copyright (c) 2019 Razeware LLC
2 | ///
3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy
4 | /// of this software and associated documentation files (the "Software"), to deal
5 | /// in the Software without restriction, including without limitation the rights
6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | /// copies of the Software, and to permit persons to whom the Software is
8 | /// furnished to do so, subject to the following conditions:
9 | ///
10 | /// The above copyright notice and this permission notice shall be included in
11 | /// all copies or substantial portions of the Software.
12 | ///
13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish,
14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the
15 | /// Software in any work that is designed, intended, or marketed for pedagogical or
16 | /// instructional purposes related to programming, coding, application development,
17 | /// or information technology. Permission for such use, copying, modification,
18 | /// merger, publication, distribution, sublicensing, creation of derivative works,
19 | /// or sale is expressly withheld.
20 | ///
21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27 | /// THE SOFTWARE.
28 |
29 | import Foundation
30 |
31 | struct ErrorMessage: Error {
32 | let id = UUID()
33 | var message: String
34 | }
35 |
36 | protocol ErrorMessageConvertible {
37 | var errorMessage: ErrorMessage { get }
38 | }
39 |
40 | extension ErrorMessageConvertible {
41 | var errorMessage: ErrorMessage {
42 | ErrorMessage(message: "Unknown error. Please try again.")
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/swift-state/SUI Koober/ReusableViews/FullscreenView.swift:
--------------------------------------------------------------------------------
1 | /// Copyright (c) 2019 Razeware LLC
2 | ///
3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy
4 | /// of this software and associated documentation files (the "Software"), to deal
5 | /// in the Software without restriction, including without limitation the rights
6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | /// copies of the Software, and to permit persons to whom the Software is
8 | /// furnished to do so, subject to the following conditions:
9 | ///
10 | /// The above copyright notice and this permission notice shall be included in
11 | /// all copies or substantial portions of the Software.
12 | ///
13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish,
14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the
15 | /// Software in any work that is designed, intended, or marketed for pedagogical or
16 | /// instructional purposes related to programming, coding, application development,
17 | /// or information technology. Permission for such use, copying, modification,
18 | /// merger, publication, distribution, sublicensing, creation of derivative works,
19 | /// or sale is expressly withheld.
20 | ///
21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27 | /// THE SOFTWARE.
28 |
29 | import SwiftUI
30 |
31 | /// Container view that spans the entire screen, ignoring safe areas.
32 | struct FullscreenView : View {
33 | let content: Content
34 | let backgroundColor: Color
35 |
36 |
37 | public init(backgroundColor: Color = Color.white,
38 | @ViewBuilder content: () -> Content) {
39 | self.backgroundColor = backgroundColor
40 | self.content = content()
41 | }
42 |
43 | var body: some View {
44 | HStack {
45 | Spacer()
46 | VStack {
47 | Spacer()
48 | content
49 | Spacer()
50 | }
51 | Spacer()
52 | }
53 | .background(backgroundColor)
54 | .edgesIgnoringSafeArea(.all)
55 | }
56 | }
57 |
58 | #if DEBUG
59 | struct FullscreenView_Previews : PreviewProvider {
60 | static var previews: some View {
61 | FullscreenView {
62 | Text("Content")
63 | }
64 | }
65 | }
66 | #endif
67 |
--------------------------------------------------------------------------------