RideNiceRide

In this capstone project, students will create an app of their own design that showcases our iOS development skills.

App Description:

RideNiceRide is the best way to enjoy Boston's Hubway bike sharing system on iOS. View up-to-date bike and station availability, store favorite stations and view your Hubway account details.
Inspired and based upon the fantastic Android application, Moyeu developed by Jérémie Laval.

Screenshots:

1-StartUp 2-Mapview-Station Panorama SlideMenu Favorites RentalHistory

Usage

  • On startup, the application will center the map on Boston, MA. and plot up-to-date bicycle station information as Pin's on the map.
  • On app startup, the user will be presented a map of the Boston Hubway bicycle sharing system map of current availability of bicycles for rent.
  • Pins on the map represent stations containing bicycles.
  • Each pin displays the number of bicycles available and are color-coded to quickly determine general bicycle availability.
Color Description
Blue Station Locked
Red No bikes
Orange 1 to 4 bikes
Light Green 5 to 9 bikes
Green 10 to 16 bikes
  • Tapping a pin on the map will slide up a menu at the bottom of the screen displaying the name of the station and the active bikes available for rent as well as the total number of bikes the docking station can hold.
  • Sliding the bottom menu up will display a panoramic view of the surrounding area.
  • This panorama view allows the user to visualize what the bike station should appear like and allow them to quickly pinpoint the station if they choose to seek out and rent a bicycle.
  • Clicking on a star while a map pin has been activated will store that map location into a favorite.
  • Tapping on the upper left-hand slide menu (hamburger menu) will open a menu to select navigation options.
  • Map
  • Favorites
  • Rental Account History
  • Favorites is a view allowing the user to view a list of all of stored favorite stations.
  • While on the Favorites view, users can remove a favorite by swiping left on the specified row.
  • Also, tapping on a specific Favorite map view will launch the iOS Map application allowing the user to map directions and see what businesses are around their chosen station.
  • Rental History is a view that will open up a new screen allowing the user to enter their HubWay credentials and access their HubWay account details.

App Specifications

User Interface

  • More than one view controller
    • This application features a number of different view controllers and views. It contains a views for each main content area (Map, Favorites, Rental History) along with a SlideMenu (a.k.a Hamburger Menu) as well as a special PullUp view that allows the user's interaction to stay focused on the Map view when selecting/de-selecting favorite stations.
  • A table or collection view
    • Favorites list is a table view.
  • Navigation and modal presentation
    • This app provides navigation via the left-hand slide menu (Hamburger menu).
  • Image assets in 1x, 2x, and 3x formats. Or in vector format.
    • All image assets are in 1x, 2x, and 3x formats.

Networking

  • Choose an API and integrate downloaded data into the app
  • Give users feedback around network activity, displaying activity indicators and/or progress bars when appropriate, and an alert in case of connection failures
    • A HUD (Heads Up Display) is shown to the user when retrieving network data as well as this HUD displays network error information when unable to connect or invalid JSON other network-related errors.
  • Encapsulate networking code in a class to reduce detail in View Controllers
    • Code that access the network is contained inside class file HubwayAPI.swift.
    • Code to detect changes of network availability is contained inside class file ReachabilityManager.swift.

Persistance

  • Include an object graph that can be persisted in Core Data
    • I persist both Station and FavoriteStation objects via Core Data.
  • Manage the Core Data Stack outside of your view controllers, either in the App Delegate or in a separate Core Data Stack manager class
    • All 'Data Access' currently is encapsulated within the HubwayAPI class. This was a intended decision as the Networking and Data access code footprint is small, I wanted to keep it close together. In future iterations, I am planning on splitting the Data Access code outside of the Networking (API-related) code for better separation of concerns.
  • Aside from your primary app state, you should find some additional state that can be stored outside of Core Data, either in NSUserDefaults, or in the documents directory using an NSKeyedArchiver
    • I am using NSUserDefaults to store last viewed region coordinates of the Map View.

README

  • Describe the intended user experience
    • Done.
  • Include all specific actions and/or commands necessary for the reviewer to compile, run, and access any aspect of the project
    • Done.

Credits

Artwork:

Data provided by Hubway at http://thehubway.com/data/stations/bikeStations.json

Technical Details

Getting Started

Xcode 8 (using Swift 3) is required in order open, build and run the application in a simulator or on a device.

Before opening the workspace, navigate to the directory where the RideNiceRide.xcodeproj is located and run the following command to populate the required CocoaPods.

pod install

Now you can open RideNiceRide.xcworkspace and Run the RideNiceRide target onto your simulator or iOS device.

Code style

This project will follow the GitHub Swift Styleguide in every way possible.

In order to enforce this, the project will also have a Swiftlint build phase to run the linter everytime the app is built.

Dependencies

Model

  • Sync: Modern Swift JSON synchronization to Core Data
  • DATAStack: 100% Swift Simple Boilerplate Free Core Data Stack
  • DATASource: Core Data's NSFetchedResultsController wrapper for UITableView and UICollectionView
  • SYNCPropertyMapper: Map your Core Data properties with ease

Networking

  • Alamofire: HTTP networking library written in Swift

UI

  • ISHPullUp: Vertical split view controller with pull up gesture as seen in the iOS 10 Maps app
  • SlideMenuControllerSwift: iOS Slide Menu View based on Google+, iQON, Feedly, Ameba iOS app. It is written in pure swift
  • GoogleMaps: Enrich your app with interactive maps and immersive street view panoramas
  • GooglePlaces: Add up-to-date information about millions of locations to your iOS App
  • PKHUD: A Swift based reimplementation of the Apple HUD (Volume, Ringer, Rotation,…)

Utilities

  • Sugar: ☕️ Something sweet that goes great with your Cocoa
  • Cent: Library that extends certain Swift object types using the extension feature and gives its two cents to Swift language
  • Dollar: A functional tool-belt for Swift Language similar to Lo-Dash or Underscore.js in Javascript
  • Device: Light weight tool for detecting the current device and screen size written in swift
  • Willow: Willo is a powerful, yet lightweight logging library written in Swift
  • AsyncSwift: Syntactic sugar in Swift for asynchronous dispatches in Grand Central Dispatch

Environment

  • SwiftLint: A tool to enforce Swift style and conventions.
  • SwiftGen: A collection of Swift tools to generate Swift code (enums for your assets, storyboards, Localizable.strings, …)
  • Fabric: Fabric is a mobile platform with modular kits you can mix and match to build the best apps
  • Crashlytics: The most powerful, yet lightest weight crash reporting solution

Tools used during creation