Issue #1057 
 Markdown is everywhere. Documentation, chat messages, AI responses, README files, most text-heavy apps eventually need to render it. SwiftUI has no built-in markdown view, so you have to build one. This article walks through the tools available and how they fit together. 
 
 Apple swift-markdown 
 Apple ships a Swift package called swift-markdown that parses markdown…
Issue #1056 
 Most HTTP requests are short-lived: send a request, wait for a complete response, close the connection. Server-Sent Events (SSE) breaks that pattern. The server sends a continuous stream of data over a single persistent connection, pushing new content whenever it has something to say. It’s unidirectional (server to client only) and built on plain HTTP, which makes it…
Issue #1055 
 Most HTTP requests follow a simple pattern: send a request, wait for a response, close the connection. WebSocket breaks that pattern. The connection stays open after the handshake, and both sides can push messages at any time without waiting for the other to ask. This makes it well-suited for live updates, chat, or streaming AI responses where the server needs to push data as it…
Issue #1054 
 Open almost any Kotlin project and you find two files: settings.gradle.kts and build.gradle.kts . It is rarely obvious which one does what. To clear that up, we will build a tiny Kotlin app, add an external dependency on http4k, then split part of the code into a local module. 
 The .kts extension means these files use the Kotlin DSL rather than the older Groovy syntax.…
Issue #1053 
 Plenty of Mac apps still run on an NSApplicationDelegate . The lifecycle works, the windows are wired up, and rewriting everything into the SwiftUI App protocol just to gain one settings window is hard to justify. The friction shows up the moment you want a modern scene like Settings or MenuBarExtra , because those are SwiftUI scenes and a SwiftUI scene normally lives inside a…
Issue #1052 
 You call an API from your web page and the browser refuses to hand you the response, even though the server replied with a 200 . The console shows a message about Access-Control-Allow-Origin . The request left your machine, reached the server, and came back, yet your code never sees the body. CORS is the mechanism deciding that, and it lives entirely in the browser. 
 The…
Issue #1051 
 You build an API on API Gateway backed by a Lambda, deploy it, then call it from your web app. The request fails before it even returns data: 
 Access to fetch at 'https://api.example.com/items' from origin
 'https://app.example.com' has been blocked by CORS policy:
 No 'Access-Control-Allow-Origin' header is present on the requested resource.
 The API works fine…
Issue #1050 
 Swift 6.4 arrives with a set of language refinements and standard library additions that make everyday code cleaner and more expressive. This article walks through the most notable changes from WWDC26. 
 Simplified platform availability with anyAppleOS 
 As Apple has aligned OS version numbers across platforms, Swift 6.4 takes the next step by letting you collapse…
Issue #1049 
 When you embed web content in a WKWebView , you often want it to stay on a set of trusted domains. A login flow that wanders off to an arbitrary site, or a help page that turns into an open browser, is both a security and a product problem. There are two ways to control this. One is declarative, handed to WebKit through your Info.plist. The other lives in your navigation code,…
Issue #1048 
 WWDC26 covers iOS 27, macOS 27, watchOS 27, tvOS 27, and visionOS 27. It brings new capabilities you can adopt and a couple of behavioral shifts that can break code that compiled fine before. This article starts with the two changes that can surprise you, then moves to the new APIs worth reaching for. 
 @State is now a macro 
 The biggest source level change is that…
Issue #1047 
 Xcode 27 ships with a set of agent skills that capture Apple’s own guidance for writing modern Swift and SwiftUI code. These skills cover things like adopting the newest SwiftUI APIs, modernizing UIKit apps, and auditing security settings. 
 They are designed to be consumed by coding agents, but they are just as useful when you want to read Apple’s recommendations…
Issue #1046 
 Every app that runs on an Apple device must be signed with a certificate. The signature tells the OS that the code comes from a known developer and hasn’t been tampered with. Xcode manages most of this automatically, but understanding which certificate does what helps when things go wrong or when you need to set up CI. 
 Apple Development 
 The Apple Development…
