Files
alt-tab-macos/AGENTS.md
T
lwouis 9147a4a864 feat: introducing alt-tab pro!
BREAKING CHANGE: announcement: https://github.com/lwouis/alt-tab-macos/discussions/5533

* improved performance, especially switcher responsiveness
* reduced battery usage even more
* reduced ram usage (closes #5450, closes #5539, closes #5627)
* reduced app size even more
* polished many aspects of the ui; align more with liquid glass
* better handle "ghost" windows (closes #5509)
* fix issue with wrong window order (closes #5492)
* escape closes the switcher on tahoe (closes #5585)
* improve search matches (closes #5488)
* localizations trimmed and reviewed entirely (closes #5583)
* highlight matching app icons when searching, in addition to text
* better settings import/export
* reworked "send feedback" experience
* reworked exceptions ui (closes #5482)
* per-shortcut settings (closes #5313)
* rework about window
2026-05-21 10:21:25 +02:00

1.3 KiB

macOS development

  • Don't use xcode directly to develop
  • Use pure swift 5.8 code to make the app. No interface builder. No SwiftUI.
  • Aim for compact code. Within methods, don't have groups of statements separated with newlines. No inline comments for simple code. Instead, split statements into sub-methods.
  • Use guard closes as much as possible to separate the happy-path under them
  • Organize source files into folders. Folders should group files that change together, at the same pace (e.g. one feature)
  • Favor low latency and responsiveness. Reuse objects, avoid wasting memory or I/O.

Workflow

  • Copy commands from ai/build.sh and run them, to confirm compilation works after you're done with implementing a change

License / Keychain invariant

  • The app's Developer ID, TeamID, and bundle ID must remain stable across builds. Keychain items are tied to the code signature; changing any of these orphans every user's stored license key and forces mass re-activation. If a rotation is unavoidable, plan a migration first (e.g., a backup-restore handler, or kSecAttrAccessGroup with a stable group identifier).
  • Do not introduce legacy SecKeychain* API or kSecAccessControl (biometric/PIN gating) into license code — both can trigger Keychain password prompts, which is bad UX for license activation.