像 Windows 一样,在 Mac 上单按 Shift 切换中英文。 下载最新版本
ShiftIME 是一个原生、轻量且事件驱动的 macOS 输入法切换增强工具。它在后台运行,默认显示于菜单栏且不显示于 Dock。
- 单独点按
Shift,从当前输入法切换到最近使用的英文输入法。 - 已在英文输入法时,再次点按
Shift会返回上次使用的输入法。 - 返回 Apple 拼音时会等待并确认输入来源已完成选择;如果 macOS 尚未完成切换,会自动重试,并暂存切换期间的第一个字符,避免显示为拼音却只能输入英文。
- 切换后由 macOS 在文字光标旁显示原生输入法提示;仅在输入框中 App 未应用新输入法时才短暂转移焦点,避免提示被关闭。
- Shift 用于输入大写字母、组合快捷键、Shift 点击或 Shift 滚动时不会误触发。
- 在 Apple 拼音输入法中按
Shift + Space,切换系统全形/半形标点模式。 - 不显示切换提示。
- 支持 Apple 拼音-繁体和拼音-简体。
- 不应用于 Apple 注音输入法;在注音或其他输入法中,
Shift + Space会原样传给当前应用。
以上两项功能可以在设置中分别启用或停用。
- 默认在常见远程桌面、串流软件和游戏中同时放行
Shift与Shift + Space,避免快捷键被 ShiftIME 拦截。 - 自动识别常见远程软件、macOS 游戏分类,以及 Steam、GOG、Epic 游戏路径。
- 可以在设置的应用程序列表中加入其他 App,并分别开关
Shift与Shift + Space放行规则。 - 新加入的 App 默认同时放行两项快捷键;菜单栏菜单也能快速加入当前 App。
- 显示菜单栏图标,默认开启。
- 显示 Dock 图标,默认关闭。
- macOS 未显示光标旁提示时,改在屏幕中央显示切换提示,默认关闭。
- 如果同时隐藏两个图标,再次从 Finder 打开 ShiftIME 即可返回设置。
- macOS 13 或以上。
- “系统设置 → 隐私与安全性 → 辅助功能”。
- “系统设置 → 隐私与安全性 → 输入监控”。
首次启动会显示设置窗口与权限状态。如果重新构建了 ad-hoc 签名的应用,macOS 可能要求重新授权。
需要 Apple Swift 工具链;也可以直接使用 Xcode 打开 Package.swift。
# 纯 Swift 状态机与输入来源识别检查
make test
# 创建 dist/ShiftIME.app
make app
# 创建 dist/ShiftIME-1.0.0.dmg
make dmg创建同时支持 Apple Silicon 和 Intel 的 Universal Binary:
BUILD_ARCHS="arm64 x86_64" VERSION=1.0.0 make dmg其他可用参数:
VERSION=1.0.0 BUILD_NUMBER=2 CONFIGURATION=release make app运行完整验证:
make verify- 从 Releases 下载并打开
ShiftIME-<版本>.dmg(或本机构建的dist/ShiftIME-<版本>.dmg)。 - 将
ShiftIME.app拖入映像中的Applications快捷方式。 - 从“应用程序”启动 ShiftIME。
- 按照设置窗口指示授予两项键盘权限。
从旧版 ShiftInput 升级:请先退出并删除 ShiftInput.app,否则两个应用会同时响应 Shift;ShiftIME 需要重新授予键盘权限,设置也会恢复默认值。
.github/workflows/build-dmg.yml 会在以下情况运行:
- 推送到
main。 - 创建 Pull Request。
- 手动运行 workflow。
流程会执行检查、创建 arm64 + x86_64 Universal Binary、封装 DMG、验证磁盘映像,最后作为 GitHub Actions artifact 上传。
要发布新版本,请修改根目录 VERSION 中的语义化版本号(例如 0.3.0),提交并推送到 main。构建成功后,workflow 会自动创建对应的 v0.3.0 标签和 GitHub Release、附上 DMG,并在 Release 说明中列出自上一个版本以来的所有 commits。已存在的版本标签不会被覆盖。
- Swift、AppKit、Core Graphics、Text Input Source Services。
CGEventTap只拦截键盘事件;Shift 点击与 Shift 滚动改用窗口服务器的事件计数判断,系统的鼠标和滚动事件完全不经过 ShiftIME。- 使用系统输入来源通知,不持续轮询输入法状态。
- 每次输入来源通知只读取一次系统快照,并一致地更新保存来源、拼音能力和界面。
- 使用
TISSelectInputSource切换输入法并保存上次来源;切换后以当前来源 ID 与选择状态确认,必要时有限重试,并在确认完成前暂存普通文字按键与 Shift,避免切换后立即输入的大写字母被拼音当成单独的 Shift 而切换中英文。 Shift + Space仅在识别为 Apple 拼音时转发为原生Option + Shift + H命令。- 仅在前台 App 改变时更新应用程序数据;远程软件和游戏放行判断不会轮询窗口或进程。
- Event tap 超时停用时会自动恢复;权限被撤销时会停止监听。
- Event tap 被系统停用时会安全重建;切换快捷键设置无需重建监听器。
.github/workflows/build-dmg.yml GitHub Actions DMG 构建
VERSION 应用程序与 Release 版本号
Sources/ShiftIMECore/ 可测试的纯 Swift 逻辑
Sources/ShiftIME/ AppKit 应用与系统集成
Resources/AppIcon.png 应用图标 1024px 主图
Scripts/build-app.sh .app 构建脚本
Scripts/generate-app-icon.sh ICNS 图标尺寸集生成脚本
Scripts/create-dmg.sh DMG 打包脚本
Scripts/smoke-test-app.sh 应用生命周期与菜单栏检查
Scripts/StateMachineChecks.swift 状态机与拼音识别检查
Makefile
Package.swift
