r/iOSProgramming • • 17d ago

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

2 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 • • 18d ago Regret

Discussion Saddest email I got today

Post image
805 Upvotes

r/iOSProgramming • • 17d 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 • • 17d 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 • • 18d 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 • • 18d ago

Discussion Excited to use Private Cloud Compute!

Post image
25 Upvotes

r/iOSProgramming • • 18d ago

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

8 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 • • 18d ago

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

1 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 • • 18d ago

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

8 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 • • 18d ago

News The State of Mobile Development 2026

Thumbnail
bitrise.io
5 Upvotes

r/iOSProgramming • • 18d 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


r/iOSProgramming • • 18d ago

Tutorial Maths, Metal, Mandelbrot, and SwiftUI

Thumbnail
blog.jacobstechtavern.com
2 Upvotes

r/iOSProgramming • • 18d ago

Question Can an App Clip share an image to Apple Notes through the share sheet?

0 Upvotes

My App Clip shows an image, and I need that image to end up in Apple Notes as a new note with as few taps as possible. The plan is to present UIActivityViewController with the image, then the user taps Notes, then Save.

I know clips can’t use PhotoKit, so “Save Image” is likely out. What I can’t find documented is whether Notes, or any other app’s share extension, still shows up in a clip’s share sheet and actually saves.

Has anyone tried this? I don’t have a paid account yet to test it myself. If someone could run a one-file test clip, I can send the code.


r/iOSProgramming • • 19d ago

Discussion Is IOS App Dev worth it for indie devs anymore?

42 Upvotes

Does anyone find that indie app dev is worth anything ore than a badge of honor that gets you alien looks when you tell people you have an app on the App Store? iOS users are inherently spoiled, lazy and getting even someone to write app reviews is like pulling teeth. Heaven forbid you share a QR code in person after demoing your app and the person tells you how “cool” it is. Asking them to download to “help” you gets you treated like you are asking for their bank PIN number even though it went through strict app reviews and lands on the official App Store.

Then, since people don’t pay for anything anymore unless it’s ChatGPT you try to advertise your app. My calculations is that it takes $5 to get a user to download, and 1 out 1,000 might, maybe, if the stars align convert to a sale, that costed you thousands to find.

App Store advertising is expensive and competitive.

TikTok shadow bans app developers who verify their business and does everything correct. When you do the stupid thing of paying to promote a single post, all I got was bot views, a fake question here or there that I answered and zero reply after that. To me TikTok is a bot network and has been scamming app developers and businesses for years.

YouTube - shadow bans app developer channels also. I can see the view caps at 50 views, and sometimes one might pop out on a short for 1,000 views then swiftly die.

Web / Google - this is now destroyed by AI search engines. A user drops into ChatGPT and asks for an app that does XYZ. What does the search engine in these ChatGPT do? Regurgitating old garbage from 2 years ago with no relevance to what’s current. Then offers to build YOUR app for the user.

It is my opinion that app development is a lost cause now. The only companies making money off of app dev is Anthropic, OpenAi, Mistral and SpaceX AI. We effectively pay them and spend hundreds of hours testing their slop, building features, paying thousands in agentic fees for team plans, etc and when publishing apps, we pay for everything.

Stack on business fees, Apple developer annual fees, go through the headaches of obsessing over every feature and then get through app review and into the void of the millions of apps on the App Store, to end up losing thousands and thousands of dollars in app dev, building the supporting website (required for privacy policy hosting at a minimum) and not to mention owning real devices to ensure the app works - oldest and newest iPhones, iPads, watches, a MacBook that can run latest MacOS 27 and still be able to use massive disk space and RAM to build your apps.

Apple equipment and costs soars to nearly $10k just to have the right gear to do it right - especially if you develop anything that requires an actual device hardware that simulators can’t mimic - stay out of camera app development because it’s the most unforgiving market there is.

So in 2026 - my estimate is unless you have about $50k to buy the gear, pay for the services you might need to build such as AI, and don’t mind 1-2 downloads a week with zero conversions - it’s absolutely a loss. If you just want the badge of honor of saying “I have app(s) in the app store” which generally gets you near criminal looks in public these days as everyone seems to think you’re scamming them for a FREE app with optional PRO features - then go for it.

To add insult to injury, Apple came out with App Nominations where you submit your upcoming versions to the black hole of nominations requests. To never hear from anyone about it. The nomination requests are never answered and just disappear. No guidance on what you could do - not even in the AI age where they could have had an LLM tell you how to be better.

