Top-notch video tutorials for Swift developers

Thousands of developers use NSScreencast to stay on top of iOS development.

ExxonMobil
Venmo
Thoughtbot
The Working Group
Medium

Updated Regularly

Bite-sized videos on iOS development.

The iOS landscape is large and changes often. With short, bite-sized videos released on a steady schedule, NSScreencast helps keep you continually up to date.

Up to date with Xcode 15 and iOS 17

We cover the latest and greatest to get you up to speed quickly.

UIKit, SwiftUI, SwiftData, and macOS

In our catalog you'll find a wide variety of topics and UI frameworks.

Swift Language

Increase your knowledge of the Swift language and take advantage of new Swift language features as they are developed.

High Quality Videos

We stress the details. Each screencast is carefully produced in HD quality.

Short and Focused

We don't want to waste your time. Most videos are between 10 and 20 minutes long.

Any Device

Stream on the web or use our native apps for iOS or the tv.

Team Plans

Get NSScreencast for your whole team. Discounts start at 5 seats
Steven Tolton

Have I mentioned lately how awesome NSScreencast is? No? Worth the subscription. Check it out if you’re an iOS developer. Or even if you’re not and you want an example of how to do coding screencasts well.

Foster Bass

Got tired of dead-end googling so I checked to see if @NSScreencast had covered what I was looking for. Of course he had, 4 years ago. Should have checked there first.

Aijaz Ansari

One 13-minute episode of @NSScreencast just paid for the yearly subscription fee in amount of time saved. Do it.

Sam Soffes

Seriously great stuff even for seasoned developers. I’ve learned a good amount from Ben’s videos.

James Dempsey

You can really expand your development horizons in just a few minutes a week with NSScreencast.

Alexis Gallagher

Random PSA for iOS developers: @NSScreencast is a great resource, and worth every penny. It’s high quality, practical, and honest.

Nate Armstrong

Can’t say enough good things about @NSScreencast There is gold in the Road Trip DJ Series.

Karl Oscar Weber

I just reuppped my subscription to @NSScreencast. [An] indespensible resource if you’re into iOS or Mac Development.

Marcus Ziadé

Just finished @NSScreencast series on Modern CollectionViews. Strongly recommended. Programmatic UI, nicely structured code, easily approachable explanation style. 👌

