RSSAmplifier

Blog

Daniel Saidi

My name is Daniel Saidi. I'm a freelance software engineer in Stockholm, Sweden, who specializes in mobile product development, with a focus on Apple platforms like iOS, macOS, tvOS and watchOS and technologies like Swift and SwiftUI.

danielsaidi.comRSS feed ↗100 posts

Latest posts

Introducing ListKit - an open-source library for working with lists in SwiftUI

Say hi to ListKit - a new open-source library for working with lists in SwiftUI. The library has reusable view components and extension for many common challenges.

Making a SwiftUI sheet automatically size to fit its content

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.

How to easily present alerts for async errors in SwiftUI

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.

Using Xcode MCP with Claude Code

Xcode 26.3 ships with a built-in MCP server that lets AI assistants like Claude Code understand your Xcode projects, trigger builds, run tests, etc., without you having to paste errors between tools.

Detecting text in images with the Vision framework

Apple’s Vision framework is a framework for on-device machine learning-based image analysis. Let’s see how we can use it to extract text from images in our apps.

KeyboardKit 10.2 - New In-Keyboard Dictation Engine

KeyboardKit 10.2 is out! This release adds a new dictation engine and many new settings, as well as several bug fixes and improvements.

Localizing Swift Packages with String Catalogs

I recently gave a talk at CocoaHeads Stockholm, on how to use Xcode string catalogs to localize Swift packages, and how to create a shared translations package. Let’s see what the big deal is.

A Better Way to Localize Swift Packages with Xcode String Catalogs

Xcode 26 fixes many problems involved in localizing Swift Packages with Xcode String Catalogs. Let’s see how we can use its automatically generated, internal symbol to translate text in any target.

Improving Swift Package Scripts with GitHub Actions workflows

I have improved my open-source project Swift Package Scripts which contains Swift Package-related scripts, by adding a couple of convenient GitHub Action Workflows to it.

Building Closed-Source Binaries with GitHub Actions

Using GitHub Actions is a great way to automate your build process. In this post, we’ll take a look at how GitHub Actions can build binaries (XCFramework and dSYMs) for a closed-source Swift package.

Power-Up SwiftUI Form Validation with Key Paths

I struggled to start using keypaths in Swift, but I’m really glad that they’re now a go-to tool to reduce repetition and increase readabily. Let’s take a look at how to use keypaths with form validation.

Adding dSYMs from a closed-source Swift SDK to an app

If your app depends on a closed-source SDK, you may find that the crash reports don’t provide a full strack trace for the SDK. Let’s see how you can add the SDK dSYMs to your app to improve this.

SwiftLeeds - Questions & Answers

I recently did a talk on Best Practices in SDK Development at SwiftLeeds ‘25. I got so much feedback and great questions that I decided to post the questions and answers here.

KeyboardKit 10

You may have noticed that this blog has been a bit silent lately. One of many reasons is that I’ve had to focus on many new KeyboardKit customers and with the upcoming KeyboardKit 10 release.

Creating amazing loading animations with SF Symbols.

In this post, we’ll take a look at how to use SF Symbols to easily create amazing loading animations.

Using VideoKit to add video to your SwiftUI app

I just created a new open-source Swift Package called VideoKit, which makes it easy to add video to your SwiftUI apps. It has a configurable VideoPlayer and a video-based splash screen.

WebView is Finally Coming to SwiftUI

After the 6 years that has passed since SwiftUI was first announced, we finally get a native WebView, with some additional web-related tools. Let’s take a look at it and what it means for my .

Introducing PickerKit for SwiftUI

Say hi to PickerKit - an open-source SwiftUI package that contains various image pickers, cameras, document scanners, file pickers, picker utilities, etc. for your everyday picker needs.

Using AI and Cursor to localize Xcode String Catalogs

Xcode String Catalogs are great for localization, but make it harder to add new languages compared to the old .strings files. Let’s see how to export & import String catalog languages, and how to use Cursor to add support for new languages with AI.

One Number to Rule Them All: Why I’d Love Apple’s Unified OS Versioning

Apple’s rumored plans to unify all platform OS versions and potentially jump to version 25 (or 26) for iOS, iPadOS, macOS, tvOS, watchOS, and visionOS, might seem like a cosmetic change. But as someone who wrestle with availability checks across Apple’s ecosystem on a daily basis, I can’t help to get excited about this change.

A Clarified Blog Purpose

After some reflection on what I want with this blog, I’ve decided to make a slight shift in focus. From now on, I’ll be focusing on things that I learn in my various projects, rather than aiming to cover the latest Swift & SwiftUI announcements, updates, and industry news.

Introducing FlipKit - a flippin’ good library for SwiftUI

Say hi to FlipKit - a tiny open-source SwiftUI library with a FlipView that can be used to flip between a front and a back view on all major Apple platforms.

Swift Enums vs Structs - Picking the Best Tool for the Job

When designing state in Swift, choosing between enums and structs can significantly impact your code’s flexibility and structure. Let’s explore when to use each approach with examples.

