Skip to content

Releases: ScoRpiiTech/autoroid

Autoroid v1.3.0

Choose a tag to compare

@github-actions github-actions released this 19 Sep 20:18

[v1.3.0] - Autoroid Power Suite: Smart Event Triggers, Background App Freezer, NetCut Firewall & Shizuku Wireless ADB Starter

  • Date: 2026-09-20
  • Status: Verified (Build Successful, Release APK Signed & Scheme v3 Verified)

1. Smart Event Triggers for Workflows (feature/workflow/trigger)

  • WorkflowTrigger.kt: Polymorphic trigger system allowing automations to execute autonomously in the background without user intervention:
    • PowerConnected & PowerDisconnected: Responds to battery charger plug/unplug events.
    • ScreenUnlocked & ScreenOff: Reacts to device lock/unlock transitions.
    • BatteryLow: Triggers when battery level drops to threshold (default $\le$ 20%).
    • WifiConnected: Detects Wi-Fi association (all networks or specific SSID).
  • WorkflowTriggerManager.kt: Dynamic broadcast listener and coordinator. Continuously evaluates incoming system events against configured workflow triggers and schedules execution via WorkflowRunner.executeWorkflow().
  • Workflow UI Expansion (WorkflowCard.kt, WorkflowEditorDialog.kt): Added trigger configuration UI with quick trigger dropdown, live trigger badges, and persistent trigger list serialization in autoroid_workflows.json.

2. Background App Freezer & Deep Sleep (feature/freezer)

  • FrozenApp.kt & AppFreezerRepository.kt: Model and persistent configuration storage for managed apps.
  • AppFreezerManager.kt:
    • Elevated app suspension via pm suspend / pm unsuspend and process termination (am force-stop).
    • Auto-freeze on screen off: When the display turns off, Autoroid automatically executes deep sleep force-stops and suspensions on designated background battery-drain apps.
  • AppFreezerCard.kt: Integrated into Bank Shield tab with package search, quick freeze toggles, instant kill buttons, and auto-freeze configuration.

3. NetCut Per-App Firewall (feature/netcut)

  • NetCutApp.kt & NetCutRepository.kt: Internet rule tracking per application.
  • NetCutManager.kt:
    • Kernel-level IP filtering (iptables and ip6tables OUTPUT -m owner --uid-owner <UID> -j DROP) under Root.
    • Strict network policy isolation (cmd netpolicy add restrict-background-blacklist <UID> and appops set <package> RUN_IN_BACKGROUND ignore) under Shizuku/ADB.
    • Cuts off selected apps from cellular and Wi-Fi data completely without needing a battery-draining local VPN tunnel.
  • NetCutCard.kt: Cyberpunk per-app internet toggle card embedded in the Shield tab.

4. Shizuku Wireless ADB Auto-Starter (feature/shizuku)

  • ShizukuStarterManager.kt:
    • Detects active wireless debugging ports (adb.tls.port / service.adb.tls.port).
    • Launches the Shizuku server daemon (/data/user_de/0/moe.shizuku.privileged.api/bin/shizuku_starter) in 1 tap via Root or local shell ADB loops.
    • Provides instant status diagnostics and manual port connection fallback.
  • ShizukuStarterCard.kt: Integrated into the Console tab for rapid privileged daemon recovery.

5. Build & Verification

  • Bumped versionCode = 20 and versionName = "1.3.0".
  • Verified release APK with apksigner (APK Signature Scheme v3).

Autoroid v1.2.18

Choose a tag to compare

@github-actions github-actions released this 18 Sep 22:28

[v1.2.18] - Modern Cyber-Glassmorphic UI & Navigation Makeover

  • Date: 2026-09-19
  • Status: Verified (Build Successful, Release APK Signed & Scheme v3 Verified)

1. Navigation Architecture & De-crowding

  • Replaced the crowded, monolithic single-page LazyColumn with a modern multi-tab navigation shell powered by a floating glassmorphic bottom bar.
  • AutoroidNavTab.kt: Defines 4 dedicated, focused feature spaces:
    1. IMS & Telephony (ImsScreenView.kt): Hero showcase for Carrier & IMS Patcher (VoLTE, VoWiFi, VoNR 5G, 5G+, signal calibration, carrier branding) and Dual-SIM Data & Schedule manager.
    2. Bank Shield (ShieldScreenView.kt): Bank Mode anti-detection accessibility shield with glowing halo status ring (Protected / Vulnerable / All Clear), live service registry breakdown, and Quick Settings tile guide.
    3. Automations (WorkflowsScreenView.kt): Dynamic app macro feed, 1-tap macro runner, and Screen Pointer Location coordinate inspector.
    4. Console (TerminalScreenView.kt): Elevated power shell command runner with quick command chips (id, getprop, dumpsys telephony.registry), clearable logs, and syntax-styled terminal output.

