How we got our iOS approved in first try
We shipped a native SwiftUI app for SpendCrypto.
badammm tsshhhh
Apple approved it on the first review! It’s live on Appstore
I’m not an iOS engineer. We already had a smooth web app and REST API. And I prompted my way to build the iOS app. Wouldn’t call it vibecoding, there’s a setup that we began with which steered the AI agents into building the right experience.
The codebase structure
Skills
Structure
While AI can invent the structure, it’ll sometimes do a lazy job of it without considering the future maintenance and compounding tech debt as we add new features.
We started manually defining this structure
ios-app/
SKILL.md # router (skill #8)
skills-lock.json # pinned skill versions
.agents/skills/ # the seven installed skills
APP_STORE_SUBMISSION.md # demo account, review notes, privacy table
SpendCrypto/
App/ # entry, tabs, environment wiring
Core/
Auth/ # Keychain token, session
Networking/ # APIClient, WebSocket, NetworkMonitor
Services/ # catalog, orders, credits, referral, profile
Models/
Preview/ # isolated Xcode previews
DesignSystem/ # colors, buttons, gift card tiles
Features/
Auth / Catalog / Cart / Order / Orders / Profile / Support This app is not alone here. The web app and REST API backend are in the same workspace from where AI can pull a lot of context. See this cross-repo shared setup that I use in Cursor.
Better cross repo context in Cursor
I started building mobile apps for my webapp and it made me rethink the way context is shared across repos in my setup.
I have a backend in django and frontend in svelte. Two repos.
The skills
Skills played an important role in ensuring our app felt like a native iOS app, not a thin wrapper over our webapp.
There are tons of skills out there on skills.sh - but you gotta be judicious about which skills to add to your codebase. Too many skills will just bloat the context for AI, and some may even conflict with each other, because these are just succint prompts written by different people based on their judgements.
We selected these 6 skills
1. swiftui-patterns
This skill builds modern SwiftUI patterns targeting iOS 26+ with Swift 6.3. Covers architecture, state management, view composition, environment wiring, async loading, design polish, and platform/share integration.
Source: dpearson2699/swift-ios-skills
npx skills add https://github.com/dpearson2699/swift-ios-skills --skill swiftui-patterns This is why the app isn’t a pile of ViewModels.
2. ios-hig-design
Make it look like a native iOS app. Default for anything visual. Tab bar (Shop / Orders / Cart / Account), NavigationStack, 44pt hit targets, safe areas, VoiceOver labels on gift card tiles and pickers etc
Source: wondelai/skills
npx skills add https://github.com/wondelai/skills --skill ios-hig-design 3. mobile-ios-design
This is a bit thinner version of HIG design. You can skip this one if you prefer. We kept it to pass in most prompts, and use the one above only when directed to use it.
Source: wshobson/agents
npx skills add https://github.com/wshobson/agents --skill mobile-ios-design 4. swiftui-animation
Motion with Reduce Motion. Used when something should move:
Shop → product zoom: matchedTransitionSource + .navigationTransition(.zoom)
Category chips: withAnimation(.easeInOut) plus Environment(.accessibilityReduceMotion) so it just scrollTo if the user asked for less motion
Voucher reveal: a short spring, not a circus
The skill’s whole point is: animate the state change, respect Reduce Motion, don’t put work inside the animation closure.
Source: dpearson2699/swift-ios-skills
npx skills add https://github.com/dpearson2699/swift-ios-skills --skill swiftui-animation 5. swiftui-performance
We used this skill primarily for code-review. It ensures you don’t make noob mistakes like loading a huge chunk and freeze app, running loops for animations.
Really useful when you don’t have deep knowledge about iOS patterns and building performance optimised apps.
Source: dpearson2699/swift-ios-skills
npx skills add https://github.com/dpearson2699/swift-ios-skills --skill swiftui-performance 6. app-store-review
Probably why we got through first try. Helps you catch App Store rejection risks before submission. Things like privacy, completeness, payments (most important one), ensuring you have a demo login that works.
Source: dpearson2699/swift-ios-skills
npx skills add https://github.com/dpearson2699/swift-ios-skills --skill app-store-review Ensure that you use the usual Xcode flow for uploading your app archive to appstore connect and then manuall distribute from there. iOS review team treats cli submissions differently.
Also, we have a global manual skill which routes the AI to specific skills based on the prompt. This is useful to ensure skills are actually used when needed and you don’t have to keep prompting to use specific skills.
Lastly, use the right model when you’re planning and executing large tasks. I used Cursor with Grok 4.6 high effort for most prompts.