Limpiamos el Dock y hacemos la aplicación sin xCode



Haremos un programa para iniciar aplicaciones desde la barra de estado.
Necesitará terminal, Swift versión 3.1 o superior y cualquier editor de texto.
Lo probé en macOS Sierra 10.12.6 y macOS Catalina 10.15.

Abra la terminal / Aplicaciones / Utilidades / Terminal y cree un archivo.

touch toolbar.swift 

Abra el archivo toolbar.swift y escriba este código:

 import AppKit var app: NSApplication var statusItem: NSStatusItem #if swift(>=5.1) app = NSApplication.shared statusItem = NSStatusBar.system.statusItem( withLength: CGFloat(NSStatusItem.variableLength)) #else app = NSApplication.shared() statusItem = NSStatusBar.system().statusItem(withLength: CGFloat(32)) #endif if #available(macOS 10.10, *) { statusItem.button?.title = "\u{2699}\u{FE0F}" } // extension // menu app.setActivationPolicy(.prohibited) app.run() 

Parte del código es necesario para mantener la compatibilidad con versiones anteriores del idioma.
La línea app.setActivationPolicy (.prohibited) es necesaria para que el icono de la aplicación activa no aparezca en el Dock.

Guarde el archivo y ejecute el programa con el comando:

 swift toolbar.swift 

Si no hay errores, aparecerá un botón "inútil" en el panel de estado. Utilicé el símbolo de engranaje UTF "\ u {2699} \ u {FE0F}", pero puede agregar la imagen que desee utilizando la propiedad statusItem.button? .Image.



Salga del programa haciendo clic en el terminal ctrl-c.

Decidí no crear una clase AppDelegate para una aplicación tan pequeña, pero expandí la clase NSApplication. Agregue las siguientes líneas después de la extensión //:

 extension NSApplication { func runTask(_ appName: String, _ arg: String = "") { let task = Process() #if swift(>=5.1) task.executableURL = URL(fileURLWithPath: "/usr/bin/open") #else task.launchPath = "/usr/bin/open" #endif task.arguments = arg.isEmpty ?[appName] : [arg, appName] #if swift(>=5.1) do {try task.run()} catch {print(error)} #else task.launch() #endif } @objc func securityRun () { self.runTask("/System/Library/PreferencePanes/Security.prefPane") } @objc func diskRun () { self.runTask( "disk utility", "-a") } @objc func automatorRun () { self.runTask( "automator", "-a") } } 

Tenga en cuenta que de esta manera puede ejecutar no solo aplicaciones más rápido, sino también páginas individuales de SystemPreference.

Los métodos necesitan una interfaz. Después de // tipo de menú:

 let menu = NSMenu() let items: [String] = ["Security", "Disk Utility", "Automator", "Quit"] var sel: [Selector] = [] let shared = NSApplication.shared #if swift(>=5.1) sel = [ #selector(shared.securityRun), #selector(shared.diskRun), #selector(shared.automatorRun), #selector(shared.terminate)] #else sel = [ #selector(shared().securityRun), #selector(shared().diskRun), #selector(shared().automatorRun), #selector(shared().terminate)] #endif for i in 0..<items.count { menu.addItem(NSMenuItem( title: items[i], action: sel[i], keyEquivalent: "")) if i==items.count-2 { menu.addItem(NSMenuItem.separator()) } } statusItem.menu = menu 

Para todos los métodos, creamos botones y métodos adjuntos desde una instancia de la clase NSApplication. Hemos agregado el botón "Salir", ya que necesitamos permitir que el usuario salga del programa sin usar la terminal.

Compilamos el programa. Tenga en cuenta que en lugar de swift, escriba swiftc.

 swiftc toolbar.swift 

El archivo de la barra de herramientas ha aparecido en el directorio actual. Se puede comenzar con el comando:

 ./toolbar 

Si ejecutamos el archivo de la barra de herramientas con un doble clic, aparecerá la ventana de terminal con la aplicación, pero esto no es muy conveniente.

Tratemos de arreglar la situación. Lanzamos todos los comandos en la terminal.

Primero, cree un árbol de directorios para nuestra aplicación.

 mkdir -p ToolBar.app/Contents/MacOS 

Cambiamos el acceso a la aplicación.

 chmod a+x ToolBar.app 

Crea un directorio para el icono.

 mkdir ToolBar.app/Contents/Resources 

Copie y cambie el nombre de uno de los iconos estándar.

 cp /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/ToolbarAdvanced.icns ToolBar.app/Contents/Resources/AppIcon.icns 

Mueva el archivo compilado de la barra de herramientas al directorio de MacOS.

 mv toolbar ToolBar.app/Contents/MacOS 

Cambie el modo de acceso al archivo de la barra de herramientas.

 chmod a+x ToolBar.app/Contents/MacOS/toolbar 

Cree un archivo PkgInfo con información sobre el tipo de aplicación. El indicador -n es necesario para que no haya caracteres de avance de línea en el archivo PkgInfo.

 echo -n "APPL????" > ToolBar.app/Contents/PkgInfo 

Cambie el modo de acceso al archivo PkgInfo.

 chmod a+x ToolBar.app/Contents/PkgInfo 

Cree un Info.plist mínimo con información de la aplicación:

 echo '<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundleIdentifier</key> <string>example.ToolBar</string> <key>CFBundleExecutable</key> <string>toolbar</string> <key>CFBundleIconFile</key> <string>AppIcon</string> </dict> </plist>' > ToolBar.app/Contents/Info.plist 

Mueva la aplicación ToolBar.app a / Aplicaciones / Utilidades.
Terminal le pedirá que ingrese la contraseña de administrador.

 sudo mv ToolBar.app /Applications/Utilities 

Después de estas operaciones, debería aparecer una nueva aplicación en / Aplicaciones / Utilidades y se puede iniciar a través de Launchpad (por alguna razón, el directorio con las utilidades se llama Otros)



Queda por agregar nuestra aplicación a la ejecución automática.

Para hacer esto, cree el archivo ~ / Library / LaunchAgents / example.ToolBar.plist. Hagamos este comando:

 echo '<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>example.ToolBar</string> <key>ProgramArguments</key> <array> <string>open</string> <string>/Applications/Utilities/ToolBar.app</string> <string>--args</string> <string>-silent</string> </array> <key>RunAtLoad</key> <true/> </dict> </plist>' > ~/Library/LaunchAgents/example.ToolBar.plist 

Compruebe si aparece el archivo deseado.

 ls ~/Library/LaunchAgents 

Para verificar la ejecución automática sin reiniciar, salga de la aplicación y ejecute el comando en la terminal:

 launchctl load -w ~/Library/LaunchAgents/example.ToolBar.plist 

El icono de la aplicación debería aparecer en la barra de estado.
Salga de la aplicación y descargue el comando:

 launchctl unload -w ~/Library/LaunchAgents/example.ToolBar.plist 

Ahora la aplicación se iniciará cuando el sistema se reinicie, y se pueden eliminar iconos adicionales del Dock.

Lo más probable es que de esta manera puedas crear un mini reproductor para iTunes, una simple lista de tareas o una interfaz para alinear ventanas en el escritorio.

Source: https://habr.com/ru/post/480876/


All Articles