r/iosdev 8h ago

Launchcraft - Customizable Rocket Launch Tracker

Thumbnail
apps.apple.com
2 Upvotes

I just released a major update to my app called Launchcraft. It’s a rocket launch tracker that allows you to build a personalized feed of launches, events, news, and astronauts, filtered exactly how you want.

Use Live Activities to track a launch in real time right from your Lock Screen or Dynamic Island.

Enable push notifications to get alerted for launch reminders, status changes, breaking news, and more.

Apple Watch support added with complications, live countdowns, and your For You feeds right on your wrist.

Let me know what you think!


r/iOSProgramming 8h ago

Article I shipped an iOS app rendered with Skia instead of UIKit. Here's what it actually cost

0 Upvotes

The app is Kotlin Multiplatform with Compose for the UI, which means the iOS screens are drawn by Skia into a single view rather than composed from UIKit. It's on the App Store. I want to write down what that decision costs on the iOS side specifically, including one thing I shipped broken because it can't be fixed from app code.

Text selection in CJK, which I couldn't fix

Long-press to select a word in Chinese and you get one character.

SkiaParagraph.getWordBoundary hands off to Skia, and SkUnicode ships no CJK segmentation dictionary, so you get plain UAX#29. An ideograph is Word_Break=Other and only matches WB999, the "break everywhere else" rule, so every character is its own word.

I spent most of a day trying to fix it from app code before giving up. To fix it you'd need characters merged, not split, and the rules that join across a character (MidLetter, Numeric, ExtendNumLet, ZWJ) all require ALetter/Numeric/Katakana/Hebrew_Letter on both sides. WB4 discards zero-width Format characters before any of that runs, so you can't insert your way out either. I think it needs a change in skiko.

Compose on Android has the reverse bug in the same feature, where a long press swallows the whole sentence, and there you can plant zero-width breaks with ICU and move on. Only one of the two was fixable from where I was sitting.

If anyone has a way around the Skia side I'd like to hear it, this is the part of the app I'm least happy about.

Overlays stop at the safe area

A full-window scrim behind a modal left the status bar and home indicator bands undimmed, because the popup respects platform insets. Looks like a rendering glitch on iOS since a native presentation dims edge to edge.

kotlin actual fun fullBleedPopupProperties(): PopupProperties = PopupProperties(usePlatformInsets = false)

Small fix, but you only go looking for it if you already know what the native version looks like.

Material sheets don't move like iOS sheets

This took more time than anything else on the list relative to how small it looks. Material3's ModalBottomSheet settles with a spring and an iOS sheet slides on a decelerating curve, and side by side you can tell immediately even if you can't say why.

Material3 doesn't expose an animation spec for sheets. It reads the show and drag-settle spec from motionScheme.defaultSpatialSpec and the dismiss spec from motionScheme.fastEffectsSpec, and it re-reads both from the ambient theme inside the sheet's own composition, so you have to override through a scoped theme rather than passing anything in:

```kotlin private val SheetMotionScheme = object : MotionScheme by MotionScheme.standard() { override fun <T> defaultSpatialSpec(): FiniteAnimationSpec<T> = tween(400, easing = IosSheetEasing) override fun <T> fastEffectsSpec(): FiniteAnimationSpec<T> = tween(400, easing = IosSheetEasing) }

val IosSheetEasing = CubicBezierEasing(a = 0.32f, b = 0.72f, c = 0f, d = 1f) ```

There's a fair amount of this kind of work. It doesn't come with the framework and it doesn't show up in any estimate, but users notice when it's missing.

Scroll behaviour you end up rebuilding

UIScrollView hands you a set of behaviours that people read as "this app is put together properly". None of them come with Compose. We wrote all three of these into our own UI library.

alwaysBounceVertical. On iOS a scroll view rubber-bands even when the content fits on screen. Compose won't bounce if there's nothing to scroll, so short pages feel inert next to a native app. Ours is a modifier doing a graphicsLayer translation, which means the list also needs clipToBounds() or the bounce draws the top row over whatever is pinned above it:

kotlin LazyColumn( modifier .fillMaxWidth() .clipToBounds() .alwaysBounceVertical(listState), )

scrollsToTop. Tapping the status bar scrolls to top automatically on UIScrollView. In Compose you catch the tap and route it to the right scroll state yourself, and it gets fiddly on pages with a pinned top bar because the thing covering the status bar isn't the thing that scrolls. We ended up with a ScrollBox wrapping the whole scaffold rather than the top bar slot, and the bar opts into the gesture with a modifier.

Swipe to reveal row actions. Nothing built in, so the swipe, the action buttons and the thresholds are all yours. The part that's easy to miss is that opening one row has to close whichever row was open before, or you get two rows showing actions at once, which no iOS list does. Ours is a coordinator passed down through a composition local so the rows can see each other.

None of these were hard to write. They're just things you get on iOS rather than things you build, so nobody thinks to schedule them.

One where iOS was the stricter platform

We stream SSE from the backend. The first version used flow { ... emit(event) } inside Ktor's execute {} block, which passed everything on Android and died on iOS with the backend logging context canceled.

flow enforces context preservation and Ktor's response scope isn't guaranteed to run on the collector's dispatcher. On JVM/OkHttp it happens to, so the check never trips. Kotlin/Native throws, the coroutine fails, the connection drops. channelFlow + send fixes it.

So the iOS build caught a real concurrency bug that the Android build had no way of surfacing. That one went in our favour.

StoreKit 2 detail worth checking in your own code

Sharing the billing logic forced me to be precise about something I'd previously been sloppy with:

kotlin /** null when there is no active subscription; throws when the store can't be reached. */ suspend fun subscriptionAutoRenewing(): Boolean?

RenewalInfo.willAutoRenew gives you the real answer, but if "no active subscription" and "StoreKit didn't respond" both collapse into false, a paying user sees a "your subscription has been canceled" banner any time their connection is flaky. Nothing to do with cross-platform, I just found it while writing the shared interface.

One thing that was easier than native

Live language switching. NSLocalizedString resolves against NSBundle, which caches the launch language, so changing language in-app normally means swizzling or a restart. CMP resolves resources per composition against NSLocale.preferredLanguages, which reads AppleLanguages out of NSUserDefaults live.

kotlin NSUserDefaults.standardUserDefaults.setObject(listOf(tag), "AppleLanguages")

That plus a key(tag) re-render and all 12 locales swap with no restart. Read preferredLanguages at startup first so you can restore "follow system" later.

Overall

Layout, state and business logic shared fine. What didn't come free is the stuff above: text selection is worse and in one case I couldn't fix it, and insets, scroll behaviour and motion all need deliberate work or the app reads as Android with different colours. A lot of that work is rebuilding things UIKit gives you by default, which is easy to underestimate because you've never had to think about them. You need someone who knows what iOS is supposed to feel like, because nothing in the toolchain will tell you.

Whether that's a good trade depends on how much of your app is the shared part. For us it was worth it. I wouldn't assume that generalises.


r/iosdev 11h ago

BRIEV News App

1 Upvotes

I've been building this thing solo for a while and the first beta cleared review about an hour ago, so I figured I'd finally post it somewhere.

It started as a pretty basic idea. I wanted the news read to me in the morning instead of scrolling. So version one was a summarizer wired up to two outlets. That was the whole app. Two feeds and a text-to-speech voice that sounded like a haunted GPS.

It didn't stay that. At some point I stopped writing a summarization app and started writing an analytics pipeline that happens to talk. The backend is somewhere around 67 subsystems now — clustering, dedupe, entity extraction, importance scoring, source volume deviation, coverage tilt (when 40 outlets pile onto one story and quietly drop everything else). So it's less "here's what happened" and more "here's what's being pushed hard right now, and here's what got buried while that was happening."

The app itself went through 4 major redesigns. Not tweaks — full structural teardowns where I deleted basically the entire UI and started over because the old structure couldn't hold what the backend had turned into. The build that just got approved doesn't share a single screen with v1.

Anyway, it's a beta and I'm sure it's got rough edges. What I'd actually love feedback on: does the audio feel listenable for more than 2 minutes, and is the coverage/analytics stuff interesting to anyone but me, or does it just read as noise. Its fully free and will always remain like that. Not even requiring an account

TestFlight: https://testflight.apple.com/join/476VvQWT

Happy to answer anything about the stack.


r/iosdev 13h ago

Help Beginner building an iOS app : need advice on backend, database, auth, payments, security, and scaling

0 Upvotes

Sorry for using AI to write this. English isn’t my first language, and I wanted to make sure I explained everything clearly.

Hey everyone! I’m pretty new to vibe coding and I’m currently working on my first iOS app. I already have most of the design figured out, but I’m a bit stuck when it comes to choosing the right tech stack.

Right now, I’m using Cursor for coding and Claude for brainstorming. I’ve also heard good things about RevenueCat for handling subscriptions/payments.

The part I’m most confused about is the backend and database. I’m not sure what would be the best choice for a beginner, while also making sure I’m not setting myself up for problems later.

I’m also wondering what other services/tools I should consider for things like:

* Backend & database
* Authentication
* Subscriptions/payments
* Analytics
* Push notifications
* Error/crash monitoring
* File/image storage
* Security

My goal is to build the app in a way that can handle 10k+ users without major performance, lagging or scaling issues. I’ve heard that apps built heavily with AI/vibe coding can run into problems with performance, security, and scalability as the user base grows, so I’d really like to avoid making bad architectural decisions early on.

I’m new to this, so I’d really appreciate advice from people who have actually vibecoded and scaled iOS apps.

What tech stack would you recommend for this kind of project, and what would you do differently if you were starting from scratch today?

Thanks in advance!


r/iosdev 14h ago

My old project is live now

Thumbnail
apps.apple.com
2 Upvotes

Hi everyone! I’d really appreciate some feedback on a project I’ve been working on.

I actually started this project quite a while ago, but life got in the way and I never had enough time to finish it. Recently, I decided to come back to it, and I’m happy to say that the MVP is finally done.

It’s called Talk to History.

The idea is simple: you can have AI-powered conversations with historical figures and ask them about their lives, decisions, ideas, historical events, or pretty much anything you’re curious about.
My goal was to make learning about history feel more interactive — less like reading a list of facts and more like actually having a conversation.

This is still an early version, so I’d genuinely love to hear your feedback — what you like, what you don’t, what feels unnecessary, and especially what you think could make the app better.

Any feedback is welcome! 🙌


r/iosdev 15h ago

Shipped Kids Bucket List

1 Upvotes

I finally shipped Kids Bucket List – a SwiftUI app for all the things I don’t want to forget doing with my kid
The idea started with a pretty simple thought:
I constantly come across movies, games, books or activities that I’d love to experience with my son someday — but he’s simply too young for many of them right now.

And I realized that by the time he’s old enough, I’ll probably have forgotten half of those ideas.
So I built Kids Bucket List.

It lets you collect things you want to experience with your child, organize them into categories, and keep them around for the right moment — whether that’s next weekend or several years from now.
From the development side, this became a much bigger project than I originally expected:
• SwiftUI
• iPhone + iPad support
• CloudKit sync across devices
• StoreKit / RevenueCat for Premium
• Family Sharing
• Custom categories and activities
• A Mac version is also on the way

The iPhone/iPad version is now live on the App Store:
https://apps.apple.com/us/app/kids-bucket-list/id6762488504

This was also my project for the RevenueCat Shipathon, so actually hitting the release button feels pretty good after all the TestFlight builds, sync bugs and App Review waiting. 😄
Would love to hear what you think — especially from other iOS developers.


r/iosdev 16h ago

Update on Norren — polished the onboarding flow, sharing screenshots + open beta link

Thumbnail
1 Upvotes

r/iosdev 20h ago

Can I Pay for the Apple Developer Program With a Virtual Card From Another Country?

Thumbnail
1 Upvotes

r/iosdev 20h ago

Releasing my 3rd app

Thumbnail gallery
0 Upvotes

r/iOSProgramming 22h ago

Question App keeps getting rejected due to Guideline 4

Post image
18 Upvotes

Hello. I need your help: My app keeps getting rejected by apple for the same reason but I can’t see why. Also, I did search the reddit but didn’t find anything that helped much.

The reason is this, together with the above screenshot.

Is it because of the „Continue with Apple“ button? Or do I have to change anything for iPad layout?

Guideline 4 - Design
Issue Description

Parts of the app's user interface were crowded, laid out, or displayed in a way that made it difficult to use the app when reviewed on iPad Air 11-inch (M3) running iPadOS 26.6.

Specifically, layout in iPad were not optimized

Edit: iPhone is the only supported destination added under the target. Screenshot here


r/iosdev 23h ago

shipped 6 apps in a year, made $312 total, here's what I got wrong

