2024
-
Pulse is on the App Store
Pulse is now officially available on the App Store
-
Swift 6
The challenges of migrating apps and frameworks to Swift 6
-
SwiftPM and Xcode
Xcode integration with SwiftPM and its flaws
2023
2022
-
Pulse 2.0
Logger and network inspector for Apple platforms
-
Introducing CreateAPI
Delightful code generation for OpenAPI specs
2021
-
Web API Client in Swift
Building a modern web API client using Async/Await
-
Best Resources for iOS Engineers
Learning iOS engineering has never been more fun
-
Pulse Pro
Logging experience reimagined
-
Open-Sourcing Pulse
Open-source developer tools
-
LazyImage
Lazy image loading for SwiftUI
-
Client-Side Search
How to build client-side search with lunr.js
-
Nuke Docs
How to build great documentation for a framework
-
The SwiftUI Experiment
Wrapping up the series on Pulse development
-
Time to Log
Designing and implementing Pulse for watchOS
-
Concurrency Done Right
The actor model and other concurrency patterns used in Nuke
-
What's a Document
A quick write-up on selecting a document format for Pulse
-
...But Not NSTableView
Integrating NSTableView with SwiftUI
-
AppKit is Done
Learn how to build delightful macOS apps using only SwiftUI
-
RxUI
Applying SwiftUI ideas to improve the developer experience of using RxSwift
-
Apple Documentation
Everything that is wrong with Apple's documentation
-
Triple Trouble
Implementing triple-column navigation in SwiftUI using NavigationView
-
XCFrameworks
Caveats of using XCFrameworks with Swift Package Manager
-
Pulse: Network Inspector
Building a multiplatform tool using SwiftUI
2020
-
Formatted Strings
Using XMLParser and NSAttributedString to add support for basic formatting in localizable strings
-
WWDC20 Summary
An overview of the changes introduced on WWDC20 from the design and product perspective
-
Introducing Align 2
Layout anchors, reimagined
-
VPN, Part 2: Packet Tunnel Provider
Using NEPacketTunnelProvider to implement a VPN client
-
VPN, Part 1: VPN Profiles
Using Network Extension framework to create and manage VPN profiles
-
How Does VPN Work?
A Russian nesting doll of network protocols
-
Let's Build a VPN Protocol
How to implement a custom VPN client and server using Packet Tunner Provider
-
Nuke 9
Reflecting on the five years of the performance improvements
-
Introducing FetchImage
FetchImage makes it easy to download images using Nuke and display them in SwiftUI apps
-
SwiftUI Data Flow
Everything you need to know about data flow in SwiftUI
2019
-
Effective Unit Testing
Why most unit testing is a waste in Swift and how to extract the most value from tests
-
CI for Swift Frameworks
How I went from manually testing my frameworks to having hundreds of unit tests and multiple automatic checks running on every change
-
SwiftUI Layout System
Taking a deep dive into SwiftUI layout system
-
Regex, Part 3: Matcher
Explore two different regex matching algorithms
-
Regex, Part 2: Compiler
What are Type-2 (or regular) languages? How can Finite State Automaton be used to recognize them? Where do regex fit into all this?
-
Regex, Part 1: Parser
Exploring Parser Combinators (or monadic parsers) which are a great example of functional programming used to bring practical benefits
-
Regex, Prologue: Grammar
Using a formal grammar to describe a regular expression language
-
Let's Build a Regex Engine
How to understand the language of
<\/?[\w\s]*>|<.+[\W]>
-
Navigation Problem
How to solve it without Coordinators and why Coordinators might be not an optimal solution for you
2018
-
Future<Value, Error>
Future – a streamlined Future<Value, Error> implementation with functional interface
-
Let's Talk Architecture
MVC – The Past. MVVM with RxSwift or ReactiveCocoa, MVP – The Present. Functional Architectures – The Future.
-
Resumable Downloads
Exploring how resumable downloads - one of my favorite new features in Nuke 7 - are implemented using HTTP range requests
-
Network Extension Overview
Introduction Network Extension framework features
-
Trunk-Based Development
Why feature branches might prevent continuous integration and discourage refactoring and what other branching strategies are worth considering.
-
Creating Views in Code
Tips and tricks to keep code in your views nice and readable
2017
-
Cancellation Token
A unified model for cooperative cancellation of asynchronous operations
-
Naive Date and Time
Foundation offers great APIs for manipulating dates with time zones, however, it might be missing a few things
-
Three Use Cases of Phantom Types
Adding additional type safety using phantom types on the examples
-
Align: Intuitive Auto Layout
I'm thrilled to introduce a new intuitive and powerful Auto Layout library - Align
-
Codable: Tips and Tricks
Introduced in Swift 4 to replace NSCoding APIs, Codable also features first-class JSON support
-
Smart Retry
Combining retryWhen operator with Reachability and delay options inspired by RxSwiftExt to implement auto-retries
-
API Client in Swift
How to implement a declarative and powerful API client using Alamofire, RxSwift, and Codable
-
Introducing RxNuke
I'm excited to introduce a new addition to Nuke - RxNuke which brings the power of RxSwift to your image loading pipelines
-
RxSwift Testing
Unit testing paging in a scroll view using RxSwift testing infrastructure - RxTest
-
Interface Builder: Previews
Using Interface Builder to quickly preview features on different screen sizes and in different orientations
-
Let's Build UIStackView
Explores how UIStackView works under the hood to build its open source replacement - Arranged
2016
-
Core Data Progressive Migrations
Using NSPersistentStoreCoordinato and NSMigrationManager for progressive schema migrations in Core Data
-
Image Caching
In-depth look at HTTP cache and Foundation's URL Loading System to cache images on disk
-
Image Prefetching
An effective way to improve user experience by loading data ahead of time in anticipation of its use
-
Immutability and Builder Pattern
Modelling large immutable objects in Objective-C without creating telescoping initializers