<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><description>I write Swift and write about Swift, but most people prefer my dogs.</description><link>https://bsky.app/profile/twostraws.bsky.social</link><title>@twostraws.bsky.social - Paul Hudson</title><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mtu4h7cxi22e</link><description>&#34;Swift version&#34; has always meant two things - the compiler version and the language mode - and that confusion is real. 🤔 Swift formalizes &#34;language mode&#34; as the official term. https://www.hackingwithswift.com/swift/6.1/language-mode</description><pubDate>24 Aug 2026 20:12 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mtu4h7cxi22e</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mtqyavkrac2e</link><description>Sunday Build with HWS+: Craft a word game where players spell words from a grid of letters, but each word must match a special rule like &#34;must contain at least 5 letters&#34; or &#34;must start and end with the same letter.&#34; #SundayBuild https://www.hackingwithswift.com/plus/live-streams/wordcraft</description><pubDate>23 Aug 2026 14:19 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mtqyavkrac2e</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mtmtyurhv223</link><description>New on the Kickstart blog: 6 ways to promote your app without spending a penny. Six free ways to get your app in front of more people, and how much time each one actually takes. https://www.kickstart.tools/blog/6-ways-to-promote-your-app-without-spending-a-penny</description><pubDate>21 Aug 2026 22:52 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mtmtyurhv223</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mtlvs4aquc2e</link><description>Instead of stretching an image to fill space, SwiftUI can tile it by repeating horizontally and vertically. Just pass .tile to the resizable() modifier&#39;s resizingMode parameter. https://www.hackingwithswift.com/quick-start/swiftui/how-to-tile-an-image</description><pubDate>21 Aug 2026 13:51 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mtlvs4aquc2e</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mtjetwmk5c2e</link><description>If you&#39;re passing raw strings around for things like usernames and email addresses, you&#39;re scattering validation checks everywhere. Value objects with failable initializers mean invalid instances literally can&#39;t exist. https://www.hackingwithswift.com/articles/188/improving-your-swift-code-using-value-objects</description><pubDate>20 Aug 2026 13:43 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mtjetwmk5c2e</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mthrwv3fmc2g</link><description>New on the Kickstart blog: App Store offer codes – how to track campaigns, win back subscribers, and grow your app. Offer codes can associate redemption activity directly with a campaign, which makes them a fantastic marketing tool – when used wisely! https://www.kickstart.tools/blog/app-store-offer-codes-how-to-track-campaigns-win-back-subscribers-and-grow-your-app</description><pubDate>19 Aug 2026 22:32 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mthrwv3fmc2g</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mtgzeeh5wc2e</link><description>For HWS+ subscribers: Structs have single owners, which is usually exactly what you want, but wrapping one in a generic Box class is the cleanest way to share it safely when you genuinely need to. https://www.hackingwithswift.com/plus/intermediate-swift/the-ultimate-box-type</description><pubDate>19 Aug 2026 15:12 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mtgzeeh5wc2e</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mtengeacws2e</link><description>SwiftData&#39;s #Predicate macro looks like pure Swift but gets compiled into something else entirely. Some things crash at runtime, some silently return nothing, and !value can behave differently to value == false. 😅 https://www.hackingwithswift.com/quick-start/swiftdata/how-to-filter-swiftdata-results-with-predicates</description><pubDate>18 Aug 2026 16:33 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mtengeacws2e</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mtecb6uad22d</link><description>Kickstart Exchange launched exactly 24 hours ago, and already has 115 apps onboard! 🎉 It’s a free advertising network to help indie app developers grow: you show ads for other apps, and they show ads for you – everyone wins. Sign up today: exchange.kickstart.tools&#xA;https://exchange.kickstart.tools</description><pubDate>18 Aug 2026 13:13 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mtecb6uad22d</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mtcoxlq6cc22</link><description>New on the Kickstart blog: How to promote your App Store app for free with Kickstart Exchange. It&#39;s a new, free cross-promotion service for indie apps – here’s how to get started today! https://www.kickstart.tools/blog/how-to-promote-your-app-store-app-for-free-with-kickstart-exchange</description><pubDate>17 Aug 2026 21:55 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mtcoxlq6cc22</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mtbt25dnqs2e</link><description>Top-level Swift code - scripts and playgrounds - can use await directly without needing to wrap everything in a task or a dedicated @main type. A genuine quality of life win for scripting and quick experiments. https://www.hackingwithswift.com/swift/5.7/top-level-concurrency</description><pubDate>17 Aug 2026 13:36 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mtbt25dnqs2e</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mtbs5eyl6k2m</link><description>Today I’m really proud to launch Kickstart Exchange: a free service that provides advertising for indie app developers. You show small adverts in your app, and in exchange adverts for your apps appear elsewhere – it&#39;s a link exchange! exchange.kickstart.tools&#xA;https://exchange.kickstart.tools</description><pubDate>17 Aug 2026 13:19 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mtbs5eyl6k2m</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mt7cl7z7h22e</link><description>Sunday Build with HWS+: Create a watchOS fitness app that tracks walking workouts and compares your pace against your overall average, perfect for seeing progress on a regular route.🚶🏼‍♂️ #SundayBuild https://www.hackingwithswift.com/plus/live-streams/shadowsteps</description><pubDate>16 Aug 2026 13:36 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mt7cl7z7h22e</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mt7cky2wq22e</link><description>Sunday Build with HWS+: Create a watchOS fitness app that tracks walking workouts and compares your pace against your overall average, perfect for seeing progress on a regular route.🚶🏼‍♂️ #SundayBuild https://www.hackingwithswift.com/plus/live-streams/shadowsteps</description><pubDate>16 Aug 2026 13:35 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mt7cky2wq22e</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mt4sxikefk2e</link><description>It’s Saturday: a great day to do some indie hacking! (Or to chill out a bit.)</description><pubDate>15 Aug 2026 13:51 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mt4sxikefk2e</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mt2hfr6a4c25</link><description>New on the Kickstart blog: How to user test your app with just 5 people. Five testers, Apple’s three questions, and what to watch for in your tests! https://www.kickstart.tools/blog/how-to-user-test-your-app-with-just-5-people</description><pubDate>14 Aug 2026 15:19 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mt2hfr6a4c25</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3msxuhqax4s2e</link><description>Swift&#39;s auto-synthesized Hashable checks all properties for equality, which means two objects with the same ID but different timestamps can silently create near-duplicates in your sets. https://www.hackingwithswift.com/articles/199/avoiding-near-duplicates-in-sets</description><pubDate>13 Aug 2026 14:34 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3msxuhqax4s2e</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mswfyu5yi22v</link><description>New on the Kickstart blog: How to avoid App Store rejection – an App Review checklist. Apple rejected over 2 million App Store submissions last year, so here are the mistakes that caused them, and the checklist that gets you through first time. https://www.kickstart.tools/blog/how-to-avoid-app-store-rejection-an-app-review-checklist</description><pubDate>13 Aug 2026 00:43 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mswfyu5yi22v</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3msvdxzfp4s2e</link><description>For HWS+ subscribers: From generic counted sets to property wrappers, some really elegant patterns open up once you get comfortable writing your own generic types. https://www.hackingwithswift.com/plus/intermediate-swift/understanding-generics-part-2</description><pubDate>12 Aug 2026 14:34 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3msvdxzfp4s2e</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mssmb2acd22e</link><description>SwiftData&#39;s underlying store is just SQLite, which means you can inspect it directly from Terminal when something seems off. A handy ModelContext extension makes getting the right command trivial: https://www.hackingwithswift.com/quick-start/swiftdata/how-to-read-the-contents-of-a-swiftdata-database-store</description><pubDate>11 Aug 2026 12:24 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mssmb2acd22e</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3msqy6nvbg22e</link><description>If a generic function has a default value for a type parameter, Swift can infer the type from that default rather than requiring you to spell it out every time. Subtle, but it removes a whole category of unnecessary verbosity. https://www.hackingwithswift.com/swift/5.7/default-type-inference</description><pubDate>10 Aug 2026 20:52 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3msqy6nvbg22e</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mspwpkjb222r</link><description>New on the Kickstart blog: How to get featured on the App Store – nominations, timing, and what editors want. Apple takes featuring requests through App Store Connect, so here’s how the nominations form works, when to file it, and what editors pick. https://www.kickstart.tools/blog/how-to-get-featured-on-the-app-store-nominations-timing-and-what-editors-want</description><pubDate>10 Aug 2026 10:53 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mspwpkjb222r</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3msnz3jgatc2e</link><description>Sunday Build with HWS+: Create a watchOS fitness app that tracks walking workouts and compares your pace against your overall average, perfect for seeing progress on a regular route.🚶🏼‍♂️ #SundayBuild https://www.hackingwithswift.com/plus/live-streams/shadowsteps</description><pubDate>09 Aug 2026 16:30 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3msnz3jgatc2e</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3msixsad7vc2y</link><description>💰 New on the Kickstart blog: It’s fine to build apps just for the money. Nobody demands that plumbers feel passion for pipes, so why do developers apologize for wanting profit? Money is a perfectly good reason to ship. https://www.kickstart.tools/blog/its-fine-to-build-apps-just-for-the-money</description><pubDate>07 Aug 2026 16:24 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3msixsad7vc2y</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3msij2cwlrc2e</link><description>Want to customize the way links are opened? Tapping a link in SwiftUI opens Safari by default, but a custom OpenURLAction lets you intercept, redirect, or handle the URL yourself. https://www.hackingwithswift.com/quick-start/swiftui/how-to-customize-the-way-links-are-opened</description><pubDate>07 Aug 2026 12:00 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3msij2cwlrc2e</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3msgot3sax22i</link><description>It&#39;s not easy for indie developers to market their app, but I&#39;ve built a solution that works for everyone – and it&#39;s both free and 100% private. It&#39;s called Kickstart Exchange, and it enters beta today. Find out more here: exchange.kickstart.tools&#xA;https://exchange.kickstart.tools</description><pubDate>06 Aug 2026 18:38 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3msgot3sax22i</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3msgcjolxzs2e</link><description>Double-click a brace to select an entire code block. Randomize test order to catch hidden dependencies. Xcode&#39;s spell checker even understands camelCase. There are 24 of these. https://www.hackingwithswift.com/articles/229/24-quick-xcode-tips</description><pubDate>06 Aug 2026 14:58 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3msgcjolxzs2e</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3msehbduxk22g</link><description>New on the Kickstart blog: App Store competitor analysis – how to (ethically!) spy on your rivals. Version histories, paywall flows, ad libraries, metadata snapshots – your competitors publish their entire strategy in public, so here’s how to read it. https://www.kickstart.tools/blog/app-store-competitor-analysis-how-to-spy-on-your-rivals</description><pubDate>05 Aug 2026 21:18 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3msehbduxk22g</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3msdq34k3hs2e</link><description>For HWS+ subscribers: Adding constraints to a generic function might sound like it limits what you can do, but it actually unlocks more functionality, and it lets the compiler use static dispatch to generate faster code. https://www.hackingwithswift.com/plus/intermediate-swift/understanding-generics-part-1</description><pubDate>05 Aug 2026 14:22 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3msdq34k3hs2e</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3msb3ni4xvc2e</link><description>A useful collection of SwiftData performance tips - smarter predicates, prefetching relationships, batch inserts on background actors, and when to use external storage for binary data. https://www.hackingwithswift.com/quick-start/swiftdata/how-to-optimize-the-performance-of-your-swiftdata-apps</description><pubDate>04 Aug 2026 13:12 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3msb3ni4xvc2e</guid></item></channel></rss>