41554 blogs · [ { "id": "01a0876e-c758-7179-bcd0-d9e4e91264b2", "title": "Installing simulator runtimes from the command line", "url": "https://www.donnywals.com/installing-simulator-runtimes-from-the-command-line/", "published_at": "2026-06-09T13:49:17+00:00" }, { "id": "01a0876e-c758-7179-bcd0-d9e4e9ef94ec", "title": "How I use FlowDeck to let my AI agent build and run my apps", "url": "https://www.donnywals.com/how-i-use-flowdeck-to-let-my-ai-agent-build-and-run-my-apps/", "published_at": "2026-04-17T12:43:41+00:00" }, { "id": "01a0876e-c758-7179-bcd0-d9e4ea6df5e4", "title": "Setting up a delivery pipeline for your agentic iOS projects", "url": "https://www.donnywals.com/setting-up-a-delivery-pipeline-for-your-agentic-ios-projects/", "published_at": "2026-02-16T07:00:39+00:00" }, { "id": "01a0876e-c758-7179-bcd0-d9e4eb68b1d8", "title": "The importance of human touch in AI-driven development", "url": "https://www.donnywals.com/the-importance-of-human-touch-in-ai-driven-development/", "published_at": "2026-02-06T08:00:00+00:00" }, { "id": "01a0876e-c758-7179-bcd0-d9e4ebfdbe3f", "title": "Migrating an iOS app from Paid up Front to Freemium", "url": "https://www.donnywals.com/migrating-an-ios-app-from-paid-up-front-to-freemium/", "published_at": "2026-01-30T08:34:51+00:00" }, { "id": "01a0876e-c758-7179-bcd0-d9e4ec7aa126", "title": "A Deep Dive into SwiftData migrations", "url": "https://www.donnywals.com/a-deep-dive-into-swiftdata-migrations/", "published_at": "2026-01-19T12:23:36+00:00" }, { "id": "01a0876e-c758-7179-bcd0-d9e4ed112a34", "title": "A deep dive into Collections, Sequences, and Iterators in Swift", "url": "https://www.donnywals.com/a-deep-dive-into-collections-sequences-and-iterators-in-swift/", "published_at": "2025-11-05T11:49:20+00:00" }, { "id": "01a0876e-c758-7179-bcd0-d9e4ed21e03a", "title": "Using Observations to observe @Observable model properties", "url": "https://www.donnywals.com/using-observations-to-observe-observable-model-properties/", "published_at": "2025-09-24T11:27:53+00:00" }, { "id": "01a0876e-c758-7179-bcd0-d9e4eddce2a1", "title": "How to unwrap [weak self] in Swift Concurrency Tasks?", "url": "https://www.donnywals.com/how-to-use-weak-self-in-swift-concurrency-tasks/", "published_at": "2025-09-18T13:56:57+00:00" }, { "id": "01a0876e-c758-7179-bcd0-d9e4ede05c94", "title": "Should you opt-in to Swift 6.2’s Main Actor isolation?", "url": "https://www.donnywals.com/should-you-opt-in-to-swift-6-2s-main-actor-isolation/", "published_at": "2025-09-11T13:59:33+00:00" }, { "id": "01a0c508-c649-70e0-a93e-e72d665efa3e", "title": "What is Approachable Concurrency in Xcode 26?", "url": "https://www.donnywals.com/what-is-approachable-concurrency-in-xcode-26/", "published_at": "2025-07-09T11:00:33+00:00" }, { "id": "01a0c508-c649-70e0-a93e-e72d66d1cf89", "title": "Ternary operator in Swift explained", "url": "https://www.donnywals.com/ternary-expressions-in-swift-explained/", "published_at": "2025-07-07T18:26:19+00:00" }, { "id": "01a0c508-c649-70e0-a93e-e72d6723dc48", "title": "Supporting Universal Links on iOS", "url": "https://www.donnywals.com/supporting-universal-links-on-ios/", "published_at": "2025-07-04T10:02:51+00:00" }, { "id": "01a0c508-c649-70e0-a93e-e72d678536c2", "title": "Grouping Liquid Glass components using glassEffectUnion on iOS 26", "url": "https://www.donnywals.com/grouping-liquid-glass-components-using-glasseffectunion-on-ios-26/", "published_at": "2025-07-02T09:53:46+00:00" }, { "id": "01a0c508-c649-70e0-a93e-e72d68588ec6", "title": "Designing custom UI with Liquid Glass on iOS 26", "url": "https://www.donnywals.com/designing-custom-ui-with-liquid-glass-on-ios-26/", "published_at": "2025-07-01T18:27:48+00:00" }, { "id": "01a0c508-c649-70e0-a93e-e72d68d18925", "title": "Solving actor-isolated protocol conformance related errors in Swift 6.2", "url": "https://www.donnywals.com/solving-actor-isolated-protocol-conformance-related-errors-in-swift-6-2/", "published_at": "2025-06-27T15:08:23+00:00" }, { "id": "01a0c508-c649-70e0-a93e-e72d6941604c", "title": "What is @concurrent in Swift 6.2?", "url": "https://www.donnywals.com/what-is-concurrent-in-swift-6-2/", "published_at": "2025-06-23T10:29:31+00:00" }, { "id": "01a0c508-c649-70e0-a93e-e72d69674396", "title": "Exploring tab bars on iOS 26 with Liquid Glass", "url": "https://www.donnywals.com/exploring-tab-bars-on-ios-26-with-liquid-glass/", "published_at": "2025-06-19T11:31:50+00:00" }, { "id": "01a0c508-c649-70e0-a93e-e72d69c33394", "title": "Opting your app out of the Liquid Glass redesign with Xcode 26", "url": "https://www.donnywals.com/opting-your-app-out-of-the-liquid-glass-redesign-with-xcode-26/", "published_at": "2025-06-10T08:46:38+00:00" }, { "id": "01a0c508-c649-70e0-a93e-e72d6a157e4b", "title": "Setting default actor isolation in Xcode 26", "url": "https://www.donnywals.com/setting-default-actor-isolation-in-xcode-26/", "published_at": "2025-06-10T08:00:12+00:00" }, { "id": "01a0c519-0fd7-70a1-b9c8-629a3b624118", "title": "Exploring concurrency changes in Swift 6.2", "url": "https://www.donnywals.com/exploring-concurrency-changes-in-swift-6-2/", "published_at": "2025-05-20T08:30:04+00:00" }, { "id": "01a0c519-0fd7-70a1-b9c8-629a3c569a9e", "title": "Should you use network connectivity checks in Swift?", "url": "https://www.donnywals.com/should-you-use-network-connectivity-checks-in-swift/", "published_at": "2025-05-16T09:21:44+00:00" }, { "id": "01a0c519-0fd7-70a1-b9c8-629a3cdf41e3", "title": "Choosing between LazyVStack, List, and VStack in SwiftUI", "url": "https://www.donnywals.com/choosing-between-lazyvstack-list-and-vstack-in-swiftui/", "published_at": "2025-05-08T18:21:32+00:00" }, { "id": "01a0c519-0fd7-70a1-b9c8-629a3ce6e340", "title": "Differences between Thread.sleep and Task.sleep explained", "url": "https://www.donnywals.com/differences-between-thread-sleep-and-task-sleep-explained/", "published_at": "2025-05-01T08:13:38+00:00" }, { "id": "01a0c519-0fd7-70a1-b9c8-629a3d3fba47", "title": "Protecting mutable state with Mutex in Swift", "url": "https://www.donnywals.com/protecting-mutable-state-with-mutex-in-swift/", "published_at": "2025-04-30T08:18:44+00:00" }, { "id": "01a0c519-0fd7-70a1-b9c8-629a3d6f2c12", "title": "Using singletons in Swift 6", "url": "https://www.donnywals.com/using-singletons-in-swift-6/", "published_at": "2025-04-23T09:41:05+00:00" }, { "id": "01a0c519-0fd7-70a1-b9c8-629a3dae1cfe", "title": "Using Instruments to profile a SwiftUI app", "url": "https://www.donnywals.com/using-instruments-to-profile-a-swiftui-app/", "published_at": "2025-04-16T09:45:47+00:00" }, { "id": "01a0c519-0fd7-70a1-b9c8-629a3e22b502", "title": "Staying productive as an indie developer", "url": "https://www.donnywals.com/staying-productive-as-an-indie-developer/", "published_at": "2025-04-09T09:00:57+00:00" }, { "id": "01a0c519-0fd7-70a1-b9c8-629a3eb3a14b", "title": "Implementing Task timeout with Swift Concurrency", "url": "https://www.donnywals.com/implementing-task-timeout-with-swift-concurrency/", "published_at": "2025-04-01T08:33:07+00:00" }, { "id": "01a0c519-0fd7-70a1-b9c8-629a3f868add", "title": "How to plan a migration to Swift 6", "url": "https://www.donnywals.com/how-to-plan-a-migration-to-swift-6/", "published_at": "2025-03-06T14:18:33+00:00" }, { "id": "01a0c523-fc0b-71ff-9e66-366dec9fb278", "title": "What’s new in Swift 6.1?", "url": "https://www.donnywals.com/whats-new-in-swift-6-1/", "published_at": "2025-02-27T13:24:04+00:00" }, { "id": "01a0c523-fc0b-71ff-9e66-366ded73584d", "title": "Why you should keep your git commits small and meaningful", "url": "https://www.donnywals.com/why-you-should-keep-your-git-commits-small-and-meaningful/", "published_at": "2025-02-19T16:00:18+00:00" }, { "id": "01a0c523-fc0b-71ff-9e66-366ded9eb423", "title": "Observing properties on an @Observable class outside of SwiftUI views", "url": "https://www.donnywals.com/observing-properties-on-an-observable-class-outside-of-swiftui-views/", "published_at": "2025-01-21T10:59:24+00:00" }, { "id": "01a0c523-fc0b-71ff-9e66-366dee674ffa", "title": "Solving “Main actor-isolated property can not be referenced from a Sendable closure” in Swift", "url": "https://www.donnywals.com/solving-main-actor-isolated-property-can-not-be-referenced-from-a-sendable-closure-in-swift/", "published_at": "2025-01-10T09:17:29+00:00" }, { "id": "01a0c523-fc0b-71ff-9e66-366def529380", "title": "Is 2025 the year to fully adopt Swift 6?", "url": "https://www.donnywals.com/is-2025-the-year-to-fully-adopt-swift-6/", "published_at": "2025-01-09T15:02:54+00:00" }, { "id": "01a0c523-fc0b-71ff-9e66-366defb30f2c", "title": "Sending vs Sendable in Swift", "url": "https://www.donnywals.com/sending-vs-sendable-in-swift/", "published_at": "2024-12-18T09:50:16+00:00" }, { "id": "01a0c523-fc0b-71ff-9e66-366defd6395b", "title": "Mocking a network connection in your Swift Tests", "url": "https://www.donnywals.com/mocking-a-network-connection-in-your-swift-tests/", "published_at": "2024-12-12T09:56:48+00:00" }, { "id": "01a0c523-fc0b-71ff-9e66-366df00a9e88", "title": "Testing completion handler based code in Swift Testing", "url": "https://www.donnywals.com/testing-completion-handler-based-code-in-swift-testing/", "published_at": "2024-12-04T09:10:47+00:00" }, { "id": "01a0c523-fc0b-71ff-9e66-366df01b1eff", "title": "Testing requirements with #require in Swift Testing", "url": "https://www.donnywals.com/testing-requirements-with-require-in-swift-testing/", "published_at": "2024-11-28T14:02:48+00:00" }, { "id": "01a0c523-fc0b-71ff-9e66-366df0d647a7", "title": "Asserting state with #expect in Swift Testing", "url": "https://www.donnywals.com/asserting-state-with-expect-in-swift-testing/", "published_at": "2024-11-21T10:45:26+00:00" }, { "id": "01a0c52f-7bf2-7209-be37-539cba2c2c6a", "title": "Improving test coverage with parameterized tests in Swift testing", "url": "https://www.donnywals.com/improving-test-coverage-with-parameterized-tests-in-swift-testing/", "published_at": "2024-10-31T09:59:49+00:00" }, { "id": "01a0c52f-7bf2-7209-be37-539cbaa9c7d0", "title": "Swift Testing basics explained", "url": "https://www.donnywals.com/swift-testing-basics-explained/", "published_at": "2024-10-23T10:11:38+00:00" }, { "id": "01a0c52f-7bf2-7209-be37-539cbaaf0f4f", "title": "Testing completion handler APIs with Swift Testing", "url": "https://www.donnywals.com/testing-completion-handler-apis-with-swift-testing/", "published_at": "2024-10-16T13:53:50+00:00" }, { "id": "01a0c52f-7bf2-7209-be37-539cbace874a", "title": "What is dependency injection in Swift?", "url": "https://www.donnywals.com/what-is-dependency-injection-in-swift/", "published_at": "2024-10-11T07:37:29+00:00" }, { "id": "01a0c52f-7bf2-7209-be37-539cbaf154aa", "title": "Mesh Gradients in SwiftUI explained", "url": "https://www.donnywals.com/getting-started-with-mesh-gradients-on-ios-18/", "published_at": "2024-09-25T09:59:15+00:00" }, { "id": "01a0c52f-7bf2-7209-be37-539cbba0d71b", "title": "Animating SF Symbols on iOS 18", "url": "https://www.donnywals.com/animating-sf-symbols-on-ios-18/", "published_at": "2024-09-04T07:38:55+00:00" }, { "id": "01a0c52f-7bf2-7209-be37-539cbbc14e92", "title": "Solving “Value of non-Sendable type accessed after being transferred; later accesses could race;”", "url": "https://www.donnywals.com/solving-value-of-non-sendable-type-accessed-after-being-transferred-later-accesses-could-race/", "published_at": "2024-08-23T08:48:20+00:00" }, { "id": "01a0c52f-7bf2-7209-be37-539cbbfd7b41", "title": "Setting the Swift Language mode for an SPM Package", "url": "https://www.donnywals.com/setting-the-swift-language-mode-for-an-spm-package/", "published_at": "2024-08-21T17:59:32+00:00" }, { "id": "01a0c52f-7bf2-7209-be37-539cbcc0852a", "title": "Solving “Task-isolated value of type ‘() async -> Void’ passed as a strongly transferred parameter”", "url": "https://www.donnywals.com/solving-task-isolated-value-of-type-async-void-passed-as-a-strongly-transferred-parameter/", "published_at": "2024-08-21T08:38:51+00:00" }, { "id": "01a0c52f-7bf2-7209-be37-539cbd227835", "title": "Solving “reference to var myVariable is not concurrency-safe because it involves shared mutable state” in Swift", "url": "https://www.donnywals.com/solving-reference-to-var-myvariable-is-not-concurrency-safe-because-it-involves-shared-mutable-state-in-swift/", "published_at": "2024-08-15T09:50:01+00:00" }, { "id": "01a0c539-bdab-7139-bab4-8f579e8ea409", "title": "Solving “Converting non-sendable function value may introduce data races” in Swift", "url": "https://www.donnywals.com/solving-converting-non-sendable-function-value-may-introduce-data-races-in-swift/", "published_at": "2024-08-12T13:23:21+00:00" }, { "id": "01a0c539-bdab-7139-bab4-8f579ebf5418", "title": "What are Optionals in Swift?", "url": "https://www.donnywals.com/what-are-optionals-in-swift/", "published_at": "2024-08-12T09:12:16+00:00" }, { "id": "01a0c539-bdab-7139-bab4-8f579ed9241a", "title": "Solving “Capture of non-sendable type in @Sendable closure” in Swift", "url": "https://www.donnywals.com/solving-capture-of-non-sendable-type-in-sendable-closure-in-swift/", "published_at": "2024-08-07T09:28:12+00:00" }, { "id": "01a0c539-bdab-7139-bab4-8f579fc05c8f", "title": "Solving “Reference to captured var in concurrently-executing code” in Swift", "url": "https://www.donnywals.com/solving-reference-to-captured-var-in-concurrently-executing-code-in-swift/", "published_at": "2024-07-31T14:42:57+00:00" }, { "id": "01a0c539-bdab-7139-bab4-8f57a04d8876", "title": "Adding values to the SwiftUI environment with @Entry", "url": "https://www.donnywals.com/adding-values-to-the-swiftui-environment-with-entry/", "published_at": "2024-07-15T07:10:54+00:00" }, { "id": "01a0c539-bdab-7139-bab4-8f57a1040d0c", "title": "Let and var in Swift explained", "url": "https://www.donnywals.com/let-and-var-in-swift-explained/", "published_at": "2024-07-12T07:10:10+00:00" }, { "id": "01a0c539-bdab-7139-bab4-8f57a1391e8b", "title": "Using PreviewModifier to build a previewing environment", "url": "https://www.donnywals.com/using-previewmodifier-to-build-a-previewing-environment/", "published_at": "2024-07-10T18:18:01+00:00" }, { "id": "01a0c539-bdab-7139-bab4-8f57a1a0eb83", "title": "Mixing colors in SwiftUI and Xcode 16", "url": "https://www.donnywals.com/mixing-colors-in-swiftui-and-xcode-16/", "published_at": "2024-06-18T18:28:22+00:00" }, { "id": "01a0c539-bdab-7139-bab4-8f57a20ad758", "title": "Using iOS 18’s new TabView with a sidebar", "url": "https://www.donnywals.com/using-ios-18s-new-tabview-with-a-sidebar/", "published_at": "2024-06-12T14:13:19+00:00" }, { "id": "01a0c539-bdab-7139-bab4-8f57a2bad3d2", "title": "Building a stretchy header view with SwiftUI on iOS 18", "url": "https://www.donnywals.com/building-a-stretchy-header-view-with-swiftui-on-ios-18/", "published_at": "2024-06-11T13:13:59+00:00" }, { "id": "01a0c543-082f-7379-8693-e849a65fdf93", "title": "Modern logging with the OSLog framework in Swift", "url": "https://www.donnywals.com/modern-logging-with-the-oslog-framework-in-swift/", "published_at": "2024-06-07T07:22:51+00:00" }, { "id": "01a0c543-082f-7379-8693-e849a7076813", "title": "@preconcurrency usage in swift explained", "url": "https://www.donnywals.com/preconcurrency-usage-in-swift-explained/", "published_at": "2024-05-28T19:50:01+00:00" }, { "id": "01a0c543-082f-7379-8693-e849a72661ae", "title": "Programmatic navigation in SwiftUI with NavigationPath and navigationDestination", "url": "https://www.donnywals.com/programmatic-navigation-in-swiftui-with-navigationpath-and-navigationdestination/", "published_at": "2024-05-22T13:14:26+00:00" }, { "id": "01a0c543-082f-7379-8693-e849a7ce1500", "title": "Turn off sidebar hiding on NavigationSplitView in SwiftUI", "url": "https://www.donnywals.com/turn-off-sidebar-hiding-on-navigationsplitview-in-swiftui/", "published_at": "2024-05-21T18:04:25+00:00" }, { "id": "01a0c543-082f-7379-8693-e849a876f259", "title": "How to decide between a Set and Array in Swift?", "url": "https://www.donnywals.com/how-to-decide-between-a-set-and-array-in-swift/", "published_at": "2024-05-15T07:04:04+00:00" }, { "id": "01a0c543-082f-7379-8693-e849a8bb562e", "title": "Swift’s “if” and “switch” expressions explained", "url": "https://www.donnywals.com/swifts-if-and-switch-expressions-explained/", "published_at": "2024-05-14T12:56:18+00:00" }, { "id": "01a0c543-082f-7379-8693-e849a8ea4073", "title": "What are enums in Swift?", "url": "https://www.donnywals.com/what-are-enums-in-swift/", "published_at": "2024-05-08T11:16:18+00:00" }, { "id": "01a0c543-082f-7379-8693-e849a9556bd5", "title": "How to add a privacy manifest file to your app for required reason API usage?", "url": "https://www.donnywals.com/how-to-add-a-privacy-manifest-file-to-your-app-for-required-reason-api-usage/", "published_at": "2024-05-01T05:35:09+00:00" }, { "id": "01a0c543-082f-7379-8693-e849a9d54994", "title": "What is defer in Swift?", "url": "https://www.donnywals.com/what-is-defer-in-swift/", "published_at": "2024-04-29T07:00:26+00:00" }, { "id": "01a0c543-082f-7379-8693-e849a9de117c", "title": "Deciding between a computed property and a function in Swift", "url": "https://www.donnywals.com/deciding-between-a-computed-property-and-a-function-in-swift/", "published_at": "2024-04-26T19:30:32+00:00" }, { "id": "01a0c54b-d805-7241-9303-29faea4a6740", "title": "if case let in Swift explained", "url": "https://www.donnywals.com/if-case-let-in-swift-explained/", "published_at": "2024-04-26T19:00:06+00:00" }, { "id": "01a0c54b-d805-7241-9303-29faea77f94c", "title": "How Enterprise level CI/CD with AppCircle helps you scale", "url": "https://www.donnywals.com/how-enterprise-level-ci-cd-with-appcircle-helps-you-scale/", "published_at": "2024-04-25T11:00:17+00:00" }, { "id": "01a0c54b-d805-7241-9303-29faea9091f5", "title": "What are lazy vars in Swift?", "url": "https://www.donnywals.com/what-are-lazy-vars-in-swift/", "published_at": "2024-04-23T19:01:51+00:00" }, { "id": "01a0c54b-d805-7241-9303-29faeb3e8df1", "title": "for vs forEach in Swift: The differences explained", "url": "https://www.donnywals.com/for-vs-foreach-in-swift-the-differences-explained/", "published_at": "2024-04-23T10:28:23+00:00" }, { "id": "01a0c54b-d805-7241-9303-29faeb5ff169", "title": "Dispatching to the Main thread with MainActor in Swift", "url": "https://www.donnywals.com/dispatching-to-the-main-thread-with-mainactor-in-swift/", "published_at": "2024-04-23T08:46:53+00:00" }, { "id": "01a0c54b-d805-7241-9303-29faebbfd716", "title": "Enabling upcoming feature flags for Swift using Xcode", "url": "https://www.donnywals.com/how-to-use-experimental-swift-versions-and-features-in-xcode/", "published_at": "2024-04-18T10:46:09+00:00" }, { "id": "01a0c54b-d805-7241-9303-29faebc5dc6f", "title": "Actor reentrancy in Swift explained", "url": "https://www.donnywals.com/actor-reentrancy-in-swift-explained/", "published_at": "2024-04-11T11:37:05+00:00" }, { "id": "01a0c54b-d805-7241-9303-29faec614f8d", "title": "Building a backend-driven paywall with RevenueCat", "url": "https://www.donnywals.com/building-a-backend-driven-paywall-with-revenuecat/", "published_at": "2024-04-04T17:30:56+00:00" }, { "id": "01a0c54b-d805-7241-9303-29faec627fed", "title": "Using closures for dependencies instead of protocols", "url": "https://www.donnywals.com/using-closures-for-dependencies-instead-of-protocols/", "published_at": "2024-04-02T11:46:02+00:00" }, { "id": "01a0c54b-d805-7241-9303-29faed5c30df", "title": "Building an AsyncSequence with AsyncStream.makeStream", "url": "https://www.donnywals.com/building-an-asyncsequence-with-asyncstream-makestream/", "published_at": "2024-03-25T14:39:55+00:00" }, { "id": "01a0c554-1db2-72b5-abe9-e94b2ed798e1", "title": "Everything you need to know about Swift 5.10", "url": "https://www.donnywals.com/everything-you-need-to-know-about-swift-5-10/", "published_at": "2024-03-07T07:40:56+00:00" }, { "id": "01a0c554-1db2-72b5-abe9-e94b2f91c485", "title": "Working with dates and Codable in Swift", "url": "https://www.donnywals.com/working-with-dates-and-codable-in-swift/", "published_at": "2024-02-29T11:14:37+00:00" }, { "id": "01a0c554-1db2-72b5-abe9-e94b30322061", "title": "Designing APIs with typed throws in Swift", "url": "https://www.donnywals.com/designing-apis-with-typed-throws-in-swift/", "published_at": "2024-02-22T12:13:03+00:00" }, { "id": "01a0c554-1db2-72b5-abe9-e94b30bd5899", "title": "How to determine where tasks and async functions run in Swift?", "url": "https://www.donnywals.com/how-to-determine-where-tasks-and-async-functions-run-in-swift/", "published_at": "2024-02-16T10:57:21+00:00" }, { "id": "01a0c554-1db2-72b5-abe9-e94b3193b552", "title": "@Observable in SwiftUI explained", "url": "https://www.donnywals.com/observable-in-swiftui-explained/", "published_at": "2024-02-06T20:53:04+00:00" }, { "id": "01a0c554-1db2-72b5-abe9-e94b324af90c", "title": "Writing code that makes mistakes harder", "url": "https://www.donnywals.com/writing-code-that-makes-mistakes-harder/", "published_at": "2024-01-25T11:07:01+00:00" }, { "id": "01a0c554-1db2-72b5-abe9-e94b3269b9c5", "title": "Connecting your git repository with a remote server", "url": "https://www.donnywals.com/connecting-your-git-repository-with-a-remote-server/", "published_at": "2024-01-18T15:52:44+00:00" }, { "id": "01a0c554-1db2-72b5-abe9-e94b32f0c7e1", "title": "Understanding and resolving merge conflicts", "url": "https://www.donnywals.com/understanding-and-resolving-merge-conflicts/", "published_at": "2024-01-10T11:03:22+00:00" }, { "id": "01a0c554-1db2-72b5-abe9-e94b33589c2e", "title": "Git basics for iOS developers", "url": "https://www.donnywals.com/git-basics-for-ios-developers/", "published_at": "2024-01-03T15:45:31+00:00" }, { "id": "01a0c554-1db2-72b5-abe9-e94b345318d2", "title": "Making your SwiftData models Codable", "url": "https://www.donnywals.com/making-your-swiftdata-models-codable/", "published_at": "2023-08-15T12:56:12+00:00" }, { "id": "01a0c55c-76d5-7042-b54a-d29a8a9a5619", "title": "What’s the difference between @Binding and @Bindable", "url": "https://www.donnywals.com/whats-the-difference-between-binding-and-bindable/", "published_at": "2023-06-10T18:18:16+00:00" }, { "id": "01a0c55c-76d5-7042-b54a-d29a8b0388c4", "title": "Tips and tricks for exploring a new codebase", "url": "https://www.donnywals.com/tips-and-tricks-for-exploring-a-new-codebase/", "published_at": "2023-04-28T10:17:33+00:00" }, { "id": "01a0c55c-76d5-7042-b54a-d29a8b5cf042", "title": "Understanding unstructured and detached tasks in Swift", "url": "https://www.donnywals.com/understanding-unstructured-and-detached-tasks-in-swift/", "published_at": "2023-04-13T09:01:43+00:00" }, { "id": "01a0c55c-76d5-7042-b54a-d29a8bcda2a1", "title": "Structured concurrency in Swift explained", "url": "https://www.donnywals.com/the-basics-of-structured-concurrency-in-swift-explained/", "published_at": "2023-03-17T10:48:24+00:00" }, { "id": "01a0c55c-76d5-7042-b54a-d29a8c7d540e", "title": "Iterating over web socket messages with async / await in Swift", "url": "https://www.donnywals.com/iterating-over-web-socket-messages-with-async-await-in-swift/", "published_at": "2023-01-24T09:00:05+00:00" }, { "id": "01a0c55c-76d5-7042-b54a-d29a8cbe45b9", "title": "Understanding Swift Concurrency’s AsyncStream and AsyncThrowingStream", "url": "https://www.donnywals.com/understanding-swift-concurrencys-asyncstream/", "published_at": "2023-01-02T15:41:02+00:00" }, { "id": "01a0c55c-76d5-7042-b54a-d29a8ce44152", "title": "Providing a default value for a SwiftUI Binding", "url": "https://www.donnywals.com/providing-a-default-value-for-a-swiftui-binding/", "published_at": "2022-11-15T09:02:28+00:00" }, { "id": "01a0c55c-76d5-7042-b54a-d29a8ce76cd8", "title": "Enabling Concurrency warnings in Xcode 16", "url": "https://www.donnywals.com/enabling-concurrency-warnings-in-xcode/", "published_at": "2022-09-13T12:09:36+00:00" }, { "id": "01a0c55c-76d5-7042-b54a-d29a8ddfb446", "title": "What are Sendable and @Sendable closures in Swift?", "url": "https://www.donnywals.com/what-are-sendable-and-sendable-closures-in-swift/", "published_at": "2022-09-13T09:08:10+00:00" }, { "id": "01a0c55c-76d5-7042-b54a-d29a8e0c5cd2", "title": "Xcode 14 “Publishing changes from within view updates is not allowed, this will cause undefined behavior”", "url": "https://www.donnywals.com/xcode-14-publishing-changes-from-within-view-updates-is-not-allowed-this-will-cause-undefined-behavior/", "published_at": "2022-09-07T19:52:15+00:00" } ] posts Claim your blog
Back to Donny Wals
Blog · corpus.blog/blogs/donnywals.com/posts

Donny Wals

donnywals.com

2026

2025

2024

2023

2022