This course provides a comprehensive, practical introduction to iOS mobile app development. We will be using the swift language along with the Xcode IDE to develop the applications following the MVC design pattern. In the beginning of the course we will begin by learning how to develop scalable user interfaces in the Xcode Interface Builder as well as controlling the interface using outlets. We will then progress by learning how to ingest and model data from a REST API and how to display this data to the user. Lastly, throughout the course we will be breaking down current iOS apps available on the app store and learning how we can create the same application. By the end of the course, we hope students are capable of developing and publishing their own apps to the Apple app store.
- Course: CMSC389Q
- Prerequisites: C- or better in CMSC216 and CMSC250
- Credits: 1
- Seats: 30
- Lecture Time: Fridays, 2-2:50PM
- Location: CSI 3118
- Semester: Fall 2018
- Textbook: None
- Course Facilitators: Tamer Bader and Travis Ho
- Faculty Advisor: Neil Spring
- Syllabus Last Updated: August 30 2018
-
Xcode 10
-
Creating a project
-
Navigating and interacting with Xcode
-
Interface Builder
-
Creating an interface using UIKit components
-
Using Autolayout to create scalable user interfaces
-
Setting up the flow of the application using segues
-
Running an application on your personal device and on provided simulator
-
Preparing the application for app store release
-
Swift 4
-
Variables, data types, optionals
-
Conditionals, iteration, statments
-
Functions and completion handlers
-
Protocols and Delegates
-
IBOutlets and IBActions
-
MVC design architecture
-
Deciding what tasks can be performed in the view controller
-
How to setup communication between your models and your controller
-
How the view and the view controller communicate
-
REST API
-
Creating HTTP Requests
-
Ingesting and modeling data from a REST API
-
Preventing thread issues
-
Persisting data
-
Using Core Data
-
Using UserDefaults
-
Cocoapods
-
How to install cocoapods into your project.
-
Examples of cocoapods you may find helpful
-
Advanced Frameworks
-
CoreML
-
ARKit 2
Grades will be maintained on the CS Department grades server.
You are responsible for all material discussed in lecture and posted on the class repository, including announcements, deadlines, policies, etc.
Your final course grade will be determined according to the following percentages:
Percentage | Title | Description |
---|---|---|
40% | Weekly HW | Weekly assignments that can take the form of small projects or ELMS quizzes. |
30% | Midterm | An individual project where you create your own app using topics and features learned from previous lectures |
30% | Final Project | An iOS app that uses everything you've learned in the semester. You may work in groups on this. |
Any request for reconsideration of any grading on coursework must be submitted within one week of when it is returned. No requests will be considered afterwards.
Week | Topic | Assignment |
---|---|---|
1 (8/31) | Xcode and Swift | ELMS Intro Quiz OUT (HW1) |
2 (9/7) | Storyboard and Autolayout | HW1 DUE, Design project OUT (HW2) |
3 (9/14) | IBOutlets and IBActions | HW2 DUE, Tip Calculator Assignment OUT (HW3) |
4 (9/21) | Advanced Views | HW3 DUE, Twitter Assignment OUT (HW4) |
5 (9/28) | Requested Topic | |
6 (10/5) | Networking | HW4 Due, Midterm OUT |
7 (10/12) | Cocoapods | |
8 (10/19) | Requested Topic | Midterm Due, HW5 TBD OUT |
9 (10/26) | Core Data/ User Defaults | HW5 DUE, HW6 TBD OUT |
10 (11/2) | Advanced Swift Topics | HW6 DUE, HW7 TBD OUT |
11 (11/9) | Publishing App | HW7 Due, HW8 TBD OUT |
12 (11/16) | Requested Topic | HW8 DUE, FINAL OUT |
13 (11/23) | THANKSGIVING BREAK | |
14 (11/30) | Requested Topic | |
15 (12/7) | Presentations | Final Project DUE |
Assignments must be submitted electronically following the instructions given in each project assignment. Assignments may not be submitted by any other means (e.g., please do not email your projects to us). It is your responsibility to test your program and verify that it works properly before submitting. All projects are due at 11:59 PM on the day indicated on the project assignment.
Projects may be submitted up to 24 hours late for a 10% penalty. If you submit both on-time & late, your project will receive the maximum of the penalty-adjusted scores. You may submit multiple times.
Unlike lower-level programming classes, we will not provide you with test cases (e.g., public tests) before projects are due. You will be responsible for developing your own tests and for using appropriate testing techniques. Also, we expect your projects to use proper style and documentation.
We will interact with students outside of class in primarily two ways: online at Piazza and office hours. Tamer Office Hours: TBD or by appointment Travis Office Hours: TBD or by appointment Email should only be used for emergencies and non-class related questions (e.g. projects).
Instructor:
Dr. Neil Spring - [email protected]
TAs:
[Tamer Bader] - [email protected]
[Travis Ho] - [email protected]
See the section titled "Attendance, Absences, or Missed Assignments" available at Course Related Policies.
See the section titled "Accessibility" available at Course Related Policies.
Note that academic dishonesty includes not only cheating, fabrication, and plagiarism, but also includes helping other students commit acts of academic dishonesty by allowing them to obtain copies of your work. In short, all submitted work must be your own. Cases of academic dishonesty will be pursued to the fullest extent possible as stipulated by the Office of Student Conduct.
It is very important for you to be aware of the consequences of cheating, fabrication, facilitation, and plagiarism. For more information on the Code of Academic Integrity or the Student Honor Council, please visit http://www.shc.umd.edu.
If you have a suggestion for improving this class, don't hesitate to tell the instructor or TAs during the semester. At the end of the semester, please don't forget to provide your feedback using the campus-wide CourseEvalUM system. Your comments will help make this class better.