Skip to main content

iOS development, under the hood —what a migration touches.

Years of iOS in production mean we've already hit the walls most teams discover in year two — SwiftUI screens that fight UIKit navigation, async/await that races under load, App Store rejections from a privacy manifest nobody added. This page is about what's inside a modern iOS app, and how a UIKit codebase moves to SwiftUI without freezing the roadmap.

  • SwiftUI
  • Swift 6
  • async/await
  • App Store-ready

Why Entalogics for iOS

Four things every iOS
app development project
actually needs.

The iOS codebases we take over tend to look alike: view controllers running to 5,000 lines, three networking patterns in one project, Core Data migrations that crash on the first update, and no tests. We fix the architecture before it becomes the reason users leave.

Performance01

Main thread blocked means frames dropped. Users notice.

Everything that doesn't need to touch the UI gets moved off the main thread before we write the first feature — image decoding, heavy JSON parsing, database reads. We profile with Instruments from the start rather than after a one-star review mentions the scrolling on a three-year-old iPhone.

Architecture02

MVVM with real module boundaries, not a single Massive View Controller.

When a ViewModel can be unit-tested without launching a simulator, the architecture is working correctly. We build each feature as a Swift Package with explicit imports, put navigation in a coordinator that can be tested in isolation, and keep Views to layout only. The next developer finds any feature in thirty seconds instead of thirty minutes of searching.

State03

SwiftData where the domain earns it. UserDefaults where it doesn't.

Credentials belong in the Keychain. Simple preferences belong in UserDefaults. Complex domain objects that need migrations belong in SwiftData. The iOS apps that end up with one massive SQLite database holding everything are the ones where nobody made these choices upfront — and it shows when the first migration fails in production.

Type safety04

Swift's type system used completely, not worked around.

A `guard let` that silently returns isn't error handling. We model every expected failure path with Result types, every API contract with Codable, every state transition with an enum that makes illegal states impossible to represent. When the backend team changes a response field, the Swift compiler catches every broken iOS callsite before QA even runs.

When native iOS, when not

iOS native development
is a tool.
Not always the answer.

Native Swift gives you the deepest access to Apple's platform. It also costs the most, in build time, in hiring, and in maintenance. On the first call we'll tell you whether native is the right choice or whether cross-platform gets you to market faster with the same result.

GO NATIVE IOS WHEN

  • The product depends on Apple frameworks that have no cross-platform equivalent — HealthKit, ARKit, CarPlay, Live Activities, Widgets, Vision Pro
  • Real-time performance is a hard requirement — camera processing, audio pipelines, GPU rendering — where a cross-platform runtime adds latency you can't absorb
  • Every pixel needs to feel native Apple, not native-ish, because brand perception and platform trust are part of the product
  • The team is already shipping Swift and the cost of maintaining a Kotlin codebase in parallel isn't a problem

CONSIDER CROSS-PLATFORM WHEN

  • iOS and Android both need to ship and the budget won't stretch to two native teams built in parallel
  • The core product is data display, lists, and forms — functionality React Native handles cleanly on both platforms without the native overhead
  • Market validation is the priority right now — React Native gets you to real users faster, and you can go native on specific surfaces once you know what's worth optimising

WE SAY NO WHEN

  • "Native is always better." It's a trade-off, and we won't take the work if cross-platform is the better answer.
  • "Wrap our website in a WKWebView and submit it as an iOS app." Apple will reject it, and they should.
  • "We need to be in the App Store in three weeks and the spec isn't written yet." Write the spec first. Then we can talk about weeks.

What we build with iOS

Six iOS app development
surfaces. One quality bar.

