Recent Articles

See all 48 articles »

I'm a software engineer with years of experience in the industry, creating articles and frameworks for the Apple developer community. To support my work, please sponsor me on GitHub.

♡ Sponsor

Subscribe to receive the latest updates from ⌘ kean (a blog about Swift, iOS, and other software engineering topics). You are going to receive updates about the recent articles and projects.



A powerful image loading and caching system

Pulse, structured logging system built using SwiftUI

See all 22 projects »

  • 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

  • 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

  • SwiftUI Experience

    Is SwiftUI delivering on its promises?

  • 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

  • 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 Automation 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

  • 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.

  • Are Optionals Any Good?

    Taking a step back to see what is good and bad about Optional type in Swift

  • Resumable Downloads

    Exploring how resumable downloads - one of my favorite new features in Nuke 7 - are implemented using HTTP range requests

  • Network Extension, Part 1 - Introduction

    Introduction to a series of posts about the Network Extension framework

  • 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

  • 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

  • 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

  • Preheating Images

    Preheating is an effective way to improve user experience by downloading data ahead of time in anticipation of its use

  • Immutability and Builder Pattern

    Modelling large immutable objects in Objective-C without creating telescoping initializers