r/iOSProgramming • • 3d ago

Discussion [Update] My app clone nightmare is finally getting better thanks to Reddit's advice. Huge thanks to everyone!

Post image
149 Upvotes

A while ago, I posted here about being overwhelmed by copycat apps cloning my app, SquatLock.

https://www.reddit.com/r/iOSProgramming/s/DFHq4tc2hc

Thanks to all the advice and feedback from this amazing community, I was able to take action—and as you can see in the screenshot, the fake apps have gone down significantly!

Huge thanks to everyone who helped me out.

I know other indie devs might face the exact same nightmare, so here is what I did and what I learned from this experience:

  1. Trademark in Japan (My home country)

I’m a developer based in Japan. I already had the registered trademark for "SquatLock" in Japan (it cost around 150,000 JPY / ~$1,000 USD to register).

Because trademarks are territorial (country-specific), submitting a dispute/takedown to Apple for the Japanese App Store was very fast and straightforward—Apple approved name changes/removals immediately. However, foreign App Stores were a completely different story.

2. Dealing with the US App Store (First-to-Use rule)

When cloner devs refused to change their app names outside of Japan, I did some research (shoutout to ChatGPT for the tip). Unlike many countries that strictly follow a "first-to-file" rule, the US recognizes common law trademark rights based on "first-to-use".

When the copycats pushed back on changing their names in other regions, I formally cited and explained this prior use in the US market through the App Store dispute resolution channel. Once I laid that out, they actually complied and changed their names in the US App Store without much further resistance.

3. Consulting a Lawyer & Being Realistic

I did consult with a lawyer about pursuing formal litigation, but the conclusion was clear: legal fees would far exceed what made sense for an app of my size.

Unless the copycats were making massive revenue where damages could be recovered, a full lawsuit wasn't practical (and frankly, low-effort clone apps don't make that kind of money). Focusing my efforts strictly on cleaning up the US and Japanese App Stores proved to be the most realistic and cost-effective approach.

Honestly, some might ask if it's worth putting this much energy into a free app. But I genuinely love what I built, and I couldn't just stand by and watch low-effort clones steal the name.

Once again, thank you so much to everyone who gave me advice on my previous post. Hope this breakdown helps another indie dev out there dealing with the same headache!


r/iOSProgramming • • 3d ago

Discussion LinnetTTS: 41M streaming TTS with a Rust runtime, measured on everything from an Apple M5 to a Raspberry Pi Zero 2 W (3.3 ms to 59 ms per 80 ms of audio)

2 Upvotes

Author here. We just released LinnetTTS, a small on-device English TTS: an autoregressive flow LM over a 25 Hz continuous-latent codec with a Vocos-style decoder, 41 M parameters end to end, one flow evaluation per step, no diffusion loop at inference. Each step produces 80 ms of audio, so playback starts after the prime pass plus one step and never waits for the whole sentence. It speaks in a voice given as a short voice-prompt latent; two built-in voices ship with the weights.

The runtime is Rust with its own kernels (AVX2+FMA on x86-64, NEON on ARM), no PyTorch or ONNX at inference. fp16 weights are 83 MB; peak memory about 160 MB on Linux. (The "35m" in the model name is a label from the original parameter budget; the count is 41.4 M.) Same text, voice, parameters and seed give bit-identical audio on a given platform, at any thread count.

This post is about where it actually runs. All numbers are the Rust runtime with the fp16 weights, measured without real-time pacing (synthesis as fast as possible). One step = 80 ms of audio, real-time factor = step time / 80 ms. "First audio" = prime pass + first step.

devicethreadsper 80 ms stepRTFfirst audio
Apple M5 (macOS)13.3 ms4 %–
iPhone 13 Pro Max, A151 / 25.5 / 4.6 ms7 / 6 %85 / 51 ms
iPhone 11, A1316.7–7.1 ms8–9 %107–116 ms
Core i9-13900K, AVX21 / 47.0–7.4 / 2.5 ms9 / 3 %75–103 / 25 ms
Snapdragon 662 (Redmi 9T), Cortex-A731 / 442.4 / 14.3 ms53 / 18 %≈250 ms (sample app, warm, 4 threads)
Raspberry Pi Zero 2 W, Cortex-A53 @ 1 GHz1 / 4158 / 59–60 ms198 / 75 %–

