Logomark
Top-notch video tutorials for developers.

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 We stress the details. 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.
Keep up with iOS Development

NSScreencast has been releasing a new screencasts regularly 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.

Displaying Episode 25 - 48 of 406 in total
lock
#382
We start from a blank project template, then add our first storyboard and tab bar controller. We also introduce a mechanism for skinning the app with a Theme type.
lock
#381
We’re kicking off a brand new series on building a podcast app from scratch. Along the way we’ll deal with implementing some custom UI, transitions, networking, local persistence, and of course audio playback.
lock
#380
In this episode we export the assets used in our Sketch design in a format we can use in an Xcode project. Using the Make Exportable button, we can easily export known sizes or size multiples (like 2x and 3x) and have them output as PNG files.
lock
#379
In this episode we take a look at the prototyping features of Sketch that allows you to link artboards together with transitions, then preview the app on an mobile-sized window. This can be a valuable tool in your arsenal when working with clients to convey ideas, nail down the navigation and flow of an application, which is something difficult to communicate with static pictures alone.
lock
#378
In this episode we design the "player bar" which will be a persistent view above the tab bar that we can use to control playback or get back to the play from anywhere else in the app.
lock
#377
In this episode we design the player screen, and talk about how to create a color system for overriding colors for buttons and other UI elements.
lock
#376
In this episode we design a Podcast detail screen, that displays the show’s artwork, name, publisher, category, and a list of episode. We also consider what this screen looks like if you’ve already subscribed.
lock
#375
We continue our design of a Podcast app in Sketch. This time we focus on designing a Search screen, complete with table view cells and keyboards. We'll see how to use masks to round the corners of an image and easily duplicate and offset content.
lock
#374
In this episode I start designing a new Podcast App. I decided to design it in Sketch first so I could define the look & feel, flow, and data required first. In this episode we start by leveraging Sketch's iOS Design Library, then customize them by creating our own symbols. We end up with a custom themed iOS design that uses a tab bar with custom icons.
lock
#373
Taking input from a request body in order to update or create a record is extremely easy with Vapor. In this episode we will update our create and update routes for Projects and take in JSON input from the request in order to modify Projects. We also talk about decoupling the request model from our actual model to prevent updating certain internal attributes from being modified.
lock
#372
So far in this series we have been adding all of our routes to the routes.swift file. You can see that this would get unwieldy over time. In this episode we will use RouteCollections to build controllers so that we can organize the routes around the Projects resource. We’ll conform our Project type to the Parameter protocol to make loading models from a route parameter extremely simple, and we will leverage the Content protocol to have the results serialized to JSON automatically.
lock
#371
When you have a many-to-many relationship you typically rely on a join table, or what Vapor calls a Pivot table to relate the records together. In this episode we will create a relationship to allow an issue to have many tags, and also allow a tag to apply to many issues. We'll see how we can use Vapor's ModifiablePivot and Sibling types to make working with these relationships easier.
lock
#370
We continue our mini-project to create a Swift script that automatically creates migrations for Vapor projects. In this episode we save the generated templates to disk, render a generated extension so that we can add these migration types to the Vapor service, and see the example running end-to-end.
lock
#369
Our Project and Issue models currently aren't connected in any way. In this episode we will add a foreign key to the projects table and add the parent/child relationships the models so that we can query for issues belonging to a project.
lock
#368
Usually I lean on Ruby or Bash for writing command line scripts, but it is becoming increasingly more viable to use Swift for this as well. In the Vapor series, I wanted to write a little script (in Swift) that would generate migration files for me so I wouldn’t have to maintain this myself. For this, I used the Marathon tool, which helps alleviate some of the machinery necessary to use Swift in this way. And what better way to explore this tool than with this author guiding me along. John Sundell joins me in this episode to use Marathon and Swift to write a useful script for Vapor applications. This is a longer episode, so it is split into two parts. Enjoy!
Shape
#367
Working with dates is a task that is universally applicable to Swift developers. Particularly when dealing with an API, dates can arrive in all shapes and sizes. We‘ll examine some of the common ones such as ISO 8601, show how to parse these formats into Date instances, and how to use DateFormatter to display them back again as a string. We‘ll also cover the importance of using en_US_POSIX and honoring the user‘s Locale when displaying dates.
lock
#366
Sometimes when using a functional style to iterate and transform data we can inadvertently make the performance and memory usage much worse. In this episode we will see how we can take a standard procedural iteration, convert it to a functional style, and then utilize lazy to avoid some of the pitfalls that we sometimes run into.
lock
#365
In the last 2 episodes we added some behavior to add automatically managed timestamp fields and some fairly complex logic to set up UUID primary keys the way we want. Now if we want to share those, or make them the default for our models, we currently have to copy & paste. In this episode we will refactor this logic into reusable protocols so that our work can be applied on any model we wish easily.
lock
#364
If you want to track when records are created and modified, you can add some fields to your model and Fluent will automatically manage them for you. You just have to take care to define your TimestampKey properties carefully so they match what Fluent expects.
lock
#363
In this episode we look at customizing the table and columns that Fluent creates for us. In addition to customizing our column data types, we'll also have to lean on an extension of Postgres to generate UUID values for us. We'll see how to customize some of the column constraints to suit our needs, and then create a development route to test it all out.
lock
#362
In this episode we set up a new Vapor application to use Postgresql as the database. We'll see how to configure FluentPostgreSQL, how to create and set up a connection to the database, and look at the defaults for PostgresSQLModel. We'll also discuss the pros and cons of using UUID primary keys over auto-incrementing integers.
lock
#361
We continue building out our little promise library, this time adding an ensure method, refactoring how we call the callback blocks, and fix a race condition issue by triggering callbacks even if the value has already been provided.
lock
#360
Promises are a useful way of turning async code and writing it as if it were synchronous. In this episode we'll create a promise library from scratch so we can see how they work under the hood.
lock
#359
In this episode we take a deeper look at one of the fundamental building blocks that support Vapor's asynchronous programming model: Futures. Understanding Futures is really important to understand when writing Vapor applications.