
Criaremos um programa para iniciar aplicativos a partir da barra de status.
Você precisará do terminal, Swift versão 3.1 ou superior, e de qualquer editor de texto.
Testei-o no macOS Sierra 10.12.6 e no macOS Catalina 10.15.
Abra o terminal / Aplicativos / Utilitários / Terminal e crie um arquivo.
touch toolbar.swift
Abra o arquivo toolbar.swift e escreva 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}" }
Parte do código é necessária para manter a compatibilidade com versões mais antigas do idioma.
A linha app.setActivationPolicy (.prohibited) é necessária para que o ícone do aplicativo ativo não apareça no Dock.
Salve o arquivo e execute o programa com o comando:
swift toolbar.swift
Se não houver erros, um botão "inútil" será exibido no painel de status. Usei o símbolo de engrenagem UTF "\ u {2699} \ u {FE0F}", mas você pode adicionar a imagem desejada usando a propriedade statusItem.button? .Image.

Saia do programa clicando no terminal ctrl-c.
Decidi não criar uma classe AppDelegate para um aplicativo tão pequeno, mas expandi a classe NSApplication. Adicione as seguintes linhas após a extensão //:
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") } }
Observe que, dessa forma, você pode executar não apenas aplicativos mais rapidamente, mas também páginas individuais do SystemPreference.
Métodos precisam de uma interface. Após // tipo de menu:
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 os métodos, criamos botões e anexamos métodos a eles a partir de uma instância da classe NSApplication. Adicionamos o botão “Quit”, pois precisamos permitir que o usuário saia do programa sem usar o terminal.
Nós compilamos o programa. Observe que, em vez de rápido, digite swiftc.
swiftc toolbar.swift
O arquivo da barra de ferramentas apareceu no diretório atual. Pode ser iniciado com o comando:
./toolbar
Se executarmos o arquivo da barra de ferramentas com um clique duplo, a janela do terminal aparecerá com o aplicativo, mas isso não é muito conveniente.
Vamos tentar consertar a situação. Iniciamos todos os comandos no terminal.
Primeiro, crie uma árvore de diretórios para o nosso aplicativo.
mkdir -p ToolBar.app/Contents/MacOS
Mudamos o acesso ao aplicativo.
chmod a+x ToolBar.app
Crie um diretório para o ícone.
mkdir ToolBar.app/Contents/Resources
Copie e altere o nome de um dos ícones padrão.
cp /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/ToolbarAdvanced.icns ToolBar.app/Contents/Resources/AppIcon.icns
Mova o arquivo da barra de ferramentas compilada para o diretório MacOS.
mv toolbar ToolBar.app/Contents/MacOS
Altere o modo de acesso para o arquivo da barra de ferramentas.
chmod a+x ToolBar.app/Contents/MacOS/toolbar
Crie um arquivo PkgInfo com informações sobre o tipo de aplicativo. O sinalizador -n é necessário para que não haja caractere de avanço de linha no arquivo PkgInfo.
echo -n "APPL????" > ToolBar.app/Contents/PkgInfo
Mude o modo de acesso para o arquivo PkgInfo.
chmod a+x ToolBar.app/Contents/PkgInfo
Crie um Info.plist mínimo com informações do aplicativo:
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
Mova o aplicativo ToolBar.app para / Aplicativos / Utilitários.
O Terminal solicitará que você digite a senha do administrador.
sudo mv ToolBar.app /Applications/Utilities
Após essas operações, um novo aplicativo deve aparecer em / Aplicativos / Utilitários e pode ser iniciado através do Launchpad (por algum motivo, o diretório com utilitários é chamado Outros)

Resta adicionar nosso aplicativo à execução automática.
Para fazer isso, crie o arquivo ~ / Library / LaunchAgents / example.ToolBar.plist. Vamos fazer 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
Verifique se o arquivo desejado aparece.
ls ~/Library/LaunchAgents
Para verificar a execução automática sem reiniciar, saia do aplicativo e execute o comando no terminal:
launchctl load -w ~/Library/LaunchAgents/example.ToolBar.plist
O ícone do aplicativo deve aparecer na barra de status.
Saia do aplicativo e faça o descarregamento do comando:
launchctl unload -w ~/Library/LaunchAgents/example.ToolBar.plist
Agora o aplicativo será iniciado quando o sistema reiniciar, e os ícones extras poderão ser removidos do Dock.
Provavelmente, dessa maneira, você pode criar um mini-player para o iTunes, uma lista simples de tarefas ou uma interface para alinhar janelas na área de trabalho.