<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://mitchsmith.app/feed.xml" rel="self" type="application/atom+xml" /><link href="https://mitchsmith.app/" rel="alternate" type="text/html" /><updated>2026-09-22T22:17:02+00:00</updated><id>https://mitchsmith.app/feed.xml</id><title type="html">Mitch Smith</title><subtitle>Software engineer and indie app developer from Baltimore. iOS apps — games, travel tools, and music.</subtitle><author><name>Mitchell Smith</name></author><entry><title type="html">CD Changer 1.4 - Hey Siri, play disc 3!</title><link href="https://mitchsmith.app/2026/09/21/cd-changer-1-4-siri/" rel="alternate" type="text/html" title="CD Changer 1.4 - Hey Siri, play disc 3!" /><published>2026-09-21T00:00:00+00:00</published><updated>2026-09-21T00:00:00+00:00</updated><id>https://mitchsmith.app/2026/09/21/cd-changer-1-4-siri</id><content type="html" xml:base="https://mitchsmith.app/2026/09/21/cd-changer-1-4-siri/"><![CDATA[<p>So the whole point of this app is you load six albums before you leave the house and then you don’t touch your phone. Which worked great right up until I wanted a different disc while driving and the only way to get it was poking at the screen. I’ve spent years yelling “Hey Siri, play whatever” at Apple Music, so it kinda bugged me that my own app was the one thing in the car that wouldn’t listen.</p>

<p>This new version fixes that! You can say “Hey Siri, play Road Trip in CD Changer” or “play disc 3 in CD Changer” and it plays - screen off, phone in the cupholder, from CarPlay or the lock screen or wherever. It’s in the Shortcuts app too if you want to automate it.</p>

<p>It was a little bit of a journey getting there - standing in my driveway talking to my phone, and my wife getting annoyed at about 500 “hey siri”s so here’s the dev log version in case you’re trying to do the same thing in your app.</p>

<h2 id="version-14">Version 1.4</h2>

<h3 id="teaching-siri-your-apps-nouns">Teaching Siri your app’s nouns</h3>

<p>The modern way to do this is App Intents, not the old SiriKit stuff. You write three things - an intent, which is the verb (play a magazine), an entity, which is the noun (a magazine, with its name), and a shortcuts provider, which is the list of sentences Siri will accept. Every sentence has to include your app’s name, that’s just the rule.</p>

<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kt">AppShortcut</span><span class="p">(</span>
    <span class="nv">intent</span><span class="p">:</span> <span class="kt">PlayMagazineIntent</span><span class="p">(),</span>
    <span class="nv">phrases</span><span class="p">:</span> <span class="p">[</span>
        <span class="s">"Play </span><span class="se">\(</span><span class="p">\</span><span class="o">.</span><span class="err">$</span><span class="n">magazine</span><span class="se">)</span><span class="s"> in </span><span class="se">\(</span><span class="o">.</span><span class="n">applicationName</span><span class="se">)</span><span class="s">"</span><span class="p">,</span>
        <span class="s">"Play something in </span><span class="se">\(</span><span class="o">.</span><span class="n">applicationName</span><span class="se">)</span><span class="s">"</span>
    <span class="p">],</span>
    <span class="nv">shortTitle</span><span class="p">:</span> <span class="s">"Play Disc Magazine"</span><span class="p">,</span>
    <span class="nv">systemImageName</span><span class="p">:</span> <span class="s">"opticaldisc"</span>
<span class="p">)</span>
</code></pre></div></div>

<p>About 200 lines all in and honestly the first pass was kinda pleasant. Built it, tests passed, wrote “device verification outstanding” in my notes and moved on.</p>

<p>Then I actually tried it….every single phrase, including ones I made up on the spot, got <em>“Sorry, CD Changer hasn’t added support for that with Siri.”</em> Phone and car. Ughh, thought this was going to be easy.</p>

<h3 id="round-1---siri-had-never-heard-a-magazine-name">Round 1 - Siri had never heard a magazine name</h3>

<p>I dug through the built app to see if my intents were even in there (there’s a <code class="language-plaintext highlighter-rouge">Metadata.appintents</code> folder inside the .app with all of it in JSON) and they were, everything was perfect, which was somehow worse. Two things were wrong and neither one gives you an error.</p>

<p>The first is that Siri doesn’t ask your app for the list of magazines when you speak. It takes a snapshot at some earlier point and matches against that, and the thing that tells it to take the snapshot is <code class="language-plaintext highlighter-rouge">updateAppShortcutParameters()</code>, which I had never called anywhere because nothing told me to. My magazines all get created after first launch, so as far as Siri knew this app had zero magazines and every sentence with one in it was nonsense. Now it gets called every time you create, rename, delete or reorder a magazine.</p>