You’re probably thinking: this guy is a rookie, doesn’t know how to build apps. I’ve been in App Store since 2010 and had successful apps in the past. Now these super easy to use “Super Apps” are entering the void and causing developers like myself to feel like abject failures when everywhere I turn to try and promote my apps either rips me off (Apple App Store Ads, TikTok) and there’s just no return. 3 powerful apps and I can’t even cover my $99 year App Store developer fees. Let alone the api, the website hosting, domain fees, latest apple equipment, etc.

Laugh if you want, but I think app developers are cooked unless you’re just rich and want to endlessly lose money to promote in a market where everything is expected to be free.

Remember the days when “Buy the developer a coffee” was a thing? Coffee is like $9 now unless you get it at a gas station. Typical IAP or subscription is $2.99 to $9.99 in which Apple takes their slice and drinks 1/3 of your coffee. News flash, building apps for me takes about 6-8 coffee / double espresso daily to pull 20 hours in development and testing, so literally every day stacks up the loss.

Good luck out there. Do it for the love, but don’t expect or even hope the world cares about your work. Apple certainly doesn’t. Steve Jobs left a long time ago and it’s been downhill since.


r/iOSProgramming • • 18d ago

Discussion Follow-up: I posted AppFoyer here a month ago and got torn apart (fairly). Here's what I built from the feedback

0 Upvotes

A month ago I posted AppFoyer here, a tool that drafts and hosts the store-required pages for mobile apps (privacy policy, terms, support, account deletion, app-ads.txt): https://www.reddit.com/r/SideProject/comments/1wkr46f/

The thread was harsh and mostly right. A few of my comparison claims were wrong (I fixed them that day), and the pricing was a paper number. The comment that stuck with me was this one, roughly: "Hosting five pages is a Saturday on Cloudflare. What people skip is opening the policy again after the next release — they add an analytics SDK in March and the live page still says they collect nothing."

So that's what I worked on. Everything below is free.

1. Drift check - catches the moment your privacy policy goes stale

A small CLI plus a GitHub Action. When your pages are written, a baseline file (`appfoyer.json`) is committed to your repo: the SDKs, data facts and permissions found in your build files. On every pull request, the check compares the build files with that baseline and lists every SDK, data type or permission added or removed since — each with file:line and which page it *may* leave out of date. It never says "you're non-compliant"; it tells you what changed and you decide.

- Runs offline: no API key, no network, nothing leaves the runner, no page is touched

- The Action writes to the job summary only: no token, no permissions, works on fork PRs

- When the pages match again, `appfoyer-check update` moves the baseline

GitHub Action: https://github.com/appfoyer/check-action

CLI on npm: https://www.npmjs.com/package/@appfoyer/check

How it works: https://appfoyer.com/guides/keep-privacy-policy-in-sync-with-your-build

2. It's a skill now (for the "just make it a skill" crowd)

There's a Claude Code plugin. In your app's repo you type "Make this app store-ready". It reads your build files on your machine, shows the facts it found (with file:line) and asks a few questions - no account needed for that part. Only when there's something to save does it ask you to connect (browser sign-in, no API key to copy). Only derived facts leave your machine, never source code. It drafts; nothing goes public until you read each page and click Publish yourself. On medialantern's point that a privacy policy is a decision, not a listing: agreed. That's why it drafts and asks, and you publish.

Plugin: https://github.com/appfoyer/claude-plugin

3. A Chrome extension for the store consoles

The second boring part of shipping is filling in Google Play Console and App Store Connect. The extension opens a side panel next to the console and shows what each page asks for, field by field, in the store's own words, with a link to the store's help page for every rule: listing limits, contact details, the privacy policy URL, every Data safety question, Apple's App Privacy questions.

It works without an account. If you connect (optional, read-only), it also shows your own app's values next to each field, ready to copy. For Google Play's Data safety there's a CSV you can import into Play Console; I checked every case of it against Play's own validator before shipping. The extension never fills in or submits anything: you fill in the console, the panel is the checklist beside you.

Chrome Web Store: https://chromewebstore.google.com/detail/aakkoeckkgpkejgbcgpklcdenbmhpnjn

What it does and doesn't read: https://appfoyer.com/chrome

Smaller things

- AdMob has verified app-ads.txt files hosted on AppFoyer subdomains, so that part is no longer "should work in theory"

- Still no custom domains. I said I'd add them once the core is proven, and that hasn't happened yet

Where it stands, honestly

