Release Notes SDK

Prev Next

Android

New Features / Notes

Version 2.3.0

Date: April 8th 2026

Remote control and screen casting detection

We now detect when a device screen is being cast or remotely controlled. The SDK captures display context attributes for each connected display, including the display name, resolution, refresh rate, and state. This lets you identify sessions running through tools like TeamViewer or screen casting to secondary displays.

  • profiling.android.system.display[].context - display identifier (e.g. DEFAULT, DISPLAY_2)

  • profiling.android.system.display[].name - display name (e.g. "Built-in Screen", "Cast Receiver")

  • profiling.android.system.display[].width - display width in pixels

  • profiling.android.system.display[].height - display height in pixels

  • profiling.android.system.display[].refresh_rate - refresh rate in Hz

  • profiling.android.system.display[].state - current state (STATE_ON, STATE_OFF, STATE_VR, etc.)

Mock location detection

The SDK can now detect when a device's GPS location is being faked by spoofing apps (such as iAnyGo or similar tools). When a mock location is active, you get the name of the app providing the fake location.

  • profiling.android.location.is_mock - true when location data is mocked

  • profiling.android.location.is_mock_provider - true when a mock provider is active

  • profiling.android.location.mock_provider - name of the app supplying the mocked location

Requires:

  • Permission: ACCESS_COARSE_LOCATION

  • Dependency:  com.google.android.gms:play-services-location

Packages inspection

We've added metadata attributes concerning installed packages. These can be useful for detecting virtual or unusual Android environments, where eg. minimal packages are installed.

  • profiling.android.app_package_source - source of the app package

  • profiling.android.app_package_installer - installer package name

  • profiling.android.package_number - total package count

  • profiling.android.nonsystem_package_number - non-system package count

Requires:

  • Permission: QUERY_ALL_PACKAGES

App tampering detection

We've expanded app integrity checks with granular hash values for individual APK components. These attributes help identify repackaged or modified apps, injected libraries, and active debugging.

  • profiling.android.apk_classes_hash - hash of classes.dex

  • profiling.android.apk_resources_hash - hash of resources

  • profiling.android.apk_manifest_hash - hash of AndroidManifest

  • profiling.android.apk_native_lib_hash - hash of native libraries

  • profiling.android.libc_hash - hash of libc

  • profiling.android.proc_maps_libs - loaded libraries from /proc maps

  • profiling.android.tracer_pid - tracer process ID (non-zero indicates debugging)

  • profiling.android.rwxp_count - count of read-write-execute memory pages

  • profiling.android.memfd_entries - in-memory file descriptors

  • profiling.android.tmp_libs - libraries loaded from temporary paths

Multi-user profiling

Android supports multiple user profiles on a single device. This feature is sometimes abused for fraud by switching between user accounts. We now detect when multi-user mode is enabled and report details about the current user profile.

  • profiling.android.settings.user_switch_enabled - true when user switching is enabled on the device

  • profiling.android.system.is_system_user - true when the current user is the primary (system) user

  • profiling.android.system.user_creation_time - timestamp of when the current user profile was created

  • profiling.android.system.user_serial_number - serial number of the current user profile

React Native biometrics

React Native integrations can now pass element references directly (via useRef) for biometric field detection, in addition to CSS selectors. This gives more reliable field binding in React Native apps.

Supported version change: minSDK raised to 23

The minimum Android SDK version has been raised from 21 to 23 (Android 6.0). This was required to upgrade the advertising ID library (which Google Play Console was flagging as problematic) and to bring all dependency libraries up to date. Jetpack and AndroidX libraries have required minSdk 23 or higher since June 2025.

Version 2.2.0

Date: December 3rd 2025

  • profiling.android.all_languages attribute added

  • Obfuscation added to more attributes in profiling protobuf

  • Biometrics stats collection can now cover more events

  • Bug fix: instances of missing local_storage_guid

  • Bug fix: resolving class conflicts with select other apps

Version 2.1.0