<p>The second one is dumber. The entity’s display name was built with <code class="language-plaintext highlighter-rouge">"\(name)"</code> inside a <code class="language-plaintext highlighter-rouge">LocalizedStringResource</code>, which compiles fine and then shows up in the Shortcuts app as the literal text <code class="language-plaintext highlighter-rouge">%@</code>. Turns out that’s a known thing and you have to use the <code class="language-plaintext highlighter-rouge">stringLiteral:</code> initializer instead. So even once Siri had its snapshot it was matching your voice against “%@”.</p>

<p>Also the phrases are templates, not natural language. “Play the first disc in my road trip magazine” is never going to match “Play (magazine) in CD Changer” no matter how nicely you say it, so I went from 3 phrases to the max of 10, including a couple with no magazine in them at all (“play something in CD Changer”) that just play whatever’s loaded.</p>

<h3 id="round-2---play-my-magazine">Round 2 - “play my magazine”</h3>

<p>Round 1 worked! Siri’s suggestion sheet now listed “Play My Magazine in Digital CD Changer,” which was proof the snapshot was reaching the system, and also the moment I noticed every fresh install names its first magazine “My Magazine.” So the phrase you’d have to say is “play my magazine in CD Changer,” which is a perfectly normal English sentence that could mean anything. The default is “Magazine One” now.</p>

<p>The bigger one was disc numbers. I wanted “play disc 3” to work in one breath and it never had a chance, because the disc number was a plain <code class="language-plaintext highlighter-rouge">Int</code> and an Int is not allowed to appear in a phrase. Only entities and enums are. The workaround is a bit silly - I made an enum with twenty cases named one through twenty, and now <code class="language-plaintext highlighter-rouge">"Play disc \(\.$discNumber) in \(.applicationName)"</code> is a legal sentence. The old two step version (“play a specific disc,” then Siri asks which one) is still there for magazines past 20 slots, which I’m not sure anyone has.</p>

<h3 id="round-3---disc-3-played-disc-1">Round 3 - disc 3 played disc 1</h3>

<p>Back in the driveway. “Play disc one in CD Changer” played disc 1. “Play disc 3 in CD Changer” also played disc 1. What?!</p>

<p>I spent a while convinced it was an off by one in my enum. It wasn’t. The number was parsing fine, it was the <em>shortcut</em> that was losing. Three different shortcuts had phrases that all looked about the same - “Play a disc in CD Changer,” “Play a disc by number in CD Changer,” and “Play disc 3 in CD Changer” - and Siri picked the easiest one, the generic one with no number in it, which plays the first disc. So it looked exactly like the number being dropped. Apple’s WWDC session actually warns you not to have near duplicate phrases across shortcuts, and I did not watch that session.</p>

<p>There’s no way to tell Siri which shortcut to prefer, so the fix was just deleting every phrase that looked like another shortcut’s phrase. Then I re-tested everything on the phone and in the car and it all did the right thing, including next song, pause, and playing from a locked phone, which was the whole point in the first place.</p>

<p>(I know this is way more about phrase templates than anyone wanted, but none of it is unit testable - all three bugs only exist on a real device with the real Siri, so it’s build, install, go outside, talk to phone, repeat.)</p>

<h3 id="smaller-stuff">Smaller stuff</h3>

<ul>
  <li>Fixed a bug where editing one disc slot could leave the other slots stuck until you switched tabs.</li>
  <li>Siri knows the app as “CD Changer” as well as the full name, so you don’t have to say “Digital” every time.</li>
  <li>The first time you ask, iOS pops up “Turn on CD Changer Shortcuts?” That’s iOS, not me, and it only happens once.</li>
</ul>

<h2 id="what-it-still-doesnt-do">What it still doesn’t do</h2>

<p>You can’t say an artist or album name to it. Siri only knows magazine names and disc numbers because that’s all I taught it - artists would need the old SiriKit media intents and a whole extension target, and I’m not sure it’s worth it when Apple Music already does that. You also can’t say a magazine name and a disc number in the same sentence (“play disc 3 of Road Trip”), Siri only reliably takes one parameter per phrase. Otherwise same list as last time: no playlists, no iPad, no syncing between devices.</p>

<h2 id="try-it">Try it</h2>

<p>CD Changer is free. You get one six disc magazine, which is a whole changer, and Pro is a one time purchase if you want more than one.</p>