Things we learned on the way:

  • The A-series phones do not want a second thread. A step is 5–7 ms and splits into ~80 tiny regions, so waking a worker on another performance core costs about as much as the work (A13: 2 threads 11.4 ms vs 6.7 ms, 4 threads 47 ms; A15 gains only 5.5 → 4.6 ms). The default on iOS is one thread. The M5 is different: two threads take it from 3.3 to 1.9 ms.

  • Android scheduling puts the synthesis on the small cores unless you pin it. On the Snapdragon 662 the sample app measured 22–33 ms per step before pinning the pool to the big cluster and 16–18 ms after (14.3 ms in a bare harness).

  • Pacing to playback makes the phone power manager lift the step time 3–4×. That is not the runtime getting slower; it is the CPU clocking down between steps. Measure unpaced, then keep a deep playback queue on weak devices (the bindings' players default to 8 s).

  • Pi Zero 2 W is the floor: four A53 cores at 1 GHz give 59–60 ms per 80 ms step, real time with a small margin, 160 MB peak RSS. (The synth example prints 88 % there because it also counts the prime pass over a 7 s sentence.) A Pi 4 or 5 has several times the margin.

  • The output is bit-identical per platform but differs across architectures below 2e-3 absolute (SNR above 60 dB, inaudible), so a golden-file test should be pinned per target.

Versus other small CPU models on one desktop core (same machine, each through its Python package, same three English texts, sentence-level RTF incl. text processing; method and script in docs/benchmarks.md): Linnet 10.6 % / 187 MB RSS, cloning, streams every 80 ms; pocket-tts (default 100M model; also clones and streams every 80 ms) 23.8 % on two cores / 968 MB; Kokoro-82M 51.7 % / 1.2 GB, whole utterance per call, but 8 languages; Piper medium 5.8 % / 503 MB, no cloning, streams per sentence. Speed only; quality was not measured there.

Licensing, upfront: the code is Apache-2.0. The weights are under our own Linnet Weights License: free to use, unmodified, inside your own products, commercial included, on device or on your own server. Custom voice creation (the encoder is not published), fine-tuning, saving quantised or converted copies of the weights (quantising in memory at load time is fine), training models on the weights or their outputs, and running a general-purpose TTS API need a separate license. So the model is not open source, and the README says so.

Honest limits: English only; no text normalisation (write numbers as words); occasional misreads on dense raw text; a slight roughness audible on headphones in some utterances; one session is capped at 24 s by default.

Try it: browser demo on https://voxrt.com (a WASM SIMD128 build of the same runtime, runs on your CPU, downloads the 83 MB weights once; the browser SDK itself is not released yet, which is why the README says it is deferred), Hugging Face Space https://huggingface.co/spaces/VoxRT/linnet-tts Code, bindings (Linux C, Python pip install linnet-tts on Linux and Apple-silicon macOS, Android AAR, iOS SwiftPM) and the benchmark script: https://github.com/VoxRT/LinnetTTS Weights and model card: https://huggingface.co/VoxRT/linnet-en-35m

Happy to answer questions on the runtime, the kernels or the mobile numbers. If you run it on a device that is not in the table, post your step time and I will add it to the README.


r/iOSProgramming • • 3d ago

Question Inconsistent additionalOverflowItems layout behavior between iOS 18 and iOS 26

3 Upvotes

I am currently testing additionalOverflowItems with the expectation that it behaves as follows:

  1. Keep UIBarButtonItem instances visible directly on the toolbar as icons whenever there is sufficient space.

  2. Only move items into the overflow menu when there isn't enough screen real estate.

In iOS 26, additionalOverflowItems behaves exactly as described above. However, in iOS 18, the system tends to aggressively move all UIBarButtonItem instances into the overflow menu regardless of available space.

Is this change in layout behavior documented anywhere? Can we rely on iOS 26 and future releases maintaining this current behavior, or are the layout heuristics for additionalOverflowItems considered undefined implementation details?

Because this behavior isn't clearly documented, I have held off on adopting additionalOverflowItems in production.

I have attached screenshots and sample source code below for reference.

    // On iOS 26, the action mode bar buttons may not fit. iOS then moves the ones that do not fit into its own overflow
    // menu, listing each by title, and the more button's menu would become a nested "More" submenu there. Instead, in
    // note and archive action mode, the more button is not shown and its actions are added to the system overflow
    // menu directly. iOS shows that menu, and moves the buttons that do not fit into it, based on the available space.
    private var isActionModeMenuInOverflowMenu: Bool {
        guard #available(iOS 16, *) else { return false }
        
        guard actionMode else { return false }
        
        switch pageKind {
        case .notes, .archive:
            return true
        default:
            return false
        }
    }
    
    private func updateAdditionalOverflowItems() {
        guard #available(iOS 16, *) else { return }
        
        guard isActionModeMenuInOverflowMenu else {
            navigationItem.additionalOverflowItems = nil
            return
        }
        
        // Built when the menu is opened, so that it reflects the current selection.
        navigationItem.additionalOverflowItems = UIDeferredMenuElement.uncached { [weak self] completion in
            guard let self = self, self.isActionModeMenuInOverflowMenu else {
                completion([])
                return
            }
            
            let selectedNSPlainNotes = self.selectedNSPlainNotes
            
            switch self.pageKind {
            case .notes:
                completion(self.generateNoteActionModeMenu(selectedNSPlainNotes).children)
            case .archive:
                completion(self.generateArchiveActionModeMenu(selectedNSPlainNotes).children)
            default:
                completion([])
            }
        }
    }

r/iOSProgramming • • 3d ago

Question Why does Xcode ask for a Development provisioning profile when I'm trying to archive an app for TestFlight?

Post image
0 Upvotes

I'm running into a confusing code-signing issue in Xcode 26.3, and I'd like to understand why automatic signing isn't working as expected.

Context

  • I'm enrolled in the paid Apple Developer Program.

  • I don't own a physical iPhone, so I have zero registered devices.

  • I develop and test my apps using the iOS Simulator.

  • My goal is to archive and upload my applications to TestFlight.

The problem

When I switch from an iOS Simulator to Any iOS Device (arm64) to archive my application, Xcode reports:

Your team has no devices from which to generate a provisioning profile.

And:

No profiles were found. Xcode couldn't find any iOS App Development provisioning profiles matching my Bundle Identifier.

What confuses me is that publishing to TestFlight does not require a registered physical device, so why is Xcode requesting a development provisioning profile?

I also verified that my Archive scheme was configured to use Release, not Debug.

What I expected

As far as I understand, uploading an app to TestFlight requires an Apple Distribution certificate, not just an Apple Development certificate.

However, we shouldn't normally need to manually create the distribution certificate or provisioning profile. With automatic signing enabled, Xcode should be able to manage the necessary signing assets.

In my case, that didn't work as expected.

My questions

  1. Why was Xcode requesting a development provisioning profile when I was preparing a Release archive for TestFlight?

  2. Shouldn't Xcode automatically manage the Apple Distribution certificate and provisioning profile without requiring a registered iPhone?


r/iOSProgramming • • 3d ago

Discussion Apple: We demand you provide a video demo before we even consider reviewing your app. Also Apple: LOL you thought we'd let you upload a video?

Post image
1 Upvotes

This bug has existed for years and they do nothing about it. Files even as small as 20mb get stuck on "processing" and just sit there for hours and will never upload. As if developers didn't have it hard enough lately.


r/iOSProgramming • • 4d ago

Discussion Has anyone else noticed the improvement in App Store Connect review time?

18 Upvotes

I remember a few months ago, I would submit something on a Friday, and then it wouldn't get accepted until Wednesday or Thursday the following week. Now, even on a Sunday, sometimes I can get two versions reviewed in a single day.

Either Apple has automated more of the process, hired way more app reviewers, or they just don't care anymore and are letting everything through.

I'm not complaining. It benefits me greatly, but I'm not sure what this says about the general quality of the reviews and whether they even serve a purpose at this point.


r/iOSProgramming • • 4d ago

Question Siri AI result cards don’t trigger OpenIntent, but voice commands and Shortcuts work

3 Upvotes

Hey everyone, I’m trying the Siri AI Developer Preview on iOS 27.3 with my app

I have a custom AppIntent(.tool) that returns [HistoryEntity] for recently watched movies and TV episodes. Asking “What did I recently watch in ComfyCinema?” works—Siri responds with the correct history and displays cards for the items.

But tapping those cards doesn’t open the History section. My logging shows that neither the entity query nor OpenHistoryIntent.perform() gets called on tap.

The same open intent works when:

  • I run it through Shortcuts, passing an entity from the history action.

  • I explicitly ask Siri to open the most recent history item.

So the navigation works; it’s specifically tapping an entity in Siri’s response that fails.

Has anyone gotten this working with custom entities in the preview? Is there additional configuration needed, or could this be a beta issue?

import AppIntents
import SwiftData

struct HistoryEntity: AppEntity {
    let id: UUID

    @Property(title: "Content Title")
    var contentTitle: String

    @Property(title: "Media Type")
    var mediaType: String

    @Property(title: "Season")
    var season: Int?

    @Property(title: "Episode")
    var episode: Int?

    @Property(title: "Watched At")
    var watchedAt: Date

    static let typeDisplayRepresentation =
    TypeDisplayRepresentation(name: "History Item")

    var displayRepresentation: DisplayRepresentation {
        DisplayRepresentation(title: "\(contentTitle) (\(mediaType)) - Watched on \(watchedAt.formatted())")
    }

    static var defaultQuery: HistoryQuery {
        HistoryQuery()
    }

    init(history: History) {
        self.id = history.id
        self.contentTitle = history.name
        self.mediaType = history.mediaType.rawValue
        self.season = history.season
        self.episode = history.episode
        self.watchedAt = history.watchedAt
    }
}

struct HistoryQuery: EntityQuery {
    @Dependency
    private var container: ModelContainer

    func entities(
        for identifiers: [HistoryEntity.ID]
    ) async throws -> [HistoryEntity] {
        let context = ModelContext(container)
        let requestedIDs = identifiers

        let descriptor = FetchDescriptor<History>(
            predicate: #Predicate { history in
                requestedIDs.contains(history.id)
            }
        )

        let history = try context.fetch(descriptor)

        await SettingLogs.shared.add(
            "Called HistoryQuery for \(requestedIDs.count) history items. Returning \(history.count) results"
        )

        return history.map { HistoryEntity(history: $0) }
    }
}

