Loading WebP Images from UIPasteboard
Feb 23, 2021, 7:00 PM
I recently got a bug report for Transparent App Icons to the effect of "I tried to paste in a transparent image, but it didn't work." After cropping the background to create a "transparent" image users can use for their Shortcuts icons,...
Writing An App In 2 Days
Dec 16, 2020, 7:00 PM
This September, I developed and released an iOS app called Transparent App Icons. I wrote the app (or at least, the app's initial version) very quickly, and it's paid off in terms of the time I put into it - in addition to being a great...
New SF Symbols in iOS 14
Nov 21, 2020, 7:00 PM
SF Symbols, the standardized icon system for the Apple ecosystem, got some great upgrades this year. In addition to macOS support, there are almost a thousand more symbols available, and there are some changes in the symbol names...
Creating a shared unit test utils library with Xcode
Aug 8, 2020, 8:00 PM
I've been talking a fair amount recently about how I've been writing a lot of unit tests for Fluency, my Confluence editor app, and how much I value having good tests to catch regressions and verify that the editor is actually working...
Self-Sizing UITableView Cells with SwiftUI
Jul 20, 2020, 8:00 PM
It's been a year since SwiftUI was released, and many iOS developers who are lucky to only support the two most current iOS versions will soon be able to start writing SwiftUI in their production apps. There are clear benefits to using...
Automatic preview updating paused
Jul 4, 2020, 8:00 PM
I've been rewriting parts of CIFilter.io in SwiftUI, and one issue I ran into recently was that SwiftUI previews didn't seem to work as advertised. When I opened the preview, it would trigger an app build, eventually show up, but there...
SwiftUI Crash in AG::LayoutDescriptor::compare
Jul 2, 2020, 8:00 PM
I've been working lately on rewriting some of CIFilter.io in SwiftUI. One crash I came across that initially stumped me would happen when resetting my UIHostingController's rootView to a view that was equivalent to the one already set..
Expression shuffles the elements of this tuple; this behavior is deprecated
Jun 24, 2020, 8:00 PM
Whenever a new major version of Xcode is released, one of the first things I do is download it and run it with the various codebases I'm working on. Usually the new version of Swift is smarter and can surface more warnings and diagnostics,...
SwiftUI: Two equal width columns
Jun 16, 2020, 8:00 PM
A problem that many people run into after writing enough SwiftUI is how to make it so that two views inside an HStack have equal width, such that if the HStack grows both inner views expand proportionally.
Swift Tip: Refactoring a Private Method for Testability
May 27, 2020, 8:00 PM
Writing testable Swift code is an ongoing process, so much so that you could write a book about it, but yesterday I was reminded of a really great insight I read long ago in Working Effectively with Legacy Code about testing private...
Nested Property Wrappers in Swift
May 10, 2020, 8:00 PM
You can nest property wrapers in Swift, but it's difficult. NSHipster has a great article about all things property wrappers, and the summary of trying to compose them (which others have echoed) is that it's hard and prone to compiler...
Writing a UserDefaults editor with SwiftUI and property wrappers
May 4, 2020, 8:00 PM
I've been talking a lot online about how useful SwiftUI has been in building debug components for Fluency - debug menus are one of the places where you can start using SwiftUI right now...
Animating Metal Content with CoreAnimation
Dec 9, 2019, 7:00 PM
Recently, I've been learning more about Metal - I'm still working through the basics, but I've written a couple of posts and tweets about it, and I'm about halfway through Metal By Example. Up until now I've mostly been coding sample...
GPU Capture Button Flickering
Oct 27, 2019, 8:00 PM
One of the "Things I Don't Know" in the iOS ecosystem is Metal. As such, I've been working through Metal By Example recently, which still stands as a great introduction to Metal...
Relative date time formatting in SwiftUI
Oct 18, 2019, 8:00 PM
In the wild world of 2019 SwiftUI development, lots of things aren't documented. One such thing I ran into recently was the usage of RelativeDateTimeFormatter in a Text view...
Oct 4, 2019, 8:00 PM
I wrote previously about a technique I use in Trestle and CIFilter.io to support iOS 12 and lower while still using system provided, dark-mode accessible colors...
iOS 13 UIWindowScene Black Screen
Sep 20, 2019, 8:00 PM
I've encountered this bug enough times that I figured it was time to write a quick post about it. If you've looked into multiple window support for your app in iOS 13, you might know that a lot of the setup you used to have to do in the...
Popovers, UINavigationController, and preferredContentSize
Aug 25, 2019, 8:00 PM
In this post we'll look at a very specific but tricky interaction in UIKit, one which took me multiple days to work out how to implement. It's two view controllers of different sizes, pushed on a UINavigationController, which is presented...
The application's CFBundleVersion is invalid
Aug 21, 2019, 8:00 PM
For some reason lately, I've been having a lot of trouble installing apps and running tests in the iOS simulator on Xcode 10 (non-beta). The error message looks like this...
Taking Down Assets from SFSymbols.com
Aug 19, 2019, 8:00 PM
At the beginning of June, I launched sfsymbols.com since there wasn't a reference available on the web for searching and filtering the list of...
Backwards compatibility for iOS 13 system colors
Jun 8, 2019, 8:00 PM
At WWDC 2019, Apple announced that Dark Mode would be supported on iOS 13. There are some significant changes to UIKit in order to support this - many of them are detailed in the talk Implementing Dark Mode on iOS which I'd highly...
UIButton: Padding Between Image and Text
May 5, 2019, 8:00 PM
Pop quiz: in a UIButton, how do you set a padding of 10pt between the image and the title? I had to do this at work recently, and I was surprised at how hard it was to reason about. There are several posts talking about this topic...
Passing data through the App Store with UIPasteboard
Apr 14, 2019, 8:00 PM
About a year ago I wrote a puzzle game called Trestle. If you download it using this link or any of the links in this post (by clicking on them on your iOS device), you'll get a nice Easter egg and two of the (normally paid) level sets...
CIFilter.io (Core Image Filter Reference)
Mar 30, 2019, 8:00 PM
Today I'm launching CIFilter.io. CIFilter.io is a project I've been working on for the last few months, and today it's open source. It has two parts...
Mar 4, 2019, 7:00 PM
For my current side project, I have to export CIFilter parameters to json, and I've been running into issues with various CoreImage types not conforming to Swift's Codable...
Dead Simple Dependency Injection in Swift
Feb 14, 2019, 7:00 PM
At the most recent Swift Language User Group meetup, Patrick Barry presented a great talk about how Lyft implements dependency injection...
iOS Color Wheel Using CIFilter
Jan 27, 2019, 7:00 PM
After struggling for some time with CIFilter documentation at work, I've been working on an app which can apply filters interactively for various inputs...
RxSwift: Multiple subscribers for a unit of work
Dec 7, 2018, 7:00 PM
I've been working on a side project for better CIFilter documentation lately, and I decided this was as good of a time as any to try out RxSwift. We use reactive programming at work, but I haven't really been able to dig into it yet...
Installing Nokogiri from a Gemfile on Mojave
Nov 13, 2018, 7:00 PM
Another MacOS and another struggle through installing nokogiri. Most places online recommend using...
How NOT to set nil in UserDefaults
Oct 21, 2018, 8:00 PM
To clear a value from UserDefaults, I previously thought it was fine to do something like this...
Casting a pointer to UInt in Swift
Oct 15, 2018, 8:00 PM
There are some times in Swift, like when using System Trace, that you want to get the pointer value of an object directly as a UInt.
NSObject Equality is Tricky
Nov 12, 2016, 7:00 PM
Swift can be tricky sometimes. For example, what does the following print?