
Wir werden ein Programm erstellen, um Anwendungen über die Statusleiste zu starten.
Sie benötigen Terminal, Swift Version 3.1 oder höher und einen beliebigen Texteditor.
Ich habe es unter macOS Sierra 10.12.6 und macOS Catalina 10.15 getestet.
Öffnen Sie das Terminal / Programme / Dienstprogramme / Terminal und erstellen Sie eine Datei.
touch toolbar.swift
Öffnen Sie die Datei toolbar.swift und schreiben Sie diesen 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}" }
Ein Teil des Codes wird benötigt, um die Kompatibilität mit älteren Sprachversionen zu gewährleisten.
Die Zeile app.setActivationPolicy (.prohibited) wird benötigt, damit das Symbol der aktiven Anwendung nicht im Dock angezeigt wird.
Speichern Sie die Datei und führen Sie das Programm mit dem folgenden Befehl aus:
swift toolbar.swift
Liegen keine Fehler vor, wird im Statusfeld eine Schaltfläche "Nutzlos" angezeigt. Ich habe das UTF-Zahnradsymbol "\ u {2699} \ u {FE0F}" verwendet, aber Sie können das gewünschte Bild über die Eigenschaft statusItem.button? .Image hinzufügen.

Beenden Sie das Programm, indem Sie auf Terminal Strg-C klicken.
Ich habe beschlossen, keine AppDelegate-Klasse für eine so kleine Anwendung zu erstellen, sondern die NSApplication-Klasse zu erweitern. Fügen Sie nach der Erweiterung // die folgenden Zeilen hinzu:
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") } }
Beachten Sie, dass Sie auf diese Weise nicht nur Anwendungen schneller ausführen können, sondern auch einzelne SystemPreference-Seiten.
Methoden brauchen eine Schnittstelle. Nach // Menütyp:
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
Für alle Methoden haben wir aus einer Instanz der NSApplication-Klasse Schaltflächen erstellt und Methoden an diese angefügt. Wir haben die Schaltfläche "Beenden" hinzugefügt, da wir dem Benutzer erlauben müssen, das Programm zu beenden, ohne das Terminal zu verwenden.
Wir stellen das Programm zusammen. Beachten Sie, dass Sie anstelle von swift swiftc eingeben.
swiftc toolbar.swift
Die Symbolleistendatei wurde im aktuellen Verzeichnis angezeigt. Es kann mit dem Befehl gestartet werden:
./toolbar
Wenn wir die Symbolleistendatei mit einem Doppelklick ausführen, wird das Terminalfenster mit der Anwendung angezeigt, dies ist jedoch nicht sehr praktisch.
Versuchen wir, die Situation zu beheben. Wir starten alle Befehle im Terminal.
Erstellen Sie zunächst einen Verzeichnisbaum für unsere Anwendung.
mkdir -p ToolBar.app/Contents/MacOS
Wir ändern den Zugriff auf die Anwendung.
chmod a+x ToolBar.app
Erstellen Sie ein Verzeichnis für das Symbol.
mkdir ToolBar.app/Contents/Resources
Kopieren und ändern Sie den Namen eines der Standardsymbole.
cp /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/ToolbarAdvanced.icns ToolBar.app/Contents/Resources/AppIcon.icns
Verschieben Sie die kompilierte Symbolleistendatei in das MacOS-Verzeichnis.
mv toolbar ToolBar.app/Contents/MacOS
Ändern Sie den Zugriffsmodus auf die Symbolleistendatei.
chmod a+x ToolBar.app/Contents/MacOS/toolbar
Erstellen Sie eine PkgInfo-Datei mit Informationen zum Anwendungstyp. Das Flag -n wird benötigt, damit die PkgInfo-Datei kein Zeilenvorschubzeichen enthält.
echo -n "APPL????" > ToolBar.app/Contents/PkgInfo
Ändern Sie den Zugriffsmodus auf die PkgInfo-Datei.
chmod a+x ToolBar.app/Contents/PkgInfo
Erstellen Sie eine minimale Info.plist mit Anwendungsinformationen:
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
Verschieben Sie die Anwendung ToolBar.app nach / Programme / Dienstprogramme.
Das Terminal fordert Sie auf, das Administratorkennwort einzugeben.
sudo mv ToolBar.app /Applications/Utilities
Nach diesen Vorgängen sollte eine neue Anwendung in / Applications / Utilities erscheinen und kann über Launchpad gestartet werden (aus irgendeinem Grund heißt das Verzeichnis mit den Dienstprogrammen Others).

Es bleibt noch unsere Anwendung zu Autorun hinzuzufügen.
Dazu erstellen Sie die Datei ~ / Library / LaunchAgents / example.ToolBar.plist. Lassen Sie uns diesen einen Befehl ausführen:
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
Überprüfen Sie, ob die gewünschte Datei angezeigt wird.
ls ~/Library/LaunchAgents
Um die automatische Ausführung ohne Neustart zu überprüfen, beenden Sie die Anwendung und führen Sie den Befehl im Terminal aus:
launchctl load -w ~/Library/LaunchAgents/example.ToolBar.plist
Das Anwendungssymbol sollte in der Statusleiste angezeigt werden.
Beenden Sie die Anwendung und führen Sie den folgenden Befehl aus:
launchctl unload -w ~/Library/LaunchAgents/example.ToolBar.plist
Jetzt wird die Anwendung beim Neustart des Systems gestartet und zusätzliche Symbole können aus dem Dock entfernt werden.
Auf diese Weise können Sie höchstwahrscheinlich einen Mini-Player für iTunes, eine einfache Aufgabenliste oder eine Oberfläche zum Ausrichten von Fenstern auf dem Desktop erstellen.