Home

113
When Android Phones “Force-Compat” with AirDrop
Dec 1, 2025 Issue #113

When Android Phones “Force-Compat” with AirDrop

AirDrop has long enabled fast, lossless, cable-free transfers across Apple devices, forming a signature and tightly guar...
Explore Full Issue

Recent Weekly Issues

Guest Post by LiYanan

A Deep Dive into SwiftUI Rich Text Layout: Beyond AttributedString — Inside MarkdownView and RichText

As the creator of MarkdownView and RichText, LiYanan has not only resolved numerous pain points regarding SwiftUI Markdown rendering and mixed text layout, but his solutions have also been adopted by heavyweight products like X (Grok). In this post, I invited him to unreservedly share his technical evolution—from initial experiments based on the Layout Protocol and the pitfalls of TextRenderer, to ultimately achieving a flawless interactive experience through the underlying TextKit.

Guest Post by Shudao Wang

From iOS to Android: A Candid Look at My Real-World Journey into Dual-Platform Development

An indie developer shares a detailed, real-world journey from iOS to Android: how to align features, handle platform differences, manage UI and gesture gaps, work with Google Play vs App Store, choose pricing models, integrate payments, and navigate the fragmented Android market in mainland China. A practical look at cross-platform development, monetization, and ecosystem challenges.

Guest Post by LingJueYa

Deep Dive into iMessage: Behind the Making of an Agent

iMessage is deeply integrated into the Apple ecosystem, yet has never provided an official API. This article features LingJueYa, author of imessage-kit, sharing how to break through this limitation and bring AI Agents into iMessage. The article details the complete technical solution from parsing SQLite databases, handling Core Data timestamps, bypassing macOS sandbox restrictions, to implementing message sending with AppleScript, along with the pitfalls encountered and solutions discovered during development.

by Fatbobman

Using MainActor.assumeIsolated to Solve Legacy API Compatibility Issues with Swift 6

While Swift has offered strict concurrency checking for some time, many of Apple's official APIs have yet to be fully adapted, and this situation may persist for quite a while. As Swift 6 gradually gains adoption, this problem becomes increasingly prominent: developers want to benefit from the concurrency safety guarantees provided by the Swift compiler, while struggling with how to make their code meet compilation requirements. This article will demonstrate the clever use of MainActor.assumeIsolated in specific scenarios through an implementation case with NSTextAttachmentViewProvider.

by Fatbobman

Swift 6: Sendable, @unchecked Sendable, @Sendable, sending and nonsending

Swift's concurrency model introduces numerous keywords, some of which are similar in naming and purpose, often causing confusion among developers. This article examines several keywords related to cross-isolation domain passing in Swift concurrency: Sendable, @unchecked Sendable, @Sendable, sending, and nonsending, helping you understand their respective roles and use cases.

by Fatbobman

Default Actor Isolation: New Problems from Good Intentions

While Swift's strict concurrency checking has good intentions, it significantly increases the burden on developers in many single-threaded scenarios. Developers are forced to add unnecessary Sendable, @MainActor, and other declarations to their code just to satisfy the compiler's requirements. Swift 6.2's new Default Actor Isolation feature will greatly improve this situation and reduce unnecessary boilerplate code. This article will introduce the Default Actor Isolation feature and point out some situations to be aware of when using it.

by Fatbobman

Core Data Migration Incident Analysis: The Hidden Traps We Overlooked

Compared to some open-source frameworks, Core Data and SwiftData, despite having Apple's official endorsement, often leave developers helpless when exceptions occur due to their "black box" nature, making it difficult to quickly locate problems and find effective solutions. This article documents an app startup timeout incident caused by Core Data model migration, shares the solution, and deeply analyzes the underlying causes.