← Back
Roylyl

Roylyl/MacPlay

让Mac通过USB或共用Wi-Fi接收iPhone CarPlay画面的原生macOS应用,支持分辨率与高帧率配置。

View on GitHub ↗
Stars
37
Forks
2
Watchers
37
Open issues
1
Contributors
2
Language
Rust
License
GNU General Public License v3.0
Default branch
main
Created Sep 29, 2026Updated Oct 1, 2026

Star growth

Today—
This week—
This month—

Star history will appear here once this repo has been tracked for a couple of days.

README

MacPlay应用图标

MacPlay

在Mac上显示和操作iPhone的CarPlay界面,支持USB直连与共用Wi-Fi无线连接。

版本1.1.0 运行平台 项目许可 发行附件累计下载量 GitHub Stars

快速入门 · 主要功能 · 其他平台 · 源码构建 · 来源与许可

其他设备:AndroidPlay · WinPlay

快速入门

使用条件

  • macOS14及以上,AppleSilicon或Intel处理器。
  • 支持CarPlay的iPhone;有线需要USB数据线,无线需要蓝牙与允许设备互访的共用Wi-Fi。
  • 安装包内置Node.js与GStreamer运行组件,无需额外安装开发工具。

安装

前往GitHubReleases,根据“苹果菜单→关于本机”中的芯片信息选择安装包:

Mac类型 安装包
AppleM系列 MacPlay-1.1.0-arm64.dmg
Intel MacPlay-1.1.0-x86_64.dmg

打开DMG,将MacPlay拖入“应用程序”后启动。若macOS拦截,在“系统设置→隐私与安全性”中允许打开。当前包采用本地签名,未经过Apple公证。

首次启动自动准备内置认证文件,默认1280×720、60fps,并优先使用内建显示器。更新安装保留已有设置。完整步骤见发行版使用教程。

有线CarPlay

  1. 用USB数据线连接iPhone与Mac,解锁iPhone并完成“信任此电脑”。
  2. 在“连接”页选择“有线CarPlay”,多台设备同时接入时选择目标iPhone。
  3. 点击“启动接收”,在iPhone上确认CarPlay提示。

有线无需填写Wi-Fi信息。修改设置后,点击“应用并重新连接”。

无线CarPlay

  1. Mac和iPhone加入同一个允许设备互访的Wi-Fi,选择“无线CarPlay”。
  2. 点击“读取当前网络”或手动填写SSID;填写Wi-Fi共享密码,也可点击“读取已保存密码”并按钥匙串提示授权。
  3. 打开蓝牙设置,在iPhone上选择Mac的系统名称,在两端确认配对码。
  4. 在MacPlay选择目标iPhone,点击“启动接收”,在iPhone上允许CarPlay连接。

MacPlay通过蓝牙引导,再通过共用Wi-Fi传输音视频,不创建名为MacPlay的热点。读取Wi-Fi名称需要定位权限,读取密码可能要求钥匙串授权。企业802.1X和网页登录凭据不适用于此握手,建议使用个人Wi-Fi或有线连接。

主要功能

  • 原生设置界面:SwiftUI主窗口提供连接、显示、音频和诊断四页,AppKit独立窗口显示CarPlay。
  • 多屏与物理像素:选择内建或外接显示器,按实际屏幕像素设置固定窗口,支持原生像素和自定义分辨率。
  • 点击与触控板:支持点击、拖动和双指滚动,滚动转换为CarPlay触摸滑动。
  • 音频与设备:实时调整媒体和通话音量,分别选择输入/输出设备,默认跟随系统。
  • 系统媒体控件:向macOS播放面板同步歌曲、歌手、专辑、封面、进度和播放状态,支持播放控制及播放器允许的进度跳转。
  • 设备记忆与断开复位:记住上次连接的iPhone;主动停止或已建立会话断开后关闭画面,恢复“启动接收”。

其他平台

使用Mac时选择MacPlay;如果还想在Windows电脑或Android设备上使用CarPlay,可以按设备选择下面的项目。

项目 平台 适合的使用场景
WinPlay Windows10/11x64 适合Windows电脑。支持本机移动热点和现有局域网两种无线模式,提供独立画面窗口与系统媒体控件。
AndroidPlay Android9及以上 适合Android手机、平板和车机。通过系统热点与蓝牙连接iPhone,提供全屏画面、音频和通知栏媒体控制。

