<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Arnaud Joubay — Writes</title><description>Notes on SwiftUI, Xcode, Rails, and building indie apps.</description><link>https://sowenjub.me/</link><item><title>How to delete an app and all iCloud/CloudKit data</title><link>https://sowenjub.me/writes/how-to-delete-an-app-and-all-icloud-cloudkit-data/</link><guid isPermaLink="true">https://sowenjub.me/writes/how-to-delete-an-app-and-all-icloud-cloudkit-data/</guid><description>CloudKit makes data very hard to lose — including on purpose. The steps that finally wiped an app and all its iCloud data clean, found by trial and error.</description><pubDate>Tue, 05 Mar 2024 10:18:58 GMT</pubDate></item><item><title>How to upload dSYMs files to Sentry with Xcode Cloud</title><link>https://sowenjub.me/writes/how-to-upload-dsyms-files-to-sentry-with-xcode-cloud/</link><guid isPermaLink="true">https://sowenjub.me/writes/how-to-upload-dsyms-files-to-sentry-with-xcode-cloud/</guid><description>Sentry needs dSYMs to symbolicate stack traces, and Xcode Cloud won&apos;t hand them over on its own. How I wired the upload into my three workflows.</description><pubDate>Thu, 25 Jan 2024 17:24:44 GMT</pubDate></item><item><title>Searchable vs. Textfield in a sheet deployed with  presentationDetents</title><link>https://sowenjub.me/writes/searchable-vs-textfield-in-a-sheet-deployed-with-presentationdetents/</link><guid isPermaLink="true">https://sowenjub.me/writes/searchable-vs-textfield-in-a-sheet-deployed-with-presentationdetents/</guid><description>Why searchable and TextField behave differently inside a sheet using presentationDetents, and what I settled on for logging meals in No Meat Today.</description><pubDate>Fri, 16 Dec 2022 13:49:33 GMT</pubDate></item><item><title>How I made my app 73% lighter</title><link>https://sowenjub.me/writes/how-i-made-my-app-73-percent-ligther/</link><guid isPermaLink="true">https://sowenjub.me/writes/how-i-made-my-app-73-percent-ligther/</guid><description>My app had quietly grown to 72 MB, and I had no idea why. How I found what was eating the space and got it back down. Mostly cows, as it turned out.</description><pubDate>Thu, 17 Nov 2022 11:02:04 GMT</pubDate></item><item><title>Single Size Icons: Solving &quot;Core Data API misuse&quot; and &quot;Command CompileAssetCatalog failed with a nonzero exit code&quot;</title><link>https://sowenjub.me/writes/single-size-icons-solving-command-compileassetcatalog-failed-with-a-nonzero-exit-code/</link><guid isPermaLink="true">https://sowenjub.me/writes/single-size-icons-solving-command-compileassetcatalog-failed-with-a-nonzero-exit-code/</guid><description>Single-size icons broke my build with two unhelpful errors. The asset scales that fixed &apos;CompileAssetCatalog failed&apos; and &apos;Core Data API misuse&apos;.</description><pubDate>Wed, 09 Nov 2022 15:34:29 GMT</pubDate></item><item><title>I&apos;m done with Semantic Versioning</title><link>https://sowenjub.me/writes/im-done-with-semantic-versioning/</link><guid isPermaLink="true">https://sowenjub.me/writes/im-done-with-semantic-versioning/</guid><description>SemVer exists to avoid dependency hell. App Store users can&apos;t pick a version, so it buys them nothing — here&apos;s what I number releases by instead.</description><pubDate>Thu, 27 Oct 2022 13:55:23 GMT</pubDate></item><item><title>Localizing App Shortcuts with App Intents</title><link>https://sowenjub.me/writes/localizing-app-shortcuts-with-app-intents/</link><guid isPermaLink="true">https://sowenjub.me/writes/localizing-app-shortcuts-with-app-intents/</guid><description>An inventory of every string App Shortcuts expose through App Intents, and how to translate each one — including what the docs don&apos;t tell you.</description><pubDate>Tue, 06 Sep 2022 12:42:07 GMT</pubDate></item><item><title>SwiftUI Canvas, Path, Shape, and View</title><link>https://sowenjub.me/writes/swiftui-canvas-path-shape-and-view/</link><guid isPermaLink="true">https://sowenjub.me/writes/swiftui-canvas-path-shape-and-view/</guid><description>Personal notes on how Canvas, Path, Shape and View actually differ in SwiftUI: what each one is, and when to reach for it.</description><pubDate>Tue, 17 May 2022 08:50:09 GMT</pubDate></item><item><title>How to add a Diagnostic Mode using Settings.bundle and SwiftUI</title><link>https://sowenjub.me/writes/how-to-add-a-diagnostic-mode-using-settings-bundle-and-swiftui/</link><guid isPermaLink="true">https://sowenjub.me/writes/how-to-add-a-diagnostic-mode-using-settings-bundle-and-swiftui/</guid><description>Technical settings shouldn&apos;t surface in your app, but they&apos;re useful at times. How I hid a Diagnostic Mode behind Settings.bundle in a SwiftUI app.</description><pubDate>Wed, 27 Apr 2022 09:39:54 GMT</pubDate></item><item><title>How an enum with associated values can conform to the Identifiable protocol</title><link>https://sowenjub.me/writes/identifiable-enum-with-associated-values/</link><guid isPermaLink="true">https://sowenjub.me/writes/identifiable-enum-with-associated-values/</guid><description>How to make an enum with associated values conform to Identifiable, and drive SwiftUI views with it — the paywall in No Meat Today, in my case.</description><pubDate>Fri, 11 Jun 2021 19:38:00 GMT</pubDate></item><item><title>Localizing your App Store marketing content with Localazy and Fastlane</title><link>https://sowenjub.me/writes/localizing-your-app-store-marketing-content-with-localazy/</link><guid isPermaLink="true">https://sowenjub.me/writes/localizing-your-app-store-marketing-content-with-localazy/</guid><description>Your App Store page is often the first contact someone has with your app. How I translate its marketing content with Localazy and Fastlane.</description><pubDate>Sun, 30 May 2021 13:36:22 GMT</pubDate></item><item><title>Translating your iOS app with Localazy</title><link>https://sowenjub.me/writes/translating-your-ios-app-with-localazy/</link><guid isPermaLink="true">https://sowenjub.me/writes/translating-your-ios-app-with-localazy/</guid><description>I&apos;d given up on translating No Meat Today — nothing I found fit my budget or my patience. Then I tried Localazy. Here&apos;s how I got started.</description><pubDate>Fri, 28 May 2021 22:00:27 GMT</pubDate></item><item><title>Capybara: 2 ways to click links in emails</title><link>https://sowenjub.me/writes/capybara-2-ways-to-click-links-in-emails/</link><guid isPermaLink="true">https://sowenjub.me/writes/capybara-2-ways-to-click-links-in-emails/</guid><description>Testing a signup confirmation means clicking a link inside an email. Two ways to do it in Capybara: lean with Nokogiri, or comfortable with capybara-email.</description><pubDate>Fri, 18 Dec 2020 23:00:00 GMT</pubDate></item><item><title>Replacing Selenium with Cuprite for Rails system tests</title><link>https://sowenjub.me/writes/replacing-selenium-with-cuprite-for-rails-system-tests/</link><guid isPermaLink="true">https://sowenjub.me/writes/replacing-selenium-with-cuprite-for-rails-system-tests/</guid><description>System tests need a browser and a driver to pilot it. Why I replaced Selenium with Cuprite in my Rails system tests, and what it changed.</description><pubDate>Thu, 17 Dec 2020 23:00:00 GMT</pubDate></item><item><title>Auto-linking URLs with Trix Editor and StimulusJS</title><link>https://sowenjub.me/writes/auto-linking-urls-with-trix-editor-and-stimulusjs/</link><guid isPermaLink="true">https://sowenjub.me/writes/auto-linking-urls-with-trix-editor-and-stimulusjs/</guid><description>Trix won&apos;t turn a pasted URL into a link, which surprised me. A Stimulus controller that makes it behave, with no jQuery involved.</description><pubDate>Mon, 19 Oct 2020 22:00:00 GMT</pubDate></item><item><title>Multiple YAML defaults in Rails fixtures</title><link>https://sowenjub.me/writes/multiple-yaml-defaults-in-rails-fixtures/</link><guid isPermaLink="true">https://sowenjub.me/writes/multiple-yaml-defaults-in-rails-fixtures/</guid><description>Rails fixtures support YAML defaults, but the docs only ever show one set. How to use several, and why the DEFAULTS label trips everyone up.</description><pubDate>Tue, 25 Aug 2020 14:05:00 GMT</pubDate></item><item><title>Emoji picker controller with StimulusJS and Emoji Button</title><link>https://sowenjub.me/writes/emoji-picker-controller-with-stimulus-js/</link><guid isPermaLink="true">https://sowenjub.me/writes/emoji-picker-controller-with-stimulus-js/</guid><description>Emoji Button already does the hard part of a vanilla JavaScript emoji picker. The Stimulus controller I wrote to drop it into a Rails app.</description><pubDate>Wed, 15 Jul 2020 20:01:00 GMT</pubDate></item><item><title>Rails+TailwindCSS: adding &quot;required&quot; to form labels (and how to find the solution by yourself)</title><link>https://sowenjub.me/writes/required-form-label-with-rails-tailwindcss/</link><guid isPermaLink="true">https://sowenjub.me/writes/required-form-label-with-rails-tailwindcss/</guid><description>This post addresses a simple need: adding a &quot;required&quot; text next to any form field label that is… required.</description><pubDate>Fri, 10 Jul 2020 20:01:00 GMT</pubDate></item></channel></rss>