一款为 macOS「iPhone 镜像」设计的自动翻页工具。
iTurner 会按照你设定的随机时间区间,在 iPhone 镜像窗口中执行经过验证的按住、滑动、释放手势,并通过一枚轻量的液态玻璃 HUD 显示倒计时、翻页次数与运行状态。
它适合需要连续阅读、展示文稿、复习资料或进行无人值守页面演示的场景。所有识别与控制都在本机完成,iTurner 不会截图、不读取页面文字,也不会上传阅读内容。
当前版本为开源预览版。核心自动翻页、首次引导、可调时间区间、桌面 HUD、菜单栏入口、暂停与退出功能均已实现。
- 先教会用户,再开始工作:首次启动会逐步引导连接 iPhone 镜像、打开阅读页面、确认翻页方向并开启辅助功能权限。
- 不打扰阅读:日常操作集中在屏幕顶部的小型 HUD 与菜单栏中,主窗口可以随时关闭。
- 自然节奏:每次翻页从最短与最长等待时间之间随机选择,避免机械的固定间隔。
- 本地与克制:不截屏、不进行 OCR、不上传数据、不集成分析 SDK。
- 可验证:翻页次数、倒计时、运行状态和失败原因始终可见。
iTurner 会在 iPhone 镜像窗口右侧按住约 0.9 秒,再连续向左拖动并释放。这套手势针对常见阅读页面进行了优化,比单击、瞬时滑动或只移动鼠标更稳定。
可以分别设置最短与最长等待时间,范围为 2–120 秒。修改后会自动保存,并从下一轮倒计时开始生效。
首次打开 App 时,iTurner 会依次完成:
- 介绍本地运行与隐私边界。
- 引导打开并连接「iPhone 镜像」。
- 引导在 iPhone 中打开好测或其他阅读应用,并进入正文页面。
- 说明页面需要支持从右侧向左滑动翻到下一页。
- 请求 macOS 辅助功能权限。
- 设置随机翻页区间并开始运行。
HUD 默认显示在菜单栏与刘海下方,包含:
- 距离下一次翻页的倒计时。
- 已完成的翻页次数。
- 当前运行、暂停或翻页中的状态。
- 快速暂停与继续按钮。
- 纵向折页数字动画与轻量动态模糊。
- 在控制中心开始或暂停自动翻页。
- 根据阅读应用选择向左或向右翻页。
- 在菜单栏快速打开控制中心。
- 随时隐藏或重新显示桌面 HUD。
- 可选登录时自动启动 iTurner。
- 重新进入首次引导。
- 从控制中心或菜单栏完整退出 iTurner。
- 支持 Apple「iPhone 镜像」的 Mac 与 iPhone。
- macOS 15 或更高版本。
- Swift 5.9 或更高版本,用于从源代码构建。
- macOS 辅助功能权限,用于发送按住与拖动手势。
克隆仓库并运行安装脚本:
git clone https://github.com/huyan1349/iturner.git
cd iturner
chmod +x Scripts/build_app.sh Scripts/install.sh
./Scripts/install.sh
open /Applications/iTurner.app安装脚本会执行以下操作:
- 使用 Swift Release 配置构建可执行文件。
- 生成标准的
iTurner.app应用包。 - 进行本地临时代码签名。
- 将应用安装到
/Applications/iTurner.app。
首次启动可能会被 macOS 要求确认打开来源。公开正式版本会进一步接入 Developer ID 签名与公证流程。
仓库提供完整的正式发行脚本,但不会保存任何证书或公证凭据。
先将公证凭据保存到钥匙串:
xcrun notarytool store-credentials "iTurner-公证" \
--apple-id "你的 Apple ID" \
--team-id "你的 Team ID" \
--password "App 专用密码"然后执行:
DEVELOPER_ID_APPLICATION="Developer ID Application: 你的名称 (TEAMID)" \
NOTARY_PROFILE="iTurner-公证" \
./Scripts/sign_and_notarize.sh脚本会完成 Release 构建、Hardened Runtime 签名、公证提交、凭据装订、Gatekeeper 验证和最终 ZIP 打包。产物位于:
dist/iTurner-正式版.zip
swift run iTurner构建但不运行:
swift build验证左右翻页手势路径:
swift run iTurnerVerifier生成可分发的 App 包:
./Scripts/build_app.sh构建产物位于:
dist/iTurner.app
在 Mac 上打开「iPhone 镜像」,按照 Apple 的提示完成 iPhone 连接。请保持镜像窗口处于可见状态,不要最小化。
在镜像中的 iPhone 上打开好测或其他阅读应用,进入需要连续阅读的正文页面。手动尝试一次从页面右侧按住并向左拖动,确认该页面使用这一方向翻到下一页。
在 iTurner 的引导页点击「请求权限」,或手动进入:
系统设置 → 隐私与安全性 → 辅助功能 → iTurner
权限只用于发送鼠标按下、拖动与释放事件。iTurner 不会读取键盘输入。
设置最短与最长等待时间,点击「完成并开始」。HUD 出现后,倒计时结束会执行一次翻页,再自动进入下一轮随机倒计时。
仓库仍保留独立脚本,方便自动化、调试与无主界面环境使用:
chmod +x Scripts/flip_loop.sh
ITURNER_MIN_DELAY=7 ITURNER_MAX_DELAY=10 ./Scripts/flip_loop.sh可用环境变量:
| 变量 | 默认值 | 说明 |
|---|---|---|
ITURNER_MIN_DELAY |
7 |
最短等待秒数 |
ITURNER_MAX_DELAY |
10 |
最长等待秒数 |
ITURNER_APP_SUPPORT |
~/Library/Application Support/iTurner |
运行数据目录 |
ITURNER_STATUS_FILE |
.../flip-status.json |
HUD 状态文件位置 |
ITURNER_COUNT_FILE |
.../flip-count |
翻页计数文件位置 |
iTurner 的核心逻辑不需要网络连接。
- 不截取 iPhone 镜像画面。
- 不读取页面文字或图片。
- 不进行 OCR、内容识别或云端分析。
- 不收集账号、设备或行为统计。
- 不包含广告、遥测或第三方分析 SDK。
- 只读取 iPhone 镜像窗口的位置和尺寸,并发送本地鼠标事件。
详细说明见 隐私说明。
- 确认「iPhone 镜像」窗口没有最小化。
- 确认当前阅读页面支持从右向左翻页。
- 检查 iTurner 是否拥有辅助功能权限。
- 手动滑动一次,确认页面没有弹窗或遮罩拦截手势。
通常是镜像窗口被关闭、最小化或系统权限被撤销。重新打开 iPhone 镜像,在控制中心点击「重新检测」,再开始运行。
随机区间更适合阅读与展示场景,可以减少机械感。若希望接近固定间隔,把最短与最长时间设置为同一个值即可。
点击控制中心中的「退出」,或在菜单栏 iTurner 图标中选择「退出 iTurner」。关闭主窗口不会终止菜单栏进程。
iturner/
├── Package.swift
├── Resources/
│ └── Info.plist
├── Scripts/
│ ├── build_app.sh
│ ├── generate_icon.swift
│ ├── install.sh
│ ├── sign_and_notarize.sh
│ └── flip_loop.sh
├── Sources/iTurner/
│ ├── iTurnerApp.swift
│ ├── AppModel.swift
│ ├── OnboardingView.swift
│ ├── ControlPanelView.swift
│ ├── HUD.swift
│ └── GlassComponents.swift
├── Sources/iTurnerCore/
│ └── PageTurnGesture.swift
├── Sources/iTurnerVerifier/
│ └── main.swift
├── Documentation/
└── LICENSE
- Developer ID 签名、公证与正式发行包。
- 手势校准与更多翻页方向。
- 针对不同阅读应用保存独立配置。
- 自动更新服务。
- 无障碍描述与键盘操作完善。
- UI 自动化测试与更多真实阅读应用的兼容性测试。
欢迎提交问题、改进建议和拉取请求。请先阅读 贡献指南 与 安全策略。
项目使用 MIT 许可证,详见 LICENSE。
iTurner 是独立开源项目,与 Apple Inc. 没有关联,也未获得 Apple Inc. 的赞助或背书。「iPhone」与「iPhone 镜像」是 Apple Inc. 的商标或产品名称。