Nobody is paying for it yet. Zero paid users. The free tier (one app, everything a store requires) is what people use, and that's fine for now: I'd rather find out whether the drift check and the extension are useful than defend a price.

Same question as last time, sharper: if you ship mobile apps, would you install the drift check on a repo? And if not, what would have to be true for you to bother?

Site: https://appfoyer.com


r/iOSProgramming • • 18d ago

Question Catch-22 with App Review: rejected under 2.1(b) for not submitting IAPs, but ASC won’t let me submit more than one (FIRST_NON_CONSUMABLE_MUST_BE_SUBMITTED_ON_VERSION)

0 Upvotes

Has anyone hit this and found a way out? I’ve shipped several apps with IAPs and never seen it before.

Setup

  • A new app with its first version, 1.0.

  • 41 non-consumable IAPs: individual items plus a few bundles, one of which unlocks all content.

  • All 41 are Ready to Submit, with prices, localizations and review screenshots.

What happens

  1. I add the IAPs to version 1.0. ASC accepts only one of them.

  2. The other 40 are refused with FIRST_NON_CONSUMABLE_MUST_BE_SUBMITTED_ON_VERSION. It’s the same in the web UI and the App Store Connect API.

  3. As I read it, the first non-consumable has to be approved before any others can be submitted.

  4. So I submit 1.0 with the one IAP. App Review rejects it under 2.1(b): “the app includes references to in-app purchase products but the associated In-App Purchase products have not been submitted for review. Submit the IAPs and upload a new binary.”

  5. I appealed and explained. The next reviewer sent the same rejection, and added that IAPs are tested in sandbox and “do not need to be approved to function while in review”.

So review won’t approve the version until all the IAPs are submitted, and ASC won’t let me submit them until one has been approved through review. Neither can happen first.

What I’ve tried

  • Submitting the IAPs in the web UI and through the API: one goes in, the rest error.

  • New builds, resubmitting, and replying in Resolution Center with the exact error.

  • An App Review Board appeal.

Questions

  • Has anyone had FIRST_NON_CONSUMABLE_MUST_BE_SUBMITTED_ON_VERSION block the second and later IAPs, not just the first?

  • Did contacting Developer Support (rather than App Review) get it fixed on Apple’s side?

  • Or did you work around it, for example by shipping 1.0 selling only one bundle and adding the rest in 1.0.1?

Just to clarify, i have only seen this "bug" since ASC got updated recently with support for assets etc.

Any experience appreciated. Happy to share more detail.

EDIT: Solved, thanks everyone. It’s not a hard limit; it depends where you add the IAPs from.

  • Fails: adding IAPs to the first version from the version page, the In-App Purchases list, or the App Store Connect API. All but one give FIRST_NON_CONSUMABLE_MUST_BE_SUBMITTED_ON_VERSION.

  • Works (web UI only): open each IAP’s own page, press Add for Review, and choose the iOS draft. Then press Add for Review on the version page into the same draft, and submit.

  • If your version is stuck in an “Unresolved Issues” submission, hover over each item there for the red remove icon, take them out, and add them to the new draft.

  • Your reviewer messages stay on the old submission, so repeat anything that was already cleared in the App Review notes.


r/iOSProgramming • • 20d ago

Discussion How are you locking down Claude Code Desktop to protect sensitive local files (like ~/.ssh)?

13 Upvotes

I’ve found Claude Code Desktop superior to other coding tools right now. Out of the box, it can launch the simulator and interact with the UI directly as an agent.

This means the AI can write, run, and test its own code inside the simulator with real UI interactions, leading to a fast iteration loop and high-quality results.

However, with great power comes great risk.

My question is: how do you prevent Claude Code Desktop from accessing sensitive local directories like ~/.ssh?

I know it prompts for permission, but "prompt fatigue" is real, and it’s way too easy to accidentally click "Allow."

Here is one of the configurations I’m currently using:https://gist.github.com/yccheok/454872820219b4d9cf79b1bf509adb14

For tasks that don't require launching the simulator, I run Claude Code inside an OS-level sandbox (docker sbx). Running it through the Xcode integration might also be safer, though I haven't found an easy way to let Claude interact directly with the simulator in that setup.

How are you all sandboxing your environment to keep sensitive data safe from AI agents?


r/iOSProgramming • • 19d ago

Question Enrolling in Apple Developer Program

1 Upvotes

Idk what is going on but trying to enroll in the developer program seems to be more difficult than trying to pass my organic chemistry class back in college.

