Skip to content

PRINCEofAsgd/-My-Dock-

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MyDock

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 中查看。

在 Mac 上编译并运行 macOS 端

  1. 用 Xcode 打开:

    MyDock/mydock.xcworkspace
    
  2. 在 Xcode 顶部 Scheme 选择 mydock_mac

  3. 运行目标选择 My Mac

  4. 点击 Run。

  5. App 启动后进入 Pair 页面,确认状态显示:

    • Running
    • 监听地址类似 0.0.0.0:8080 / [::]:8080
    • Bonjour 已发布
    • 页面上显示四位 Pairing code

如果 8080 被占用,macOS 端会自动重试,并可能临时切换到系统分配的 fallback 端口。iOS 端通过 Bonjour 发现实际端口,所以通常不需要手动输入 IP。

在 Mac 端加入 Apps

  1. 在 macOS App 底部切到 Apps 页面。

  2. 页面右上角可以选择槽位页,最多 8 页。

  3. 页面右上角也可以选择当前页槽位数:32、24、18、12 或 8。槽位数越少,Mac QuickDock 和 iOS Apps 页面上的图标越大。

  4. 点击空槽位的虚线框,或点击已有 App 槽位。

  5. 在弹出的系统文件选择器中选择一个 .app,例如:

    /Applications/Safari.app
    /Applications/Visual Studio Code.app
    /System/Applications/System Settings.app
    
  6. 选择后,槽位会显示 App 图标、名称和 bundle identifier。

  7. iOS 端配对成功后会自动同步当前槽位页;也可以在 iOS 的 Apps 页面选择页并点击刷新按钮重新同步。

删除槽位

  1. 在 Mac 的 Apps 页面点击右上角的删除/清空按钮。
  2. 选择要清空的槽位。
  3. 再次点击确认按钮。

QuickDock 本机启动

Mac 端底部的 QuickDock 页面会复用 Apps 页面配置的槽位页。你可以在 QuickDock 顶部切换页;点击已配置的图标,会直接在 Mac 本机打开对应应用,不经过 iPhone、Bonjour 或 HTTP。

在 iOS 真机上构建临时版本

  1. 用 Xcode 打开 mydock.xcworkspace

  2. 在 Scheme 中选择 mydock_ios

  3. 用 USB 或无线调试连接 iPhone/iPad。

  4. 在运行目标中选择你的 iPhone/iPad。

  5. 打开 mydock_ios target 的 Signing & Capabilities

  6. Team 中选择你的 Apple ID 或开发者团队。

  7. 如果 Xcode 提示 Bundle Identifier 冲突,把 com.yzy.mydock-ios 改成你自己的唯一 bundle id,例如:

    com.yourname.mydock-ios
    
  8. 点击 Run,把临时开发版本安装到真机。

  9. 第一次运行时,iOS 会请求局域网访问权限,请选择允许。这个权限用于发现局域网内运行 MyDock macOS 端的 Mac。

免费 Apple ID 安装的开发版本通常有有效期限制;过期后需要重新用 Xcode 安装。

iOS 端使用流程

  1. 先运行 macOS 端,并停留在 Pair 页面查看四位配对码。

  2. 再运行 iOS 端。

  3. 在 iOS 的 Pair 页面等待 Discovered Macs 出现你的 Mac。

  4. 点击你的 Mac。

  5. 输入 Mac 屏幕上显示的四位 pairing code。

  6. 点击 Pair。

  7. 配对成功后,iOS 会保存临时 token,并自动同步 Mac 端当前槽位页的 Apps。

  8. 切到 iOS 的 Apps 页面,可以切换槽位页;点击图标即可让 Mac 打开对应应用。

常见问题

iOS 端发现不到 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 没有打开应用

请检查:

  • Mac 的 Apps 页面是否已经选择了对应 .app
  • 该 App 是否还安装在 Mac 上。
  • iOS 的 Apps 页面是否刷新到了最新槽位。
  • Mac 端日志是否显示 UnauthorizedApp not found 或其他错误。

iOS Apps 图标仍然模糊

Mac 端会把图标重新绘制为 256 * 256 PNG 再同步给 iOS。如果你从旧版本升级,建议重启 Mac 端 App,或在 Mac 的 Apps 页面重新选择一次应用,然后在 iOS 端刷新 Apps。

网络与权限说明

iOS 端 Info.plist 已配置:

  • NSLocalNetworkUsageDescription
  • NSBonjourServices,包含 _mydock._tcp
  • NSAppTransportSecurity/NSAllowsArbitraryLoads

macOS 端 entitlements 已启用:

  • App Sandbox
  • Network Server
  • Network Client

当前版本使用局域网 HTTP 通信,安全边界较轻,适合个人局域网测试和原型使用。

更多文档

About

Mac/iOS双端便捷程序坞应用。Mac端可设置需要便捷打开的程序,也可把便捷打开页面放在副屏直接点击打开。iOS端可在局域网内搜索Mac设备,输入Mac端的四位验证码后,即可在iOS端点击,便捷打开Mac端应用。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages