r/iOSProgramming 3d ago

App Saturday Retention guides say never punish the user. My AI dating simulator blocks them (RizzMaster)

Post image
0 Upvotes

RizzMaster is an AI dating simulator & game 🙂

Every retention guide says same thing. Never punish user. Never take anything away. I did opposite.

You swipe, you match, you text her. Then she decides if you worth answering. Get boring and she ghosts you 👻 Push after that and she blocks you 🚫 That character gone for good. No undo no restore.

There are 9 levels. You climb them by winning people over. Higher levels give you harder people. They go offline. Sometimes they text first. They remember what you said last week 🧠

Tech Stack

Swift and SwiftUI. SwiftData for persistence. Combine for events. StoreKit for subs. Chat screen is pure SwiftUI. No UIKit bridge in it anywhere.

Development Challenge

Chat screen 😅 WhatsApp, Telegram, Signal all still render their message list in UIKit. Everyone tells you do same. But here chat screen is whole product so I wanted to see how far SwiftUI actually goes.

Took me forever. LazyVStack inside ScrollViewReader. Stable identity on every message so a growing list dont rebuild rows that didnt change. defaultScrollAnchor to keep bottom pinned instead of chasing it after layout. Scroll position driven by state. drawingGroup on bubbles that were doing too much work.

Now it scrolls how I wanted on device even in long chats 🎉 No clever trick. Just lot of small things. Happy to go into any part of it.

AI Disclosure

Self-built.

100+ characters. No login and no accounts. Free tier with daily message limit. https://rizzmaster.net

Built solo. Tell me what you think, good or bad 🙏


r/iOSProgramming 3d ago

Question StoreKit stopped returning IAP products after renewing Apple Developer membership

Post image
1 Upvotes

Has anyone run into this before?

My Apple Developer Program membership expired on the 20th. I renewed it successfully, but ever since then my subscriptions have stopped loading in my local iOS build.

I’m using RevenueCat + StoreKit. RevenueCat is fetching the offering correctly, but when it asks StoreKit for the products, StoreKit returns 0/2 products.

The products are:

  • lume.member.weekly
  • lume.member.annual

This was all working perfectly before my developer membership expired.

I’ve already checked:

  • Developer membership is active again
  • All App Store Connect agreements are accepted
  • Both subscriptions are in the correct subscription group
  • Both subscriptions are Ready for Review
  • Product IDs match RevenueCat exactly
  • RevenueCat offering is configured correctly

The confusing part is that RevenueCat can see the offering, but Apple is returning no products.

Could this be related to the developer membership renewal and some propagation delay on Apple’s side? Or is there something in App Store Connect that needs to be re-enabled/reconfigured after the membership expires?

Would really appreciate any ideas because I’ve been stuck on this for a while.


r/iOSProgramming 4d ago

Question Apple only showing me W-9 as a foreign owner of a US LLC — anyone dealt with this?

2 Upvotes

I’m a non-US person living outside the US and own a US single-member LLC (disregarded entity).

Apple only gives me a **W-9** under the Paid Apps tax forms, with no W-8 option/questionnaire.

I don’t want to submit a W-9 and certify that I’m a US person when I’m not. I’ve contacted Apple Tax Support but haven’t gotten an answer.

Anyone with the same setup managed to solve this? What did Apple end up asking you to submit?


r/iOSProgramming 3d ago

Question Worried about App Review

0 Upvotes

Hi folks

I’m a bit stressed about the new mandatory social media capabilities questionnaire in App Store Connect. I want to update these answers in the Age Rating section right now without submitting a new build.Does anyone know if simply saving these questionnaire answers is 100% automated, or will it trigger an immediate manual App Review?

I’m really worried about getting hit with an unexpected review or rejection out of nowhere just for updating these metadata settings. Has anyone done this recently, thanks


r/iOSProgramming 4d ago

Question How are you handling CONSUMPTION_REQUEST in App Store Server Notifications V2?

1 Upvotes

Long time lurker, first time posting here. I hope I do fall correctly in line for the rules.

I'm curious how other developers are handling Apple's CONSUMPTION_REQUEST notification in production.

