<?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/3mzlorx4ad22w</link><description>Kickstart 2.2 is out! This is a huge release on so many fronts:&#xA;- You can control multiple App Store Connect and Apple Ads accounts!&#xA;- You can track where your apps rank for hundreds of searches around the world!&#xA;- You can create powerful, custom filters for all your keywords!</description><pubDate>05 Nov 2026 20:17 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mzlorx4ad22w</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mzfxtjkyxs2a</link><description>If you only need a count, don&#39;t fetch all the objects just to call .count on the result. fetchCount() does the work entirely in the database and is dramatically faster. https://www.hackingwithswift.com/quick-start/swiftdata/how-to-count-results-without-loading-them</description><pubDate>03 Nov 2026 13:43 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mzfxtjkyxs2a</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mzdj53gjb22a</link><description>if #available checks whether something exists. #unavailable is the clean inverse - no more empty if blocks with all your real code hidden in the else. https://www.hackingwithswift.com/swift/5.6/unavailable</description><pubDate>02 Nov 2026 14:15 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mzdj53gjb22a</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mz466xb5hk2a</link><description>Want a TextField to be active as soon as a view appears? On iOS, combine @FocusState with onAppear to set focus automatically. https://www.hackingwithswift.com/quick-start/swiftui/how-to-make-a-textfield-or-texteditor-have-default-focus</description><pubDate>30 Oct 2026 16:10 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mz466xb5hk2a</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3myzfjph5zs2a</link><description>accessibilityInputLabels() lets Voice Control users activate UI controls with custom spoken commands. Without it, they&#39;d have to recite the entire text of a view just to tap a button - imagine doing that when a stock price changes every second. https://www.hackingwithswift.com/articles/261/i-screwed-up-one-key-accessibility-behavior-and-now-i-m-on-a-mission-to-do-better</description><pubDate>29 Oct 2026 13:44 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3myzfjph5zs2a</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3myxahuodek2a</link><description>For HWS+ subscribers: StaticString is a string type that can only be created at compile time, which means no string interpolation and no surprises. It&#39;s perfect for cleaning up failable initializers when you know the value is always correct. https://www.hackingwithswift.com/plus/inside-swift/staticstring</description><pubDate>28 Oct 2026 17:08 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3myxahuodek2a</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3myut7wdbmc2a</link><description>One-to-many is the most common SwiftData relationship type - one array on one side, an optional on the other. I&#39;d still recommend making the inverse explicit though. https://www.hackingwithswift.com/quick-start/swiftdata/how-to-create-one-to-many-relationships</description><pubDate>27 Oct 2026 18:05 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3myut7wdbmc2a</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mys36miics2a</link><description>Dictionaries with non-String, non-Int keys couldn&#39;t encode cleanly into keyed containers. The new CodingKeyRepresentable protocol bridges that gap, letting custom key types participate in Codable properly. https://www.hackingwithswift.com/swift/5.6/codingkeyrepresentable</description><pubDate>26 Oct 2026 15:50 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mys36miics2a</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mypj6jemlc2a</link><description>Sunday Build with HWS+: Let&#39;s create an app designed to help kids build confidence in mathematics, with division remainders, styling polish, and a few clever SwiftUI techniques along the way. 🧮 #SundayBuild https://www.hackingwithswift.com/plus/live-streams/flash-math</description><pubDate>25 Oct 2026 15:22 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mypj6jemlc2a</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mykampv5n22a</link><description>Control how the keyboard reacts to scrolling with scrollDismissesKeyboard() - choose between .immediately, .interactively, or .never for precise behavior. https://www.hackingwithswift.com/quick-start/swiftui/how-to-dismiss-the-keyboard-when-the-user-scrolls</description><pubDate>23 Oct 2026 13:06 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mykampv5n22a</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3myhotxekd22a</link><description>A handful of lines of Metal shading language can produce remarkable visual effects in SwiftUI ✨ Inferno is an open-source library of ready-to-use shaders that makes GPU-accelerated graphics accessible to every developer. https://www.hackingwithswift.com/articles/262/introducing-inferno-metal-shaders-for-swiftui</description><pubDate>22 Oct 2026 12:42 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3myhotxekd22a</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3myf6czsmms2a</link><description>For HWS+ subscribers: Swift Argument Parser makes it easy to build useful macOS command-line tools, and a JSON tidier is a great first project. This one can prettify, compress, sort keys, and write output to a file, all in surprisingly little code. https://www.hackingwithswift.com/plus/command-line-apps/json-tidy</description><pubDate>21 Oct 2026 12:41 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3myf6czsmms2a</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mycm3b22vk2a</link><description>Use @Attribute(.externalStorage) to hint to SwiftData that large data like images should live outside the main store. It handles everything transparently, just don&#39;t try using those properties in predicates. https://www.hackingwithswift.com/quick-start/swiftdata/how-to-store-swiftdata-attributes-in-an-external-file</description><pubDate>20 Oct 2026 12:09 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mycm3b22vk2a</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3my3au33iw223</link><description>In two hours I&#39;m running an online workshop on building apps with AI. It&#39;s going to be *packed* – coding, yes, but also research, design, marketing, and more. Free to all Hacking with Swift+ subscribers, even if you sign up today! www.hackingwithswift.com/plus&#xA;https://www.hackingwithswift.com/plus</description><pubDate>17 Oct 2026 14:00 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3my3au33iw223</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3my34seugqk27</link><description>Wow, I totally missed that over 400 apps are now using Kickstart Exchange! 🤯  It&#39;s a completely free advertising network for indie app developers, making it an incredibly effective way to find new users. exchange.kickstart.tools&#xA;https://exchange.kickstart.tools</description><pubDate>17 Oct 2026 12:47 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3my34seugqk27</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mxyku6aqzc2a</link><description>SwiftUI&#39;s Text view can format arrays, measurements, and currencies directly using the format parameter - no custom formatter needed. https://www.hackingwithswift.com/quick-start/swiftui/how-to-format-text-inside-text-views</description><pubDate>16 Oct 2026 12:21 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mxyku6aqzc2a</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mxw6xf7cgk2a</link><description>What if you could build websites the same way you build SwiftUI apps, declaratively in pure Swift with no HTML required? That&#39;s the idea behind Ignite, and it works surprisingly well. 🔥 https://www.hackingwithswift.com/articles/266/build-your-next-website-in-swift</description><pubDate>15 Oct 2026 13:43 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mxw6xf7cgk2a</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mxthjffr7c2a</link><description>For HWS+ subscribers: Downloading data gets all the attention, but uploading Codable data cleanly is just as important. This walks through wrapping URLSession uploads with generics and Result for a much nicer API. https://www.hackingwithswift.com/plus/networking/uploading-codable-data</description><pubDate>14 Oct 2026 11:38 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mxthjffr7c2a</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mxrfmaq66k2p</link><description>I&#39;m pleased to announce a new service for indie developers: Kickstart Signal, a feature request service you can embed in your app to track user requests, votes, comments, and more. Completely free, works on every Apple platform, and available today ✨ signal.kickstart.tools</description><pubDate>13 Oct 2026 15:58 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mxrfmaq66k2p</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mxr2suqlsk2a</link><description>Mark a SwiftData property with @Transient and it stays in memory only, never written to disk. Two rules: it needs a default value, and you can&#39;t use it in predicates. 💾 https://www.hackingwithswift.com/quick-start/swiftdata/how-to-make-transient-attributes-in-a-swiftdata-model</description><pubDate>13 Oct 2026 12:45 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mxr2suqlsk2a</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mxpfqffw6k2s</link><description>Everything is in place for a nice new launch tomorrow 😎</description><pubDate>12 Oct 2026 20:55 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mxpfqffw6k2s</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mxoof44zvc2a</link><description>Combining opaque types with primary associated types, you can write any Sequence&lt;String&gt; to express &#34;any sequence of strings&#34; - a constrained existential. The generics story in Swift keeps getting better. https://www.hackingwithswift.com/swift/5.7/constrained-existentials</description><pubDate>12 Oct 2026 13:58 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mxoof44zvc2a</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mxokghbymc26</link><description>Somewhere out there is the GOAT who designed the classic iOS 6 Passbook shredding animation. I hope they are having a great day. ✨</description><pubDate>12 Oct 2026 12:47 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mxokghbymc26</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mxgxptn6hc2a</link><description>safeAreaInset() lets you place content outside the safe area while automatically adjusting other views so nothing gets hidden. It works beautifully with ScrollView, List, and Form. https://www.hackingwithswift.com/quick-start/swiftui/how-to-inset-the-safe-area-with-custom-content</description><pubDate>09 Oct 2026 12:23 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mxgxptn6hc2a</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mxefvldbnc2a</link><description>Every polished demo you&#39;ve ever watched was built multiple times behind the scenes. Making mistakes isn&#39;t a sign you&#39;re failing - it&#39;s how learning actually works. https://www.hackingwithswift.com/articles/271/making-mistakes-while-learning-swift</description><pubDate>08 Oct 2026 11:59 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mxefvldbnc2a</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mxc35vccxk26</link><description>I&#39;m pleased to announce v2.0 of my SwiftUI Pro agent skill! It&#39;s packed with improvements based on real-world testing of iOS 27 and iPhone Duo, and also integrates a variety of advice from Apple&#39;s own skills. Get it here: https://github.com/twostraws/swiftui-agent-skill</description><pubDate>07 Oct 2026 13:42 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mxc35vccxk26</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mxbxanks2s2a</link><description>For HWS+ subscribers: There&#39;s more to good networking than just fetching data. NWPathMonitor and URLSessionConfiguration let you respect the user&#39;s connection, wait for connectivity, and avoid expensive requests. https://www.hackingwithswift.com/plus/networking/user-friendly-network-access</description><pubDate>07 Oct 2026 12:32 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mxbxanks2s2a</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mx7kjn4z7c2a</link><description>Codable structs and enums work as SwiftData properties, but collections like [String] get stored as binary data and can&#39;t be used in predicates. Tread *carefully*. https://www.hackingwithswift.com/quick-start/swiftdata/using-structs-and-enums-in-swiftdata-models</description><pubDate>06 Oct 2026 13:39 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mx7kjn4z7c2a</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mx4vj6rn2c2a</link><description>Long, complex type annotations got a bit more manageable. Write _ for the parts you want Swift to infer, and spell out only what matters. A small addition, but surprisingly handy when working with deeply nested generic types. 🧩 https://www.hackingwithswift.com/swift/5.6/type-placeholders</description><pubDate>05 Oct 2026 12:17 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mx4vj6rn2c2a</guid></item><item><link>https://bsky.app/profile/twostraws.bsky.social/post/3mx2erogbtk2a</link><description>Sunday Build with HWS+: Build a SwiftData app that monitors your Xcode build times, then calculates how much time and money you&#39;d save by upgrading hardware. #SundayBuild https://www.hackingwithswift.com/plus/live-streams/upgrade-your-mac</description><pubDate>04 Oct 2026 12:12 +0000</pubDate><guid isPermaLink="false">at://did:plc:2izaurqsrmguegexlfoc7pps/app.bsky.feed.post/3mx2erogbtk2a</guid></item></channel></rss>