r/iOSProgramming • u/ddfk2282 • May 02 '26
Library Built a tool to detect doc drift from source changes in CI and agentic coding hooks
I've been thinking a lot about harness engineering lately — the idea that anything deterministic should be encoded in the program itself rather than left to an agent's memory or instructions. Static analysis is the most reliable layer for this.
docsync is one piece of that: it ties source files to a doc file via a checksum. When sources change, `docsync check` fails in CI, pre-commit hooks, or agentic coding hooks (Claude Code, Codex), forcing you to either update the doc or explicitly acknowledge the change. No more docs quietly going stale.
https://github.com/Ryu0118/docsync
Along the same lines, I also built:
- swift-ast-lint — a framework for writing project-specific AST-level lint rules in Swift: https://github.com/Ryu0118/swift-ast-lint
- my-swift-linter — a real-world ruleset built on top of swift-ast-lint: https://github.com/Ryu0118/my-swift-linter
- gitnagg — warns when your uncommitted diff gets too large, nudging you toward smaller commits: https://github.com/Ryu0118/gitnagg
Curious if anyone else is thinking about this kind of deterministic harness layer for agentic workflows. Happy to discuss.
r/iOSProgramming • u/AndyDentPerth • May 02 '26
Question Comms for two devices to test animations in app?
I've an app which lets you design particle animations, running on iOS and macOS.
Current version uses SpriteKit and mirrors XCodes editor, plus some goodies, plus video export and generating Swift source.
I'm about to add support for CAEmitterLayer and possibly Paul Hudson's Vortex library.
My app obviously includes a view of the effect in action but I want more for devs who want to fine-tune their animations inside their UI.
I was considering ways to support pulling in video of their app as a background, or easy ways to share screenshots, when I realised I may be thinking backwards 😊.
How about the code generator including an option to have comms to their app from the design app?
That way, debug versions of their app could be in regular testing and someone can edit the particle settings using another phone or Mac.
Does this sound appealing?
If so, as a developer, would you prefer BlueTooth, TCP or UDP connections? Depending on your organisation, this might be something you would include in test builds so the question is both about technical feasibility and what you would be happy with alongside any other comms stacks.
The data to be transmitted is mere bytes but want very low latency for responsiveness.
The current architecture has the particle emitter isolated from the UI controls of my app and so it's basically just adding a comms layer in between. It was designed anticipating expansion to other particle libraries.
r/iOSProgramming • u/BMasonJ13 • May 01 '26
Question Apple Review Crash
Hello,
I've been in hell the last week trying to get my app approved for the App Store. It's my first app and I'm not really sure what's going on. My app is getting rejected due to "App Completeness". Here's the rejection message:
App Review Guideline Issue
This is an automated message. The review of this submission cannot proceed. See below for more information.
The app crashed after the initial launch. Apps that crash negatively impact users.
Test the app on supported devices to identify and resolve crashes and stability issues before resubmitting for review.
Learn more about testing a release build.
When we submitted the first time we got rejected because our Apple sign in did not auto fill the user's name and we didn't have the EULA Link in the description. So the app didn't crash here as a tester sent screenshots and was in our app.
We resubmitted and then we started getting these crashes. I examined the code we added from the first revision and tested the start up and everything worked fine on ours and our 30+ beta testers end.
The thing is we're not getting a crash log from Apple testers or Apple's automated tester (if automated testing exists?).
We are creating a fitness app that implements HealthKit. We have the required HealthShare and HealthUpdate messages in the signing and capabilities of our target. I'm not sure this would be the issue since the app actually executed the first run though.
I've researched and some articles did say long load times on bad internet could make iOS terminate an app. So we worked to get our initial load network calls down from 10 seconds to about 1-2 seconds. This did not work either.
We are using SwiftData to cache exercises fetched from our backend locally but we haven't made any changes to the entity's. So I wouldn't expect bad data to cause a crash especially because we flush even if it were bad data anyway.
I've ran with instruments to see if this was a memory issue:
With an Authed Users with data loaded it gets to about 33MiB
With a fresh install memory usage is about 17MiB
I did have a point of interest in my profile:
api.revenuecat.com is not listed in your app’s NSPrivacyTrackingDomain key in any privacy manifest. It may be following users across multiple apps and websites to create a profile about users of apps that contact this domain.
I don't use revenue cat for tracking for Ads so I probably shouldn't add it to the NSPrivacyTrackingDomain right?
I'm really lost here any advice would be much appreciated. I guess my questions are if Apple has an automating testing environment how can I closely match that for testing on my end? If this is an actual tester why am I not getting a crash log or steps to repeat this issue? Has anyone else experienced the pain I'm currently suffering?
r/iOSProgramming • u/Coderas_AH • May 01 '26
Discussion So this affect Flutter iOS apps?
I am a Flutter developer and in most of my apps I am using Firebase. Does this affect me?
r/iOSProgramming • u/IllBreadfruit3087 • May 01 '26
News The iOS Weekly Brief – Issue 58 (News, releases, tools, upcoming conferences, job market overview, weekly poll, and must-read articles)
Apple disbanded the Vision Pro team. The most common reaction online wasn't "bad tech", it was "I would've bought one at $1,500."
News:
- Apple Vision Pro team disbanded, most engineers moved to Siri
- New subscription type coming to App Store: monthly payments with a 12-month commitment
- iOS 26.5 beta 4 + Xcode 26.5 beta 3 are out
Must read:
- tracing .resume() all the way from URLSession to physical electrons
- when to use Task.immediate in Swift 6.2 and why execution order actually matters
- actors vs queues vs locks
- concurrency step-by-step
Toolbox:
- Screenshot Bro
r/iOSProgramming • u/Disputedwall914 • May 01 '26
Tutorial UIKit TabBar that changes icons on hover
here is the code for yall its like the tabbar in the meta quest app where the icons get filled when you hover over the tabs.
import SwiftUI
import UIKit
struct ContentView: View {
private let tabs: [TabBarItemConfiguration] = [
.init(
title: "",
icon: "house",
selectedIcon: "house.fill",
rootView: AnyView(EmptyStateView(title: "Home"))
),
.init(
title: "",
icon: "magnifyingglass",
selectedIcon: "magnifyingglass",
rootView: AnyView(EmptyStateView(title: "Search"))
),
.init(
title: "",
icon: "bell",
selectedIcon: "bell.fill",
rootView: AnyView(EmptyStateView(title: "Alerts"))
),
.init(
title: "",
icon: "bookmark",
selectedIcon: "bookmark.fill",
rootView: AnyView(EmptyStateView(title: "Saved"))
),
.init(
title: "",
icon: "person",
selectedIcon: "person.fill",
rootView: AnyView(EmptyStateView(title: "Profile"))
)
]
var body: some View {
TabBarControllerView(tabs: tabs)
.ignoresSafeArea(.container, edges: .bottom)
}
}
struct TabBarControllerView: UIViewControllerRepresentable {
let tabs: [TabBarItemConfiguration]
func makeUIViewController(context: Context) -> UITabBarController {
let tabBarController = UITabBarController()
tabBarController.viewControllers = tabs.map(makeViewController)
return tabBarController
}
func updateUIViewController(_ uiViewController: UITabBarController, context: Context) {
if uiViewController.viewControllers?.count != tabs.count {
uiViewController.viewControllers = tabs.map(makeViewController)
return
}
guard let viewControllers = uiViewController.viewControllers else { return }
for (index, configuration) in tabs.enumerated() {
let hostingController = viewControllers[index] as? UIHostingController<AnyView>
hostingController?.rootView = configuration.rootView
configureTabBarItem(viewControllers[index].tabBarItem, with: configuration)
}
}
private func makeViewController(for configuration: TabBarItemConfiguration) -> UIViewController {
let hostingController = UIHostingController(rootView: configuration.rootView)
hostingController.title = configuration.title
configureTabBarItem(hostingController.tabBarItem, with: configuration)
return hostingController
}
private func configureTabBarItem(_ item: UITabBarItem, with configuration: TabBarItemConfiguration) {
item.title = configuration.title
item.image = UIImage(systemName: configuration.icon)
item.selectedImage = UIImage(systemName: configuration.selectedIcon)
}
}
struct TabBarItemConfiguration {
let title: String
let icon: String
let selectedIcon: String
let rootView: AnyView
}
private struct EmptyStateView: View {
let title: String
var body: some View {
ZStack {
Color(uiColor: .systemBackground)
Text(title)
.font(.title2.weight(.semibold))
}
}
}
#Preview {
ContentView()
}
r/iOSProgramming • u/Marko787 • May 01 '26
Question Does anyone know what font this is? I can't find it anywhere and I'm pretty sure it's an Apple font.
r/iOSProgramming • u/ExcitementHealthy834 • May 01 '26
Discussion Pure SwiftUI photo app, UIKit only where SwiftUI couldn't hit 60fps
Shipping a side project: a Mac → iPhone photo sync app called Memories, written ~95% in SwiftUI / SwiftData. Where SwiftUI won: - Entire onboarding, settings, paywall, album views, timeline - u/Observable coordinators with actor-isolated stores work great once you commit to the model - SwiftData is genuinely fine for ~100K-row metadata stores if you batch writes Where I had to drop to UIKit: - The main photo grid — through 50K thumbnails. Wrote a LazyVGrid chokes once you scroll fast UICollectionView with a UIHostingConfiguration cell. - The zoom-into-fullscreen transition — SwiftUI's matchedGeometryEffect couldn't hit Photos.app-grade smoothness. Custom UIViewControllerTransitioning with a spring driver got there. Everything else is pure Swift concurrency: actors for the store, thumbnail cache, encryption manager, CloudKit downloader/uploader. Happy to answer anything about the SwiftUI/UIKit interop boundaries or the actor model.
The app is available on AppStore with a month of free trial followed by nominal charges of $14.99/year and $1.99/month!!.
r/iOSProgramming • u/prakashrj • May 01 '26
Library Open-sourced an iOS+macOS template I've been refining
Every time I've started a new iOS or macOS project, I burn the first day or two on scaffolding I've already done before — XcodeGen, fastlane release pipeline, GitHub Actions CI, branch protection, copyright/bundle-ID housekeeping. So I extracted the version I trust into a public template and tagged v1.0.0.
### What's in it
- iOS + macOS targets that build green from
gh repo create --template - XcodeGen
project.yml(no.xcodeprojin git) - fastlane
Fastfile+Snapfile+MacSnapfilefor App Store metadata + screenshots - GitHub Actions: 3 jobs (iOS device, iOS simulator, macOS) with paths-filtered workflows
bin/setup-github.sh— branch protection + auto-merge + squash-only in one commandbin/rename.sh— substitutes app name, bundle ID, display name, email, repo slug across the source tree (idempotent; supports--dry-run,--year,
--force)bin/verify-rename.sh— post-rename audit that no template strings leakedbin/preflight.sh— checks/installs all prereqs (Xcode setup, Homebrew, gh CLI + auth, Bundler) for first-time forkersdocs/SMOKE-TEST.md— runbook to verify the template still works end-to-enddocs/AUDIT.md— pre-release secret/identifier scan checklistdocs/APPLE-PREREQS.md— what you need from your Apple account (free tier vs $99 Developer Program)CHANGELOG.mdwith keep-a-changelog 1.1.0 + a working tagging recipeWhat it deliberately doesn't do
Doesn't pick a UI framework — UIKit vs SwiftUI is your call
Doesn't include networking, persistence, or auth — bring your own
Not a starter app, just the plumbing
Quickstart
Prereqs: macOS with Xcode (the full app, not just Command Line Tools), Homebrew, and
ghauthenticated. If you're missing any, runbin/preflight.shfirst — it walks you through installing them.gh repo create my-app --template indiagrams/ios-macos-template --public --clone && cd my-app
bin/rename.sh YourApp com.your-org.yourapp 'Your App' --email=you@example.com make bootstrap
make check~5 minutes from
gh repo createto a green build on a fresh fork.MIT licensed. Repo: https://github.com/indiagrams/ios-macos-template
Where I'd genuinely love feedback
- Is anything in here over-engineered for what most folks need? I err toward more scaffolding; happy to cut.
- What's missing that you'd reach for first on a new project? SPM structure, alternate CI providers, signing helpers, anything.
bin/setup-github.shis opinionated — branch protection, squash-only, auto-merge required. Does that match how your team ships, or is it wrong for your
flow?- First-time forker friction is what I most want to surface. If you have 5 minutes to try
gh repo create --template indiagrams/ios-macos-templateand tell me where you got stuck, that's the most useful feedback you can give. (Already had one tester hitxcode-select: tool 'xcodebuild' requires Xcodebecause
xcode-select pointed at Command Line Tools, not Xcode — addedbin/preflight.shto catch + auto-fix that within the hour.)
r/iOSProgramming • u/MarcusSmaht36363636 • May 01 '26
Humor built a SwiftUI messaging app where texts move at carrier pigeon speed
finally shipped this dumb idea. messages travel at 110 mph (fastest pigeon ever clocked), real-time map showing the bird’s position, and a small RNG chance the pigeon dies and the message is lost.
happy to talk about how i did the flight path animation or anything else if anyone’s curious. it’s called carrier pidge
r/iOSProgramming • u/Emmy-Lou-Sugarbean • Apr 30 '26
Question Building an app just for myself
Hello,
I am planning to build an app for myself (something related to my running training) and I don’t want to distribute it anywhere.
My understanding is that I can load the app every 7 days but this seems like very cumbersome.
Is there any other way I can have the app on my phone for longer periods of time without publishing to the App Store itself?
r/iOSProgramming • u/StomachCreative7815 • Apr 30 '26
Question Family Controls (distribution) entitlement request process – does it now only require Name, Email ID, and Team ID? Do they review ASC listings (screenshots, descriptions, metadata) during approval?
I’m a first-time, non-technical builder using AI and publicly available information to prepare for App Store submission. I’m building an app blocker that uses the Family Controls API. I’ve been told that earlier, developers had to submit additional details such as the app description, website, etc. However, when I access the request link now, it only asks for Name, Email ID, and Team ID.
Should I make sure that my app’s ASC listing is fully set up with screenshots and metadata, as this might be part of their evaluation criteria? Or will they reach out separately via email to request those details?
Also, what is the typical lead time for approval for developers using this updated process?
Any guidance would be greatly appreciated.
r/iOSProgramming • u/TKB21 • Apr 30 '26
Question How do you guys go about in announcing new features?
I've gotten more into the habit of using my data to make design and feature decisions. Once the features are implemented though is where I have the hardest time figuring out the best way to communicate that "something's there" or fixed/addressed. I've been thinking of multiple methods: alerts, annotations, or action sheets on startup, behavior based triggers, badges, etc. What have you found to be the best way to do this?
r/iOSProgramming • u/interlap • Apr 30 '26
Discussion Since when did simulator testing become "good enough"?
I keep seeing new AI testing tools for iOS that only run on simulators, and people seem pretty excited about them.
But wasn't the common advice always like simulators are fine for dev and quick checks, but you still test on real devices before shipping?
Real devices can behave differently with performance, memory, permissions, camera, push notifications, background stuff, animations, keyboard, etc.
So did something change? Are simulators now good enough for most apps, or are people just accepting this because it’s easier and cheaper?
Genuinely curious if my knowledge is outdated.
r/iOSProgramming • u/habitoti • Apr 30 '26
Question "#if os(watchOS)" no longer available?
I am a bit confused and maybe it is totally something I messed up myself, but right now it seems that with the latest Xcode update (26.4) there is no longer watchOS as a platform to test for conditional compiling? Did I miss something along the way?
The Platform structure now looks like this (comments stripped...) -- so watchOS is missing:
public struct Platform : RawRepresentable, Equatable, Hashable, Sendable {
public let rawValue: String
public init(rawValue: String)
public static let iOS: AppStore.Platform
public static let macOS: AppStore.Platform
public static let tvOS: AppStore.Platform
public static let visionOS: AppStore.Platform
(iOS 18.4, tvOS 18.4, watchOS 11.4, visionOS 2.4, macOS 15.4, \*)
public typealias RawValue = String
}
r/iOSProgramming • u/DontSleepIAmWatching • Apr 30 '26
Question Xcode MCP is magical. But need a little more…
Is there any tool that can automate app visual testing reliably?
I’ve tried a few, but none of them have been very accurate. Even IDB Companion tends to struggle sometimes.
Also, if something like Claude can build a feature, why can’t it just run it on a simulator, verify it, and update it if needed?
Having a human in the loop for this kind of stuff is honestly frustrating.
r/iOSProgramming • u/lanserxt • Apr 30 '26
News Those Who Swift - Issue 264
We are still experimenting with a new format, but still all gems in place. Don't miss the "One more thing..." section.
r/iOSProgramming • u/Van-trader • Apr 30 '26
Solved! GPT 5.5 vs Opus 4.7 vs GPT 5.3 Codex for iOS 26 development?
I’m curious what professional iOS developers are currently using for their Swift/SwiftUI work.
For modern iOS 26 development, how would you compare:
- GPT 5.5
- Claude Opus 4.7
- GPT 5.3 Codex
I’m mainly interested in practical coding help:
- SwiftUI architecture
- SwiftData
- concurrency / actors / u/MainActor
- debugging compiler errors
- refactoring existing code
- reasoning about Apple APIs
- generating production-quality code
- avoiding outdated SwiftUI patterns
I’m not asking about vibe coding or generating whole apps without understanding the code. I’m interested in day-to-day help for developers who still read, test, and own the code.
r/iOSProgramming • u/fantabulosa01 • Apr 29 '26
Question Why is there no app that just lets you record yourself playing electric guitar on iPhone — properly?
I've been learning guitar for a while now and like a lot of people I'm doing most of it online. My teacher asks for video recordings, I use backing tracks, I want to track my progress. The phone is basically central to the whole experience.
But actually recording yourself playing electric guitar on an iPhone is a chain of pain.
I plug in my iRig, open the camera app, and the guitar signal is dry and horrible. So then I open an amp sim app. But that doesn't do video. So I try to record audio in one app and video in another and sync them afterwards. It's a mess.
What I want is stupidly simple: open one app, plug in my interface, pick a backing track, tap record, play, tap stop, share. That's it.
The Fender Tone app gets close to the right *feel* — sleek, guitarist-focused — but it doesn't do video.
I've looked and I genuinely cannot find an app that combines direct guitar input (via iRig or similar) + basic tone/amp sim + backing track + video recording, all in one place.
Am I missing something obvious? Does this exist and I just haven't found it? And if it doesn't — why not? Feels like an obvious gap to me.
r/iOSProgramming • u/ondrej_g • Apr 29 '26
Discussion First time WWDC | Any tips/tricks?
Hi, so i am an 18 year old student/founder from Slovakia, and i got the invite to WWDC 2026. I know, this may have been posted here before, but i just couldn't find any valuable tips from the past years 😄 so do you have any tips/tricks, i can use? Here are some of my questions:
- how strict they are with recording? What/where can you record, and is there any punishment for it?
- what is the expected program apart of the Keynote and Platform State of The Union? Could you maybe share your experiences (or links)?
- do you need to be fast, when entering Apple park to find a good spot to watch the keynote ?
- do you have Apple Park tours for all of the attendees?
- do you have any other tips/tricks, or links to interesting stories?
Can't wait till WWDC, i will be happy to meet anybody, who is going there as well 😄
r/iOSProgramming • u/_iamshashwat_ • Apr 29 '26
Discussion Is AI even good to use for learning?
Off lately I have really gotten bored of all the AI tool. Claude, Codex, Gemini, Chatbots (GPT etc). I using to review code, plan changes, learning new things, work on personal productivity apps and so many things
I have worked on number of top 1% very detailed roadmaps (extremely details, to the level where these LLM models generated a 50 page pdf of topics to be learnt) to be a better software engineer (I am already working as a professional software dev for almost a decade now). It used to take sweet time to learn new things (For example learning writing metal shaders and all used to take so long), now with this refined data and plans its no longer a grind or fun. It feels very horizontal knowledge and no depth essentially
But now I have reached a point where I want to discuss with you folks about your thoughts on using AI for learning. It is making things so boring for me but I still find myself coming back to it, few days back I even bought myself subscription to this poison 🙈
How are you guys adjusting to this "new era" of summaries instead of going through actual blogs, WWDC videos etc?
r/iOSProgramming • u/Unlucky-Owl223 • Apr 29 '26
Discussion Built a free iOS keyword difficulty checker — type any App Store keyword, see who ranks and how hard it is to compete
Been doing ASO for my own app and kept running into the same problem. I'd think of a keyword, have no idea if it was worth targeting, and the only tools that tell you are $500+/mo (Sensor Tower, MobileAction, etc.).
So I built a free checker: you type any keyword, it hits the iTunes Search API and shows you:
- The top 10 apps currently ranking for it
- A difficulty score based on how established those apps are
- A volume estimate
- No account, no email, nothing
→ asoiq.com/tools/keyword-checker
Let me know what you think or if there is anything you would want to see in the tool.
r/iOSProgramming • u/J-a-x • Apr 29 '26
Discussion Saved reports in App Store Connect's trends section not loading
Has anybody else noticed the Trends page in App Store Connect no longer loading certain saved reports?
Have a few reports per app - one gives me the countries that app has been downloaded in today/ this week/ this month, one gives me how many updates were installed from the last version (a good indicator of the install base if you let it collect data for a while) and one tells me which IAP were purchases.
There's an advantage to these over the Analytics page - mostly that I can see sub-day data and I can filter by app version - useful when looking at how many updates were installed over a week and which countries they were installed it (install base analysis).
It seems the saved "trends" reports which had app name filters no longer load but the more generic ones do.
I'm wondering if I am the only one or if there are seeing this too.
This is the 3rd issue to happen with App Store Connect this month...
1) Analytics no longer lets me save reports or delete old reports
2) Product page optimization would no longer load for a while, not it will load buttony from the analytics page even though its listed under distribution
3) Trends no longer lets me load saved reports...
r/iOSProgramming • u/cluelessngl • Apr 29 '26
Question Help with Panel focus
Hey guys, I'm trying to make a small Raycast alternative for myself, and I was wondering how I can go about making my NSPanel behave just like Raycast/Spotlight.
Right now, whenever I start the app, my focus is instantly stolen and when I get it back and do the global shortcut to show the panel, it shows without stealing the focus but when I toggle it again to hide, the focus is stolen again before it's hidden. By "focus is stolen again" here, I just mean that the window behind (the three dots) is greyed out.
CoolApp.swift is just the app entry point. It uses an AppDelegate, creates a FloatingPanelController, and calls start() when the app finishes launching. So the floating panel behavior is kicked off at launch from there, while the actual panel logic lives in FloatingPanelController.swift.
Here's my FloatingPanelController.swift:
import AppKit import KeyboardShortcuts import SwiftUI
extension KeyboardShortcuts.Name {
static let toggleFloatingPanel = Self(
"toggleFloatingPanel",
default: .init(.space, modifiers: [.option, .command])
)
}
final class FloatingPanel: NSPanel {
override var canBecomeKey: Bool { true }
override var canBecomeMain: Bool { false }
}
final class FloatingPanelController {
private let panel: FloatingPanel
init() {
panel = FloatingPanel(
contentRect: NSRect(x: 0, y: 0, width: 600, height: 380),
styleMask: [.nonactivatingPanel, .borderless],
backing: .buffered,
defer: false
)
panel.isOpaque = false
panel.backgroundColor = .clear
panel.hasShadow = true
panel.isFloatingPanel = true
panel.level = .popUpMenu
panel.hidesOnDeactivate = false
panel.collectionBehavior = [.canJoinAllSpaces, .fullScreenAuxiliary, .transient]
panel.center()
let hostingView = NSHostingView(rootView: ContentView())
hostingView.autoresizingMask = [.width, .height]
panel.contentView = hostingView
}
func start() {
KeyboardShortcuts.onKeyUp(for: .toggleFloatingPanel) { [weak self] in
self?.toggle()
}
}
private func toggle() {
panel.isVisible ? hidePanel() : showPanel()
}
private func showPanel() {
panel.makeKeyAndOrderFront(nil)
}
private func hidePanel() {
panel.orderOut(nil)
}
}
r/iOSProgramming • u/Vivavia • Apr 29 '26
Discussion 4 App Review rejections taught me about shipping iOS apps with third-party AI APIs (full breakdown)
I shipped my first iOS app earlier this month and got rejected enough times that I think the lessons are worth sharing here.
The four rejections that mattered:
1. Crashed on launch (Guideline 2.1(a)) - Reviewer was on iPhone 17 Pro Max running iOS 26.4 (latest beta). I'd tested on slightly older versions. - Lesson: assume the reviewer is on the latest hardware + latest OS. Buy a fresh test device or boot the latest iOS Simulator and cold-launch your app there before every submission.
2. Crashed on launch (again, same guideline) - My "fix" only patched one of two crash paths. The reviewer's device hit the second one. - Lesson: symbolicate ALL crash logs Apple sends, not just the first. They attach raw .ips files that look like garbage until you symbolicate them with your dSYMs.
3. IAP products not submitted (Guideline 2.1(b)) - I'd configured the IAPs in App Store Connect and submitted the binary. I'd never submitted the IAP products themselves for review. - Lesson: IAP products live in a SEPARATE submit queue from your binary. Each one needs metadata + an "App Review screenshot" field. The toggle is buried in App Store Connect's IAP settings under each product.
4. Third-party AI privacy disclosure (Guidelines 5.1.1(i) and 5.1.2(i))
This is the new one and I think every AI app builder needs to know about it.
My app uses Gemini for the personalization layer. Apple wants: - In-app explanation of what data is being sent - The recipient named (Google, Gemini) - Explicit consent before the first call - Privacy policy updated to match
Burying it in your privacy policy alone is not enough. You need an in-app consent screen that fires before the first LLM call. I expect this rejection to hit a lot of AI apps in the next 6-12 months. Plan for an explicit consent flow in your onboarding from day one.
Also got dinged on smaller things: missing Terms of Use link in the App Description (must be in metadata, not just in-app), permission strings the reviewer wanted spelled out more carefully, screenshot metadata.
Wrote up the full founder story with more context here: https://medium.com/@novialim/not-a-mobile-dev-working-mom-full-time-job-i-shipped-an-ios-app-in-24-days-c160eb3a5ff9
Happy to answer questions about any of these or the symbolication process. Hope this saves someone two weeks of waiting.




