A podcast by iOS developers for iOS developers, delivering news, tips, and rants for professional iOS/Mac developers, with something for enterprise and indie developers alike. Hosted by Darryl Thomas & John Sextro.
…
continue reading
NSScreencast features weekly bite-sized videso on iOS development. This free feed is just a sample of what is available for members. Subscribe today at https://nsscreencast.com.
…
continue reading
In this episode we tackle showing a list of posts, which requires us to convert the network models into models more fit for the UI, parsing HTML in order to display as an AttributedString, and displaying the author information.
…
continue reading
Sometimes we run into issues where SwiftUI doesn't quite do what we need. In some cases, SwiftUI views are powered by UIKit under the hood. Wouldn't it be great (and devious) to dig into the underlying UIKit views to customize things when vanilla SwiftUI just won't cut it? In this episode we'll look at a technique for discovering the UIKit undernea…
…
continue reading
One of the most impactful things you can do to improve productivity is to improve turnaround time when iterating on features. Playgrounds and Xcode Live Previews are great, but both have their limitations. In this episode we will explore how to utilize hot module reloading to have the simulator automatically reflect your changes when you save. It's…
…
continue reading
One way of achieving modularization is to build frameworks using nested Xcode projects. This has the benefit of having everything in one place and can easily build the entire thing. You can also zero-in on a single project and just work from there if you want. Each sub-project can have its own tests, sample application, etc.…
…
continue reading
In this episode we will talk about the overview and motivation for a modular project architecture. Why split things up? I'll talk about the problems we face, what benefits we may achieve, and how can we approach the problem.
…
continue reading
One of my favorite new features of Xcode 13 is support for Vim key bindings. In this episode we will see how to enable this and I'll give a quick tour of how to get around using Vim.
…
continue reading
In the next few episodes we will explore the concept of Protocol Witnesses. This is an advanced topic that can be somewhat hard to approach, but in learning about Protocol Witnesses you will see how we can leverage the Swift language and functional programming to do some really cool things.
…
continue reading
Context menus are a great affordance for performing related actions to a UI element. Users can tap and hold to view the context menu, and the gesture is consistent across the OS so users will likely already be familiar with it. In this episode we'll show how to set up a basic context menu with a custom preview with normal and destructive actions.…
…
continue reading
This is a discussion and code overview of another implementation of mapping models using key paths with a special guest, Antoine van der Lee! In this episode we talk about his initial goals and constraints, and some of the design tradeoffs he made while designing a solution that would give him a bidirectional mapping between Core Data entities and …
…
continue reading
First introduced in iOS 13, UICollectionViewCompositionalLayout is an amazing and powerful addition that gives you lots of flexibility when describing layouts. There are a few new types to get used to (namely sections, groups, and items) but they all work together allowing you to keep layout separate from your views and your data.…
…
continue reading
In this episode we review the basic example app and start setting up our collection view in code. We start with the basic flow layout which is most common. Later we'll refactor this to use the newer style, but this episode introduces the series and sets up the foundation we'll build upon.
…
continue reading
In this episode we migrate our collection view to use the new cell registration API. Using this API we no longer need to cast dequeued cell types to our custom types. Instead, we set up the registration object with the cell type and the data we'll be passing to each cell. This further reduces the code we have to write in our datasource implementati…
…
continue reading
With UITableView no longer being encouraged for use, we need to replace this behavior with UICollectionView. This is where UICollectionViewListLayout comes into play. Using this layout we can get the familiar table view appearance in plain and grouped styles (as well as additional styles to support sidebars on iPad and macOS). This includes support…
…
continue reading
I've been working on rendering waveforms using mathematical functions and have found the experience to be both fun and enlightening. In this episode we will develop a method to render arbitrary functions using a Shape, then explore some mathematical concepts that can help us render a nice looking waveform that could be use to indicate activity in s…
…
continue reading
With the introduction of LazyVGrid and LazyHGrid In iOS 14 we now have access to much more powerful grid-based layouts in SwiftUI. In this episode We will examine the different types of layouts we can accomplish with flexible, fixed, and adaptive sizing for our rows and columns. We'll look at how animations work between different layouts, and how t…
…
continue reading
A few episodes back we covered how to wrap a UIActivityIndicatorView to show loading progress in SwiftUI. Now in iOS 14 this is built in. In this episode we'll cover the various styles, how to hook it up to a Progress instance, and how to create your own custom progress visualizations.
…
continue reading
iOS 14 Beta is now available and one of the new features is Lazy stacks. With a normal stack, all the layout happened at once, which meant poor performance for large lists of content, grids, etc. With Lazy stacks the views are only created when they first come on screen, greatly increasing the usefulness of stacks for large or infinite collections …
…
continue reading
Before Swift 5 we used to write our own Result type to contain a value or an error (but never both). A lot of 3rd party libraries brought along their own as well. Then Swift 5 came and brought us Result. Not only is it slightly different than the ones we might be familiar with, Swift's Result type also has some useful functionality up its sleeve.…
…
continue reading
Sometimes we need to create variants of our icons. This can be done by using template images and using a UIImageView with a tintColor change, however sometimes this isn't feasible. We can use our icons along with a mask to create new images of whatever color we want. In this episode we'll use UIGraphicsImageRenderer to quickly draw a new dimmed ima…
…
continue reading
Attaching gestures works quite a bit differently in SwiftUI than in UIKit. In this episode we will look at the @DragGesture property wrapper and how we can use gestures to update custom state that we can then use to transform our UI.
…
continue reading
SwiftUI's declarative nature makes building UIs incredibly easy. In this episode we will build a wallet UI with cards. We will create a CardView so we can reuse it in multiple places. Then we will use transforms to alter it's size and position. Finally we will see how declarative animations work as we expand the cards apart.…
…
continue reading
Now that we've seen a taste of SwiftUI, let's dive into a real example and build an app. We'll have a first look at @State variables we can use to creating a binding between our state and our UI, and we'll run into a few puzzling errors and see how we can coax Xcode into giving us the right error message.…
…
continue reading
Back from WWDC 19 and blown away by the announcements. There's a lot to cover, but we'll start by digging into the most exciting announcement: SwiftUI. This is going to change everything...
…
continue reading
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…
…
continue reading
In this episode we configure our iOS app to receive push notifications, adding the OneSignal SDK to our project, configuring the Notification Service extension, and testing it out on a real device.
…
continue reading
In this episode we look at how to generate a certification for adding push notification support for your app, using OneSignal as our push notification provider
…
continue reading
In this episode we will setup iTerm2, profiles, custom color schemes, and fonts.
…
continue reading
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.
…
continue reading
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 pagination using an easy t…
…
continue reading
In order to use CloudKit to read or write private data (or to write in the public database) the user will have to be signed in to iCloud on their device. If they are not, they'll not have a great experience, and things won't work. In this episode we'll check the account status before trying to save a record in CloudKit. We'll also respond to the no…
…
continue reading
The first episode in a new series on CloudKit, here we see how to setup our project to use CloudKit as well as how to create and save our first record.
…
continue reading
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.
…
continue reading
Thanks to all of our listeners, sponsors, former guests and hosts and to Dan and Haddie and the rest of the 5by5 network. This will be our last episode. We hope you've enjoyed the series as much as we've enjoyed producing it.By Darryl Thomas & John Sextro
…
continue reading
Discussion: tvOS Development with special guest Mark Sands Recreating the Parallax effect 3D transform Sheen (Glossy effect) Shadow Wobble Top Shelf Extension on tvOS Open Source project Re:Lax on GitHub CAR Files Compiled asset catalog Theme Engine from Alex CAR file inspector Bill of Materials Tree graph structure Folklore.org Stories from Andy H…
…
continue reading
Discussion: Your App Build Pipeline Dependency management Carthage Punic - Clean room implementation of Carthage CocoaPods SPM Build systems CircleCI Travis XCTool from Facebook Xcode Server Are you using it? Let us know @iohyespodcast Darryl's Pick Punic, Clean room implementation of Carthage Brought to you by: Braintree (Visit Braintree.com/yes t…
…
continue reading
Discussion: Energy Profiler For more info see Ep. 104, Power Struggles Apple really wants us to be good citizens of the battery. Apps that quickly drain the battery will be shunned by users Remember the Facebook background audio “bug” (some say ploy to allow the fb app to stay alive in background) “App as patient” metaphor iOS Energy Gauge / Energy…
…
continue reading
Discussion: Time Profiler But first: a brief rundown of the Instruments UI Toolbar Record/Stop Pause Target Selection Status display Strategy Selection CPU data Instrument data Thread data Detail/inspector toggles Timeline Plots data along the time your app was sampled Can be filtered and zoomed Disclosure arrow can toggle display of just the curre…
…
continue reading
Discussion - Allocations and Leaks instruments Extraordinarily hard to spot Tough to find offending code without help from tools Unbounded Memory Growth (memory growth without a chance to collect (deallocate) memory True Leaks (retain cycles) Allocations Generation Analysis Tracks allocations still resident when the generation is marked - As you do…
…
continue reading
Discussion - Notifications in iOS 10 Brief breakdown of WWDC sessions related to notifications What’s New in the Apple Push Notification Service Introduction to Notifications Advanced Notifications New stuff APNS Token-based authentication UserNotifications (and UserNotificationsUI) Framework (Unifies Remote and Local Notifications) Access to user-…
…
continue reading
John and Darryl recap and grade their WWDC wish-lists and discuss changes to the Human Interface Guidelines for iOS. WWDC Wishlist Scorecard John Get serious about home automation, maybe make Apple TV an automation hub (Half Credit) Siri as a Service (3rd party integration) (Yes) Refactoring for Swift (in Xcode) (No) Announce date to sunset Obj-C (…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
112: Wonderful Whisky Drinking Chat 2016
3:18:00
3:18:00
Play later
Play later
Lists
Like
Liked
3:18:00
Darryl and Nolan are joined by Amro Mousa and Matt Massicotte to discuss the WWDC 2016 Keynote and Developer State of the Union. Also, Whisky. The Whiskies Mars Iwai Tradition Japanese Whisky Amrut Fusion Single Malt Whisky Laphroaig Single Malt Whisky - 10 Year Keynote Pre-keynote observation Hated the music Apple TV Events app worked fine Tim tak…
…
continue reading
Discussion - WWDC Wish List John Get serious about home automation, maybe make Apple TV an automation hub Siri as a Service (3rd party integration) Refactoring for Swift (in Xcode) Announce date to sunset Obj-C Xcode for iPad Pro Darryl More voice command vocabulary. Something like AppleScript dictionaries? Make Buttons Great Again Better accessibi…
…
continue reading
Discussion Swift 3.0 To be available later this year * [Winding Down the Swift 3 release - Chris Lattner](http://thread.gmane.org/gmane.comp.lang.swift.evolution/17276) * New “blue sky” proposals will be considered for post-3.0 development (~August) * Generics features (among other dependencies) are preventing the previously-planned ABI stability *…
…
continue reading
Discussion Buglife Buglife.com What is it? What was the motivation? How do we incorporate it into our apps? Pricing Core product is free Planned introduction of paid plans for enterprise teams How did you arrive at this strategy? Who did the voiceover for your demo video? Fiverr.com Creating a 3rd-party service and framework for iOS apps You’re not…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
108: Peeling the Onion on Networking
1:15:35
1:15:35
Play later
Play later
Lists
Like
Liked
1:15:35
Discussion Testing normal networks (aka, not the US) 62.5% of the world’s 3.2 Billion internet users have 2G connections (or worse). That number is growing. LTE speeds aren’t going to catch up for at least a decade if not much longer. When building robust networking between your client apps and your services, the common case should be the default c…
…
continue reading
Discussion Auto Layout Stack Views, FTW (Auto Layout without constraints) (New in iOS 9, similar to what’s available in watchOS and NSStackView, which is available from OS X 10.9) UILayoutGuide New in iOS 9 Defines a rectangular geometry that can interact with Auto Layout Eliminates the need (in many cases, at least) for views that are included sol…
…
continue reading
Discussion Push Notification Overview Notifications Intended for user Certificate required Can be disabled Remote vs. Local Local - schedule by the app on device Best example is Reminders app Schedule by elapsed time or exact time location based Remote - come from your server Actions Interactive Notifications Categories Text Input New type of “Acti…
…
continue reading
Motivation / Staying Productive Flow Mihaly Csikszentmihalyi Flow theory postulates three conditions that have to be met to achieve a flow state: One must be involved in an activity with a clear set of goals and progress. This adds direction and structure to the task. The task at hand must have clear and immediate feedback. This helps the person ne…
…
continue reading
Discussion - Energy Efficiency for iOS Apps Apple’s Energy Efficiency Guide Are you telling me I have to worry about my app’s power consumption? This is iOS. I thought Apple was taking care of that for me...right?? What is Energy? Power is an instantaneous measurement of energy at any given point in time Energy is power used over time (Joules measu…
…
continue reading
Discussion Pushing info to clients Long Polling Client sends request to server, waits for response or timeouts (Loop) Can send and receive information, but not full-duplex iOS Implementation NSURLConnection sendSynchronousRequest Common uses Fallback from Websockets and SSE when streams are unreliable or impractical HTTP Streams Can only push infor…
…
continue reading