2012-09-26 11 views
9

Me gustaría lanzar otra aplicación propia de LSOpenApplication() en Sandbox en Mac.¿Cómo iniciar otro proceso en sandbox en Mac?

Por supuesto, agregué una fila en 'com.apple.security.temporary-exception.files.absolute-path.read-write' en un archivo de autorizaciones para el lanzamiento.

Sin embargo, al iniciarse, la consola escupió un error que no permite el proceso xxxx para iniciar "foo.app" porque no se ha iniciado previamente por el usuario. Puede iniciarse sin errores después de iniciar el proceso manualmente una vez.

¿Cómo puedo iniciar el proceso aunque no lo haya hecho antes? ¿No está relacionado con sandboxing?

+0

Si lo especifica por nombre (o tal vez ID de paquete) en lugar de FSRef es aceptable, intente lo siguiente: http://stackoverflow.com/a/7311283/30461 –

+0

Gracias. Pero no pudo iniciarse ni siquiera si se utilizaba la función launchApplication con el nombre de la aplicación. Probablemente, la aplicación objetivo necesite tener una experiencia iniciada por el usuario al menos una vez antes para iniciar normalmente en OS X Lion y Mountain Lion. – noridon

Respuesta

0

Uso osascript

osascript -e 'tell application "foo" to open' 
+0

Gracias, Parag. ¿Significa el uso de osascript en lugar de llamar a una función? – noridon

+0

No sé por qué la función LSOpenApplication() no funciona en la aplicación Sandbox. pero osascript funcionará. –

14

Hay muy pocas condiciones en las que podrás lanzar otra aplicación y tener el resultado deseado. com.apple.security.temporary-exception.files.absolute-path.read-write no gana nada con respecto a LaunchServices para que pueda eliminar ese derecho.

Como una aplicación de espacio aislado, estás bastante limitado en lo que realmente puedes sublanzar, este es un comportamiento intencional ya que el lanzamiento de otra aplicación es técnicamente una violación del modelo de espacio aislado. las formas disponibles para usted son:

  1. incluir un servicio XPC en su aplicación y tienen lanzamiento launchd por usted
  2. puede ejecutar una aplicación a través NSTask, lo que hará que esta aplicación para heredar su caja de arena cuando se lanzó
  3. puede iniciar una aplicación por nombre, aunque por lo que he visto esto generalmente solo funciona si la aplicación está en su carpeta/Applications, es decir, [[NSWorkspace launchApplication:]
  4. puede iniciar una aplicación que incluye su aplicación , pero solo si ha estado SMLoginItemSetEnabled()

Yo diría que la llamada osascript funciona porque está haciendo más o menos lo mismo que - [NSWorkspace launchApplication:]. ninguna de las llamadas LS que aceptan identificadores de paquetes o rutas absolutas/relativas funcionarán.

+1

Gracias! ¡Logramos lanzar desde XPC Services! – noridon

+0

que debería funcionar siempre y cuando no tenga la intención de enviarlo a MacAppStore y no esté protegiendo el servicio de XPC. Si te estás enviando a la tienda de aplicaciones, te van a obligar a guardar el servicio XPC. – rudy

Cuestiones relacionadas