Experience summer at Regent College
- Course and lecturer details
- FAQ
- Events
- What's happening today
- Multiple sessions per event/course
- Add events to calendar
- Directions
- Search and filter events
- Search and filter courses
- Announcements
- Share to social media
- Today extension for lock screen
- WatchKit
- Internationalization and localization
- Persistent and simple datastore with Google Firestore
- Clear and simple mapping to objects with Mapper
- Dependency injection with Swinject and SwinjectStoryboard
- Embedded video with PlayerKit
- Rich text with HTML with Atributika
- Swipeable table cells with SwipeCellKit
- Async images with Kingfisher
- Directions to rooms using ImageSlideshow
- Responsive interface for iPad/iPhone with SplitViews
"Isolate complexity" - Steve McConnell, Code Complete
- Model: Data, including the means to instantiate from source; in this case it is Firestore NSDictionary.
- ViewModel: Data formed for specific view purposes. Only show data from the model that the view actually needs. Combine and massage fields with presentation logic.
- DocumentStore (aka repository): Data CRUD (create, read, update, delete). This service is injected into the ViewControllers, sets them as its delegate, and tells them when it has updates with documentsDidUpdate().
- DetailViewControllers and TableViewCells: A view with injected ViewModel(s).
- ViewController: Everything else. Use extensions to separate concerns.
- iOS 10.3+
- Xcode 9.3
- Clone
- run 'pod install'
- Get a GoogleServices-Info.plist from the Firestore Setup
- Populate Firestore with some courses and lecturers
- Customize Settings.swift
- Build
Check the LICENSE file for more info on contributing to summer-swift.
Cam Tucker – [email protected]
Distributed under the MIT license. See LICENSE for more information.