MOE 1.10.2 and 2.0.0-alpha2 released

I’m happy to announce the new releases for MOE 1.10.2 and 2.0.0-alpha2.

Version 1.10.2 and 2.0.0-alpha2

Breaking changes

  • NatJGen binding generation changed, custom bindings may need to be regenerated.
  • Gradle 4.10.1 is now the minimum tested gradle version

SDK Changes

Gradle Changes

  • Bumped ASM to 9.8

Known Issues

  • Debugging on iOS 17 devices is not possible, because of currently missing support in libimobiledevice: Current status of the support for iOS 17 · Issue #1490 · libimobiledevice/libimobiledevice · GitHub
  • If the Android Gradle Plugin below 7.1.3 is added to the buildscript classpath in the root build.gradle file, a java.lang.IllegalArgumentException (no error message) may be thrown when building. To workaround this, either upgrade to AGP 7.1.3 or move the buildscript block to the android build.gradle file.
  • gradle 8.4-8.8 does not work with MOE

Version 1.10.2

SDK Changes

  • Deprecated all AOSP classes in preperation for MOE 2.0
  • Bundle MOE framework dsym
  • Skipped new iOS 18.x accessibility methods in NSObject, because they caused issue with dex2oat. If you need them, either use MOE 2.0.0-alpha or bind them manually.

Known Issues

  • For larger Apps building with XCode 16+ is broken. As a workaround ENABLE_DEBUG_DYLIB=NO needs to be set in the XCode project.

Version 2.0.0-alpha2

SDK Changes

  • Fixed non-ASCII String ObjC interop issue
  • Fixed some missed reflection registration
  • Proper error when encountering an unregistered JNI method

Gradle Changes

  • Fixed iOS simulator build

Known limitations

Install / Upgrade

Simply change your build script to use the new plugin and SDK:

buildscript {
    dependencies {
        classpath group: 'org.multi-os-engine', name: 'moe-gradle', version: ‘<version>’
    } 
}

Don’t forget to refresh the xcode project settings through Inject/Refresh Xcode Project Settings option in Android Studio/Intellij, or with the moeUpdateXcodeSettings gradle task.

Notes:

  • The MOE snapshots are now published under https://central.sonatype.com/repository/maven-snapshots/
2 Likes

Hi @Berstanio ,
2.0.0-alpha2 doesn’t seem to work without the alpha1 build cache.

Environment

  • Mac mini (2024) : Apple M4 (AArch64)
  • macOS 15.5
  • Xcode 16.4
  • IntelliJ IDEA 2025.2.3 (Community Edition) : build 2025-10-02
  • IntelliJ Plugin : Multi-OS Engine 1.5.4
  • Gradle 8.14.3
  • Gradle JVM : corretto-17

Steps to reproduce

  1. IntelliJ > New Project > Multi-OS Engine > Java > Single View Application

  2. Setting > … > Gradle JVM: corretto-17

  3. Edit: gradle-wrapper.properties
    gradle-8.14.3-bin.zip

  4. Edit: build.gradle
    moe-gradle: 2.0.0-alpha1

  5. Create: gradle.properties

# iOS 18.6 - iPad (A16)
moe.launcher.simulators=...
moe.launcher.options=config:debug
  1. IntelliJ > Run Anything(Ctrl x2) > gradle moeUpdateXcodeSettings
    Successful.

  2. Gradle Task: moeLaunch
    Build error:

> SDK: (home)/.moe/moe-sdk-2.0.0-alpha1
> ...
> Task :moeMainDebugX86_64IphonesimulatorNativeImage FAILED
> Execution of command (...)/bin/native-image -H:+SharedLibrary (...)
> Error: Missing CAP cache value for: NativeCodeInfo:PosixDirectives:StructInfo:struct___darwin_mcontext64:StructFieldInfo:__ss___r10
  1. Edit: build.gradle
    2.0.0-alpha12.0.0-alpha2

  2. Gradle Task: moeLaunch
    Build successful.
    Successfully launched in iOS simulator.

  3. Remove directory: build

  4. Gradle Task: moeLaunch
    Build error:

> Configure project :
...
> Could not determine the dependencies of task ':moeMainDebugR8'.
> (projectDir)/build/moe/main/validate/debug/output must be a directory

As a workaround, run the following task once and the build will work.

  • moeMainDebugClassValidate
  • moeMainReleaseClassValidate

I will take a look, thank you @ark100 .
As a better workaround, I think you can just add file("build/moe/main/validate/debug/output").mkdirs() somewhere in your build script. That should run before configuration phase.

1 Like

Thank you, it worked with mkdirs.

Then I tried the module and got the following error:

> Task :compile
Java FAILED
error: the unnamed module reads package org.moe from both moe.ios and moe.core
error: module moe.core reads package org.moe from both moe.ios and moe.core
error: module moe.ios reads package org.moe from both moe.core and moe.ios

This is probably because the following are in the same package:

moe-core.jar
    org/moe/MOE

moe-ios.jar
    org/moe/GCUtil
    org/moe/IOSLauncher

Is it possible to move them down one level?

  • org.moe.GCUtil → org.moe.ios.GCUtil
  • org.moe.IOSLauncher → org.moe.ios.IOSLauncher

Steps to reproduce

Create: src/main/java/module-info.java

module sample.app {
    requires moe.ios;
}

Append: build.gradle

tasks.withType(JavaCompile).configureEach {
    options.compilerArgs += ["--module-path", classpath.asPath]
    classpath = files()  // clear class path
}

build.gradle:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath group: 'org.multi-os-engine', name: 'moe-gradle', version: '2.0.0-alpha2'
    }
}

apply plugin: 'moe'

repositories {
    mavenCentral()
}

file("build/moe/main/validate/debug/output").mkdirs()
file("build/moe/main/validate/release/output").mkdirs()

moe {
    xcode {
        project 'xcode/sample_app.xcodeproj'
        mainTarget 'sample_app'
        testTarget 'sample_app-Test'
    }
}

tasks.withType(JavaCompile).configureEach {
    options.compilerArgs += ["--module-path", classpath.asPath]
    classpath = files()  // clear class path
}

Hi @ark100 ,

Yeah, I will fix this with the next snapshot. GCUtil should be also moved to moe-core.

Thank you @Berstanio

For reference, I took the following steps to use the old library with 2.0.0-alpha2.

Edit: build.gradle

dependencies {
    // javax.xml.bind (version < 3.0.0), Because it was removed in JDK11
    implementation("jakarta.xml.bind:jakarta.xml.bind-api:2.3.3")
}

Create: proguard.append.cfg

 -dontwarn com.sun.javadoc.**
 -dontwarn com.sun.tools.javadoc.**
 -dontwarn org.junit.**
 -dontwarn junit.**