Date: September 16 2025

  • Detecting system features supported on phone (not necessarily enabled)

    • profiling.android.system.features

    • FACE           // The device has biometric hardware to perform face authentication

      IRIS           // The device has biometric hardware to perform iris authentication

      FINGERPRINT    // The device has biometric hardware to detect a fingerprint

      NFC            // The device can communicate using Near-Field Communications (NFC).

      BLUETOOTH      // The device is capable of communicating with other devices via Bluetooth.

      CAMERA         // The device has a back camera

      CAMERA_FRONT   // The device has a front facing camera.

      CAMERA_FLASH   // The device's camera supports flash.

      AUTOMOTIVE     // This is a device dedicated to showing UI on a vehicle headunit.

      TELEVISION     // This is a device dedicated to showing UI on a television

      WATCH          // This is a device dedicated to showing UI on a watch

  • Detect if using an esim (Phone read permission required

    • profiling.android.sim_info[AndroidSimContext].is_esim

  • Detect default App Store

    • profiling.android.system.app_store

  • Detecting camera attributes

    • profiling.android.system.camera[CameraContext].number_of_characteristics

    • profiling.android.system.camera[CameraContext].facing

    • profiling.android.system.camera[CameraContext].max_face_count

    • profiling.android.system.camera[CameraContext].max_digital_zoom

  • Support WEBRTC IP Address

  • Increased the AGP(Android Gradle Plugin Version) to 8.9.2

  • Increased Gradle version to 8.11.1

  • Minimise reflection usage to improve performance

  • Instructions for when Proguard in use

Version 2.0.2

Date: July 28, 2025

  • Bug fix: Restore missing storage_guid, file_guid when using multiple instances

Version 2.0.1

Date: May 14, 2025

  • Move rootbeer under com.darwinium.dwn_sdk

Version 2.0.0

Date: March 25, 2025

  • Improvements to root detection

    • Expanded root kit detection (Magisk, Frida, etc.)

    • New forensic signals (frida_port, boot_state, scanned packages)

    • See: Android Root Detection

  • Formalised support for React Native applications

  • Support multiple sdk instances

    • Allows behavioural biometrics to be isolated when profiled from different objects

  • Stability and performance improvements

Version 1.14.39

Date: January 7, 2025

  • Support jetpack compose elements

    • Extends behavioural biometrics keyboard profiling to these UI input elements

Version 1.14.38

Date: December 17, 2024

  • Add audio device detection

iOS

New Features / Notes

Version 2.3.0

Date: April 13th 2026

Remote control and screen mirroring detection

The SDK now detects when an iOS device's screen is being mirrored or remotely controlled. By combining two new boolean flags, you can distinguish between passive screen mirroring (e.g. AirPlay to a TV) and active remote control sessions.

New attributes:

  • profiling.ios.system.screen.mirrored - true when the screen is being mirrored

  • profiling.ios.system.screen.is_captured - true when the screen is being captured

When mirrored is true and is_captured is false, the device screen is mirrored. When both are true, a remote control session is active.

Mock location detection

We now detect when location data is being spoofed on iOS, covering tools like iAnyGo that manipulate GPS coordinates.

  • profiling.ios.system.location.is_mock - true when the device location is mocked

PlayCover detection

PlayCover allows iOS apps to run on macOS by wrapping them into Mac-compatible binaries. It injects a framework (PlayTools) that spoofs platform identifiers to make the Mac appear as an iPad. We now detect this at multiple levels - including injected dylibs, hardware mismatches, and filesystem artefacts.

  • profiling.ios.system.playcover_detected - true when PlayCover environment is detected

  • profiling.ios.system.playcover_signals - specific signals that triggered the detection

Accessibility settings detection

The SDK now reports which assistive technologies are active on the device. These attributes can be useful context when evaluating behavioural biometrics, since assistive tools change how users interact with the app and can be abused by malware automation

  • profiling.ios.system.device.voiceover_running - true when VoiceOver is active

  • profiling.ios.system.device.switch_control_running - true when Switch Control is active

  • profiling.ios.system.device.assistive_touch_running - true when AssistiveTouch is active

App tampering detection

We've added an application hash attribute for iOS, bringing feature parity with Android for detecting repackaged or modified apps.

  • profiling.ios.application_hash - hash of the application bundle

Fixes

Resolved an issue where DwnProfilingSDK.start() was not visible in certain Swift compiler versions due to a conditional compilation directive.

Version 2.2.0

Date: December 10, 2025

  • Support WEBRTC IP address profiling

  • profiling.device.identifier consistency between apps under same publisher

  • profiling.ios.biometric_auth_type  default auth method on device (eg. TOUCH_ID, FACE_ID)

  • profiling.ios.unlock_duration  how long user took to unlock from lock screen

  • profiling.ios.system.locale.all_languages list of languages installed on device

Version 2.1.1

Date: July 28, 2025

  • Stability improvements

Version 2.1.0

Date: May 20, 2025

  • Improvements to jailbreak detection

    • Wider coverage of methods triggering boolean profiling.ios.system.is_jailbroken

  • Safeguard: Provide iOS podfile without tag

    • No tag specified in CocoaPods package manager defaults to latest stable release

  • Bug fix: Correct creation time for secure_id

Version 2.0.0

Date: April 16, 2025

  • Support multiple sdk instances

    • Allows behavioural biometrics to be isolated when profiled from different objects

  • Stability and performance improvements

Version 1.0.31

Date: December 17, 2024

  • Add audio device detection