Cross-Platform App Development

Field Adjuster Apps on a Shared Core

Android and iOS adjuster apps sharing one Kotlin Multiplatform core for assessment rules, sync and offline data.

View live demo Opens a working demo with sample content in a new tab.
Northshore Insurance demo on desktop and phone

On location

  • Witley Bay Bingo Hall roof damage — Northshore Insurance
    Witley Bay Bingo Hall roof damagePhoto: Simon_Cotterill (CC0)
  • Lightning Storm — Northshore Insurance
    Lightning StormPhoto: Brandon Morgan (CC0)
  • House Home — Northshore Insurance
    House HomePhoto: Binyamin Mellish (CC0)
  • Storm Clouds — Northshore Insurance
    Storm CloudsPhoto: Free Nature Stock (CC0)
  • Clearing fallen trees — Northshore Insurance
    Clearing fallen treesPhoto: USFWS/Southeast (CC BY 2.0)

About the Project

This is a Kotlin Multiplatform app development project for a regional insurance group whose loss adjusters assess property, motor and liability claims on site. The group already had two native apps, one for Android and one for iPhone. Over time they had drifted apart, and the drift had reached the one place it could not be tolerated: the settlement figure.

The calculation behind every settlement — excess, depreciation, policy limits — had been implemented twice, by two teams, in two languages. When the rules changed, Android usually shipped first and iOS followed weeks later, and in between the same damage could produce different numbers depending on which phone the adjuster carried. We rebuilt the apps around one shared core so that, by construction, they always agree.

About the Client

The client is a regional insurance group with a team of field adjusters who visit homes, vehicles and business premises after a claim. Their work happens in flooded basements, rural farmhouses and car parks, often with little or no mobile signal, and their conclusions turn directly into money paid to customers.

The group wanted to keep native apps: its adjusters were attached to the feel of their platform, and accessibility features and camera handling matter on site. What it could not keep was two independent versions of the rules that decide what a claim is worth.

Project Goals

  • Guarantee identical settlement calculations on Android and iOS.
  • Release rule changes to both platforms at the same time.
  • Work fully offline in basements and rural areas, then sync safely.
  • Keep a genuinely native interface on each platform.
  • Test the financially sensitive logic once, thoroughly.

Project Overview

The Challenge and Our Solution

The Challenge

Two separate native apps had drifted apart. The settlement calculation was implemented twice, and a rule change in the Android release took three weeks to reach iOS — during which the two apps could produce different figures for the same damage. Adjusters worked in basements and rural properties with no signal, so everything also had to run offline.

Our Solution

We extracted the parts that must never differ — assessment rules, excess and depreciation calculations, validation, offline storage and sync — into a Kotlin Multiplatform module with one set of unit tests. The Android app kept Jetpack Compose and the iOS app kept SwiftUI, so each still feels native. Offline data uses one SQLDelight schema compiled for both platforms, and sync conflicts are resolved by the same shared code on either device.

One Rulebook, Shared Between Two Native Apps

We identified everything that must never differ between platforms — assessment rules, excess and depreciation calculations, validation, the offline data model and sync — and moved it into a Kotlin Multiplatform module. That module compiles to native code for both Android and iOS, so each app calls the same logic rather than a reimplementation of it.

The result is that a settlement figure is no longer the product of two codebases that happen to agree. It is produced by one piece of code, reviewed once, and shipped to both platforms together.

  • Assessment, excess and depreciation rules written once
  • Validation shared between platforms
  • Native compilation for Android and iOS

Offline-First by Design

Adjusters cannot wait for a signal before recording a claim. The apps store everything locally in a single SQLDelight schema compiled for both platforms, so the data model is identical on every device. Photos, measurements and notes are captured offline and attached to the claim record.

When a connection returns, sync runs in the shared core as well. Conflicts — for example, an office update made while the adjuster was offline — are resolved by the same code on either platform, which means the outcome no longer depends on which phone did the syncing.

  • One SQLDelight schema for both platforms
  • Evidence captured offline and synced later
  • Conflict resolution in shared code

Native Interfaces Without Compromise

Sharing logic did not mean sharing a lowest-common-denominator interface. The Android app kept Jetpack Compose and the iOS app kept SwiftUI, each following its platform’s conventions for navigation, typography, camera access and accessibility.

Adjusters on both platforms got the same capabilities at the same time, while still using an app that feels like it belongs on their phone. Interface work can now focus on usability, because correctness lives in the core.

  • Jetpack Compose on Android
  • SwiftUI on iOS
  • Same features released together

Testing the Logic That Carries Financial Risk

Because the rules live in one module, they are covered by one shared test suite written with Kotest. Every rule change runs against the same scenarios — partial losses, limits, excesses, depreciation schedules — before it reaches either app.

Previously, the two implementations had to be tested separately and still drifted. Now a rule change is tested once and released to Android and iOS in the same week, rather than three weeks apart.

  • One Kotest suite for the shared core
  • Scenario tests for settlement rules
  • Same-week releases on both platforms

Our Process

