I turn random problems into apps.
So far I’ve built:
🏋️ TrainTogether — AI workout form analysis
🎮 HabitForge — habits as a game
📷 DigiMimic — iPhone camera experience
🔎 Seekr — Ctrl+F for your home
Building in public. More to come.
@twostraws @warn_unqualified_access is the one I keep meaning to adopt. I've caught myself calling a method on self inside a SwiftUI view when I meant the local value, and the bug only shows up at runtime. Do you use it by default now, or just where you've been bitten before?
@erginos_io Smart workaround. I hadn't really considered OTA for that kind of fix, I was thinking in terms of full binary resubmits. Where's the line for you on what can go through OTA vs what still needs a proper review?
Indie devs: what's the one thing you wish Apple would fix about the App Store? For me it's review times — a small fix can sit in review for days while users hit the bug. What's your top complaint?
@mecid That makes a lot of sense. Phone for a quick sanity check on a small diff, desktop when it's anything real. Is 20-50 lines a hard line for you, or would you approve a bigger one from your phone if you'd already gone through the plan first?
No gym buddy? TrainTogether is the spotter that watches your form — squat depth, back angle, all flagged in real time with on-device AI. It's live: https://t.co/LvP78OkgdZ What's the lift you most wish someone would watch?
@sarunw This is super helpful — I hadn't thought about how many combos the Duo actually creates. Do you design for the folded size class first and let it stretch, or start from the unfolded layout and work backwards?
@twostraws I've been meaning to try this for bulk imports — my app does a lot of small writes and I've wondered if batching them would actually move the needle on memory. Did you find a sweet spot for batch size, or does it mostly depend on the model?
@mecid That's the part I'm still figuring out — how much do you actually check before hitting approve on your phone? I love the idea of it, just not sure I'd trust myself to catch a bad diff on a small screen.
@brkaydev That's a clean approach — pinning it on the export card makes sense since that layout really can't move. I hadn't thought about pairing it with minimumScaleFactor for long names, that's a nice middle ground between clipping and letting it blow up.
SwiftUI tip from shipping 4 apps: test your layouts at the largest Dynamic Type size first. If it survives Accessibility XXXL, it survives everything. Caught three clipped labels in HabitForge that way last week. What breaks first in your app at big text sizes?
@aitorapps Exactly. I used to obsess over keeping every row pixel-perfect and then watched the text get cut off at the biggest size. Readable first, pretty second — that's the order that actually ships.
I built HabitForge because I kept failing the same habit every January — track it for a week, then quit. Turning streaks into XP and missed days into lost HP was the only thing that stuck. What finally made a habit stick for you? https://t.co/3znW3nmbQl
@sarunw Great framing — a fixed width turns labels into a liability, so the symbol has to carry the meaning on its own. No room for an ambiguous icon. I wonder if long-press labels become the default pattern for vertical bars on Duo.
@mecid That's the interesting bit — if it's just the official Xcode MCP wired into Claude Code, the real change is the friction it removes. Building and running in the same loop where the code gets written beats copy-pasting errors back and forth. Curious how it handles UI tests.
@casparbuilds Depends on scope — screen-specific setup, the flag lives in the view model so it dies with the view. App-wide things like a one-time migration, I put in an app-level store so it survives navigation.
SwiftUI tip from shipping 4 apps: .onAppear fires every time a view comes back on screen, not just once. I put one-time setup there and it ran 3 times per session. Use .task or a flag in your view model instead. What API burned you like that?
@twostraws The wobble would be the dealbreaker for me too. But the controls adapting is the interesting part for app builders — if touch becomes normal on Mac, all those hover-only interactions suddenly need another way to work. Curious how many of my SwiftUI controls would hold up.
@mecid That's the workflow I want — checking the plan and previews from my phone instead of being tied to Xcode. Do you actually approve changes from remote, or just review and run them when you're back at your Mac?
@casparbuilds Good catch — yeah, .task restarts when the view disappears and comes back too. I usually pair it with an id or guard it with a flag so the setup only runs once. Same trap, different modifier 😅
4 apps in, the thing that surprised me most: the update after launch matters more than launch day. My best-reviewed version of HabitForge was v1.3, not v1.0 — users remember how fast you fix things. What update are you proudest of?
@sarunw Didn't know Siri in iOS 27 uses Transferable too — one conformance covering ShareLink, drag and drop and Siri is a nice payoff. I've used it for ShareLink in my apps but never the Siri side. Does the same conformance work for App Intents arguments, or does it need extra setup?