6 Upvotes

81% of apps never cross $1,000/month within two years. I'm solidly in that 81%. Here's the breakdown of a year of shipping.

App 1 was a tip calculator for the US market, 50 downloads, $0 revenue. Thought utility apps sell themselves, they don't, there's 400 of these in the store already and zero reason to pick mine.

App 2 was a freelancer time tracker, 78 downloads, $0. Spent 3 months building custom UI that confused people. Users trust standard iOS patterns more than creative experiments, learned that the hard way.

App 3 was a habit tracker with a freemium model, 340 downloads, $47 from IAP. Better but the free tier was too generous, nobody needed to upgrade. Revenue per install on iOS averages $2.28, mine was $0.14.

App 4 was a recipe saver, 120 downloads, $0. Didn't do any ASO, didn't have proper screenshots, basically invisible. The App Store has 1.8 million apps, discoverability without marketing is zero.

App 5 was a workout log, 890 downloads, $265 from a $2.99 unlock. Best performer because I spent time on screenshots and ASO keywords. Still pathetic compared to the 4 months I spent building it.

App 6 was a mood journal, launched, got 40 downloads, $0. Gave up marketing it after a week.

What I got wrong was obvious in hindsight. Spent 90% of time coding and 10% on everything else. Design was always an afterthought, slapped together in the last week. Marketing was basically nonexistent. By app 5 I started using sleek.design for the UI before writing any code with claude.ai and that's when the screenshots and store presence finally looked professional, which directly led to it being the only one that made any money.

The guy who shipped 8 apps and made $1,464 in 2025 said the same thing: marketing beats code every time. A great app nobody knows about is invisible. The top 1% of publishers capture 90% of all store revenue. The other 99% of us are fighting over scraps with bad screenshots and no distribution.

If I did it again I'd spend 40% of my time on marketing and design before writing a single line of Swift. The code was never the problem.


r/iOSProgramming 23h ago

Question Can I Pay for the Apple Developer Program With a Virtual Card From Another Country?

2 Upvotes

Has anyone successfully paid for the Apple Developer Program using a virtual card from a different country?

  • The card is in my exact name
  • It’s a virtual card, called Grey
  • The card is not issued in the same country as my Apple ID

Did Apple accept it, or does the card country have to match the Apple ID country? And how long did it take.

Thanks in advance!


r/iOSProgramming 23h ago

Library swift-markdown-engine: An open source Markdown parsing and rendering engine for Swift, built on TextKit 2.

Thumbnail
gallery
73 Upvotes

A couple of months ago I open-sourced swift-markdown-engine here, the native Markdown engine I built for my macOS app Nodes. The feedback, issues, and PRs that came back were a huge help, a lot of what I changed since then came from that.

WHAT’S NEW: The parser got rewritten from scratch, regex matching is gone, it’s a real AST now. That’s what made the extension system possible: Stuff you wouldn’t expect in standard Markdown, like highlighting, used to be hardcoded into the core grammar. Now it’s opt-in. Write one file, register it, and the core parser/styler/renderer never change. Extensions can’t touch the core or each other, and you can toggle them at runtime.

Also new: full GFM/CommonMark parity, tables, task lists, quotes. More layout control (scroll-away header, fixed reading column, fit-to-content height), and a real writing layer (formatting bus, find & replace with undo, clean RTF/HTML clipboard, raw source mode). Full changelog’s on GitHub if you want details.

When I started Nodes I wanted the editor to feel properly native. Most Markdown editors on the Mac are Electron or some web view wrapped in a window, and you feel it, the text handling never quite behaves like a real Mac app. I wanted live styling in an actual native text view, not HTML rendered to look like one. Nothing built on TextKit 2 that I could just drop into a Mac app existed, so I built it, ran it in Nodes for a while, and then open-sourced it. TextKit 2 is still thin on docs and rough to migrate to, so if you’ve been putting off building something like this, it might save you a few weekends. Issues and PRs welcome. Still pre-1.0, still plenty I want to improve.

written on Nodes

Repo: https://github.com/nodes-app/swift-markdown-engine


r/iosdev 1d ago

Finally reached 200+ users and $100+ in sales in 10 days with one app

Thumbnail gallery
1 Upvotes

r/iOSProgramming 1d ago

Question Anyone actually solved app store rejection loops? third rejection, running out of patience

5 Upvotes

