Speaking
Presentations
Talks and materials on Swift, SwiftUI, concurrency, architecture, cryptography, algorithms, and practical app development.
Swift Concurrency: Are We There Yet?
Slides (PDF) – Slides (Keynote) – Presentation (Vimeo)
Date: 2024-06-12 Location: One More Thing Conference (Cupertino, CA)
This talk covers the history and evolution of Swift Concurrency, practical guidance for modern concurrency constructs, and the state of Swift Concurrency today. It looks at what is working well across different codebase sizes, what improvements are coming with Swift 6, and what is still missing for broader adoption. It also covers strategies for using concurrency effectively with Apple frameworks such as SwiftUI.
Building with SwiftUI and Concurrency
Slides (Keynote) – Project (GitHub)
Date: 2022-05-25 Location: Underdog Devs Xcoders
When SwiftUI was released in 2019, it was launched alongside a declarative framework for processing values over time: Combine. However, in 2021 we gained access to all-new language features such as async/await that can describe asynchronous and concurrent operations using more synchronous-looking and structured patterns. In this presentation, I walk through building a simple game of Simon using SwiftUI and Swift Concurrency to drive asynchronous state changes.
SwiftUI: Understanding State
Date: 2022-04-28 Location: Underdog Devs Xcoders
SwiftUI changes the way that developers handle state management by introducing easy ways to create, update, and react to state. However, there are many details about handling SwiftUI state, its various property wrappers, and how to best structure Views and ObservableObjects that aren’t so obvious or intuitive. In this presentation, I cover techniques such as substate, avoiding unnecessary view redraws, creating container views, and more.
Modern UICollectionViews
Date: 2022-02-24 Location: Underdog Devs Xcoders
UICollectionView has evolved rapidly over the last few years. Apple has been enhancing this UIKit API to enable creating powerful, dynamic user interfaces through the addition of compositional layouts, diffable data sources, and even a new list style to replicate the look and feel of table views. This presentation covers those newer APIs and how they can make UICollectionView code more flexible, modern, and easier to reason about.
Swift Scripting
Project (MyLibrary.zip) – ShellProcess (GitHub) – Slides (Keynote)
Date: 2022-01-20 Location: Underdog Devs Xcoders
The Swift programming language can be used for many different types of jobs, but lightweight scripting is often overlooked. In this presentation we’ll go through how to use Swift for scripting, how to build some simple wrappers to make scripting easier to work with, and briefly talk about some tools to make more advanced Swift scripting straightforward.
Building Tic-Tac-Toe with SwiftUI
Date: 2021-04-19 Location: Underdog Devs: Spring Into Swift
Build a simple Tic-Tac-Toe game in SwiftUI to understand how views are constructed, how navigation works, and how logic can be encapsulated. This presentation also looks at how state drives SwiftUI rendering and why single sources of truth matter.
How to Make a Living Creating Mobile Apps
Date: 2021-04-05 Location: Underdog Devs: Spring Into Swift
Get a peek into one developer’s journey and some advice about the learning process, what aspiring iOS developers should focus on, and what steps can help with getting a first job. Of course, these are all just my opinions!
View Controller Composition
Date: 2020-02-19 Location: iOS Orlando
Architecture in iOS has been a hot topic as of late and most of the proposed solutions aim to reduce the problem of “Massive View Controllers” (i.e. having view controllers take on too many responsibilities). One way to help avoid this problem is to utilize view controller composition: separating larger view controllers into smaller child view controllers. I discuss the “Massive View Controller” problem, give an overview of a few solutions, and show how to transform a large view controller into a container made up of smaller child view controllers.
Programmatic UIKit Basics
Date: 2020-01-15 Location: iOS Orlando
SwiftUI is not the only way to create UI in code. In this presentation, I show how to create a fully programmatic UI using UIKit and iOS 13. The talk covers configuring a new Xcode project without Interface Builder or storyboards, setting up iOS 13’s SceneDelegate with a programmatic root view controller, building views in UIViewController, and the advantages of programmatic UIKit by taking a small to-do list app from “New Project” to working prototype.
Combine in Action
Date: 2019-11-20 Location: iOS Orlando
Combine, Apple’s new declarative framework that (at least in part) powers SwiftUI, can be used for many things outside of user interface development. I take a look at how Combine can work with some of Foundation’s most-used APIs: Timer, NotificationCenter, and URLSession. We’ll see how some of these new uses compare to their imperative counterparts and explore the power that comes from using these APIs in new declarative approaches.
Tiny SwiftUI (on watchOS)
Date: 2019-10-16 Location: iOS Orlando
While a lot of the attention around SwiftUI naturally focused on iOS, this talk looks at how SwiftUI can be used to make a watchOS app as well. It explores differences between SwiftUI on iOS and watchOS, the challenges that still remained with watchOS UI development, how SwiftUI compares to WatchKit, and watchOS-specific details such as using the Digital Crown.
Apple CryptoKit: Encryption and Keys and Signatures, Oh My!
Project (CryptoKit.playground) – Slides (Keynote)
Date: 2019-09-18 Location: iOS Orlando
This talk takes a quick look at Apple’s CryptoKit framework, introduced with macOS 10.15 Catalina, iOS 13, watchOS 6, and tvOS 13. It walks through hashing, authenticating data, encrypting data, verifying signatures, and public-key cryptography using Apple’s Swift API.
Swift Package Manager
Date: 2019-08-21 Location: iOS Orlando
This talk explores Swift Package Manager: how it works, its Xcode 11 integration, how it differs from third-party tools such as CocoaPods and Carthage, how to start using it in your projects, and how to make your own Swift package.
Swifty Algorithms - Merge Sort
Project (MergeSort.swift) – Slides (Keynote)
Date: 2019-06-19 Location: iOS Orlando
This talk codes through a divide and conquer algorithm classic: merge sort. This algorithm sorts through an array by dividing it into smaller arrays that are to be sorted and then eventually merged back together. We will also explore Swift’s amazing generics capabilities to make the sorting algorithm really powerful!
Swifty Algorithms - Minimum Coin Change
Project (MinimumCoinChange.swift)
Date: 2019-04-17 Location: iOS Orlando
This talk takes a look at the minimum coin change problem: given any amount of requested change, find the fewest coins needed to fulfill the request. It starts with a straightforward greedy algorithm, then moves to a dynamic programming solution that can work for any set of coin denominations.
Swifty Algorithms - Radix Sort
Project (RadixSort.swift) – Slides (Keynote)
Date: 2019-03-20 Location: iOS Orlando
This talk steps through radix sort, a lesser-known non-comparative sorting algorithm.
Swifty Algorithms - Fibonacci
Date: 2019-02-20 Location: iOS Orlando
Dive into writing algorithms and data structures using our favorite programming language: Swift! In this short presentation, I code through a problem by starting with a straightforward implementation and iterating on it until it becomes more efficient and more Swifty; no computer science background required. To kick things off we are starting with a classic: the Fibonacci sequence.
What’s New in Swift 5.0?
Slides (PDF) – Slides (Keynote)
Date: 2019-01-23 Location: iOS Orlando
Swift is constantly evolving which means Swift developers should be constantly learning! This talk covers the changes that were coming in Swift 5.0, ABI stability, Swift Evolution, and how to get started early with Swift 5.0 using snapshot builds.