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.