Engineering

Supported environments

How to judge where mobile app protection works: OS versions, devices, frameworks and distribution channels, stated per control for Android and iOS.

  • Android
  • iOS
  • Flutter
  • React Native
  • Stated per control

    Support is listed control by control and OS by OS, because a shared category name says nothing about how a check behaves on each platform.

  • Your devices, not a lab

    The environments that matter are the ones your users carry, including older phones, managed devices and devices without Google services.

  • Legitimate users first

    Normal configurations in each supported environment are checked for false alarms before a response goes beyond observing.

Environments Otukan plans for

The situations that decide whether protection works for your whole audience.

  • Checks inside the app

    Otukan's runtime checks run in your app's own process, so they keep working where an operating system attestation service is unavailable.

  • Managed and dedicated devices

    Work profiles, supervised iPhones and kiosk devices are planned for, so enterprise controls are not mistaken for tampering.

  • Framework layers

    Flutter and React Native apps are assessed for both the framework code and the native shell around it.

  • Distribution channels

    Store, enterprise and alternative channels are agreed per app, since each changes signing and integrity expectations.

How we agree your environment scope

  1. Profile your audience

    You share the OS versions, device classes and channels that make up your user base.

  2. Map the controls

    Otukan's engineers state, per control and per OS, how each one behaves in those environments.

  3. Test the edges

    Your team runs protected builds on the oldest, newest and most unusual environments you support.

  4. Confirm user impact

    Normal configurations are checked for false alarms before any response goes beyond observing.

  5. Keep it current

    New OS releases and devices are added to the scope as your audience changes.

Evaluate supported environments by setting your real user base against how each protection control behaves there, one control and one operating system at a time. Otukan states support that way for Android and iOS apps built natively or with Flutter or React Native, and agrees the environment scope with you before any response goes live. An environment covers more than an OS version: it includes the device class, whether Google services are present, how the device is managed and how the app was installed. This page explains how to define that scope, who is responsible for what in it, and how to test it. Version numbers are confirmed per app.

The flows and boundaries that depend on environment

A protected app draws a trust boundary between what runs on the device and what your backend decides. Environment decides how much the device side can tell you.

Sign-in and account recovery depend on knowing whether the app is genuine and the device is in a normal state. Payments and transfers depend on the same, plus whether another app can read or draw over the screen. Content and licence checks depend on whether the app came from the channel you expect. Each of those flows crosses the boundary with a signal, and the quality of that signal varies by environment:

  • Current consumer phones. The richest signals: runtime checks plus the operating system’s own attestation service.
  • Older OS versions still in use. Runtime checks apply; some newer OS protections are absent, which is itself worth reporting.
  • Android devices without Google services. Play Integrity is unavailable; checks inside the app carry the load.
  • Managed and dedicated devices. Enterprise policies change what “normal” looks like and must not read as tampering.
  • Alternative distribution. Enterprise, test or third-party channels change which signing certificate is expected.

Who is responsible in each environment

Protection works when the app, the operating system and your backend each do the part they are good at.

ResponsibilityApp (with Otukan)OS and platform servicesYour backend
Runtime stateChecks for hooking, debugging, emulation, root or jailbreakSandboxing, code signing enforcementReceives the finding with the request
App genuinenessIntegrity checks against the expected certificateInstall-time signature verificationDecides whether a request is trusted
Device attestationRequests the platform’s attestation where availablePlay Integrity on Android, App Attest on iOSVerifies the attestation result on the server
Missing capabilityReports that a service is unavailableDeclares what the device supportsTreats absence as a signal, not a failure
ResponseApplies the response set for the flowNot involvedAdjusts policy without a new release where designed

Android and iOS stay separate in every row. Root detection and jailbreak detection look for different evidence. Play Integrity requires Google Play services on the device, while App Attest is an iOS service that is not available on the iOS Simulator and is checked for support on each device before use. Otukan writes each control’s behaviour for each platform rather than assuming one from the other.

Evaluating an environment scope

Define the matrix

List the OS versions, device classes, managed configurations, frameworks and distribution channels your users actually have, from your own analytics. Otukan’s engineers then state, per control and per OS, how each one behaves in each cell, including the cells where a platform service is missing.

Collect evidence per cell

For each environment you support, keep a protected-build test result: install and update, sign-in, the sensitive flow and the signal your backend received. Record the OS version, device model, app version and protection profile version beside it.

Check user impact

A supported environment is one where legitimate users are not blocked. Test normal configurations that look unusual: developer options enabled, accessibility services in use, work profiles, supervised devices and older hardware. Keep new controls in observe mode until those tests pass, then choose the response per flow.

Revisit the scope

An environment scope ages. Each major OS release, a new device class in your analytics or a new distribution channel is a reason to add rows to the matrix and run the edge tests again. Otukan tests its protection against new platform releases and brings the results to your team, so the scope stays a living document rather than a one-off approval.

For performance and compatibility testing on protected builds, see mobile app protection performance. Platform notes are on Android app security and iOS app security. For the full product scope, return to mobile app security.

Common questions

  • Why is support stated per control rather than per platform?

    Because a control relies on different operating system features on each platform. Root detection on Android and jailbreak detection on iOS look for different evidence. Attestation uses Play Integrity on Android and App Attest on iOS, each with its own device requirements. A single platform tick would hide those differences, so Otukan states each control separately.

  • What about Android devices without Google Play services?

    Play Integrity depends on Google Play services, so it is not available on those devices. Otukan's runtime checks run inside your app and do not depend on it, and your backend can treat a missing attestation result as its own signal rather than as a failure. Otukan's engineers agree that handling with you for the markets you serve.

  • Do developer options or accessibility services cause false alarms?

    They are normal settings for many legitimate users, so Otukan does not treat them as evidence of an attack on their own. Where a setting matters for a specific flow, such as an accessibility service that can read the screen during a payment, you choose the response for that flow and test it with real users' configurations first.

Map protection to your real user base

Tell us your platforms, frameworks, the OS versions and device types your users have and how you distribute the app. We do not ask for binaries, signing keys, device lists with personal data or production credentials.

Or request a technical demo