Star 历史趋势
数据来源: GitHub API · 生成自 Stargazers.cn
README.md

MacPlay应用图标

MacPlay

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

版本1.2.1 运行平台 项目许可

发行附件累计下载量 GitHub Star数 GitHub Fork数 开放Issue数 开放Pull Request数 最近提交时间

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

其他设备:AndroidPlay · WinPlay

快速入门

使用条件

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

安装

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

Mac类型安装包
AppleM系列MacPlay-1.2.1-arm64.dmg
IntelMacPlay-1.2.1-x86_64.dmg

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

首次启动自动准备内置认证文件,默认1280×720、60fps,并优先使用内建显示器。更新安装保留已有设置。完整步骤见发行版使用教程。在“连接→应用”选择跟随系统、简体中文、繁體中文或English,默认跟随Mac系统语言;CarPlay内部语言仍跟随iPhone。

有线CarPlay

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

有线无需填写Wi-Fi信息。在“连接→应用”开启“USB接入时自动启动CarPlay”,MacPlay运行期间接入iPhone就会启动有线接收。已指定设备时只响应该设备;首次使用仍需解锁并确认信任。修改设置后,点击“应用并重新连接”。

无线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系统、简体中文、繁體中文和English;可选USB接入自动启动及菜单栏常驻。

  • 统一窗口入口:主窗口与CarPlay画面共用MacPlay的Dock入口;关闭CarPlay画面先确认断开,点击CarPlay中的MacPlay图标可打开主窗口。

  • 关于与更新:查看版本、检查GitHub正式发行版,按芯片选择安装包,支持自动更新提醒和TXT日志导出。

无线自动重连

在“连接→共用Wi-Fi”开启“无线连接被动断开时自动重连”。默认关闭,只回连已成功连接后被动断开的iPhone,使用上次应用的配置。首次等待5秒,失败后按10、20、30、60秒延长间隔;主动停止、确认断开、退出或关闭开关会取消重连。首次连接失败不进入自动重连。

切换Wi-Fi后需要读取或填写新网络密码;同一网络读取密码失败时保留已有输入。最终60fps尝试等待视频超过45秒会结束,避免一直停留在等待界面。

其他平台

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

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

显示与声音

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

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

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

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

关于、更新与日志

在侧栏最后的“关于”页查看版本号、构建号和运行架构。点击“检查更新”读取GitHub正式发行版,按版本号比较,并为当前Mac选择M系列或Intel安装包;通过Rosetta运行时仍优先选择M系列版。没有对应安装包时可打开发行说明。

“自动检查更新”默认开启,每次启动检查一次,持续运行时每两小时静默检查。后台检查结果显示在“关于→软件更新”,不弹窗;启动发现新版时提示,同一版本确认后不重复提醒。检查失败会显示错误,手动检查可随时执行。点击“下载更新”后通过浏览器下载,退出旧版再替换应用,不自动安装。

在“关于→日志”点击“导出日志”,选择位置保存TXT。导出当前连接日志,过滤网络密码及常见设备标识,不包含设置文件或认证文件。发送给他人前仍可自行查看导出内容。

常见问题

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

“自动(上次连接的iPhone)”不会在目标缺席时擅自改连其他设备。点击CarPlay窗口的红色关闭按钮,会先询问是否断开;取消后继续保持连接。CarPlay中的MacPlay入口用于打开设置主窗口。

开启“连接→应用→允许后台运行”后,关闭主窗口会保持接收,菜单栏显示简约图标,可打开主窗口、显示画面、启动/停止接收或退出;Dock中的MacPlay也提供两个窗口的入口。未开启后台运行时,关闭主窗口会退出应用。后台运行不等于开机启动。更新前退出旧版,再替换应用。

认证与数据

1.2.1内置实验性认证材料,首次启动不覆盖本机已有身份。也可在“关于→认证文件→导入认证文件”选择匹配且获准使用的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.2.1-<arch>.dmg,架构为arm64或x86_64。脚本处理SwiftUI应用、蓝牙桥接、Rust后端、音视频模块和Node.js服务,并进行本地签名与DMG打包。

更新日志

1.2.1新增可选无线自动重连,完善断线检测、连接状态和等待期限,修正切换网络后的密码匹配,并改进日志、后台更新检查与系统媒体同步。完整变更见CHANGELOG。Intel支持由drewpall的PR#1提供基础实现。

来源与许可

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

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

关于 About

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

语言 Languages

Rust76.7%
TypeScript9.6%
Swift7.0%
Shell2.4%
Objective-C++1.4%
HTML1.2%
JavaScript0.9%
Objective-C0.7%
Python0.1%
C++0.1%

提交活跃度 Commit Activity

代码提交热力图
过去 52 周的开发活跃度
18
Total Commits
峰值: 10次/周
Less
More

核心贡献者 Contributors