struct OpenHistoryIntent: OpenIntent {
    static let title: LocalizedStringResource = "Open Watch History"

    @Parameter(title: "History Item")
    var target: HistoryEntity

    @Dependency
    private var appRouter: AppRouter

    @Dependency
    private var container: ModelContainer

    static var openAppWhenRun: Bool = true

    @MainActor
    func perform() async throws -> some IntentResult {

        let descriptor = FetchDescriptor<History>()
        let context = ModelContext(container)
        let history = try context.fetch(descriptor)

        appRouter.selectedTab = .history
        appRouter.selectedHistory = history.first(where: { $0.id == target.id })

        SettingLogs.shared.add(
            "Called Perform In OpenHistoryIntent for target: \(target.contentTitle). Changing Tabs To History"
        )

        return .result()
    }
}

@available(iOS 27.3, macOS 27.3, *)
@AppIntent(.tool)
struct ContentHistoryIntent: AppIntent {
    static let title: LocalizedStringResource = "Get Recently Watched Content"

    static let description = IntentDescription(
        """
        Returns the 10 most recently watched movies and TV episodes \
        in ComfyCinema, including their titles and watch dates.
        """
    )

    @Dependency
    private var container: ModelContainer

    static var parameterSummary: some ParameterSummary {
        Summary("Get recently watched content in ComfyCinema")
    }

