Dev Meeting: iOS setup

For detailed notes, see our Hackpad.

Main Takeaways

  • UI: We have to make the detailed UI decisions at lower levels than we did when prototyping.
  • We decided on the ViewControllers we will use.
  • We discussed external frameworks. We'll be using CocoaPods for package management.

Next steps (also on Trello)

  • Frontend: Have .swift files for every ViewController
  • Frontend: Connect everything with storyboard
  • Backend (Flask): Finish models

Design Decisions

Our implementation decisions are discussed in the Hackpad. Below, we give some of the design decisions.

Scanning and Entering Manually

When an existing user opens the app, we take them directly to the camera, so that they can immediately take a picture of the license plate. After the photo is taken, we should give the user the option to retake a photo and manually check / correct the characters that were read in. We also wanted to give the user the ability to enter a license plate manually, skiping the entire photo process.

We decided that the portion of both workflows that involves manually correcting or entering the license plate should be the same "Check license plate view."

On the initial camera view, we have two buttons: "Scan" and "Enter Manually." "Scan" takes a picture and takes the user to the "Check license plate view" with the recognized characters as the default text. "Enter manually" takes the user to the "Check license plate view" directly with an empty text field.

Preset Messages

We prototyped whether we wanted people to send messages as presets without a custom option, presets with a custom option, or custom only. We ultimately decided on presets with a custom option. However, we still had to decide how to send the presets. Should the message send as soon as a user clicks on the message? Should we have a send button next to every preset message? Should we have a send button on the bottom that activates when exactly one message is selected?

Custom Messages

The preset messages are displayed in a table view. At the bottom of that view is an option to enter a custom message. We discussed whether clicking on the "Custom" button should take the user to a new view, or whether a keyboard should pull up in the current one. The former has a simpler implementation, and each of the two views is cleaner. The latter has the advantage of promoting preset messages and making it obvious that the custom message should be short.


We need a user's name, email, and license plate to onboard them. The camera view used to scan another person's license plate can be reused here.