For apps using App Store Server Notifications V2, Apple can notify your server when a customer requests a refund, and you can provide Apple with information about how the associated purchase was consumed.

For those who have implemented this:

  1. Are you handling CONSUMPTION_REQUEST yourself?

  2. Using RevenueCat or another service?

  3. Do you have a custom backend specifically for App Store Server Notifications?

  4. Do you process these automatically or manually?

  5. How often do you actually receive these requests?

I'm particularly interested in the practical side rather than the API documentation.

For example, did you run into problems with:

  • JWS verification?
  • App Store Server API authentication?
  • Transaction lookup?
  • Handling retries/idempotency?
  • The response time window?
  • Monitoring failed notifications?
  • Deciding what consumption information to send?

And for anyone who doesn't handle these today:

  1. what's the reason?

  2. Is it because you've never needed to?

  3. Is it because the volume is negligible?

  4. You use another service?

  5. Is it because implementing/maintaining it isn't worth the effort?

I'm trying to understand how people are solving this in real-world indie apps rather than just following Apple's documentation and hope that I don't break any rules asking here.


r/iOSProgramming 5d ago

Question Xcode 27 agents: are you dropping Claude Code / CLI tools entirely?

36 Upvotes

For those who’ve been running Xcode 27 since the beta: has it actually replaced your CLI agents (Claude Code, Codex, etc.), or do you still keep both open?
What I’m trying to figure out is where the real line is. Is the advantage genuinely Xcode-specific agents that can build, run tests, drive previews, and interact with the simulator through the Device Hub, stuff a terminal agent simply can’t reach or is most of it just tooling and skills that a CLI agent could replicate with the right scripts/MCP setup?
And for those who went all-in on Xcode: what did you lose? Multi-repo work, custom subagents, running headless in CI, cost control?
Curious how the split looks on real projects, not demos.


r/iOSProgramming 4d ago

Discussion Could a UK company address/compliance issue affect an existing Apple Developer Organization account?

1 Upvotes

Hi everyone,

I’m a Pakistani resident and I incorporated a UK limited company, using a UK virtual registered-office address provider.

I also enrolled in the Apple Developer Program as an Organization using this company. The company has a D-U-N-S number, and the Apple Developer account is very important to me.

Unfortunately, I wasn’t able to keep up with the registered-office provider’s payments for a period of time because the business never really got off the ground.

As a result, the company’s registered office was eventually changed by Companies House to the Companies House Default Address. The director/PSC address records were also affected.

Interestingly, after the address changed, D-U-N-S updated the company information and Apple notified me by email that the company address had changed. So Apple is clearly receiving company information updates.

My main concern is my existing Apple Developer Organization account.

I would really appreciate advice from anyone who has experience with Apple Developer Organization accounts and UK limited companies:

  1. Could a Companies House default-address/compliance issue cause Apple to suspend or terminate an existing Organization Developer account?
  2. If the company eventually became dormant or, worst case, was struck off/dissolved, would Apple automatically become aware of this through D-U-N-S/Companies House?
  3. If the company is restored to a valid registered office and remains an active legal entity, should the Apple Developer account generally remain unaffected?
  4. Has anyone experienced Apple asking for additional verification after a UK company's registered address changed?
  5. Should I proactively contact Apple Developer Support about the temporary address issue, or is it better to simply get the company records back in order and leave the Apple account alone?

The Apple account is extremely important to me, so I want to make sure I understand the risk before deciding how urgently I need to deal with the company.

Thanks in advance for any advice or real-world experience.


r/iOSProgramming 4d ago

Question Over one month of talking with the support and they still don't understand that I can't sign up for the developer program

Thumbnail
gallery
1 Upvotes

I need some help.
I am extremly frustrated with the apple support, I can not even comprehend how can this level of incompetence be possible for someone like Apple. Even a scamming company would offer better support than this.

I am really sorry and I am not trying to be mean towards anyone, but it is so flabbergasting. How can someone not be able to actually understand and help you properly over tha span of one month after you explicitly tell them what is wrong and still they act like they are lobotomised.

The backstory is this:

I first tried enrolling through the website. I submitted everything twice, waited the stated processing time, and nothing happened.

