iOS App Development: From Architecture to App Store Release
How we approach iOS app development end to end: SwiftUI and UIKit architecture, testing, security, and getting through TestFlight and App Store review without surprises.
You want an iOS app that feels at home on the platform, keeps up with a year of feature requests without slowing down, and gets through App Store review without drama. That is what iOS app development means to us: the app itself, plus the engineering practice around it, from architecture and tests to the release pipeline and the review process.
Good looks like this. The app launches quickly, works with VoiceOver and the largest text sizes, and behaves sensibly on a bad connection. The codebase is organized so a new engineer can find their way around without a guided tour. Releases are boring: a build goes to TestFlight, testers sign off, and a phased rollout reaches your users while crash rates stay flat.
What we build for iOS
The iOS products we build usually take one of these shapes:
- Consumer apps with accounts, subscriptions and push notifications, where retention depends on small details.
- FinTech apps: onboarding with identity checks, balances, payments, card controls, and the security scrutiny that comes with them.
- Companion apps for IoT and MedTech hardware, talking to devices over Bluetooth and syncing readings to a backend.
- E-commerce and media apps, where browsing, search, checkout and playback have to feel instant.
- Internal tools for teams in the field, often distributed privately rather than on the public App Store.
iOS work rarely stays on one device. One Swift codebase with shared packages can serve iPhone, iPad, Apple Watch, Apple TV and, with some extra work, the Mac. Each device raises its own product questions, which we cover separately for iPhone apps and iPad apps. This article is about the platform and the engineering practice underneath all of them.
How we approach iOS app development
The phases are familiar; what matters is the platform-specific work inside each one.
- Discovery. We map the core user flows and the platform features they depend on: push, widgets, Sign in with Apple, in-app purchase, HealthKit, Bluetooth. We set the minimum iOS version from your audience data and check App Review risk early, because payment rules, login requirements and account deletion shape the product, not just the submission. If your company is not yet in the Apple Developer Program, we start enrollment now; organizations need a D-U-N-S number, and verification can take a while.
- Design. Designers work from Apple’s Human Interface Guidelines and native patterns: navigation stacks, tab bars, sheets, system controls. Dynamic Type, Dark Mode and accessibility are in the first mockups, not a later pass.
- Build. We work in short iterations, each ending with a TestFlight build you install on your own phone. Progress is something you can hold, not a status line.
- QA. Testers cover the smallest supported iPhone and the oldest supported iOS version, poor networks, and interruptions such as a call arriving mid-purchase.
- Launch. We prepare the App Store listing, privacy details and review notes, submit, and release in phases.
- Iterate. Crash, hang and launch-time data from Xcode Organizer and MetricKit, plus product analytics, set the priorities for the next iteration.
Architecture: SwiftUI, UIKit and the layers underneath
For new apps, SwiftUI is our default. It needs less code, previews shorten the design feedback loop, and many of the same views carry over to watchOS, tvOS and the Mac. UIKit still earns its place for specific components, and the two interoperate cleanly, so this is a per-screen decision rather than a bet on the whole app.

| Need | What we reach for |
|---|---|
| Standard screens, forms, settings, onboarding | SwiftUI with Observation-based models |
| Very large or highly customized collection layouts | UIKit collection views, hosted inside SwiftUI where needed |
| Advanced text editing and custom text layout | UIKit text views and TextKit |
| Interface code shared with Apple Watch | SwiftUI, since UIKit is not available on watchOS |
Below the UI, we keep the architecture deliberately plain: feature modules as Swift packages, views backed by observable models, and services such as networking, persistence and analytics behind small protocols so tests can replace them. Frameworks like The Composable Architecture give strong guarantees for complex state, but add a learning curve and a dependency your team must live with; we use them when the people inheriting the code want them.
For persistence, SwiftData is convenient and fits SwiftUI well, but it is younger than Core Data; for complex migrations or heavy sync we often prefer Core Data or SQLite directly. Networking is URLSession with async/await, with the client generated from an OpenAPI spec when the backend publishes one. Dependencies come through Swift Package Manager, and we keep them few: every third-party SDK adds binary size, launch time and privacy manifest obligations. CocoaPods is winding down, so moving an older project off it is often the first step of a modernization. The language-level side, including concurrency, testing and modularization, is covered in our article on Swift app development.
Quality, testing and App Store review
Testing, performance, accessibility and security
Every pull request builds and runs the tests on CI, using Xcode Cloud or macOS runners on GitHub Actions, and a green main branch produces a signed TestFlight build without anyone opening Xcode.

