Skip to main content Skip to secondary navigation

CS193p - Developing Apps for iOS

Main content start

Below you will find links to videos and supporting course material for the Spring 2025 version of Stanford's CS193p (Developing Applications for iOS using SwiftUI).  It is a course Stanford students take to learn some of the basics of iOS development.

The course happened before iOS 26 and Xcode 26 were released, but the code written during the course seems to be mostly compatible.  The big change in Xcode 26, of course, is built-in LLM assistance, and iOS 26 introduced Liquid Glass in the UI, so of course there's none of that in any of these videos.

Unfortunately, we aren't able to provide any support for you as you watch these, but there are lots and lots of fantastic resources online for helping you in your quest to learn how to develop apps for iOS, so seek them out!

For more, check out the About page.

Keynote slide about Model and UI and the Swift Type System

Model and UI; Swift Type System

Lecture 3

Understanding the separation of Model (logic and data) from UI.  Introduction to some of the fundamentals of the Swift Type System.

Watch Lecture

Reading Assignment 2

Xcode screenshot of the code and #Preview of CodeBreaker in action

Building CodeBreaker's Model

Lecture 4

Build CodeBreaker's Model and hook the UI up to it. Along the way, @State, Optionals, onTapGesture.  CodeBreaker is playable now!

Watch Lecture

Programming Assignment 2

Keynote slide about Data Flow

Layout; Data Flow

Lecture 5

How SwiftUI lays out UI elements on screen. Also a discussion of how data flows through a SwiftUI application. Intro to functional programming.

Watch Lecture

Keynote slide of important takeaways about Animation

Generics and Views; Animation

Lecture 7

How Views like VStack take a ViewBuilder as an argument. Handling the passing of an @Binding to the init of a View. Slides going over some of the basic ideas of Animation.

Watch Lecture

Reading Assignment 3

CodeBreaker L7

Xcode screenshot of animation code and animation in action in the #Preview

Animation Demonstration

Lecture 8

Armed with a basic understanding of Animation, apply it to our CodeBreaker in various ways to see how Animation works in practice.

Watch Lecture

CodeBreaker L8

Keynote slide about the Swift Type system and protocols

Elapsed Time; Protocols

Lecture 9

How to show elapsed time in our CodeBreaker. Discussion of protocols, an important aspect of the Swift Type system.

Watch Lecture

CodeBreaker L9

Xcode screenshot showing List features including swipe to delete

List and Navigation

Lecture 10

CodeBreaker gains complexity by adding a list of games to choose from and UI for navigating between games.  More about ForEach and more detail about Hashable, Identifiable and other protocol conformance.

Watch Lecture

Programming Assignment 4

CodeBreaker L10

Xcode screenshot of working on the CodeBreaker SwiftData @Model

SwiftData

Lecture 13

Making our CodeBreaker games persistable into a database!  @Model, @Relationship, ModelContainers and ModelContext, FetchDescriptor and #Predicate.

Watch Lecture

CodeBreaker L13

Xcode screenshot of working on a SwiftData game-filtering #Predicate

More SwiftData

Lecture 14

Using our @Model-based CodeBreaker Model to make them persist between application launches and to search for games in the database. How to create a #Preview for a View that access SwiftData.

Watch Lecture

Programming Assignment 5

CodeBreaker L14

Keynote slide about elapsedTime feature and Multithreading

Yet More SwiftData; Multithreading

Lecture 15

Creating even more complex #Predicates for SwiftData. Reacting to database saves. Just the basics on multithreading.

Watch Lecture

CodeBreaker L15

3 iOS Simulator screenshots of CodeBreaker in action

Final Project Miscellany

Lecture 16

Some miscellaneous topics which might be useful for final projects: custom Shapes, using GeometryReader, handling multitouch gestures, alternatives to SwiftData when it comes to persistence.

Watch Lecture

CodeBreaker L16