iOS Mini-App Project

Getting Started: Partner Registration and Github

  1. You may work with the same person from the Android Mini App, or choose a new partner. If you need help finding a partner, please post on Piazza or ask Prof. Sherriff. If you are working with a different partner, please email Prof. Sherriff with the new partnership.
  2. Once you know your partner, come by Prof. Sherriff's office to pick up your device.
  3. Now, you can go accpet the assignment in GitHub: Please use your apple device team name as the name of your team! Let us know if you have any issues!
  4. Once you have created your repo, you should have a url that looks something like this:

iOS Device Information

  • iTunes Accounts: You may register your own iTunes account for use with the device or you may create a dummy account if you so desire. However, you MUST log out of your iTunes account and do a factory restore on the iPod before turning it in to remove all of your data, settings, and applications.
  • iTunes App Store: The iPods should be used only for educational purposes and not as a personal device. You can add your iTunes account to this device, but that any charges related to purchasing items from the store are your responsibility.
  • Getting Online: The iPod may or may not be registered for access on the UVa network. Follow instructions here to get online: After you return your device, make sure to remove its registration from the ITS system.
  • Setting a Passcode: If you set a passcode, please set it as 0000 so that we can unlock it if needed.
  • Problems?: Contact Prof. Sherriff at

Project Description

For your iOS Mini App, you are going to build a simple UVa Bucket List app - just like you did for Android. Users will be able to open this app and add items to their bucket list of things that they want to do before graduation. Each item will have a name, description, latitude, longitude, and a way to record whether it has been completed or not. Since we are early in the semester and have not yet covered data storage, the app should pre-populate with just a few example items at start up and work as intended while in use, but it does not have to remember the state of the list from run to run.

Requirements and Specifications

Your app must meet the following requirements and specifications. Deviating from these will result in a reduced grade.

You will be doing this app in Swift 3. A large number of tutorials you will find will be using Swift 2. In many cases, Xcode will autocorrect this code for you, but you need to be cognizant of it and adapt accordingly. You can't just copy/paste and assume everything will work!

The app shall be made up of four total screens - the launch screen, a list screen, a create new item screen, and an item information screen. More detailed information about each scene is found below.

You will (most likely) have some set of the following files in your project:

  • AppDelegate.swift - Basically the "main" for the entire app. You probably won't touch this.
  • AddItemViewController.swift - The Add New Item controller code.
  • EditItemViewController.swift - The Edit Item controller code.
  • Main.storyboard - The storyboard for most of your app (not count the launch screen).
  • LaunchScreen.storyboard - Built-in by default, you just need to add your names to this.
  • BucketItem.swift - The model class for this app.
  • BucketListTableViewController.swfit - The controller for the list screen.
  • BucketListTableViewCell.swift - Effectively the adapter for this app if you think of the Android version.

BucketListTableViewController, BucketListTableViewCell, and BucketItem

A very large portion of your overall code base will go here. There are a LOT of tutorials out there on how to do this. PLEASE read through several to get a feel for all of the different functions you have to override, etc. Here is a sampling:

Also please check the lecture notes for example code on how to do a list like this!

The requirements are basically the same as the Android version:

  1. The list should be sorted first by whether the item still needs to be done or not (completed items move to the bottom), then by date (with more recent dates at the top). (This is the same as the Android project.)
  2. Swiping right to left should show a button to mark the item done and to edit the item.
  3. The button should swap the done / not done state, and also change the background color of the cell to show its state.
  4. Tapping on the + in the upper right takes you to the add new screen.

Add Item and Edit Item

  1. You should have Cancel and Save buttons along the top in a Navigation Controller.
  2. Make sure that the numeric fields are numeric entry and that the date is a date-only spinner.
  3. Added or edited items should appear in the list upon save and the order fixed if needed.
  4. It is possible to use only one scene to do both add and edit. If you want to do this, you are welcome to do so, but note that it can be a bit more complicated (if overall it is less code).

Moving between scenes and passing data requires the use of segues. Examples:


Layout management can be interesting in Swift and Xcode. Again, here are some resources:

Example Screenshots

Launch screen (just make sure it has your names and IDs):
List Activity

Main list of items that should appear on launch:
List Activity

Adding a new item:
List Activity

New item added to list:
List Activity

Swipe to mark done or edit item:
List Activity

Marked done:
List Activity

Milestone Submission - Due: Monday, September 18 @ 11:55 PM

You should have at least the main list screen appearing, with the + button and a pre-populated list, plus one other piece of basic functionality of your choice.

Grading Rubric:

Out of 20 possible points:

  • 5 pts: App can launch properly
  • 5 pts: The list is pre-populated and a + button appears
  • 5 pts: Some other basic functionality is apparent and MUST be directly related to making progress on the overall app (describe how this is the case in your file)
  • 5 pts: Doesn’t crash / looks reasonable


All code must be kept in the Github repo you created as a part of your partner creation process above. We will do a checkout from Github of the latest push to the repo before the 11:55 PM deadline.

You do NOT need to include a build for iOS (it's doesn't work well anyway). Do make sure to craete a file that describes your progress and what fuctionality you added.

Final Submission - Due: Wednesday, September 27 @ 11:55 PM (EXTENSION GRANTED DUE TO CONCERT)

You should have all required features completed plus a project report in your file in your repo.

Project Report:

Your documentation must include:

  • Team member list
  • Device Name
  • Project/App Title
  • Basic instructions on usage
  • Any special info we need to run the app
  • Lessons learned (at least half a page)

We will try something different this time with the report. Write your report in Markdown format and put it as your file in the repo. You should replace all info you had in the file from the milestone.

Grading Rubric:

iOS Final Build (out of 100):

/5 pts: App can launch properly and a screen with a pre-populated, sorted list appears
/10 pts: Tapping on the + button launches the Add New Item scene
/5 pts: The Add New Item scene has all appropriate fields
/15 pts: The new item is put into the list in the correct location after saving
/10 pts: Swiping right to left gives a button that registers the item as complete and it moves to the bottom of the list
/5 pts: Tapping the Edit button in the slide menu opens the Edit Item scene
/10 pts: The Edit Item scene is pre-populated with all appropriate data
/15 pts: Changes made in the Edit Item scene are properly reflected back in the list
/10 pts: The Cancel button in the upper left corner work properly for both Add New Item and Edit Item
/5 pts: App does not crash on rotate (fully resetting the entire app on rotate or a hard lock: -2)
/5 pts: Design / Style / Appearance / Usability
/5 pts: Documentation / Report


All code must be kept in the Github repo you created as a part of your partner creation process above. We will do a checkout from Github of the latest push to the repo before the 11:55 PM deadline. Please make sure that the latest version of your report is in the file in the root of your repository.

Team Member Evaluations: Please fill out this form SEPARATELY FOR EACH TEAM MEMBER on your team

more ...