Pulse Pro
Oct 5, 2021, 10:00 AM
There is always this friction when debugging native apps. You can’t look behind the scenes, unlike browsers with their developer tools. The idea behind Pulse is to bring the same or better debugging experience to native apps.
With the...
Open-Sourcing Pulse
Jul 6, 2021, 10:00 AM
Pulse is now open-source. It includes the frameworks, the document-based apps for viewing the logs, and the demo projects.
There are two main reasons for open-sourcing it.
Transparency. The network logging setup ranges from...
LazyImage
Jun 2, 2021, 10:00 AM
Nuke 10 is out, but this post is not about it. It’s about a new package called NukeUI. It comes with two main components:
LazyImage for SwiftUI
LazyImageView for UIKit/AppKit
struct ContainerView: View {
var body: some View {
...
Client-Side Search
Apr 9, 2021, 10:00 AM
The search is for Nuke Docs is built using lunr.js which is a simple client-side search engine which is relatively easy to use.
Populating Index
First, you need to populate a search index. In Nuke Docs, an index is a JSON file...
Nuke Docs
Apr 8, 2021, 10:00 AM
Nuke has beautiful new documentation with quick search and all-new guides. It’s a relatively simple site, but there are a few things I really enjoy about it. This post is a write-up about some design and technical decisions behind it. I’m...
The SwiftUI Experiment
Mar 30, 2021, 10:00 AM
Two months ago, I started an experiment of building a non-trivial production-ready app targeting all Apple platforms using only SwiftUI. It was an incredibly fun and challenging experience, but part of the journey is the end. The goal of...
Time to Log
Mar 29, 2021, 10:00 AM
When I started working on Pulse, I challenged myself to push SwiftUI to the limit and not rely on any platform-specific code. I had my eyes on the prize that eventually I’ll add support for all Apple platforms, including watchOS and tvOS....
Concurrency Done Right
Mar 24, 2021, 11:00 AM
Some apps can afford to have no concurrency. The rest are the reason why books on concurrency exist1.
I have two examples from my recent experience. Pulse has practically no concurrency, no parallelism, and does everything on the main...
What's a Document
Mar 15, 2021, 11:00 AM
Registering your custom document type and extension is straightforward: you can follow the official sample. The problem is, you can’t just slap any extension1 on a directory to turn it into a file, and Pulse store is a directory...
...But Not NSTableView
Mar 1, 2021, 10:00 AM
Despite the previous post title, it wasn’t about AppKit but about showing what’s possible with SwiftUI on the platform where it has felt least at home so far. I tried not to make it overly-positive, but I think it ended up this way anyway....
AppKit is Done
Feb 24, 2021, 10:00 AM
Well, not like Carbon. Don’t be so dramatic!
More like Core Foundation. It’s still there behind the scenes, but programmers use high-level Objective-C and Swift wrappers from Foundation. If something is missing, you can call an underlying...
RxUI
Feb 16, 2021, 10:00 AM
I’ve been using SwiftUI a lot lately and loved many ideas behind it. So I was thinking, can we apply them to the apps written with RxSwift or ReactiveSwift? SwiftUI also uses a reactive framework, Combine, for updating its views. But as a...
Apple Documentation
Feb 15, 2021, 10:00 AM
I wrote a post yesterday about triple-column navigation in SwiftUI. It felt a bit awkward posting it because this really shouldn’t be some obscure knowledge. This is hardly a challenging problem. But to me and to many other people, this...
Pulse: Network Inspector
Jan 31, 2021, 10:00 AM
On iOS, there is this friction when it comes to debugging apps. You can’t inspect anything that happens behind the scenes unless you use special tools. You can’t even see network requests.
There are tools that can help: Wireshark,...
Formatted Localizable Strings
Nov 29, 2020, 8:00 AM
How do you localizale a text label that has rich formatting?
Unforunately, there are not a lot of built-in options in the Apple SDKs, so people often end up using sub-optimal appoaches.
-->
Poor Practices
Concatenated Strings
One...
WWDC20 Summary
Jul 13, 2020, 9:00 AM
WWDC20 is over and now teams around the globe are working hard on adopting all of the latest and greatest features in Apple platforms. Or are they?
Design and product teams are often focused on the product and are not necessarily keen on...
Introducing Align 2
Jun 18, 2020, 9:00 AM
This weekend, I decided to revisit one of my early frameworks - Align. I thought it had some good ideas behind it, but there was still a lot of room for improvement. I ended up re-engineering major parts of it, even taking some...
VPN, Part 2: Packet Tunnel Provider
Jun 14, 2020, 9:00 AM
With most of the groundwork covered in “How Does VPN Work?”, let’s go ahead and design a protocol.
-->
Designing a Protocol
I want the protocol to be functional, but keep it as simple as possible. The goal is not to design a viable...
VPN, Part 1: VPN Profiles
May 24, 2020, 9:00 AM
Every App Extension requires an app, and Network Extensions are no exception. Before we jump into the nitty-gritty details of the packet tunnel itself, let me walk you through the app.
-->
Introduction
The app is not just a container...
How Does VPN Work?
May 19, 2020, 9:00 AM
Before jumping into the Network Extension framework, you need to know a bit of theory about VPN and networking in general. If you are already familiar with networking and VPN, feel free to skip this article. If you are not, this article...
Let's Build a VPN Protocol
May 18, 2020, 9:00 AM
It’s been two years since Network Extension, Part 1 - Introduction. You’ve been asking for Part 2. Here it finally is.
Let’s Build a VPN Protocol (You are here)
Prologue: How Does VPN Work?
VPN, Part 1: VPN Profiles
...
Nuke 9
May 17, 2020, 9:00 AM
Nuke 9 is a culmination of five years of development. The project started soon after Swift release, as a continuation of DFImageManager, an Objective-C image loading framework1. I put a lot of effort and care into each and every...
SwiftUI Experience
Apr 3, 2020, 11:00 AM
I had an idea how to improve the logging experience on iOS. I wanted a way to quickly view logs on the device. I needed to build a console. But I didn’t want to build it only for iOS. I also wanted to have a similar but more powerful...
Introducing FetchImage
Mar 18, 2020, 11:00 AM
FetchImage makes it easy to download images using Nuke and display them in SwiftUI apps.
FetchImage
FetchImage is an observable object (ObservableObject) that allows you to manage the download of a single image and observe the results of...