{
  "author" : {
    "name" : "Douglas Hill",
    "url" : "https://douglashill.co/"
  },
  "feed_url" : "https://douglashill.co/micro-feed.json",
  "home_page_url" : "https://douglashill.co/",
  "items" : [
    {
      "content_html" : "<p>TIL about the <a href=\"https://developer.apple.com/documentation/contactprovider\">ContactProvider</a> framework on iOS (not Mac). Sounds like a way to build an end-to-end encrypted replacement for iCloud/CardDAV contacts sync if you can get your head around the difference between <code>ContactItemEnumerating</code> and <code>ContactItemEnumerator</code>.</p>\n\n<p><img src=\"https://douglashill.co/2026/contactprovider-framework/screenshot.png\" alt=\"protocol ContactItemEnumerating: A protocol to provide enumerators for collections of contact items. protocol ContactItemEnumerator: A protocol to provide enumerations of all contact items and changed contact items.\" title=\"\" /></p>\n",
      "date_published" : "2026-04-14T08:18:30+0100",
      "id" : "https://douglashill.co/2026/contactprovider-framework/",
      "url" : "https://douglashill.co/2026/contactprovider-framework/"
    },
    {
      "content_html" : "<p>Interesting evening yesterday at <a href=\"https://www.meetup.com/rust-london-user-group/events/313816694\">Rust London</a> learning all sorts. Dan Groshev spoke about <a href=\"https://dgroshev.com/blog/okmain/\">picking a dominant colour from an image</a>. (I used a similar approach in Jamie Oliver‘s Recipes in 2014.) Jérôme Étévé gave a talk on <a href=\"https://github.com/jeteve/mokapot\">Mokaccino</a> and <a href=\"https://github.com/evadne\">Evadne Wu</a> on sandboxing AI agents.</p>\n",
      "date_published" : "2026-04-03T10:11:52+01:00",
      "id" : "https://douglashill.co/2026/rust-london-learning-all-sorts/",
      "url" : "https://douglashill.co/2026/rust-london-learning-all-sorts/"
    },
    {
      "content_html" : "<p>At NSLondon we’re <a href=\"https://www.meetup.com/nslondon/events/313805476/\">meeting for coffee on Sat 18th</a> followed by a stroll in Hyde Park if the weather is fine. Bring a laptop and show your coding project. I’ll be there with non-iOS projects.</p>\n",
      "date_published" : "2026-04-01T21:02:49+01:00",
      "id" : "https://douglashill.co/2026/nslondon-coffee-april/",
      "url" : "https://douglashill.co/2026/nslondon-coffee-april/"
    },
    {
      "content_html" : "<p>I hope everyone going has a fantastic time at <a href=\"https://www.meetup.com/nslondon/events/313347937/\">NSLondon at Apple Battersea</a> this evening. Beautiful space, and both talks sound really useful. Bit of a shame I’m away.</p>\n",
      "date_published" : "2026-03-12T11:29:27+01:00",
      "id" : "https://douglashill.co/2026/nslondon-apple-this-evening/",
      "url" : "https://douglashill.co/2026/nslondon-apple-this-evening/"
    },
    {
      "content_html" : "<p>One day I assume there will be a Mac with Internal Headphones to explain the need for this precise copy writing.</p>\n\n<p><img src=\"https://douglashill.co/2026/external-headphones/screenshot.png\" alt=\"Screenshot of macOS volume change notification showing the title External Headphones\" title=\"\" /></p>\n",
      "date_published" : "2026-03-11T18:14:20+0100",
      "id" : "https://douglashill.co/2026/external-headphones/",
      "url" : "https://douglashill.co/2026/external-headphones/"
    },
    {
      "content_html" : "<p>Here’s a <a href=\"https://douglashill.co/2026/swift-ios-conferences-in-europe/\">roundup of upcoming Swift/iOS conferences in Europe</a>. UK conference scene is strong!</p>",
      "date_published" : "2026-02-20T09:37:45+01:00",
      "id" : "https://douglashill.co/2026/swift-ios-conferences-in-europe/",
      "url" : "https://douglashill.co/2026/swift-ios-conferences-in-europe/"
    },
    {
      "content_html" : "<p>Great evening at <a href=\"https://engineeringkiosk.dev/meetup/alps/\">Engineering Kiosk Alps</a> hosted by <a href=\"https://www.cloudflight.io/\">Cloudflight</a>. Similar format to <a href=\"https://nslondon.com/\">NSLondon</a>. Talks:</p>\n\n<ul>\n<li>Anna Larch: <a href=\"https://nextcloud.com/\">Nextcloud</a> is good place to work. Like <a href=\"https://www.nutrient.io/\">Nutrient</a>: ~160 people, remote, high trust, no fixed hours.</li>\n<li><a href=\"https://www.studio-craft.at/\">Beate Öttl</a>: Still good to avoid building the wrong thing fast.</li>\n</ul>\n",
      "date_published" : "2026-02-19T22:22:24+01:00",
      "id" : "https://douglashill.co/2026/engineering-kiosk-alps-cloudflight/",
      "url" : "https://douglashill.co/2026/engineering-kiosk-alps-cloudflight/"
    },
    {
      "content_html" : "<p>This <a href=\"https://www.cultofmac.com/how-to/stop-ios-update\">trick from Cult of Mac to disable iOS 26 update nags</a> seems to be working well on my iPad running iOS 18: <em>Enable iOS 18 Developer Betas</em>. Suddenly the OS is “up to date”. No more red badges or notifications that can’t otherwise be turned off.</p>\n",
      "date_published" : "2026-02-12T21:56:45+01:00",
      "id" : "https://douglashill.co/2026/disable-ios-26-update-nags/",
      "url" : "https://douglashill.co/2026/disable-ios-26-update-nags/"
    },
    {
      "content_html" : "<p>In 2025, I read 50% more books than in 2024, all DRM-free, mostly audiobooks. I wrote about <a href=\"https://douglashill.co/2025/books/\">my reading trends and shared some book picks from the year</a>, featuring Min Jin Lee, Marjan Kamali, Sarah Wynn-Williams and more.</p>",
      "date_published" : "2026-01-31T22:53:49+0100",
      "id" : "https://douglashill.co/2025/books/",
      "url" : "https://douglashill.co/2025/books/"
    },
    {
      "content_html" : "<p>Removed LinkedIn way to <a href=\"https://douglashill.co/follow/\">follow</a> my posts, since it wasn’t working anyway. The cross posting from <a href=\"https://micro.blog/\">Micro.blog</a> doesn’t seem reliable, and I don’t want to look at LinkedIn to check for replies.</p>\n",
      "date_published" : "2026-01-30T18:34:13+01:00",
      "id" : "https://douglashill.co/2026/removed-linkedin/",
      "url" : "https://douglashill.co/2026/removed-linkedin/"
    },
    {
      "content_html" : "<p>😳 rdar:45025538</p>\n\n<p><img src=\"https://douglashill.co/2026/rdar-45025538/screenshot.jpg\" alt=\"iPhone mini simulator home screen screenshot showing a red status bar showing only the text “😳 rdar:45025538”\" title=\"\" /></p>\n",
      "date_published" : "2026-01-30T18:02:39+0100",
      "id" : "https://douglashill.co/2026/rdar-45025538/",
      "url" : "https://douglashill.co/2026/rdar-45025538/"
    },
    {
      "content_html" : "<p>I’ll be away, but London people we have an <a href=\"https://www.meetup.com/nslondon/events/313003731/\">NSLondon pub evening this coming Thursday 29th</a> on Chancery Lane. This is in coordination with the organisers of the <a href=\"https://swiftcraft.uk/\">SwiftCraft conference in Folkestone in May</a>, which had great speakers last year and is in a lovely venue by the sea.</p>\n",
      "date_published" : "2026-01-23T13:35:13+01:00",
      "id" : "https://douglashill.co/2026/nslondon-swiftcraft-pub/",
      "url" : "https://douglashill.co/2026/nslondon-swiftcraft-pub/"
    },
    {
      "content_html" : "<p><a href=\"https://vivaldi.com/\">Vivaldi</a> tip: The setting to disable autofilling previously entered text in any form field is mislabeled as “Save and Fill Addresses”. Also note that disabling then enabling this setting will suggest text from before you disabled it.</p>\n\n<p><img src=\"https://douglashill.co/2026/vivaldi-autofill/screenshot.png\" alt=\"Screenshot of Vivaldi browser showing suggestions in Nutrient API documentation search: beta, aiassistantview, scope, aiassistantbutton, changetag, v1/betaGroups/{id}/relations\" title=\"\" /></p>\n",
      "date_published" : "2026-01-05T10:21:36+0000",
      "id" : "https://douglashill.co/2026/vivaldi-autofill/",
      "url" : "https://douglashill.co/2026/vivaldi-autofill/"
    },
    {
      "content_html" : "<p>For me, Apple’s dictation (including Voice Control) really, really doesn’t want to recognise the words ergonomic, ergonomics or ergonomically. After dozens of tries, every time except once it instead wrote economic, economics, or economically.</p>\n",
      "date_published" : "2026-01-03T21:11:00Z",
      "id" : "https://douglashill.co/2026/ergonomic-economic/",
      "url" : "https://douglashill.co/2026/ergonomic-economic/"
    },
    {
      "content_html" : "<p>Fantastic to see the <a href=\"https://swiftcraft.uk/news/dates-for-swiftcraft-2026\">Swift Craft conference coming back next year</a> with <a href=\"https://swiftcraft.uk/tickets\">tickets now available</a>. Great talks last year in a nice setting. It’s the closest Swift conference to London after the <a href=\"https://www.serversideswift.info\">Server-Side Swift Conference</a>.</p>\n",
      "date_published" : "2025-12-28T09:45:41Z",
      "id" : "https://douglashill.co/2025/swift-craft-back-next-year/",
      "url" : "https://douglashill.co/2025/swift-craft-back-next-year/"
    },
    {
      "content_html" : "<p>After <a href=\"https://douglashill.co/2025/use-version-on-disk/\">complaining earlier this month about Xcode’s handling of branch changes</a>, I found an <a href=\"https://douglashill.co/status/793360904368697344/\">older post/tweet about nearly the same thing from 9 years ago</a>, although I don’t know what that was replying to. So many old tweets are gone. Times change, but not so much Xcode.</p>\n",
      "date_published" : "2025-12-15T14:44:28Z",
      "id" : "https://douglashill.co/2025/times-change-not-xcode/",
      "url" : "https://douglashill.co/2025/times-change-not-xcode/"
    },
    {
      "content_html" : "<p>SwiftUI in iOS 26 adds equivalents of <code>UIBarButtonItem.SystemItem.done</code> and <code>UIBarButtonItem.SystemItem.cancel</code> to get standard Done and Cancel buttons. <a href=\"https://douglashill.co/2025/done-cancel-buttons-swiftui/\">Here’s the code we're using to wrap this new API with fallbacks for older versions.</a></p>",
      "date_published" : "2025-12-12T11:42:57+0000",
      "id" : "https://douglashill.co/2025/done-cancel-buttons-swiftui/",
      "url" : "https://douglashill.co/2025/done-cancel-buttons-swiftui/"
    },
    {
      "content_html" : "<p>The app icon is green because I happen to often use Xcode and Simulator at the same time. Two apps with icons that are the <em>same shape</em> and <em>same colour</em> and so are terrible at their main purpose of distinguishing the app.</p>\n",
      "date_published" : "2025-12-04T11:30:12Z",
      "id" : "https://douglashill.co/2025/same-shape-same-colour/",
      "url" : "https://douglashill.co/2025/same-shape-same-colour/"
    },
    {
      "content_html" : "<p>Is there any way to hack Xcode to skip the “The file “whatever.xcodeproj” has been modified by another application” alerts? Xcode writes project changes to disk immediately, so obviously after changing branch I always want the version on disk.</p>\n\n<p><img src=\"https://douglashill.co/2025/use-version-on-disk/screenshot.png\" alt=\"Screenshot of alert from Xcode: The file \"Catalog.xcodeproj\" has been modified by another application. The file is located at \"/Users/Douglas/ PSPDFKit/PSPDFKit/iOS/Catalog/Catalog xcodeproj\". Do you want to keep the Xcode version, or use the version on disk? Use Version on Disk; Keep Xcode Version.\" title=\"\" /></p>\n",
      "date_published" : "2025-12-04T11:27:34+0000",
      "id" : "https://douglashill.co/2025/use-version-on-disk/",
      "url" : "https://douglashill.co/2025/use-version-on-disk/"
    },
    {
      "content_html" : "<p>We’re seeing a UIKit crash introduced in iOS 26.1: <code>NSInternalInconsistencyException -[UIPencilInteraction _handleHoverGestureRecognizer:]: Received updates from an unknown hover gesture recognizer</code> (FB21266941) <a href=\"https://douglashill.co/2025/received-updates-from-an-unknown-hover-gesture-recognizer/\">Full post</a></p>",
      "date_published" : "2025-12-04T10:27:31Z",
      "id" : "https://douglashill.co/2025/received-updates-from-an-unknown-hover-gesture-recognizer/",
      "url" : "https://douglashill.co/2025/received-updates-from-an-unknown-hover-gesture-recognizer/"
    }
  ],
  "title" : "Douglas Hill",
  "version" : "https://jsonfeed.org/version/1"
}