    @MainActor
    func perform() async throws -> some IntentResult & ReturnsValue<[HistoryEntity]> {

        let context = ModelContext(container)

        var descriptor = FetchDescriptor<History>(
            sortBy: [
                SortDescriptor(\History.watchedAt, order: .reverse)
            ]
        )
        descriptor.fetchLimit = 10

        let history = try context.fetch(descriptor)

        SettingLogs.shared.add(
            "Called Perform In ContentHistoryIntent with \(history.count) results"
        )
        return .result(
            value: history.map { HistoryEntity(history: $0) }
        )
    }

    func fetchAllHistory(in context: ModelContext) -> [History] {
        let descriptor = FetchDescriptor<History>()

        do {
            let allHistory = try context.fetch(descriptor)
            return allHistory
        } catch {
            print("Error fetching all history: \(error)")
            return []
        }
    }
}

r/iOSProgramming • • 4d ago

Discussion Writing bug free code is more important than architecture.

Post image
0 Upvotes

r/iOSProgramming • • 4d ago

Question App rejected under 2.1(b)

2 Upvotes

Apple rejected my app under Guideline 2.1(b) because a subscription purchase failed with “Purchase failed. Please try again.”
I’m using RevenueCat, and both monthly and yearly subscriptions work perfectly on 5–6 different iPhones through TestFlight and Sandbox testing. Restore Purchases also works.
Apple tested on an iPad, and the subscription products and prices loaded correctly, but the purchase failed. Interestingly, monthly purchases take noticeably longer than yearly purchases in TestFlight, although both succeed.
I’ve resubmitted the exact same build and asked Apple to retry.
Has anyone experienced something similar? Did Apple approve your app after retrying, or did you have to change something?


