MyDock 是一个 macOS + iOS 双端 SwiftUI 工具。你可以在 Mac 上配置一组常用应用,然后在 iPhone/iPad 上通过局域网发现 Mac、输入四位配对码,点击图标让 Mac 打开对应应用。macOS 端也提供 QuickDock 页面,可以在 Mac 本机直接点击同一组图标打开应用。
当前版本专注最小可用体验:
- Bonjour/mDNS 自动发现局域网内的 Mac。
- 四位数字配对码。
- 临时 token 鉴权。
- Mac 端手动配置最多 8 页 App 槽位。
- 每页可选 32、24、18、12 或 8 个槽位,槽位越少图标越大。
- iOS 端同步显示 Mac 配置的 App 图标。
- 不包含登录、云同步、加密、自动扫描全量应用、菜单栏常驻。
后续计划:
- 更完整的 App 扫描与搜索。
- 更正式的签名、发布与安全策略。
- 菜单栏常驻和更完善的连接状态管理。
感谢大家支持!
- macOS + Xcode。
- 一台 Mac,用来运行
mydock_mac。 - 一台 iPhone 或 iPad,用来运行
mydock_ios。 - Mac 和 iPhone/iPad 需要连接到同一个局域网。
- iOS 真机运行需要 Apple ID 或 Apple Developer 账号完成本地签名。
MyDock/
mydock.xcworkspace
mydock_mac/
mydock_mac.xcodeproj
mydock_mac/
mydock_ios/
mydock_ios.xcodeproj
mydock_ios/
shared/
AppCommand.swift
PairingModels.swift
docs/
architecture.md
protocol.md
project_context.md
建议优先打开根目录的 mydock.xcworkspace,这样 iOS、macOS 和 shared 文件会在同一个 workspace 中查看。
-
用 Xcode 打开:
MyDock/mydock.xcworkspace -
在 Xcode 顶部 Scheme 选择
mydock_mac。 -
运行目标选择
My Mac。 -
点击 Run。
-
App 启动后进入
Pair页面,确认状态显示:Running- 监听地址类似
0.0.0.0:8080 / [::]:8080 - Bonjour 已发布
- 页面上显示四位
Pairing code
如果 8080 被占用,macOS 端会自动重试,并可能临时切换到系统分配的 fallback 端口。iOS 端通过 Bonjour 发现实际端口,所以通常不需要手动输入 IP。
-
在 macOS App 底部切到
Apps页面。 -
页面右上角可以选择槽位页,最多 8 页。
-
页面右上角也可以选择当前页槽位数:32、24、18、12 或 8。槽位数越少,Mac QuickDock 和 iOS Apps 页面上的图标越大。
-
点击空槽位的虚线框,或点击已有 App 槽位。
-
在弹出的系统文件选择器中选择一个
.app,例如:/Applications/Safari.app /Applications/Visual Studio Code.app /System/Applications/System Settings.app -
选择后,槽位会显示 App 图标、名称和 bundle identifier。
-
iOS 端配对成功后会自动同步当前槽位页;也可以在 iOS 的
Apps页面选择页并点击刷新按钮重新同步。
- 在 Mac 的
Apps页面点击右上角的删除/清空按钮。 - 选择要清空的槽位。
- 再次点击确认按钮。
Mac 端底部的 QuickDock 页面会复用 Apps 页面配置的槽位页。你可以在 QuickDock 顶部切换页;点击已配置的图标,会直接在 Mac 本机打开对应应用,不经过 iPhone、Bonjour 或 HTTP。
-
用 Xcode 打开
mydock.xcworkspace。 -
在 Scheme 中选择
mydock_ios。 -
用 USB 或无线调试连接 iPhone/iPad。
-
在运行目标中选择你的 iPhone/iPad。
-
打开
mydock_iostarget 的Signing & Capabilities。 -
在
Team中选择你的 Apple ID 或开发者团队。 -
如果 Xcode 提示 Bundle Identifier 冲突,把
com.yzy.mydock-ios改成你自己的唯一 bundle id,例如:com.yourname.mydock-ios -
点击 Run,把临时开发版本安装到真机。
-
第一次运行时,iOS 会请求局域网访问权限,请选择允许。这个权限用于发现局域网内运行 MyDock macOS 端的 Mac。
免费 Apple ID 安装的开发版本通常有有效期限制;过期后需要重新用 Xcode 安装。
-
先运行 macOS 端,并停留在
Pair页面查看四位配对码。 -
再运行 iOS 端。
-
在 iOS 的
Pair页面等待Discovered Macs出现你的 Mac。 -
点击你的 Mac。
-
输入 Mac 屏幕上显示的四位 pairing code。
-
点击 Pair。
-
配对成功后,iOS 会保存临时 token,并自动同步 Mac 端当前槽位页的 Apps。
-
切到 iOS 的
Apps页面,可以切换槽位页;点击图标即可让 Mac 打开对应应用。
请检查:
- Mac 和 iPhone/iPad 是否在同一个 Wi-Fi 或局域网。
- iOS 是否允许 MyDock 访问局域网。
- macOS 端
Pair页面是否显示Running和 Bonjour 服务名。 - macOS 防火墙是否阻止了当前 Debug App 的入站连接。
- 路由器是否开启了 AP 隔离、访客网络隔离或 mDNS/Bonjour 屏蔽。
请检查:
- iOS 输入的四位 code 是否和 Mac 屏幕完全一致。
- Mac App 是否重启过。Mac 端 token 只保存在内存中,重启后需要重新配对。
- iOS 是否选择了正确的 Mac。
请检查:
- Mac 的
Apps页面是否已经选择了对应.app。 - 该 App 是否还安装在 Mac 上。
- iOS 的
Apps页面是否刷新到了最新槽位。 - Mac 端日志是否显示
Unauthorized、App not found或其他错误。
Mac 端会把图标重新绘制为 256 * 256 PNG 再同步给 iOS。如果你从旧版本升级,建议重启 Mac 端 App,或在 Mac 的 Apps 页面重新选择一次应用,然后在 iOS 端刷新 Apps。
iOS 端 Info.plist 已配置:
NSLocalNetworkUsageDescriptionNSBonjourServices,包含_mydock._tcpNSAppTransportSecurity/NSAllowsArbitraryLoads
macOS 端 entitlements 已启用:
- App Sandbox
- Network Server
- Network Client
当前版本使用局域网 HTTP 通信,安全边界较轻,适合个人局域网测试和原型使用。