Hi, I'm Sarun 👋 — an iOS developer.
On this blog I share my working processes, tip and tricks, tools, and problems I found along the way.
On this blog I share my working processes, tip and tricks, tools, and problems I found along the way.
layoutMarginsGuide gives your views the system margins, so content lines up with the navigation bar on every device. Learn how it works with the safe area, and how to change it.
Swift 6.4 lets us write some View? and any P? without wrapping the type in parentheses. Here is why the short form used to fail, what works now, and the one case that still needs them.
In iOS 27.1, splitArrangementLayoutRatio sets how much of the screen each view gets when ArrangementView splits them.
In iOS 27.1, splitArrangementLayoutRatio sets how much of the screen each view gets when ArrangementView splits them.
The horizontal and vertical size classes, and the display size in points, for every iPhone Duo pose and orientation.
iOS 27 lets you put a sheet on the leading or trailing side of the screen. See what each placement does on iPhone Duo when it is open, half-open, and closed.
In iOS 26, toolbar items next to each other merge into one Liquid Glass capsule. Learn which items merge, which ones stand alone, and how to split them with ToolbarSpacer.
The horizontal and vertical size classes, and the display size in points, for every iPhone Duo pose and orientation.
iOS 27 lets you put a sheet on the leading or trailing side of the screen. See what each placement does on iPhone Duo when it is open, half-open, and closed.
Choosing between the toolbar and tab bar, consolidating overflow, setting visibility priority, and when to turn vertical bars off.
How to opt a custom toolbar view into the vertical bar, change its layout, and read the vertical bar edge.
The any keyword makes the cost of an existential type visible. Here is what a bare protocol name was hiding, where the migration actually stands today, and how to turn the warnings on early.
Map, PhotosPicker, and WebView are not in SwiftUI. They live in cross-import overlays, modules that only show up when you import both halves. Here is what that means and how to spot one.
DecodingError and EncodingError now print a clean one-line summary with the coding path, instead of the wall of text we used to skim past.
Swift 6 lets a function declare exactly which error type it throws. Here is the syntax, what it does to catch blocks, and why untyped throws is still the right default.
Export Apple's built-in agent skills from Xcode 27 and use them with your preferred coding agent.
Map, PhotosPicker, and WebView are not in SwiftUI. They live in cross-import overlays, modules that only show up when you import both halves. Here is what that means and how to spot one.
If your app takes forever to run on a device and you get this error in the console log. I will share what works for me in this article.
You probably get this error when you try to add a third-party framework to your project. Let's learn one way to fix it.
I got some apps in the App Store, you can check them out.
My books on iOS development, including Practical Sign in with Apple.
SwiftUI cheat sheet