Testing new iOS backend
jMonkeyEngine Hub
June 17, 2026
Finally I think I found it!!! The problem is at libJGLIOSPlistRawValue, the line captureCommand([‘plutil’, ‘-extract’, keyPath, ‘raw’, ‘-o’, ‘-’, plist.absolutePath]) fails because plutil at OSX 10.15 doesn’t have raw output, it just outputs “Unknown format specifier: raw” and then the command help
I’m proposing a quick patch to fix it (mostly claude’s impl):
diff --git a/libjglios-gradle-plugin/src/main/resources/org/ngengine/libjglios/gradle/ios-tasks.gradle b/libjglios-gradle-plugin/src/main/resources/org/ngengine/libjglios/gradle/ios-tasks.gradle
index ffc1f22..fd77838 100644
--- a/libjglios-gradle-plugin/src/main/resources/org/ngengine/libjglios/gradle/ios-tasks.gradle
+++ b/libjglios-gradle-plugin/src/main/resources/org/ngengine/libjglios/gradle/ios-tasks.gradle
@@ -1264,7 +1264,23 @@ def libJGLIOSPlistRawValue = { File plist, String keyPath ->
try {
captureCommand(['plutil', '-extract', keyPath, 'raw', '-o', '-', plist.absolutePath])
} catch (GradleException ignored) {
- null
+ // plutil -extract raw requires macOS 12+; fall back to xml1 (available on all macOS versions)
+ try {
+ def xmlOutput = captureCommand(['plutil', '-extract', keyPath, 'xml1', '-o', '-', plist.absolutePath])
+ if (xmlOutput.contains('')) return 'true'
+ if (xmlOutput.contains('')) return 'false'
+ def dateMatcher = xmlOutput =~ /([^<]+)<\/date>/
+ if (dateMatcher.find()) return dateMatcher.group(1)
+ def strMatcher = xmlOutput =~ /([^<]*)<\/string>/
+ if (strMatcher.find()) return strMatcher.group(1)
+ def intMatcher = xmlOutput =~ /([^<]*)<\/integer>/
+ if (intMatcher.find()) return intMatcher.group(1)
+ def realMatcher = xmlOutput =~ /([^<]*)<\/real>/
+ if (realMatcher.find()) return realMatcher.group(1)
+ null
+ } catch (GradleException ignored2) {
+ null
+ }
}
}
I’ve tried the plutil command with xml output and works, also I’m 90% sure the output is properly parsed
Not sure if any other “matcher” may be needed
Discussion in the ATmosphere