Snapp Mobile iOS Newsletter

Issue 76 • January 23, 2026

Hi folks!

This week brings important releases from Skip, and it is free now. It has great potential to shift cross-platform attention to our side. Now it’s probably a good time to try Skip and release your best app to more users.

In platform updates, Apple released 26.3 second betas, bringing bug fixes and stability improvements. The update introduces a “Transfer to Android” tool for wireless migration and Notification Forwarding in the EU to meet DMA requirements. iOS 26.3 also prepares end-to-end encrypted RCS messaging for future carrier support.

This week’s issue covers everything from tvOS development challenges to SwiftUI architectural patterns, SwiftData migrations, and practical guides on charts and the Identifiable protocol. Let’s dive in!

SwiftUI

Emptiness in SwiftUI

Danny Bolella distinguishes three types of nothingness in SwiftUI: EmptyView for layout, EmptyModifier for compilation, and ContentUnavailableView for intentional empty states—each serves a different architectural purpose.

Visualise anything with SwiftUI Charts

Kyryl Horbushko builds a custom radial stress indicator using SectorMark and reveals the animation pitfalls that caught him by surprise.

Swift

Method Dispatch in Swift: The Complete Guide

Why does Swift support four different method dispatch mechanisms? Jacob Bartlett breaks down how inlining, static dispatch, table dispatch, and message dispatch affect performance.

The Identifiable Protocol in Swift

Need to make custom types work seamlessly with SwiftUI lists and navigation? Wesley de Groot breaks down when and how to leverage Identifiable for everything from simple models to complex SwiftData integrations.

Framework

Surviving tvOS: An Engineering Log of an Atypical Media Player

Building for tvOS means confronting Focus Engine mysteries, missing WebView, and storage constraints that force cache-only strategies. Ronnie Wong documents the workarounds that kept Syncnext player alive.

A Deep Dive into SwiftData migrations

SwiftData schema changes inevitable—but which need manual migrations and which happen automatically? Donny Wals explores the boundaries between automatic reshaping and bridge versions for complex transformations.

Development

Why VIPER and MVVM in SwiftUI are actually the same pattern: A lesson in architectural thinking

Matteo Manferdini maps VIPER components directly onto MVVM equivalents—Views to Content Views, Interactors to ViewModels, Presenters to Root Views—and explains why VIPER’s boilerplate isn’t worth it in SwiftUI.

Modularity as an Architectural Choice

Modularity promises independence but often delivers circular dependencies and inflated interfaces. Artem Mirzabekian warns that splitting code without architectural discipline creates more problems than it solves.