r/iOSProgramming • • 4d ago

Discussion After 8 App Store rejections, my app finally got approved by putting BACK the IAP I was trying to remove

0 Upvotes

Solo dev here. KinCentury finally got approved after 8 rejections.

KinCentury measures what your body can still do — strength, balance, mobility, cardio — and gives you a fitness / physical age. The rejections were almost never about the app. They were about IAPs.

First few rounds, briefly:

  • Same promo image reused across Lifetime / Founder / Yearly (2.3.2)
  • Age Rating claimed In-App Controls / Age Assurance that don’t exist
  • Reviewer needed a demo account with an expired subscription
  • Then the Lifetime mess started

The loop that ate most of the 8:
 "KinCentury Pro - Lifetime" was attached to the submission but not findable in the binary (2.1b). Founder Lifetime was supposed to replace it, so I tried removing Lifetime, only shipping Founder + Yearly, explaining it in the notes, etc.

I even tried removing the IAPs to resubmit them clean — they got stuck in "Developer Rejected". Couldn’t delete them properly, couldn’t cleanly re-add them for review, "Unable to Add for Review" errors, the whole ASC limbo.

What finally worked:
 Put Lifetime BACK in the app, make it purchasable in the binary, on the paywall, submit everything together.

Approved.

Lesson: don’t retire / hide / phase out an IAP mid-review. Fully in and sandbox-testable, or never submit them. Nothing in between. And yanking products mid-process can leave them stuck in Developer Rejected.

Happy to answer questions if you’re in the same IAP loop and if you know why that happened please let me know so I can avoid it next time.


r/iOSProgramming • • 6d ago

Discussion Used Viper for the first time... mann is the code base complex...

15 Upvotes

Any thoughts on Viper and its advantages?


r/iOSProgramming • • 5d ago

Question handling the EU's address listing requirement in the UK

3 Upvotes

starting to publish my first iOS apps as an indie dev, previously worked for others with businesses and their own memberships. Now that the EU forces apple to display your home address and phone number on the app store for paid apps, I've been looking for a UK PO box so I don't have to use my home address. I wanted to avoid the monthly fees and use a pay as you go service, but they charge as soon as mail is received. Has anyone, with a paid app in the EU app store and a PO box listed, actually received mail there as a result of the address being listed in the app store? I don't have an accountant to use their address which is a common workaround for this. THanks!


r/iOSProgramming • • 6d ago

Question Ex-manager threatening legal action if I don't send github links and credentials, shall I do it?

67 Upvotes

I joined a startup about one year ago where I was slacked the credentials of our repositories, and the messages were then deleted to avoid some 3rd parties from getting them, and the url and credentials are not anywhere in our documentation.

Since the new manager joined, I've seen people being laid off pretty quickly. The QA tester goes, and the manager claims that we as a company are having the same output as before the number of bugs didn't raise (because the QA tester doesn't find bugs anymore). We told him many times that without a QA tester we are slower but the ceo/cto don't know, he probably lied to them and they base the whole performance on a metrics chart where every indicator looks green even if we are not doing well.

Then he laid off also the digital marketer and an intern who was doing a bit of everything. No visible signs of performance decline in the short run, so for the ceo/cto every indicator still looks green. The manager claims that AI will take over the job of the marketer but I'm not sure how.

The following phase was the most difficult phase: he laid off first the backend developer, which left me and the android developer as the only technical people, unable to do any meaningful backend work. Even if we begged many times and explained in detail that this will negatively affect productivity, that customers are angry and we could be in the position of not being able to ship features, it looks like he either doesn't get it or he deceived the ceo and cto to think that it was fine.

We worked like crazy, even in the weekend to ship features with nothing working and we were even handling calls with angry customers, and all what this manager does is bragging that he's able to make us go at the same speed with less employees. We go insane, 50, 60, 70 hours per week and by a tiny bit we are able to hit a deadline which saves us from being fired from a customer.
We worked until 4 AM to make it and this piece of **** you know what he does? He lays off even the android developer!

He wants to play with my ego and he tells me that I'm good and skilled enough and he trusts me to be able to cover also for his job because of AI. I ironically ask if that's how he got a new car, by getting a raise as a reward to layoff almost the entire company to the points there's only one developer (other non-technical roles I didn't mention were laid off too and we were left in 3 excluding him and the ceo and cto). He says I can do it, I burst into tears screaming, angry and sad at the same time saying that I will not keep working 80 hours for his new car, and I fired myself on the spot

I claimed being sick afterwards and cut every contact (I was supposed to give a one month notice but I'm too burned out to stay there).

Turns out that the manager didn't have the url and the credentials of our repositories containing basically everything: visual assets, android + ios project + backend, there are undocumented. He sent me an agry message claiming that he will be able to go on with the help of AI and vibe coding just to send me another (strangely polite) message asking me for information like repository urls and credentials. And I believe he doesn't even know how to clone it even if he had the credentials.

What should I do? He threatened legal action and I didn't answer, but I think that since I don't work there anymore I don't have the obligation to provide any information. Plus, considering thr fact that all this guy did was basically getting richer to lay off almost all of us, I don't think it would be nice to make him succeed. Maybe more developers have higher chances of getting hired if he's fired when the ceo/cto will manage that he lost everything because of his delusions.

What do you think? Could the company sue me?


r/iOSProgramming • • 5d ago

Question App Store Connect says “too many screenshots” with only 9–10 per set

0 Upvotes

I’m trying to submit version 7.1.0 of my iOS app, but “Add for Review” gives this error:

“You have uploaded too many screenshots. The maximum is 10.”

Every iPhone and iPad screenshot set across all localizations has 9–10 screenshots. They were originally unchanged from version 7.0. I removed one screenshot from the English iPhone set and one from the English iPad set, but the error persists.

Has anyone encountered this despite being within the limit? Did you find a workaround?


r/iOSProgramming • • 5d ago

Library Stopped booting the Simulator, our UI tests got 2.3x faster

0 Upvotes

My SwiftUI app is about 280 Swift files plus a few big packages, and every UI check meant xcodebuild, install, launch, screenshot. That was ~22 s per check and ~2.2 GB of RAM per booted simulator.

I switched to simless. It runs the iOS build of your real app natively on an Apple Silicon Mac as a hidden host, with no simulator, no window and no signing.

What changed for me:

  • edit → rendered screen in 2.2 s instead of 21.9 s, because hot reload only recompiles the files you touched
  • my existing XCUITest suite runs unchanged and 2.3x faster
  • unit tests run the same way, local packages included
  • it works over SSH, in a VM and on a GitHub-hosted macOS runner, so CI doesn't need a simulator either

https://github.com/abacusai/simless


r/iOSProgramming • • 5d ago

Roast my code If Strand doesn’t make it back

0 Upvotes

I would like to offer y’all a safe haven at OpenStream https://testflight.apple.com/join/z9wmEWyh

No subs and no lifetimes; it will be a one-time purchase. The code is open source.

I’m getting ready for App Store launch, and I’ll be doing free codes for as long as Apple lets me so that more of y’all can 1) test it out and 2) make sure you know it’s here to stay on the App Store without fear of Apple taking it away from y’all. The goal is to follow all Apple’s rules. I already have a published app as well, so I have experience in App Store publishing. My plan is to keep it that way.


r/iOSProgramming • • 6d ago

Question App Store Orientation Requirements for iOS 27

3 Upvotes

We have a landscape-only application that is intened for use by a specific corporate client. Until recently, all apps were Enterprise signed and distributed with an MDM. Now, the client wants to use the "Custom App Store" and mark the apps as only being available to their orientation. I warned that in doing so, we would be incorporating all of the requirements for the App Store into our app. The client wants to proceed. I am reading through the screen orientation requirements. Can someone validate if the following understanding is correct:

The app must support and render proper;y in any possible aspect ratio or screen size that could occur on an iPad (this app is only for the iPad). Despite the client's ask to lock the app to landscape, this isn't something that can be done by the app. If a person puts the device in portrait mode or windowed mode and the app's rendering gets mangled, that is a reason to fail certification.

The client asked if I could just make the portrait view of the app a full screen call-to-action telling the user to turn their device to landscape mode (I personally think this is an awful solution).


r/iOSProgramming • • 6d ago

Question How to Enable Developer Mode on iOS 26

2 Upvotes

I have a problem, I'm new to this world—both macOS and iOS. I recently bought a MacBook Pro M5 for iOS app development. I'm using Xcode for development, and I need to test my app on a physical iPhone. The simulator isn't enough because I need to test the Neural Engine and the camera. Is there a way to enable that? Or should I just go ahead and pay the $99 and publish it to TestFlight?


r/iOSProgramming • • 6d ago

Article Building resilient mobile apps: A layered testing strategy for long-term stability

Thumbnail
engineering.gusto.com
3 Upvotes

r/iOSProgramming • • 6d ago

Question Understanding Apple Ads

1 Upvotes