- Tests. Unit tests cover models, state and services. A small set of UI tests protects the flows that must never break: sign-up, sign-in, purchase and the core task. Snapshot tests catch layout regressions across text sizes and appearance modes.
- Performance. We profile launch time, hangs, scrolling and memory with Instruments before release, then watch the same metrics from real devices after it.
- Accessibility. Automated accessibility audits in UI tests catch missing labels and contrast problems. A manual VoiceOver pass catches what automation cannot judge.
- Security. Tokens live in the Keychain, never in user defaults. App Transport Security stays on. No secrets ship in the binary, where anyone can extract them. For sensitive endpoints, App Attest lets your backend verify that requests come from a genuine copy of your app. Certificate pinning is used only with a rotation plan, since a stale pin can lock out every user at once.
Getting through TestFlight and App Store review
Internal testers get new builds as soon as processing finishes. External testers need a light Beta App Review for the first build of each version, which is worth planning around before a stakeholder demo.
Many rejections are predictable, so we design them out from the start:
- Digital content or subscriptions sold outside in-app purchase in a way the rules for that region do not allow.
- Third-party login without an equivalent privacy-friendly option such as Sign in with Apple.
- Account creation without a way to delete the account inside the app.
- Vague permission purpose strings, or features behind a login with no demo account in the review notes.
- An app that is essentially a website in a wrapper, which fails the minimum functionality rule.
App Store Connect also needs accurate privacy details, an age rating, export compliance answers and, for the EU storefront, your trader status. For updates we use phased release, which rolls out to automatic-update users over about a week and can be paused. Server-side feature flags let you switch off a misbehaving feature without waiting for review, and a minimum-version check lets you retire old builds when an API has to change.
When native iOS is the right choice, and when it isn’t
Native iOS is the right call when your audience is mostly on iPhone, when the product depends on platform features such as widgets, Live Activities, HealthKit, Apple Pay or Apple Watch, when the interface is performance-sensitive (camera, audio, maps, real-time data), or when the product will live long enough for quality to compound.
It is the wrong call when you need iOS and Android at once on a limited budget and the product is mostly lists and forms; a cross-platform approach such as React Native will usually get you further. If the product is content people read once, a fast mobile website is cheaper and easier to find. And if you are still testing whether anyone wants the product, a clickable prototype will teach you more than a polished native build.
How an engagement works
A typical iOS team combines iOS engineers, a product designer, a QA tester and a business analyst, with backend engineers when the product needs an API. Each short iteration ends with a demo and a TestFlight build, and you get written progress reports and access to the backlog throughout.
You receive the source code in your repository, a CI pipeline that builds and tests every change, the app in your own Apple Developer account, concise architecture notes and a release checklist. After launch, Apple’s yearly cycle of new SDK requirements, deprecations and betas means every app needs regular attention. App Store Connect periodically raises the minimum SDK for uploads, so a neglected app cannot ship even a one-line fix until it is brought up to date. We can stay on for that work or hand over to your team.
We also run focused engagements: iOS alone alongside your Android team, a design overhaul, or the rescue of an existing app, whether that is an Objective-C codebase nobody wants to touch or an app caught in a cycle of review rejections.
Frequently asked questions
Should we launch on iOS first or on both platforms at once?
Launch where your users are. If your market data points to iPhone, going iOS first lets you learn with one codebase, and we keep the API platform-neutral so Android can follow without backend rework. If you need both on day one, weigh a cross-platform build.
Which iOS versions should we support?
Decide from your own analytics and Apple’s published adoption figures. Every older version costs testing time and keeps newer APIs out of reach, so most apps support the current major version and a small number before it.
How long does App Store review take?
Usually not long, but there is no guarantee. Plan launch dates with room for one rejection and resubmission, and keep marketing dates flexible until the build is approved.
Who owns the app and the developer account?
You do. Your company should hold the Apple Developer account and the App Store listing, and we work inside it as team members. Certificates, customer reviews and revenue stay with you whatever happens to the engagement.
Planning a new iOS app, or inheriting one that needs care? Tell us about your product, and we will come back with questions, a proposed approach and the trade-offs we see.