Issue #1045 
 Distributing a macOS app outside the App Store requires notarization. Apple scans the app for malicious content and attaches a ticket to it so Gatekeeper can verify it offline. Without notarization, users on macOS 10.15 and later see a blocking warning or the app refuses to open entirely. 
 The old altool approach is deprecated. The modern tool is xcrun notarytool , available…
Issue #1044 
 Good naming is one of the most underrated forms of documentation. A well-chosen name removes the need for a comment. A poor one forces every reader to mentally re-derive what the code does. Apple’s own frameworks are a rich source of patterns worth studying closely. The naming of clipsToBounds , tableView(_:didSelectRowAt:) , and Equatable did not happen by accident. Each…
Issue #1043 
 iOS 18 introduced interactive controls that live directly in Control Center and on the Lock Screen. Unlike widgets that only display information, control widgets respond to taps, letting users trigger actions without opening the app. A ControlWidgetToggle is the simplest form: it represents a boolean state and fires an AppIntent when the user taps it. 
 This article walks…
Issue #1042 
 Apple’s Vision framework has quietly grown into one of the most capable on-device ML libraries available on Apple platforms. Starting in iOS 17, it gained the ability to separate the foreground subject from the background of a photo, no server calls or third-party models required. 
 The entry point is VNGenerateForegroundInstanceMaskRequest . It produces a pixel mask…
Issue #1041 
 The Vision framework has provided text recognition since iOS 13 and macOS 10.15. If you have ever needed to extract text from a screenshot, a photo of a receipt, or a scanned document, this is the tool to reach for. Starting with iOS 18 and macOS 15, Apple introduced a redesigned Swift-native API that works directly with structured concurrency, making the implementation…
Issue #1040 
 SwiftData is Apple’s modern persistence framework, introduced in iOS 17. It builds on top of Core Data but exposes a Swift-native API using macros and property wrappers. For most apps targeting iOS 17 or later, it replaces Core Data entirely without needing to touch an xcdatamodeld file or write fetch requests by hand. 
 Defining a model 
 The entry point for any…
Issue #1039 
 Actor isolation in Swift 6 is not binary. A type can be mostly isolated while selectively exposing some members to callers from any context. A function can accept any actor and run directly on its executor without being bound to it permanently. Two keywords control this: nonisolated opts a member out of its enclosing isolation, and isolated makes a function parameter a live entry…
Issue #1038 
 Swift 6 concurrency replaces Grand Central Dispatch queues, locks, and completion handlers with a structured model built around async/await , actors, and task groups. The compiler enforces isolation rules at build time, and the runtime catches violations that slip through. This article walks through the core tools and the patterns that make them work correctly. 
 async/await…
Issue #1037 
 Enabling Swift 6 strict concurrency checking ( SWIFT_STRICT_CONCURRENCY = complete ) catches data races at compile time, but it does not protect you fully at runtime. The compiler also injects dynamic isolation assertions at actor and GCD boundaries. These fire in production, not just in your test suite, often at callsites that produced no compiler warning at all. 
 The two…
Issue #1036 
 Swift 6 makes concurrency safer by enforcing actor isolation at compile time, and sometimes at runtime. One of the subtler rules is that closures automatically inherit the actor isolation of the context where they are defined , not where they are called . This rule is mostly invisible until you pass a closure across a thread boundary and the app crashes. 
 The pattern shows…
Issue #1035 
 Apple Intelligence is not just a brand. Since macOS 26 (Tahoe), it ships a developer-accessible framework called Foundation Models that gives your code direct access to the on-device language model powering Writing Tools and Siri. No API key, no cloud endpoint, no usage bill — inference runs entirely on Apple Silicon via the Neural Engine. 
 The catch is that Foundation…
Issue #1034 
 Swift is a great language for building command-line tools. Package managers, code generators, deployment scripts — they’re all natural fits. But when it comes to collecting input from the user, the standard library leaves you with print and readLine , and not much else. 
 The result is usually something like this: 
 print ( 'Enter your project name:' ) 
 let…
Issue #1033 
 Claude Code is Anthropic’s CLI for coding with AI. Getting a good setup makes a real difference — the right terminal, hooks for awareness, and the right tools to keep Claude running until the job is done. 
 Terminal 
 Ghostty is a fast, native terminal that feels good to use. Install it and make it your default. 
 For pane splitting and session management,…