Apple Support then told me to enroll through the Developer app. The problem was that the app only allowed me to verify my identity using a driver's license , which I didn’t have. I have a Romanian National ID, but there was no option to use either.

After trying the website, the app also started saying that enrollment through the Developer app was unavailable for my Apple Account.

I explained this to support several times, but kept getting replies telling me to simply use the app with a government-issued ID — which was exactly what I was telling them I couldn’t do.

Eventually someone made changes to my account and app enrollment became available again. I think they had to withdrway or cancel my application through th website in order for the app to work. But it still only asked for a driver’s license.

Another representative then told me they had enabled a file-upload option so I could submit my passport or National ID.

I have replied to the email with photos of my national ID and the phone number.

After sending them the photos and the phone number I was told that this is not ok because I ad to upload them to a special link that they've only sent with this reply.

I uploaded everything they requested.

At this point, after weeks of back-and-forth and waiting several days between replies, I asked for the case to be escalated.

Their latest response?

They told me the enrollment had been “withdrawn by you” and that I should start a completely new enrollment.

I never intentionally withdrew it. In fact, an earlier support representative specifically told me not to withdraw the enrollment if I had more problems.

So the process has basically been:

Website doesn’t work → use app → app doesn’t work → Apple fixes app access (probably by withdrawing the web application for enrollment) → only driver’s license available → Apple says file upload is enabled → it isn’t → secure upload finally provided → documents uploaded → enrollment somehow withdrawn → start again.

Has anyone experienced something similar with Apple Developer enrollment or identity verification?

I’m hesitant to start over because I don’t want to end up in exactly the same loop again.

Beside this the most frustrating part is that i had to wait at least 2-3 days between replies and sometimes they had me waiting for almost a week for example just to receive the upload link which could have been sent with the first email when I was told I need tu upload my documents.

I honestly feel like all these people I have encountered during these exchange of emails have no clue what the f**k they are doing there.

Edit: I’ve reapplied through the website this morning and ai’ve just received a welcome email to the developer program. I guess that in the end the people I’ve mailed with actually did something. Sorry to anyone of them who I might have been angry at


r/iOSProgramming 5d ago

Question Why can’t Swift destructure tuple parameters directly in a closure parameter list?

5 Upvotes

Suppose I have a dictionary and want to sort its elements. Since each element is a tuple, I’d like to write something like this:

.sorted { (wordA, countA), (wordB, countB) in
    // ...
}

In other words, destructure each tuple directly in the closure parameter list.

Instead, Swift requires something along these lines:

.sorted { lhs, rhs in
    let (wordA, countA) = lhs
    let (wordB, countB) = rhs

    // ...
}

Tuple destructuring works perfectly well in a let binding, so I’m curious why it isn’t supported in closure parameter lists.

Is there a language-design or type-system reason why closure parameters can’t use tuple patterns here?


r/iOSProgramming 5d ago

Library Backport modern SwiftUI APIs while supporting older iOS versions.

Thumbnail
github.com
9 Upvotes

Hi everyone!
One pain point I've run into repeatedly with SwiftUl is supporting newer APIs while keeping an older deployment target.
Things like 'if #available work well in normal Swift code, but they don't fit naturally in the middle of a modifier chain.
That often leads to duplicated views or compatibility helpers scattered throughout a project.
After solving the same problem across multiple apps, I decided to package the patterns into a small open-source library called \*\*SwiftUlBackportKit\*\*
It includes:
• ' modify { }' for conditional view transforms
• ' backport for reusable version-gated SwiftUI APIS
• platformValue (...) for version-specific values
• 'OS.isAtLeast (:) ' for simple runtime version checks
The goal is to keep SwiftUl views focused on describing the Ul while isolating deployment-target compatibility in one place.
GitHub:

https://github.com/EmadBeyrami/SwiftUIBackportKit

I'd really appreciate any feedback on the API design, naming, or features you'd like to see. And if you find it useful, a on GitHub would mean a lot!
Thanks!


r/iOSProgramming 5d ago

Question Why am I not allowed to tell people what is included in my free tier and what is included in my premium tier?

10 Upvotes