<ul>
  <li><a href="https://apps.apple.com/us/app/id6760621270?pt=120429264&amp;ct=blog&amp;mt=8">Download on the App Store</a></li>
  <li><a href="https://mitchsmith.app/cdchanger/">CD Changer - product page</a></li>
</ul>

<p>The screenshots below are the Shortcuts app before and after, which tells the story better than I did.</p>]]></content><author><name>Mitchell Smith</name></author><category term="ios" /><category term="carplay" /><category term="music" /><category term="siri" /><category term="side-project" /><summary type="html"><![CDATA[Small release. Siri can play your magazines and discs now, and it took three rounds in the driveway to get it to actually listen.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://mitchsmith.app/img/blog/cdchanger/siri-suggestions.webp" /><media:content medium="image" url="https://mitchsmith.app/img/blog/cdchanger/siri-suggestions.webp" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Pocket Trip Planner 1.7.1 - You can search your notes!</title><link href="https://mitchsmith.app/2026/09/16/pocket-trip-planner-1-7-1/" rel="alternate" type="text/html" title="Pocket Trip Planner 1.7.1 - You can search your notes!" /><published>2026-09-16T00:00:00+00:00</published><updated>2026-09-16T00:00:00+00:00</updated><id>https://mitchsmith.app/2026/09/16/pocket-trip-planner-1-7-1</id><content type="html" xml:base="https://mitchsmith.app/2026/09/16/pocket-trip-planner-1-7-1/"><![CDATA[<p>Most of what I actually write in Pocket Trip Planner isn’t structured. The itinerary is structured and the packing list is structured and the budget is structured, and then there’s the notes field, which is where the parking situation goes, and the name of the place somebody recommended, and the door code. But it wasn’t searchable? Why? Dunno! But a very kind user sent me an email asking for this, so it’s been added.</p>

<p>1.7.1 fixes that, and it’s a small release so this is a short post, and a plea for more feedback when you have issues.</p>

<h2 id="search-reads-your-notes">Search reads your notes</h2>

<p>Global search worked by flattening every trip into one big searchable string - events, transportation, packing, important dates, all of it in there. Trip notes were not. That wasn’t a decision, they just never got added, and I never caught it because I kept testing search with things I already knew were events. Until a very kind user sent me an email asking to be able to search their notes. <em>Slaps forehead</em> Oops….yeah of course I’ll add that feature.</p>

<p>It also tells you why something matched. A notes only hit used to show up as a generic “Trip Start: Lisbon” row that opened the trip’s main screen, which technically was a match but looked like a bug and put you in the wrong place anyway. Now the row says “Notes: Lisbon” and shows the actual line out of the note, and tapping it drops you in the notepad with the thing you were looking for already on screen.</p>

<p>The other fix was accents. The matcher was doing <code class="language-plaintext highlighter-rouge">.lowercased().contains()</code>, which is plain ASCII, so searching “Zurich” would not find a note that said “Zürich.” That’s a bug anywhere but in a travel app it’s just bad - the whole premise is that you’re going somewhere you might not know how to spell! It does a locale aware, diacritic folding compare now, so the accents are optional in both directions.</p>

<h2 id="timeline-cards-lead-with-what-they-are">Timeline cards lead with what they are</h2>

<p>While fixing this I realized the search results looked awkward - turns out the loudest thing was in the wrong place. The title was usually saying the same thing as the subtitle right under it, and the accent color looked like it meant something but was really just whatever color you happened to tag that event, and the one thing that’s actually useful when you’re scanning a mixed list of events and travel legs and dates - which is what kind of row am I even looking at - was sitting in small trailing text after a bullet.</p>

<p>So each row leads with the type now, in caps, before anything else. Scanning a day is reading down one column instead of parsing every line.</p>

<p>The part that took the longest was deciding what to call the row that marks a trip starting. It had been “Trip Start,” which reads like something happening to the trip rather than the name of the row, and every other type in that list is just a plain noun - Event, Lodging, Flight. So it’s “Trip” now, which is five characters that somehow took most of an evening.</p>

<h2 id="also---minor-note">Also - minor note</h2>

<p>Rating the app from Settings actually opens the App Store now. It used to call the same system API that shows the little in-app rating prompt, which Apple throttles and will silently drop, so the button just did nothing some of the time and you had no way of knowing which time you were getting - oops.</p>

<h2 id="moral-of-the-story">Moral of the story</h2>

<p>If there is something that seems awkward or should exist in the app - please email me - <a href="mailto:mitchell525@gmail.com">mitchell525@gmail.com</a>. I’ll take a look and see if I can fix/add it! Seriously, this app has just been a hobby for myself that I use when planning family vacations so I have plenty of blind spots that my own workflow just hasn’t hit.</p>

<h2 id="try-it">Try it</h2>

<p>Pocket Trip Planner is free and ad free and doesn’t want you to make an account. Pro is a one time unlock. It runs on iPhone, iPad, Mac, and Vision Pro.</p>

<ul>
  <li><a href="https://apps.apple.com/us/app/pocket-trip-planner/id6741714565?pt=120429264&amp;ct=blog&amp;mt=8">Download on the App Store</a></li>
  <li><a href="https://mitchsmith.app/pockettripplanner/">Pocket Trip Planner - product page</a></li>
</ul>]]></content><author><name>Mitchell Smith</name></author><category term="ios" /><category term="travel" /><category term="swiftui" /><category term="side-project" /><summary type="html"><![CDATA[Small release. General quality of life improvements that should have been added to begin with.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://mitchsmith.app/img/blog/pockettripplanner/pockettripplanner_notes_search.webp" /><media:content medium="image" url="https://mitchsmith.app/img/blog/pockettripplanner/pockettripplanner_notes_search.webp" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">CD Changer 1.3 - Artists, Album Grids and Artwork</title><link href="https://mitchsmith.app/2026/09/14/cd-changer-1-3/" rel="alternate" type="text/html" title="CD Changer 1.3 - Artists, Album Grids and Artwork" /><published>2026-09-14T00:00:00+00:00</published><updated>2026-09-14T00:00:00+00:00</updated><id>https://mitchsmith.app/2026/09/14/cd-changer-1-3</id><content type="html" xml:base="https://mitchsmith.app/2026/09/14/cd-changer-1-3/"><![CDATA[<p>When I shipped this back in May the whole idea was that you load up a magazine and then you don’t have to think about it anymore. Hop in the car and go.</p>

<p>That mostly worked. The problem was if you forgot to add a magazine you couldn’t get to it! What?! I’d have to switch to Apple Music or beg Siri to play the album, yeah we gotta fix that.</p>

<p>So 1.3 is mostly me fixing that. Plus the cool new grid view added in iOS 26 and finally fix the album art loading problem.</p>

<h2 id="version-13">Version 1.3</h2>

<h3 id="an-artists-tab-in-carplay">An Artists tab in CarPlay</h3>

<p>There’s a new tab in the car. Pick a letter, pick an artist, pick an album, and it plays. No need to leave for Apple Music any longer!</p>

<p>The letter step looks like a design choice but it isn’t really. <code class="language-plaintext highlighter-rouge">CPListTemplate.maximumItemCount</code> caps how many items a template can hold and it counts across every section combined, not per section, and when you go over it CarPlay doesn’t scroll or paginate - it just quietly drops the rest. So a flat A to Z list of every artist in a decent sized library would silently stop being complete, which is a lot worse than making you tap one more time. Letters keep each screen well under the cap, and as a side effect you can actually find things at a glance instead of scrolling forever.</p>

<p>Artist rows show the artwork from that artist’s first album. The letter rows deliberately don’t show anything, because resolving artwork for every letter means going out across the library right at the moment you’re sitting there waiting for a screen.</p>

<p>Which gets me to the bad one. On the actual device, tapping a letter had this little beat of nothing before the list showed up, and at a desk that is the kind of thing you shrug at, but in the car it bothered me enough that the note I wrote to myself literally says “dangerous while driving.” Turns out it was resolving all the album artwork before pushing the screen, so now it pushes the screen first and lets the artwork fill in whenever it gets there.</p>

<p>(Wow all of this is a lot more detail than you probably care about, but I am still fretting about if this was the right design)</p>

<h3 id="albums-that-fill-the-screen">Albums that fill the screen</h3>

<p>The Discs tab used to show each magazine as a single row of covers, clipped at however many fit. Apple Music’s own CarPlay library view wraps its albums into a grid and that’s cool - so it’s been added!</p>

<p>This one cost me an afternoon and turned out to be one word. <code class="language-plaintext highlighter-rouge">CPListImageRowItem</code> got reworked in iOS 26 and the newer initializers take an <code class="language-plaintext highlighter-rouge">allowsMultipleLines</code> flag, and my code was already calling the new initializer - it was just passing <code class="language-plaintext highlighter-rouge">false</code> the whole time.</p>

<h3 id="artwork-that-stops-going-gray">Artwork that stops going gray</h3>

<p>This is the least interesting section but totally drove me nuts! Album art could come up blank or permanently gray in CarPlay and in the mini player and on the lock screen, and it was worst on Family Sharing albums and on stuff synced locally instead of pulled down from the catalog.</p>

<p>That’s fixed, including the one where CarPlay would fall back to the “No Disc” placeholder for an album that was sitting right there. Cold launch is faster too.</p>

<h3 id="smaller-stuff">Smaller stuff</h3>

<ul>
  <li>Rebuilt the design system on iOS 26’s Liquid Glass.</li>
  <li>Did an accessibility pass - VoiceOver across the app, a Dynamic Type audit on the icons, and a contrast fix.</li>
  <li>The Live Activity and Now Playing widget are gone, pulled a while back. The system already does that on the lock screen and the one I added was redundant IMO.</li>
</ul>

<h3 id="the-name-changed">The name changed</h3>

<p>On the App Store it’s <strong>CD Changer: Car Album Player</strong> now, which is the same app with nothing else moved - “Digital” wasn’t doing anything and nobody searches for it. Hoping to fix the findability of the app.</p>

<h2 id="what-it-still-doesnt-do">What it still doesn’t do</h2>

<p>No single songs, no playlists, no shuffling your whole library. No iPad, since CarPlay doesn’t run there and this is really a CarPlay companion app. Your magazines don’t sync between devices yet. And it can’t play anything that isn’t already in your Music library.</p>

<h2 id="try-it">Try it</h2>

<p>CD Changer is free. You get one six disc magazine, which is a whole changer, and Pro is a one time purchase if you want more than one.</p>

<ul>
  <li><a href="https://apps.apple.com/us/app/id6760621270?pt=120429264&amp;ct=blog&amp;mt=8">Download on the App Store</a></li>
  <li><a href="https://mitchsmith.app/cdchanger/">CD Changer - product page</a></li>
</ul>

<p>The screenshots below show the rest of it better than I can.</p>]]></content><author><name>Mitchell Smith</name></author><category term="ios" /><category term="carplay" /><category term="music" /><category term="side-project" /><summary type="html"><![CDATA[1.3 adds the Artists tab, full album grids, and fixes the album art loading problem.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://mitchsmith.app/img/blog/cdchanger/carplay-discs-grid.webp" /><media:content medium="image" url="https://mitchsmith.app/img/blog/cdchanger/carplay-discs-grid.webp" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Pocket Trip Planner 1.7 — the Mac app catches up</title><link href="https://mitchsmith.app/2026/09/05/pocket-trip-planner-1-7/" rel="alternate" type="text/html" title="Pocket Trip Planner 1.7 — the Mac app catches up" /><published>2026-09-05T00:00:00+00:00</published><updated>2026-09-05T00:00:00+00:00</updated><id>https://mitchsmith.app/2026/09/05/pocket-trip-planner-1-7</id><content type="html" xml:base="https://mitchsmith.app/2026/09/05/pocket-trip-planner-1-7/"><![CDATA[<p>I’ll be honest about something: Pocket Trip Planner has technically run on Mac for a while now. “Technically” is doing a lot of work in that sentence. It launched, the trip list showed up, you could tap around with a mouse pretending it was a finger — and that was about it. No keyboard shortcuts. No right-click. Hit Return in a text field and nothing would happen, because nothing was listening for it. It was an iPhone app that happened to open on a Mac, not a Mac app.</p>

<p>1.7 is the release where I stopped letting that slide.</p>

<h2 id="what-i-wanted">What I wanted</h2>

<p>The pitch for Pocket Trip Planner hasn’t changed: one place for your itinerary, packing lists, budget, important dates, and notes for a trip, without an account, without ads, and without your itinerary getting parsed on someone else’s server. Everything runs on-device, and Pro is a one-time unlock, not a subscription.</p>

<p>What I wanted for 1.7 was for the Mac version to actually feel like it belonged on a Mac. Same SwiftUI codebase as iPhone and iPad — I’m not maintaining a separate Mac app — but built to expect a keyboard, a mouse, and a window you can resize, instead of assuming every tap is a finger and every list only ever gets swiped.</p>

<h2 id="why-i-built-it">Why I built it</h2>

<p>I’ve been a software engineer since 2012, and Pocket Trip Planner is very much a nights-and-weekends project — built in the margins between a day job and a family, one trip’s worth of frustration at a time. I plan our vacations in it, so most of what changes in this app started as something that annoyed me personally on an actual trip. The Mac work was no different: I opened the Mac build to plan a trip, reached for a keyboard shortcut that didn’t exist, and started a list.</p>

<h2 id="version-17">Version 1.7</h2>

<h3 id="a-real-menu-bar">A real menu bar</h3>

<p>There’s now an actual menu bar, not just the default Edit/View boilerplate macOS gives you for free. <strong>⌘N</strong> starts a new trip, <strong>⌘F</strong> jumps straight to Find Trips &amp; Plans, and <strong>⌘,</strong> opens Settings — the shortcuts you’d expect from any Mac app. The Help menu points to the in-app guide and About screen instead of sitting empty.</p>

<h3 id="right-click-everywhere-youd-expect-it">Right-click, everywhere you’d expect it</h3>

<p>Every list in the app that had a swipe action on iPhone — budget entries, transactions, transportation legs, packing items, imported events — now has the matching right-click menu on Mac. Rows also reveal their actions on hover, so you’re not left guessing that a menu exists at all. None of this is new functionality, exactly; it’s the functionality that was already there, finally reachable without a touchscreen.</p>

<h3 id="drag-and-drop-for-trip-files">Drag and drop for Trip Files</h3>

<p>Trip Files — the per-trip vault for confirmations, boarding passes, and screenshots — now accepts a drag straight from Finder instead of forcing you through a file picker every time. While I was in there I also found and fixed a genuinely annoying bug: a PDF downloaded from Safari would silently fail to import. Turned out macOS tags downloaded files with a quarantine attribute, and the app was choking on it during the copy. Fixed now, and it also opened the door to accepting images alongside PDFs.</p>

<h3 id="the-small-stuff-that-adds-up">The small stuff that adds up</h3>

<p>The rest of 1.7 is a pile of things that were each small on their own but, together, were the difference between “runs on Mac” and “works on Mac”:</p>

<ul>
  <li>Escape and Return now actually do something in every add/edit sheet in the app — trips, packing items, important dates, transportation, events. Previously they were just decorative buttons you had to click.</li>
  <li>The Pro upgrade screen used to render tiny and unscrollable on Mac, cutting off half the feature list. It’s been resized and laid out properly for a wider window.</li>
  <li>Typing a budget amount and hitting Return used to do nothing — you had to reach for the mouse and click Add. It submits now, like it should have from the start.</li>
  <li>Restore Purchases is more reliable. There was a bug where the app could read an empty purchase history right after launch and assume Pro had been revoked, which was especially visible on Mac where a fresh restore is more common.</li>
  <li>The home screen widget actually refreshes when your trip data changes, instead of sitting stale until the OS got around to it on its own schedule.</li>
</ul>

<p>None of this required a separate Mac codebase or a bunch of <code class="language-plaintext highlighter-rouge">#if os(macOS)</code> branches scattered everywhere — almost all of it is the same SwiftUI views iPhone and iPad already use, just given the extra affordances a mouse and keyboard expect. That was the whole point.</p>

<h2 id="try-it">Try it</h2>

<p>Pocket Trip Planner is free to download, with Pro as an optional one-time unlock — no subscription, no account required. It now runs natively on iPhone, iPad, Mac, and Apple Vision Pro.</p>

<ul>
  <li><a href="https://apps.apple.com/us/app/pocket-trip-planner/id6741714565?pt=120429264&amp;ct=blog&amp;mt=8">Download on the App Store</a></li>
  <li><a href="https://mitchsmith.app/pockettripplanner/">Pocket Trip Planner — product page</a></li>
</ul>

<p>The screenshots below show the rest of the story better than I can in words.</p>]]></content><author><name>Mitchell Smith</name></author><category term="ios" /><category term="mac" /><category term="macos" /><category term="travel" /><category term="swiftui" /><category term="side-project" /><summary type="html"><![CDATA[Version 1.7 turns Mac support from 'it launches' into a real Mac app — menu bar commands, keyboard shortcuts, right-click menus, and drag-and-drop, all built on the same SwiftUI code as iPhone and iPad.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://mitchsmith.app/img/blog/pockettripplanner/pockettripplanner_mac1.webp" /><media:content medium="image" url="https://mitchsmith.app/img/blog/pockettripplanner/pockettripplanner_mac1.webp" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Pocket Trip Planner 1.6 — what’s new</title><link href="https://mitchsmith.app/2026/05/24/pocket-trip-planner-1/" rel="alternate" type="text/html" title="Pocket Trip Planner 1.6 — what’s new" /><published>2026-05-24T00:00:00+00:00</published><updated>2026-05-24T00:00:00+00:00</updated><id>https://mitchsmith.app/2026/05/24/pocket-trip-planner-1</id><content type="html" xml:base="https://mitchsmith.app/2026/05/24/pocket-trip-planner-1/"><![CDATA[<p>Planning a trip should feel exciting, not like homework spread across five apps. I kept finding the same problem: a flight confirmation in Mail, a dinner reservation as a screenshot, a rough day-by-day plan in Notes, and a packing list I rewrote every time. I wanted one calm place to look—not another account-heavy travel product with ads and upsells in every corner.</p>

<p>That is how <strong>Pocket Trip Planner</strong> started. At first it was deliberately small: a countdown to my next trip and a few utilities I actually used—a packing list and a simple day planner. I built it for myself, used it on real trips, and kept iterating. Features grew because I needed them, but the goal stayed the same: stay simple, stay useful, and stay out of the way.</p>

<h2 id="what-i-wanted">What I wanted</h2>

<p>The app is built around low friction. You create a trip, see the countdown, and keep the pieces of planning together without turning the UI into a dashboard.</p>

<p>In one place you get:</p>

<ul>
  <li><strong>Daily itineraries</strong> with timed events and activities</li>
  <li><strong>Packing lists</strong>, including reusable bag templates</li>
  <li><strong>Budget tracking</strong> with categories and transactions</li>
  <li><strong>Important dates</strong> with reminders</li>
  <li><strong>Notes</strong>, trip summary, and a home-screen <strong>countdown widget</strong></li>
</ul>

<p>It is <strong>ad-free</strong> and does not require an account. Your data stays on your device. The app is built natively in Swift for iOS and runs on <strong>iPhone</strong> and <strong>iPad</strong>, with <strong>Mac</strong> support through Mac Catalyst.</p>

<p>If you want more—PDF export, extra packing templates, themes, alternate app icons, and the import helpers described below—<strong>Pocket Trip Planner Pro</strong> is a <strong>one-time</strong> upgrade, not a subscription. The free app is the full planner; Pro is for travelers who want an extra hand.</p>

<h2 id="why-i-built-it">Why I built it</h2>

<p>I have been a software engineer since 2012, and I am happiest when I am building something—often in the margins, between work and family. Side projects like this are how I scratch that itch: solve a problem I actually have, ship something focused, and learn along the way. Pocket Trip Planner started as “make my next trip easier to see coming,” not as a pitch deck.</p>

<h2 id="version-16">Version 1.6</h2>

<p><strong>Version 1.6</strong> is about getting <strong>real trip plans</strong> into the app—the confirmations and itineraries you already have, instead of retyping everything by hand.</p>

<h3 id="trip-files-pro">Trip Files (Pro)</h3>

<p><strong>Trip Files</strong> is a vault attached to each trip where you keep confirmations, screenshots, and PDFs together with everything else you are planning. Files live on disk in a shared app container so the database stays light; you get thumbnails and quick access inside the trip.</p>

<p>This release improves how those files get in and how they behave once they are there:</p>

<ul>
  <li><strong>Better capture from other apps</strong> — save from Photos, Mail, Safari, and the system Share Sheet (pick the trip, and the file lands in your vault when you open the app again)</li>
  <li><strong>Clearer review before anything hits your itinerary</strong> — imports produce drafts you can edit; nothing is added until you confirm</li>
  <li><strong>More reliable dates and times</strong> when plans are imported — fewer surprises around time zones and trip boundaries</li>
</ul>

<h3 id="import-and-conversion-pro">Import and conversion (Pro)</h3>

<p>For <strong>Pocket Trip Planner Pro</strong>, 1.6 adds stronger ways to turn messy source material into structured plans:</p>

<ul>
  <li><strong>Paste itinerary text</strong> and generate multiple event drafts at once (large imports are split into smaller on-device requests)</li>
  <li><strong>Import from text files, PDFs, images, and photos</strong> — including on-device OCR for screenshots and documents</li>
  <li><strong>Convert a saved Trip File</strong> into an editable event or transportation segment, then review and save</li>
</ul>

<p>All of these helpers are <strong>optional</strong>. They run <strong>on your device</strong> using Apple Intelligence and local text recognition—no account, no cloud processing step for your trip details. If you prefer to plan by hand, the free experience is unchanged: trips, daily planning, packing, budgets, widgets, and the rest of the core app work the same way they always have.</p>

<h2 id="try-it">Try it</h2>

<p>If you want a simple, ad-free place to plan your next trip—or you are curious what 1.6 adds for Pro—you can download Pocket Trip Planner on the App Store or read more on the product page.</p>

<ul>
  <li><a href="https://apps.apple.com/us/app/pocket-trip-planner/id6741714565?pt=120429264&amp;ct=blog&amp;mt=8">Download on the App Store</a></li>
  <li><a href="https://mitchsmith.app/pockettripplanner/">Pocket Trip Planner — product page</a></li>
</ul>

<p>The screenshots below show the rest of the story better than I can in words.</p>]]></content><author><name>Mitchell Smith</name></author><category term="ios" /><category term="travel" /><category term="swiftui" /><category term="side-project" /><category term="apple-intelligence" /><summary type="html"><![CDATA[Version 1.6 makes it easier to keep confirmations and itineraries in one place; Pro adds private on-device import from text, PDFs, and photos.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://mitchsmith.app/img/blog/pockettripplanner/pockettripplanner_post1.webp" /><media:content medium="image" url="https://mitchsmith.app/img/blog/pockettripplanner/pockettripplanner_post1.webp" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Digital CD Changer albums a few taps away</title><link href="https://mitchsmith.app/2026/05/21/digital-cd-changer-1-1/" rel="alternate" type="text/html" title="Digital CD Changer albums a few taps away" /><published>2026-05-21T00:00:00+00:00</published><updated>2026-05-21T00:00:00+00:00</updated><id>https://mitchsmith.app/2026/05/21/digital-cd-changer-1-1</id><content type="html" xml:base="https://mitchsmith.app/2026/05/21/digital-cd-changer-1-1/"><![CDATA[<p>I used to have a CD player in my car. I’d get in, pick a disc I already knew I wanted, and press play. No scrolling through endless lists, no algorithm asking what mood I was in—just the album, start to finish. It was a small ritual, but it worked: the music was already chosen before I pulled out of the driveway. That simplicity is what I missed, and it’s what led me to build <strong>Digital CD Changer</strong>.</p>

<h2 id="what-i-wanted">What I wanted</h2>

<p>Most of the music I care about is already in my library—albums I’ve bought over the years, things I’ve added from Apple Music. What I wanted wasn’t another way to discover music. I wanted a fast path back to the albums I love: load them up, tap one, and listen. A few clicks, not a project.</p>

<p>The app is built around that idea. You create <strong>CD magazines</strong> from the albums in your Music library—like the six-disc changer in the glove box, but digital. Browse by artwork, fill the slots with albums you actually want to hear, and play. One tap starts the album. The album is the unit; there are no playlists, recommendations, or “what should you listen to next?” loops. It’s deliberately constrained, the way a physical changer was.</p>

<p>It works with the albums already in your Music library—purchased music and Apple Music titles you’ve added—not a separate catalog to manage. You can open an album, see the track list, and start from anywhere; recently played albums stay easy to jump back into.</p>

<p>On the road, that matters even more. CarPlay is a big part of the experience: large artwork, simple navigation, glanceable controls so you’re not fighting the interface while you drive. Pick an album, let it run.</p>

<h2 id="why-i-built-it">Why I built it</h2>

<p>I’ve been a software engineer since 2012, and I’m happiest when I’m building something—often in the margins, between work and family. Side projects like this are how I scratch that itch: solve a problem I actually have, ship something small and focused, and learn along the way. Digital CD Changer started as “make playing my albums easy again,” not as a product pitch.</p>

<h2 id="version-11">Version 1.1</h2>

<p>With <strong>version 1.1</strong>, the app is <strong>free on the App Store</strong>. You get one six-disc magazine out of the box—enough to load a starter changer and start listening right away. I made it free so more people can try it without paying upfront; if your collection grows, <strong>Pro</strong> is a one-time upgrade (no subscription) that unlocks unlimited magazines and slots.</p>

<p>This release also adds a CD Changer menu for Pro and About (with links to the site, terms, and support), plus reliability improvements around artwork and purchases.</p>

<h2 id="try-it">Try it</h2>

<p>If you miss album-first listening—or just want your favorites a few taps away—you can download Digital CD Changer on the App Store or read more on the <a href="https://mitchsmith.app/cdchanger/">product page</a>.</p>

<ul>
  <li><a href="https://apps.apple.com/us/app/id6760621270?pt=120429264&amp;ct=blog&amp;mt=8">Download on the App Store</a></li>
  <li><a href="https://mitchsmith.app/cdchanger/">Digital CD Changer — product page</a></li>
</ul>

<p>The screenshots below show the rest of the story better than I can in words.</p>]]></content><author><name>Mitchell Smith</name></author><category term="ios" /><category term="carplay" /><category term="music" /><category term="side-project" /><summary type="html"><![CDATA[Version 1.1 brings album-first listening back to the car—free on the App Store, with CarPlay and a simple six-disc magazine to start.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://mitchsmith.app/img/cdchanger/cd_changer1.webp" /><media:content medium="image" url="https://mitchsmith.app/img/cdchanger/cd_changer1.webp" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>