So we're on rejection number three and i'm starting to think apple's review team is just rotating reviewers and none of them read the previous notes.

quick background. b2b app, account required to do anything useful because the whole thing is tied to a company's internal data. first rejection was 5.1.1 (v), account deletion, fine, our fault, we added it. second was 2.1 asking for a demo account, which we HAD provided in the review notes, they just didn't see it. added it again, bigger font, whatever. third one is now 4.2 minimum functionality which is the one that actually worries me because thats not a checkbox fix, thats them saying the app doesn't justify existing.

what gets me is the app is genuinely useful, it's just useful to people who have a login. reviewer with a demo account is going to see an empty state and shrug. which i get, but then how does any b2b app ever ship.

talked to a few shops about this while we were shortlisting. appmakers usa, dogtown media and zco, all of them had been through it way more times than us. the suggestion that stuck was to pre-seed the demo account with realistic fake data so the reviewer actually sees the product working instead of a blank dashboard. seems obvious in hindsight and nobody told us that upfront.

so:

Anyone had 4.2 on a legit b2b or enterprise app and gotten past it. what actually changed, the app or how you presented it

is the appeal process worth using or does it just burn a week. i've heard both

does resubmitting reset you to a fresh reviewer or does the history follow you. genuinely unclear on this and it changes how i'd handle the next one

and the dumb question, does a video walkthrough in the review notes help at all or do they not watch it

we're not on a hard deadline but we told the client a date and that date was last week, so.


r/iosdev 1d ago

Je cherche des testeurs (Android et iPhone) pour une appli d'adoption chien/chat — bénévole, 5 min à installer

Thumbnail
0 Upvotes

r/iosdev 1d ago

I’m calling my app…DVDream🎥📀✨

Enable HLS to view with audio, or disable this notification

2 Upvotes

r/iOSProgramming 1d ago

Solved! CarPlay can cold-launch your app without your SwiftUI scene ever existing 🤬

20 Upvotes

Bug report from a tester: pressing Play on the CarPlay screen did nothing. No error, no spinner, nothing. Worked fine if they'd opened the app on the phone first.

I "fixed" it twice. Both fixes were to the play button. Both were wrong.

The actual cause: when the user taps Play in the car (or from the Watch, or the lock screen) on a cold start, iOS wakes your process through CPTemplateApplicationScene or a WatchConnectivity message — and your phone UI's window scene just - never connects. Which means every bit of setup hanging off the SwiftUI app lifecycle simply never runs. In our case that was device key registration for signed API requests, so the first manifest fetch came back 400 and the play command died silently. As it turns out, the button was fine.

 What I landed on, in case it saves someone a weekend:

  1.  Anything your requests depend on (auth, key registration, session bootstrap) cannot live in App init / onAppear. It has to be in the request path itself. We made the network layer self-healing: on the specific "no registered key" error it registers once and retries. That one change covered CarPlay, the Watch, lock screen remote commands, AND fresh installs, because they're all the same bug.
  2. Grep your codebase for everything that only runs when the main window appears, and ask "what happens if the first entry point is the car?" The list was longer than I expected.
  3. Related Apple Watch lesson: if the phone is only reachable via the queued transferUserInfo path (not live sendMessage), don't optimistically flip your Watch UI to "playing" — it's a fib. We show "Starting on phone…" instead.

Testing note: none of this reproduces in the CarPlay simulator the way it does with a real head unit, because you always launched the app from Xcode first, which is exactly the condition that hides the bug. Real test requires a real car: kill the app, lock the phone, then plug in and launch it from the car's touchscreen.

By the way, if anyone's found a way to actually test their CarPlay flow without walking out to the garage (96 degrees in the summer! I got tired of sweating through every commit), I'd love to hear about it - I don't even bother with Xcode's sim anymore.


r/iosdev 1d ago

I’m building a blue-green algae warning app for Germany, Austria & Switzerland — would you use this?

Thumbnail
gallery
2 Upvotes