The kinds of iOS work we do most often, each built to pass App Store review on the first submission.

  • S01

    Consumer iOS apps

    The full consumer iPhone app development stack: smooth onboarding flows, StoreKit 2 subscriptions with server-side receipt validation, push notifications that arrive in under a second, App Clips for first-touch experiences, and WidgetKit for the home screen your users see every day.

    SWIFTUISTOREKIT 2APNSWIDGETKIT
  • S02

    Health & fitness apps

    HealthKit integration requires more than reading step counts — background delivery, HealthKit query anchors, and data handling that passes Apple's privacy guidelines on the first review. watchOS companion apps that share a Swift Package with the iPhone app, built with Apple's health privacy rules in mind from the start.

    HEALTHKITWATCHOSSWIFTDATACOMBINE
  • S03

    AR & spatial computing

    ARKit experiences that handle real-world tracking loss gracefully, RealityKit rendering that stays above 60fps on the oldest supported device, and visionOS UI built on the same SwiftUI skills that transfer directly from iPhone development. Your Vision Pro app doesn't start from a different codebase.

    ARKITREALITYKITVISIONOSSWIFTUI
  • S04

    Enterprise iOS apps

    MDM-compatible builds that deploy through Apple Business Manager without touching the App Store. Certificate pinning, SSO through ASWebAuthenticationSession, Keychain-backed token storage, and offline-first sync for the warehouse or field team whose phone may not have signal. Built for regulated environments where security is a requirement rather than a feature.

    MDMKEYCHAINURLSESSIONSWIFTDATA
  • S05

    Internal field tools

    The spreadsheet your field team photographs and emails to a coordinator every Friday gets replaced with a real iPad and iPhone app — barcode scanning with AVFoundation, offline form submissions synced when connectivity returns, GPS tracks logged and uploaded in the background. Built for real field conditions and tested on real devices.

    SWIFTUIAVFOUNDATIONCORELOCATIONSQLITE
  • S06

    UIKit to SwiftUI migrations

    The UIKit codebase with five years of business logic doesn't get thrown away. UIHostingController wraps new SwiftUI screens inside existing UIKit navigation, the app ships to the App Store throughout the migration, and each screen moves independently without a flag-day that freezes your product roadmap for a quarter.

    SWIFTUIUIKITSWIFT 6SWIFT PACKAGES

The playbook

iOS development patterns
we ship on repeat.

These come up on almost every iOS engagement. Nothing experimental, just patterns that hold up as the team grows and the codebase ages.

  • P01

    SwiftUI-first, UIKit where it earns its place.

    New screens go in SwiftUI. UIKit stays for the components Apple hasn't finished porting yet — complex text editing, drag-and-drop with precise hit testing, custom collection layouts. We don't mix them for no reason, and we don't avoid UIKit when SwiftUI would fight us.

  • P02

    Swift Concurrency everywhere it applies.

    async/await replaces completion handlers. Actors guard shared mutable state instead of serial DispatchQueues. TaskGroups parallelise independent async work. The concurrency model is simpler to read, easier to test, and harder to race than the GCD patterns it replaces.

  • P03

    Swift Package modularisation.

    Each major feature lives in a Swift Package with explicit imports. Build times drop because Xcode only rebuilds what changed. Test targets run in isolation. The dependency graph is visible — if a feature imports something it shouldn't, the compiler says so before the PR lands.

  • P04

    Design tokens as typed SwiftUI extensions.

    Colour, spacing, and typography are typed extensions on Color, Font, and CGFloat rather than string literals pulled from an asset catalog by name. Light mode, dark mode, Dynamic Type, and accessibility contrast fall out of one token definition. Wrong usage fails at compile time.

  • P05

    Snapshot tests plus XCUITest on the critical paths.

    Point-Free's snapshot testing catches visual regressions without a human comparing screenshots. XCUITest covers the flows where a regression costs money — sign-in, purchase, deep link. CI runs both on every pull request, so nobody has to remember to plug in a device.

  • P06

    Incremental SwiftUI adoption for UIKit migrations.

    UIHostingController wraps a new SwiftUI screen inside existing UIKit navigation in a few lines. The App Store version keeps shipping throughout. Features move one at a time, each behind a flag, each with its own rollback path — so the migration never needs a feature freeze.

