loveuer 72fd1ef2d6 Fix: Auto-initialize app after accessibility permission grant
Problem:
- When user first launches the app without accessibility permissions,
  the system shows a permission dialog
- After granting permissions, the app was already running but not
  fully initialized
- User couldn't reopen the app (already running) and functionality
  wasn't available

Solution:
- Implemented permission monitoring with Timer (checks every 1 second)
- Deferred app initialization until permissions are granted
- Split initialization into initializeApp() method
- Automatically initialize once permissions are detected

User Experience:
- User grants permission in System Preferences
- App automatically detects permission change
- App initializes and starts working without restart
- Updated alert message to inform user about auto-start

Technical Changes:
- Added permissionCheckTimer for monitoring
- Added initializeApp() for deferred initialization
- Store config and keyMapper as instance variables
- Use Task { @MainActor } for timer callback
- Changed alert style from warning to informational

🤖 Generated with [Qoder](https://qoder.com)
2025-12-02 18:10:53 +08:00

uskey

A macOS utility for remapping keyboard keys.

Features

  • Remap any keyboard key to another key
  • Lightweight and efficient
  • Native macOS integration using CoreGraphics
  • JSON-based configuration
  • Configurable logging levels

Requirements

  • macOS 13.0+
  • Swift 6.0+

Installation

  1. Download the latest uskey-x.x.x.dmg from releases
  2. Open the DMG file
  3. Drag uskey.app to the Applications folder
  4. Launch from Applications or Spotlight
  5. Grant Accessibility permissions when prompted

Option 2: Build from Source

git clone <repository-url>
cd uskey
./build-app.sh && ./build-dmg.sh

The DMG will be created at .build/release/uskey-1.0.0.dmg

For detailed build instructions, see BUILD.md

Configuration

The configuration file is automatically created at ~/.config/uskey/config.json on first run.

Configuration Format

{
  "log": {
    "level": "info"
  },
  "mapping": {
    "backslash2backspace": {
      "from": 42,
      "to": 51
    },
    "backspace2backslash": {
      "from": 51,
      "to": 42
    }
  }
}

Log Levels

  • debug - Detailed debugging information including every key remap
  • info - General information messages (default)
  • warning - Warning messages
  • error - Error messages only

Key Codes

Common macOS key codes:

  • Backspace: 51
  • Backslash \: 42
  • Enter: 36
  • Tab: 48
  • Space: 49

You can add custom mappings by editing the config file and restarting the application.

Usage

uskey

Important: On first run, you'll be prompted to grant Accessibility permissions in System Preferences > Privacy & Security > Accessibility.

Troubleshooting

Enable Mapping Doesn't Work

If you can't enable mapping after installation:

  1. Check Accessibility Permissions

    • Open System Preferences > Privacy & Security > Accessibility
    • Ensure uskey is in the list and checked
    • If not, click the + button and add the app
    • After granting permissions, restart the app
  2. Check Logs

    • Click the uskey menu bar icon
    • Select "Open Logs Folder" (⌘L)
    • Open the latest log file (e.g., uskey-2025-12-02.log)
    • Look for ERROR messages
  3. Enable Debug Logging

    • Edit ~/.config/uskey/config.json
    • Change "level": "info" to "level": "debug"
    • Click "Reload Configuration" (⌘R) in the menu
    • Try enabling mapping again
    • Check logs for detailed debug information

Log Files Location

Logs are stored at: ~/.config/uskey/logs/uskey-YYYY-MM-DD.log

You can view logs by:

  • Menu Bar: Click uskey icon → "View Current Log"
  • Finder: Click uskey icon → "Open Logs Folder" (⌘L)
  • Terminal: tail -f ~/.config/uskey/logs/uskey-$(date +%Y-%m-%d).log

Common Issues

"Failed to create event tap"

  • Cause: Missing accessibility permissions
  • Solution: Grant accessibility permissions and restart the app

Configuration not found

  • Cause: Config file doesn't exist
  • Solution: The app will auto-create it at ~/.config/uskey/config.json

Mapping not working

  • Cause: Event tap is not enabled
  • Solution: Check logs and ensure accessibility permissions are granted

Development

Build the project:

swift build

Run in debug mode:

swift run

License

MIT

Description
No description provided
Readme 2.1 MiB
Languages
Swift 79.7%
Shell 20.3%