Sign in

NON-TOXICNo ads · No shady algorithms

iiinova is part of the Atmosphere — an open, public network where you own your identity.

James Savage

@axiixc.social.axiixc.com.ap.brid.gy
34 followers 5 following 669 posts

Nature enthusiast, baker, knitter, and photographer. Supposedly knows stuff about computers too. Previously Safari & App Clips. He/him. 🌉 bridged from ⁂ social.axiixc.com/@axiixc, follow @ap.brid.gy to interact

PostsRepliesMedia
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 16/10/2026
Don’t know if I *love* it, but I think this is probably what I’ll be doing with @dropstracker’s Duo support, at least until I see more of how the design direction shakes out. (Now to go turn my very messy prototyping code into something I can land 😅.) #iOSDev #BuildInPublic
iPhone Duo’s front screen showing a caffeine tracking app with a graph for caffeine falloff and water. A list of samples is below the graphs. A small bar with drinks and a plus button is at the bottom of the screen.iPhone Duo folded open and flat. The charts are now to the left of the list of samples.iPhone Duo folded partially open. The bottom list of drinks has moved to the left side of the screen. Some additional spacing has been added between charts and list of samples.
041 4
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 19/05/2026
Still haven’t figured out how to enable an IAP in TestFlight, which is a shame because I’m really happy with how this new theme picker turned out. #iOSDev #BuildInPublic
Screenshot of an iOS app showing a row of four thumbnails for choosing a tint color and three font choices.
050 5
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 27/02/2026
Huh. Really didn’t expect this to work, but sometimes everyone just gets tunnel vision I guess. #Splatoon3
010 1
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 31/12/2025
I've gone back and forth on this over the years, but I think I've come to like the naming scheme of Module.Type+Extras.swift for general extensions in #Swift. Since they're not named (like ObjC’s categories) I find there’s no need for a unique +Name per […] [Original post on social.axiixc.com]
Screenshot of many Swift files in Xcode’s sidebar, such as BinaryFloatingPoint+Extras, CoreGraphics.CGPoint+Extras, and Foundation.URL+Extras.
001 1
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 29/12/2025
Did some hiking today 🥾 #Nature #Photography
Nature scene with snow covered pine trees and a large hill in the distance. A small lone tree sits in the middle of a clearing. There are ski tracks to the left.
091 9
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 28/12/2025
Clever me used a property observer to ensure I couldn't skip updating dependent values, but then I was lazy and updated the property more than I realized. This meant the side effect actually ran 3×, one of which would occur with unsorted data. Since this […] [Original post on social.axiixc.com]
Code change showing switching from updating a property inline to making a copy, updating it, then reassigning it once.
110 1
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 24/12/2025
Hmm, okay, no I'm kinda back with controls on top now. There's like three hacks involved in making this work though 🥲
Screenshot of a macOS window with playback controls and a time scrubber replacing the traditional toolbar.
000 0
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 22/12/2025
Progress!
200 2
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 22/12/2025
I've been told tabs are better because people can choose their indent level at display time, which I'm sure is true, but it also makes column alignment effectively impossible. Not just ASCII art, but like any sort of wrapping scheme. It probably does not […] [Original post on social.axiixc.com]
Screenshot of a source code diff and the same code in Xcode. One using 2-space indent and one using 8-space for tabs.
020 2
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 20/12/2025
Got downloads working. Playback is still an absolute UI fabrication. I am clearly procrastinating from something, though I remain unsure of precisely what.
Screenshot of a macOS app window showing a list of episodes from the Playdate Podcast. The episode for Untitled Goose Game is downloading, with a progress indicator shown in the detail pane of the app.
200 2
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 17/12/2025
Some noteworthy corn dogs from this weekend. Ramen with shrimp flavor and hot Cheetos dusted.
A corn dog with uncooked crumbled ramen pieces baked into the breading.Corn dog with red Cheetos dust, green onions, and a sauce (I forget what the sauce was).
000 0
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 11/12/2025
What's that one Jurassic Park quote? About how you shouldn’t necessarily do things just because you can? 🤣
Screenshot of a podcast library app with entries for Gastropod, Panic Podcast, and Playdate Podcast; showing various episodes and episode description in a detail view.
200 2
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 01/12/2025
@JasonAnthonyGuy this actually appears slightly better than it was in the past. Tapping the yelp review blocks now does pull up a web sheet (dunno why they won’t punch out) but trying to view a photo still shows an App Store sheet instead.
100 1
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 29/11/2025
So many ducks 😵‍💫
Duck in front of a pond pecking at the ground.Small pond just filled with ducks.
000 0
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 26/11/2025
What was supposed to be a quick post has turned into three, with multiple visuals, and possibly a sample project at the end. I really wish I knew how to just be chill about things 🤦🏻‍♂️
Screenshot of part of a blog post. Text reads:

We now have a basic row of buttons, which covers our first interaction. If you think this looks too plain, don't worry, we'll improve upon the visuals later in part 2.

Below is a partial screenshot of an iPhone with a row of buttons showing a plus button, water bottle labeled water, coffee mug labeled coffee, and a smaller mug labeled green tea.
000 0
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 23/11/2025
Good news: the error UI that I built but never tested works! Bad news: the change I spent the last hour on did not 🤣
iPhone screenshot. Error screen showing “Unexpected Error. The operation couldn’t be completed. (GRDB.RowDecodingError error 1.)”
000 0
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 22/11/2025
I mean I can totally run with this, I'm just confused/concerned now 😅
SwiftUI source code. Defining a HStackLabeledContentStyle and applying it to the previous code.
000 0
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 22/11/2025
Well that's unexpected. LabeledContent in a Form seems to mess up the layout of a UIViewRepresentable while HStack doesn’t. View debugger confirms some sizing differences, though the actual view tree (not pictured) matches the SwiftUI picker, which I think […] [Original post on social.axiixc.com]
Screenshot of source code in Xcode and a view preview.

Source code shows using an HStack vs LabeledContent to place a UIViewRepresentable in a Form. Preview shows the HStack aligning with SwiftUI’s native picker view while in the LabeledContent the whole content view is pushed down too far and clipped.Screenshot of view debugger showing wireframes of the various views.
100 1
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 21/11/2025
No *you’re* having fun on a Thursday night 🤪
Screenshot. Two horizontal stacks of rectangles, flowing different directions. One has a heading of Left to Right and the other Right to Left. A print out of the frame for the centered rectangle is shown for both, along with a the containing scroll view’s bounds.
100 1
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 17/11/2025
Good news: I am scrapping the blog post I've been working on for the past month because I keep doubting the conclusions I try to write and that probably means it's just bad/not ready yet. Instead I'm going to switch to writing about how to build some fun […] [Original post on social.axiixc.com]
Screenshot of Finder showing dozens of iOS simulator screenshots.
100 1
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 17/11/2025
Results are in: no snow near us, but light dusting higher up the mountain. Looked really cool with the clouds rolling over them too.
Near line of dark green pine trees with white and gray hazy mountain ridge in the distance.Snow dusted pine trees on top of a hill, framed by two tree trunks wet with rain and snow-less tree tops in the foreground.
000 0
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 16/11/2025
Accidentally crashed their secret bird meeting 🥲
Four crows, two taking flight and two standing.
000 0
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 16/11/2025
Gonna be interesting to see what we wake up to tomorrow 😅
Hourly forecast showing conditions going from rain to snow between 3 and 4am.
100 1
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 15/11/2025
I mean this one is almost recognizable as something, right? 😛
Latte art of… let’s call it a fern leaf.
010 1
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 10/11/2025
I wonder if Mail's activity window is still light mode only in macOS 26.
The activity window in mail, showing Moving 5,485 of 6,808 messages.
000 0
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 01/11/2025
It wouldn’t be a party if I wasn’t starting on something yeasted the night before. Belgian waffles this time. #Baking
131 3
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 26/10/2025
🌈
Photo of Lake Tahoe with a rainbow across it.
000 0
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 10/10/2025
Any guesses at how long it took me to realize I needed to add Self. here to fix a "does not conform to protocol" error? 😭
Screenshot of source code. The code follows, with self dot highlighted:

private struct StackedLabelStyle : LabelStyle {
    func makeBody(configuration: Self.Configuration) -> some View {
    }
}
010 1
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 04/10/2025
@samhenrigold I just looked outside. Can confirm stars exist.
The Milky Way behind the shilloutte of some pine trees.
000 0
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 02/10/2025
@pretz yeah, like that second one! Although I thought there was API for just getting that behavior with the system views. CSS has this as ‘text-wrap: balance’ at least. But yeah, for this screen I want the text to wrap between been/saved when wrapping is […] [Original post on social.axiixc.com]
Cropped screenshot of an app. Glyph of a clipboard with chart. Headline text: no data. Subhead: no records have been saved for this day.
110 1
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 02/10/2025
Wait, what! Really?
Screenshot of error message in Xcode.

Instance method 'alert(isPresented:error:actions:)' requires that 'NSError' conform to 'LocalizedError'