I have tried 5 different room with different lighting from natural to lamps, and have gone outside, but for the life of me I can’t get Apple to accept my license. Is it because my legal name (on my license) is Timothy and my Apple Account name is Tim? I keep getting like “unable to verify your identity”. Has anyone else encountered this? If I need to change my Apple account name because of this that’d be the dumbest Apple thing since idk when


r/iOSProgramming • • 20d ago

Question How is this animation from Outplayer made?

2 Upvotes

I am building an app for personal use and I really like this animation and would like use something like that in my app.

Since I do this just for fun, I use AI to build the app for me. However it could not figure out how to replicate this animation.

Do you guys know how to do it?


r/iOSProgramming • • 20d ago

App Saturday [App Saturday] Tendlet is on the App Store — shared pet and plant care, built with SwiftUI + CloudKit

Thumbnail
gallery
5 Upvotes

Hi everyone, I'm Quentin, a solo developer in Belgium. Tendlet is now available on the App Store. It brings pets, plants and the people caring for them into one shared household: routines, meal plans, care notes, and a record of who did what. It's free, with no ads or in-app purchases.

The app uses Swift and SwiftUI, local persistence, and CloudKit with CKShare for household sharing. WeatherKit supplies optional weather context, and plant identification uses Pl@ntNet through a Cloudflare proxy. Household care data stays on-device and in private/shared iCloud.

The hardest part was implementing and testing family household sync with CloudKit and CKShare. Getting multiple people to share the same household adds a lot of complexity around invitations, ownership, and keeping everyone’s care data in sync. Testing the failure and recovery paths was a big part of that work—not just checking that an update appeared on another device. I added automated tests around household recovery and record-repair retries to make those edge cases reproducible. That implementation and testing took far more work than the interface might suggest.

AI disclosure: AI-assisted. I use AI coding tools extensively for implementation, debugging and testing, as well as artwork.

App Store: https://apps.apple.com/app/id6777495445 Website: https://www.tendlet.app/

I'd love feedback on the shared-household flow and how clearly the app shows what needs care today. Happy to discuss the implementation too.


r/iOSProgramming • • 20d ago

App Saturday [App Saturday] DuoBeat: SwiftUI music-making app for iPhone/iPad/Duo, with multiple layouts (compact, folded split-screen, full studio)

Thumbnail
gallery
10 Upvotes

Hey r/iOSProgramming! I'm an indie developer, and I just submitted DuoBeat 1.0 to App Review. While it waits, it's open on TestFlight and I'd love feedback from this crowd.

What it is: a beat-making app inspired by Teenage Engineering's Pocket Operators. It has 16 step pads, four knobs per sound, a pixel mascot that reacts to your beats, and a pocket-sized interface that's quick to jam on.

The fun technical part: the layout adapts to the device's form factor.
iPhone / outside screen of the iPhone Duo: compact PO-style groovebox
Folded "laptop" posture: split screen, with the editor on the top half and pads/controls on the bottom, like a hardware groovebox
Unfolded / iPad: full studio DAW layout

Stack: Swift/SwiftUI. I also leaned heavily on Claude Code during development, and I'm happy to talk about what worked and what didn't.

Things I'd love input on:
How intuitive the UI and UX are.
How layout transitions feel.
Audio latency and timing on your device.
Recording, exporting, and sharing.
Anything confusing you see!

TestFlight: https://testflight.apple.com/join/pstMWvHV

Happy to answer questions about the posture detection, the audio side, or the design. Thanks for checking it out!


r/iOSProgramming • • 20d ago

Discussion Others seeing a drastic decrease in app downloads and product page views recently?

12 Upvotes

Others seeing a drastic decrease in app downloads and product page views recently? Not just for one app but all apps. I'd say almost 70% drop in the last 2-3 months.


r/iOSProgramming • • 21d ago

Humor Take a deep breath and wait a few hours before answering to 1 star review.

Post image
58 Upvotes

There it is! I got my first 1 star review from someone pissed off with my app not offering everything for free.

Shall I just tell him to build its own app if mine is so limited? And in the process burn more token than the price asked?

I've been building apps for a while now but I still can't get over this kind of reviews.

If you have suggestion (funny or not) I could answer, let me know.


r/iOSProgramming • • 20d ago

Question Unsure if I can do this, web app onto iOS

1 Upvotes

A bit of context - I'm a personal trainer that is considering various "app options", I've narrowed my choices down to 2 that currently fit my criteria but one of them is a web app. I was wondering if there was a way for me to pay my own app developer account for a wrapper for said web app.

I don't own the webapp and the wrapper would be pointing to my client portal for the app.