<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://danielsaidi.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://danielsaidi.com/" rel="alternate" type="text/html" /><updated>2026-03-23T22:41:39+00:00</updated><id>https://danielsaidi.com/feed.xml</id><title type="html">Daniel Saidi</title><subtitle>My name is Daniel Saidi. I&apos;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.</subtitle><entry><title type="html">Detecting text in images with the Vision framework</title><link href="https://danielsaidi.com/blog/2026/01/10/detecting-text-in-images-with-the-vision-framework" rel="alternate" type="text/html" title="Detecting text in images with the Vision framework" /><published>2026-01-10T06:00:00+00:00</published><updated>2026-01-10T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2026/01/10/detecting-text-in-images-with-the-vision-framework</id><author><name>Daniel Saidi</name></author><category term="swift" /><category term="swiftui" /><category term="vision" /><category term="ai" /><category term="ml" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/26/0110/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/26/0110/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">KeyboardKit 10.2 - New In-Keyboard Dictation Engine</title><link href="https://danielsaidi.com/blog/2026/01/09/keyboardkit-10-2" rel="alternate" type="text/html" title="KeyboardKit 10.2 - New In-Keyboard Dictation Engine" /><published>2026-01-09T06:00:00+00:00</published><updated>2026-01-09T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2026/01/09/keyboardkit-10-2</id><author><name>Daniel Saidi</name></author><category term="sdks" /><summary type="html"><![CDATA[KeyboardKit 10.2 is out! This release adds a new dictation engine and many new settings, as well as several bug fixes and improvements.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/26/0109/keyboardkit-10_2.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/26/0109/keyboardkit-10_2.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Localizing Swift Packages with String Catalogs</title><link href="https://danielsaidi.com/blog/2025/12/14/localizing-swift-packages-with-string-catalogs" rel="alternate" type="text/html" title="Localizing Swift Packages with String Catalogs" /><published>2025-12-14T07:00:00+00:00</published><updated>2025-12-14T07:00:00+00:00</updated><id>https://danielsaidi.com/blog/2025/12/14/localizing-swift-packages-with-string-catalogs</id><author><name>Daniel Saidi</name></author><category term="talks" /><category term="spm" /><category term="l10n" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/25/1214/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/25/1214/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">A Better Way to Localize Swift Packages with Xcode String Catalogs</title><link href="https://danielsaidi.com/blog/2025/12/02/a-better-way-to-localize-swift-packages-with-xcode-string-catalogs" rel="alternate" type="text/html" title="A Better Way to Localize Swift Packages with Xcode String Catalogs" /><published>2025-12-02T06:00:00+00:00</published><updated>2025-12-02T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2025/12/02/a-better-way-to-localize-swift-packages-with-xcode-string-catalogs</id><author><name>Daniel Saidi</name></author><category term="swift" /><category term="sdks" /><category term="automation" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/25/1202/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/25/1202/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Improving Swift Package Scripts with GitHub Actions workflows</title><link href="https://danielsaidi.com/blog/2025/11/26/improving-swift-package-scripts-with-github-action-workflows" rel="alternate" type="text/html" title="Improving Swift Package Scripts with GitHub Actions workflows" /><published>2025-11-26T06:00:00+00:00</published><updated>2025-11-26T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2025/11/26/improving-swift-package-scripts-with-github-action-workflows</id><author><name>Daniel Saidi</name></author><category term="swift" /><category term="sdks" /><category term="automation" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/25/1126/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/25/1126/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Building Closed-Source Binaries with GitHub Actions</title><link href="https://danielsaidi.com/blog/2025/11/09/building-closed-source-binaries-with-github-actions" rel="alternate" type="text/html" title="Building Closed-Source Binaries with GitHub Actions" /><published>2025-11-09T06:00:00+00:00</published><updated>2025-11-09T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2025/11/09/building-closed-source-binaries-with-github-actions</id><author><name>Daniel Saidi</name></author><category term="swift" /><category term="sdks" /><category term="automation" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/25/1109/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/25/1109/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Power-Up SwiftUI Form Validation with Key Paths</title><link href="https://danielsaidi.com/blog/2025/10/24/power-up-swiftui-form-validation-with-key-paths" rel="alternate" type="text/html" title="Power-Up SwiftUI Form Validation with Key Paths" /><published>2025-10-24T06:00:00+00:00</published><updated>2025-10-24T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2025/10/24/power-up-swiftui-form-validation-with-key-paths</id><author><name>Daniel Saidi</name></author><category term="swift" /><category term="swiftui" /><category term="keypaths" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/25/1024/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/25/1024/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Adding dSYMs from a closed-source Swift SDK to an app</title><link href="https://danielsaidi.com/blog/2025/10/19/adding-dsyms-from-a-closed-source-sdk-to-your-app" rel="alternate" type="text/html" title="Adding dSYMs from a closed-source Swift SDK to an app" /><published>2025-10-19T06:00:00+00:00</published><updated>2025-10-19T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2025/10/19/adding-dsyms-from-a-closed-source-sdk-to-your-app</id><author><name>Daniel Saidi</name></author><category term="swift" /><category term="sdks" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/25/1019/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/25/1019/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">SwiftLeeds - Questions &amp;amp; Answers</title><link href="https://danielsaidi.com/blog/2025/10/11/swiftleeds-questions-and-answers" rel="alternate" type="text/html" title="SwiftLeeds - Questions &amp;amp; Answers" /><published>2025-10-11T07:00:00+00:00</published><updated>2025-10-11T07:00:00+00:00</updated><id>https://danielsaidi.com/blog/2025/10/11/swiftleeds-questions-and-answers</id><author><name>Daniel Saidi</name></author><category term="conferences" /><category term="sdks" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/25/1011/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/25/1011/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">KeyboardKit 10</title><link href="https://danielsaidi.com/blog/2025/08/31/keyboardkit-10-developer-preview" rel="alternate" type="text/html" title="KeyboardKit 10" /><published>2025-08-31T07:00:00+00:00</published><updated>2025-08-31T07:00:00+00:00</updated><id>https://danielsaidi.com/blog/2025/08/31/keyboardkit-10-developer-preview</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/25/0831/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/25/0831/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Creating amazing loading animations with SF Symbols.</title><link href="https://danielsaidi.com/blog/2025/07/24/creating-amazing-loading-animations-with-sf-symbols" rel="alternate" type="text/html" title="Creating amazing loading animations with SF Symbols." /><published>2025-07-24T07:00:00+00:00</published><updated>2025-07-24T07:00:00+00:00</updated><id>https://danielsaidi.com/blog/2025/07/24/creating-amazing-loading-animations-with-sf-symbols</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><summary type="html"><![CDATA[In this post, we’ll take a look at how to use SF Symbols to easily create amazing loading animations.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/25/0724/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/25/0724/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Using VideoKit to add video to your SwiftUI app</title><link href="https://danielsaidi.com/blog/2025/06/19/using-videokit-to-add-video-to-your-swiftui-app" rel="alternate" type="text/html" title="Using VideoKit to add video to your SwiftUI app" /><published>2025-06-19T07:00:00+00:00</published><updated>2025-06-19T07:00:00+00:00</updated><id>https://danielsaidi.com/blog/2025/06/19/using-videokit-to-add-video-to-your-swiftui-app</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="sdks" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/25/0619/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/25/0619/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">WebView is Finally Coming to SwiftUI</title><link href="https://danielsaidi.com/blog/2025/06/10/webview-is-finally-coming-to-swiftui" rel="alternate" type="text/html" title="WebView is Finally Coming to SwiftUI" /><published>2025-06-10T09:00:00+00:00</published><updated>2025-06-10T09:00:00+00:00</updated><id>https://danielsaidi.com/blog/2025/06/10/webview-is-finally-coming-to-swiftui</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="sdks" /><summary type="html"><![CDATA[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 .]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/25/0610/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/25/0610/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Introducing PickerKit for SwiftUI</title><link href="https://danielsaidi.com/blog/2025/06/10/introducing-pickerkit-for-swiftui" rel="alternate" type="text/html" title="Introducing PickerKit for SwiftUI" /><published>2025-06-10T07:00:00+00:00</published><updated>2025-06-10T07:00:00+00:00</updated><id>https://danielsaidi.com/blog/2025/06/10/introducing-pickerkit-for-swiftui</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="sdks" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/sdks/pickerkit-header.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/sdks/pickerkit-header.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Using AI and Cursor to localize Xcode String Catalogs</title><link href="https://danielsaidi.com/blog/2025/06/08/using-ai-and-cursor-to-localize-xcode-string-catalogs" rel="alternate" type="text/html" title="Using AI and Cursor to localize Xcode String Catalogs" /><published>2025-06-08T07:00:00+00:00</published><updated>2025-06-08T07:00:00+00:00</updated><id>https://danielsaidi.com/blog/2025/06/08/using-ai-and-cursor-to-localize-xcode-string-catalogs</id><author><name>Daniel Saidi</name></author><category term="xcode" /><category term="localization" /><summary type="html"><![CDATA[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 &amp; import String catalog languages, and how to use Cursor to add support for new languages with AI.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/25/0608/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/25/0608/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">One Number to Rule Them All: Why I’d Love Apple’s Unified OS Versioning</title><link href="https://danielsaidi.com/blog/2025/06/08/one-number-to-rule-them-all-why-id-love-unified-os-versioning-from-apple" rel="alternate" type="text/html" title="One Number to Rule Them All: Why I’d Love Apple’s Unified OS Versioning" /><published>2025-06-08T07:00:00+00:00</published><updated>2025-06-08T07:00:00+00:00</updated><id>https://danielsaidi.com/blog/2025/06/08/one-number-to-rule-them-all-why-id-love-unified-os-versioning-from-apple</id><author><name>Daniel Saidi</name></author><category term="swift" /><category term="apple" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/25/0609/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/25/0609/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">A Clarified Blog Purpose</title><link href="https://danielsaidi.com/blog/2025/06/01/a-clarified-blog-purpose" rel="alternate" type="text/html" title="A Clarified Blog Purpose" /><published>2025-06-01T07:30:00+00:00</published><updated>2025-06-01T07:30:00+00:00</updated><id>https://danielsaidi.com/blog/2025/06/01/a-clarified-blog-purpose</id><author><name>Daniel Saidi</name></author><category term="general" /><summary type="html"><![CDATA[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 &amp; SwiftUI announcements, updates, and industry news.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/25/0601/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/25/0601/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Introducing FlipKit - a flippin’ good library for SwiftUI</title><link href="https://danielsaidi.com/blog/2025/06/01/introducing-flipkit-for-swiftui" rel="alternate" type="text/html" title="Introducing FlipKit - a flippin’ good library for SwiftUI" /><published>2025-06-01T07:00:00+00:00</published><updated>2025-06-01T07:00:00+00:00</updated><id>https://danielsaidi.com/blog/2025/06/01/introducing-flipkit-for-swiftui</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="sdks" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/sdks/flipkit-header.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/sdks/flipkit-header.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Swift Enums vs Structs - Picking the Best Tool for the Job</title><link href="https://danielsaidi.com/blog/2025/05/26/swift-enums-vs-structs" rel="alternate" type="text/html" title="Swift Enums vs Structs - Picking the Best Tool for the Job" /><published>2025-05-26T07:00:00+00:00</published><updated>2025-05-26T07:00:00+00:00</updated><id>https://danielsaidi.com/blog/2025/05/26/swift-enums-vs-structs</id><author><name>Daniel Saidi</name></author><category term="swift" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/25/0526/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/25/0526/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Adding dependencies to binary Swift packages</title><link href="https://danielsaidi.com/blog/2025/05/02/adding-dependencies-to-binary-swift-packages" rel="alternate" type="text/html" title="Adding dependencies to binary Swift packages" /><published>2025-05-02T07:00:00+00:00</published><updated>2025-05-02T07:00:00+00:00</updated><id>https://danielsaidi.com/blog/2025/05/02/adding-dependencies-to-binary-swift-packages</id><author><name>Daniel Saidi</name></author><category term="sdks" /><category term="spm" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/25/0502/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/25/0502/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Extracting more value from your apps</title><link href="https://danielsaidi.com/blog/2025/04/23/extracting-more-value-from-your-apps" rel="alternate" type="text/html" title="Extracting more value from your apps" /><published>2025-04-23T07:00:00+00:00</published><updated>2025-04-23T07:00:00+00:00</updated><id>https://danielsaidi.com/blog/2025/04/23/extracting-more-value-from-your-apps</id><author><name>Daniel Saidi</name></author><category term="general" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/25/0423/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/25/0423/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Trying out the BenQ ScreenBar Pro</title><link href="https://danielsaidi.com/blog/2025/04/20/trying-out-the-benq-screenbar-pro" rel="alternate" type="text/html" title="Trying out the BenQ ScreenBar Pro" /><published>2025-04-20T07:00:00+00:00</published><updated>2025-04-20T07:00:00+00:00</updated><id>https://danielsaidi.com/blog/2025/04/20/trying-out-the-benq-screenbar-pro</id><author><name>Daniel Saidi</name></author><category term="sponsored" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/25/0420/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/25/0420/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Supercharging SwiftUI Text with Dynamic Content Styling</title><link href="https://danielsaidi.com/blog/2025/04/08/supercharging-swiftui-text-with-dynamic-content-styling" rel="alternate" type="text/html" title="Supercharging SwiftUI Text with Dynamic Content Styling" /><published>2025-04-08T07:00:00+00:00</published><updated>2025-04-08T07:00:00+00:00</updated><id>https://danielsaidi.com/blog/2025/04/08/supercharging-swiftui-text-with-dynamic-content-styling</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/25/0408/header.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/25/0408/header.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">I’m doing a talk at iOSKonf25</title><link href="https://danielsaidi.com/blog/2025/03/25/im-doing-a-talk-at-ioskonf25" rel="alternate" type="text/html" title="I’m doing a talk at iOSKonf25" /><published>2025-03-25T07:00:00+00:00</published><updated>2025-03-25T07:00:00+00:00</updated><id>https://danielsaidi.com/blog/2025/03/25/im-doing-a-talk-at-ioskonf25</id><author><name>Daniel Saidi</name></author><category term="conferences" /><category term="talks" /><category term="sdks" /><category term="spm" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/headers/conferences/ioskonf25.png" /><media:content medium="image" url="https://danielsaidi.com/assets/headers/conferences/ioskonf25.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Wally - A 13-Year Journey</title><link href="https://danielsaidi.com/blog/2025/03/21/wally-a-13-year-journey" rel="alternate" type="text/html" title="Wally - A 13-Year Journey" /><published>2025-03-21T07:00:00+00:00</published><updated>2025-03-21T07:00:00+00:00</updated><id>https://danielsaidi.com/blog/2025/03/21/wally-a-13-year-journey</id><author><name>Daniel Saidi</name></author><category term="apps" /><category term="swiftui" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/25/0321/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/25/0321/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">When Tech Giants Bow: Reconsidering My Relationship with US Tech</title><link href="https://danielsaidi.com/blog/2025/02/17/when-tech-giants-bow-reconsidering-my-relationship-with-us-tech" rel="alternate" type="text/html" title="When Tech Giants Bow: Reconsidering My Relationship with US Tech" /><published>2025-02-17T07:00:00+00:00</published><updated>2025-02-17T07:00:00+00:00</updated><id>https://danielsaidi.com/blog/2025/02/17/when-tech-giants-bow-reconsidering-my-relationship-with-us-tech</id><author><name>Daniel Saidi</name></author><category term="general" /><category term="apple" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/25/0217/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/25/0217/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Making macOS Terminal use case-insensitive autocomplete</title><link href="https://danielsaidi.com/blog/2025/01/16/making-macos-terminal-use-case-insensitive-autocomplete" rel="alternate" type="text/html" title="Making macOS Terminal use case-insensitive autocomplete" /><published>2025-01-16T07:00:00+00:00</published><updated>2025-01-16T07:00:00+00:00</updated><id>https://danielsaidi.com/blog/2025/01/16/making-macos-terminal-use-case-insensitive-autocomplete</id><author><name>Daniel Saidi</name></author><category term="macos" /><category term="terminal" /><summary type="html"><![CDATA[In this blog post, let’s see how to make the macOS Terminal use case-insensitive autocomplete for file and folders.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/25/0116/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/25/0116/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Replacing EnvironmentKit with the new SwiftUI Entry macro</title><link href="https://danielsaidi.com/blog/2025/01/11/replacing-environmentkit-with-the-entry-macro" rel="alternate" type="text/html" title="Replacing EnvironmentKit with the new SwiftUI Entry macro" /><published>2025-01-11T07:00:00+00:00</published><updated>2025-01-11T07:00:00+00:00</updated><id>https://danielsaidi.com/blog/2025/01/11/replacing-environmentkit-with-the-entry-macro</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="sdks" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/25/0111/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/25/0111/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Removing Disqus comments from the blog</title><link href="https://danielsaidi.com/blog/2025/01/08/disabling-disqus-comments-in-the-blog" rel="alternate" type="text/html" title="Removing Disqus comments from the blog" /><published>2025-01-08T07:00:00+00:00</published><updated>2025-01-08T07:00:00+00:00</updated><id>https://danielsaidi.com/blog/2025/01/08/disabling-disqus-comments-in-the-blog</id><author><name>Daniel Saidi</name></author><category term="general" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/25/0108/disqus.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/25/0108/disqus.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Creating a debounced search context for performant SwiftUI searches</title><link href="https://danielsaidi.com/blog/2025/01/08/creating-a-debounced-search-context-for-performant-swiftui-searches" rel="alternate" type="text/html" title="Creating a debounced search context for performant SwiftUI searches" /><published>2025-01-08T06:00:00+00:00</published><updated>2025-01-08T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2025/01/08/creating-a-debounced-search-context-for-performant-swiftui-searches</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="combine" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/25/0108/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/25/0108/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Creating tiny utility apps with SwiftUI Previews</title><link href="https://danielsaidi.com/blog/2025/01/04/creating-tiny-utility-apps-with-swiftui-previews-copy" rel="alternate" type="text/html" title="Creating tiny utility apps with SwiftUI Previews" /><published>2025-01-04T06:00:00+00:00</published><updated>2025-01-04T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2025/01/04/creating-tiny-utility-apps-with-swiftui-previews%20copy</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="spm" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/25/0104/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/25/0104/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Creating a SwiftUI text view with tappable links</title><link href="https://danielsaidi.com/blog/2024/12/18/creating-a-swiftui-text-view-with-tappable-links" rel="alternate" type="text/html" title="Creating a SwiftUI text view with tappable links" /><published>2024-12-18T06:00:00+00:00</published><updated>2024-12-18T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2024/12/18/creating-a-swiftui-text-view-with-tappable-links</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/24/1218/preview.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/24/1218/preview.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Xcode stops fetching Swift packages</title><link href="https://danielsaidi.com/blog/2024/11/04/xcode-stops-fetching-swift-packages" rel="alternate" type="text/html" title="Xcode stops fetching Swift packages" /><published>2024-11-04T06:00:00+00:00</published><updated>2024-11-04T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2024/11/04/xcode-stops-fetching-swift-packages</id><author><name>Daniel Saidi</name></author><category term="xcode" /><category term="git" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/header.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/header.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Replacing Fastlane with Shell scripts</title><link href="https://danielsaidi.com/blog/2024/10/03/replacing-fastlane-with-shell-scripts" rel="alternate" type="text/html" title="Replacing Fastlane with Shell scripts" /><published>2024-10-03T06:00:00+00:00</published><updated>2024-10-03T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2024/10/03/replacing-fastlane-with-shell-scripts</id><author><name>Daniel Saidi</name></author><category term="automation" /><category term="github" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/24/1003.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/24/1003.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">New GestureButton open-source project</title><link href="https://danielsaidi.com/blog/2024/09/02/new-gesture-button-project" rel="alternate" type="text/html" title="New GestureButton open-source project" /><published>2024-09-02T06:00:00+00:00</published><updated>2024-09-02T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2024/09/02/new-gesture-button-project</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="sdks" /><category term="gestures" /><summary type="html"><![CDATA[The GestureButton component that used to be part of the SwiftUIKit has now been moved to a new, separate open-source project called GestureButton.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/sdks/gesturebutton-header.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/sdks/gesturebutton-header.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">The (too?) complex state of Emojis in 2024</title><link href="https://danielsaidi.com/blog/2024/08/13/the-too-complex-state-of-the-emoji-standard-in-2024" rel="alternate" type="text/html" title="The (too?) complex state of Emojis in 2024" /><published>2024-08-13T06:00:00+00:00</published><updated>2024-08-13T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2024/08/13/the-too-complex-state-of-the-emoji-standard-in-2024</id><author><name>Daniel Saidi</name></author><category term="ios" /><category term="emojis" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/24/0813.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/24/0813.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">An easier way to use standard buttons types in SwiftUI</title><link href="https://danielsaidi.com/blog/2024/04/30/an-easier-way-to-use-standard-button-types-in-swiftui" rel="alternate" type="text/html" title="An easier way to use standard buttons types in SwiftUI" /><published>2024-04-30T04:00:00+00:00</published><updated>2024-04-30T04:00:00+00:00</updated><id>https://danielsaidi.com/blog/2024/04/30/an-easier-way-to-use-standard-button-types-in-swiftui</id><author><name>Daniel Saidi</name></author><category term="swift" /><category term="swiftui" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/24/0430.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/24/0430.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Creating custom environment values in SwiftUI</title><link href="https://danielsaidi.com/blog/2024/04/14/creating-custom-environment-values-in-swiftui" rel="alternate" type="text/html" title="Creating custom environment values in SwiftUI" /><published>2024-04-14T04:00:00+00:00</published><updated>2024-04-14T04:00:00+00:00</updated><id>https://danielsaidi.com/blog/2024/04/14/creating-custom-environment-values-in-swiftui</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="sdks" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/24/0414.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/24/0414.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Creating a custom label style that tints the label icon</title><link href="https://danielsaidi.com/blog/2024/04/04/creating-a-custom-swiftui-labelstyle-that-tints-the-label-icon" rel="alternate" type="text/html" title="Creating a custom label style that tints the label icon" /><published>2024-04-04T04:00:00+00:00</published><updated>2024-04-04T04:00:00+00:00</updated><id>https://danielsaidi.com/blog/2024/04/04/creating-a-custom-swiftui-labelstyle-that-tints-the-label-icon</id><author><name>Daniel Saidi</name></author><category term="swift" /><category term="swiftui" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/24/0404.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/24/0404.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Setting up a custom Swift Package file header</title><link href="https://danielsaidi.com/blog/2024/03/28/setting-up-a-custom-swift-package-file-header" rel="alternate" type="text/html" title="Setting up a custom Swift Package file header" /><published>2024-03-28T04:00:00+00:00</published><updated>2024-03-28T04:00:00+00:00</updated><id>https://danielsaidi.com/blog/2024/03/28/setting-up-a-custom-swift-package-file-header</id><author><name>Daniel Saidi</name></author><category term="swift" /><category term="spm" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/24/0328.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/24/0328.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Linking to native type extensions in DocC</title><link href="https://danielsaidi.com/blog/2024/03/21/linking-to-native-type-extensions-in-docc" rel="alternate" type="text/html" title="Linking to native type extensions in DocC" /><published>2024-03-21T04:00:00+00:00</published><updated>2024-03-21T04:00:00+00:00</updated><id>https://danielsaidi.com/blog/2024/03/21/linking-to-native-type-extensions-in-docc</id><author><name>Daniel Saidi</name></author><category term="swift" /><category term="docc" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/24/0321.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/24/0321.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Publish DocC to GitHub Pages with GitHub Actions</title><link href="https://danielsaidi.com/blog/2024/03/10/automatically-publish-docc-to-github-pages-with-github-actions" rel="alternate" type="text/html" title="Publish DocC to GitHub Pages with GitHub Actions" /><published>2024-03-10T06:00:00+00:00</published><updated>2024-03-10T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2024/03/10/automatically-publish-docc-to-github-pages-with-github-actions</id><author><name>Daniel Saidi</name></author><category term="swift" /><category term="docc" /><category term="automation" /><category term="github" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/24/0310.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/24/0310.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">The power of inout parameters in Swift</title><link href="https://danielsaidi.com/blog/2024/02/18/the-power-of-inout-parameters-in-swift" rel="alternate" type="text/html" title="The power of inout parameters in Swift" /><published>2024-02-18T06:00:00+00:00</published><updated>2024-02-18T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2024/02/18/the-power-of-inout-parameters-in-swift</id><author><name>Daniel Saidi</name></author><category term="swift" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/24/0218.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/24/0218.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Custom Keyboard Extensions disappear in iOS 17.2 and later</title><link href="https://danielsaidi.com/blog/2024/02/13/custom-keyboard-extensions-disappear-in-ios17" rel="alternate" type="text/html" title="Custom Keyboard Extensions disappear in iOS 17.2 and later" /><published>2024-02-13T06:00:00+00:00</published><updated>2024-02-13T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2024/02/13/custom-keyboard-extensions-disappear-in-ios17</id><author><name>Daniel Saidi</name></author><category term="ios" /><category term="keyboard" /><summary type="html"><![CDATA[Some users have reported that their keyboard extensions have disappeared in iOS 17.2. This article discusses some concerns after investigating the problem.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/24/0213.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/24/0213.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">EmojiKit goes open-source</title><link href="https://danielsaidi.com/blog/2024/02/02/emojikit-goes-open-source" rel="alternate" type="text/html" title="EmojiKit goes open-source" /><published>2024-02-02T06:00:00+00:00</published><updated>2024-02-02T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2024/02/02/emojikit-goes-open-source</id><author><name>Daniel Saidi</name></author><category term="swift" /><category term="sdks" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/24/0202.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/24/0202.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Using ApiKit to integrate with a REST API</title><link href="https://danielsaidi.com/blog/2024/01/17/using-apikit-to-model-an-api-and-fetch-data" rel="alternate" type="text/html" title="Using ApiKit to integrate with a REST API" /><published>2024-01-17T06:00:00+00:00</published><updated>2024-01-17T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2024/01/17/using-apikit-to-model-an-api-and-fetch-data</id><author><name>Daniel Saidi</name></author><category term="swift" /><category term="api" /><summary type="html"><![CDATA[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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/24/0117.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/24/0117.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Sunsetting the Goth &amp;amp; Metal Emoji Apps</title><link href="https://danielsaidi.com/blog/2024/01/08/sunsetting-goth-and-metal-emoji" rel="alternate" type="text/html" title="Sunsetting the Goth &amp;amp; Metal Emoji Apps" /><published>2024-01-08T06:00:00+00:00</published><updated>2024-01-08T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2024/01/08/sunsetting-goth-and-metal-emoji</id><author><name>Daniel Saidi</name></author><category term="general" /><category term="apps" /><summary type="html"><![CDATA[After keeping the Goth &amp; Metal Emoji apps alive for 8 years, I’m sunsetting them together with some other apps, to allow me to focus on fewer things.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/24/0108.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/24/0108.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Sunsetting my deck-based apps</title><link href="https://danielsaidi.com/blog/2024/01/03/sunsetting-deck-based-apps" rel="alternate" type="text/html" title="Sunsetting my deck-based apps" /><published>2024-01-03T08:00:00+00:00</published><updated>2024-01-03T08:00:00+00:00</updated><id>https://danielsaidi.com/blog/2024/01/03/sunsetting-deck-based-apps</id><author><name>Daniel Saidi</name></author><category term="general" /><category term="apps" /><summary type="html"><![CDATA[After keeping the Pickup Deck, Prank Deck &amp; Quote Deck apps alive for 12 years, I’m now sunsetting them to let me focus on fewer things.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/24/0103.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/24/0103.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Unleashing Creativity in Coding - How Adobe Express Empowers Programmers</title><link href="https://danielsaidi.com/blog/2024/01/02/adobe-express-unleashing-creativity-in-coding" rel="alternate" type="text/html" title="Unleashing Creativity in Coding - How Adobe Express Empowers Programmers" /><published>2024-01-02T08:00:00+00:00</published><updated>2024-01-02T08:00:00+00:00</updated><id>https://danielsaidi.com/blog/2024/01/02/adobe-express-unleashing-creativity-in-coding</id><author><name>Daniel Saidi</name></author><category term="sponsored-content" /><summary type="html"><![CDATA[In this guest article from Adobe, we explore the various ways in which coders can leverage Adobe Express to elevate their work and workflow.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/24/0102.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/24/0102.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Rejected - An Apple Developer Holiday Special</title><link href="https://danielsaidi.com/blog/2023/12/22/rejected-an-apple-developer-holiday-special" rel="alternate" type="text/html" title="Rejected - An Apple Developer Holiday Special" /><published>2023-12-22T06:00:00+00:00</published><updated>2023-12-22T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2023/12/22/rejected-an-apple-developer-holiday-special</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="apps" /><summary type="html"><![CDATA[This is a Christmas story on the many frustrations of being a developer in the Apple ecosystem. But this time they may be correct. Happy holidays everyone!]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/23/1223/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/23/1223/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Implementing Quick Search with SwiftUI Searchable</title><link href="https://danielsaidi.com/blog/2023/12/20/quick-search-with-swiftui-searchable" rel="alternate" type="text/html" title="Implementing Quick Search with SwiftUI Searchable" /><published>2023-12-20T06:00:00+00:00</published><updated>2023-12-20T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2023/12/20/quick-search-with-swiftui-searchable</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="macos" /><category term="ios" /><summary type="html"><![CDATA[In this post, we’ll take a look at how to search with the .searchable API, by just typing on the keyboard without first having to tap/click on the text field.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/23/1220/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/23/1220/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Customizing the macOS About Panel in SwiftUI</title><link href="https://danielsaidi.com/blog/2023/11/28/customizing-the-macos-about-panel-in-swiftui" rel="alternate" type="text/html" title="Customizing the macOS About Panel in SwiftUI" /><published>2023-11-28T10:00:00+00:00</published><updated>2023-11-28T10:00:00+00:00</updated><id>https://danielsaidi.com/blog/2023/11/28/customizing-the-macos-about-panel-in-swiftui</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="macos" /><category term="menubar" /><summary type="html"><![CDATA[In this post, we’ll take a look at how to customize the macOS About Panel in SwiftUI, by using project settings, bundle files, and SwiftUI-specific tools.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/23/1128/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/23/1128/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Customizing the macOS menu bar in SwiftUI</title><link href="https://danielsaidi.com/blog/2023/11/22/customizing-the-macos-menu-bar-in-swiftui" rel="alternate" type="text/html" title="Customizing the macOS menu bar in SwiftUI" /><published>2023-11-22T06:00:00+00:00</published><updated>2023-11-22T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2023/11/22/customizing-the-macos-menu-bar-in-swiftui</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="macos" /><category term="menubar" /><summary type="html"><![CDATA[In this post, we’ll take a look at how to customize the menu bar of a macOS app, using SwiftUI tools like CommandMenu and CommandGroup.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/23/1122/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/23/1122/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Reflections on failing to reach out</title><link href="https://danielsaidi.com/blog/2023/11/08/reflections-on-failing-to-reach-out" rel="alternate" type="text/html" title="Reflections on failing to reach out" /><published>2023-11-08T06:00:00+00:00</published><updated>2023-11-08T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2023/11/08/reflections-on-failing-to-reach-out</id><author><name>Daniel Saidi</name></author><category term="general" /><summary type="html"><![CDATA[My last month has been all about wrapping up and releasing a brand new major version of KeyboardKit. It has been a fun project…but failed to deliver on all the work that went into it.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/23/1108/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/23/1108/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Dismissing a multiline text field with the return key in SwiftUI</title><link href="https://danielsaidi.com/blog/2023/09/15/dismissing-a-multiline-textfield-with-the-return-key-in-swiftui" rel="alternate" type="text/html" title="Dismissing a multiline text field with the return key in SwiftUI" /><published>2023-09-15T06:00:00+00:00</published><updated>2023-09-15T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2023/09/15/dismissing-a-multiline-textfield-with-the-return-key-in-swiftui</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><summary type="html"><![CDATA[While a single-line TextField will dismiss the keyboard when you press return, the same is not true for a multiline text field. Lets take a look at how to fix this.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/23/0915/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/23/0915/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Enabling drag reordering in lazy SwiftUI grids and stacks</title><link href="https://danielsaidi.com/blog/2023/08/30/enabling-drag-reordering-in-swiftui-lazy-grids-and-stacks" rel="alternate" type="text/html" title="Enabling drag reordering in lazy SwiftUI grids and stacks" /><published>2023-08-30T07:00:00+00:00</published><updated>2023-08-30T07:00:00+00:00</updated><id>https://danielsaidi.com/blog/2023/08/30/enabling-drag-reordering-in-swiftui-lazy-grids-and-stacks</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><summary type="html"><![CDATA[While the SwiftUI List supports drag to reordering, LazyVGrid, LazyHGrid, LazyVStack &amp; LazyHStack lack this functionality. Let’s implement this functionality from scratch.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/23/0830/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/23/0830/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Cleaner grid initialization in SwiftUI</title><link href="https://danielsaidi.com/blog/2023/08/29/cleaner-grid-initialization-in-swiftui" rel="alternate" type="text/html" title="Cleaner grid initialization in SwiftUI" /><published>2023-08-29T06:00:00+00:00</published><updated>2023-08-29T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2023/08/29/cleaner-grid-initialization-in-swiftui</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><summary type="html"><![CDATA[SwiftUI’s LazyVGrid and LazyHGrid are great for creating flexible grids. I however always find myself struggling with their initialization and have therefore created some utilities.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/23/0829/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/23/0829/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">SwiftUI Menu gets incorrect list separator lines</title><link href="https://danielsaidi.com/blog/2023/08/25/menu-gets-incorrect-list-separator-lines" rel="alternate" type="text/html" title="SwiftUI Menu gets incorrect list separator lines" /><published>2023-08-25T06:00:00+00:00</published><updated>2023-08-25T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2023/08/25/menu-gets-incorrect-list-separator-lines</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><summary type="html"><![CDATA[If you’ved added a SwiftUI Menu with an icon Label to a List, you may have noticed that the separator line behaves unlike other items, and starts below the icon instead of the title.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/23/0825/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/23/0825/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Storing Codable types in SwiftUI AppStorage</title><link href="https://danielsaidi.com/blog/2023/08/23/storing-codable-types-in-swiftui-appstorage" rel="alternate" type="text/html" title="Storing Codable types in SwiftUI AppStorage" /><published>2023-08-23T06:00:00+00:00</published><updated>2023-08-23T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2023/08/23/storing-codable-types-in-swiftui-appstorage</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><summary type="html"><![CDATA[SwiftUI keeps evolving, but there are still some missing things. Today, let’s see how we can extend Codable to make it possible to persist it in AppStorage and SceneStorage.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/23/0823/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/23/0823/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">SwiftUI Prefers Semantics</title><link href="https://danielsaidi.com/blog/2023/06/15/swiftui-prefers-semantics" rel="alternate" type="text/html" title="SwiftUI Prefers Semantics" /><published>2023-06-15T06:00:00+00:00</published><updated>2023-06-15T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2023/06/15/swiftui-prefers-semantics</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="sdks" /><summary type="html"><![CDATA[SwiftUI get amazing updates every year. If you however have to support old OS versions, you may be unable to use the new tools, or jump through hoops to make it work.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/23/0615/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/23/0615/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">DeckKit Updates</title><link href="https://danielsaidi.com/blog/2023/06/13/deckkit-updates" rel="alternate" type="text/html" title="DeckKit Updates" /><published>2023-06-13T08:00:00+00:00</published><updated>2023-06-13T08:00:00+00:00</updated><id>https://danielsaidi.com/blog/2023/06/13/deckkit-updates</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="sdks" /><summary type="html"><![CDATA[DeckKit 0.7 is out, with new shuffle support that makes shuffling a deck enjoyable. Let’s take a look at what’s new in this minor update.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/sdks/deckkit-header.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/sdks/deckkit-header.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">SwiftUIKit Updates</title><link href="https://danielsaidi.com/blog/2023/06/12/swiftuikit-updates" rel="alternate" type="text/html" title="SwiftUIKit Updates" /><published>2023-06-12T06:00:00+00:00</published><updated>2023-06-12T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2023/06/12/swiftuikit-updates</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="sdks" /><summary type="html"><![CDATA[SwiftUIKit 3.3 is out with some additions, like support for using Codable with AppStorage and SceneStorage, as well as new list utils. Let’s take a look at what’s new in this update.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/headers/swiftuikit.png" /><media:content medium="image" url="https://danielsaidi.com/assets/headers/swiftuikit.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Vision Pro - so many questions</title><link href="https://danielsaidi.com/blog/2023/06/05/vision-pro" rel="alternate" type="text/html" title="Vision Pro - so many questions" /><published>2023-06-05T06:00:00+00:00</published><updated>2023-06-05T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2023/06/05/vision-pro</id><author><name>Daniel Saidi</name></author><category term="general" /><summary type="html"><![CDATA[Apple Vision Pro is finally unveiled! As a surprise to no one, it looks spectacular. However, for every rumor and question addressed today, new ones arised.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/headers/vision-pro.webp" /><media:content medium="image" url="https://danielsaidi.com/assets/headers/vision-pro.webp" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">RichTextKit updates</title><link href="https://danielsaidi.com/blog/2023/06/02/richtextkit-updates" rel="alternate" type="text/html" title="RichTextKit updates" /><published>2023-06-02T06:00:00+00:00</published><updated>2023-06-02T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2023/06/02/richtextkit-updates</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="sdks" /><category term="rich-text" /><summary type="html"><![CDATA[After a long time away from the project, I finally had some time to revisit RichTextKit and add some new features, like indentation support and grouped controls.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/headers/richtextkit.png" /><media:content medium="image" url="https://danielsaidi.com/assets/headers/richtextkit.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Creating a bordered button group in SwiftUI</title><link href="https://danielsaidi.com/blog/2023/06/01/creating-a-bordered-button-group-in-SwiftUI" rel="alternate" type="text/html" title="Creating a bordered button group in SwiftUI" /><published>2023-06-01T06:00:00+00:00</published><updated>2023-06-01T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2023/06/01/creating-a-bordered-button-group-in-SwiftUI</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><summary type="html"><![CDATA[Just like how SwiftUI buttons can use a .bordered button style, you can use ControlGroup to group several buttons together in a bordered group.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/23/0601/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/23/0601/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Extending the SwiftUI DocumentGroup with more features</title><link href="https://danielsaidi.com/blog/2023/05/26/extending-the-swiftui-documentgroup-with-more-features" rel="alternate" type="text/html" title="Extending the SwiftUI DocumentGroup with more features" /><published>2023-05-26T06:00:00+00:00</published><updated>2023-05-26T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2023/05/26/extending-the-swiftui-documentgroup-with-more-features</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="documentgroup" /><summary type="html"><![CDATA[A DocumentGroup-based app can be used to edit documents and store them on a device, in the cloud, and in other apps. Still, it’s quite limited when it comes to customization. Let’s see how to extend it!]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/23/0526/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/23/0526/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">An App Group roller coaster ride</title><link href="https://danielsaidi.com/blog/2023/05/17/an-app-group-roller-coaster-ride" rel="alternate" type="text/html" title="An App Group roller coaster ride" /><published>2023-05-17T06:00:00+00:00</published><updated>2023-05-17T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2023/05/17/an-app-group-roller-coaster-ride</id><author><name>Daniel Saidi</name></author><category term="swift" /><category term="swiftui" /><summary type="html"><![CDATA[I’ve been struggling with a random bug when using an App Group to sync data between an app and a keyboard extension. The explanation: a combination of human error and Xcode.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/23/0517/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/23/0517/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Deep Dish Swift - Day 3</title><link href="https://danielsaidi.com/blog/2023/05/02/deep-dish-swift-day-3" rel="alternate" type="text/html" title="Deep Dish Swift - Day 3" /><published>2023-05-02T06:00:00+00:00</published><updated>2023-05-02T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2023/05/02/deep-dish-swift-day-3</id><author><name>Daniel Saidi</name></author><category term="conferences" /><summary type="html"><![CDATA[Deep Dish Swift flew by and suddenly, the third and final day was here…way to soon. I’m impressed by the scale of this first edition, and hope there will be a second one next year.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/headers/deepdish.png" /><media:content medium="image" url="https://danielsaidi.com/assets/headers/deepdish.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Deep Dish Swift - Day 2</title><link href="https://danielsaidi.com/blog/2023/05/01/deep-dish-swift-day-2" rel="alternate" type="text/html" title="Deep Dish Swift - Day 2" /><published>2023-05-01T06:00:00+00:00</published><updated>2023-05-01T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2023/05/01/deep-dish-swift-day-2</id><author><name>Daniel Saidi</name></author><category term="conferences" /><summary type="html"><![CDATA[Deep Dish Swift Day 1 was one afternoon filled with amazing talks and getting the chance to meet many people from the community. Let’s get Day 2 going.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/headers/deepdish.png" /><media:content medium="image" url="https://danielsaidi.com/assets/headers/deepdish.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Deep Dish Swift - Day 1</title><link href="https://danielsaidi.com/blog/2023/04/30/deep-dish-swift-day-1" rel="alternate" type="text/html" title="Deep Dish Swift - Day 1" /><published>2023-04-30T06:00:00+00:00</published><updated>2023-04-30T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2023/04/30/deep-dish-swift-day-1</id><author><name>Daniel Saidi</name></author><category term="conferences" /><summary type="html"><![CDATA[2023 flew by and Deep Dish Swift suddenly happened! This is a summary of the first indie dev day. The talks are not recorded, so invite the speakers to your conference.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/headers/deepdish.png" /><media:content medium="image" url="https://danielsaidi.com/assets/headers/deepdish.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Group and sort collections in Swift like a pro</title><link href="https://danielsaidi.com/blog/2023/04/01/group-and-sort-swift-collections-like-a-pro" rel="alternate" type="text/html" title="Group and sort collections in Swift like a pro" /><published>2023-04-01T06:00:00+00:00</published><updated>2023-04-01T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2023/04/01/group-and-sort-swift-collections-like-a-pro</id><author><name>Daniel Saidi</name></author><category term="swift" /><summary type="html"><![CDATA[Swift provides powerful ways to group and sort collections. Let’s take a look at some ways to do this and how to change the sort logic a bit.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/23/0401/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/23/0401/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Sort git tags like a pro</title><link href="https://danielsaidi.com/blog/2023/03/26/sort-git-tags-like-a-pro" rel="alternate" type="text/html" title="Sort git tags like a pro" /><published>2023-03-26T06:00:00+00:00</published><updated>2023-03-26T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2023/03/26/sort-git-tags-like-a-pro</id><author><name>Daniel Saidi</name></author><category term="git" /><summary type="html"><![CDATA[If you like me use semantic versioning and have projects with a gazillion version tags, it’s nice to be able sort the tags in various ways. Let’s see how to sort Git tags like a pro.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/23/0326/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/23/0326/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Handling status bar color scheme and visibility in SwiftUI</title><link href="https://danielsaidi.com/blog/2023/03/14/handling-status-bar-color-scheme-and-visibility-in-swiftui" rel="alternate" type="text/html" title="Handling status bar color scheme and visibility in SwiftUI" /><published>2023-03-14T06:00:00+00:00</published><updated>2023-03-14T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2023/03/14/handling-status-bar-color-scheme-and-visibility-in-swiftui</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="scrollview" /><summary type="html"><![CDATA[As we’ve previously looked at how to implement offset tracking and stretchable and sticky headers for SwiftUI scroll views, let’s look at how to handle status bar tint and visibility.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/23/0314/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/23/0314/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Adding a sticky header to a SwiftUI ScrollView</title><link href="https://danielsaidi.com/blog/2023/02/09/adding-a-sticky-header-to-a-swiftui-scroll-view" rel="alternate" type="text/html" title="Adding a sticky header to a SwiftUI ScrollView" /><published>2023-02-09T10:00:00+00:00</published><updated>2023-02-09T10:00:00+00:00</updated><id>https://danielsaidi.com/blog/2023/02/09/adding-a-sticky-header-to-a-swiftui-scroll-view</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="scrollview" /><summary type="html"><![CDATA[As we’ve previously looked at how to implement offset tracking and stretchable headers for SwiftUI scroll views, let’s combine them to implement a stretchy, sticky scroll view header.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/23/0209/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/23/0209/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Adding scroll offset tracking to a SwiftUI ScrollView</title><link href="https://danielsaidi.com/blog/2023/02/06/adding-scroll-offset-tracking-to-a-swiftui-scroll-view" rel="alternate" type="text/html" title="Adding scroll offset tracking to a SwiftUI ScrollView" /><published>2023-02-06T08:00:00+00:00</published><updated>2023-02-06T08:00:00+00:00</updated><id>https://danielsaidi.com/blog/2023/02/06/adding-scroll-offset-tracking-to-a-swiftui-scroll-view</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="scrollview" /><summary type="html"><![CDATA[The SwiftUI ScrollView is currently quite limited in functionality, and will for instance not let us detect the current scroll offset. Let’s take s look at how to add offset tracking to it.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/23/0206/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/23/0206/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Adding a stretchable header to a SwiftUI ScrollView</title><link href="https://danielsaidi.com/blog/2023/02/05/adding-a-stretchable-header-to-a-swiftui-scroll-view" rel="alternate" type="text/html" title="Adding a stretchable header to a SwiftUI ScrollView" /><published>2023-02-05T10:00:00+00:00</published><updated>2023-02-05T10:00:00+00:00</updated><id>https://danielsaidi.com/blog/2023/02/05/adding-a-stretchable-header-to-a-swiftui-scroll-view</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="scrollview" /><summary type="html"><![CDATA[Many iOS apps have screens where the header view stretches out when you pull down the screen. In this post, let’s look at how to implement such a header view in SwiftUI.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/23/0205/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/23/0205/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Mimicking the iOS system notification in SwiftUI</title><link href="https://danielsaidi.com/blog/2023/01/17/mimicking-the-ios-system-notification-in-swiftui" rel="alternate" type="text/html" title="Mimicking the iOS system notification in SwiftUI" /><published>2023-01-17T08:00:00+00:00</published><updated>2023-01-17T08:00:00+00:00</updated><id>https://danielsaidi.com/blog/2023/01/17/mimicking-the-ios-system-notification-in-swiftui</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="sdks" /><summary type="html"><![CDATA[In this post, I’ll show how you can use the SystemNotificaton open-source library to mimic iOS system notifications in your SwiftUI apps.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/headers/systemnotification.png" /><media:content medium="image" url="https://danielsaidi.com/assets/headers/systemnotification.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Removing extra back button in DocumentGroup navigation bar</title><link href="https://danielsaidi.com/blog/2022/12/10/removing-extra-back-button-in-documentgroup-navigation-bar" rel="alternate" type="text/html" title="Removing extra back button in DocumentGroup navigation bar" /><published>2022-12-10T08:00:00+00:00</published><updated>2022-12-10T08:00:00+00:00</updated><id>https://danielsaidi.com/blog/2022/12/10/removing-extra-back-button-in-documentgroup-navigation-bar</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="documentgroup" /><summary type="html"><![CDATA[If you are building DocumentGroup-based apps in SwiftUI, you may have noticed that apps that worked fine in Xcode 15 now show two back buttons when being built with Xcode 16.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/header.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/header.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Applying complex gestures to a SwiftUI view</title><link href="https://danielsaidi.com/blog/2022/11/24/applying-complex-gestures-to-a-swiftui-view" rel="alternate" type="text/html" title="Applying complex gestures to a SwiftUI view" /><published>2022-11-24T08:00:00+00:00</published><updated>2022-11-24T08:00:00+00:00</updated><id>https://danielsaidi.com/blog/2022/11/24/applying-complex-gestures-to-a-swiftui-view</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="gestures" /><summary type="html"><![CDATA[As we saw in last week’s post, gestures in a ScrollView are complicated, since they can block the scrolling. Without a scroll view, things become a lot easier. Let’s take a look.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/header.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/header.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Using complex gestures in a SwiftUI ScrollView</title><link href="https://danielsaidi.com/blog/2022/11/16/using-complex-gestures-in-a-scroll-view" rel="alternate" type="text/html" title="Using complex gestures in a SwiftUI ScrollView" /><published>2022-11-16T08:00:00+00:00</published><updated>2022-11-16T08:00:00+00:00</updated><id>https://danielsaidi.com/blog/2022/11/16/using-complex-gestures-in-a-scroll-view</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="gestures" /><summary type="html"><![CDATA[SwiftUI gestures are complicated, since they can block the ScrollView gestures. Let’s look at a way to implement rich view gestures in a way that doesn’t block the scrolling.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/header.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/header.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Introducing LicenseKit</title><link href="https://danielsaidi.com/blog/2022/11/09/introducing-license-kit" rel="alternate" type="text/html" title="Introducing LicenseKit" /><published>2022-11-09T08:00:00+00:00</published><updated>2022-11-09T08:00:00+00:00</updated><id>https://danielsaidi.com/blog/2022/11/09/introducing-license-kit</id><author><name>Daniel Saidi</name></author><category term="swift" /><category term="sdks" /><category term="licenses" /><summary type="html"><![CDATA[When building closed-source software, you must protect your source code as well as the binaries themselves. One way to do this is with software licenses. This is why I’m excited to introduce LicenseKit - an SDK that protects your software with commercial licenses.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/sdks/licensekit-header.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/sdks/licensekit-header.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Rewriting Wally for iOS 16 and SwiftUI 4</title><link href="https://danielsaidi.com/blog/2022/09/19/rewriting-wally-for-ios-16-and-swiftui-4" rel="alternate" type="text/html" title="Rewriting Wally for iOS 16 and SwiftUI 4" /><published>2022-09-19T00:00:00+00:00</published><updated>2022-09-19T00:00:00+00:00</updated><id>https://danielsaidi.com/blog/2022/09/19/rewriting-wally-for-ios-16-and-swiftui-4</id><author><name>Daniel Saidi</name></author><category term="apps" /><category term="swiftui" /><category term="spm" /><category term="testing" /><category term="storekit" /><summary type="html"><![CDATA[I’m about to release a brand new version of Wally, which was the first app I ever made for iOS 10+ years ago. Wally 4 has been rewritten for iOS 16, using SwiftUI 4.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/22/0919/devices-leather.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/22/0919/devices-leather.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">AI-based image generation with DALL·E, Stable Diffusion and Promptbase</title><link href="https://danielsaidi.com/blog/2022/09/03/ai-based-image-generation-dalle-stable-diffusion-and-promptbase" rel="alternate" type="text/html" title="AI-based image generation with DALL·E, Stable Diffusion and Promptbase" /><published>2022-09-03T00:00:00+00:00</published><updated>2022-09-03T00:00:00+00:00</updated><id>https://danielsaidi.com/blog/2022/09/03/ai-based-image-generation-dalle-stable-diffusion-and-promptbase</id><author><name>Daniel Saidi</name></author><category term="ai" /><summary type="html"><![CDATA[I’m a bit late to the AI party, but just wanted to write down some thoughts about DALL·E 2, Stable Diffusion and the ecosystems of services that follow, like PromptBase.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://i.imgur.com/06D3jgk.png" /><media:content medium="image" url="https://i.imgur.com/06D3jgk.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Using slugified and style-based tags in SwiftUI</title><link href="https://danielsaidi.com/blog/2022/08/19/using-slugified-and-style-based-tags-in-swiftui" rel="alternate" type="text/html" title="Using slugified and style-based tags in SwiftUI" /><published>2022-08-19T00:00:00+00:00</published><updated>2022-08-19T00:00:00+00:00</updated><id>https://danielsaidi.com/blog/2022/08/19/using-slugified-and-style-based-tags-in-swiftui</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="tagging" /><summary type="html"><![CDATA[As I’m rewriting an old app from scratch, I’m adding content tagging to it. For reusability, I’ve put all tag-specific logic in a new library called TagKit. Let’s take a look!]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/headers/tagkit.png" /><media:content medium="image" url="https://danielsaidi.com/assets/headers/tagkit.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Getting started with the SwiftUI NavigationSplitView</title><link href="https://danielsaidi.com/blog/2022/08/08/getting-started-with-the-SwiftUI-navigation-split-view" rel="alternate" type="text/html" title="Getting started with the SwiftUI NavigationSplitView" /><published>2022-08-08T06:00:00+00:00</published><updated>2022-08-08T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2022/08/08/getting-started-with-the-SwiftUI-navigation-split-view</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><summary type="html"><![CDATA[SwiftUI 4 adds a new NavigationSplitView component that simplifies creating rich sidebar-based experiences on iPad and macOS, while scaling it down on iPhone. Let’s take a look!]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/header.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/header.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Conditionally searchable SwiftUI views</title><link href="https://danielsaidi.com/blog/2022/08/03/conditionally-searchable-swiftui-views" rel="alternate" type="text/html" title="Conditionally searchable SwiftUI views" /><published>2022-08-03T06:00:00+00:00</published><updated>2022-08-03T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2022/08/03/conditionally-searchable-swiftui-views</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="searchable" /><summary type="html"><![CDATA[SwiftUI 3 adds a searchable view modifier that makes it possible to add a search field to any view. In this post, let’s take a look at how to make it (and other modifiers) conditional.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/header.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/header.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Removing the iOS home indicator in SwiftUI</title><link href="https://danielsaidi.com/blog/2022/08/01/removing-the-home-indicator-in-swiftui" rel="alternate" type="text/html" title="Removing the iOS home indicator in SwiftUI" /><published>2022-08-01T06:00:00+00:00</published><updated>2022-08-01T06:00:00+00:00</updated><id>https://danielsaidi.com/blog/2022/08/01/removing-the-home-indicator-in-swiftui</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><summary type="html"><![CDATA[In SwiftUI 4 &amp; iOS 16, you will finally be able to hide the home indicator on iPhone &amp; iPad devices that don’t have a home button, without resorting to UIKit-based hacks.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/header.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/header.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Multi-platform image resizing</title><link href="https://danielsaidi.com/blog/2022/06/29/multiplatform-image-resizing" rel="alternate" type="text/html" title="Multi-platform image resizing" /><published>2022-06-29T09:00:00+00:00</published><updated>2022-06-29T09:00:00+00:00</updated><id>https://danielsaidi.com/blog/2022/06/29/multiplatform-image-resizing</id><author><name>Daniel Saidi</name></author><category term="swift" /><category term="multi-platform" /><category term="images" /><summary type="html"><![CDATA[In this post, let’s take a look at how to resize images in UIKit &amp; AppKit. The result will work on iOS, macOS, tvOS &amp; watchOS and lets us use the the same APIs on all platforms.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/header.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/header.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Using QuickLook in SwiftUI</title><link href="https://danielsaidi.com/blog/2022/06/27/using-quicklook-with-swiftui" rel="alternate" type="text/html" title="Using QuickLook in SwiftUI" /><published>2022-06-27T08:00:00+00:00</published><updated>2022-06-27T08:00:00+00:00</updated><id>https://danielsaidi.com/blog/2022/06/27/using-quicklook-with-swiftui</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><summary type="html"><![CDATA[SwiftUI is growing with every release, and new amazing features keep on arriving. Today, let’s take a quick look at QuickLook!]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/header.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/header.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Introducing StoreKitPlus</title><link href="https://danielsaidi.com/blog/2022/06/24/introducing-storekitplus" rel="alternate" type="text/html" title="Introducing StoreKitPlus" /><published>2022-06-24T08:00:00+00:00</published><updated>2022-06-24T08:00:00+00:00</updated><id>https://danielsaidi.com/blog/2022/06/24/introducing-storekitplus</id><author><name>Daniel Saidi</name></author><category term="swift" /><category term="sdks" /><category term="storekit" /><summary type="html"><![CDATA[In this post, let’s take a look at StoreKitPlus, which adds extra functionality for working with StoreKit 2 to make it easier to use StoreKit in SwiftUI.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/headers/storekitplus.png" /><media:content medium="image" url="https://danielsaidi.com/assets/headers/storekitplus.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Backporting the SwiftUI 4 ImageRenderer to iOS 13</title><link href="https://danielsaidi.com/blog/2022/06/22/backporting-the-new-swiftui-imagerenderer-to-ios13" rel="alternate" type="text/html" title="Backporting the SwiftUI 4 ImageRenderer to iOS 13" /><published>2022-06-22T08:00:00+00:00</published><updated>2022-06-22T08:00:00+00:00</updated><id>https://danielsaidi.com/blog/2022/06/22/backporting-the-new-swiftui-imagerenderer-to-ios13</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="sdks" /><summary type="html"><![CDATA[SwiftUI 4 introduces a new ImageRenderer that can render any SwiftUI view as an image in iOS 16, macOS 13, tvOS 16 &amp; watchOS 9. Let’s look at how to backport it to iOS 13.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/header.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/header.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Undimmed presentation detents in SwiftUI</title><link href="https://danielsaidi.com/blog/2022/06/21/undimmed-presentation-detents-in-swiftui" rel="alternate" type="text/html" title="Undimmed presentation detents in SwiftUI" /><published>2022-06-21T08:00:00+00:00</published><updated>2022-06-21T08:00:00+00:00</updated><id>https://danielsaidi.com/blog/2022/06/21/undimmed-presentation-detents-in-swiftui</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><summary type="html"><![CDATA[SwiftUI 4 adds a bunch of great features, such as custom sized sheets. However, sheets will always dim the underlying view, even in smaller sizes. Let’s fix that.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/header.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/header.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Using the SwiftUI 4 ImageRenderer</title><link href="https://danielsaidi.com/blog/2022/06/20/using-the-swiftui-imagerenderer" rel="alternate" type="text/html" title="Using the SwiftUI 4 ImageRenderer" /><published>2022-06-20T08:00:00+00:00</published><updated>2022-06-20T08:00:00+00:00</updated><id>https://danielsaidi.com/blog/2022/06/20/using-the-swiftui-imagerenderer</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="sdks" /><summary type="html"><![CDATA[SwiftUI 4 introduces a new ImageRenderer that can be used to render any SwiftUI view as an image in iOS 16, macOS 13, tvOS 16 &amp; watchOS 9. Let’s take a look at how it works.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/header.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/header.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">SF Symbols 4 variable colors</title><link href="https://danielsaidi.com/blog/2022/06/17/sf-symbols-4-variable-colors" rel="alternate" type="text/html" title="SF Symbols 4 variable colors" /><published>2022-06-17T01:00:00+00:00</published><updated>2022-06-17T01:00:00+00:00</updated><id>https://danielsaidi.com/blog/2022/06/17/sf-symbols-4-variable-colors</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="sf-symbols" /><category term="colors" /><summary type="html"><![CDATA[SF Symbols is an amazing icon library, designed to integrate seamlessly with the various Apple platforms. SF Symbols 4 adds even more things. Let’s take a look at variable colors!]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/22/0617/image.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/22/0617/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Custom sheet sizes in SwiftUI</title><link href="https://danielsaidi.com/blog/2022/06/15/swiftui-4-custom-sheet-sizes" rel="alternate" type="text/html" title="Custom sheet sizes in SwiftUI" /><published>2022-06-15T01:00:00+00:00</published><updated>2022-06-15T01:00:00+00:00</updated><id>https://danielsaidi.com/blog/2022/06/15/swiftui-4-custom-sheet-sizes</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><summary type="html"><![CDATA[WWDC’22 introduced many amazing additions to SwiftUI, of which many will render many 3rd party libraries obsolete. One such is SwiftUI’s new support for custom sheet sizes.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/header.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/header.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Building a rich text editor for UIKit, AppKit and SwiftUI</title><link href="https://danielsaidi.com/blog/2022/06/13/building-a-rich-text-editor-for-uikit-appkit-and-swiftui" rel="alternate" type="text/html" title="Building a rich text editor for UIKit, AppKit and SwiftUI" /><published>2022-06-13T01:00:00+00:00</published><updated>2022-06-13T01:00:00+00:00</updated><id>https://danielsaidi.com/blog/2022/06/13/building-a-rich-text-editor-for-uikit-appkit-and-swiftui</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="sdks" /><category term="rich-text" /><summary type="html"><![CDATA[In this article, we’ll look at how to extend the rich text support in UIKit, AppKit &amp; SwiftUI by extending native types, adding new types to bridge the different platforms, etc.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/header.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/header.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">SwiftUI scrolling finally works in tvOS 16</title><link href="https://danielsaidi.com/blog/2022/06/08/swiftui-scrolling-finally-works-on-tvos" rel="alternate" type="text/html" title="SwiftUI scrolling finally works in tvOS 16" /><published>2022-06-08T01:00:00+00:00</published><updated>2022-06-08T01:00:00+00:00</updated><id>https://danielsaidi.com/blog/2022/06/08/swiftui-scrolling-finally-works-on-tvos</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="tvos" /><summary type="html"><![CDATA[To all of you who have struggled with SwiftUI and slow scrolling on tvOS - happy news! With Xcode 14 and SwiftUI 4, scrolling finally seems to work in tvOS 16.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/22/0608/apple-tv.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/22/0608/apple-tv.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">A better way to extend types</title><link href="https://danielsaidi.com/blog/2022/06/06/a-better-way-to-extend-types" rel="alternate" type="text/html" title="A better way to extend types" /><published>2022-06-06T10:00:00+00:00</published><updated>2022-06-06T10:00:00+00:00</updated><id>https://danielsaidi.com/blog/2022/06/06/a-better-way-to-extend-types</id><author><name>Daniel Saidi</name></author><category term="swift" /><category term="pasteboard" /><category term="multi-platform" /><summary type="html"><![CDATA[In this post, let’s take a look at a better way to extend types in Swift, to make extensions more versatile and discoverable.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/header.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/header.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Getting images from the AppKit pasteboard</title><link href="https://danielsaidi.com/blog/2022/06/03/getting-images-from-the-appkit-pasteboard" rel="alternate" type="text/html" title="Getting images from the AppKit pasteboard" /><published>2022-06-03T08:00:00+00:00</published><updated>2022-06-03T08:00:00+00:00</updated><id>https://danielsaidi.com/blog/2022/06/03/getting-images-from-the-appkit-pasteboard</id><author><name>Daniel Saidi</name></author><category term="swift" /><category term="pasteboard" /><category term="multi-platform" /><summary type="html"><![CDATA[In this post, we’ll take a look at how to fetch images from the AppKit NSPasteboard, which behaves a bit differently than the UIKit UIPasteboard.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/header.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/header.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Making Swift package assets work in SwiftUI previews</title><link href="https://danielsaidi.com/blog/2022/06/01/making-swift-package-assets-work-in-swiftui-previews" rel="alternate" type="text/html" title="Making Swift package assets work in SwiftUI previews" /><published>2022-06-01T01:00:00+00:00</published><updated>2022-06-01T01:00:00+00:00</updated><id>https://danielsaidi.com/blog/2022/06/01/making-swift-package-assets-work-in-swiftui-previews</id><author><name>Daniel Saidi</name></author><category term="swiftui" /><category term="spm" /><summary type="html"><![CDATA[In this post, we’ll take a look at how we can get colors, images and other assets that are defined in Swift packages to work in external SwiftUI previews.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://danielsaidi.com/assets/blog/header.jpg" /><media:content medium="image" url="https://danielsaidi.com/assets/blog/header.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>