When developing iOS apps, we often need to persist sensitive user data such as passwords, authentication tokens, or cryptographic keys.
For this type of data, storing values in plain files or UserDefaults is usually not appropriate. Instead, iOS provides the Keychain Services API, which stores sensitive data in an encrypted and system-managed database.
In this article, we'll look at how the Keychain API works and how to save, retrieve, update, and delete keychain items in Swift.
I got halfway through the manager before something started to feel off. I had AsyncStreams feeding into completion handlers feeding back into delegate methods. I had bridges on top of bridges. The "modern" code I was writing was making the rest of the system harder to read, not easier.
And then it clicked: I had built a beautiful Tesla engine and was now trying to bolt it onto a horse carriage.
Swift Concurrency fundamentally changed how asynchronous programming works in Swift. Before async/await arrived, developers relied heavily on completion handlers, delegates, Combine pipelines, and Grand Central Dispatch (GCD). These approaches worked, but they often made asynchronous code difficult to reason about, debug, and maintain.
Agent Skills are becoming popular in developer communities for their ability to quickly help test technologies, APIs, and SDKs to prove ideas and concepts. Get ready to create a functional iPhone app with a one-shot prompt for 1–1 and group chat using Swift Agent Skills by Stream without consulting the API/SDK docs.
An iOS sheet defaults to covering around half the screen, and while you can specify custom detents, it’s not enough. This article shows you how to easily make a sheet size to fit its content.
TL;DR
The approach in this code can be found in PresentationKit, which is an open-source library I created to handle alerts, modals, sheets, and toasts. Check out the project for more handy examples.
SwiftUI apps often need to perform async operations that will throw errors when things go wrong. This post shows how you can present alerts for such errors, without a bunch of messy code.
So, you should keep in mind every custom type or function you build to cover functionality on older platforms, because you might need to delete them in a year as soon as you bump the minimal platform version. Or, you can make the compiler remind you about that code. This week, we will talk about a way to make the compiler help us in identifying dead code in our codebase.
Who would have thought that software development can spawn controversy? Never mind code padding and whethe curly braces should start on a new line, check out these Swift features.
In this post we will explore the most modern APIs that SwiftUI provides for programmatic scrolling, covering how to configure the initial scroll position of a scroll view, how to drive it programmatically, and how to read the current position back. We will also cover some of the nuances that are easy to miss. It's worth noting though, that all of these new APIs apply to ScrollView only, and ScrollViewReader remains the only native option for programmatic scrolling in lists.
The Observation framework is a modern Swift feature that provides automatic change tracking for observable objects. It replaces ObservableObject with a cleaner, more efficient approach using Swift macros.
Join the Mobile Signal Talent Directory and make your profile visible to hiring teams searching for iOS talent.