Documentation Index

Fetch the complete documentation index at: https://docs.darwinium.com/llms.txt

Use this file to discover all available pages before exploring further.

Release Notes SDK

Prev Next

Android

New Features / Notes

Version 2.4.1

Date: August 7th 2026

Stability Improvements

  • Improved presence of android.system group, by moving several attributes to collect async

  • Improved stability specific to certain models running Android 10

Version 2.4.0

Date: July 24th 2026

Audio and call detection improvements - audio device detail plus live-call direction and type

profiling.android.audio_device.mic_id

profiling.android.audio_device.mic_type

profiling.android.audio_device.mic_name

profiling.android.audio_device.call_direction (inbound/outbound)  

profiling.android.audio_device.call_type (cellular/voip)

Improved reliability of sim attributes: call_state, is_offhook and is_idle when call initiated during profiling.

Camera activity - detect when the camera is in use.

profiling.android.system.camera[*].is_active

Screen overlay detection - detect another app drawing over yours (overlay attacks). App lists require the accessibility service / permissions.

profiling.android.window_is_obscured
profiling.android.overlay_apps eg. [com.google.maps, com.whatsapp]

profiling.android.running_apps non-system apps eg. [com.android.dialer com.android.messaging]

Data roaming - report whether mobile data is roaming.

profiling.android.sim_info[].is_network_roaming

Device-transfer detection - new signal STORAGE_GUID_TIMESTAMP_ABNORMAL when the stored GUID predates app install (device transfer or restore).

Root detection - more methods, including native checks that Magisk DenyList tries to hide.

Huawei attribute support - added Huawei advertising id

profiling.android.huawei_advertising_id.

Requires your application to have dependency: com.huawei.hms:ads-identifier
Which in turn requires maven repository

maven {
      url 'https://developer.huawei.com/repo/'
      content {
          includeGroup "com.huawei.hms"
      }
 }

Location fallback - if GMS location provider fails to infer GPS/Fused location attributes, other providers will be polled as a fallback.

Populates existing attributes
profiling.android.location.*

profiling.android.location.provider informs which provider resolved location.

profiling.android.location.signals with:

CURRENT,LAST, FUSED_GMS, FUSED_PLATFORM, GPS, NETWORK,PASSIVE

MDM Detection

Added MDM signals to profiling.android.signals

MDM_ACTIVE_ADMINS    // Enrolled device admins (legacy admin layer). e.g. some admin/MDM agent active
MDM_DEVICE_OWNER     // Whether THIS app is the device/profile owner, e.g.  manages the whole device (company-owned/fully-managed).
MDM_PROFILE_OWNER    // Whether THIS app is the profile owner (manages a single profile only, e.g. a BYOD work profile).
MDM_MANAGED_PROFILE  // Running inside a managed (work) profile
MDM_APP_RESTRICTIONS // App restrictions pushed to us by an MDM (managed configuration)

Battery charging

Add battery attributes inline with iOS

profiling.android.battery_level * integer %

profiling.android.battery_state * string e.g. charging, plugged, unplugged.

(these attributes will populate in next minor platform release)

Device Forensics Attributes

Useful for detecting certain emulators

profiling.android.system.gpu_vendor
profiling.android.system.gpu_renderer
profiling.android.system.gpu_version
profiling.android.system.cpu_implementer
profiling.android.system.emulator_host_os

(these attributes will populate in next minor platform release)

collect() improvements

Attributes relying on permissions such as Location, WiFi and phone state are rechecked at end of collect() to improve their presence.

Note: These still cannot be guaranteed to be present, should there be too short time for profiling. Alternative function collectAsync gives the direct control over how long to wait for profiling.

Fixes

  • Timezone offset now in minutes (was seconds), matching iOS and web.

  • Fewer false ERROR_ON_PROFILING signals; removed the noisy PROFILING_NOT_STOPPED signal.

  • Timezone attribute now reported in minutes not seconds (misaligned with all other timezone attributes)

Version 2.3.3

Date: July 2nd 2026

  • Fixed issue where going from folded to unfolded state during profiling on certain activities would cause app freezes

Version 2.3.2

Date: June 17th 2026

  • Add Android DRM ID metadata attributes: profiling.android.drm.*

Version 2.3.1

Date: May 18th 2026

  • Add Android DRM ID to profiling

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.4.0

Date: July 24th 2026

Audio and call detection - audio device detail plus live-call direction

profiling.ios.audio_device.mic_id

profiling.ios.audio_device.mic_type

profiling.ios.audio_device.mic_name

profiling.ios.audio_device.call_direction

App cloning and tampering - detect sideloaded, cloned, or repackaged apps without a jailbreak (PlayCover, Sideloadly, TrollStore, debug builds).

profiling.ios.system.app.id

profiling.ios.dev_team_id

profiling.ios.cd_hash

profiling.ios.system.app.app_signals values: NO_APP_STORE_RECEIPT, NO_TEAM_ID, NO_SIGNING_ID, NO_EMBEDDED_PROVISION, NO_APPLE_SIGNATURE, ADHOC_SIGNATURE, DEBUG_BUILD

Mac Catalyst detection - detect an app running on a Mac, via three more app_signals values: MAC_CATALYST, IOS_ON_MAC, SIMULATOR.

Network context - iOS has no direct roaming flag, so two related attributes.

profiling.ios.system.network.is_constrained (Low Data Mode)

profiling.ios.cellular_data_disabled

Keyboard biometrics - capture auto-filled and programmatically-set fields via onEvent() hooks onTextChange()), matching Android.

Shared device identifier - shared UUID reinstated (removed in 2.3.1) so the same device is recognised across a publisher's apps.

Device Forensics Attributes

Useful for detecting certain emulators
profiling.ios.system.host_cpu_brand

profiling.ios.system.host_user

(attributes in next minor platform release)

collect() improvements

Attributes relying on permissions such as Location, WiFi and phone state are rechecked at end of collect() to improve their presence.

Note: These still cannot be guaranteed to be present, should there be too short time for profiling. Alternative function collectAsync gives the direct control over how long to wait for profiling.

Fixes

  • Fixed a crash when collect() was called without start().

  • Mock location now fires on every event, not just the first.

  • Fixed frequent false FILE_GUID_TIMESTAMP_ABNORMAL and HTTPS_PROFILING_SERVER_RESPONSE_WRONG signals.

Version 2.3.1

Date: May 15th 2026

  • Fix prompting for biometric authentication

  • Fix longer profile blob string

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