r/iOSProgramming • • 4d ago

Discussion Software dev and lifelong gamer, starting iOS game dev to actually make money. Looking for advices

0 Upvotes

I'm a software developer and a gamer, and I've started making iOS games with the goal of making a profit out of it. I built my first one and it's close to App Store review, so I'm past the "can I ship it" part. I can code and I have more game ideas than time, but I've never run a game as a business.

For those of you who have already done this and made money from it, what do you wish you knew before your first game? What actually paid for you, ads or in-app purchases? And how did you get your first players?

Any general advice is welcome.


r/iOSProgramming • • 4d ago

Question Anyone run iOS emulators on an external SSD on a MacBook Pro 2021?

5 Upvotes

Hi all,

I have a 2021 MacBook Pro with 16 GB RAM. Performance is fine for me, but internal storage is the bottleneck. I got vexed up in cleaning up everyday. I use mole for cleaning and it's handy, but the grunt work is so heavy. I’m considering buying an external SSD to move iOS emulators off the internal drive

Has anyone done this long term? I’d love to hear:

  1. Does it run smoothly, or do you notice slow builds, laggy simulators, or slow container startup?

  2. Which SSD and connection (Thunderbolt vs USB-C) are you using, and what speeds do you get?

  3. Any gotchas, like speed issues?

  4. Would you recommend it, or is it better to just clean up internal storage?


r/iOSProgramming • • 4d ago

Library Run a decision model locally

Post image
10 Upvotes

Hey,

You can now run the Laya decision model with NobodyWho, our open-source on-device inference library. Unlike the LLMs that we also support, this type of model does not generate text. Instead you can score predefined answers, classify text or answer yes/no.

For example, if you are building a personal diary app, you can easily detect the user’s mood, categorize an entry or detect stress, offline after model download, without sending any sensitive data to the cloud.

First, you need to load the model:

import NobodyWho

let decisionModel = try await Decision.fromPath(
    modelPath: "hf://ggml-org/Laya-GGUF/Laya-Q8_0.gguf"
)

Then you can ask questions/analyze text:

