
Bennett shares his nontraditional path into iOS development, USC background, and experience, outlining how the course guides you to build Lyft and Spotify while modernizing curriculum from Objective-C to Swift.
Outline the course roadmap with three stages—foundations, practice, and deep dive. Explain how to build modern iOS apps by creating lift and Spotify.
Access the iOS app demos on GitHub, download the zip of all project files and assets, and locate Xcode projects within sections like user interface.
Explore how integrated development environments aid app creation. Install X code from App Store, run it on macOS, and navigate the X code interface to use panels and controls efficiently.
Explore integrated development environments and their essential tools, including code editor, compiler, simulator, and version control. See how Xcode drives iOS, watchOS, and tvOS development.
Install and open Xcode from the Mac App Store, manage version options (install, update, open), and prepare to explore the Xcode interface for building modern iOS apps.
Navigate the Xcode interface, create an iOS app with the single view template, and use the navigator, toolbar, and editor areas and the mini map to run on a simulator.
Explore configuring the iOS simulator and running your app with its features on a device. Compare the simulator and real device tradeoffs to decide when to test on each.
Learn to use the iOS simulator in Xcode to run your app on multiple devices, set a teal background, and test shaking, rotation, location, and two-finger touch with maps.
Discover how to run an iOS app on a real device using Xcode, set deployment target, sign with a development team, register the device, and launch the app.
Compare the simulator and a real device for iOS app testing, noting fast startup and easy multi-simulator runs on the simulator, with authentic hardware testing on a device.
Master the fundamentals of user interface design, covering key terminology and concepts, Apple’s UI kit, and how to manage and display images across different devices.
Explore core design concepts like pixels, resolution, screen size, and dots per inch. Learn how the point system yields consistent sizes for iOS apps across devices.
Explore the Cornyn system for placing views, with origin at the top left, x to the right, y downward, and origin, size, and frame examples.
Explore the UIKit catalog of iOS interface elements, aligned with the human interface guidelines, organized into bars, views, and controls, including navigation, search, tabs, alerts, and common controls like buttons.
Explore Interface Builder to design user interfaces in a storyboard using drag-and-drop elements, preview on devices, and adjust properties with the attributes inspector and utilities panel without coding.
Explore how to manage images across iOS devices using points, scale factors, and storyboard. Multiply view sizes by 1x, 2x, and 3x to produce dimensions, then add images to assets.
Learn to add and configure an image view, size it 120 by 120, and assign an image from assets. Support 1x, 2x, and 3x scale factors by adjusting pixel sizes.
Learn to add custom app icons following Apple guidelines by supplying square images with no text or transparency, including 120×120 and 180×180 assets in the asset catalog.
Learn how auto layout lets interfaces adapt to different screen sizes, understand its origin and purpose, master constraint types, and effectively diagnose and handle constraint errors.
Explore how iOS views nest and relate, with blue super view and green sub view, understand origin and coordinate systems, and use the document outline to identify sibling views.
Explore the origin of auto layout as devices shift from a single screen to many sizes, comparing math, springs and struts, and constraints that govern view relationships and prevent overlaps.
Explore auto layout constraints - spacing, alignment, and dimension rules for x, y, width, and height - with examples like 50 points from the top.
Learn to build responsive iOS layouts in storyboard by applying auto layout constraints, pinning four views to screen edges, and centering or full-screening elements like a map view.
Center a 120 by 120 image view with a 1:1 aspect ratio using alignment constraints, then constrain a map view to all edges with zero margins for Apple Maps.
Explore Swift, Apple's favorite language, from fundamentals and building blocks to conditions, loops, and the definitions and execution of functions for modern iOS apps.
Compare Objective-C and Swift as the two languages for iOS apps, noting Swift’s cleaner syntax and Objective-C’s deprecated status, and explore Swift compilation with Xcode and Playgrounds.
Learn how Swift organizes data with fundamental data types—character, string, int, float, double, and bool—plus notes on precision, memory tradeoffs, and using a playground.
Learn how to create constants and variables in Swift, using type inference and explicit types, with examples, and why constants stay fixed while variables change in a strongly typed language.
Explore reserved words and how they define identifiers, constants, and variables in Swift. Learn examples like true, false, let, and var, and notice how Xcode highlights reserved words.
Explore Swift operators and the components of expressions, from unary minus to binary multiplication, and categorize arithmetic, relational, and logical operators to understand how inputs produce outputs.
Learn Swift arithmetic and relational operators, integer vs. double division, the remainder, and equality checks with double equals, plus boolean logic with and, or, not, demonstrated in a Swift playground.
Learn how Swift uses string interpolation to insert variables into strings, avoiding type mismatches from adding strings and numbers, and how to handle common errors while injecting expressions.
Explore control flow in Swift, using if and switch conditionals to make decisions, with optional else clauses and pattern matching, while loops repeatedly run until conditions fail.
Master Swift if statements and else if branches by building a drink picker that assigns orange juice, beer, or vodka based on user age.
Create a program that uses a switch statement to map a favorite color to a message, initializing color to blue and message to an empty string.
Learn to print messages to the console with the print function, use string interpolation for variables and expressions, and ensure the console is visible when developing iOS apps.
Explore how to use for loops and while loops in swift to execute a block of code repeatedly, control iterations with ranges, and avoid infinite loops.
Learn how Swift functions help avoid copy-paste and follow the dry principle by wrapping code in reusable blocks with parameters, return values, and string interpolation.
Explore the basics of object oriented programming, including what it means to be object oriented, parts of a class definition, and how inheritance builds relationships between classes.
Learn how object oriented programming helps you organize code by modeling real world objects with attributes and actions, using classes as blueprints to create object instances like houses.
Learn how to define a class as a template for objects, including properties, methods, and initializers, with an example house and a custom init.
learn to create and use objects in swift with default and custom initializers. access and modify properties using dot notation and invoke methods on objects, which maintain independent data.
Explore variable scope in Swift by examining how local variables, parameters, class properties, and global variables access values, and learn how Swift's priority rules and self help resolve conflicts.
Explore how to connect storyboard-based user interfaces with Swift code by using view controllers, optionals, outlets, and actions, and apply these concepts to build a Mad Libs app.
Explore view controllers as two types: content view controllers render the interface, while container view controllers manage the presentation of other view controllers across navigation and tab bars.
Explore Swift optionals and how to handle absent values with optional binding and nil coalescing. Learn safe access patterns and when to use unconditional unwrapping.
Explore accessing an optional name via a class property using optional chaining and optional binding. Compare unconditional unwrapping, which can crash, with implicitly unwrapped optionals for concise, safer code.
Connect Interface Builder elements to Swift code using outlets and actions in a storyboard-based iOS app. Create a text field outlet and a submit action to print to the console.
Learn how to use enumeration in Swift to define a restricted set of values, create a weekday enum, and safely pass enum cases to functions with concise dot syntax.
Discover how to build a Mad Libs app by wiring UIKit components into outlets and actions, updating labels, and showing the stitched story on tap.
Set up the iOS interface by dragging and dropping ui elements—image view, text fields, segment control, slider, stepper, and a story button—and set placeholders and assets for Mad Libs.
Explore how object-oriented UI components in a UI kit are defined by Apple, and navigate the Apple developer documentation to understand UI text field class definitions, properties, and methods.
Connect outlets and actions by linking text fields, labels, and controls in the storyboard. Use outlets and control drag to wire the slider, stepper, switch, and container view.
Learn to connect actions and outlets in Interface Builder; use a segment control to toggle container view visibility, and connect slider and stepper to update labels with real-time values.
Create a story by interpolating UI element values into a giant string, using age, first name, location, pets, animal, and a ternary-based happy ending, then render and test in app.
Create and present a UI alert controller in Swift, configuring a title, a message, and an OK action to display a pop-up from a view controller.
Explore the model view controller pattern, separating data, UI, and glue logic to organize code, enable data updates, and maintain clean, scalable iOS apps.
Learn how type properties belong to the type itself, not each instance, using the static keyword, with a Swift example counting students and a type method.
Discover how the singleton design pattern ensures one object per class by using a shared instance and private initializer, illustrated with a chief executive officer analogy and Swift examples.
Learn how swift protocols define required methods, how a movable protocol lists move forward, move backward, turn left, and turn right, and how classes conform to protocols.
Link a delegator and a delegate via a protocol so the delegator sends events and remains unaware of the delegate's class, keeping them loosely coupled.
Build a reminders app to manage tasks while expanding Swift skills in error handling, arrays, and typecasting, and master table views, view controllers, and data persistence.
Organize related data with arrays as ordered, zero-indexed collections in Swift, and learn to create, access, and modify them with literals, isEmpty, append, insert, removeLast, and contains.
Define errors, throw them, and catch them in swift using a bank account example with insufficient funds and invalid amount.
Explore type casting and down casting to treat objects as specific types, including any and any object, using is and optional binding with a movable protocol, toy car, and skateboard.
Encode Swift objects to JSON with the quotable API, decode JSON back to Swift objects, and handle UTF-8 encoding and errors using a custom encoder and decoder.
Explore how a UI table view manages data and cells with a reuse pool, index paths, and different styles, powered by data source and delegate protocols.
Learn to build a storyboard table view by wiring the view controller as data source and delegate, creating a prototype cell with a reuse identifier, and using index paths.
Define a prototype cell with a custom style, link it to a Swift avatar cell class, and populate the table view from a data array.
Learn to create segues between view controllers in storyboard, choosing present modally or show, and embedding in a navigation controller to manage transitions and initial view controller setup.
Explore the view controller lifecycle, where load occurs once and the events viewWillAppear, viewDidAppear, viewWillDisappear, and viewDidDisappear fire as controllers transition on screen.
Learn how iOS apps persist data across launches by using the sandbox file system, distinguishing bundle and data containers, and choosing between user defaults, file storage, and core data.
Learn to implement data persistence in iOS apps using the user defaults singleton, saving text with a key and loading it on restart to prepopulate the text field.
Learn to persist data on iOS by using FileManager to access the documents directory, save text as data using UTF-8, and load it back into the UI with URL handling.
Build a three-view reminders app with a list showing title, date, and a completion circle; add, edit, and delete reminders; and view the earliest-date featured reminder, all while persisting data.
define the model by creating a reminder with a title, date, and is completed, then build a reminder service to manage the list with create, get, toggle, and delete.
Learn to design an iOS app interface using storyboard, with a tab bar and navigation controller, a reminders list in a table view, and an add/edit reminder flow via segues.
Create a reminders view controller with a reminder cell, exposing title, date, and completion outlets. Format the date with a date formatter and display reminders from a singleton service.
Build the favorite reminder view controller and update its title and date labels in viewWillAppear by fetching the earliest reminder from the shared reminders service.
Create and wire a new reminder view controller in a storyboard, add outlets and actions, save reminders to a singleton service, and refresh the list with a table view update.
Toggle reminders by tapping a circular status indicator that turns green when completed and white when not, using layer properties for border, corner radius, and dynamic sizing.
Enable deleting reminders by toggling the table view editing mode with the bar button, and delete a row using commit editing style to remove the reminder.
Master passing information between iOS view controllers using segues and a reminder index, enabling edit or create flows via prepare for segue and a shared reminder service.
Implement data persistence in a reminders app by saving and loading a reminders array via a singleton service, using JSON encoding/decoding to the documents directory.
This course is carefully designed to take someone with either no programming or iOS experience, and teach them exactly what it takes to build an app. You'll learn how to build modern iOS apps by building the core features of two iconic apps of our time: Lyft and Spotify.
I've taken the best of my material and experience of 5+ years of teaching at University of Southern California and General Assembly, and packaging it together in this course, just for you.
UIKit vs SwiftUI
This course will be covering UIKit over SwiftUI for several reasons:
UIKit is undeniably the predominate framework used by Fortune 500 and tech companies. If you're looking for an iOS career or you're working with an existing codebase, virtually all of these iOS apps will be UIKit driven. We are comparing a technology with over a decade of history (UIKit) vs one that was introduced in less than a year (SwiftUI).
SwiftUI has a steeper learning curve, less documentation, and significantly smaller community size. Apple’s SwiftUI documentation is limited at best. Many developers have been writing books, articles, and tutorials on SwiftUI. But at this time, everyone is a beginner and no one is an expert. There’s much less SwiftUI learning material and much more open issues / unanswered questions than UIKit.
SwiftUI needs much more time to mature. From interviewing iOS engineers I know who's worked directly with SwiftUI at production level, it isn't a technology that's ready for primetime and has several limitations (i.e. limited catalogue of view components, no custom view extensions, etc.). This takes time for Apple engineers to introduce updates and bug fixes.
SwiftUI is currently at a place where it's not easy for beginners, and not ready for professionals. For those reasons, this course offers a much more widely used, stable, and easier to develop with technology.
Zero Risk
This course comes with a full 30 day money-back guarantee. Meaning if you are not completely satisfied with the course or your progress, simply let me know and I’ll refund you 100%, every last penny no questions asked.
You either end up with iOS skills, go on to develop great apps and potentially make an awesome career for yourself, or you try the course and simply get all your money back if you don’t like it…
Ready to get started?
Enroll now using the “Add to Cart” button on the right, and get started on your way to creative, advanced Java brilliance. Or, take this course for a free spin using the preview feature, so you know you’re 100% certain this course is for you.