Wir bereinigen das Dock und machen die Anwendung ohne xCode



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

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.

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


All Articles