I recently went on a quest for Live Activities. There’s a ton of gotchas or subtle notes that aren’t clearly mentioned. Think of the series as an unofficial rfc. Intro Example app - wwdc code - docs confusion points I saw Apple’s videos and docs on ActivityKit. They do a decent job of showing you 80% of the API and how Live Activity works. The remaining 20% is an enigma though....
Live Activities Part 2 - The missing doc
How do I begin development for Live Activities? Add a new† (widget) target to your app. Make sure you select ‘Live Activities’. Add the necessary plist items. Add push notification capability. Only needed if you want to start / update from server. If everything is done from within the app then you don’t need this. Example ‘Clock’ App on iPhone adds timers to your phone without any server interaction. Note: A widget is a specific kind of app extension....
Live Activities Part 3 - Development
Development How can I share classes between widget and app? Models must be shared across targets. App needs the model to manage its lifecycle (start, update, end, handling dismissed / stale activities). Widget needs the model to be able to present it. Each View should only get added to targets that needs them. Your widget must create views based on the models for all Live Activity presentations. Your app may need views if it has an in-app view related to the live activity....
Live Activities Part 4 - Debugging
Debugging Notification delivery issues Can you send Live Activity notifications to simulator? Yes. The token created by the simulator works. Just don’t use the simulator for testing application lifecycle behavior or background tasks as a may not properly simulate OS restrictions. Can you drag and drop payloads into the simulator? That didn’t work for me. How can you extract the key from the p8 file? It’s just plain text. There’s no decryption required....

Swift Actors: few random notes
This post isn’t meant to explain how actors work. Rather just elaborate a few tiny details. I’m often curious about the origins of things. How people met, dated or how they began their careers or founded their companies. Similarly about namings, understanding the context often gives you a foundational understanding. I give feedback in Pull Requests about variable and type names or seek advice through code-review channels. First time it occurred was when someone explained that the reduce function means “how you jam and reduce an entire array into a single value”....
Separate Devices, Better Life: Why Personal Freedom Beats Using Your Work MacBook
Pros Performance Company keeps adding more monitoring. Your MacBook will only get slower. You will get annoyed by this. Mike Zorn's comment about this post Apple is finding more ways to restrict access to surveillance. This forces companies to restrict access to tools further because they lack the visibility into things. You pay the price… Often developers get even restricted from using tools like Charles Proxy / Proxyman, because they require adding a new root certificate which then interfere with company’s monitoring tools....

How to Get Into Software Engineering
This post is based on my personal experience and is a bit oversimplified for brevity. Update: Added some of the feedback that I got from some readers. Is Software Engineering Still the Golden Ticket? What About Medicine… or Trades? A few years ago, if you asked anyone, “What should I study to make good money?” the answer was almost always: programming. Fast forward to today, and the answer isn’t so clear-cut....
Why Can't You Loop Over Ranges of Characters in Swift
This is a follow up from my previous post: The power and expressiveness of Swift ranges. For a Character Range: contain works fine let numericalRange = 1...10 numericalRange.contains(8) // true let a: Character = "a" let z: Character = "z" let alphabeticalRange = a...z alphabeticalRange.contains("k") // true for-loop and count don’t work print(numericalRange.count) // 10 print(alphabeticalRange.count) // ❌ Referencing property 'count' on 'ClosedRange' requires that 'Character' conform to 'Strideable' for num in numericalRange { print(num) // 1 2 3 4 5 6 7 8 9 10 } for char in alphabeticalRange { // ❌ Referencing instance method 'next()' on 'ClosedRange' requires that 'Character' conform to 'Strideable' print(char) } What both of those errors mean is that Swift can’t figure out what the next character is for a given character....
How Quantifying Impact Helps Your Career Growth
Learning from my product peers, TIL if you’re making an impactful change, it’s not just about the change itself—it’s about how you communicate its success. A compelling story can amplify your impact, but every great story needs a foundation of data to back it up. Logs, metrics, and dashboards are essential tools that help you visualize, quantify the problem and measure the impact of your solution from the perspectives of:...
How Do Binaries work together? What breaks ABI?
For two (dynamic) libraries to work together they need: API compatibility ABI compatibility If you have correct function, parameter names, and are able to access it (it’s not private) then you’re good. The compiler validates if classA is using the correct Programming Interface from classB 👈 API (Application Programming Interface) Example of API usage struct House { var address = Address(streetAddress: "1100 Happy St.") } struct Person { var address = Address("1100 Sad St....