How We Delivered It

  1. Comparing the Two Apps

    We traced the settlement calculation through both existing codebases and documented every difference we found.

  2. Drawing the Shared Boundary

    We agreed exactly which logic belongs in the shared core and which stays native, so neither side became a compromise.

  3. Building the Core and Its Tests

    Rules, validation, the offline schema and sync were rebuilt in Kotlin Multiplatform with a scenario-based test suite.

  4. Connecting Compose and SwiftUI

    Both native apps were wired to the shared core screen by screen, keeping their platform look and feel.

  5. Field Trials and Rollout

    Adjusters trialled the apps in low-signal locations before a coordinated release on both stores.

Key Features

What We Delivered

  • Shared assessment engine

    Excess, depreciation and settlement rules written once and tested once.

  • One offline schema

    SQLDelight database and sync logic compiled natively for Android and iOS.

  • Native interfaces

    Jetpack Compose on Android, SwiftUI on iOS — each following its platform.

  • Evidence capture

    Photos, measurements and notes captured offline and synced with the claim record.

Outcome

Results and Impact

  • Settlement calculations identical on both platforms by construction.
  • Rule changes released to Android and iOS in the same week, not three apart.
  • One shared test suite covering the logic that carries financial risk.
  • Native interfaces retained on both platforms — no compromise in feel.

Client Feedback

What the Client Says

★★★★★

Sharing the assessment rules between Android and iOS ended a class of bug we had lived with for years. The two apps cannot disagree now, and a rule change reaches both in the same week instead of three apart.

Mobile LeadRegional insurance group

Services

Services Behind This Project

The Kotlin Multiplatform, Mobile App expertise we used to build this cross-platform app development — and can bring to yours.

  • Kotlin Multiplatform Development

    Share business logic across Android and iOS with Kotlin Multiplatform — native Compose and SwiftUI interfaces on one tested core.

  • Mobile App Development

    High-performance Android and iPhone apps built with Flutter, Dart, Kotlin and Swift — from idea and UI/UX design to Google Play and App Store launch.

FAQ

Frequently Asked Questions

What is Kotlin Multiplatform and why use it here?

Kotlin Multiplatform lets one Kotlin codebase compile to native code for Android and iOS. It suits apps where business logic must be identical on both platforms but each interface should stay fully native. For an insurer, sharing the settlement rules removes the risk of two apps calculating different figures for the same claim.

Do the apps still feel native on iPhone and Android?

Yes. Only the logic is shared. The iPhone app uses SwiftUI and the Android app uses Jetpack Compose, so navigation, typography, camera handling and accessibility follow each platform’s conventions. Users get the same features at the same time without a cross-platform look.

How does the app work without mobile signal?

All claim data, photos and measurements are stored locally in a shared database schema. Adjusters can complete assessments offline, and the app syncs automatically when a connection returns. Conflicts are resolved by the same shared code on both platforms, so the result is consistent.

Can existing native apps be moved to a shared core gradually?

Usually, yes. We start by extracting the most critical and most duplicated logic — here, the settlement rules — and connect both apps to it, then move further pieces over time. This avoids a risky big-bang rewrite and delivers the consistency benefit early.

How is financially sensitive logic tested?

The shared rules have one scenario-based test suite covering limits, excesses, depreciation and partial losses. Every change runs against it before release. Testing once, rather than maintaining two separate suites, is what allows rule changes to ship to both platforms in the same week.

What drives the cost of a project like this?

Cost depends on how much logic must be shared, the complexity of the rules and offline sync, how many screens each native app has, and how much of the existing apps can be kept. An audit of the current codebases is the best starting point for a reliable estimate.

Similar Work

Related Projects

Case studies built with the same technologies or for similar needs.

  • Returns Warehouse Forklift moving boxes — Meridian 3PL
    • Kotlin
    • Jetpack Compose
    • Room

    Android App Development

    Warehouse Pick & Pack Android App

    A native Kotlin app for rugged scanners that keeps working when the warehouse Wi-Fi does not.

  • Room Interior — Harbour Hotels
    • Swift
    • SwiftUI
    • Apple Wallet

    iOS App Development

    Hotel Group Guest App

    A SwiftUI app with Apple Wallet room keys, Live Activities and in-stay service requests.

  • Concert Festival — Fieldgate Events
    • Kotlin
    • Jetpack Compose
    • Room

    Android App Development

    Event Ticketing Gate Scanner App

    A native Kotlin scanner validating 25,000 tickets an hour at the gate, with no dependence on venue Wi-Fi.

  • Car Interior — Alta Rentals
    • Swift
    • SwiftUI
    • Core Bluetooth

    iOS App Development

    Keyless Car Rental App

    A SwiftUI app that replaces the rental desk — book, verify, photograph damage and unlock the car by Bluetooth.

  • Red Tractor — Field & Furrow Supplies
    • WordPress
    • WooCommerce
    • PHP

    WooCommerce eCommerce

    Tractor Cleaning & Equipment Care – WooCommerce Store

    A WooCommerce online store for tractor cleaning, equipment maintenance, paint correction, oxidation removal and foam cleaning products.

  • Dark Chocolate — Cocoa & Co. Gifts
    • Shopify
    • Liquid
    • Online Store 2.0

    Shopify eCommerce

    Chocolate Gift Baskets – Shopify Store for Every Occasion

    A Shopify store for chocolate gift baskets, organised by occasion — birthdays, weddings, anniversaries, holidays and corporate gifting.

Let’s Connect

Want Results Like These?

Share your project details and our experts will get back to you within one business day with the best solution — free consultation, no obligation.