Signature case

Sociall,
through App Store review with a browser engine inside.

An iOS app that had to render five social platforms' web interfaces natively, block their ads at the browser level, and still pass Apple's review. The build embedded Chromium beneath a React Native UI — an unusual iOS architecture that needed the same things any iOS app does at review time: a clear privacy story, native-feeling navigation, and accessibility that holds across the whole app. It shipped in seven months.

Before

Five apps, five feeds · ads everywhere · nothing accessible across platforms

After

One App Store listing · feeds ad-free · accessibility standards met app-wide · 4.6★ at launch

  • App Store rating at launch4.6★
  • Kickoff to App Store7 mo
  • Creator content output
  • Accessibility standards met across the app100%

Engagement shape

Eight to ten weeks
to a shipped iOS app.

A typical iOS engagement, end to end. Screen by screen, with the current app on the App Store the whole time.

  • W01

    Audit + RFC

    Two senior iOS developers go through the codebase — Instruments profiling to find the real hot paths, a ViewController complexity inventory, a test coverage audit, and a check of every third-party dependency against Apple's current review guidelines. The output is a ranked RFC with effort estimates.

  • W02–03

    Foundation + first screen

    Swift Package structure gets established, the SwiftUI baseline goes in, MVVM boundaries get defined, one real production screen gets built from scratch and ships on TestFlight. Performance numbers come from a real iPhone under load, not a simulator on a fast Mac.

  • W04–08

    Screen by screen, not all at once

    Every remaining screen moves under a feature flag, UIKit and SwiftUI running side-by-side throughout. Each cutover has a rollback path. Your product team keeps shipping new features in parallel — the migration never becomes an excuse to freeze the roadmap.

  • W09+

    App Store submission and handoff

    Store listing assets, App Privacy Nutrition Labels, review guideline compliance check, first submission. App Store review typically runs 1–2 business days for a clean submission. Runbook handed to your team — or we stay on retainer for the next phase.

Stack

Tools we
Tools we reach
reach for for first.

The default stack for production iOS work.

Language
Swift 6 · SwiftUI · UIKit · Combine
Data
SwiftData · Core Data · Keychain · UserDefaults
Networking
URLSession · async/await · Codable
Testing
Swift Testing · XCTest · XCUITest · Swift Snapshot Testing
Tooling
Swift Package Manager · Xcode Cloud · Fastlane · SwiftLint
Infra
TestFlight · App Store Connect · Firebase · Sentry · Datadog
VOICES

What founders say
on the record.

Verified feedback from Upwork, Clutch, and reference calls we're happy to set up before you sign anything.

Evan Kanouse

Evan Kanouse

CEO, Modestly

Entalogics has successfully delivered extension prototypes on time, and we are impressed with their project management and the finished product. The client communicates with Entalogics via virtual meetings, email, and messaging apps.
Adam Strock

Adam Strock

Founder, Flourish Schools

Collaborating with Entalogics was a great experience. Communication was clear, we aligned quickly, and their team delivered high-quality code on time with thoughtful technical decisions.
Giles Whitman

Giles Whitman

CTO, SentryBay

Their Chromium expertise helped us ship a hardened browser with live threat controls and enterprise rollout support. Security operations became significantly faster.
George Irvin

George Irvin

Founder, G3 Ventures LLC

Entalogics delivered our custom Electron browser in six months with isolated profile workflows and stable policy sync. Agent onboarding improved by 55% after rollout.
Dani Keo

Dani Keo

Project Manager, Sociall

Entalogics built our iOS Chromium-based mobile app with a smooth native feel, stable media rendering, and reliable sync. We shipped faster and improved engagement after launch.
Project Manager

Project Manager

RozmeriGPT

The web dashboard and Chrome extension now share prompts, billing, and analytics in one platform. Our content turnaround improved 4x after launch.
IIYA KHODAKOVSKY

IIYA KHODAKOVSKY

Project Manager, Omni Browser

