CIS 1951
Fall 2024

Syllabus

Course Structure

  • Lectures: Once a week, 1.5 hours each.
  • Homework Assignments: 5 assignments spread over Weeks 1-12.
  • Final Project: Week 11 brainstorming, Weeks 12-14 working; teams of 3.

Attendance Policy

  • You are allowed 2 free absences before deductions are made.
  • If for some reason you cannot make a lecture for a week, you may join the other section for full attendance. To do this, you must ask at least 48 hours on Ed before the section you'd like to join.
    • For everyone in the Thursday 202 section, this means you must ask before Tuesday that week since this is the one with the same content. (Attendance is required!)
    • You must let us know over (a private post in) Ed. If you ask over email, we will ask you to post on Ed instead.
  • If you are unable to attend class due to a health-related reason or family emergency, please let us know on Ed.

Late Policy

  • You may have a 2 day extension for any assignment, as long as you let us know 24 hours on Ed in advance.
    • As with attendance, this must be done over Ed.
  • Any submissions made past the assignment deadline drops the grade down to a maximum of 50%, and any submissions made after a week is a 0%.
  • The above policies do not apply to the final project - late submissions will not be accepted due to their proximity to presentations.
  • If you are unable to submit an assignment due to a health-related reason or family emergency, please let us know on Ed.

AI Policy

  • You may use ChatGPT or other generative AI tools, but we advise against relying on them.
    • AI-based tools are usually outdated on iOS development practices - oftentimes, ChatGPT will give you way more code (both in terms of quantity and complexity) than you actually need to implement.
  • We suggest starting and writing up the code structure on your own, and then potentially using ChatGPT to fill in the blanks.
    • Relying on AI from the start may lead to UI and logic bugs that are difficult to debug later down the line.
  • At the very least, make sure to understand every line you write.

Grading

  • Attendance and Participation: 10%
  • Homework Assignments: 60%
    • HW0: 20 points
    • HW1-4: 100 points each
  • Final Project: 30%

Topics Covered

For a weekly schedule, consult the schedule page.

Week 1: Introduction to iOS Development and Xcode

  • Overview of the iOS platform and its evolution.`
  • Installing Xcode and understanding its interface.
  • Creating a simple "Hello, World!" app in Xcode.
  • Introduction to the Swift Playgrounds for experimenting with Swift code.

Week 2: Swift Basics

  • Swift language fundamentals: variables, constants, data types.
  • Control Flow: if-else statements, loops, switch cases.
  • Functions: declaration, parameters, return types.
  • Structs, classes, and protocols.
  • Basic error handling in Swift.

Week 3: SwiftUI Fundamentals

  • Introduction to SwiftUI and its declarative syntax.
  • Building basic user interfaces: Text, Image, Button.
  • Understanding the SwiftUI layout system: VStack, HStack, ZStack.
  • Modifiers: applying basic modifiers to SwiftUI views.
  • Lists and scrolling views.
  • Sidebar: Debugging tools in Xcode: breakpoints, console, and debugging commands.

Week 4: SwiftUI State Management

  • View hierarchy in SwiftUI.
  • Data passing and state management in views.
  • Property wrappers in SwiftUI: @State, @Binding, @ObservedObject, @StateObject, @EnvironmentObject.
  • Building forms and handling user input: Button, TextField, .onChange.
  • Basic animations and transitions in SwiftUI.

Week 5: App Lifecycle and Structure

  • Lifecycle events: onAppear, onDisappear.
  • Navigation in SwiftUI: NavigationStack, NavigationLink. TabView.
  • MVVM (model–view–viewmodel) architecture.
  • Modal presentations: .sheet, .alert.

Week 6: Custom Views & Event Handling

  • GeometryReader, safe area.
  • SwiftUI shapes, .fill/.stroke.
  • Understanding event propagation and handling in iOS.
  • Keyboard handling and text input events.
  • Custom gesture recognition in SwiftUI.

Week 7: Working with Sensors

  • Accessing device sensors: GPS, accelerometer, gyroscope.
  • Using Core Motion to access motion data.
  • Handling location data with Core Location.
  • Practical use cases of sensor data in apps.

Week 8: Networking in iOS

  • Making HTTP requests and handling responses (async/await).
  • Working with URLSession for network tasks.
  • Parsing JSON data and integrating it into the app.
  • Error handling and network best practices.

Week 9: Data Persistence

  • Introduction to UserDefaults for simple data storage.
  • Using Core Data for complex data models and persistent storage.
  • CRUD operations in Core Data.
  • File management: reading and writing files on the device.
  • Other data storages: Keychain, SwiftData

Week 10: UIKit & UIKit Integration with SwiftUI

  • UIKit basics: MVC architecture in iOS.
  • Integrating UIKit in SwiftUI: using UIViewRepresentable.
  • User interaction in UIKit: event and input management.
  • Combining UIKit & SwiftUI: navigation and data sharing strategies.

Week 11: App Design and User Experience

  • The UI design process: steps toward a UI from scratch.
  • Design principles for mobile apps: clarity, efficiency, consistency.
  • Multi-platform and OS version compatibility: adapting to different devices.
  • Accessibility in iOS: making apps accessible to all users.

Week 12: Bonus Lecture (TBD)

Potential Topics:

  • Advanced UI/UX Design Concepts (Animations, Transitions, AR/voice-based Interfaces)
  • Integrating Machine Learning with Core ML
  • Augmented Reality with ARKit
  • Designing Home Screen Widgets with WidgetKit
  • Apple Watch and Wearable Integration
  • Internet of Things (IoT) and HomeKit

Final Project

  • Duration: See the Schedule page.
  • Team Composition: 3 students per team.
  • Objective: Develop a fully functional and creative iOS app.
  • Presentation: Demonstrate the app and discuss design and development challenges.
Dates and times are displayed in EST.