A shot of to go with your morning coffee.

Curious? Get 3 great screencasts FREE.

Xom Venmo Tb Eyefi Twg Medium

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

Video Training for iOS Developers

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.

  • Quality content This isn't Youtube. Each screencast is carefully produced in HD quality.
  • Team Plans Get access for your whole team. NSScreencast makes for great lunch & learns.
  • Any Device Stream on the web, or use one of our apps for  tv, iPhone, and iPad.
Stay up to date!

Founded in 2012, NSScreencast has been releasing a new screencast each week for more than 6 years. With short videos you can learn a lot over time without a huge time commitment.

NSScreencast offers the largest collection of iOS development screencasts on the internet. With the range of videos that NSScreencast offers, there is something for people of every skill level.

Bite-sized screencasts on iOS and Mac development.

327 testing ios apps intro
Running your tests in Xcode Playgrounds can be a great way to get rapid feedback on your changes. It is a useful way of practicing testing and experimenting with APIs that you are not familiar with. In this episode we will see how to run the test suite and how to enhance the feedback we get by observing the test results as they are run.
327 testing ios apps intro
If you did not check the box "Include Unit Tests" when first creating your project (or perhaps you want to add a separate testing target), this screencast will show the steps of how to get it set up from scratch. It also covers how to set up a scheme dedicated to building your tests, and choosing which tests to run automatically.
327 testing ios apps intro
XCTest is a test framework built into Xcode. In this episode we'll see the mechanics of how this works, how your test bundle sits alongside your app in Xcode. We'll look at the structure of test cases, and the assertions we will use to verify behavior of our code.
327 testing ios apps intro
Introduction to the Testing iOS Applications series
326 swift 4 keypaths
Swift 4 key paths allow us to refer to properties of Swift types in a dynamic way, enabling us to program against them without knowing the exact property in question. In this episode we will see how they are created, how they are used, and see examples of them in action with Key-Value Observing and Autolayout.
325 new mac setup xcode
In this episode we setup our Xcode preferences and themes.
324 new mac setup ruby dev
In this episode we install homebrew, a popular package manager. We use it to install Macvim and ruby. We also setup Postgres with Postgresapp.
323 new mac setup git ssh
In this episode we configure git to identify our commits, set up a diffing & merging tool, and configure SSH so we can log into other machines securely.
322 new mac setup iterm keyboard
In this episode we configure iTerm’s keyboard behavior to match macOS to allow for quick jumping between words in the terminal.
321 new mac setup dotfiles
In this episode, we set up our dotfiles to customize aspects of bash, git, vim, and other terminal programs that are core to a good terminal experience.
320 fastlane boarding
Managing external beta users can be a bit of a chore, as you have to log into iTunes Connect and add them one by one (or a batch if you have them collected already). If you’re opening your beta to a wider audience, you can save a lot of time by automating it. In this episode we will use Fastlane Boarding to automate adding testers to Testflight.
319 new mac setup terminal
In this episode we will setup iTerm2, profiles, custom color schemes, and fonts.
318 setting up mac
In this episode we look at some of the basic system preferences on macOS High Sierra. We set up the Dock, Keyboard shortcuts, and show how to customize key repeat timing outside of the preferences window.
317 preheating images with nuke
The prefetch APIs for UITableView and UICollectionView are great for preemptively loading pages of data, as we saw in episode 315. However, to take full advantage of this API we should also leverage loading or processing data related to the cells we are about to show. One common example of this is fetching an image before the cell comes on screen. In this episode we will implement this with a handy library called Nuke. The result is quite impressive.
316 solid dip
In this episode we cover the dependency inversion principle, which states that high level components should not depend on low level components, but instead they both should depend on abstractions. We will look at two examples of this and leverage dependency injection to decouple classes from concrete dependencies.
315 uitableview prefetching
Extending our example from episode 309, here we implement automatic tableview paging support by utilizing the UITableViewDatasourcePrefetching protocol. With this protocol, our delegate is notified of upcoming rows the user is about to encounter, and gives us an opportunity to preemptively load data for those rows.
314 solid interface segregation
In this episode we examine ISP (the Interface Segregation Principle). This one states that a type should not depend on methods from an interface that it will never use. Often times this means that the type probably carries too many responsibilities, but breaking it apart is difficult for other reasons (perhaps too many things depend on it and changing it would be expensive). You can extract smaller interfaces that support the individual responsibilities, but still have the same class adopt it. Doing so opens up opportunities for further refactoring and testing.
313 solid lsp
In this episode we examine the Liskov Subtitution Principle, which stresses the importance of the strong relationship a type has with its super type. Understanding LSP can help you identify when you are missing an important abstraction, or perhaps when inheritance is being abused as a tool.
312 solid ocp
The Open Closed Principle (or OCP) states that a class should be open for extension, but closed for modification. The goal is to write classes that are more stable, and don't require constant changes themselves to support every scenario the software encounters. Instead, having a stable class to inherit from can provide a nice extension point for our software to customize it for other needs.
311 solid srp
In this episode we'll examine a type that has too many responsibilities and refactor it into multiple types, each with their own responsibility.
This episodes kicks off a new series on SOLID principles for improving at object-oriented design. Writing better code means writing code that costs less to change, which can be a crucial factor in delivering project successfully. In this series we will see how these principles apply to Swift.
309 automatic uitableview paging
UITableView can support scrolling through many rows of data, however fetching large amounts of remote data can slow down your app, use up too much memory, and bog down your web server. This is all wasteful if users aren‘t ever going to scroll down that far. In this episode you‘ll learn how to perform automatic UITableView paging using an easy technique.
308 managing secrets
Our applications often depend on 3rd party services that require API tokens, Client IDs & Secrets, Passwords and other sensitive data. This data should not be checked into your source repository for numerous reasons. Having control over who has access to keys is important, especially for larger organizations. In this episode I will show you one technique for managing these keys without having to check them into git.
306 codable caching
In this episode we continue with our caching example, this time introducing a new type that will handle the caching for us, as well as wrapping the response type into a new type that will indicate to the view controller if the response was served from the cache or from the network. We end the episode by implementing Equatable so that our store can avoid needless double callbacks if the data has not changed.