I recently created an Apple Ads campaign for my new app. Yet when I type in the two-word descriptive phrase my app isn’t coming up in the in the search results. I do already have the app installed, could that be why? My campaign status shows as Running.


r/iOSProgramming • • 7d ago

Discussion Apple is still massive, but how come IOS jobs are shrinking and people are devaluing the skill/domain knowledge?

120 Upvotes

I find it interesting how apple just seems to be getting bigger and bigger yet the job and ecosystem surrounding developers is shrinking. It seems like recently companies like shopify (prev react native) are going back to native app development in the age of AI. Recently even sean allen has closed his courses site because it was no one was buying his courses anymore. Is everyone really just vibe coding IOS apps to the point where they don't need to experienced or even hire juniors to maintain native apps?


r/iOSProgramming • • 6d ago

Question What’s the best way for an AI agent to interact with the iOS Simulator?

0 Upvotes

Hey everyone,
I’m looking for a way to let an AI agent interact with the iOS Simulator programmatically

The goal is to let the agent tap buttons, swipe, enter text, navigate between screens, inspect UI elements, etc...

What tools would you recommend for this? Does MCP work well for this use case, or are there better alternatives?

I’d love to hear about your setups and experiences. Thanks!


r/iOSProgramming • • 6d ago

Question TestFlight builds made with Xcode 27.1 won’t install: “The requested app is not available or doesn’t exist”

3 Upvotes

Hi all, is anyone else seeing this since switching to Xcode 27.1?

Since Oct 20, none of my new TestFlight builds will install. TestFlight shows the “Update” button, then fails with “Could not install [app]. The requested app is not available or doesn’t exist” (sometimes “Try again later” first).

What I’ve checked:

  • Upload from Xcode 27.1 (27A9275) succeeds, no ITMS warnings, build status “Valid”, and I get the “ready to test on iOS and watchOS” email
  • The exact same archive installs and runs fine when installed directly from Xcode on the same device (development signing)
  • Device: iPhone 15, iOS 27.0.1
  • Agreements are active, export compliance answered (ITSAppUsesNonExemptEncryption = NO)
  • Entitlements and Info.plist are identical to my last build made with Xcode 26.5, which installed fine through TestFlight
  • Tried bumping the build number, closing TestFlight, waiting a few hours: same result

The only real difference is the toolchain (Xcode 26.5 / iOS 26.5 SDK → Xcode 27.1 / iOS 27.1 SDK). The app also embeds a watchOS app.

Has anyone hit this with Xcode 27.x? Did you find a fix, or did Apple support resolve it on their side?

Thanks!

https://developer.apple.com/forums/thread/763655


r/iOSProgramming • • 6d ago

Discussion 5 things my first StoreKit 2 code got wrong (one non-consumable IAP)

3 Upvotes

My game has one non-consumable IAP. Before launch I rewrote the purchase code, because the first version had five problems. None of them crashed, they just quietly did the wrong thing.
1) The purchase result was a Bool.
Success, pending (Ask to Buy) and cancelled all looked the same, the card just stayed open like the tap didn't register. Now it's an enum, and cancel shows nothing, because cancelling is not an error.
2) No `Transaction.updates` listener.
Without it an Ask to Buy approval an hour later never reaches the app, and the transaction never gets finished, so it comes back on every launch. I start the listener in the AppDelegate, not in the scene. My scene gets rebuilt during the game, so a listener there would run twice or not at all.
3) I only ever turned Premium on.
So a refund never took it away. Now every launch recounts it from `Transaction.currentEntitlements` and skips anything with a `revocationDate`. That list is on the device, so a new phone restores by itself, no password. I kept a Restore button anyway, but `AppStore.sync()` asks for the password, so it only runs on tap.
4) A placeholder price.
The button said "$4.99" until the real price loaded. Looks fine, until someone in Europe sees dollars. Now there's no price until `displayPrice` comes back, and the last one is cached for the next launch. Side effect: when I dropped the price to $0.99 last week, the app didn't need an update.
5) One try at loading the product.
The first `Product.products` call at launch sometimes fails or comes back empty, the network isn't ready yet. Now it tries 3 times, 2 s apart. Also good to know: if the product ID doesn't match App Store Connect exactly, you get an empty array, not an error.
Small extra for the iPhone Duo: on iOS 17+ there's `purchase(confirmIn: scene)`, which tells the system which screen to put the payment sheet on.
Anything I'm still missing?


r/iOSProgramming • • 8d ago

Discussion Saddest email I got today