Issue #1032 
 Claude Code runs fast. Sometimes too fast — you walk away, come back, and have no idea if it finished or is still working. Hooks solve this. 
 A hook is a shell command that runs automatically at specific points in Claude’s lifecycle. When Claude stops, a command runs. When Claude needs your attention, another command runs. You configure them once in settings.json and…
Issue #1031 
 Claude Code is good at completing tasks, but it stops when it thinks it’s done. For small, well-scoped work that’s fine. For larger projects — building out a feature, getting a test suite green, or scaffolding an entire app — a single session often isn’t enough. Each attempt gets partway there, then exits. 
 The Ralph technique solves this by turning Claude…
Issue #1030 
 Most task systems give Claude a flat list and hope for the best. Beads is different. It tracks dependencies between tasks and only surfaces work that is actually ready — no blockers, no wasted effort. 
 Let’s use beads via its CLI called bd . 
 What a task looks like 
 Every task in the Beads database has a hash-based ID like bd-a3f8 . The status field tells the…
Issue #1029 
 Claude Code ships with two built-in memory systems. CLAUDE.md lets you write persistent instructions. Auto memory lets Claude write its own notes across sessions. Understanding both — and then knowing when to add claude-mem on top — is the key to a context-aware workflow. 
 Built-in memory: CLAUDE.md 
 CLAUDE.md is a plain markdown file that loads into every session.…
Issue #1028 
 Running one Claude session at a time is fine for small tasks. For larger work — building a feature while fixing a bug, writing tests while refactoring — you need parallelism. Claude Code provides two tools for this: sub-agents and git worktrees. 
 When you ask Claude to do two things at once in a single session, it does them sequentially. More importantly, every file read and…
Issue #1027 
 On March 31, 2026, Anthropic accidentally shipped a 59.8MB sourcemap file with a routine update to Claude Code. The file, bundled into npm package version 2.1.88, exposed nearly 2,000 files and 500,000 lines of source code to anyone who knew where to look. The folks at ccunpacked.dev mapped it out visually. Researchers, developers, and the curious spent the following days picking…
Issue #1026 
 Boris Cherny created Claude Code. He also uses it more heavily than almost anyone. He runs dozens of sessions at once, automates team workflows, and uses features most developers haven’t tried. These are his techniques. 
 Run Multiple Sessions in Parallel 
 Most developers open one terminal, type a prompt, and wait. Boris runs five Claude instances at once, each in…
Issue #1025 
 macOS windows look best when they blend with the desktop — the translucent, frosted-glass look that makes panels feel native rather than opaque blocks of UI. There are two ways to achieve this depending on your deployment target. 
 NSVisualEffectView 
 Before macOS 26, NSVisualEffectView is the standard tool. It composites your content over the desktop using one of…
Issue #1024 
 Every time Claude Code wants to read a file, run a command, or write to disk, it asks for permission. For a first session on an unfamiliar project, that’s fine. But when you’re deep in a trusted codebase and clicking “Allow” for the twentieth time in five minutes, it becomes friction with no real benefit. 
 The --dangerously-skip-permissions flag turns…
Issue #1023 
 The default Terminal.app works, but it lacks the speed and features that modern development demands. A well-configured terminal setup makes navigation faster, Git operations visual, and file searching instant. This guide walks through setting up Ghostty, Zsh with Prezto, and the CLI tools that experienced developers rely on daily. 
 Install Homebrew First 
 Everything…
Issue #1022 
 Web scraping used to mean writing brittle scripts that broke whenever a site changed. Now AI agents can browse the web like humans do. They read pages, click buttons, fill forms, and extract data without you writing CSS selectors for every element. 
 This guide covers tools that make AI-powered browser automation possible. Some are low-level SDKs. Others handle everything…
Issue #1021 
 Claude Code has built-in memory, but power users want more. These tools add deeper context tracking, task management, and access to the wider ecosystem. 
 Context & Memory 
 Tools that help Claude remember. 
 claude-mem 
 Saves what Claude does in your sessions. When you start a new session, it loads relevant history automatically. No setup needed — it just works.…