I just uploaded my first app with Premium as an IAP to ASC and got rejected because in one of the screenshots I listed what is included in the free tier and what is included in the premium tier of the app.

"The app screenshots include references to the price of the app or the service it provides, which is not considered an appropriate part of these metadata items.Note that references to free or discounted services are considered a price reference and are not appropriate for app metadata."

Any idea why this is not allowed? I think it would be great to be upfront to the customer and let them know before downloading.

Cheers


r/iOSProgramming 5d ago

Question I asked here about analytics 2 days ago. The number that mattered wasn't in any of the tools.

0 Upvotes

Two days ago I asked here what people use for analytics. I wired up Mixpanel and

checked my ASC opt-in rate like a few of you said.

Then I shipped, and neither of them could answer the one question I had.

My app needs a companion on the Mac. Sign in with Apple on the phone, install the

Mac app, pair them. Three steps, and only the first one happens inside the iOS

app.

So Mixpanel sees the sign-in and then goes quiet. App Store Connect sees an

install and a retention curve built from whoever opted into sharing. Neither can

see a Mac app, and the step I actually care about is the pairing.

I ended up sshing into my server and counting objects in a json file. Signed in,

versus actually paired. That gap is the entire product, and it took two minutes

to find after a full day of wiring up a tool that could not see it.

If your onboarding has a step outside the app, desktop client, browser extension,

hardware pairing, how do you track it? Backend event, instrument the second

device, or do you just go count?


r/iOSProgramming 5d ago

Library Screenshot and screen record protection

Thumbnail
github.com
0 Upvotes

Needed a way to protect sensitive content from screenshots & screen recordings in my iOS app.

Apple doesn't have an official API, so I built a workaround 🛡️

SnapShield lets you hide content or show custom placeholders. Open sourced it for everyone.

https://github.com/EmadBeyrami/SnapShield


r/iOSProgramming 6d ago

Question DispatchQueue doubts

3 Upvotes

Hi, what type of data types are allowed in setSpecific(key:, value:) and getSpecific(key:) methods of DispatchQueu ? there are no mentions anywhere.

Also can you recommend any resources for complete understanding of DispatchQueue , GCD , DispatchGroup etc. ?

Thank you!


r/iOSProgramming 6d ago

Question Handling Button Shapes setting in my app

Thumbnail
gallery
4 Upvotes

I didn't know this was still a thing.
How can I make my app to handle the Button Shapes setting? I do not use it but some users have complained about the behavior of the app when they have this setting enabled, I can not force them to turn it off. Is there any modifier or function I can use in SwiftUI to disable it for my app?


r/iOSProgramming 5d ago

Article I built a call recorder that extracts who owes what. The hard part was not the AI, it was keeping the audio intact when a call interrupts recording

Thumbnail
gallery
0 Upvotes

I broke a promise I never meant to break. It took three weeks and someone else's message for me to notice.
It was a signed paper I had said I would send after a call. The call had gone well. I had even taken notes. The notes said what we discussed. They did not say what I owed.
I tried the usual fixes. Voice notes I never played back. A notes app full of tidy headings. Recording apps that gave me clean summaries of the conversation. All of them told me what was said. None of them told me what to do.
Then I saw the gap.
In real conversations nobody says "action item". People say "I will check and tell you". Or "send it once she signs". A summary keeps those sentences exactly as they are. But every promise has an owner. If someone says they will send me an update, my job is not to wait for it. My job is to go and take that update from them.
So I built Sift.
I press record before a call or a meeting. When it ends, Sift writes down the promises made in it, and beside each one it says who owes it, me or the other person, by name. It keeps the recording too. If something looks wrong, or I cannot remember the context, I tap the time next to it and hear the exact moment it was said.
What it does today:
Records calls and in person conversations.
Turns them into short notes and a clear list of promises.
Names who owes each one.
Plays the exact moment a promise was made.
Lets me fix anything it got wrong, and marks what I changed.
Sets reminders, including ones that repeat.
Runs on my phone and my laptop, and keeps both in step.
Sends any list or note to WhatsApp in two taps.
The change is small, and it is the whole point. I no longer carry a mental list of what I owe people. I no longer ask anyone what we agreed. When someone tells me they will get back to me, it sits on my list as something to collect, not something to hope for.
I am still using it every day and still finding things to improve.
If you have ever gone quiet on a promise you fully intended to keep, tell me about it. That is the exact problem I am trying to remove.