2. Modern Floating Navigation Bar (FloatingBottomBar.kt)

  • Translucent glassmorphic pill (FloatingBarGradient) with 26dp rounded corners, subtle cyber borders, and drop shadow.
  • Animated selection indicators with smooth spring-based pill expansion and glowing emerald status dots.
  • Respects Android edge-to-edge system navigation bars (navigationBarsPadding()).

3. Top App Bar Modernization

  • Replaced static text headers with an interactive Top App Bar:
    • High-tech "AUTOROID" cyber branding with letter spacing.
    • Interactive Live Privilege Pill (ROOT, SHIZUKU, ADB, UNAUTHORIZED) with dynamic pulsing color badges and 1-tap elevation prompt.
    • Status-aware Update button with emerald glow when GitHub updates are available.
    • System guide and fast refresh actions.

4. Theme & Token Overhaul (Theme.kt)

  • Introduced modern cyber-glassmorphic styling tokens:
    • ElectricBlue (#00A3FF), NeonPurple (#A855F7), GlassSurface (#161E2E), GlassBorder (#4000E5FF).
    • Added gradient brushes (CyberCyanGradient, NeonGreenGradient, FloatingBarGradient).

5. Build & Verification

  • Bumped versionCode = 19 and versionName = "1.2.18".
  • Compiled with JDK 19, AGP 8.6.0, Target SDK 36.
  • Verified release APK with apksigner (APK Signature Scheme v3).

Autoroid v1.2.17

Choose a tag to compare

@github-actions github-actions released this 18 Sep 20:50

[v1.2.17] - Complete Turbo IMS / TensorIMS Feature Parity

  • Date: 2026-09-19
  • Status: Verified (Build Successful, Release APK Signed & Scheme v3 Verified)

1. 100% Feature Parity with TensorIMS

  • Added all remaining features, flags, and overrides from TensorIMS (Turbo IMS) to Autoroid:
    • Cross-SIM Calling (carrier_cross_sim_calling_available_bool): Enables Wi-Fi Calling over secondary SIM cellular data when off-grid or traveling.
    • 5G NR Modem Announcement (carrier_nr_availabilities_int_array): Explicitly announces Standalone (SA) and Non-Standalone (NSA) 5G availability [1, 2] to the baseband modem and OS.
    • 5G+ / Ultra Wideband Icon Overrides (FiveGPlusConfig): Configures SystemUI status bar icons to display 5G+ / 5G_UW indicator on mid/high-band 5G networks (C-Band, mmWave).
    • 5G Signal Boundary Calibration (5g_nr_ssrsrp_thresholds_int_array): Overrides SS-RSRP threshold boundaries to [-128, -98 dBm] for aggressive 5G cell latching and improved fringe reception.
    • Enhanced 4G LTE Controls (enhanced_4g_lte_on_by_default_bool): Enforces default 4G advanced calling and provision state.
    • Status Bar Icon Customizations:
      • show_4g_for_lte_data_icon_bool: Replaces standard "LTE" text with "4G" in the status bar.
      • hide_lte_plus_data_icon_bool: Hides the carrier aggregation "LTE+" badge for a cleaner status bar.
    • Android Settings Visibility: Ensures VoLTE and Wi-Fi Calling toggles remain unhidden in device settings (editable_enhanced_4g_lte_bool, editable_wfc_mode_bool).
    • Custom Carrier Name (carrier_name_string): Overrides the network operator name displayed on lock screen and status bar.
    • Custom IMS SIP User-Agent (carrier_ims_user_agent_string): Customizes the SIP registration user-agent header string for carrier IMS bypass.

2. Architectural & Model Expansion

  • ImsConfig.kt:
    • Expanded data class with all 16 configuration parameters and defaults.
    • Added FiveGPlusConfig helper mapping full carrier bundle keys (5g_icon_configuration_string_array, 5g_icon_display_grace_period_string_array).
    • Implemented toBundle() and toCarrierConfigBundle() packaging arrays, strings, and boolean keys directly for ImsModifier and BrokerInstrumentation.
  • ImsRepository.kt:
    • Full JSON serialization and deserialization in SharedPreferences supporting all newly added switches, thresholds, and text fields.
  • ImsController.kt:
    • Transmits full multi-type config.toBundle() to ImsModifier and BrokerInstrumentation.

3. Cyberpunk UI Redesign

  • ImsCarrierPatcherCard.kt:
    • Reorganized into 3 distinct, organized sections:
      1. Core Calling & IMS Features: VoLTE, VoWiFi, VoWiFi Roaming, VoNR (5G Voice), VT, UT / USSD, Cross-SIM Calling.
      2. Advanced 5G & Status Bar Icons (Expandable Accordion): 5G NR SA/NSA, 5G+ Ultra Wideband icon, 5G signal calibration, 4G vs LTE text, and LTE+ badge toggle.
      3. Carrier Name & SIP User-Agent (Expandable Accordion): Text inputs for custom carrier branding and SIP UA string.

4. Build & Distribution

  • Bumped versionCode = 18 and versionName = "1.2.17".
  • Verified release APK with apksigner (APK Signature Scheme v3).

Autoroid v1.2.16

Choose a tag to compare

@github-actions github-actions released this 18 Sep 20:35

[v1.2.16] - Full TensorIMS Parity: Direct ServiceManager IPC & BrokerInstrumentation Fallback

  • Date: 2026-09-19
  • Status: Verified (Build Successful, Release APK Signed & Scheme v3 Verified)

1. Root Cause Resolution: Binder Proxy Wrapping

  • Identified Bug: Autoroid previously retrieved system binders using Rikka's SystemServiceHelper.getSystemService(Context.ACTIVITY_SERVICE), which returns a remote binder proxy from Shizuku. Passing this already-proxied binder into ShizukuBinderWrapper(binder) corrupted IPC transactions when invoking startInstrumentation() and startDelegateShellPermissionIdentity().
  • Fix: Aligned with TensorIMS by compiling android.os.ServiceManager.getService(name) into the :stub module, acquiring the real local system binder, and wrapping it with ShizukuBinderWrapper(binder) for clean Shizuku server transaction interception.

2. Two-Tier Execution Strategy with BrokerInstrumentation Fallback

  • Introduced BrokerInstrumentation.kt as an automated secondary fallback.
  • When ImsModifier yields an empty result or permission error on modern Pixels with tight SELinux policies, ImsController.overrideImsConfig() immediately delegates to BrokerInstrumentation to apply carrier configurations without modem NVRAM provisioning failures.
  • Also added fallback to BrokerInstrumentation for factory carrier resets (clearConfig).

3. Early Process Bootstrap Hidden API Exemption

  • Created com.autoroid.app.core.privilege.ShizukuProvider subclassing rikka.shizuku.ShizukuProvider.
  • Calls HiddenApiBypass.addHiddenApiExemptions("") in onCreate() before Application.onCreate(), ensuring all Android runtime hidden API enforcement is removed before any system component initializes.

4. Safe Modem NVRAM Provisioning & Error Visibility

  • Isolated applyPersistentProvisioning() in ImsModifier with safe fallbacks (KEY_VOIMS_OPT_IN_STATUS = 10) so modem NVRAM provisioning hiccups never fail the carrier config override.
  • Upgraded ImsCarrierPatcherCard with a live Shizuku authorization warning banner (with 1-tap "GRANT" button) and an in-card live operation result badge.
  • Propagated clear diagnostic error messages instead of generic fallbacks.

5. Build & Verification

  • Bumped versionCode = 17 and versionName = "1.2.16".
  • Verified release APK with apksigner (APK Signature Scheme v3).

Autoroid v1.2.15

Choose a tag to compare

@github-actions github-actions released this 18 Sep 11:21

[v1.2.15] - Full Turbo IMS / TensorIMS Privileged Instrumentation Architecture

  • Date: 2026-09-18
  • Status: Verified (Build Successful, Release APK Signed & Scheme v3 Verified)

1. Root Cause Analysis & Pixel Restriction Resolution

  • Bypassed CVE-2025-48617: On modern Google Pixel devices (Android 14/15/16 with the October 2025 security update), Android's CarrierConfigLoader blocks Process.SHELL_UID (UID 2000, Shizuku) from invoking overrideConfig() with SecurityException: overrideConfig cannot be invoked by shell.
  • Resolved Process Termination: Previous attempts invoking am instrument from the shell killed Autoroid because CLI tools start instrumentation with flag 0 (restarting target process). In contrast, IActivityManager.startInstrumentation() with flags = 8 (INSTR_FLAG_NO_RESTART) launches the instrumentation runner inside the already-running app process without killing or restarting it!

2. Compile-Time Framework Stub Module (:stub)

  • Introduced a dedicated :stub library module providing compile-only Android framework classes (compileOnly(project(":stub")) with 0 APK footprint):
    • stub/src/main/aidl/android/app/IInstrumentationWatcher.aidl: Status and completion callbacks from ActivityManagerService.
    • stub/src/main/java/android/app/IActivityManager.java: startInstrumentation and shell permission delegation methods.
    • stub/src/main/java/android/app/UiAutomationConnection.java: UiAutomation connection stub.
    • stub/src/main/aidl/com/android/internal/telephony/ITelephony.aidl: Telephony reset and registration checks.

3. Privileged Instrumentation Engine

  • ImsModifier.kt:
    • Registered in AndroidManifest.xml targeting ${applicationId}.
    • Launched dynamically via am.startInstrumentation(..., flags = 8, ...).
    • Executes startDelegateShellPermissionIdentity(Os.getuid(), null) (allowed because isCallerInstrumentation() == true).
    • Calls CarrierConfigManager.overrideConfig(subId, bundle, persistent = false).
    • Performs persistent hardware VoLTE provisioning directly on modem NVRAM:
      • ProvisioningManager.setProvisioningIntValue(KEY_VOIMS_OPT_IN_STATUS, 1)
      • ImsMmTelManager.setAdvancedCallingSettingEnabled(true)
      • SubscriptionManager.setSubscriptionProperty("ENHANCED_4G_MODE_ENABLED", "1")
      • SubscriptionManager.setSubscriptionProperty("VOIMS_OPT_IN_STATUS", "1")
    • Safely releases delegation via stopDelegateShellPermissionIdentityCompat().
  • ImsResetter.kt: Resets carrier configurations and resets IMS via ITelephony.resetIms().
  • ImsCapabilityReader.kt: Live inspection of VoLTE, VoWiFi, VoNR, VT, and 5G NSA/SA availability.

4. Build & Distribution

  • Bumped versionCode = 16 and versionName = "1.2.15".
  • Verified with apksigner (APK Signature Scheme v3).

Autoroid v1.2.14

Choose a tag to compare

@github-actions github-actions released this 17 Sep 23:01

[v1.2.14] - Fix App Launch Crash & In-Process Shell Permission Delegation

  • Date: 2026-09-18
  • Status: Verified (Build Successful, Release APK Signed & Scheme v3 Verified)

1. Root Cause Analysis of Launch Crash

  • Problem: Following the VoLTE/VoWiFi updates, users experienced immediate crashes on app launch ("not opening").
  • Identified Root Causes:
    1. <instrumentation> Manifest Conflict: Declaring an <instrumentation> tag in src/main/AndroidManifest.xml targeting the app's own package (com.autoroid.app) caused Android's ActivityThread to treat the package as an instrumentation test target on app startup. Normal activity launches failed immediately with SecurityException / Process crashed.
    2. Process Termination by am instrument: Android's ActivityManagerService forcefully kills any existing process for targetPackage when am instrument is executed. Calling am instrument from ImsController.onBoot() resulted in Android killing Autoroid's process 2.5 seconds after launch.
    3. Unprotected Startup Coroutine: applicationScope.launch in AutoroidApp.kt lacked individual exception guards around subsystem initialization.

2. Implementation: In-Process Shell Permission Delegation

  • AndroidManifest.xml: Completely removed the <instrumentation> tag.
  • Deleted BrokerInstrumentation.kt: Eliminated the external instrumentation component.
  • ImsController.kt:
    • Replaced am instrument with direct in-process Shell Permission Delegation via Shizuku:
      1. Acquires IActivityManager via ShizukuBinderWrapper(getSystemService("activity")).
      2. Calls startDelegateShellPermissionIdentity(Process.myUid(), null) to grant the app's process shell-level identity.
      3. Directly calls CarrierConfigManager.overrideConfig(subId, bundle, persistent = false).
      4. Safely releases delegation via stopDelegateShellPermissionIdentity().
    • Added direct ICarrierConfigLoader Binder IPC fallback.
    • Added Root execution fallback (pm grant com.autoroid.app android.permission.MODIFY_PHONE_STATE).
    • Added safety wrappers around onBoot() so auto-restore never interrupts app startup.
  • AutoroidApp.kt: Wrapped each subsystem's initialization in individual try-catch blocks to ensure fail-safe app launches.

3. Version Bump

  • app/build.gradle.kts: Bumped versionCode = 15 and versionName = "1.2.14".

Autoroid v1.2.13

Choose a tag to compare

@github-actions github-actions released this 17 Sep 22:39

[v1.2.13] - Luxury Adaptive App Icon & Material You Dynamic Theming

  • Date: 2026-09-18
  • Status: Verified (Build Successful, Release APK Signed & Scheme v3 Verified)

1. High-Class Luxury App Icon Redesign

  • Problem: Replaced the legacy placeholder square icon (#00E5FF rectangle) with a state-of-the-art luxury design.
  • Design Philosophy:
    • Futuristic titanium cybernetic shield emblem infused with glowing neon cyan (#00E5FF) and electric emerald (#2EE59D) microchip circuitry.
    • Dark obsidian glass depth background (#080E17).
    • Stylized cybernetic crest 'A' integrated with an elevated Android core processor.
    • Ultra-high resolution asset downsampled using Lanczos resampling for razor-sharp fidelity across all density buckets.

2. Full Android Adaptive Icon Architecture (mipmap-anydpi-v26)

  • Adaptive Icon Layers:
    • drawable/ic_launcher_background.xml: Deep obsidian cyber grid background vector (#080E17 / #0A1424).
    • drawable-{mdpi,hdpi,xhdpi,xxhdpi,xxxhdpi}/ic_launcher_foreground.png: High-resolution foreground layers scaled to 108dp canvas with safe zone margins to prevent clipping on circular and squircle launchers.
    • drawable/ic_launcher_monochrome.xml: Minimalist vector silhouette of the cyber shield, 'A' crest, and microchip core for Android 13+ (Pixel 7 Pro) Material You dynamic wallpaper color theming.
    • mipmap-anydpi-v26/ic_launcher.xml and ic_launcher_round.xml: Updated to declare <adaptive-icon> referencing background, foreground, and monochrome assets.

3. Legacy Density Mipmaps

  • Generated multi-density raster drawables for legacy launchers, Android Settings, notifications, and APK extractors:
    • mipmap-mdpi/ic_launcher.png & ic_launcher_round.png (48x48)
    • mipmap-hdpi/ic_launcher.png & ic_launcher_round.png (72x72)
    • mipmap-xhdpi/ic_launcher.png & ic_launcher_round.png (96x96)
    • mipmap-xxhdpi/ic_launcher.png & ic_launcher_round.png (144x144)
    • mipmap-xxxhdpi/ic_launcher.png & ic_launcher_round.png (192x192)

4. Version Bump

  • app/build.gradle.kts: Bumped versionCode = 14 and versionName = "1.2.13".

Autoroid v1.2.12

Choose a tag to compare

@github-actions github-actions released this 17 Sep 22:08

[v1.2.12] - Elevated BrokerInstrumentation Carrier Patcher (CVE-2025-48617 Bypass)

  • Date: 2026-09-18
  • Status: Verified (Build Successful, Release APK Signed & Scheme v3 Verified)

1. Root Cause Fix: "Failed to Apply Override to SIM"

  • Identified Root Causes:
    • In recent Android security updates (CVE-2025-48617 on Pixel 7 Pro, Android 14/15/16), Google patched the shell user from directly calling CarrierConfigManager.overrideConfig() or ICarrierConfigLoader with SecurityException: overrideConfig cannot be invoked by shell.
    • Android requires caller to be an active instrumentation runner started from the shell in order to invoke startDelegateShellPermissionIdentity(Os.getuid(), null).
    • The <instrumentation> tag was not registered in AndroidManifest.xml.
    • ImsController previously fell back to non-existent shell command cmd phone cc set-value.
    • Command-line arguments passed via am instrument are received as String in Bundle, which caused moder_subId and boolean flags (carrier_volte_available_bool, etc.) to be misinterpreted unless parsed as typed Booleans and Integers.
  • Architecture Solution:
    • AndroidManifest.xml: Registered <instrumentation android:name=".feature.telephony.ims.BrokerInstrumentation" android:targetPackage="com.autoroid.app" />.
    • BrokerInstrumentation.kt:
      • Robust string-to-type parsing for moder_subId and PersistableBundle boolean/int configuration flags.
      • Uses IActivityManager.startDelegateShellPermissionIdentity(Os.getuid(), null) within the active instrumentation context.
      • Calls CarrierConfigManager.overrideConfig(subId, bundle, persistent = false).
      • Returns structured result bundle (Activity.RESULT_OK / Activity.RESULT_CANCELED).
    • ImsController.kt:
      • Rewrote applyConfig and clearConfig to execute am instrument -w via PrivilegeManager (Root UID 0 or Shizuku UID 2000 ADB shell).
      • Added error message extraction and diagnostics.

2. Version Bump

  • app/build.gradle.kts: Bumped versionCode = 13 and versionName = "1.2.12".

Autoroid v1.2.11

Choose a tag to compare

@github-actions github-actions released this 17 Sep 21:22

[v1.2.11] - Rate-Limit-Free Atom Feed Fallback for App Updates

  • Date: 2026-09-18
  • Status: Verified (Build Successful, Release APK Signed & Scheme v3 Verified)

1. Bypass GitHub API Rate Limits

  • Problem: GitHub REST API (api.github.com) restricts unauthenticated requests to 60 per hour per IP. On mobile cellular carrier networks (CGNAT) or shared Wi-Fi, multiple devices share a single IPv4 address, quickly triggering 403 rate limit exceeded.
  • Solution:
    • Implemented automatic fallback to GitHub's public Atom feed (https://github.com/$OWNER/$REPO/releases.atom).
    • Atom feeds are public web feeds served without rate limiting or authentication requirements.
    • Automatically parses latest release tag, publication timestamp, and HTML release notes via android.text.Html.
    • When api.github.com returns HTTP 403, 429, or network errors, UpdateManager transparently falls back to the Atom feed within milliseconds without failing or bothering the user.

2. Version Bump

  • app/build.gradle.kts: Bumped versionCode = 12 and versionName = "1.2.11".

Autoroid v1.2.10

Choose a tag to compare

@github-actions github-actions released this 17 Sep 20:55

[v1.2.10] - GitHub Release Pipeline Fix & Deterministic Update Engine

  • Date: 2026-09-18
  • Status: Verified (Build Successful, Release APK Signed & Scheme v3 Verified)

1. Root Cause Fix: "Already Up To Date" & Missing Assets

  • Diagnosed Root Causes:
    • Parallel GitHub Actions runners triggered on both main branch push and tag push raced to publish the same release, causing asset upload deadlocks and leaving releases with empty assets.
    • UpdateManager.kt previously calculated hasUpdate = isNewer && downloadUrl.isNotBlank(). When GitHub release assets were empty or still finalizing, hasUpdate evaluated to false, silently suppressing the update and reporting "Autoroid is up to date".
    • GitHub /releases/latest endpoint caching caused delayed visibility of newly published releases.
  • UpdateManager.kt Fixes:
    • Switched endpoint to /releases?per_page=5 with semver tag sorting to bypass CDN edge cache staleness.
    • Added deterministic fallback download URL (https://github.com/$OWNER/$REPO/releases/download/$TAG/app-release.apk) if asset metadata is delayed.
    • Decoupled hasUpdate = isNewer so newly available releases are always surfaced to the user.

2. CI/CD Release Pipeline Hardening

  • .github/workflows/release.yml:
    • Removed push: branches: [main] so release jobs only trigger on explicit version tags (v*), completely eliminating concurrent runner collisions.
    • Migrated from third-party release action to native GitHub CLI (gh release create / gh release upload --clobber), preventing hanging and ensuring idempotent asset uploads.

3. Version Bump

  • app/build.gradle.kts: Bumped versionCode = 11 and versionName = "1.2.10".