Daniel Saidi

@danielsaidi.bsky.social

Building apps & SDKs for the  stack, using Swift & SwiftUI.

Tired of uploading PDFs and images to random "compress online" sites? I built two Finder Quick Actions that do it with a right-click, either in-place or into a new folder. Nothing leaves your Mac, and it never makes a file bigger. Downloads in the post 👇 danielsaidi.com/blog/2026/09...

Compressing images and PDFs from the Finder context menu

This article shows how to create two Finder Quick Actions that can compress images and PDFs with a single right-click on any file in Find...

danielsaidi.com

We have received user feedback that the on-device we tools KeyboardKit uses for autocomplete no longer works for some locales (Greek, Hungarian, and Icelandic) in iOS 27. We have reported this to Apple and hope that the issue will be fixed soon. keyboardkit.com/blog/2026/09...

Autocomplete changes in iOS 27

iOS 27 is finally out, and it affects the tool we use to implement autocomplete in KeyboardKit. The tool supports 5 brand new locales, im...

keyboardkit.com

Has anyone noticed UITextChecker regressions in iOS 27? Things have been working during the betas, at least in the languages I’ve tested, but I’ve now received reports from users that upgraded to the real release that it doesn’t work.

I think it would have made a lot more sense for the duo to just be a regular sized phone that you folded out to its double size (but, but, the aspect ratio!). Sharp corners on the hinged side would have made it different enough without all these new UX concepts. But think different I guess.

The first KeyboardKit 11.0 beta is out! 🚀 Please see this blog post for more information. We'll aim to release KeyboardKit 11 on October 1, and will start working on the documentation now. We can't wait to hear what you think about this major update. keyboardkit.com/blog/2026/09...

KeyboardKit 11 Beta

KeyboardKit 11 Beta is out! This pre-release is a way for you to test the many coming changes in the next major version of KeyboardKit. G...

keyboardkit.com

I saw a Pixel 10a phone today, with its wonderful, completely flat back. I would love for the base iPhone to have the same design. I don’t understand how people just accept ever increasing wobble year after year.

Using a #SwiftUI drag gesture to derive various gesture intents is not nearly as good as wrapping UIKit and handling raw touch events. 🥲 I'm experimenting with a touch-based wrapper and it's SO much snappier than SwiftUI. Plus no gesture gate issues in the keyboard extension.

A developer has reported laggy typing in KeyboardKit in iOS 27, and I can now reproduce it. It may seem obvious, but if just press keys slowly you'll notice how random presses are delayed to when you release the key, *or* the gesture times out after ~1s and triggers the press action.

KeyboardKit gestures behave very strange in the latest iOS 27 public beta. Tapping a key multiple times and the touch down (press) gesture sometimes doesn’t trigger for a full second. Same key, same code, very random behavior.

Turns out that pulling in a static framework dependency into a dynamic Swift package works fine when you compile and run, but completely breaks SwiftUI previews with both Claude and OpenAI being able to come up with a solution 😵

If you're interested in closed source, I'd love for you to take a look at LicenseKit to protect your closed source products. Version 2.2 just shipped, and this blog post describes how to set it up, with examples and links to the documentation. #swift #licensing danielsaidi.com/blog/2026/09...

Using LicenseKit to Protect Closed Software With Commercial Licenses

Kankoda has just released LicenseKit 2.2, which ships as a static framework to make it even easier to distribute it with your app/SDK. Le...

danielsaidi.com

I finally managed to generate Swift package XCFramework build scripts for both dynamic and static frameworks, that don’t require an Xcode project nor the Swift package plugin 🎉 Such a good feeling to remove the KeyboardKit framework project.

It has taken some time to get this in place, but rebuilding the shared design from scratch when I knew what we needed has made everything so much more intuitive. Each web site can customize the base system with very minor adjustments, and sync back any changes that should be updated.

Kankoda@kankoda.bsky.social · 3w ago

The Kankoda website has a new design! We’ve replaced the old design system with a new one, built around glass surfaces, soft color glows, and a component library that our apps and SDKs can share. kankoda.com/blog/2026/08...

I hate how Apple used to be all about the 1000 songs in your pocket way of talking about tech, and now all they and all Apple podcasts talk about is gigabytes, terabytes, dollars, knits and fps.

Yesterday, I managed to reset my KeyboardKit "v11" branch to main and lose two weeks of work. I also force pushed before noticing, making things even worse. But Claude to the rescue - turns out git has your back when disaster strikes! danielsaidi.com/blog/2026/08...

Some things are never truly lost - How git recovered two weeks of deleted work

After spening 2+ weeks working on a major product update, I deleted everything by mistake. Then I got it back. This is a story about pani...

danielsaidi.com

I'm on Opus 5 and it still is very often wrong on basic SwiftUI stuff. The biggest difference to me is the massive increase in text output, to give the illusion of more complex thought.

KeyboardKit 10.9 Developer Preview is out! 🚀 This version adds a new way to resolve the host application, to replace what stopped working in iOS 26.4. It also improves typing performance, fixes a repeat gesture bug, adds new views, and deprecates old dictation tools. keyboardkit.com/blog/2026/08...

KeyboardKit 10.9 Developer Preview

KeyboardKit 10.9 Developer Preview 1 is out! This pre-release is way for you to test the many coming features and changes while they are ...

keyboardkit.com