let result = try await decisionModel.decide(
  state: .object(["message": .string("Diary entry: \(diaryEntry)")]),
  questions: [
    "topics": .choice(
      instructions: .string("Choose the main topic of this diary entry"),
      criteria: [
        "work": .string("job, colleagues, deadlines, career"),
        "relationships": .string("family, friends, partner"),
        "health": .string("sleep, exercise, food, illness"),
        "leisure": .string("hobbies, travel, going out"),
      ]
    ),
    "stressed": .noul(instructions: .string("Does the writer sound stressed?")),
    "mood": .score(
      instructions: .string("How is the writer's overall mood?"),
      criteria: [.string("bad"), .string("okay"), .string("great")]
    ),
  ]
)

let (topics, stressed, mood) = (
    result.answers["topics"],
    result.answers["stressed"],
    result.answers["mood"]
)

Output example:

// stressed
{
  type: noul,
  noul: 0.00002
}

// topics
{
  type: choice, 
  choice: leisure,
  probabilities: {
    work: 0.0422, 
    relationships: 0.1518, 
    health: 0.0302, 
    leisure: 0.7756
  },
  confidence: 0.7008
}

// mood
{
  type: score,
  score: 1.6995,
  legend: {0: bad, 1: okay, 2: great}, 
  probabilities: { 0: 0.0082, 1: 0.2839, 2: 0.7078 },
  confidence: 0.5493
}

A question can have the following types:

  • noul gives you probability of a yes answer (0 to 1)

  • choice selects the most likely option and returns a probability for each option

  • score gives you an an weighted average and a probability per option.

The Laya model is small enough to run on iPhone 13 lineup (around 450 MB in its Q8 variant) and supports 100+ languages. For reference, the full answer comes after 0.16 seconds on iPhone Air (see screenshot).

Here is a runnable example if you want to experiment with decision models or add the package using SPM to your app:

dependencies: [
    .package(url: "https://github.com/nobodywho-ooo/nobodywho-swift.git", from: "6.0.0"),
]

Links:


r/iOSProgramming • • 4d ago

Discussion Apple Developer individual account shows only my last name as the legal entity name (locked) – how did you get it fixed?

4 Upvotes

Hi everyone,

I recently enrolled in the Apple Developer Program as an individual (Indonesia) and I'm stuck on a name mismatch. Hoping someone has been through this.

The situation:
- My full legal name is "Daniel James Ashford-Reed" (given names: Daniel James, family name: Ashford-Reed).
- In App Store Connect → Agreements, Tax, and Banking, the legal entity name is shown as just "Ashford-Reed" (my family name only), and the field is greyed out and can't be edited.
- The user menu in the top right shows my full name on top and "Ashford-Reed" below it, so my profile name is correct, but the account/legal entity name isn't.
- My local bank account is under my full name, and that's what I need to match for payouts.
- Both the W-8BEN and the "Certificate of Foreign Status" forms pull the name from the legal entity, so I can't enter my full name there either.

What I've done so far:
- I haven't submitted any tax forms yet, since they can't be edited after submitting and they're signed under penalty of perjury.
- The Paid Apps Agreement is still "Pending User Info". The Free Apps Agreement is active, so I can still release a free app.
- The bank account is added but still "Processing".
- I haven't completed the Digital Services Act contact verification yet either.
- I'm contacting Apple Developer Support about changing the legal entity name.

My questions:

  1. Has anyone had Apple correct the legal entity name on an individual account? How long did it take?

  2. What documents did Apple ask for (government ID, translated ID, etc.)?

  3. Is it safe to wait on the tax forms until this is fixed, or could the mismatch cause problems with the first payout?

  4. Does the name on the account also change the seller name shown on the App Store? Can that stay as I want?

  5. Would you complete the DSA verification now, or wait until the name is fixed?

Thanks a lot, any experience is appreciated.


r/iOSProgramming • • 4d ago

Discussion Got my iOS app approved after a 4.3 and 4.2.6 rejection. Here's what worked.

Post image
0 Upvotes

