

Mit diesem Paket können Sie in wenigen Minuten die Unterstützung für benutzergeschädigbare globale Tastaturverknüpfungen zu Ihrer MacOS-App hinzufügen. Es ist vollständig Sandbox und Mac App Store kompatibel. Und es wird in der Produktion von Dato, Jiffy, Plash und Lungo verwendet.
Ich akzeptiere gerne mehr Konfigurierbarkeit und Funktionen. PR Willkommen! Was Sie hier sehen, ist genau das, was ich für meine eigenen Apps brauchte.

macOS 10.15+
Fügen Sie https://github.com/sindresorhus/KeyboardShortcuts auf der Registerkarte "Swift Paket Manager" in Xcode hinzu.
Registrieren Sie zunächst einen Namen für die Tastaturverknüpfung.
Constants.swift
import KeyboardShortcuts
extension KeyboardShortcuts . Name {
static let toggleUnicornMode = Self ( " toggleUnicornMode " )
}Sie können dann an anderen Stellen auf diesen stark typischen Namen verweisen.
Sie möchten eine Ansicht festlegen, in der der Benutzer eine Tastaturverknüpfung auswählen kann.
SettingsScreen.swift
import SwiftUI
import KeyboardShortcuts
struct SettingsScreen : View {
var body : some View {
Form {
KeyboardShortcuts . Recorder ( " Toggle Unicorn Mode: " , name : . toggleUnicornMode )
}
}
}Es gibt auch Unterstützung für Kakao anstelle von Swiftui.
KeyboardShortcuts.Recorder kümmert sich um das Speichern der Tastaturverknüpfung in UserDefaults und warnt den Benutzer auch, wenn die ausgewählte Tastaturverknüpfung bereits vom System oder dem Hauptmenü der App verwendet wird.
Fügen Sie einen Hörer hinzu, wenn der Benutzer die ausgewählte Tastaturverknüpfung drückt.
App.swift
import SwiftUI
import KeyboardShortcuts
@ main
struct YourApp : App {
@ State private var appState = AppState ( )
var body : some Scene {
WindowGroup {
// …
}
Settings {
SettingsScreen ( )
}
}
}
@ MainActor
@ Observable
final class AppState {
init ( ) {
KeyboardShortcuts . onKeyUp ( for : . toggleUnicornMode ) { [ self ] in
isUnicornMode . toggle ( )
}
}
} Sie können auch Key Down mit .onKeyDown() anhören
Das ist alles!
Sie können ein vollständiges Beispiel im Verzeichnis „Beispiel“ finden.
In meiner Plash-App finden Sie auch ein Beispiel für reale Welt.
Verwenden von KeyboardShortcuts.RecorderCocoa anstelle von KeyboardShortcuts.Recorder :
import AppKit
import KeyboardShortcuts
final class SettingsViewController : NSViewController {
override func loadView ( ) {
view = NSView ( )
let recorder = KeyboardShortcuts . RecorderCocoa ( for : . toggleUnicornMode )
view . addSubview ( recorder )
}
} Dieses Paket unterstützt Lokalisierungen. PR Willkommen für mehr!
.lproj . Mehr hier.Localizable.strings im neuen Sprachverzeichnis und kopieren Sie dann den Inhalt von KeyboardShortcuts/Localization/en.lproj/Localizable.strings in die neue Datei, die Sie gerade erstellt haben.Siehe die API -Dokumente.
NSMenuItem Siehe NSMenuItem#setShortcut .
Ihre App muss möglicherweise Tastaturverknüpfungen für benutzerdefinierte Aktionen unterstützen. Normalerweise registrieren Sie die Tastaturverknüpfungen im Bereich extension KeyboardShortcuts.Name {} statisch. Dies ist jedoch keine Anforderung. Es dient nur aus Bequemlichkeit, damit Sie Dot-Syntax verwenden können, wenn Sie verschiedene APIs aufrufen (z. B. .onKeyDown(.unicornMode) {} ). Sie können Dynamik von KeyboardShortcut.Name erstellen und selbst speichern. Sie können dies im Beispielprojekt in Aktion sehen.
Das Einstellen einer Standard -Tastaturverknüpfung kann nützlich sein, wenn Sie aus einem anderen Paket migrieren oder nur etwas für sich selbst machen. Bitte setzen Sie dies jedoch nicht für eine öffentlich verteilte App fest. Benutzer finden es ärgerlich, wenn zufällige Apps ihre vorhandenen Tastaturverknüpfungen stehlen. Es ist im Allgemeinen besser, beim ersten App -Start einen willkommenen Bildschirm anzuzeigen, mit dem der Benutzer die Verknüpfung festlegen kann.
import KeyboardShortcuts
extension KeyboardShortcuts . Name {
static let toggleUnicornMode = Self ( " toggleUnicornMode " , default : . init ( . k , modifiers : [ . command , . option ] ) )
} Um alle Tastatur Name zu erhalten, entsprechen Sie KeyboardShortcuts.Name an CaseIterable .
import KeyboardShortcuts
extension KeyboardShortcuts . Name {
static let foo = Self ( " foo " )
static let bar = Self ( " bar " )
}
extension KeyboardShortcuts . Name : CaseIterable {
public static let allCases : [ Self ] = [
. foo ,
. bar
]
}
// …
print ( KeyboardShortcuts . Name . allCases ) Und um alle Name mit einer festgelegten Tastaturverknüpfung zu erhalten:
print ( KeyboardShortcuts . Name . allCases . filter { $0 . shortcut != nil } ) MASShortcut ?Dieses Paket:
NSMenuItem an.NSMenu geöffnet ist (z. B. Apps mit Menüleisten). MASShortcut :
HotKey ? HotKey eignet sich gut zum Hinzufügen von hartcodierten Tastaturverknüpfungen, bietet jedoch keine UI-Komponente für den Benutzer, um seine eigenen Tastaturverknüpfungen auszuwählen.
Carbon ? Ist das nicht veraltet?Die meisten Kohlenstoff -APIs wurden vor Jahren veraltet, aber es sind noch einige übrig, für die Apple nie modernen Ersatz ausgeliefert hat. Dies beinhaltet die Registrierung globaler Tastaturverknüpfungen. Sie sollten sich jedoch keine Sorgen machen. Apple wird mit Sicherheit neue APIs versenden, bevor die hier verwendeten Kohlenstoff -APIs abgeschrieben werden.
NEIN.
Das liegt außerhalb des Rahmens dieses Pakets. Sie können entweder NSEvent.addLocalMonitorForEvents , NSMenuItem mit Tastaturverknüpfung (es können sogar versteckt sein) oder Swiftuis View#keyboardShortcut() -Modifikator verwenden.
Nein, da es nicht für sandboxierte Apps funktionieren würde. Wenn Ihre App nicht sandkäfig ist, können Sie MediaKeyTap verwenden.
Nein. Es gibt jedoch nichts, dass Sie für dieses Paket Swift Paket Manager verwenden, selbst wenn Sie normalerweise Cocoapods oder Karthago verwenden.