Submenú de servicios

He escrito una aplicación pequeña y quiero permitir que otras aplicaciones compartan datos con ella.

Mi primera idea fue integrarlo en el menú de servicio. Sin embargo, necesito submenús que se completen dinámicamente y la página de desarrollo de Apple para Servicios del sistema indica que "No hay submenús en el menú Servicios" desde 10.6.

¿Hay alguna alternativa para integrarse en el menú contextual de otras aplicaciones y tener submenús?

Respuestas (3)

Otra alternativa sería exponer solo los servicios de nivel superior y luego hacer que sea responsabilidad de su aplicación mostrar las opciones del "submenú".

Esto brinda la ventaja de ponerlo en control de los atajos de teclado para las opciones secundarias. El usuario también obtiene una lista más limpia de servicios.

Probablemente ese sea el camino que seguiré, ya que las otras soluciones tampoco permiten la creación dinámica de entradas.

Una alternativa podría ser el menú AppleScript. Presenta todos los scripts en la ~/Library/Scripts/carpeta y conserva la jerarquía de las subcarpetas.

Asuntos:

  • Tendría que incorporar compatibilidad con AppleScript en su aplicación.
  • Tendría que construir un montón de AppleScripts para exponer su funcionalidad.
  • El menú AppleScript está deshabilitado de forma predeterminada.
  • Es un truco chapucero.
Buena idea, pero no permite la población dinámica de submenús (¡perdón por agregar este requisito ahora mismo!).

Un mejor lugar para preguntar es probablemente el foro de programadores https://stackoverflow.com/questions/tagged/osx

Pero, de antemano, creo que puede hacer algunas variantes diferentes de .appcada una de ellas registrando su propia acción de Servicios. Esas variantes podrían entonces lanzar su aplicación "principal" para hacer el trabajo pesado.

Estas variantes podrían incluirse dentro de la aplicación principal, como veo algunos ejemplos aquí:

/Applications/Adium.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/finish_installation.app
/Applications/Android File Transfer.app/Contents/Frameworks/Breakpad.framework/Versions/A/Resources/crash_report_sender.app
/Applications/Android File Transfer.app/Contents/Resources/Android File Transfer Agent.app
/Applications/Android File Transfer.app/Contents/Resources/Android File Transfer Agent.app/Contents/Frameworks/Breakpad.framework/Versions/A/Resources/crash_report_sender.app
/Applications/Google Chrome Canary.app/Contents/Versions/26.0.1400.0/Google Chrome Framework.framework/Resources/app_mode_loader.app
/Applications/Google Chrome Canary.app/Contents/Versions/26.0.1400.0/Google Chrome Framework.framework/Resources/crash_report_sender.app
/Applications/Google Chrome Canary.app/Contents/Versions/26.0.1400.0/Google Chrome Helper EH.app
/Applications/Google Chrome Canary.app/Contents/Versions/26.0.1400.0/Google Chrome Helper NP.app
/Applications/Google Chrome Canary.app/Contents/Versions/26.0.1400.0/Google Chrome Helper.app
/Applications/Quicksilver.app/Contents/Resources/QSDroplet.app
/Applications/Stainless.app/Contents/Helpers/StainlessClient.app
/Applications/Firefox.app/Contents/MacOS/crashreporter.app
/Applications/Firefox.app/Contents/MacOS/plugin-container.app
/Applications/Firefox.app/Contents/MacOS/updater.app
/Applications/TextMate.app/Contents/SharedSupport/Bundles/ActionScript.tmbundle/Support/bin/XTrace.app
/Applications/TextMate.app/Contents/SharedSupport/Support/bin/CocoaDialog.app
/Applications/TextMate.app/Contents/SharedSupport/Support/bin/CommitWindow.app
/Applications/Xcode.app/Contents/Applications/Accessibility Inspector.app
/Applications/Xcode.app/Contents/Applications/Application Loader.app
/Applications/Xcode.app/Contents/Applications/FileMerge.app
/Applications/Xcode.app/Contents/Applications/Instruments.app
/Applications/Xcode.app/Contents/Applications/OpenGL ES Performance Detective.app
No sabía de esta posibilidad, ¡gran descubrimiento! Pero no permite la población dinámica de submenús (¡perdón por agregar este requisito ahora mismo!)