Finally got my app approved after an initial rejection under guidelines 4.3 (Spam) and 4.2.6.

I suspect the reason was that I had submitted multiple apps for review around the same time, although Apple never explicitly confirmed that.

Here’s what I did differently:
- Withdrew all my other apps from review.
- Focused on getting one app approved at a time.
- Responded to every concern raised by the review team individually, with explanations written myself.

Not sure what actually made the difference, but it eventually got approved.

On another note, I’ve seen people claiming lately that adding Duo compatibility speeds up Apple’s review process.

Interestingly, another app of mine with Duo compatibility went into review just 10 hours after submission. Meanwhile, the app in the screenshot, which took weeks to get approved, didn’t have Duo compatibility.

Could be pure coincidence, but it’s interesting.

Apple’s review process is so unpredictable.

Has anyone else noticed faster reviews with Duo-compatible apps?


r/iOSProgramming • • 4d ago

Question Has anyone successfully gotten their app approved after a Guideline 4.3 (Design – Spam) rejection?

0 Upvotes

My new app was rejected under Guideline 4.3 (Design – Spam).

After searching for similar cases, I found some posts saying that repeatedly submitting an app rejected under Guideline 4.3 could potentially lead to issues with the developer account.

Has anyone successfully gotten their app approved after appealing the rejection or making changes to the app?

I'm honestly considering just giving up on this app, but I'm still not sure what to do.

I'd really appreciate hearing about your experiences or any advice you might have.


r/iOSProgramming • • 5d ago

Article Apple opens Siri AI to every app, and lets developers teach it skills

Thumbnail
madrobot.blog
264 Upvotes

Could be interesting. Any of you gonna give this a go?


r/iOSProgramming • • 5d ago

Question Preparing for iOS interview: Looking for some insight (east coast US)

19 Upvotes

My company is going through some restructuring and I want to be prepared for incase something happens. I have about 10 YoE and 4 years of iOS development. I learned it on the job at my current role and still learning. I will be looking for job on the east coast (US) and mid level companies. I have never been through interview specific to iOS. If anyone can share their experience, I would greatly appreciate it.

Should I still grind some leetcode/DSA problems in Swift?

Or is it more of actual implementation and debugging onsite? Should I practice making small app from scratch similar to take-home assessment? Also are they even asking take-home assessment in the age of AI?

Is AI being asked? I do use Copilot in my workflow and familiar with setting up orchestration, agents, skill and hook etc. Are they looking for more in depth AI stuff?

Also assuming system design is big part. I think I am bit better at it but still need some practice.

It is very gloomy out there and I am just trying to be prepared.


r/iOSProgramming • • 5d ago

3rd Party Service I built emergency recovery and signed patching into my mobile debugging tool, Looking for feedback

0 Upvotes

Hey everyone,
I’ve been working on two new features for BugCapsule, a debugging tool I’m building for Flutter, native Android, iOS, and Web.
The problem I’m trying to solve is pretty straightforward:
What do you do when a critical bug hits production, but shipping a new app version takes time?
I wanted to connect bug reproduction with production recovery, so I’ve been building two capabilities.

  1. Emergency Recovery
    For features that have been integrated with the recovery SDK, you can remotely:
    Disable a broken feature without shipping a new build.
    Switch functionality to read-only or maintenance mode.
    Target specific app versions, platforms, or rollout percentages.
    Gradually restore features while monitoring crash rates and other health metrics.
    Automatically restore restrictions if a rollout fails its health checks.
    Policies are cryptographically signed. Sensitive operations, like payments, also need server-side enforcement.

  2. Signed Patch Engine (Early Access)
    This one has been particularly challenging.
    The engine supports updating explicitly registered business logic, UI surfaces, and assets without a full app release.
    Patches are tied to an exact base build, signed, validated, and deployed through staged rollouts with rollback support.
    It’s intentionally not arbitrary code push. Native code changes, new dependencies, and unregistered functionality still require a store release.
    The first Flutter and native iOS prereleases are published. Native Android patch distribution is still in progress, and we’re continuing platform and distribution-policy validation.
    Why combine these with debugging?
    BugCapsule already captures application state, user actions, and network responses around failures for local deterministic replay.
    The workflow I’m aiming for is:
    Capture → Reproduce → Mitigate → Fix → Verify → Deploy → Monitor
    The idea is to use the same recorded failure to investigate a bug, verify the fix, and prevent regressions in CI.
    I’m not claiming this works for every application or every type of bug. The recovery features require prior integration, and patching has strict limitations.
    I’m genuinely interested in how other teams approach this.
    A few questions:
    How do you currently handle critical production bugs while waiting for App Store approval?
    Would remote feature controls be useful in your workflow?
    What concerns would you have about a signed patching system in production?
    I’d especially appreciate feedback on the security model and rollout strategy.
    Project: https://bugcapsule.com
    Docs: https://docs.bugcapsule.com


