Limpamos o Dock e fazemos o aplicativo sem xCode



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}" } // extension // menu app.setActivationPolicy(.prohibited) app.run() 

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.

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


All Articles