Showing episodes 337 - 360 of 585 in total
  • Poker Hands - Part 2

    #249

    Poker Hands Kata

    In this episode I am joined again by Soroush Khanlou. We continue our exploration of the Poker Hands kata, focusing on fleshing out our types. We also begin matching poker hands, leveraging enums with associated types.

  • Poker Hands - Part 1

    #248

    Poker Hands Kata

    In this episode I am joined by Soroush Khanlou. Together we pair up to implement the Poker Hands Kata. We start off by parsing the raw string input into structured types, complete with tests.

  • Yahtzee Kata

    #247

    In this episode we will implement the Yahtzee Kata, which entails scoring hands based on dice rolls. We'll look at leveraging protocols and protocol extensions to mix & match shared behaviors across disparate types in order to perform matching and scoring of the dice.

  • Improved Guard Setup for Swift

    #246

    In the last episode we showed how to run Swift tests automatically with guard, but it wasn't an ideal setup. We couldn't see compiler errors, nor could we see any output from our program using print. In this episode we leverage Ruby's open3 library to capture stdout and stderr so we can output it to the terminal in the appropriate colors.

  • Fizz Buzz Kata

    #245

    Code Katas are interesting challenges that can help you practice programming. Some are extremely difficult and others are fairly easy, but they all allow us to exercise the act of programming. Doing code katas can help you learn a new programming language, a new algorithm, or a new style of programming.In this episode we’ll tackle one of the most trivial katas: FizzBuzz.

  • Logging with Swifty Beaver

    #244

    Logging is an important part of diagnosing issues in our application. Unfortunately, once they've shipped it's difficult to retrieve these logs to help identify issues with our released software. In this episode I'll take a look at SwiftyBeaver, a library that aims to make logging easy and accessible. We'll show how you can separate log messages by severity, selectively log some messages to the Xcode Console, some messages to a file, and sending them encrypted to the SwiftBeaver cloud platform for viewing with their provided viewer application.

  • Designing a Custom Download Button - Part 2

    #243

    Large File Downloads

    Wrapping up our custom download button, this time we focus on the highlighted image and depressed state of the button, as well as transitioning to and from the progress layer.

  • Designing a Custom Download Button - Part 1

    #242

    Large File Downloads

    In this episode we create a custom control to serve as our download button. We start by creating a circular progress indicator using CAShapeLayer, then move on to subclassing UIControl to provide our image view and touch handling.

  • File Downloads - Part 3

    #241

    Large File Downloads

    In this episode we take the download state and progress notifications and update the user interface to reflect this state. We'll see how to translate the notification into the indexPath for that episode row, and how to fake a change related to the fetched results controller to trigger a reload of the content. We will leverage the RateLimit library to save periodic changes in progress to the model without overwhelming Core Data.

  • File Downloads - Part 2

    #240

    Large File Downloads

    In this episode we create a DownloadInfo model in CoreData in order to track the state of a download, separate from any view controller.

  • File Downloads - Part 1

    #239

    Large File Downloads

    Downloading large files on iOS represents some unique challenges. Downloads should occur in the background, not confined to a particular view controller. They should be able to report progress on multiple screens, and should be robust enough to survive application suspension and failing network conditions, and respect the user's cellular data plan. In this episode we start a series on downloading large files that will cover all of the above concerns.

  • Core Data in iOS 10

    #238

    iOS 10 brings some welcome improvements to Core Data, including the all new NSPersistentContainer class. With this release, Apple has created a streamlined API that captures the most common uses of Core Data in iOS applications. In this episode we'll take a look at NSPersistentContainer, as well as the new code-generation capability in Xcode 8.

  • Swift 3

    #237

    Swift 3 is now out and contains a host of new features and syntax changes. In this episode we'll look at a few of the more common changes you'll run into when upgrade projects to Swift 3 including implicit method argument labels, dropping the NS prefix on a bunch of classes, and the new Swift API naming guidelines.

  • Creating Sticker Pack Applications

    #236

    Now that iOS 10 is out, we can now create sticker packs to use in iMessage. In this episode we'll create a sticker pack using some artwork made by Jory Raphael, the very same designer who makes the lovely artwork you see on each episode. This particular sticker pack will be available soon in the App Store!

  • Working with the Pasteboard

    #235

    In this episode we take a look at UIPasteboard, allowing us to inspect, copy, and paste content on the system pasteboard as well as your own custom pasteboards. We'll also look at adding multiple representations of the same item to be a better OS citizen, for instance by copying rich text alongside plain text.

  • Universal Links

    #234

    Universal Links is a great feature that allows us to render content in an app when a user hits a known URL, instead of opening Safari. For content-based applications, this can be especially useful, as often records that exist on the web also exist in the app. We'll leverage our work from Episode 231 on Shared Web Credentials and extend the demo app to take advantage of Universal Links.

  • SnapKit

    #233

    Writing Autolayout constraints from code can be quite tedious. SnapKit, the Swift-friendly successor to Masonry, is a friendly DSL that allows creating and updating constraints easy and readable. In this episode we use SnapKit to build out a simple interface mockup using Autolayout completely in code.

  • Calculating Spring Velocity

    #232

    UIView has an incredibly useful spring-based animation API, but it can be difficult to know what to use for the damping and initial spring velocity parameters. In this episode, we'll break down how to compute the velocity value using the values we get from our UIPanGestureRecognizer and a little math.

  • Shared Web Credentials

    #231

    In this episode we implement shared web credentials with a server, allowing users to automatically enter credentials in our app if they've already done so in Safari. We cover building a Sinatra app for our server, deployment to Heroku for free SSL and a unique domain, and adding the appropriate entitlements to our app.

  • Interview with David Smith

    #230

    In this episode we have a special guest: "Underscore" David Smith, the creator of Activity++! In this episode we chat about the implementation details of Activity++, and how it differs from the one we've been building.

  • Let's Build Activity++ - Part 7

    #229

    Let's Build Activity++!

    We build our activity streak detection algorithm, testing it along the way with Quick and Nimble.

  • Let's Build Activity++ - Part 6

    #228

    Let's Build Activity++!

    In this episode we allow for generating health data for use in the iOS simulator, where HealthKit data will not be available. We then create some known streaks to make the streak detection and UI decoration easier to test. We end the episode by setting up Quick and Nimble that we will use to test our streak generation algorithm.

  • Let's Build Activity++ - Part 5

    #227

    Let's Build Activity++!

    Continuing our series on building out our Activity++ clone, this time we hook up our application to HealthKit, displaying real data in the app from a device. We continue to use our wrapper type so that the application can still work in the simulator with randomized data, which also allows us to set up certain scenarios that we wish to test, such as streaks.

  • Let's Build Activity++ - Part 4

    #226

    Let's Build Activity++!

    In this episode we examine the scrolling performance of our activity ring views. We see that framerate suffers when scrolling quickly, then apply a few changes to bring scrolling performance back to 60 frames per second.