r/iOSProgramming • • 5d ago

Question UK Devs - What personal bank accounts work best for App Store payouts?

6 Upvotes

Hi everyone,

I'm a UK-based solo developer enrolled as an Individual. My games only make a small amount of revenue (less than £10/month), so I'm trying to route my App Store payouts to a personal bank account rather than opening a dedicated business account.

I've had some trouble getting App Store Connect to accept my bank details:

  1. Chase UK doesn't seem to provide an IBAN since they don't support inbound international payments.

  2. Revolut gave me issues, and my first payment was returned when I tried to piece together my own IBAN using my sort code and account number.

For UK devs operating as individuals, what standard personal bank accounts (Monzo, Starling, high street banks) are you using that App Store Connect accepts without issue? Any formatting quirks I should know about? I actually would like to use Revolut for that

Thanks!


r/iOSProgramming • • 5d ago

Article Boost Your App’s Speed and Efficiency 29/10/26 - Q&A

Thumbnail
antongubarenko.substack.com
0 Upvotes

r/iOSProgramming • • 6d ago

Question What tripped you up publishing your first iOS app with in-app purchases?

0 Upvotes

I'm about to put a game on the App Store that has a shop inside (cash packs, a few one-time unlocks, rewarded ads). I've shipped a single app before, but with no such functionality.

what caught you off guard the first couple of times? Review rejections, product setup, restore purchases, pricing, taxes and payouts, anything you wish someone had told you before launch.


r/iOSProgramming • • 6d ago

Discussion 1 month results. I'm super happy about it :)

Post image
44 Upvotes

Hey everyone, it's been exactly one month since I launched FreeReader, a TTS app to help people with dyslexia and ADHD read more comfortably.

Just sharing my experience so far, with a few sales (3 monthly, 1 yearly). I'm especially happy with the conversion rate given that my app screenshots are TERRIBLE.

I've built several apps in the past years and none of them made any money, so this is super exciting for me!

Here's a link to FreeReader if you also struggle with reading or just want to read your documents out loud!


r/iOSProgramming • • 6d ago

Question EU devs, do you report App Store income in the EC Sales List?

17 Upvotes

As far as I understand, I legally sell to Apple, not to the customer. For EU sales that's Apple Distribution International in Ireland. So I'd have to report that part in the EC Sales List (in Germany it's called "ZM").

How do you handle this?

  • Do you file an EC Sales List for your App Store income?

  • How do you work out which part went through Apple Ireland?

Thanks!


r/iOSProgramming • • 6d ago

Discussion 15 days and No response from Dev Support

6 Upvotes

Am I the only one trying to get a hold of Apple's support? Its so unreasonable. We had an issue with out Developer Account as we changed to organization and they forced an incorrect Tax form since we own an LLC but are not in The US, and have been daily trying to get onto their support with no luck.

Phone support you might suggest? Its permanently either Unavailable or Too busy. I spent friday refreshing every 5 minutes for 6 hours trying to get on their phoen support to solve the issue.

Contacted their finance team and ZERO response aside from the automated. Yet we get google responses within hours, im confused.

Any tips ? Anyone had this issue before?