Issue #1020 
 AI coding assistants struggle with Swift. They suggest deprecated APIs. They miss SwiftUI performance issues. They write concurrency code that crashes at runtime. 
 The iOS community has built tools to fix this. Agent skills teach AI assistants modern patterns. MCP servers connect them to Xcode and Apple docs. CLI tools automate app distribution. 
 Agent Skills 
…
Issue #1019 
 GitHub Actions logs every command you run. Anyone with repository access can see these logs. 
 When workflows handle customer data like social security numbers, this creates a problem. A single oversight can expose sensitive information. 
 The issue appears most often with command-line arguments. You pass a social security number to a script, and the full command shows up…
Issue #1018 
 Visual hierarchy is what separates polished apps from cluttered ones. When elements compete for attention equally, users struggle to know where to focus. SwiftUI provides powerful tools for creating hierarchy—through layered backgrounds, foreground styles, and multi-toned symbols—but they’re easy to overlook if you don’t know where to find them. 
 In this article,…
Issue #1017 
 When your app loads web content with embedded iframes, deciding which navigations to allow becomes surprisingly tricky. A click in an ad banner behaves differently than a click on the main page content, and WKWebView’s delegate methods give you the tools to tell them apart. 
 In this article, we’ll explore how to use sourceFrame and targetFrame properties to…
Issue #1016 
 Loading data from multiple API endpoints is one of the most common tasks in iOS development. When your app needs to fetch a user’s profile, their recent orders, and notification count all at once, the naive approach is to call them one after another—waiting for each to complete before starting the next. This sequential pattern wastes precious seconds while your users stare…
Issue #1015 
 Building a container view that wraps child views and places dividers between them sounds simple. But until iOS 18, SwiftUI didn’t give us a clean way to iterate over child views. Let’s look at how this problem was solved before, and the elegant solution Apple now provides. 
 Imagine you want a component like this: 
 SeparatedGroup { 
 Text ( 'First item' )…
Issue #1014 
 You need to loop through arrays, make sequences, change data, and repeat tasks. Swift has many ways to do this beyond the basic for loop. Knowing your options helps you write clearer code. 
 The Standard For Loop 
 The for-in loop handles the common case. When you have a collection and need to visit each item, use this. 
 let temperatures = [ 72 , 68 , 75 , 71 ] 
…
Issue #1013 
 iOS 17 gave us custom UIKit traits. You can now propagate values through your view hierarchy using the trait collection system. But getting those same values into SwiftUI requires a bridge. The UITraitBridgedEnvironmentKey protocol provides that connection, though making it work reliably takes more than following the obvious pattern. 
 Why You Need This 
 Picture building…
Issue #1012 
 When you need to authenticate users through an external service in your iOS app, ASWebAuthenticationSession handles the flow gracefully. The API presents Safari’s authentication view inside your app, then captures the redirect back. But the callback mechanism you choose determines what setup you need and whether your code will work consistently across devices. 
…
Issue #1011 
 You’re building an iOS app with embedded web content. Everything works perfectly until your users need to authenticate through a third-party provider — the popup gets blocked, or the callback never makes it back. 
 WKWebView’s popup handling follows predictable patterns once you understand how window.open() behaves, when delegate methods fire, and how to wire up…
Issue #1010 
 Medium post https://medium.com/@onmyway133/a-better-way-to-update-uicollectionview-data-in-swift-with-diff-framework-924db158db86 
 
 A Better Way to Update UICollectionView Data in Swift with Diff Framework 
 Familiar Friends 
 It’s hard to imagine any apps that don’t use table view or collection view, via classes like UITableView , UICollectionView…
Issue #1009 
 SwiftUI’s Observation framework makes reactive UI updates effortless—when a property changes, views that depend on it automatically refresh. But what happens when your data lives in UserDefaults? You might want subscription status, user preferences, or feature flags to persist across launches while still triggering view updates when they change. 
 The natural instinct…
Issue #1008 
 Model Context Protocol (MCP) allows Claude Code to connect to external tools, databases, and services. See the official MCP documentation for more details. 
 Scopes and Configuration Storage 
 MCP servers have three scope levels that determine where configurations are stored. Read more about local scope , user scope , and project scope in the documentation. 
 Local…