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.





