41554 blogs · [ { "id": "01a08755-1b26-715e-a7ce-175ef851e6f2", "title": "Indie Diary #9 — What do we do now?", "url": "https://blog.thomasdurand.fr/story/2026-06-22-indie-diary-9/", "published_at": "2026-06-22T10:00:00+00:00" }, { "id": "01a08755-1b26-715e-a7ce-175ef8abb86a", "title": "Attending Apple Intelligence and App Intents workshop at Paris", "url": "https://blog.thomasdurand.fr/story/2025-01-17-attending-apple-workshop/", "published_at": "2025-01-17T10:20:00+00:00" }, { "id": "01a08755-1b26-715e-a7ce-175ef9a8b117", "title": "Indie Diary #8 — Giving watchOS the love it deserves", "url": "https://blog.thomasdurand.fr/story/2024-08-15-indie-diary-8/", "published_at": "2024-08-15T13:00:00+00:00" }, { "id": "01a08755-1b26-715e-a7ce-175ef9b999bb", "title": "Attending WWDC24 recap at Apple Paris", "url": "https://blog.thomasdurand.fr/story/2024-06-26-wwdc24-recap/", "published_at": "2024-06-27T21:55:00+00:00" }, { "id": "01a08755-1b26-715e-a7ce-175efa8054ce", "title": "Backend APIs: Constant evolution but tethered to the past", "url": "https://blog.thomasdurand.fr/story/2024-05-12-backend-api-tethered-to-the-past/", "published_at": "2024-05-12T08:45:00+00:00" }, { "id": "01a08755-1b26-715e-a7ce-175efb11e583", "title": "Indie Diary #7 — Recharging batteries", "url": "https://blog.thomasdurand.fr/story/2024-05-01-indie-diary-7/", "published_at": "2024-05-01T10:00:00+00:00" }, { "id": "01a08755-1b26-715e-a7ce-175efbaf3d39", "title": "SwiftUI Previews-based architecture", "url": "https://blog.thomasdurand.fr/story/2024-03-15-preview-based-architecture/", "published_at": "2024-03-15T14:30:00+00:00" }, { "id": "01a08755-1b26-715e-a7ce-175efc4d6443", "title": "Indie Diary #6 — Building a new app", "url": "https://blog.thomasdurand.fr/story/2024-03-07-indie-diary-6/", "published_at": "2024-03-07T19:00:00+00:00" }, { "id": "01a08755-1b26-715e-a7ce-175efd38fe01", "title": "One-way bindings in SwiftUI", "url": "https://blog.thomasdurand.fr/story/2024-01-21-one-way-binding/", "published_at": "2024-01-21T18:00:00+00:00" }, { "id": "01a08755-1b26-715e-a7ce-175efd3bbefc", "title": "Asynchronous SwiftUI buttons", "url": "https://blog.thomasdurand.fr/story/2024-01-14-asynchronous-swiftui-buttons/", "published_at": "2024-01-14T17:00:00+00:00" }, { "id": "01a08755-1b27-7028-9563-43df71484abd", "title": "Indie Diary #5 — A year in review.", "url": "https://blog.thomasdurand.fr/story/2023-12-31-indie-diary-5/", "published_at": "2023-12-31T14:30:00+00:00" }, { "id": "01a08755-1b27-7028-9563-43df7206f4c7", "title": "Don’t ship API keys!", "url": "https://blog.thomasdurand.fr/story/2023-12-14-dont-ship-api-keys/", "published_at": "2023-12-14T19:00:00+00:00" }, { "id": "01a08755-1b27-7028-9563-43df721d306c", "title": "Build a location sensitive iOS widget", "url": "https://blog.thomasdurand.fr/story/2023-12-10-location-sensitive-widget/", "published_at": "2023-12-10T21:00:00+00:00" }, { "id": "01a08755-1b27-7028-9563-43df7272bd47", "title": "Indie Diary #4 — SharePal launch.", "url": "https://blog.thomasdurand.fr/story/2023-11-01-indie-diary-4/", "published_at": "2023-11-01T17:00:00+00:00" }, { "id": "01a08755-1b27-7028-9563-43df73563015", "title": "How (not) to monitor SwiftUI @State", "url": "https://blog.thomasdurand.fr/story/2023-10-21-how-not-to-monitor-swiftui-state/", "published_at": "2023-10-21T12:00:00+00:00" }, { "id": "01a08755-1b27-7028-9563-43df73ae9430", "title": "Indie Diary #3 — Conferences, support, preparing a launch.", "url": "https://blog.thomasdurand.fr/story/2023-10-08-indie-diary-3/", "published_at": "2023-10-08T16:30:00+00:00" }, { "id": "01a08755-1b27-7028-9563-43df74650566", "title": "The curious case of ShareLink with plain text strings", "url": "https://blog.thomasdurand.fr/story/2023-09-24-curious-case-of-sharelink/", "published_at": "2023-09-24T20:30:00+00:00" }, { "id": "01a08755-1b27-7028-9563-43df748d0f3e", "title": "Shake to undo in a SwiftUI app", "url": "https://blog.thomasdurand.fr/story/2023-09-04-shake-to-undo-swiftui/", "published_at": "2023-09-04T22:00:30+00:00" }, { "id": "01a08755-1b27-7028-9563-43df74a6d3a4", "title": "Indie Diary #2 — Padlok big release, and building Lego", "url": "https://blog.thomasdurand.fr/story/2023-08-20-indie-diary-2/", "published_at": "2023-08-20T13:00:00+00:00" }, { "id": "01a08755-1b27-7028-9563-43df751716b6", "title": "Renewing the blog (again!)", "url": "https://blog.thomasdurand.fr/story/2023-07-31-renewing-the-blog-again/", "published_at": "2023-07-31T09:30:00+00:00" }, { "id": "01a08755-1b27-7028-9563-43df75af34a3", "title": "Indie Diary #1 — Indie App Sales", "url": "https://blog.thomasdurand.fr/story/2023-07-16-indie-diary-1/", "published_at": "2023-07-16T22:00:00+00:00" }, { "id": "01a08755-1b27-7028-9563-43df75c25386", "title": "Implement iOS 17’s new AirDrop experience", "url": "https://blog.thomasdurand.fr/story/2023-06-14-implement-new-airdrop-share/", "published_at": "2023-06-14T07:00:00+00:00" }, { "id": "01a08755-1b27-7028-9563-43df76468696", "title": "SwiftUI backward-compatibility with Disfavored Overload", "url": "https://blog.thomasdurand.fr/story/2023-06-10-swiftui-retrocompatibility-with-disfavored-overload/", "published_at": "2023-06-10T20:00:00+00:00" }, { "id": "01a08755-1b27-7028-9563-43df773dfbae", "title": "Leveraging SwiftUI for any app extension", "url": "https://blog.thomasdurand.fr/story/2023-03-31-swiftui-for-all-extensions/", "published_at": "2023-03-31T22:00:00+00:00" }, { "id": "01a08755-1b27-7028-9563-43df77f94c2d", "title": "Automatic rsync deployment with Github Workflows", "url": "https://blog.thomasdurand.fr/story/2023-03-17-automatic-deployment-github-workflow/", "published_at": "2023-03-17T21:30:00+00:00" }, { "id": "01a08755-1b27-7028-9563-43df781d845e", "title": "Struggling: you’re not alone, you’re learning!", "url": "https://blog.thomasdurand.fr/story/2023-03-03-struggling-is-learning/", "published_at": "2023-03-03T18:00:00+00:00" }, { "id": "01a08755-1b27-7028-9563-43df78c58322", "title": "Building a share feature with privacy in mind", "url": "https://blog.thomasdurand.fr/story/2022-03-06-share-data-with-privacy-in-mind/", "published_at": "2022-03-06T20:00:00+00:00" }, { "id": "01a08755-1b27-7028-9563-43df7935334d", "title": "Build a Vapor app on Debian 11", "url": "https://blog.thomasdurand.fr/story/2022-01-25-vapor-on-debian-11-vps/", "published_at": "2022-01-25T12:30:00+00:00" }, { "id": "01a08755-1b27-7028-9563-43df79f907c5", "title": "Safari theme color and notch support", "url": "https://blog.thomasdurand.fr/story/2021-06-27-theme-color-safe-area-safari-15/", "published_at": "2021-06-27T20:00:00+00:00" }, { "id": "01a08755-1b27-7028-9563-43df7a015e6d", "title": "Target iOS beta while using regular Xcode.app", "url": "https://blog.thomasdurand.fr/story/2021-02-12-beta-software-build-on-release-xcode/", "published_at": "2021-02-12T09:00:00+00:00" }, { "id": "01a08755-1b27-7028-9563-43df7adff78d", "title": "Generating lottery numbers using CryptoKit", "url": "https://blog.thomasdurand.fr/story/2019-06-25-generating-lottery-numbers-with-cryptokit/", "published_at": "2019-06-25T18:30:00+00:00" }, { "id": "01a08755-1b27-7028-9563-43df7bb92619", "title": "A (long) week at  WWDC19", "url": "https://blog.thomasdurand.fr/story/2019-06-07-a-long-week-at-wwdc19/", "published_at": "2019-06-07T17:30:00+00:00" }, { "id": "01a08755-1b27-7028-9563-43df7bda09f4", "title": "IPv6 setup on Debian 9 Stretch", "url": "https://blog.thomasdurand.fr/story/2019-04-14-ipv6-setup-on-ovh-vps/", "published_at": "2019-04-14T12:00:00+00:00" }, { "id": "01a08755-1b27-7028-9563-43df7cb83148", "title": "Attending  WWDC19", "url": "https://blog.thomasdurand.fr/story/2019-04-01-attending-wwdc19/", "published_at": "2019-04-01T12:00:00+00:00" }, { "id": "01a08755-1b27-7028-9563-43df7d36c034", "title": "Embrace macOS’s dark mode with Safari", "url": "https://blog.thomasdurand.fr/story/2019-03-27-embrase-macos-dark-mode-using-css/", "published_at": "2019-03-27T12:00:00+00:00" }, { "id": "01a08755-1b27-7028-9563-43df7e333101", "title": "Keep PHP up to date on Debian 9 Stretch", "url": "https://blog.thomasdurand.fr/story/2019-03-20-keep-php-updated-on-debian-9/", "published_at": "2019-03-20T12:00:00+00:00" }, { "id": "01a08755-1b27-7028-9563-43df7ee45d2a", "title": "Build a privacy-safe home network using Pi-hole", "url": "https://blog.thomasdurand.fr/story/2018-10-20-privacy-at-home-with-pi-hole/", "published_at": "2018-10-20T12:00:00+00:00" }, { "id": "01a08755-1b27-7028-9563-43df7f904752", "title": "How anyone could feed my cat", "url": "https://blog.thomasdurand.fr/story/2018-01-31-how-anyone-could-feed-my-cat/", "published_at": "2018-01-31T12:00:00+00:00" }, { "id": "01a08755-1b27-7028-9563-43df808f15ba", "title": "Avoid 5 common mistakes with AES encryption", "url": "https://blog.thomasdurand.fr/story/2017-07-12-aes-encryption-good-practice-with-swift/", "published_at": "2017-07-12T12:00:00+00:00" }, { "id": "01a08755-1b27-7028-9563-43df810a25f8", "title": "iOS disclosure indicators done right", "url": "https://blog.thomasdurand.fr/story/2016-08-12-ios-disclosure-indicator-done-right/", "published_at": "2016-08-12T12:00:00+00:00" }, { "id": "01a08755-1b27-7028-9563-43df813b089d", "title": "iOS basics: UITableView setup with Swift 3", "url": "https://blog.thomasdurand.fr/story/2016-08-07-ios-basics-tableview-setup/", "published_at": "2016-08-07T12:00:00+00:00" }, { "id": "01a08755-1b27-7028-9563-43df81ea5b7e", "title": "Renewing the blog", "url": "https://blog.thomasdurand.fr/story/2016-08-06-renewing-the-blog/", "published_at": "2016-08-06T12:00:00+00:00" } ] posts Claim your blog
Back to blog.thomasdurand.fr
Blog · corpus.blog/blogs/blog.thomasdurand.fr/posts

blog.thomasdurand.fr

blog.thomasdurand.fr

2026

2025

2024

2023

2022

2021

2019

2018

2017

2016