在 macOS 中置顶窗口
使用 MacForge 和 AfloatX 插件, 在 Mojave 系统下允许窗口置顶.
前言
macOS 上一直困扰我的问题是没有简单的窗口置顶工具. 在 PC 下, 播放器之类的很多软件在任务栏上都有一个小图钉图标, 点一下就可以置顶. 但是 macOS 上竟然找不到自带这样功能的软件. 这归因于自 Mac OS El Capitan 以后苹果引入的系统完整性保护 (System Integrity Protection, SIP). 根据维基百科, SIP 禁止用户对根目录下 /System
和 /usr
等特定文件夹的修改, 关闭代码注入和运行时进程附着, 禁止未签名的内核扩展. 由此看来, 将窗口置顶可能涉及向Finder运行时进行代码注入从而被 SIP 禁止, 因此按正常流程发布的 app 就不可能实现这个功能了. 但另一方面, 窗口置顶是否有可能通过由 app 发送置顶请求到 Finder, Finder 向用户一次性请求权限的方式来实现呢? 这就要看今后 Apple 的 macOS 更新了.
可是对于 Mojave 来说恐怕等不到那个时候, 所以还是得自己想办法. 这篇文章提供了比较完整的思路, 主要是利用 mySIMBL 进行代码注入, 置顶功能由 Afloat 提供. 有点遗憾的是, 这篇文章时间比较久远了, mySIMBL 已经升级成了 MacForge, Afloat 数年没有更新, 几乎被 AfloatX 取代. 不过基本思路没有变化, 就在这里简单记录一下流程.
流程记录
Step 1 部分关闭SIP
这一部分在 MacForge Wiki 页上有充分的描述. 重启, 按住 CMD+R
进入 recovery mode. 从左上角菜单栏打开终端, 输入以下部分关闭 SIP 的命令
csrutil enable --without fs --without nvram --without debug |
without
选项指定禁止的 SIP 功能. 对应内容可由直接输入 csrutil
来理解
$ csrutil |
fs
指文件系统保护, debug
指调试限制, nvram
指非易失性存储器 (Non-volatile random-access memory, NVRAM) 保护. NVRAM 是内存的一部分, 用于存储快速访问的设置, 包括内核崩溃信息.
Step 2 安装MacForge
解压 GitHub 中最新发布的压缩包, 然后将 .app
移到应用程序中.
Step 3 安装AfloatX
打开 MacForge, 从 Featured 页面找到 AfloatX, GET 即可.
Step 4 置顶窗口
打开想要置顶的窗口, 右击对应 app 的 Dock 图标, 在 AfloatX 里选择 Float Window
, 窗口置顶就完成了. 关闭一次窗口重新打开, 就可以取消置顶.
完工 (ง •̀_•́)ง 置顶 GTD app 窗口对于健忘+拖延的我来说就是救命恩人 (bushi).