【免费下载链接】WhiskyActive community fork of the archived whisky-app/whisky — a modern Wine wrapper for macOS built with SwiftUI项目地址https://gitcode.com/gh_mirrors/whisky1/Whisky点击查看免费下载Whisky 是一款用 SwiftUI 原生构建的 macOS Wine 封装器其核心库 WhiskyKit 通过Bottle 管理、Wine 执行、Program 发现三层协作让你在 Mac 上无痛运行 Windows 游戏与程序。本文将用图解方式拆解这三层各自的职责与数据流向帮助新手快速理解 Whisky 的架构设计。一分钟认识 Whisky 与 WhiskyKit组件定位Whisky.app面向用户的 SwiftUI 图形界面WhiskyCmd命令行工具whisky run等WhiskyKit可复用的 Swift 包三层架构的核心WhiskyWineWine 11.0 运行时首次启动时自动下载WhiskyKit 的官方架构文档见 Architecture.md它将整个系统组织为应用层 → WhiskyKit → Wine 运行时三个纵向层次┌─────────────────────────────────────────────────────┐ │ 应用层 (Whisky.app / WhiskyCmd) │ ├─────────────────────────────────────────────────────┤ │ WhiskyKit │ │ ┌───────────┐ ┌────────────┐ ┌────────────────┐ │ │ │ Bottle │ │ Wine │ │ WhiskyWine │ │ │ │ 管理 │ │ 执行 │ │ Installer │ │ │ └───────────┘ └────────────┘ └────────────────┘ │ │ ┌───────────┐ ┌────────────┐ │ │ │ Program │ │ PE File │ │ │ │ 发现 │ │ 解析 │ │ │ └───────────┘ └────────────┘ │ ├─────────────────────────────────────────────────────┤ │ Wine 运行时 (wine64 二进制) │ └─────────────────────────────────────────────────────┘理解这套结构的关键在于Bottle 提供房间Wine 负责点火Program 则是房间里能运行的东西。下面逐层拆解。第一层Bottle 管理——为每个游戏建一座隔离沙盒一个Bottle瓶就是一个 Wine Prefix——一个自包含的目录内部有仿 Windows 的文件系统、注册表和配置。你在 UI 中点击Create创建的 Bottle 默认存放在~/Library/Containers/Whisky/Bottles其磁盘结构如下MyBottle/ ├── Metadata.plist # 序列化的 BottleSettings ├── drive_c/ # 虚拟 Windows C 盘 │ ├── windows/ │ ├── Program Files/ │ └── users/ └── Program Settings/ # 每个程序的独立配置 └── game.exe.plist核心实现集中在 Bottle.swiftsettingsL86-L88Bottle 级配置包括 Windows 版本、Retina 模式、DXVK/Metal 开关等。最巧妙的是didSet { saveSettings() }——任何设置被修改都会自动持久化到Metadata.plist无需手动保存。配置模块化BottleSettings.swift 把设置拆成BottleMetalConfig、BottleDXVKConfig、BottlePerformanceConfig等独立结构体职责清晰。多 Bottle 互不干扰同一个游戏可以拥有Windows 10 DXVK和Windows 7 DXMT两个 Bottle配置完全隔离。第二层Wine 执行——把配置变成运行的进程上面截图里的每一项设置Windows Version、Retina Mode、DXVK Async…最终都会汇入Wine 执行层。入口是 Wine.swift 中的runProgram(at:bottle:environment:)其执行链路为prepareProgramLaunch检查 Bottle、按需启用 DXVK、构建启动参数构建环境变量这是三层协作最关键的一步启动wine64 start /unix以异步流AsyncStreamProcessOutput逐条输出进程事件记录 RunLog退出码、日志文件自动归档供排查问题环境变量的 9 层级联机制WhiskyKit 没有简单拼接环境变量而是设计了 EnvironmentBuilder.swift 的分层优先级baseWINEPREFIX 等基础项 → platformmacOS 兼容修复 → bottleManagedDXVK/Metal/同步模式 → launcherManagedSteam/Epic 启动器兼容 → gameProfileGameDB 游戏档案 → bottleUser用户自定义 Bottle 变量 → programUser单程序设置与语言环境 → featureRuntime临时诊断注入 → callsiteOverride调用方显式覆盖规则很简单靠后的层覆盖靠前的层。例如programUser层设置DXVK_ASYNC0就会覆盖bottleManaged层的值——这正是单游戏专属设置 全局 Bottle 设置这一 UX 承诺背后的机制。每层还记录reason覆盖原因可在诊断界面追溯。Wine 进程的 GPU 工作负载甚至可以在 Xcode 中逐帧调试第三层Program 发现——自动找出 Bottle 里的一切 .exe你不需要手动录入游戏列表。WhiskyKit 的 Bottle.swift 提供了discoverInstalledExecutables(driveC:blocklist:)它会递归扫描drive_c下的Program Files与Program Files (x86)过滤.exe之外的文件、隐藏文件、ClickOnce 缓存噪声和崩溃报告器等干扰项支持用户黑名单blocklist把不想要的条目永久排除扫描任务通过coalesceProgramScan合并去重——大 Bottle 重复触发扫描时只跑一次UI 不会卡顿每个被发现的.exe都会包装成一个 Program 对象成员作用settings程序级配置语言、环境变量、启动参数持久化为game.exe.plist可覆盖 Bottle 默认值peFile用内置 PE 解析器读取的元数据架构32/64 位、图标、版本信息pinned一键置顶写入 Bottle 的pins列表在界面顶部快速启动generateEnvironment()生成该程序的专属环境变量交给第二层执行其中 PE 解析器是 WhiskyKit 的一个亮点它在 macOS 上原生解析 Windows 可执行文件PE/ 目录不启动 Wine 就能提取图标和架构信息所以程序列表加载飞快。数据流图解一次点击运行的完整旅程把三层串起来从你点击Run到游戏窗口出现数据是这样流动的┌──────────────┐ │ 用户点击 Run │ └──────┬───────┘ ▼ ┌─────────────────────────┐ │ Program第三层 │ │ 读取 program.exe.plist │ │ generateEnvironment() │ └──────┬──────────────────┘ ▼ ┌─────────────────────────┐ │ Wine.runProgram第二层│ │ prepareProgramLaunch: │ │ ① 启用 DXVK如开启 │ │ ② EnvironmentBuilder │ │ 合并 9 层环境变量 │ │ ← 读取 Bottle.settings│ └──────┬──────────────────┘ ▼ ┌─────────────────────────┐ │ Bottle第一层 │ │ WINEPREFIX 指向 Bottle │ │ 目录隔离的 C 盘/注册表 │ └──────┬──────────────────┘ ▼ ┌─────────────────────────┐ │ wine64 进程启动游戏 │ │ 输出流 → RunLog 日志文件│ │ 退出码 → 运行历史 │ └─────────────────────────┘反向的数据流同样重要设置持久化是即时且自动的settings.didSet→Metadata.plist运行记录由RunLogStore写入 Bottle 内配合稳定性诊断Stability Diagnostics实现一键生成崩溃报告。源码目录导航快速定位三层核心文件层关键文件Bottle 管理Bottle.swift · BottleSettings.swiftWine 执行Wine.swift · EnvironmentBuilder.swift · WineEnvironment.swiftProgram 发现Program.swift · ProgramSettings.swift · PE/架构文档Architecture.md · GettingStarted.md总结一张图记住 WhiskyKit 三层协作Bottle 管环境Wine 管启动Program 管内容Bottle 管理提供隔离的 Wine Prefix 与自动持久化的模块化配置Wine 执行通过 9 层环境变量级联把配置翻译成进程启动并全程记录日志Program 发现自动扫描、解析、置顶程序让单程序设置精确覆盖全局默认。这套分层设计让 Whisky 既对新手零门槛一键创建、自动发现又对深度玩家可折腾每层环境变量都可追溯、可覆盖——这正是它作为 macOS 上最现代 Wine 封装器的架构底气。赞分享【免费下载链接】WhiskyActive community fork of the archived whisky-app/whisky — a modern Wine wrapper for macOS built with SwiftUI项目地址https://gitcode.com/gh_mirrors/whisky1/Whisky点击查看免费下载相关推荐拆解 CC Pocket 架构App、Bridge 与 Agent 三层如何协同工作的完整指南拆解 CC Pocket 架构App、Bridge 与 Agent 三层如何协同工作的完整指南 CC Pocket 是一款免费的移动端编程代理客户端通过 W人工智能AI Agent移动开发代码智能体后端OpenGUI三层架构深度解析主图、执行子图与待命派发如何协同完成手机AI任务OpenGUI三层架构深度解析主图、执行子图与待命派发如何协同完成手机AI任务 OpenGUI 是一个运行在真实安卓手机上的 GUI 智能体PhoneWhisperLiveKit 安装5 步搞定 iOS 实时语音识别的完整教程WhisperLiveKit 安装5 步搞定 iOS 实时语音识别的完整教程 想给你的应用加上实时语音识别能力吗WhisperLiveKit 是一个面向 i人工智能语音模型推理服务本地部署上一篇colour-schemes之piggy主题小猪风格代码编辑器配色下一篇Serverless Framework 实战使用 CloudWatch Event 事件驱动 AWS Lambda 函数创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考