await, async let, and TaskGroup. Jul 28, 2026 • 3 min read Practical notes from a senior iOS engineer on Swift, SwiftUI, UIKit, RxSwift to Combine migration, iOS architecture, performance, debugging, UI behavior, and product delivery.
await, async let, and TaskGroup. Jul 28, 2026 • 3 min read deeplinks do not open in iOS, I check the AASA file, applinks entitlements, the provisioning profile capability, and the exact URL path match before I debug routing. Jul 7, 2026 • 5 min read UIScene migration in a UIKit iOS app is not just adding a scene manifest. The safe first step is moving real UIWindow ownership to SceneDelegate while preserving old launch behavior. Jun 25, 2026 • 7 min read RxSwift to Combine migrations look mechanical, but the real iOS work is preserving product behavior around lifecycle, cancellation, timing, replay, and reusable UI. Jun 19, 2026 • 7 min read BehaviorRelay does not have one universal replacement in Combine. The safer iOS state migration depends on whether the value belongs in @Published or CurrentValueSubject, and who owns that state. Jun 18, 2026 • 7 min read rx.tap in UIKit does not mean going back to scattered target-action code. The real iOS migration decision is whether the tap belongs in UIAction or a real Combine pipeline. Jun 17, 2026 • 6 min read assign looks like the obvious replacement for Rx bind, but in Combine UI binding for UIKit controllers, cells, and reusable views it is often not the safest one. Jun 16, 2026 • 7 min read RxSwift to Combine migrations underestimate Driver. It looked like a convenient UI type, but it was really a bundle of guarantees for iOS UI binding behavior. Jun 15, 2026 • 7 min read TRUSTED BY AND DELIVERED IMPACT AT