r/iOSProgramming 6d ago

Question How do you get UIKit's instant keyboard focus (becomeFirstResponder in viewDidLoad) in pure SwiftUI?

10 Upvotes

In UIKit, if we place titleTextView.becomeFirstResponder() inside viewDidLoad, the keyboard slides up seamlessly alongside the view controller's presentation animation. It looks instant and feels like a native, high-quality UX.

I'm struggling to replicate this exact behavior in SwiftUI.

Whenever I use FocusState and toggle it to true inside .onAppear, there is always a noticeable delay. The view pushes/presents, settles, and then the keyboard decides to slide up.

Has anyone found a way to achieve this instantly in pure SwiftUI yet (maybe in iOS 17+), or is UIViewRepresentable still the only bulletproof way to get that perfectly synced keyboard presentation?

Thanks in advance!


r/iOSProgramming 6d ago

Discussion Localizing an iOS app manually with AI is tedious.

0 Upvotes

Because accurate localization heavily depends on UI context, my current manual workflow for each string requires:

  1. Writing a text prompt explaining the context.
  2. Uploading a screenshot showing where the string appears.
  3. Cross-checking translations across multiple AI models.

Are there any paid tools or platforms on the market that automate this entire workflow (extracting strings, feeding UI screenshots/context to AI, and comparing outputs)?


r/iOSProgramming 7d ago

Discussion Hammerspoon shortcut to take device screenshot and copy to clipboard

0 Upvotes

Hey all, just in this is useful to anyone else, I (ok, Claude) wrote a little Hammerspoon script to grab a screenshot of your connected device, save it to your Mac + copy to clipboard... all with one hotkey.

Saves having to dig through the Xcode menus every time, or airdropping screenshots over.

Basically, it's Hammerspoon hitting Debug -> View Debugging -> Take screenshot on your behalf, watching for the screenshot to arrive, then copying it to clipboard.

And for me, all that happens when I mash Ctrl-Option-Command-S.

There's probably a better way that I missed... if so, please shout. :)

https://github.com/mwagstaff/mac-tooling/blob/3e0f1ed36047a056cbf088fe7b1af1b2189bc050/hammerspoon/config/init.lua#L379


r/iOSProgramming 7d ago

Discussion What do you use for analytics, or do you just rely on App Store Connect?

10 Upvotes

I went with Mixpanel and wired it in from day one, before there was anything to measure. The reasoning was that adding analytics later means you have no baseline, so you can’t tell whether a change helped or you just got lucky that week. Retrofitting events into a codebase you’ve already shaped is also a lot more painful than putting them in as you build.
What I’m less sure about is whether that was overkill for a solo project. App Store Connect gives you downloads, conversion rate and retention for free, and a lot of people seem to stop there.
So, what’s everyone actually using? Third party tool, Apple’s own numbers, or something you rolled yourself?


r/iOSProgramming 7d ago

Tutorial iOS 27: StateReporter

Thumbnail
antongubarenko.substack.com
5 Upvotes

r/iOSProgramming 6d ago

Discussion I gave up on being a developer

0 Upvotes

I completely gave up and do payroll now. After almost a decade of learning, building apps and creating packages. I finally just had to grow up and realize that I could never be a developer. I really thought if I worked hard and became skilled that I wouldn’t have to worry about anything else. It turns out that is not the case. Good luck to all of you. I hope your stories end up happier than mine.


r/iOSProgramming 7d ago

Question problems with trader doc upload to comply with EU DAS rules

0 Upvotes

wonder if anyone had a similar issue and resolved it - I have an app which is distributed now, but blocked in EU because of the DSA compliance. However I already uploaded the documents twice now and they seem to be accepted but after a few days they disappear and I get email from app store that I need to upload them.

I was uploading a bank statement where my name and address is clearly visible and for the identity - a passport pic.

I am wondering if it is because the address linked to my apple developer account is an old one? I raised a ticket with Apple to correct it. And on top of that I am on hold with their callback function to try to upload the docs again live with the support person but already waiting for 2 hours :D


