- AlarmPresentation defines the buttons and text. These can be defined for both an alarm (the original scheduled thing) and a countdown (during the snooze).
Read my full AlarmKit deep-dive here β°
blog.jacobstechtavern.com/p/adhd-vs-al...
@jacobstechtavern.com.bsky.social
I write about iOS performance, advanced Swift concurrency, and under-the-hood internals at Jacobβs Tech Tavern. https://blog.jacobstechtavern.com
- AlarmPresentation defines the buttons and text. These can be defined for both an alarm (the original scheduled thing) and a countdown (during the snooze).
Read my full AlarmKit deep-dive here β°
blog.jacobstechtavern.com/p/adhd-vs-al...
It can also contain custom sounds, custom snooze duration, and custom app intents for both the stop and snooze buttons.
- AlarmAttributes handles the visual presentation, including colour, icon metadata, and Presentation.
- AlarmManager.shared.schedule is the final AlarmKit call which actually schedules the AlarmConfiguration in the future.
- AlarmConfiguration stores the schedule (when) and the attributes (visual elements).
Building and running the app, we see the configuration we created in a full-screen interrupt that displays after 3 seconds:
Frankly, the API is a little weird, in that everything kind of nests inside everything else, which is simple but very verbose.
Scheduling your Alarms in AlarmKit
To actually set up the alarm on this schedule, we need to create an AlarmConfiguration object and pass this into the AlarmManager.schedule() method.
Next, Iβll demonstrate how you can use this data as a jumping-off point for more elaborate performance diagnostics using Instruments.
Read about my technique here π οΈ blog.jacobstechtavern.com/p/performanc...
improve your app:
- Thermal profiling
- CPU and memory usage
- Battery level and status
The technique helps catch hot paths in your code, and quickly flags up inefficient user flows that are killing your users in the wild.
Once you start, youβre the oracle: the first person at your company to know about performance problems, uncovering and fixing user issues before the first bug report comes through.
Weβre going to look at various performance metrics you can crowdsource and look at how each one can be used to
Today Iβm sharing a technique I created which allows you to crowdsource app performance metrics direct from your users, by piggybacking on your existing analytics system: Performance Analytics.
If you arenβt tracking performance metrics like this, youβre leaving breadcrumbs on the table.
Confession time: I never bother adding a license to my GitHub repos because the DX is 10x worse.
If you add a default license, you canβt properly push your existing repo, and it doesnβt give you the handy git instructions.
If my code is open source just go ahead guys, it's there for you.
Jacobβs Tech Tavern: coming to a lot near youβ¦?
04.08.2025 20:29 β π 1 π 0 π¬ 0 π 0Swift was a great language, but it has fallen far from its original vision.
Today, weβre going to learn how modern programming languages are governed. Iβll explain how Swiftβs dictatorial structure is uniquely terrible, and demonstrate to you how bad the situation has become.
TIL you can compel Claude to evaluate more thoroughly via βextended thinking modeβ that applies extra compute time. With some special keywords.
04.08.2025 16:51 β π 0 π 0 π¬ 0 π 0Read the full story here π
blog.jacobstechtavern.com/p/high-perfo...
My piece "High Performance Swift Data" is now free to read!
This is a story of performance pain, of data integrity, and of a successful migration. A story of SwiftData gone wrong. Follow along as I convert my SwiftData app MVP from a slow, crashing mess to a lightning-fast, responsive product.
so big tech can finally go all-in on Swift (we can dream).
Take my new Swift Concurrency course here π§΅π
blog.jacobstechtavern.com/p/swift-conc...
actors:
Distributed actors can be applied to situations that require safe data isolation between processes. Peer-to-peer gaming is a great first use case, but Iβm waiting for someone to re-invent a distributed ACID database by applying distributed actors,
processes.
Swift developers can use distributed actors from the standard library, or import the swift-distributed-actors package to apply distributed actors on the server.
Apple created an open-source sample project, TikTakFish, which runs a simple multiplayer game that works using distributed
applications running across multiple machines a cloud ecosystem.
Distributed actors apply standard actor behaviour, serialised access and data isolation, and extend this to work across processes boundaries. They simplify networking, serialisation, and transport for workloads that apply across
Distributed Actors were Chris Lattnerβs final gift to mankind: he included a high-level design for distributed actors in the 2017 Swift Concurrency manifesto.
The vision laid out a distributed compute abstraction which enforced safe data isolation across machines. This could support Swift
I always thought the application-installing UX was super weird whenever you have hidden files displaying
04.08.2025 08:51 β π 0 π 0 π¬ 0 π 0Canβt wait to download and play this when I get home from work! π€© #switch2
04.08.2025 06:01 β π 4 π 0 π¬ 0 π 0Hot take: as nice as SwiftUI is to use, itβs a bit, dare I say, lame, how the state of the art every WWDC has changed from βlook at these advanced featuresβ to βwe ported web views after 6 yearsβ
03.08.2025 19:00 β π 3 π 0 π¬ 1 π 0The argument itself is a HeapObject. We should briefly cover this before continuing, since itβs arguably the most important entity in the runtime code.
Read my full tutorial here to become an expert at Swift Internals π οΈ blog.jacobstechtavern.com/p/swift-sour...
swift/include/swift/Runtime/Casting.h, which defines the public API for runtime type-casting operations.
SWIFT_RUNTIME_EXPORT denotes it as a function exported to the runtime ABI. swift_getObjectType returns Metadata, the isa pointer that contains the type information of the argument at runtime.
memory addresses of the compiled runtime binary to its public functions. We can see the full runtime contract in Runtime.mdβ:
swift_getObjectType lives at the memory address 0x00022fb0. Letβs find the declaration in the swift runtime library. We find the header file at
with the compiler, which inlines instructions that call into the ABI.
swift_getMetatypeMetadata corresponds to a function in the linked runtime library.
The Swift Runtime ABI, or Application Binary Interface, is the API contract, or protocol definition, for the Swift Runtime. This maps the
The Swift Runtime is a C++ library that runs alongside all Swift programs. Itβs dynamically linked to your app binary at launch and facilitates core language features such as creating heap objects and managing type data.
Weβve already seen how the runtime βruns alongsideβ code by coordinating
Advanced iOS onboarding UX: Picture in Picture
Need your users to access a strictly locked-down permission like always-on location, frequency-update live activities, or keyboard access? Use Picture in Picture alongside a settings link to guide your users step by step!
I have not yet summoned the courage to write about Swift concurrency internals
But for everything else, there's my course! blog.jacobstechtavern.com/p/swift-conc...