{"id":44233375,"url":"https://github.com/haptictide/screenpresenter","last_synced_at":"2026-04-15T03:02:12.539Z","repository":{"id":332306506,"uuid":"1130247068","full_name":"HapticTide/ScreenPresenter","owner":"HapticTide","description":"A screen-presenting tool that lets product teams clearly display iOS and Android apps on macOS, built for smooth demos, reliable connections, and distraction-free presentations.","archived":false,"fork":false,"pushed_at":"2026-02-10T08:03:52.000Z","size":24526,"stargazers_count":5,"open_issues_count":1,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-10T11:14:47.727Z","etag":null,"topics":["markdown-editor","quicktime","screen-capture","screen-capturing","showcase"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/HapticTide.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-08T08:33:44.000Z","updated_at":"2026-02-10T08:19:19.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/HapticTide/ScreenPresenter","commit_stats":null,"previous_names":["haptictide/screenpresenter"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/HapticTide/ScreenPresenter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HapticTide%2FScreenPresenter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HapticTide%2FScreenPresenter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HapticTide%2FScreenPresenter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HapticTide%2FScreenPresenter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HapticTide","download_url":"https://codeload.github.com/HapticTide/ScreenPresenter/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HapticTide%2FScreenPresenter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31824118,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T18:05:02.291Z","status":"online","status_checked_at":"2026-04-15T02:00:06.175Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["markdown-editor","quicktime","screen-capture","screen-capturing","showcase"],"created_at":"2026-02-10T08:00:27.518Z","updated_at":"2026-04-15T03:02:12.531Z","avatar_url":"https://github.com/HapticTide.png","language":"HTML","readme":"# ScreenPresenter\n\nScreenPresenter 是一款 macOS 原生设备投屏工具，支持同时展示 iOS 与 Android 设备屏幕，并提供高还原度的设备边框渲染与内嵌 Markdown 编辑器。\n\n## 截图\n\n| 双设备主界面 | 单设备主界面 |\n|---|---|\n| ![双设备主界面](screenshots/1.png) | ![单设备主界面](screenshots/2.png) |\n\n| 文档编辑 | 分屏查看 |\n|---|---|\n| ![文档编辑](screenshots/3.png) | ![文档查看](screenshots/4.png) |\n\n| 双设备投屏中 | 偏好设置-通用 |\n|---|---|\n| ![双设备投屏中](screenshots/5.png) | ![偏好设置-通用](screenshots/6.png) |\n\n| 偏好设置-捕获 | 偏好设置-权限 |\n|---|---|\n| ![偏好设置-捕获](screenshots/7.png) | ![偏好设置-权限](screenshots/8.png) |\n\n## 核心特性\n\n- iOS 投屏：CoreMediaIO + AVFoundation（QuickTime 同路径）\n- Android 投屏：scrcpy 码流 + VideoToolbox 硬件解码\n- Metal 渲染：CVDisplayLink 驱动高帧率渲染\n- 双设备展示：同窗同时展示 iOS/Android，支持布局切换\n- 设备边框：按设备型号渲染动态岛/刘海/打孔屏/侧键等特征\n- Markdown 编辑器：多标签、语法高亮、主题切换、查找替换、预览模式\n- 本地化：简体中文 / English\n\n## 系统要求\n\n- macOS 14.0+\n- Xcode 15+（开发构建）\n- Apple Silicon / Intel Mac\n\n## 快速开始\n\n### iOS\n\n1. 使用 USB 连接 iOS 设备并在设备上点击“信任此电脑”。\n2. 确保设备已解锁。\n3. 首次启动时授予 ScreenPresenter 摄像头权限（用于系统投屏采集链路）。\n\n### Android\n\n1. 在开发者选项中开启“USB 调试”。\n2. 使用 USB 连接设备，并在设备上确认调试授权。\n3. App 内置 `adb` / `scrcpy-server`，默认无需额外安装工具链。\n\n## 文档编辑器\n\n文档编辑器位于主窗口内，适用于投屏过程中的旁路记录、脚本、演示稿编辑。\n\n### 实现来源\n\n- 基于 [MarkEdit](https://github.com/MarkEdit-app/MarkEdit) 与 [MarkEdit-preview](https://github.com/MarkEdit-app/MarkEdit-preview) 实现。\n- 在原项目基础上结合 ScreenPresenter 场景做了精简与调整（嵌入式集成、菜单与快捷键行为、偏好项与会话逻辑等）。\n\n### 关键行为\n\n- 打开文件时，若当前只有一个空白未改动标签页，会直接复用该标签页。\n- 启动 App 时会自动恢复上次打开的文档（不存在文件会自动跳过）。\n- 未保存状态会在标签上显示标记（新建未落盘与已落盘未保存都支持）。\n- `⌘W` 关闭当前文档标签页（不再关闭 App）。\n\n### 常用快捷键\n\n| 功能 | 快捷键 |\n|---|---|\n| 显示/隐藏文档编辑器 | `⌘⇧M` |\n| 编辑/预览模式切换 | `⌘⇧V` |\n| 查找 | `⌘F` |\n| 查找和替换 | `⌥⌘F` |\n| 查找下一个/上一个 | `⌘G` / `⇧⌘G` |\n| 用所选内容查找 | `⌘E` |\n| 选择所有相同项 | `⌥⌘E` |\n| 选择下个相同项 | `⌘D` |\n| 跳到所选内容 | `⌘J` |\n\n## 偏好设置说明\n\n- 音频捕获默认关闭。\n- 当音频捕获关闭时，设备面板隐藏全部音频相关 UI（包括音频开关与音量控件）。\n- 音频捕获开关为“重启 App 后生效”。偏好设置中已提供黄色提示文案。\n\n## 自动更新\n\n项目使用 Sparkle 自动更新：\n\n- 更新源：`https://raw.githubusercontent.com/HapticTide/ScreenPresenter/main/appcast.xml`\n- 安装包来源：GitHub Releases（公开仓库）\n\n## 构建\n\n```bash\nxcodebuild -project ScreenPresenter.xcodeproj -scheme ScreenPresenter -configuration Debug build\n```\n\n## 发布\n\n推荐使用一键脚本：\n\n```bash\n# 交互式\n./release_oneclick.sh\n\n# 非交互\n./release_oneclick.sh 1.1.0 --yes\n```\n\n发布脚本会串联处理：构建、签名、更新 appcast、创建 Release、回填下载地址。\n\nAgent 发布流程说明见：`skills/screenpresenter-release/SKILL.md`\n\n## 变更记录\n\n- [docs/CHANGELOG.md](docs/CHANGELOG.md)\n\n## 许可证\n\n本项目采用 [MIT License](LICENSE)。\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhaptictide%2Fscreenpresenter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhaptictide%2Fscreenpresenter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhaptictide%2Fscreenpresenter/lists"}