

このパッケージを使用すると、数分でユーザーカスタマイズ可能なグローバルキーボードショートカットのサポートを追加できます。完全にサンドボックスとMac App Storeの互換性があります。そして、それはDato、Jiffy、Plash、およびLungoによる生産で使用されています。
より多くの構成可能性と機能を受け入れることができてうれしいです。 PRようこそ!ここであなたが見るものは、私が自分のアプリに必要なものです。

MacOS 10.15+
Xcodeの「Swiftパッケージマネージャー」タブにhttps://github.com/sindresorhus/KeyboardShortcuts追加します。
まず、キーボードショートカットの名前を登録します。
Constants.swift
import KeyboardShortcuts
extension KeyboardShortcuts . Name {
static let toggleUnicornMode = Self ( " toggleUnicornMode " )
}その後、他の場所でこの強いタイプの名前を参照できます。
ユーザーがキーボードショートカットを選択できるビューを作成する必要があります。
SettingsScreen.swift
import SwiftUI
import KeyboardShortcuts
struct SettingsScreen : View {
var body : some View {
Form {
KeyboardShortcuts . Recorder ( " Toggle Unicorn Mode: " , name : . toggleUnicornMode )
}
}
}また、スウィフトゥイの代わりにココアのサポートもあります。
KeyboardShortcuts.Recorder 、 UserDefaultsにキーボードショートカットを保存することになり、選択したキーボードショートカットがシステムまたはアプリのメインメニューで既に使用されている場合にユーザーに警告します。
ユーザーが選択したキーボードショートカットを押したときのリスナーを追加します。
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 ( )
}
}
} .onKeyDown()でキーダウンを聴くこともできます
それだけです!
「例」ディレクトリに完全な例を見つけることができます。
また、プラッシュアプリに実際の例を見つけることができます。
KeyboardShortcuts.RecorderCocoaの代わりにKeyboardShortcuts.Recorderを使用するRecorder:
import AppKit
import KeyboardShortcuts
final class SettingsViewController : NSViewController {
override func loadView ( ) {
view = NSView ( )
let recorder = KeyboardShortcuts . RecorderCocoa ( for : . toggleUnicornMode )
view . addSubview ( recorder )
}
} このパッケージはローカライズをサポートしています。 PRのようこそ!
.lprojサフィックスを使用する名前を持つディレクトリを作成します。詳細はこちら。Localizable.stringsという名前のファイルを作成し、 KeyboardShortcuts/Localization/en.lproj/Localizable.stringsの内容を作成した新しいファイルにコピーします。APIドキュメントを参照してください。
NSMenuItemで録音されたキーボードショートカットを表示しますNSMenuItem#setShortcut参照してください。
アプリは、ユーザー定義のアクションのためにキーボードショートカットをサポートする必要がある場合があります。通常、キーボードショートカットを前もってextension KeyboardShortcuts.Name {} 。ただし、これは要件ではありません。さまざまなAPI(たとえば、 .onKeyDown(.unicornMode) {} )を呼び出すときにdot-syntaxを使用できるようにするためだけのものです。 KeyboardShortcut.Nameの動的に作成して、自分で保存できます。これは、Example Projectで実行されています。
デフォルトのキーボードショートカットの設定は、別のパッケージから移行したり、自分のために何かを作ったりする場合に役立ちます。ただし、公開されているアプリにこれを設定しないでください。ユーザーは、ランダムなアプリが既存のキーボードショートカットを盗むと迷惑になります。一般に、最初のアプリの起動にウェルカム画面を表示する方が、ユーザーがショートカットを設定できるようにします。
import KeyboardShortcuts
extension KeyboardShortcuts . Name {
static let toggleUnicornMode = Self ( " toggleUnicornMode " , default : . init ( . k , modifiers : [ . command , . option ] ) )
} すべてのキーボードショートカットName取得するには、 KeyboardShortcuts.Nameを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 )セットのキーボードショートカットですべてのNameを取得するには:
print ( KeyboardShortcuts . Name . allCases . filter { $0 . shortcut != nil } ) MASShortcutとどう違うのですか?このパッケージ:
NSMenuItemに接続します。NSMenuがオープンしているときに機能します(メニューバーアプリなど)。 MASShortcut :
HotKeyとどう違うのですか? HotKey 、ハードコーディングされたキーボードショートカットを追加するのに適していますが、ユーザーが独自のキーボードショートカットを選択するためのUIコンポーネントは提供されません。
Carbonをインポートするのはなぜですか?それは非推奨ではありませんか?カーボンAPIのほとんどは数年前に非推奨でしたが、Appleが現代の代替品を出荷したことがないことが残っています。これには、グローバルキーボードショートカットの登録が含まれます。ただし、これについて心配する必要はありません。 Appleは、ここで使用されているカーボンAPIを非難する前に、確実に新しいAPIを出荷します。
いいえ。
これはこのパッケージの範囲外です。 NSEvent.addLocalMonitorForEvents 、 NSMenuItem with keyboard shortcut(hiddineも隠すことができます)、またはswiftuiのView#keyboardShortcut() modifierを使用できます。
いいえ、サンドボックスアプリでは機能しないためです。アプリがサンドボックス化されていない場合は、 MediaKeyTapを使用できます。
いいえ。ただし、ココアポッドやカルタゴを通常使用していても、このパッケージにSwiftパッケージマネージャーを使用することを妨げるものはありません。