Atoll:让MacBook刘海屏变身智能交互中心

102 阅读4分钟

Atoll

Atoll 将 MacBook 的刘海区域转变为一个专注于媒体控制、系统洞察和快速实用程序的交互界面。它在不需要时保持低调,在需要时则能响应式扩展,为用户提供流畅、智能的交互体验。

功能特性

  • 媒体控制中心:直接在刘海区域显示和控制当前播放的媒体(音乐、播客等),提供播放/暂停、下一首/上一首、进度条和音量调节等核心功能。
  • 系统状态洞察:实时显示关键系统信息,如 CPU 使用率、内存占用、网络状态或电池电量,一目了然。
  • 快速实用程序:提供便捷的工具入口,例如快速便签、计时器或快捷指令启动器。
  • 智能响应与扩展:界面在闲置时保持简洁,仅在交互时(如鼠标悬停或收到通知)优雅地展开,不干扰主屏幕内容。
  • 美观与原生集成:严格遵循 macOS 人机界面指南,提供与原系统无缝融合的视觉体验和流畅动画。

安装指南

系统要求

  • macOS Sonoma 14.0 或更高版本
  • Xcode 15.0+ 及 Swift 5.9 工具链
  • 配备刘海屏的 MacBook(用于完整功能测试)

安装步骤

方法一:下载发行版

  1. 访问项目的 Release 页面
  2. 下载最新版本的 Atoll.dmg 文件。
  3. 打开 .dmg 文件并将 Atoll.app 拖拽到“应用程序”文件夹中。
  4. 首次运行时,请在系统提示时授予必要的辅助功能权限。

方法二:从源代码构建

  1. 克隆仓库:
    git clone https://github.com/Ebullioscopic/Atoll.git
    cd Atoll
    
  2. 打开项目:
    open DynamicIsland.xcodeproj
    
  3. 在 Xcode 中,选择您的 Mac 作为运行目标。
  4. 点击 Cmd + R 进行构建和运行。
  5. 根据提示授予所需的权限。

使用说明

Atoll 在安装并授权后会常驻菜单栏。点击菜单栏图标可以访问设置或退出应用。

基础使用

  • 媒体控制:当有媒体播放时,刘海区域会自动显示专辑封面、歌曲信息和基本控制按钮。
  • 查看系统状态:鼠标悬停或轻触刘海区域,即可查看当前的系统性能指标。
  • 使用快速工具:通过配置好的快捷键或菜单栏入口,快速呼出预设的实用工具。

配置与自定义: 大部分功能可以通过 Atoll.app 内的偏好设置进行配置,包括:

  • 选择在刘海区域显示哪些系统信息。
  • 自定义媒体控制的显示样式。
  • 设置快速工具的触发方式。

核心代码

项目主要包含用于与 macOS 媒体播放框架交互和构建刘海交互界面的 Swift 代码。以下是项目中一个关键组件的概览示例(基于提供的 Perl 适配器脚本推断的核心功能):

#!/usr/bin/perl
# 媒体远程适配器
# 该脚本作为与 macOS 私有 MediaRemote 框架交互的桥梁。
# 核心功能:获取和控制当前播放的媒体信息。

use strict;
use warnings;

sub get_now_playing_info {
    # 调用底层框架,获取当前播放媒体的元数据(如歌曲名、艺术家、专辑、进度等)。
    # 返回格式化的数据,供 Atoll 界面显示。
    my $info = _fetch_from_framework();
    return $format_json($info);
}

sub send_media_command {
    my ($command_id) = @_;
    # 将用户操作(如播放、暂停、切歌)转换为系统媒体命令并发送。
    # 命令 ID 对应 MRCommand 常量(例如 kMRPlay = 0)。
    _send_command_to_framework($command_id);
}
// 刘海视图控制器 (Swift 伪代码示例)
// 负责管理刘海区域的视觉呈现和交互逻辑。

import AppKit

class AtollViewController: NSViewController {
    // 媒体信息显示标签
    @IBOutlet weak var songTitleLabel: NSTextField!
    @IBOutlet weak var artistLabel: NSTextField!
    
    // 系统监控显示
    var cpuUsageView: SystemMeterView!
    var memoryUsageView: SystemMeterView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        setupMediaObserver() // 监听媒体播放状态变化
        setupSystemMonitor() // 启动系统监控
        configureAppearance() // 配置视图外观以适应刘海区域
    }
    
    func updateMediaUI(with metadata: NowPlayingMetadata) {
        // 在主线程更新界面元素
        DispatchQueue.main.async {
            self.songTitleLabel.stringValue = metadata.title
            self.artistLabel.stringValue = metadata.artist
            // ... 更新进度条、封面等
        }
    }
}

注意:以上代码为基于项目描述和文件结构推断的核心逻辑示例。实际的实现代码位于项目的 Swift 源文件中,包含了完整的界面布局、动画效果和与系统 API 的深度集成。