Nous nettoyons le Dock et faisons l'application sans xCode



Nous allons créer un programme pour lancer des applications à partir de la barre d'état.
Vous aurez besoin d'un terminal, de Swift version 3.1 ou supérieure et de tout éditeur de texte.
Je l'ai testé sur macOS Sierra 10.12.6 et macOS Catalina 10.15.

Ouvrez le terminal / Applications / Utilitaires / Terminal et créez un fichier.

touch toolbar.swift 

Ouvrez le fichier toolbar.swift et Ă©crivez ce code:

 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() 

Une partie du code est nécessaire pour maintenir la compatibilité avec les anciennes versions de la langue.
La ligne app.setActivationPolicy (.prohibited) est nécessaire pour que l'icône de l'application active n'apparaisse pas dans le Dock.

Enregistrez le fichier et exécutez le programme avec la commande:

 swift toolbar.swift 

S'il n'y a aucune erreur, un bouton «inutile» apparaîtra sur le panneau d'état. J'ai utilisé le symbole d'engrenage UTF "\ u {2699} \ u {FE0F}", mais vous pouvez ajouter l'image souhaitée à l'aide de la propriété statusItem.button? .Image.



Quittez le programme en cliquant sur le terminal ctrl-c.

J'ai décidé de ne pas créer de classe AppDelegate pour une si petite application, mais j'ai développé la classe NSApplication. Ajoutez les lignes suivantes après l'extension //:

 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") } } 

Veuillez noter que de cette façon, vous pouvez exécuter non seulement des applications plus rapidement, mais également des pages SystemPreference individuelles.

Les méthodes ont besoin d'une interface. Après // type 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 

Pour toutes les méthodes, nous avons créé des boutons et leur avons attaché des méthodes à partir d'une instance de la classe NSApplication. Nous avons ajouté le bouton «Quitter», car nous devons permettre à l'utilisateur de quitter le programme sans utiliser de terminal.

Nous compilons le programme. Notez qu'au lieu de swift, tapez swiftc.

 swiftc toolbar.swift 

Le fichier de la barre d'outils est apparu dans le répertoire courant. Il peut être démarré avec la commande:

 ./toolbar 

Si nous exécutons le fichier de la barre d'outils avec un double-clic, la fenêtre du terminal apparaîtra avec l'application, mais ce n'est pas très pratique.

Essayons de corriger la situation. Nous lançons toutes les commandes dans le terminal.

Créez d'abord une arborescence de répertoires pour notre application.

 mkdir -p ToolBar.app/Contents/MacOS 

Nous modifions l'accès à l'application.

 chmod a+x ToolBar.app 

Créez un répertoire pour l'icône.

 mkdir ToolBar.app/Contents/Resources 

Copiez et modifiez le nom de l'une des icĂ´nes standard.

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

Déplacez le fichier de barre d'outils compilé vers le répertoire MacOS.

 mv toolbar ToolBar.app/Contents/MacOS 

Modifiez le mode d'accès au fichier de la barre d'outils.

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

Créez un fichier PkgInfo avec des informations sur le type d'application. L'indicateur -n est nécessaire pour qu'il n'y ait aucun caractère de saut de ligne dans le fichier PkgInfo.

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

Modifiez le mode d'accès au fichier PkgInfo.

 chmod a+x ToolBar.app/Contents/PkgInfo 

Créez un Info.plist minimal avec des informations sur l'application:

 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 

DĂ©placez l'application ToolBar.app vers / Applications / Utilitaires.
Le terminal vous demandera de saisir le mot de passe administrateur.

 sudo mv ToolBar.app /Applications/Utilities 

Après ces opérations, une nouvelle application devrait apparaître dans / Applications / Utilitaires et elle peut être lancée via Launchpad (pour une raison quelconque, le répertoire avec les utilitaires est appelé Autres)



Il reste à ajouter notre application à l'exécution automatique.

Pour ce faire, créez le fichier ~ / Library / LaunchAgents / example.ToolBar.plist. Faisons cette seule commande:

 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 

Vérifiez si le fichier souhaité apparaît.

 ls ~/Library/LaunchAgents 

Pour vérifier l'exécution automatique sans redémarrer, quittez l'application et exécutez la commande dans le terminal:

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

L'icône de l'application doit apparaître dans la barre d'état.
Quittez l'application et faites décharger la commande:

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

Maintenant, l'application démarre au redémarrage du système et des icônes supplémentaires peuvent être supprimées du Dock.

Très probablement, de cette façon, vous pouvez créer un mini-lecteur pour iTunes, une simple liste de tâches ou une interface pour aligner les fenêtres sur le bureau.

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


All Articles