

Ce package vous permet d'ajouter la prise en charge des raccourcis clavier mondiaux personnalisables de l'utilisateur à votre application macOS en quelques minutes. Il est entièrement compatible avec Sandbox et Mac App Store. Et il est utilisé dans la production par Dato, Jiffy, Plash et Lungo.
Je suis heureux d'accepter plus de configurabilité et de fonctionnalités. Bien accueilli! Ce que vous voyez ici est exactement ce dont j'avais besoin pour mes propres applications.

macOS 10.15+
Ajoutez https://github.com/sindresorhus/KeyboardShortcuts dans l'onglet «Swift Package Manager» dans Xcode.
Tout d'abord, enregistrez un nom pour le raccourci clavier.
Constants.swift
import KeyboardShortcuts
extension KeyboardShortcuts . Name {
static let toggleUnicornMode = Self ( " toggleUnicornMode " )
}Vous pouvez ensuite vous référer à ce nom fortement typé dans d'autres endroits.
Vous voudrez avoir une vue où l'utilisateur peut choisir un raccourci clavier.
SettingsScreen.swift
import SwiftUI
import KeyboardShortcuts
struct SettingsScreen : View {
var body : some View {
Form {
KeyboardShortcuts . Recorder ( " Toggle Unicorn Mode: " , name : . toggleUnicornMode )
}
}
}Il y a aussi un soutien pour le cacao au lieu de Swiftui.
KeyboardShortcuts.Recorder s'occupe de stocker le raccourci clavier dans UserDefaults et d'avertir l'utilisateur si le raccourci clavier choisi est déjà utilisé par le système ou le menu principal de l'application.
Ajoutez un écouteur lorsque l'utilisateur appuie sur le raccourci du clavier choisi.
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 ( )
}
}
} Vous pouvez également écouter Key Down avec .onKeyDown()
C'est tout!
Vous pouvez trouver un exemple complet dans le répertoire «Exemple».
Vous pouvez également trouver un exemple réel dans mon application PLASH.
Utilisation KeyboardShortcuts.RecorderCocoa au lieu de KeyboardShortcuts.Recorder :
import AppKit
import KeyboardShortcuts
final class SettingsViewController : NSViewController {
override func loadView ( ) {
view = NSView ( )
let recorder = KeyboardShortcuts . RecorderCocoa ( for : . toggleUnicornMode )
view . addSubview ( recorder )
}
} Ce package prend en charge les localisations. PR bienvenue pour plus!
.lproj . Plus ici.Localizable.strings dans le nouveau répertoire de langue, puis copiez le contenu de KeyboardShortcuts/Localization/en.lproj/Localizable.strings au nouveau fichier que vous venez de créer.Voir les documents API.
NSMenuItem Voir NSMenuItem#setShortcut .
Votre application peut avoir besoin de prendre en charge les raccourcis clavier pour les actions définies par l'utilisateur. Normalement, vous enregistreriez statiquement les raccourcis clavier à l'avance dans extension KeyboardShortcuts.Name {} . Cependant, ce n'est pas une exigence. C'est uniquement pour la commodité afin que vous puissiez utiliser Dot-Syntax lors de l'appel de diverses API (par exemple, .onKeyDown(.unicornMode) {} ). Vous pouvez créer KeyboardShortcut.Name dynamiquement et les stocker vous-même. Vous pouvez le voir en action dans l'exemple de projet.
La définition d'un raccourci clavier par défaut peut être utile si vous migrez à partir d'un autre package ou si vous faites quelque chose pour vous-même. Cependant, veuillez ne pas définir cela pour une application distribuée en bourse. Les utilisateurs le trouvent ennuyeux lorsque les applications aléatoires volent leurs raccourcis clavier existants. Il est généralement préférable d'afficher un écran de bienvenue lors du premier lancement d'application qui permet à l'utilisateur de définir le raccourci.
import KeyboardShortcuts
extension KeyboardShortcuts . Name {
static let toggleUnicornMode = Self ( " toggleUnicornMode " , default : . init ( . k , modifiers : [ . command , . option ] ) )
} Pour obtenir tous les Name de raccourci clavier, conformez-vous, CaseIterable KeyboardShortcuts.Name .
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 ) Et pour obtenir tous les Name avec un raccourci clavier défini:
print ( KeyboardShortcuts . Name . allCases . filter { $0 . shortcut != nil } ) MASShortcut ?Ce package:
NSMenuItem .NSMenu est ouvert (par exemple, les applications de barre de menu). MASShortcut :
HotKey ? HotKey est bonne pour ajouter des raccourcis clavier à code dur, mais il ne fournit aucun composant d'interface utilisateur à l'utilisateur de choisir ses propres raccourcis clavier.
Carbon ? N'est-ce pas obsolète?La plupart des API de carbone ont été obsolètes il y a des années, mais il reste une apple pour laquelle Apple n'a jamais expédié les remplacements modernes. Cela comprend l'enregistrement des raccourcis clavier mondiaux. Cependant, vous ne devriez pas avoir besoin de vous en soucier. Apple expédiera à coup sûr de nouvelles API avant de déprécier les API de carbone utilisées ici.
Non.
C'est en dehors de la portée de ce package. Vous pouvez soit utiliser NSEvent.addLocalMonitorForEvents , NSMenuItem avec raccourci clavier (il peut même être caché), soit le modificateur View#keyboardShortcut() .
Non, car cela ne fonctionnerait pas pour les applications sandinées. Si votre application n'est pas en sable, vous pouvez utiliser MediaKeyTap .
Non. Cependant, rien ne vous empêche d'utiliser Swift Package Manager pour ce package même si vous utilisez normalement Cocoapods ou Carthage.