Say hello to the Apple's new Liquid Glass design

Say hello to the Apple's new Liquid Glass design

At this year’s WWDC, Apple introduced a major visual update the “Liquid Glass” design - a dynamic new material arriving with iOS 26. Yes, you read that right: all the rumours were true, and we’re jumping straight from iOS 18 to iOS 26. How do I feel about the new design? Honestly, I like it. I did a small side by side comparison using Simulator between iOS 18 and iOS 26. The new look speaks to me more. It feels more modern… ...

June 17, 2025 · 2 min · Maciej Gomolka
WWDC25 - New possibilities have arrived!

WWDC25 - New possibilities have arrived!

New possibilities have arrived! 🛬 This year, Apple released 14 new beta frameworks, bringing powerful tools for product builders to craft outstanding features. As the platform grows, so does its complexity. Don’t worry! You don’t have to master all of them at once (most you may never even use). Instead, focus on understanding each framework’s core purpose. This will broaden your awareness of available tooling and help you later assess which framework you need to solve a given problem - you can dive deeper when the need comes. ...

June 16, 2025 · 1 min · Maciej Gomolka
Will enter foreground or won't?

Will enter foreground or won't?

Intro All across iOS dev blogs and posts you read about AppDelegate being deprecated in the next major iOS release. AppDelegate has been a go-to for app lifecycle handling since iOS 2. From iOS 13, SceneDelegate lives alongside AppDelegate handling per-scene lifecycle. Do the methods applicationWillEnterForeground and sceneWillEnterForeground actually behave the same? Difference 1 - App-wide vs per-scene calls AppDelegate’s will enter foreground Fires once when the entire app moves from background to foreground SceneDelegate’s will enter foreground Fires once per scene as each one enters foreground This behaviour is reflected in each method’s signature (look on arguments) ⤵️ ...

June 3, 2025 · 2 min · Maciej Gomolka
Turning Singleton Usage into Testable Code

Turning Singleton Usage into Testable Code

See how you can wrap any singleton behind a protocol to make it injectable and your code fully testable 💯 The blog post shows how to deal with URLSession.shared usage. The same strategy can be applied to all other singletons in your code! The problem Service uses URLSession.shared directly. Tight coupling makes unit testing impossible without real network calls. struct PostsAPISerivce { func fetchPosts() async throws -> [Post] { let url = URL(string: ".../posts")! let (data, _) = try await URLSession.shared.data(from: url) return try JSONDecoder().decode([Post].self, from: data) } } In the sections, you’ll get step-by-step guide of making this service testable. These same steps can be applied to all other singletons found in your code. ...

May 27, 2025 · 2 min · Maciej Gomolka
Swift Concurrency Riddle - TaskLocal

Swift Concurrency Riddle - TaskLocal

Intro If you’re able to solve this, it means you understand TaskLocal really well. Riddle Look at the attached code snippet and guess: What will be printed at each step? Is the order of prints always the same? class Riddler { @TaskLocal static var message = "Hello" static func riddleMe() { Self.$message .withValue("Bye", operation: { print("Print 1: \(Self.message)") // ??? Task { print("Print 2: \(Self.message)") // ??? } Task.detached { print("Print 3: \(Self.message)") // ??? } }) print("Print 4: \(Self.message)") // ??? } } Riddler.riddleMe() Hint Do you want to learn more about TaskLocal and Test Scoping in Swift 6.1 first? - Check out my blog post on “Concurrency-Safe Testing in Swift 6.1 with TaskLocal and Test Scoping” HERE. ...

May 17, 2025 · 2 min · Maciej Gomolka