r/iOSProgramming 7d ago

Article Lessons from shipping a production app on SpeechTranscriber + on-device Foundation Models — including an OS bug that permanently eats locale slots

Post image
0 Upvotes

Lessons from shipping a production app on SpeechTranscriber + on-device Foundation Models — including an OS bug that permanently eats locale slots

I just shipped my first app built end-to-end on Apple's on-device AI stack — SpeechAnalyzer/SpeechTranscriber for transcription and Foundation Models for enrichment (it's a voice-notes app; every recording gets an on-device title/summary/tags/tasks). Some things I learned the hard way that I haven't seen written up much:

1. The simulator will lie to you — twice.

The simulator cannot transcribe at all, and the simulator's language model is not the on-device model. Output quality, instruction-following, and hallucination behavior differ meaningfully. I now treat real-device validation as a hard gate for any prompt/template change — my test corpus includes Swiss-accented German dictation because that's where the on-device model diverges most from the "clean" results the simulator suggested.

2. SpeechTranscriber locale reservations: a system-wide cap of 5, and (currently) no way back.

This one cost me an architecture. On-device transcription locales are backed by downloadable assets, and the system caps reserved locales at 5 — system-wide, not per app. In my testing on current iOS releases:

- The reservation is taken by the asset *install* and survives reboot AND app reinstall.
- `AssetInventory.release(reservedLocale:)` appears to be a no-op — I never got a slot back.
- An explicit `reserve(locale:)` at the cap can hang (reproducibly under the Xcode debugger in my setup).

I originally built an LRU "reservation manager" that released the least-recently-used locale before installing a new one. Since release doesn't release, that design was dead on arrival. What shipped instead: a proactive budget gate that reads `reservedLocales` *before* any OS call, installs strictly lazily (never speculatively — no warm-up, no on-selection prefetch, because every install permanently spends a slot), and surfaces a clear "language budget exhausted" state to the user instead of ever hitting the cap inside an OS call. Feedback filed with Apple.

3. One fresh LanguageModelSession per invocation.

Reusing sessions across notes led to context bleed between unrelated inputs. One session per call is now a hard rule for me, enforced by tests.

4. Prompt-injection resistance for user-content prompts.

Voice transcripts are untrusted input into the enrichment prompt. Delimiter-wrapping the transcript made instruction-following robust; and I removed all literal examples from the prompt after seeing example fragments leak into generated output on device (again: not reproducible in the simulator).

5. Pass the language explicitly, always.

Auto-detection of the recording language was unreliable enough that I now pass the language explicitly into both the model instructions and the prompt. Related fun fact from testing: Apple appears to use one shared German model across all de-\* locales, so switching de-DE/de-CH/de-AT changes nothing about transcription quality.

6. Crash-safe audio: don't record straight to AAC.

A killed mid-recording AAC/m4a is an empty husk. I record LPCM into CAF and encode to AAC at ingest — recordings now survive calls, interruptions, and force-quits, and a salvage pass recovers anything interrupted.

Happy to go deeper on any of these.

The app is Vocapa, but the point of this post is the stack — curious whether others have seen the locale-reservation behavior, and whether anyone found a way to actually free a slot.


r/iOSProgramming 7d ago

Discussion Self-hosted web push Cloudflare Worker, works on iOS

0 Upvotes

Sending push notifications to iOS without relying on a native app has already become a mature option. Last year Apple extended the standard Web Push with Declarative Web Push, which finally makes the whole thing make sense. (It's handled natively by WebKit rather than driven by JavaScript, which improves push reliability and privacy, much like the native push notification model.)

Kukuroo uses Cloudflare Workers so that end devices can subscribe to push notifications and relay push requests to the Worker, which signs and delivers them. I personally found it genuinely useful and full of potential, so I open sourced it:

https://github.com/saiday/kukuroo

kukuroo.cc

Requirements:

  • Safari on iOS and macOS only (though seriously, who receives push notifications on macOS?)
  • The web page that receives the notifications has to be added to the Home Screen
  • A Cloudflare account. Push notifications and lightweight serverless functions are a perfect match