Where 'E' = 'NSError' (SwiftUl.View.alert)
000 0
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 02/10/2025
I’ve been slacking on my nature pics (it’s been busy for me) but here’s one of the high winds we had yesterday at Fallen Leaf Lake. #Nature #LakeTahoe
020 2
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 28/09/2025
I mean, I guess the prompt is doing its job here, but also lol. (And also yikes, airport coffee prices.)
Digital menu at a coffee shop with a prompt overlaying the menu that says “HONOR 50 requests screen sharing to your TV. Do you want to accept this request?”
000 0
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 14/09/2025
Bear
A bear standing beside some buildings at night, illuminated by car headlights and staring at the camera. He is big and fluffy.
100 1
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 01/09/2025
I’m sure there are worse rewards… 🫠
Billboard ad. “Earn Bitcoin, Not Points” on an ad for the Gemini credit card.
010 1
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 24/08/2025
Saw a plane wreck while diving today.
Distorted, wide angle photo. Underwater, two people in scuba gear, the hull and wings of a plane.Front view of a wrecked plane underwater. The engines are missing propellers and the glass is missing from the cockpit. The body is decayed and missing parts.Selfie. Me swimming under the wing of a plane.
010 1
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 18/08/2025
Wispy~
Light wisps of cloud over a mountain ridge at sunset.
000 0
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 12/08/2025
Sneaky bird
Stellar’s jay between dense branches of a pine tree, mostly obscured.
000 0
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 12/08/2025
Saw some chipmunks today at sunset #Nature #Photography
Chipmunk standing among the branches of a pine tree.Chipmunk perched on a small, broken remnant of a tree branch, only a few inches from the tree’s trunk.
052 5
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 06/08/2025
More birb
Stellar’s Jay perched on a wooden fence, with pine trees in the background.
100 1
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 06/08/2025
I had to download half a gigabyte of app to turn on some lights yesterday.
App Store listing for Govee Home app. Showing a size of 547.3 MB.
000 0
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 05/08/2025
Uh… okay but why? And why 191 characters?
Error message
Validation failed: Feature image alt text cannot be longer than 191 characters.
000 0
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 04/08/2025
@JasonAnthonyGuy I have now doubled my editing workload 😅
Screenshot. Two rows in a list. Introducing Drops (Copy) and Introducing Drops.
100 1
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 04/08/2025
@JasonAnthonyGuy seems to! I wonder why that would have been browser-specific?
Screenshot of a context menu over a blog post row.
100 1
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 04/08/2025
I don't usually edit in B&W, but I just really enjoyed how it drew out the clouds in this one. #Photography
Scene of a lake. Large puffy clouds are in the sky, with bright and dark patches of sunlight shining through them. Below, a mountain range is in dark contrast over a lake with several boats.
040 4
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 29/07/2025
Well it arrived today too 😛 Gonna have to wait until tomorrow (when I’m less sleepy) to assemble though.
Closed product box for “uConsole” by Clockwork Pi.
010 1
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 28/07/2025
Sunset over the lake today was crazy. I took about 30 photos and none of them do it justice. Had what was left of some storm clouds looking like a legit oil painting over the east shore. #Photography #Nature #LakeTahoe
Sunset over a large lake, with partial cloud cover reflecting the sunlight, and silhouettes of mountains. A sailboat is visible on the middle right.Similar photo, zoomed in to focus on two overlapping landforms through the haze.Wide angle photo showing the scale of clouds in the sky. The clouds have high contrast and texture as the sun is now just below the mountains to the left.
160 6
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 25/07/2025
No, seriously, the rocks were excellent (and also you will have to wait because I’m backlogged on developing these other photos).
Selfie. Me sitting on top of a big rock overlooking a large lake, with pine trees and mountains in the background.
000 0
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 25/07/2025
Took some really nice photos of rocks and trees today. Just y‘all wait!
Screenshot. File copy dialog.

Copying 278 items to "104D3100"
1.74 GB of 5.03 GB - Estimating time remaining...
100 1
James Savage @axiixc.social.axiixc.com.ap.brid.gy · 24/07/2025
Not to go all millennial, but I still find myself missing the avocado toast from Infinite Loop. It was never the same once they scaled up the food service operations for Apple Park. Fortunately, it’s also pretty easy to make, if we just ignore the fact that […] [Original post on social.axiixc.com]
Oblong piece of toast on a plate topped with almond butter, mashed avocado, flaky salt, and red pepper flakes. Glass mug of coffee. Part of a MacBook visible at the top of frame.
000 0