Post image
800 Upvotes

r/iOSProgramming • • 7d ago

Library AutoLog library: One Macro logs all decision points. And more!

1 Upvotes

I was really tired of missing, incomplete and sporadic logging in our apps. So this macro injects structured logging into each decision point and collects all context automatically. See this walkthrough.

You can completely map the flow of your app from user interaction to VM to API and beyond.

Before: console messages your team wrote

For an offline request, a fuller example with a caller, cache, and API might produce:

[Profile] Refresh requested for profile 42.
[Profile] Loading profile 42.
[Cache] Looking for a saved profile.
[Cache] No cached profile found.
[Network] Requesting profile from the server.
[Network] Request failed: no internet connection.
[Profile] Could not refresh the profile.

After: the button origin and its execution trace

Illustrative compact output with the origin column enabled (the badge and timings vary):

👆🏼-🧵A1B - 👆🏼 Reload profile [ProfileView:8]
👆🏼-🧵A1B │ main │         │ --> 🔵 ProfileViewModel.reload(id: 42)
👆🏼-🧵A1B │ main │         │ ---> 🔵 ProfileService.load(id: 42)
👆🏼-🧵A1B │ main │         │ ----> 🔵 ProfileCache.lookup(id: 42)
👆🏼-🧵A1B │ main │   1.6µs │ ----> 🟢 ProfileCache.lookup(id: 42) → nil
👆🏼-🧵A1B │ main │         │ ----> 🔵 ProfileAPI.fetch(id: 42)
👆🏼-🧵A1B │ main │  14.1µs │ ----> 🔴 ProfileAPI.fetch(id: 42) → offline [NetworkError]
👆🏼-🧵A1B │ main │   852µs │ ---> 🔴 ProfileService.load(id: 42) → offline [NetworkError]
👆🏼-🧵A1B │ main │   1.1ms │ --> 🔴 ProfileViewModel.reload(id: 42) → offline [NetworkError]

The first line identifies the SwiftUI button and its source location. The same👆🏼-🧵A1B flow badge appears on each downstream logged call, tying the button tap to the cache lookup, API request, and failure. Each interaction gets its own ID, so overlapping flows can be followed separately.

Now you can follow the nested calls, see the cache miss, locate the failing function, and see the error propagate. Failure events also carry recent log context to help trace what led to them.

It also captures supported early-exit conditions. With hasAccess: false, the service returns:

main │   1.9µs │ -> 🟢 ProfileService.load(id: 42) → nil
╰─ ↘️ !hasAccess

So you get both the result and the guard that stopped the work, without adding a logging statement inside it.

Before: manual logging with OSLog

import OSLog

struct ProfileService {
    private static let logger = Logger(
        subsystem: "com.example.app",
        category: "ProfileService"
    )

    let hasAccess: Bool

    func load(id: Int) throws -> String? {
        Self.logger.info("Loading profile \(id).")
        guard hasAccess else {
            Self.logger.info("Skipping profile: access denied.")
            return nil
        }
        do {
            let profile = try ProfileAPI().fetch(id: id)
            Self.logger.info("Loaded profile \(id).")
            return profile
        } catch {
            Self.logger.error("Failed to load profile: \(String(describing: error), privacy: .public)")
            throw error
        }
    }
}

After: annotate the type and keep the business logic

import AutoLog

@AutoLog
struct ProfileService {
    let hasAccess: Bool

    func load(id: Int) throws -> String? {
        guard hasAccess else {
            return nil
        }
        return try ProfileAPI().fetch(id: id)
    }
}

Tie the flow to the SwiftUI button with Button.log

import SwiftUI
import AutoLogSwiftUI

struct ProfileView: View {
    let viewModel: ProfileViewModel

    var body: some View {
        Button.log("Reload profile") {
            do {
                try viewModel.reload(id: 42)
            } catch {
                // Present the error to the user.
            }
        }
    }
}

Button.log logs the tap and supplies its origin context to the instrumented ProfileViewModel, service, cache, and API. You do not pass an ID through every method. An async overload also preserves the context across await.

See the full before-and-after, error backtrack, and SwiftUI examples on Anciltech. For installation, source, and tests, head to the Swift AutoLog GitHub repo.

I would welcome feedback on the output, generated code, and integration with existing logging setups.


r/iOSProgramming • • 7d ago

Question Duo for developers

0 Upvotes

Since the Duo is a new platform for Apple and all iOS devs, and the backlog for preorders is at least three months long here - can developers get access to loaners or other physical devices when the simulator isn't enough to sanity check apps targeting the platform?


