TypeSwitch is a macOS menu bar utility for switching input methods per app.
✨ System-native appearance - TypeSwitch uses SwiftUI menu bar controls and follows macOS light and dark mode.
- 🔄 Auto Switch: Switch input methods when changing apps
- 📱 Menu Bar Interface: View and set rules quickly
- 🎯 Per-App Settings: Configure each app independently
- 🚀 Auto Start: Run automatically at login
- 📋 Running Apps: Configure current apps directly
- ⚙️ Configured Apps: Manage existing settings
- ⌨️ Keyboard Shortcuts:
⌘ + Q- Quit application
- 🔗 Quick Links: Direct access to GitHub repository and latest releases
- 🖥 macOS 14.0 or later
- 🔐 Accessibility permission for monitoring application switches
- ⌨️ Input method switching permission
brew install ygsgdbd/tap/typeswitch --cask- Download the latest version from Releases
- Drag the application to Applications folder
- Grant necessary system permissions on first launch
- After launching, the app icon (⌨️) appears in the menu bar
- Click the menu bar icon to open the dropdown menu
- Pick an app from Running Apps or Configured Apps
- Choose Follow global setting, Remember Last, or a fixed input method
- TypeSwitch switches input methods when that app becomes active
- Use Settings for the global rule and launch at login
TypeSwitch takes user privacy and security seriously:
- 🏠 All data is stored locally, nothing is uploaded to the network
- 🚫 No user information or usage data is collected
- 📖 Source code is fully open source and welcome for review
- 🛡️ Uses Swift's built-in security features
- 🔐 Permission usage:
- Accessibility: Only used for detecting application switches
- Input method switching: Only used for switching input methods
- Auto-start: Only used for launching at startup
This project uses the following open source libraries:
- Defaults (7.3.1) - For persistent settings storage
- SwiftUIX (0.2.3) - Provides additional SwiftUI components
- SwifterSwift (8.0.0) - Swift native extensions
Build tools:
- Tuist - For project generation and management
- Xcode 15.0+
- Swift 5.9+
- macOS 14.0+
- Tuist
-
Install Tuist
-
Clone repository
git clone https://github.com/ygsgdbd/TypeSwitch.git
cd TypeSwitch- Generate Xcode project
tuist generate- Open and build
open TypeSwitch.xcworkspaceThis project uses GitHub Actions for automated building and releasing:
- Push a new version tag to trigger automatic build:
git tag v1.0.0
git push origin v1.0.0-
GitHub Actions will automatically:
- Build the application
- Create DMG package
- Release new version
- Generate changelog
-
Build artifacts can be downloaded from Releases
TypeSwitch/
├── Project.swift # Tuist project configuration
├── Tuist/ # Tuist configuration files
│ └── Signing/
│ └── TypeSwitch.entitlements
├── TypeSwitch/ # Main source code
│ ├── Sources/
│ │ ├── App/ # App entry point
│ │ │ └── TypeSwitchApp.swift
│ │ ├── Core/ # Core models and extensions
│ │ │ ├── Models/
│ │ │ │ ├── AppInfo.swift
│ │ │ │ ├── InputMethod.swift
│ │ │ │ └── InputSourceProperties.swift
│ │ │ └── Extensions/
│ │ │ └── Defaults+Extensions.swift
│ │ ├── Services/ # Business logic services
│ │ │ ├── AppManagement/
│ │ │ │ ├── AppInfoService.swift
│ │ │ │ └── AppListService.swift
│ │ │ ├── InputMethod/
│ │ │ │ ├── InputMethodManager.swift
│ │ │ │ └── InputMethodService.swift
│ │ │ └── System/
│ │ │ └── LaunchAtLoginService.swift
│ │ └── UI/ # User interface
│ │ └── Views/
│ │ └── MenuBar/ # Menu bar interface
│ │ ├── MenuBarView.swift
│ │ ├── RunningAppsView.swift
│ │ ├── ConfiguredAppsView.swift
│ │ ├── AppRowView.swift
│ │ ├── SettingsView.swift
│ │ └── AppInfoView.swift
│ └── Resources/ # App resources
│ ├── Assets.xcassets/ # App icons and images
│ └── *.lproj/ # Localization files
└── Screenshots/ # App screenshots
Pull requests and issues are welcome. Before submitting a PR, please ensure:
- Code follows project style
- Necessary tests are added
- Documentation is updated
This project is licensed under the MIT License. See LICENSE file for details.
This project was inspired by and received help from:
- SwitchKey - An excellent input method switcher that provided valuable reference
- Swift and SwiftUI community
- All contributors and users who provided feedback