Adding dependencies to binary Swift packages

While regular Swift package targets can define dependencies, binary targets can’t. But there is a way to define dependencies for a binary Swift Package target. It’s just a little different. Let’s find out how.

Extracting more value from your apps

Many apps have untapped commercial potential, where sophisticated features that can help others are isolated to that single app, with commercial success at the grace of the App Store and its users.

Trying out the BenQ ScreenBar Pro

I’ve had the pleasure of receiving a ScreenBar Pro from Benq to compare how much better it is than my current desktop setup. I will give it a try and share my experience here.

Supercharging SwiftUI Text with Dynamic Content Styling

In this post, we’ll take a look at how to extend the SwiftUI Text with ways to customize any parts of its text, either individual words or longer segments.

I’m doing a talk at iOSKonf25

I’m very excited to do a talk on how to distribute and monetize closed-source SDKs with the Swift Package Manager, at the iOSKonf25 conference in Skopje, North Macedonia in May.

Wally - A 13-Year Journey

What once started as a fun hobby project for me and two friends has kept going over the years, and is now updated with a cleaner design and brand new support for IDs, travel documents, and tickets.

When Tech Giants Bow: Reconsidering My Relationship with US Tech

While this is a tech focused blog, where I generally keep politics out, I believe that reflecting on how US big tech is changing is, in fact, tech related. So, here are my 5 cents, and my plans for the future.

Making macOS Terminal use case-insensitive autocomplete

In this blog post, let’s see how to make the macOS Terminal use case-insensitive autocomplete for file and folders.

Replacing EnvironmentKit with the new SwiftUI Entry macro

As SwiftUI becomes increasingly more capable over the years, custom workarounds to work around its limitations can become outdated as SwiftUI adds native support for what they aimed to solve.

Removing Disqus comments from the blog

As the enshittification of the Internet continues, I just noticed how Disqus has started to bombard the blog comment section with horrible ads. As such, I will remove Disqus comments from the blog.

Creating a debounced search context for performant SwiftUI searches

In this post, we’ll take a look at how to create a tiny, observable search context class that can be used to handle the debouncing of any search operation, without any additional effort.

Creating tiny utility apps with SwiftUI Previews

In this post, we’ll take a look at how to create small, lightweight apps that you don’t have to install to your physical device, using SwiftUI Previews and Swift Package internal views.

Creating a SwiftUI text view with tappable links

In this post, we’ll take a look at how to create a SwiftUI Text alternative that can mix plain text and tappable links, using the Text view’s underlying support for Markdown.

Xcode stops fetching Swift packages

Today, Xcode 16.1 suddenly stopped fetching Swift package dependencies, with a Fatal: cannot use bare repository warning. Let’s see how to fix it, in case it starts happening to you.

Replacing Fastlane with Shell scripts

After many, many years of great service, I’m looking to replace Fastlane with plain Shell script files, which I hope will result in faster builds and…less Ruby.

New GestureButton open-source project

The GestureButton component that used to be part of the SwiftUIKit has now been moved to a new, separate open-source project called GestureButton.

The (too?) complex state of Emojis in 2024

Let’s take a look at the Emoji standard’s support for skin tone, gender, and direction variants, and how it may have reached its peak as Apple for the first time has removed emojis in iOS 17.4.

An easier way to use standard buttons types in SwiftUI

In this post, I’ll show how to use a simple enum to make it easier to reuse standard button types (add, delete, edit, done, etc.), with support for localization.

Creating custom environment values in SwiftUI

In this post, I’ll describe how to create custom environment values in SwiftUI, and how I’ve abused Swift to let us do it with a lot less code than what is otherwise required.

Creating a custom label style that tints the label icon

In this post, we’ll take a look at how to create a SwiftUI LabelStyle that only tints the label icon, while leaving the text element unchanged.

Setting up a custom Swift Package file header

In this post, we’ll take a look at how to set up a custom Swift Package file header, which is then used for all new Swift files that we create in that package.

Linking to native type extensions in DocC

In this post, we’ll take a look at how we can use Xcode 15’s improved DocC capabilities to link to native type extensions, to provide even better documentation to our users.

Publish DocC to GitHub Pages with GitHub Actions

In this post, we’ll see how we can use GitHub Actions to automatically build and publish a Swift Package’s DocC docs to GitHub Pages, every time we push to a specific branch.

The power of inout parameters in Swift

In Swift, inout parameters can reduce code duplication and the amount of code needed to perform certain tasks. Let’s take a look at some examples.

Custom Keyboard Extensions disappear in iOS 17.2 and later

Some users have reported that their keyboard extensions have disappeared in iOS 17.2. This article discusses some concerns after investigating the problem.

EmojiKit goes open-source

I’ve decided to open-source the EmojiKit SDK and move it from my company Kankoda to my own GitHub account. In this post, I’ll discuss why and how it will be done.

Using ApiKit to integrate with a REST API

In this post, we’ll take a look at how easy it is to use the open-source Swift package ApiKit to integrate with a REST-based API and map its data to local models.