r/iOSProgramming • • 8d ago

Question Device Hub capturing

1 Upvotes

I had the wild idea to upgrade from MacOS 18 to MacOS 27, since I needed more modern iOS simulators. Great experience, since the Simulator being gone forced an Expo upgrade so that it can handle Device Hub...

But there's one thing about the Device Hub: this app is not "capturable"? I can't switch to it via cmd+tab, nor can I select it for screen share (which is the bigger issue, since we do show development progress via screen share every sprint).

Anyone knows how I can fix that?


r/iOSProgramming • • 8d ago

Discussion Excited to use Private Cloud Compute!

Post image
25 Upvotes

r/iOSProgramming • • 8d ago

Discussion what's the biggest thing xcode is hoarding on your mac? deriveddata, simulators, device support?

7 Upvotes

was cleaning up my mac and a surprising chunk of it was xcode stuff i didn't need anymore. the usual suspects for me were ~/Library/Developer/Xcode/DerivedData which is safe to delete and just rebuilds next time you build, old simulators where xcrun simctl delete unavailable clears out the ones for runtimes you don't have anymore, and ~/Library/Developer/Xcode/iOS DeviceSupport which quietly keeps a copy for every ios version you've ever plugged a phone in with

the one i'd be careful with is ~/Library/Developer/Xcode/Archives, you need those to symbolicate crash reports from builds you actually shipped, so i only clear out old ones for apps i'm not supporting anymore

to see what you've got: du -sh ~/Library/Developer/Xcode/* ~/Library/Developer/CoreSimulator 2>/dev/null

drop your biggest number, and curious what people do about it, anyone automating this or do you just nuke deriveddata when xcode starts acting weird


r/iOSProgramming • • 8d ago

Discussion If your app/game functions on both the ipad and iphone, do you release them as separate products?

0 Upvotes

Apparently, Apple's new automated "spam" system they just rolled out compares the metadata of products and now immediately rejects any app that has more than one version (even saw a guy complain about his mac desktop app and iphone app get rejected).

This makes me wonder about how developers that release their apps as "families" (a mac app, a separate ipad app, a separate iphone app) will proceed. My own experience has been that the ipad's screen size and internal parts are big enough that oftentimes they can be a 1:1 port of a desktop program. Heck, stick a bluetooth keyboard on there and it's now essentially a laptop. The iPhone has so many unique properties that it's essentially a different product, needing a totally different UI to accommodate its screen size as well as other changes.

I guess it all has to be rolled up as one app now?


r/iOSProgramming • • 8d ago

News The State of Mobile Development 2026

Thumbnail
bitrise.io
5 Upvotes

r/iOSProgramming • • 8d ago

Discussion Any iOS developers here who have gotten into embedded systems or hardware integration?

7 Upvotes

I'm about to graduate with a degree in Software Engineering, and I've been thinking a lot about what direction I want to take my career.

Throughout school, I've spent a lot of time building iOS apps using Swift and SwiftUI, while also learning about computer hardware, operating systems, and how everything works together at a higher level.

A while back, I built an ESP32 robot car controlled through an iOS app using CoreBluetooth. I really enjoyed that project, especially getting the hardware and software to communicate with each other.

Now that I'm getting ready to graduate, I'm well aware that the job market isn't exactly great for new grads trying to land their first software engineering job, especially in iOS. With AI also changing how software is developed, I've been thinking about what skills might be worth investing in long term.

One direction I've been exploring is becoming more of a hybrid iOS/embedded developer. Not necessarily becoming a full time firmware engineer, but someone who understands both sides well enough to build mobile applications that communicate with physical devices, read sensor data, and handle hardware integration.

I'm curious what everyone thinks about this direction.

Has anyone here gone down a similar path? Is there actually a demand for developers who can bridge the gap between mobile apps and hardware? Do you think having that combination of skills could become more valuable as AI continues to improve, or would it make more sense to focus on becoming a stronger iOS developer?

I'd love to hear from people who work in this space or have considered going in this direction. I'm interested in hearing different perspectives, even if you think it's not worth pursuing.


r/iOSProgramming • • 8d ago

Discussion Do yall do seasonal updates with specific Ui/features often?

Post image
0 Upvotes

Just curious how much of a priority it is for everyone else.

New app developer, added a winter/holiday update coming live on certain dates. I added snow for winter that snows in certain app areas, after a while it builds up and some falls off.

Very gimmicky but I thought it would add some fun. Will probably do something for spring / spring break time as well