57,803 blogs · [ { "id": "01a0d3b8-2466-70db-b3c5-5cfeb7d2cc65", "title": "Parameterized tests and test organization with Swift Testing", "url": "https://tanaschita.com/testing-swift-testing-parameterized-tests", "published_at": "2026-09-20T22:00:00+00:00" }, { "id": "01a0d3b8-2466-70db-b3c5-5cfeb8c7a6d3", "title": "Building responsive and reliable search in SwiftUI", "url": "https://tanaschita.com/swiftui-responsive-race-free-debounce-search", "published_at": "2026-09-13T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0991010bc", "title": "Getting started with Live Activities in SwiftUI", "url": "https://tanaschita.com/activitykit-live-activities-swiftui", "published_at": "2026-09-06T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b099f4523a", "title": "Managing toolbar visibility and overflow in SwiftUI", "url": "https://tanaschita.com/swiftui-toolbar-visibility-overflow", "published_at": "2026-08-30T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b09abd36ef", "title": "Presenting alerts and confirmation dialogs from identifiable data in SwiftUI", "url": "https://tanaschita.com/swiftui-alert-identifiable-data", "published_at": "2026-08-23T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b09b59671b", "title": "Adding swipe actions to any SwiftUI scroll view", "url": "https://tanaschita.com/swiftui-scrollview-swipe-actions", "published_at": "2026-08-16T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b09babe443", "title": "Managing focus in SwiftUI with FocusState", "url": "https://tanaschita.com/swiftui-focus-state", "published_at": "2026-08-09T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b09c5830a9", "title": "Building a reusable API client with URLSession in Swift", "url": "https://tanaschita.com/swift-urlsession", "published_at": "2026-08-01T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b09cb7fac4", "title": "Understanding code signing and provisioning in iOS", "url": "https://tanaschita.com/ios-code-signing-provisioning", "published_at": "2026-07-23T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b09db1e1fa", "title": "Building widgets with WidgetKit and SwiftUI", "url": "https://tanaschita.com/widgetkit-building-widgets-with-swiftui", "published_at": "2026-07-19T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b09db1e337", "title": "Keeping SwiftData behind a boundary", "url": "https://tanaschita.com/swiftdata-persistence-boundaries", "published_at": "2026-07-12T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b09e644302", "title": "Understanding Sendable in Swift", "url": "https://tanaschita.com/swift-concurrency-sendable", "published_at": "2026-07-05T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b09f254355", "title": "Understanding privacy manifests in iOS", "url": "https://tanaschita.com/ios-privacy-manifests", "published_at": "2026-06-28T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b09f5a24ae", "title": "Getting started with Apple's Foundation Models framework", "url": "https://tanaschita.com/foundation-models-getting-started", "published_at": "2026-06-21T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b09ffe8e6a", "title": "Async cleanup with defer in Swift", "url": "https://tanaschita.com/swift-defer-async", "published_at": "2026-06-13T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0a0a83398", "title": "Understanding composition in SwiftUI", "url": "https://tanaschita.com/swiftui-understanding-composition", "published_at": "2026-06-07T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0a0f65f77", "title": "Registering for push notifications in SwiftUI", "url": "https://tanaschita.com/ios-notifications-registering-in-swiftui", "published_at": "2026-05-31T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0a1f25dd8", "title": "Working with the Keychain in iOS", "url": "https://tanaschita.com/ios-keychain-secure-data-storage", "published_at": "2026-05-24T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0a2b93052", "title": "Understanding basic animations in SwiftUI", "url": "https://tanaschita.com/swiftui-basic-animations", "published_at": "2026-05-16T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0a362520b", "title": "How to present a local HTML file in SwiftUI", "url": "https://tanaschita.com/swiftui-present-local-html-files", "published_at": "2026-05-03T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0a43f473d", "title": "How to implement pagination with SwiftUI's List view", "url": "https://tanaschita.com/swiftui-list-pagination", "published_at": "2026-04-26T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0a461d6ee", "title": "Building a draggable bottom sheet in SwiftUI", "url": "https://tanaschita.com/swiftui-draggable-bottom-sheet", "published_at": "2026-04-19T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0a53639ea", "title": "How to test in-app purchases locally using StoreKit", "url": "https://tanaschita.com/testing-in-app-purchases-locally-storekit", "published_at": "2026-04-07T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0a57c779c", "title": "Working with files and directories in iOS", "url": "https://tanaschita.com/ios-file-system-overview", "published_at": "2026-04-05T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0a5abc69c", "title": "Changing runtime state with LLDB while debugging iOS apps", "url": "https://tanaschita.com/lldb-changing-variables-while-debugging", "published_at": "2026-03-29T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0a5fe679c", "title": "Migrating to String Catalogs in iOS", "url": "https://tanaschita.com/ios-string-catalogs-migration", "published_at": "2026-03-22T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0a64bc9cb", "title": "Working with String Catalogs in iOS projects", "url": "https://tanaschita.com/ios-string-catalogs-in-practice", "published_at": "2026-03-15T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0a70d966d", "title": "How to use custom names for Swift properties when decoding JSON data", "url": "https://tanaschita.com/swift-json-decoding-custom-names", "published_at": "2026-03-08T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0a7c94f7d", "title": "Implementing Passkeys in iOS with AuthenticationServices", "url": "https://tanaschita.com/ios-authentication-passkeys", "published_at": "2026-03-01T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0a8094f76", "title": "Preventing forgotten database migrations with automated tests in iOS", "url": "https://tanaschita.com/testing-database-migrations", "published_at": "2026-02-21T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0a85a1763", "title": "How to build a simple CLI tool using Swift", "url": "https://tanaschita.com/swift-cli-scripting", "published_at": "2026-02-15T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0a951794b", "title": "How to use SwiftUI Coordinators to communicate with UIKit", "url": "https://tanaschita.com/swiftui-coordinators", "published_at": "2026-02-08T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0aa4b36da", "title": "Migrating to the Observation framework in SwiftUI", "url": "https://tanaschita.com/swiftui-observation-migrating-to-observation", "published_at": "2026-02-01T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0aa7661ff", "title": "A visual cheat sheet of Combine operators", "url": "https://tanaschita.com/combine-operators-cheatsheet", "published_at": "2026-01-25T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0aad53174", "title": "How to use String Catalogs for pluralization in Swift", "url": "https://tanaschita.com/ios-string-catalogs-pluralization", "published_at": "2026-01-18T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0ab077183", "title": "Memory management in Combine", "url": "https://tanaschita.com/combine-memory-management", "published_at": "2026-01-11T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0abceb3fa", "title": "Storing Swift structs in UserDefaults", "url": "https://tanaschita.com/swift-user-defaults-storing-structs", "published_at": "2026-01-04T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0acc46f37", "title": "Understanding date decoding strategies when working with JSON in Swift", "url": "https://tanaschita.com/swift-json-date-decoding-encoding", "published_at": "2025-12-28T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0ad2f3e2e", "title": "Understanding SwiftUI's Grid container", "url": "https://tanaschita.com/swiftui-grid-container", "published_at": "2025-12-21T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0ae22081f", "title": "Adding text input actions to iOS push and local notifications", "url": "https://tanaschita.com/ios-notifications-textinput", "published_at": "2025-12-14T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0aebbac3d", "title": "How to avoid retain cycles when working with tasks in Swift", "url": "https://tanaschita.com/swift-async-tasks-memory-management", "published_at": "2025-12-07T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0af7e7f16", "title": "Understanding associated domains in iOS", "url": "https://tanaschita.com/ios-associated-domains-basics", "published_at": "2025-11-30T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0aff32b1a", "title": "Using associated domains alternate mode during development", "url": "https://tanaschita.com/ios-associated-domains-alternate-mode", "published_at": "2025-11-23T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0b0ccc94e", "title": "Bridging completion handlers to Swift's async/await", "url": "https://tanaschita.com/swift-async-completions-to-async-await", "published_at": "2025-11-16T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0b174a7a0", "title": "Transforming AsyncStream with Swift Async Algorithms", "url": "https://tanaschita.com/swift-async-algorithms-asyncstream", "published_at": "2025-11-09T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0b2161749", "title": "Understanding Task and Task.detached in Swift concurrency", "url": "https://tanaschita.com/swift-async-task-vs-task-detached", "published_at": "2025-11-01T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0b28fa1c8", "title": "Understanding task cancellation and lifetimes in Swift concurrency", "url": "https://tanaschita.com/swift-async-tasks-cancellation", "published_at": "2025-10-26T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0b30e2af7", "title": "Comparing Combine's subjects with AsyncStream in Swift", "url": "https://tanaschita.com/swift-combine-subjects-vs-asyncstream", "published_at": "2025-10-19T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0b37eb39b", "title": "When SwiftUI automatically applies the glass look and when it doesn’t", "url": "https://tanaschita.com/swiftui-glass-auto-apply", "published_at": "2025-10-12T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0b383ff0a", "title": "How to add custom actions to iOS push and local notifications in SwiftUI", "url": "https://tanaschita.com/ios-notifications-custom-actions", "published_at": "2025-10-05T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0b3e02a2f", "title": "Structuring universal links in iOS", "url": "https://tanaschita.com/swiftui-navigation-universal-links-architecture", "published_at": "2025-09-28T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0b3f284ba", "title": "Cancelling async tasks in SwiftUI", "url": "https://tanaschita.com/swiftui-cancel-async-work", "published_at": "2025-09-21T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0b44987f1", "title": "How to manage app lifecycle events in SwiftUI", "url": "https://tanaschita.com/swiftui-app-lifecycle-events", "published_at": "2025-09-14T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0b520e205", "title": "Understanding SwiftUI's liquid glass button styles", "url": "https://tanaschita.com/swiftui-glass-button-style", "published_at": "2025-09-02T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0b5540cd2", "title": "Switching Swift Package Manager dependencies between versioned and local development", "url": "https://tanaschita.com/spm-quick-tip-on-switching-to-local-dev", "published_at": "2025-08-31T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0b5acdab9", "title": "How to use async/await in synchronous Swift code with tasks", "url": "https://tanaschita.com/swift-await-async-in-synchronious-swift-code-with-tasks", "published_at": "2025-08-24T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0b68e4975", "title": "My new book on architecture & design patterns for iOS", "url": "https://tanaschita.com/book-ios-architecture-design-patterns", "published_at": "2025-08-18T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0b692fc30", "title": "How to create a custom reusable toolbar in SwiftUI", "url": "https://tanaschita.com/swiftui-reusable-toolbar", "published_at": "2025-08-11T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0b6c4ac66", "title": "How to use the @available attribute in Swift", "url": "https://tanaschita.com/swift-available-attribute", "published_at": "2025-08-03T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0b70e5780", "title": "Overview on Accessibility Nutrition Labels for iOS development", "url": "https://tanaschita.com/ios-accessibility-nutrition-labels", "published_at": "2025-07-27T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0b794763b", "title": "Using defer in Swift to manage state cleanup", "url": "https://tanaschita.com/swift-defer", "published_at": "2025-07-20T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0b8640546", "title": "Supporting Reduced Motion accessibility setting in SwiftUI", "url": "https://tanaschita.com/ios-accessibility-reduced-motion", "published_at": "2025-07-13T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0b928805a", "title": "Supporting sufficient contrast accessibility with Xcode's Color Contrast Calculator", "url": "https://tanaschita.com/ios-accessibility-contrast", "published_at": "2025-07-06T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0b965d2cc", "title": "How to support Dynamic Type accessibility in SwiftUI", "url": "https://tanaschita.com/ios-accessibility-dynamic-type", "published_at": "2025-06-29T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0b9899c01", "title": "Using WebKit with SwiftUI to manage web content", "url": "https://tanaschita.com/swiftui-webkit", "published_at": "2025-06-22T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0ba0062b3", "title": "WWDC 2025 summary of Apple's platforms state of the union talk for iOS developers", "url": "https://tanaschita.com/wwdc-2025-state-of-the-union-summary", "published_at": "2025-06-11T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0ba576f1c", "title": "Adding navigation buttons to the keyboard in SwiftUI", "url": "https://tanaschita.com/swiftui-keyboard-buttons", "published_at": "2025-06-07T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0ba58c307", "title": "Understanding toolbars in SwiftUI", "url": "https://tanaschita.com/swiftui-toolbars-guide", "published_at": "2025-06-01T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0bac6753e", "title": "Learn to build adaptive layouts with SwiftUI's ViewThatFits container.", "url": "https://tanaschita.com/swiftui-viewthatfits-container", "published_at": "2025-05-25T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0bb4f77ab", "title": "Understanding LLDB print commands for iOS debugging with Xcode", "url": "https://tanaschita.com/lldb-understanding-print-commands", "published_at": "2025-05-18T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0bb67ae57", "title": "Scheduling notifications with time, calendar, and location triggers in iOS", "url": "https://tanaschita.com/ios-local-notification-triggers", "published_at": "2025-05-11T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0bbc266b4", "title": "Working with Xcode configuration files", "url": "https://tanaschita.com/xcode-configuration-files", "published_at": "2025-05-04T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0bbeb8aa8", "title": "Creating and managing multiple app environments in Xcode", "url": "https://tanaschita.com/xcode-build-environments", "published_at": "2025-05-03T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0bc0ab2f5", "title": "Understanding Xcode targets, schemes and build configurations", "url": "https://tanaschita.com/xcode-targets-schemes", "published_at": "2025-05-02T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0bcd200c4", "title": "Bridging interfaces with the Adapter pattern in Swift", "url": "https://tanaschita.com/swift-design-patterns-adapter", "published_at": "2025-04-27T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0bcdc87d5", "title": "How to persist navigation state in SwiftUI", "url": "https://tanaschita.com/swiftui-navigation-persist-state", "published_at": "2025-04-20T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0bdc01ac2", "title": "Using NavigationPath with TabView in SwiftUI", "url": "https://tanaschita.com/swiftui-navigation-path-with-tabview", "published_at": "2025-04-13T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0be11e15d", "title": "Testing remote iOS push notifications in a simulator with simctl", "url": "https://tanaschita.com/testing-remote-push-notifications-in-ios-simulator", "published_at": "2025-04-05T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0beb19701", "title": "Building a dependency injection framework", "url": "https://tanaschita.com/dependency-injection-building-lightweight-container", "published_at": "2025-03-31T22:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0bf5974f8", "title": "Public-key cryptography with CryptoKit for iOS", "url": "https://tanaschita.com/cryptokit-public-key-cryptography", "published_at": "2025-03-23T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0c050d64b", "title": "Understanding existentials and primary associated types in Swift", "url": "https://tanaschita.com/swift-existentials", "published_at": "2025-03-16T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0c064ad4d", "title": "Understanding structural identity in SwiftUI", "url": "https://tanaschita.com/swiftui-structural-identity", "published_at": "2025-03-09T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0c0657774", "title": "Understanding the Bindable property wrapper in SwiftUI", "url": "https://tanaschita.com/swiftui-observation-bindable", "published_at": "2025-03-02T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0c0f78a81", "title": "Quick guide on home screen quick actions for SwiftUI", "url": "https://tanaschita.com/ios-home-screen-quick-actions", "published_at": "2025-02-23T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0c1ee637b", "title": "How to use SceneDelegate in SwiftUI", "url": "https://tanaschita.com/swiftui-scenedelegate", "published_at": "2025-02-16T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0c1f64003", "title": "Implementing Face ID authentication in SwiftUI", "url": "https://tanaschita.com/ios-local-authentication", "published_at": "2025-02-09T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0c23d54ad", "title": "SF Symbols guide for SwiftUI and UIKit", "url": "https://tanaschita.com/ios-sf-symbols", "published_at": "2025-02-02T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0c2c4afbf", "title": "Learn to debug iOS features that require app start from external actions in Xcode", "url": "https://tanaschita.com/xcode-debugging-app-restart", "published_at": "2025-01-26T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0c2e7004f", "title": "Customizing the appearance of the NavigationStack title in SwiftUI", "url": "https://tanaschita.com/switui-navigationstack-customize-title", "published_at": "2025-01-19T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0c3278279", "title": "How to use cryptographic hash functions in CryptoKit for iOS security", "url": "https://tanaschita.com/swift-hash-functions", "published_at": "2025-01-12T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0c41096a5", "title": "Preparing for a technical iOS job interview with questions and answers in 2025 - book preview", "url": "https://tanaschita.com/book-ios-interview-questions-and-answers-preview", "published_at": "2025-01-06T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0c4bda21f", "title": "Understanding opaque types and protocols with associatedtype in Swift", "url": "https://tanaschita.com/swift-opaque-types-protocols-associatedtype", "published_at": "2025-01-05T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0c553c6c3", "title": "Getting started with UI Testing for SwiftUI", "url": "https://tanaschita.com/testing-ui-swiftui-xctest-framework", "published_at": "2024-12-29T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0c60d319d", "title": "Creating a particles snow effect with SpriteKit and SwiftUI", "url": "https://tanaschita.com/spritekit-particles-snow-effect-swiftui", "published_at": "2024-12-22T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0c6b9467c", "title": "How to unit test async/await functions in Swift", "url": "https://tanaschita.com/testing-swift-async-await", "published_at": "2024-12-15T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0c72fcb10", "title": "Understanding opaque types in Swift", "url": "https://tanaschita.com/swift-opaque-types", "published_at": "2024-12-08T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0c73c006f", "title": "Supporting universal links in a SwiftUI application", "url": "https://tanaschita.com/ios-universal-links-swiftui", "published_at": "2024-11-24T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0c8203c37", "title": "How to use a Connectable publisher in Combine", "url": "https://tanaschita.com/combine-connectable-publisher", "published_at": "2024-11-17T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0c8e9b6a9", "title": "How to identify data in Lists and ForEach in SwiftUI", "url": "https://tanaschita.com/swiftui-identifiable", "published_at": "2024-11-10T23:00:00+00:00" }, { "id": "01a08219-661c-73ac-a36e-92b0c9458d3a", "title": "Dynamic colors in SwiftUI", "url": "https://tanaschita.com/swiftui-dynamic-colors", "published_at": "2024-11-03T23:00:00+00:00" } ] posts Claim your blog
Back to Tanaschita
Blog · corpus.blog/blogs/tanaschita.com/posts

Tanaschita

tanaschita.com

2026

2025

2024