显示与声音

“显示”页提供屏幕原生像素(避开刘海)、1280×720、1920×1080、2560×1440和自定义宽高。默认720p使用可移动、不可调整大小的固定窗口;原生像素模式自动全屏并避开刘海。尺寸超过所选屏幕可见区域时明确提示,不自动缩小。

帧率可选30/60/90/120fps,默认60fps。120的视频启动协商失败后依次尝试90和60,90失败后尝试60;回退只影响本次连接。高帧率是请求上限,实际输出由iPhone、网络和解码能力决定。

CarPlay自身的“设置→显示屏→智能缩放显示”可能改变图标、文字和渲染尺寸。希望按所选像素显示时可关闭该开关,再应用并重新连接;MacPlay不提供缩放倍率,也不远程控制此设置。

媒体/通话音量实时生效,输入/输出设备更换后需应用并重新连接。播放歌曲后可在Mac控制中心查看音乐信息;播放器提供有效时长并允许跳转时,可以拖动系统进度条。封面按歌曲身份关联,标题变化不作为切歌,迟到的旧封面不会覆盖新曲目。本版不提供独立歌词同步。

常见问题

现象 处理方法
USB未识别 更换数据线,解锁iPhone并确认信任,查看连接阶段
无线一直等待连接 检查配对、目标设备、SSID和密码,确认Wi-Fi允许设备互访
读取不到Wi-Fi名称或密码 授权定位/钥匙串访问,或手动填写
自定义分辨率无法启动 降低分辨率或选择原生像素模式,确保固定窗口能放入屏幕
系统进度条不能拖动 播放器需提供有效时长和跳转权限;直播通常不支持
选择另一台iPhone后没有连接 确认目标已接入或配对,再应用并重新连接

“自动(上次连接的iPhone)”不会在目标缺席时擅自改连其他设备。退出使用应用菜单中的“退出MacPlay”;更新前退出旧版,再替换应用。

认证与数据

1.1.0内置实验性认证材料,首次启动不覆盖本机已有身份。也可在“诊断→导入认证文件”选择匹配且获准使用的identity.pk8与certificate.p7b;普通Apple开发者签名证书不能替代配件认证。材料来源见认证来源。公开下载不等于取得再分发授权,公开分发前应确认材料权利。

设置、Wi-Fi密码、设备记录与配对身份保存在本机应用支持目录,不上传到服务器。定位权限用于读取Wi-Fi信息,蓝牙/本地网络用于连接,麦克风用于通话和语音。分享诊断日志前应遮盖手机名称、地址和网络信息。

从源码构建

需要macOS、Xcode命令行工具、Node.js、pnpm、Rust、pkg-config及GStreamer开发SDK。将SDK的lib/pkgconfig加入PKG_CONFIG_PATH,在仓库根目录执行:

pnpm install
pnpm run build

默认按本机架构构建;指定架构时选择一条命令:

# AppleM系列
pnpm run build -- --arch=arm64
# Intel
pnpm run build -- --arch=x64

生成dist/MacPlay.app和dist/MacPlay-1.1.0-<arch>.dmg,架构为arm64或x86_64。脚本处理SwiftUI应用、蓝牙桥接、Rust后端、音视频模块和Node.js服务,并进行本地签名与DMG打包。

更新日志

1.1.0提供M系列与Intel安装包,默认720p,加入显示器选择、系统媒体控件、实时媒体/通话音量及设备选择,完善断开复位、封面关联和进度跳转。完整变更见CHANGELOG。Intel支持由drewpall的PR#1提供基础实现。

来源与许可

MacPlay基于LIVI,参考DiPlay,保留LasseHeitgres及贡献者的版权和许可声明,见NOTICE。项目沿用GPL-3.0-or-later,见LICENSE;运行库许可位于assets/licenses与assets/gstreamer/LICENSES。

第三方组件、认证文件和商标分别适用各自权利条件。MacPlay是独立衍生项目,不代表Apple或上游作者,不声称获得MFi认证。分发修改版时应保留声明并提供适用许可证要求的对应源码与构建资料。