Entalogics built our Omni Browser on top of Chromium with deep product-level execution. They implemented an integrated VPN and Omni Crypto Wallet directly in the browser, made strong architectural decisions, and delivered quality code on schedule with clear communication.
Sherzod Khabibullayev

Sherzod Khabibullayev

Project Manager, Digital Office: Aura

Entalogics built Digital Office: Aura as a custom Chromium-based authentication platform. Their team modified Chromium internals and integrated our manual custom authentication flow with reliable implementation, fast delivery, and consistent communication.

Engagement

Three ways to work with us on
iOS development.

Nothing here is billed by the hour. Each option is a fixed quote or a rate you see up front.

FIXED SCOPEone-off build

Ship an iOS app, end-to-end.

One product, one fixed price, built entirely by senior iOS developers with no junior rotation. RFC to App Store submission in 8–14 weeks.

FIXED SCOPE

  • Zero juniors on client work
  • Fixed quote in week 1
  • Code, infra, runbook — yours
Plan a fixed build
DEDICATED TEAMmonthly

Need iOS engineers on your own team?

Different buyer, different page: senior Swift engineers in your Xcode project and your standups, priced per engineer per month rather than per project.

PER ENGINEER

  • Vetted on App Store review, not just Swift
  • Full-time, part-time, or hourly
  • Free replacement in the first two weeks
Hire iOS app developers
ENGAGEMENTcustom

Strategic iOS development partnership.

For product teams shipping across Apple's ecosystem: iPhone, iPad, Watch, Vision Pro. A long-term partner for architecture, performance work, and hiring.

PROCUREMENT-FRIENDLY

  • Multi-quarter roadmap
  • Architecture & hiring partner
  • Procurement-friendly paper
Talk to a senior engineer

Want the full breakdown? Mobile app development — the delivered-product page

Want iOS engineers on your own team instead? Hire iOS app developers

Shipping to enterprises through the App Store? Read what Apple's enterprise app rule changes mean

FAQ

Sharp questions,
straight answers.

SwiftUI or UIKit, native or React Native, App Store rejections. The questions that come up on most iOS calls.
New iOS apps start in SwiftUI — it's been production-ready since iOS 16 covered the vast majority of active devices, and Apple is clearly investing there rather than in UIKit. UIKit stays in the picture for two reasons: existing codebases with five years of UIKit business logic that don't justify a rewrite, and specific components SwiftUI still doesn't handle as cleanly. We migrate existing apps incrementally, not all at once, and we'll tell you which components to leave in UIKit until Apple catches up.
If your users need HealthKit, ARKit, CarPlay, Widgets, or Live Activities — go native. Those Apple frameworks have no clean cross-platform equivalent. If the app is data-driven with standard navigation — lists, forms, detail screens — React Native ships it to both iOS and Android faster than building two native apps. We'll tell you which fits on the first call.
Yes. UIHostingController wraps SwiftUI screens inside UIKit navigation cleanly, so the migration happens screen by screen without touching the existing UIKit code until each feature is ready. The App Store version ships new features throughout — we've done this enough times to know that asking for a feature freeze to do a migration is how migrations get cancelled.
It turns data races into compile errors. Shared mutable state has to live behind an actor or be marked Sendable, and completion-handler code that used to work on the main queue by accident stops compiling. The practical migration is module by module: turn on strict checking per Swift Package, fix the boundaries, and leave the legacy target in Swift 5 mode until it's ready. Flipping the whole project at once is how a migration stalls for a quarter.
Yes, including your navigation library, your dependency manager (SwiftPM, CocoaPods, or Carthage), and your CI setup (Xcode Cloud, Fastlane, or Bitrise). We adapt to what's already there. If something structural is going to cause a real problem, we flag it in the RFC with a specific recommendation.

Senior engineers

Tell us whatyou're building.

Thirty minutes with a senior engineer and a senior iOS developer, and a straight answer on whether native Swift is the right call or cross-platform gets you there faster for less.