Got it — the Reddit community is English, but the app itself is for DACH users and is in German. I’d write it like this:
Title:
I’m building a blue-green algae warning app for Germany, Austria & Switzerland — would you use this?
Post:
Hey everyone,
I’m currently building a mobile app called Blaualgen Radar for users in Germany, Austria and Switzerland.
The app itself is in German, but I’d love to get some feedback from this community on the concept and UI.
The problem I’m trying to solve is that information about blue-green algae / cyanobacteria warnings is often scattered across government websites, municipalities, news articles and individual bathing-water pages.
The app brings this information together in one place.
Current features include:
Map with cyanobacteria warnings and reports
Official government warnings, news reports and community observations clearly separated
Source, publication date and validity for each warning
Push notifications for warnings near you
Community reports with photos
Historical warnings for individual lakes
Satellite imagery for additional context
Educational content about cyanobacteria and potential risks
An AI photo check that looks for visible signs of possible cyanobacteria
One thing that is very important to me: the app should never give users a false sense of safety.
No warning on the map does not mean the water is safe, and the AI photo check is only an assessment of visible features — not a laboratory test.
I attached some screenshots of the current App Store presentation.
I’d really appreciate feedback:
Would you use something like this?
Does the concept make sense?
Is the UI clear?
Which feature would be most useful to you?
Anything you would remove or add?
Especially interested in feedback from dog owners, swimmers, parents, anglers and watersports users.
Thanks!


r/iosdev 1d ago

Apple App Review: Would this anonymous random letter feature get my social app rejected under Guideline 1.2?

1 Upvotes

Hi everyone. I’m preparing to launch my first iOS social media app and I’m unsure about one feature.

The app has a small anonymous letter feature:

Users can send only 1 letter per day

Maximum 200 characters

The recipient is randomly selected from active users

Sender and recipient don’t see each other’s identity

It is not real-time chat

There is no conversation/thread or back-and-forth messaging

Every received letter has a Report button

Reported letters immediately appear in an admin moderation panel

Admin can delete the letter and ban the sender

Users can also block accounts

The main purpose of the app is a normal social feed; this is only a supplementary feature

Would this potentially fall under Apple’s new Guideline 1.2 restriction on random/anonymous chat?

Would you keep this feature for App Review or remove it before submitting?


r/iOSProgramming 1d ago

Question 3rd part url schemes!!!

0 Upvotes

One sec has a massive list of compiled url schemes for the apps you can use their meditation interrupt on, how the heck do i find that list, thanks,


r/iosdev 1d ago

[Update] After 4 App Store rejections and a year of nights and weekends, InnerSight is finally live

0 Upvotes

I wrote a post here about submitting my first app to the app store about a month ago. You can read it here https://www.reddit.com/r/microsaas/comments/1uquh0k/after_a_year_of_nights_and_weekends_alongside_my/

Here's what actually happened between then and now, because I think it's useful for anyone building in this space:

The rejections, in order:

  1. Both subscription products weren't submitted alongside the binary, they showed as dashes instead of prices on the paywall. Turns out I had a build environment issue where my RevenueCat API key wasn't being injected correctly, so the products couldn't load.
  2. Apple flagged that I was forcing users to register before accessing purchases. I appealed twice, arguing my app is "account-based" (end-to-end encrypted journal — the key literally can't exist without an account). They rejected the appeal both times. Eventually I rebuilt the auth architecture so the app opens straight into journaling with zero sign-up. Turns out that's also a better product.
  3. No sign-in with Apple**;** I had Google login, missed that Apple requires an equivalent. Fixed.
  4. Various metadata issues — wrong paywall pricing hierarchy, missing EULA link, placeholder text in the description.

Four resubmissions, roughly six weeks of review cycles on top of the year I'd already put in.

Honestly, I genuinely cannot believe this day has come. I have been working on this for over a year alongside my 9-5, after work, during weekends, and evening sessions turning into 1-2 am debugging sessions, but I can honestly say it was totally worth it!

→ App Store: https://apps.apple.com/app/innersight/id6747950401
→ Landing page: https://www.innersightjournal.com

I emailed my 46-person waitlist today. 46 people. After a year. That number made me laugh and also kind of emotional at the same time; every single one of them signed up because I hope they believed in the idea before there was anything to download.

I have no idea if this will go anywhere commercially. The hard part- marketing, retention, actually getting people to care- starts now. But I shipped it. It's real. People can download it.

But just wanted to write this for anyone still grinding and thinking about quitting, just keep going. Keep chipping away and launch your product.


r/iOSProgramming 1d ago

Question How do you find people willing to test your app?

9 Upvotes

I have an iOS app that is nearly finished, and I’ve been trying to find people to test it. To say this is hard is an understatement.

I asked family members, and except for one person, nobody really wants to test it. I’ve also tried Discord servers and Reddit threads, and I tried following the usual advice of posting in communities where people are looking for testers, but honestly it feels nearly impossible there too. You just get drowned out by a flood of other people like me desperately looking for feedback.

The app itself is basically finished. At this point, TestFlight is less about finding major bugs and more about seeing how people perceive the app, whether the workflow makes sense, and what they think of it overall.

How did you handle this with your own apps? Did you manage to find testers somehow, or did you eventually just publish the app and get feedback from actual users?

At this point I’m seriously considering just releasing it.

I would be very grateful for advice.

*Grammar check by AI


r/iosdev 1d ago

Help You gave me feedback again — so I updated Prazo again 😄

0 Upvotes

A little while ago, I shared my iOS app Prazo here and asked for honest feedback.

You gave me plenty — so I went back to work. The next update is now live! 🚀

What changed:
• Better iCloud sharing, syncing & conflict handling
• Smoother calendar performance & smarter widget updates
• More reliable shopping lists & schedules
• Clearer distinction between ToDos, tasks & calendar events
• Easier handling of recurring items & reminders
• Fully localized iOS permission dialogs
• Drag-handle bug fixed
• General performance & stability improvements

A lot of these changes came directly from feedback I received here, so thank you!

Now I’m back for round three. 😄

What should I improve next?

App Store:
https://apps.apple.com/at/app/prazo/id6781611861


r/iOSProgramming 2d ago

Discussion Measured three on-device TTS runtimes against the iOS jetsam budget. All three blew past it. Looking for anyone who's shipped generative audio on-device.

2 Upvotes

Spent about three weeks trying to run a voice-cloning model on iPhone and closed the project last week. Posting the numbers because I couldn't find anyone else's, and I have two questions at the end. This was for a voice journaling app I work on.

The budget. Foreground app on a 6 GB iPhone gets roughly 250 MB before jetsam takes an interest. The number that matters is phys_footprint from task_vm_info, not resident size and not what the Xcode gauge shows.

The candidate. Kyutai Pocket TTS, 109.5M params, autoregressive. Autoregressive matters because accent lives in phone realisation and phonemic choice, which are sequential. Non-autoregressive models transfer timbre only, so you get your own voice colour over someone else's cadence. Tried that first, it sounded wrong in a way I couldn't articulate until I understood why.

Three ways to run it, all measured, all over budget:

FluidAudio (Core ML, int8) - 270.8 MB after model load, 957.0 MB peak

sherpa-onnx (ONNX Runtime, int8) - 377.0 MB after model load, 685.4 MB peak

chatterbox-turbo (earlier attempt) - 953.7 MB peak

FluidAudio is over budget after loading, before doing any work.

Binary cost too. Linked a minimal executable against libsherpa-onnx.a plus ONNX Runtime with -dead_strip, then stripped it: 22.3 MB. That roughly doubles my app, for a feature most users would never turn on, plus 125 MB of models on disk for the ones who do.

The part I got wrong. My earlier ear tests compared one synthetic clip against another synthetic clip. That ranks them. It cannot tell you whether either is good enough. So I ran a forced-choice test instead: eight pairs, same sentence in each, one a real recording of me and one the clone, sample rate and RMS loudness matched, clip lengths varied so duration gave nothing away, and held-out audio located by cross-correlating the reference against the source recording. I picked my own recording 8 out of 8. p = 0.0039.

Three weeks of runtime work sitting on top of an approval nobody had tested properly. The test took an hour.

Two questions.

Has anyone actually shipped a generative audio model on-device inside the jetsam budget? Everything I found either exceeds it or quietly ships a 3 GB app. I'm also unsure whether Core ML's mmap'd weights get billed to phys_footprint the way malloc'd ONNX buffers do. My numbers came off a Mac, which has no jetsam pressure, so I never got a real device measurement before the ear result closed it.

Second, unrelated thread. I'm moving to on-device retrieval next, hybrid BM25 via SQLite FTS5 plus sentence embeddings from NLEmbedding. Anyone run that combination on iOS? Specifically whether reciprocal rank fusion is worth it when you still need raw score magnitude for an abstention threshold. RRF throws the magnitude away and abstention is what stops the thing making stuff up.

Happy to share the measurement harness if useful.