# Known Issues

This page lists known issues with the Incode Onboarding Cordova Plugin, their status, and workarounds.

## Virtual environment crash on Android

**Status:** By design (security feature).

**Platform:** Android.

When running in a virtual or emulated environment, the app may crash with a `NullPointerException` originating in `ThemeConfiguration$Builder` and related repository classes. This crash is triggered by the SDK's hook and virtual-environment detection, which intentionally cause a native crash that application code cannot catch or handle.

As of 4.2.0, emulator and root detection no longer abort the flow; the onboarding continues normally. Hook and virtual-environment detection still trigger an unrecoverable native crash.

Example stack traces:

```java
java.lang.NullPointerException
    at com.incode.welcome_sdk.ThemeConfiguration$Builder.setLabelSmallStyle(SourceFile:1066)
    at com.incode.welcome_sdk.f.c(SourceFile:150)
    at com.incode.welcome_sdk.data.local.m.as(SourceFile:22)
    at com.incode.welcome_sdk.IncodeWelcome.startOnboardingSection(SourceFile:18)
```

```java
java.lang.NullPointerException: Attempt to get length of null array
    at com.incode.welcome_sdk.data.IncodeWelcomeRepository.d(SourceFile:320)
    at com.incode.welcome_sdk.data.IncodeWelcomeRepository.i(SourceFile:214)
```

**Workaround:** Do not run production builds in virtual environments. For development and testing on emulators, see [Emulator and simulator false security triggers](#emulator-and-simulator-false-security-triggers) below.

## Emulator and simulator false security triggers

**Status:** Workaround available.

**Platform:** All.

Running on simulators or emulators can trigger security checks that return errors such as `simulatorDetected`.

**Workaround:** Set `testMode` to `"true"` when calling [`initializeSDK()`](api-reference#initializesdk) on simulators and emulators. Use `testMode: "false"` on real devices in production, otherwise you may receive a `testModeEnabled` error.

## iOS double initialization

**Status:** By design.

**Platform:** iOS.

The iOS SDK guards against double initialization. Calling `initializeSDK()` more than once per app lifecycle is a no-op on iOS.

**Workaround:** Initialize once per app lifecycle. Use [`isInitialized()`](api-reference#isinitialized) to check state before attempting to reinitialize.

## setCommonConfig deprecated

**Status:** Deprecated since 4.6.0; scheduled for removal.

**Platform:** All.

`setCommonConfig()` is deprecated. It now forwards internally to [`showCloseButton()`](api-reference#showclosebutton) and logs a deprecation warning. It will be removed in a future major release.

**Workaround:** Use `showCloseButton(successCallback, errorCallback, allowUserToCancel)` instead.
