He escrito una aplicación Java que quiero distribuir en forma de un macOS paquete de la aplicación. La aplicación necesita para ejecutar una aplicación de línea de comandos que también es parte del paquete. El paquete está firmada correctamente (comprobado mediante el firmado de código de comando) y el templado de tiempo de ejecución está habilitado.
Soy capaz de ejecutar la aplicación, pero, a continuación, la aplicación no se puede ejecutar el paquete de aplicaciones de línea de comandos.
El código utilizado para ejecutar la aplicación de línea de comandos:
Runtime.getRuntime().exec("/path/to/app/bundle/Contents/cli/myCommandLineApplication");
El código funciona bien cuando se firmo el paquete sin la habilitación de la endurecido en tiempo de ejecución. Después de habilitar la endurecido en tiempo de ejecución, tengo la siguiente excepción:
No se puede ejecutar el programa "myCommandLineApplication": error=0, posix_spawn error
¿Qué estoy haciendo mal? Es incluso posible generar procesos de niños desde dentro de un endurecido aplicación en tiempo de ejecución?
El tiempo de ejecución de Java que estoy usando es AdoptOpenJDK (construir 11.0.4+11). La aplicación no es de espacio aislado. Los derechos a los que he usado cuando se firma el paquete se
<key>com.apple.security.cs.allow-jit</key>
<true/>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<true/>
<key>com.apple.security.cs.disable-executable-page-protection</key>
<true/>
<key>com.apple.security.cs.disable-library-validation</key>
<true/>
<key>com.apple.security.cs.allow-dyld-environment-variables</key>
<true/>
<key>com.apple.security.automation.apple-events</key>
<true/>