56,966 blogs · [ { "id": "01a0b0bd-85e7-734d-a38b-776697985b1d", "title": "Compressing images and PDFs from the Finder context menu", "url": "https://danielsaidi.com/blog/2026/09/15/using-automator-workflows-to-compress-images-and-pdfs", "published_at": "2026-09-15T05:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb8f19182c2", "title": "Using LicenseKit to Protect Closed Software With Commercial Licenses", "url": "https://danielsaidi.com/blog/2026/09/04/using-licensekit-to-protect-your-software", "published_at": "2026-09-04T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb8f234cbbb", "title": "Custom keyboards and mental health research", "url": "https://danielsaidi.com/blog/2026/09/04/custom-keyboards-and-mental-health-research", "published_at": "2026-09-04T05:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb8f295962e", "title": "Some things are never truly lost - How git recovered two weeks of deleted work", "url": "https://danielsaidi.com/blog/2026/08/27/some-things-are-never-truly-lost", "published_at": "2026-08-27T05:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb8f35d4599", "title": "Wally 7", "url": "https://danielsaidi.com/blog/2026/08/20/wally-7", "published_at": "2026-08-20T07:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb8f3b87e12", "title": "Introducing ListKit - an open-source library for working with lists in SwiftUI", "url": "https://danielsaidi.com/blog/2026/06/08/introducing-listkit", "published_at": "2026-06-08T07:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb8f45bd5c3", "title": "Making a SwiftUI sheet automatically size to fit its content", "url": "https://danielsaidi.com/blog/2026/05/22/making-a-swiftui-sheet-automatically-size-to-fit-its-content", "published_at": "2026-05-22T07:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb8f4f8fe15", "title": "How to easily present alerts for async errors in SwiftUI", "url": "https://danielsaidi.com/blog/2026/05/20/how-to-easily-present-alerts-for-async-errors-in-swiftui", "published_at": "2026-05-20T07:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb8f58a07a6", "title": "Using Xcode MCP with Claude Code", "url": "https://danielsaidi.com/blog/2026/04/30/using-xcode-mcp-with-claude-code", "published_at": "2026-04-30T07:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb8f631e1cd", "title": "Detecting text in images with the Vision framework", "url": "https://danielsaidi.com/blog/2026/01/10/detecting-text-in-images-with-the-vision-framework", "published_at": "2026-01-10T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb8f6e45328", "title": "KeyboardKit 10.2 - New In-Keyboard Dictation Engine", "url": "https://danielsaidi.com/blog/2026/01/09/keyboardkit-10-2", "published_at": "2026-01-09T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb8f7a8cfb0", "title": "Localizing Swift Packages with String Catalogs", "url": "https://danielsaidi.com/blog/2025/12/14/localizing-swift-packages-with-string-catalogs", "published_at": "2025-12-14T07:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb8f8702eb4", "title": "A Better Way to Localize Swift Packages with Xcode String Catalogs", "url": "https://danielsaidi.com/blog/2025/12/02/a-better-way-to-localize-swift-packages-with-xcode-string-catalogs", "published_at": "2025-12-02T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb8f8e633d2", "title": "Improving Swift Package Scripts with GitHub Actions workflows", "url": "https://danielsaidi.com/blog/2025/11/26/improving-swift-package-scripts-with-github-action-workflows", "published_at": "2025-11-26T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb8f93e670a", "title": "Building Closed-Source Binaries with GitHub Actions", "url": "https://danielsaidi.com/blog/2025/11/09/building-closed-source-binaries-with-github-actions", "published_at": "2025-11-09T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb8f9d43252", "title": "Power-Up SwiftUI Form Validation with Key Paths", "url": "https://danielsaidi.com/blog/2025/10/24/power-up-swiftui-form-validation-with-key-paths", "published_at": "2025-10-24T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb8fa3f479a", "title": "Adding dSYMs from a closed-source Swift SDK to an app", "url": "https://danielsaidi.com/blog/2025/10/19/adding-dsyms-from-a-closed-source-sdk-to-your-app", "published_at": "2025-10-19T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb8fb155de2", "title": "SwiftLeeds - Questions & Answers", "url": "https://danielsaidi.com/blog/2025/10/11/swiftleeds-questions-and-answers", "published_at": "2025-10-11T07:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb8fbedb2e8", "title": "KeyboardKit 10", "url": "https://danielsaidi.com/blog/2025/08/31/keyboardkit-10-developer-preview", "published_at": "2025-08-31T07:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb8fc43e66c", "title": "Creating amazing loading animations with SF Symbols.", "url": "https://danielsaidi.com/blog/2025/07/24/creating-amazing-loading-animations-with-sf-symbols", "published_at": "2025-07-24T07:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb8fc5435d3", "title": "Using VideoKit to add video to your SwiftUI app", "url": "https://danielsaidi.com/blog/2025/06/19/using-videokit-to-add-video-to-your-swiftui-app", "published_at": "2025-06-19T07:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb8fd32ff40", "title": "WebView is Finally Coming to SwiftUI", "url": "https://danielsaidi.com/blog/2025/06/10/webview-is-finally-coming-to-swiftui", "published_at": "2025-06-10T09:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb8fddcfe30", "title": "Introducing PickerKit for SwiftUI", "url": "https://danielsaidi.com/blog/2025/06/10/introducing-pickerkit-for-swiftui", "published_at": "2025-06-10T07:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb8fe89506b", "title": "Using AI and Cursor to localize Xcode String Catalogs", "url": "https://danielsaidi.com/blog/2025/06/08/using-ai-and-cursor-to-localize-xcode-string-catalogs", "published_at": "2025-06-08T07:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb8ff18c184", "title": "One Number to Rule Them All: Why I’d Love Apple’s Unified OS Versioning", "url": "https://danielsaidi.com/blog/2025/06/08/one-number-to-rule-them-all-why-id-love-unified-os-versioning-from-apple", "published_at": "2025-06-08T07:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb8ff9d470c", "title": "A Clarified Blog Purpose", "url": "https://danielsaidi.com/blog/2025/06/01/a-clarified-blog-purpose", "published_at": "2025-06-01T07:30:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb8ffde8484", "title": "Introducing FlipKit - a flippin’ good library for SwiftUI", "url": "https://danielsaidi.com/blog/2025/06/01/introducing-flipkit-for-swiftui", "published_at": "2025-06-01T07:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb900cacce0", "title": "Swift Enums vs Structs - Picking the Best Tool for the Job", "url": "https://danielsaidi.com/blog/2025/05/26/swift-enums-vs-structs", "published_at": "2025-05-26T07:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb901127b9c", "title": "Adding dependencies to binary Swift packages", "url": "https://danielsaidi.com/blog/2025/05/02/adding-dependencies-to-binary-swift-packages", "published_at": "2025-05-02T07:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb901e05843", "title": "Extracting more value from your apps", "url": "https://danielsaidi.com/blog/2025/04/23/extracting-more-value-from-your-apps", "published_at": "2025-04-23T07:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb9024b3613", "title": "Trying out the BenQ ScreenBar Pro", "url": "https://danielsaidi.com/blog/2025/04/20/trying-out-the-benq-screenbar-pro", "published_at": "2025-04-20T07:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb90319e425", "title": "Supercharging SwiftUI Text with Dynamic Content Styling", "url": "https://danielsaidi.com/blog/2025/04/08/supercharging-swiftui-text-with-dynamic-content-styling", "published_at": "2025-04-08T07:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb903ed05e4", "title": "I’m doing a talk at iOSKonf25", "url": "https://danielsaidi.com/blog/2025/03/25/im-doing-a-talk-at-ioskonf25", "published_at": "2025-03-25T07:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb903f44e35", "title": "Wally - A 13-Year Journey", "url": "https://danielsaidi.com/blog/2025/03/21/wally-a-13-year-journey", "published_at": "2025-03-21T07:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb9041f15d8", "title": "When Tech Giants Bow: Reconsidering My Relationship with US Tech", "url": "https://danielsaidi.com/blog/2025/02/17/when-tech-giants-bow-reconsidering-my-relationship-with-us-tech", "published_at": "2025-02-17T07:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb90503c816", "title": "Making macOS Terminal use case-insensitive autocomplete", "url": "https://danielsaidi.com/blog/2025/01/16/making-macos-terminal-use-case-insensitive-autocomplete", "published_at": "2025-01-16T07:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb905f730dc", "title": "Replacing EnvironmentKit with the new SwiftUI Entry macro", "url": "https://danielsaidi.com/blog/2025/01/11/replacing-environmentkit-with-the-entry-macro", "published_at": "2025-01-11T07:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb906e3aeaf", "title": "Removing Disqus comments from the blog", "url": "https://danielsaidi.com/blog/2025/01/08/disabling-disqus-comments-in-the-blog", "published_at": "2025-01-08T07:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb9070bf951", "title": "Creating a debounced search context for performant SwiftUI searches", "url": "https://danielsaidi.com/blog/2025/01/08/creating-a-debounced-search-context-for-performant-swiftui-searches", "published_at": "2025-01-08T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb90752248e", "title": "Creating tiny utility apps with SwiftUI Previews", "url": "https://danielsaidi.com/blog/2025/01/04/creating-tiny-utility-apps-with-swiftui-previews-copy", "published_at": "2025-01-04T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb90809bf8d", "title": "Creating a SwiftUI text view with tappable links", "url": "https://danielsaidi.com/blog/2024/12/18/creating-a-swiftui-text-view-with-tappable-links", "published_at": "2024-12-18T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb908747f89", "title": "Xcode stops fetching Swift packages", "url": "https://danielsaidi.com/blog/2024/11/04/xcode-stops-fetching-swift-packages", "published_at": "2024-11-04T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb908fb77b6", "title": "Replacing Fastlane with Shell scripts", "url": "https://danielsaidi.com/blog/2024/10/03/replacing-fastlane-with-shell-scripts", "published_at": "2024-10-03T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb9099f1614", "title": "New GestureButton open-source project", "url": "https://danielsaidi.com/blog/2024/09/02/new-gesture-button-project", "published_at": "2024-09-02T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb909f94585", "title": "The (too?) complex state of Emojis in 2024", "url": "https://danielsaidi.com/blog/2024/08/13/the-too-complex-state-of-the-emoji-standard-in-2024", "published_at": "2024-08-13T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb90abd9a84", "title": "An easier way to use standard buttons types in SwiftUI", "url": "https://danielsaidi.com/blog/2024/04/30/an-easier-way-to-use-standard-button-types-in-swiftui", "published_at": "2024-04-30T04:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb90ae25bc0", "title": "Creating custom environment values in SwiftUI", "url": "https://danielsaidi.com/blog/2024/04/14/creating-custom-environment-values-in-swiftui", "published_at": "2024-04-14T04:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb90bc3f69d", "title": "Creating a custom label style that tints the label icon", "url": "https://danielsaidi.com/blog/2024/04/04/creating-a-custom-swiftui-labelstyle-that-tints-the-label-icon", "published_at": "2024-04-04T04:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb90c125038", "title": "Setting up a custom Swift Package file header", "url": "https://danielsaidi.com/blog/2024/03/28/setting-up-a-custom-swift-package-file-header", "published_at": "2024-03-28T04:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb90ca596da", "title": "Linking to native type extensions in DocC", "url": "https://danielsaidi.com/blog/2024/03/21/linking-to-native-type-extensions-in-docc", "published_at": "2024-03-21T04:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb90cb9e781", "title": "Publish DocC to GitHub Pages with GitHub Actions", "url": "https://danielsaidi.com/blog/2024/03/10/automatically-publish-docc-to-github-pages-with-github-actions", "published_at": "2024-03-10T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb90d5159c9", "title": "The power of inout parameters in Swift", "url": "https://danielsaidi.com/blog/2024/02/18/the-power-of-inout-parameters-in-swift", "published_at": "2024-02-18T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb90e0207f3", "title": "Custom Keyboard Extensions disappear in iOS 17.2 and later", "url": "https://danielsaidi.com/blog/2024/02/13/custom-keyboard-extensions-disappear-in-ios17", "published_at": "2024-02-13T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb90ede73c9", "title": "EmojiKit goes open-source", "url": "https://danielsaidi.com/blog/2024/02/02/emojikit-goes-open-source", "published_at": "2024-02-02T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb90fa585ef", "title": "Using ApiKit to integrate with a REST API", "url": "https://danielsaidi.com/blog/2024/01/17/using-apikit-to-model-an-api-and-fetch-data", "published_at": "2024-01-17T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb9102f28b4", "title": "Sunsetting the Goth & Metal Emoji Apps", "url": "https://danielsaidi.com/blog/2024/01/08/sunsetting-goth-and-metal-emoji", "published_at": "2024-01-08T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb9106c7dbc", "title": "Sunsetting my deck-based apps", "url": "https://danielsaidi.com/blog/2024/01/03/sunsetting-deck-based-apps", "published_at": "2024-01-03T08:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb910ea4adf", "title": "Unleashing Creativity in Coding - How Adobe Express Empowers Programmers", "url": "https://danielsaidi.com/blog/2024/01/02/adobe-express-unleashing-creativity-in-coding", "published_at": "2024-01-02T08:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb91187605f", "title": "Rejected - An Apple Developer Holiday Special", "url": "https://danielsaidi.com/blog/2023/12/22/rejected-an-apple-developer-holiday-special", "published_at": "2023-12-22T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb9125812d1", "title": "Implementing Quick Search with SwiftUI Searchable", "url": "https://danielsaidi.com/blog/2023/12/20/quick-search-with-swiftui-searchable", "published_at": "2023-12-20T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb912ff5922", "title": "Customizing the macOS About Panel in SwiftUI", "url": "https://danielsaidi.com/blog/2023/11/28/customizing-the-macos-about-panel-in-swiftui", "published_at": "2023-11-28T10:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb9130eb5af", "title": "Customizing the macOS menu bar in SwiftUI", "url": "https://danielsaidi.com/blog/2023/11/22/customizing-the-macos-menu-bar-in-swiftui", "published_at": "2023-11-22T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb9137c20e5", "title": "Reflections on failing to reach out", "url": "https://danielsaidi.com/blog/2023/11/08/reflections-on-failing-to-reach-out", "published_at": "2023-11-08T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb913df154b", "title": "Dismissing a multiline text field with the return key in SwiftUI", "url": "https://danielsaidi.com/blog/2023/09/15/dismissing-a-multiline-textfield-with-the-return-key-in-swiftui", "published_at": "2023-09-15T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb91486333c", "title": "Enabling drag reordering in lazy SwiftUI grids and stacks", "url": "https://danielsaidi.com/blog/2023/08/30/enabling-drag-reordering-in-swiftui-lazy-grids-and-stacks", "published_at": "2023-08-30T07:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb914fe1766", "title": "Cleaner grid initialization in SwiftUI", "url": "https://danielsaidi.com/blog/2023/08/29/cleaner-grid-initialization-in-swiftui", "published_at": "2023-08-29T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb914fea146", "title": "SwiftUI Menu gets incorrect list separator lines", "url": "https://danielsaidi.com/blog/2023/08/25/menu-gets-incorrect-list-separator-lines", "published_at": "2023-08-25T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb915620bcf", "title": "Storing Codable types in SwiftUI AppStorage", "url": "https://danielsaidi.com/blog/2023/08/23/storing-codable-types-in-swiftui-appstorage", "published_at": "2023-08-23T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb9161e344d", "title": "SwiftUI Prefers Semantics", "url": "https://danielsaidi.com/blog/2023/06/15/swiftui-prefers-semantics", "published_at": "2023-06-15T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb916650263", "title": "DeckKit Updates", "url": "https://danielsaidi.com/blog/2023/06/13/deckkit-updates", "published_at": "2023-06-13T08:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb9174253b7", "title": "SwiftUIKit Updates", "url": "https://danielsaidi.com/blog/2023/06/12/swiftuikit-updates", "published_at": "2023-06-12T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb917c08107", "title": "Vision Pro - so many questions", "url": "https://danielsaidi.com/blog/2023/06/05/vision-pro", "published_at": "2023-06-05T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb918613237", "title": "RichTextKit updates", "url": "https://danielsaidi.com/blog/2023/06/02/richtextkit-updates", "published_at": "2023-06-02T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb919322b45", "title": "Creating a bordered button group in SwiftUI", "url": "https://danielsaidi.com/blog/2023/06/01/creating-a-bordered-button-group-in-SwiftUI", "published_at": "2023-06-01T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb91a0bdecd", "title": "Extending the SwiftUI DocumentGroup with more features", "url": "https://danielsaidi.com/blog/2023/05/26/extending-the-swiftui-documentgroup-with-more-features", "published_at": "2023-05-26T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb91a3b615d", "title": "An App Group roller coaster ride", "url": "https://danielsaidi.com/blog/2023/05/17/an-app-group-roller-coaster-ride", "published_at": "2023-05-17T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb91a8bf091", "title": "Deep Dish Swift - Day 3", "url": "https://danielsaidi.com/blog/2023/05/02/deep-dish-swift-day-3", "published_at": "2023-05-02T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb91b1febf3", "title": "Deep Dish Swift - Day 2", "url": "https://danielsaidi.com/blog/2023/05/01/deep-dish-swift-day-2", "published_at": "2023-05-01T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb91c018037", "title": "Deep Dish Swift - Day 1", "url": "https://danielsaidi.com/blog/2023/04/30/deep-dish-swift-day-1", "published_at": "2023-04-30T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb91cb5bac2", "title": "Group and sort collections in Swift like a pro", "url": "https://danielsaidi.com/blog/2023/04/01/group-and-sort-swift-collections-like-a-pro", "published_at": "2023-04-01T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb91d4063c5", "title": "Sort git tags like a pro", "url": "https://danielsaidi.com/blog/2023/03/26/sort-git-tags-like-a-pro", "published_at": "2023-03-26T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb91e1dab4f", "title": "Handling status bar color scheme and visibility in SwiftUI", "url": "https://danielsaidi.com/blog/2023/03/14/handling-status-bar-color-scheme-and-visibility-in-swiftui", "published_at": "2023-03-14T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb91e6894d1", "title": "Adding a sticky header to a SwiftUI ScrollView", "url": "https://danielsaidi.com/blog/2023/02/09/adding-a-sticky-header-to-a-swiftui-scroll-view", "published_at": "2023-02-09T10:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb91ec30ea4", "title": "Adding scroll offset tracking to a SwiftUI ScrollView", "url": "https://danielsaidi.com/blog/2023/02/06/adding-scroll-offset-tracking-to-a-swiftui-scroll-view", "published_at": "2023-02-06T08:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb91f411f2b", "title": "Adding a stretchable header to a SwiftUI ScrollView", "url": "https://danielsaidi.com/blog/2023/02/05/adding-a-stretchable-header-to-a-swiftui-scroll-view", "published_at": "2023-02-05T10:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb91f5efd94", "title": "Mimicking the iOS system notification in SwiftUI", "url": "https://danielsaidi.com/blog/2023/01/17/mimicking-the-ios-system-notification-in-swiftui", "published_at": "2023-01-17T08:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb920116ea7", "title": "Removing extra back button in DocumentGroup navigation bar", "url": "https://danielsaidi.com/blog/2022/12/10/removing-extra-back-button-in-documentgroup-navigation-bar", "published_at": "2022-12-10T08:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb920be2e5e", "title": "Applying complex gestures to a SwiftUI view", "url": "https://danielsaidi.com/blog/2022/11/24/applying-complex-gestures-to-a-swiftui-view", "published_at": "2022-11-24T08:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb921ae2870", "title": "Using complex gestures in a SwiftUI ScrollView", "url": "https://danielsaidi.com/blog/2022/11/16/using-complex-gestures-in-a-scroll-view", "published_at": "2022-11-16T08:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb921db7ef7", "title": "Introducing LicenseKit", "url": "https://danielsaidi.com/blog/2022/11/09/introducing-license-kit", "published_at": "2022-11-09T08:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb92291e3bf", "title": "Rewriting Wally for iOS 16 and SwiftUI 4", "url": "https://danielsaidi.com/blog/2022/09/19/rewriting-wally-for-ios-16-and-swiftui-4", "published_at": "2022-09-19T00:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb922957086", "title": "AI-based image generation with DALL·E, Stable Diffusion and Promptbase", "url": "https://danielsaidi.com/blog/2022/09/03/ai-based-image-generation-dalle-stable-diffusion-and-promptbase", "published_at": "2022-09-03T00:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb922efce2a", "title": "Using slugified and style-based tags in SwiftUI", "url": "https://danielsaidi.com/blog/2022/08/19/using-slugified-and-style-based-tags-in-swiftui", "published_at": "2022-08-19T00:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb9235793e6", "title": "Getting started with the SwiftUI NavigationSplitView", "url": "https://danielsaidi.com/blog/2022/08/08/getting-started-with-the-SwiftUI-navigation-split-view", "published_at": "2022-08-08T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb9237946fd", "title": "Conditionally searchable SwiftUI views", "url": "https://danielsaidi.com/blog/2022/08/03/conditionally-searchable-swiftui-views", "published_at": "2022-08-03T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb9240b8f80", "title": "Removing the iOS home indicator in SwiftUI", "url": "https://danielsaidi.com/blog/2022/08/01/removing-the-home-indicator-in-swiftui", "published_at": "2022-08-01T06:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb924cb6b62", "title": "Multi-platform image resizing", "url": "https://danielsaidi.com/blog/2022/06/29/multiplatform-image-resizing", "published_at": "2022-06-29T09:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb925c9223a", "title": "Using QuickLook in SwiftUI", "url": "https://danielsaidi.com/blog/2022/06/27/using-quicklook-with-swiftui", "published_at": "2022-06-27T08:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb92606f250", "title": "Introducing StoreKitPlus", "url": "https://danielsaidi.com/blog/2022/06/24/introducing-storekitplus", "published_at": "2022-06-24T08:00:00+00:00" }, { "id": "01a08767-593b-728e-a339-0bb926c0a4ba", "title": "Backporting the SwiftUI 4 ImageRenderer to iOS 13", "url": "https://danielsaidi.com/blog/2022/06/22/backporting-the-new-swiftui-imagerenderer-to-ios13", "published_at": "2022-06-22T08:00:00+00:00" } ] posts Claim your blog
Back to danielsaidi.com
Blog · corpus.blog/blogs/danielsaidi.com/posts

danielsaidi.com

danielsaidi.com

2026

2025

2024

2023

2022