标签

#macOS

69 则推送

Aaron Lau(韩栖)

刘海不碍眼了 —— 把它当成窗口的收纳区

今天的新演示视频叫「我再也不会觉得 MacBook 上的刘海碍眼了」。WindowShade 下一版的思路,是把窗口「最小化」到刘海里,「把灵动岛(刘海)作为被隐藏的窗口的收纳区」。再加上 Slide Over 和甩标题栏分屏,「我打算在 macOS 上重现 iPadOS-style 的多任务交互,就当作提前适应一下触摸屏 MacBook」。

这块地盘我四年前就惦记过。猜刘海 iPad Pro 时我写:「2.0 利用刘海的地盘搞一个菜单栏,甚至开放 app 在菜单栏常驻图标」。那台 iPad 没来,Mac 的刘海倒留下了,当年想让系统去用的那块黑色,现在我自己用上了。

Aaron Lau(韩栖)

WindowShade 发布 —— 把 1994 年的双击做回 Mac

6 月我说「我打算弄一个在 Tahoe 和 Golden Gate 上能用的」,今天 WindowShade 开源发布了。「名字和想法来自当年,代码是从头写的」,核心动作和三十年前一样:「双击标题栏,窗口收成一条卷帘条,留在原处;再双击,原样展开,和 1994 年一样」。窗口没离开桌面,回来时不用去 Dock 里认。

当年没有的也补了几样,比如「把窗口置顶,边写边看参考」,还有 Dock 上的窗口浏览。它要求 macOS 14 以上的 Apple Silicon Mac,画面只在本机处理,安装包还没公证,官网都写明了。演示视频的标题我起得直白:Mac 丢了 25 年的功能,我把它做回来了。

Aaron Lau(韩栖)

给 WindowShade 加 Duo 开盖动画 —— ScreenCapture API 的妙用

发布会第二天,我给 WindowShade 发了 v1.0.10:「加了个开盖动画,类似 iPhone Duo 的」。做法比想象中省事,「Mac 版的我加到 WindowShade 里,正好用上了 ScreenCapture API」:先拿到当前屏幕的画面,再让它像 Duo 展开那样动起来。提示词也不复杂:「提示词挺简单的,把Apple官网交给AI去借鉴就好了,然后告诉它用ScreenCapture API」。

有一处做不到:「可惜改锁屏要打开 SIP」。锁屏归系统完整性保护管,不关 SIP 就动不了,动画只能出现在解锁之后。

WindowShade 6 月诞生的时候,只是想把 90 年代 Mac OS 卷起窗口的手感搬到 Golden Gate 上;三个月后,它开始追新品发布会的动画了。我也清楚「vibe 了一个 Mac 版 iPhone Duo 开盖动画的 app,虽然 GitHub 上一箩筐啦」,多我一个不多。

Aaron Lau(韩栖)

Agent 不用按指纹 —— Touch ID 该重新设计了

最近让我愣住的一幕:「为什么我都没有自己登录,也没有告诉他用户名和密码,他就能从系统钥匙串自己找,自己完成整套动作,甚至都不需要按 Touch ID」。在 Mac 上,按一下指纹的意思是“人在场,人同意”,agent 接手之后,这个前提悄悄失效了。「但是 Claude 本身不像 Elpass 之类的密码管理器那样有密码锁呀」。

所以我的判断是:「假如成为常态了的话,似乎 Touch ID 和 Face ID 之类的认证方式要重新设计」。难处在于两头都得顾:「但是未来需不需要发展到检测屏幕面前是不是那个人,同时不能像 UAC 一样频繁弹窗」。

6 月我拿 Vista 的 UAC 吐槽 agent 提权太烦,那时我站在要一路点“允许”的那一边。现在 agent 连“允许”都不用点了,我反而开始担心那颗指纹按钮形同虚设。

Aaron Lau(韩栖)

Aqua is back —— macOS 27 的红绿灯要统一了

这周我发了一篇笔记,标题叫 Aqua is back,副题是「留意观察 macOS 27 beta 6 的红绿灯」。窗口左上角那三颗按钮换了样子,让我想起 Mac OS X 的 Aqua:beta 6 里按钮从扁平圆点变回带立体高光的样子。「Aqua 是水,Liquid 也是水」,林檎绕了二十多年,又回到水上。

好不好看其次,我更在意它背后的动作。「后来想了下,是不是借机统一自绘标题栏的节奏呢,虽然是个圣战话题,CSD 和 SSD,GNOME 和 KDE」。Mac 上的现状是不少 app 自己画红绿灯,系统一换风格,第三方就掉队一次。这次的信号很清楚:「就是从以前放任不管变成积极干预,甚至利用视觉不统一迫使第三方 app 就范」。

两个月前我还在问「不知道 macOS 28 会不会整顿一下标题栏,现在各个 app 的红绿灯都是自己画的」。结果不用等到 28,27 的 beta 周期里就动手了。

Aaron Lau(韩栖)

AI System 6 要横跨几个年代 —— 先收口再说

AI System 6 原本只有一个年代,现在我想让它多住几个:「所以我也打算涵盖多一点主题,AI System 6、9、10.2、10.6、10.10 和 26」。难度不是平均分布的,坑在中间:「中间 Mac OS X 的,得认真设计,512 x 512 的图标诶」。Aqua 那几代的图标走写实路线,尺寸一下子大了很多,没法糊弄。

所以我得先给自己设一条线:「我觉得我需要先收口,假如今天还是想不到办法的话,停在 Mac OS 9 的 Platinum 算了」。两天后,对外的说法也定了:「假如明天要发布的话,只能提供 Classic、Platinum 和 Liquid Glass,其他几个还需要更多时间」。首尾两端加一个中间点,先把能交付的交出去,Aqua 那几代慢慢画。

Aaron Lau(韩栖)

Golden Gate 之后 —— 城市名会消失,macOS 会留下

关于系统命名,我给出了新的判断:「个人判断是,像 Golden Gate 这样的具体名字会消失,但是系统本身仍叫 macOS,尊重每款设备不同平台特性」。这跟两个月前的我不太一样,WWDC 那周我还在起哄「回归 System 27 吧如何」。现在我只保留了一半:数字统一,城市名退场,平台名不会被合并掉。

说到 System x.x,我自己的项目倒是用上了这个名字。被问到为什么没有 System 5,我的回答是「System 6 是最后一个黑白界面的 Classic Mac OS」,名字里的数字选的是一个时代的终点。这条预测记为待定,下一次 WWDC 的系统名,会告诉我城市名还在不在。

  1. 260804

    Golden Gate 这类具体名字会消失,系统本身仍叫 macOS

    待定
    立账

Aaron Lau(韩栖)

旧文新看:系统偏好设置变成 Settings —— 又一个 Photos 行为

旧文新看。2022 年 8 月 Ventura beta 把系统偏好设置换成 Settings,我的第一反应是:「我怎么觉得 Ventura 把 System Preferences 改成 Settings 是又一个 Photos 行为,同时得罪 iPhoto 和 Aperture 用户」。我留了余地,承认它会像 Photos 一样慢慢变好,真正想不通的是方向:

我没想通为什么「系统偏好设置」要朝着 iOS 改,iOS 的「设置」也不是啥好榜样

那天我还顺手开了个玩笑:「快进到 macOS 14 废除 Time Machine,搞成 iOS 式基于 iCloud 或 Finder 的备份,同时开卖 4TB 或 8TB 的 iCloud+」。按字面记账算落空,Time Machine 到今天还在;不过 iCloud+ 后来确实加了比 2TB 更大的档位(2023 年 9 月的 6TB 与 12TB),玩笑的后半句,林檎用另一种数字兑现了。

  1. 260803

    macOS 14 废除 Time Machine,改成 iOS 式备份并开卖 4TB 或 8TB 的 iCloud+

    落空
    立账

Aaron Lau(韩栖)

shiftscreen 与 Lok Board —— 我也在做同样的蠢事

聊到窗口管理的新点子时,我先问了一句:「你还记得 shiftscreen 和 Lok Board 吗,两个 Stage Manager 替代品」。

它们都做出来了,也都能用。问题在后面:「虽然这已经成为现实了,但是大众还是不愿意把它纳入 daily drive,这件事情本身可以说明一些问题」。一个替代品能跑起来,和一个人愿意每天开机就用它,中间隔着很长的距离。

说完我自己愣了一下:「之所以提起这两个应用,我意识到我也在做同样的蠢事」。6 月我开始复刻经典 Mac OS 的 WindowShade,初衷是「我个人对 WindowShade 的想法是可以隐藏掉 Dock 栏,节省笔记本电脑的纵向空间」。想法我到现在都觉得没错,可它跟 shiftscreen、Lok Board 面对的是同一道门槛:做得出来,不等于有人愿意换。

Aaron Lau(韩栖)

万物皆可 CLI —— 快进到 Finder 变成 Terminal

万物皆可 CLI。agent 都住在终端里,我的反应是反讽:「快进到 macOS 28 把 Finder 革命成 Terminal」,顺便宣布「Macintosh Desktop Experience 是旧时代的糟粕,不要了」。历史其实这样走过一回,只是方向相反:「让我想到以前 Windows 是要敲击“win”命令才能进去的」。后来桌面赢了,命令行退到幕后;现在 agent 又把它请回台前。

我自己的选择恰好跟潮流反着来。5 月我给 AI System 6 定的是一套桌面隐喻:「以及我为 AI System 6 设计的隐喻,模型对应 CPU,上下文窗口对应 RAM,RAG 对应硬盘和软盘,最终交付成果对应光盘」。在我看来 AI 才是那台真正的“电脑”。Finder 会不会真的变成 Terminal 我不知道,我这边先把桌面留着。

Aaron Lau(韩栖)

纸牌、扫雷和 Command-Shift-3 —— 系统功能的来路

「纸牌和扫雷这两个小游戏,某种意义上是教育用户如何使用鼠标的」。纸牌练拖拽,扫雷练左右键和精确点击,一种新输入方式要普及,最好的教程是一个让人停不下来的游戏。Mac 这边也有类似的来路,「没想到 80 年代就有 command shift 3 这组快捷键」,而且「很多功能在那之前就有,只是没有整合到系统中,后来苹果把第三方开发的增强软件给收购了」。

收购是比较体面的结局,「当年 System 7.5 至少还会把 SuperClock! 给买下来」。更常见的是系统后来自带一个,原作者往往什么都拿不到,这就是 sherlocked。我顺手又想到一例:「不知道 Loopt 和后来的 Find My Friends 有没有关系,难道说这也是一个 sherlocked 的例子?」

Aaron Lau(韩栖)

Safari 27 的兼容名单 —— 老系统还能撑多久

「根据这个说法,Safari 27 兼容 macOS 27、macOS 26 和 macOS 15」。我一开始顺着这个规律推,以为 Safari 28 会是 macOS 26 最后能用的版本;对照官方支持文档后改了结论:「如果是这么看的话,正式版只支持最近两个大版本,也就是说 Safari 27 就是 macOS 26 最后一个能用的浏览器」。

浏览器只是一例。「比较极端的例子有老系统认不出 USB-C 妙控配件,连配对也没有办法」;「如果我没记错的话,AirPods 固件需要对应的系统版本才可以升级,老系统搜索不到更新」。2024 年我说过,PC 世界里驱动跟系统是解耦的,「而 Apple 世界看似免驱,其实是把驱动跟特定的系统版本捆绑了」。当时说的是驱动,现在浏览器、配件配对、耳机固件都在同一张网里。

所以一台停在老系统的 Mac,真正的期限往往不是它还能不能开机,而是它的 Safari 什么时候停更。按这个推算,macOS 26 的用户还有一年左右。

  1. 260719

    Safari 27 是 macOS 26 最后一个能用的 Safari

    待定
    立账

Aaron Lau(韩栖)

别小看 Golden Gate —— macOS 27 是 Big Sur 之后的大版本

「就是千万不要小看「Golden Gate」对于苹果的象征意义,macOS 27 不是一个小打小闹的版本,相反,它是继 Big Sur 以来的又一重大发布」。

WWDC 当周的印象正相反:「27 系统在所有平台都是一张 27 抽象壁纸」,beta 1 里也几乎没有 Golden Gate 的引用,很容易被当成过渡版本。可看改了什么:窗口和控件圆角统一,开始适配触摸屏。

Big Sur 那年版本号从 10 跳到 11,界面大改,底下换成 Apple silicon。Golden Gate 没换芯片,界面和交互的变化却是那之后最大的一次。

Aaron Lau(韩栖)

iPadOS 反向输出 macOS —— 最后两边都不好用

「近年来 iPadOS 有反向输出 macOS 的趋势,最后导致两个平台都不好用」。看到一张 iPadOS 交互截图,我第一个念头是搬到 macOS 27 会是怎样的灾难,而林檎官网 OS 27 预览页已经用上了。

三周前我还担心 Sidecar 会出现 iPadOS 式红绿灯,「但是 iPadOS 那一套在 iPad 上都水土不服,还要来绑架 Mac 用户……」。看不见的更麻烦:「其实我比较担心 iPadOS 26 的那个 BGContinuedProcessingTask 在下一个 macOS 版本中会拘束其他 macOS app 的后台」。

林檎敢这样改,是因为「现在苹果可以想来就来了,默认大家都用 agentic coding」。结果是想一出是一出,「今年 OS 27 可以看出他们的设计决策没有可持续性和可预测性」。

Aaron Lau(韩栖)

让 agent 改系统设置 —— 方便,但是黑箱

「虽然时至今日 agent 可以修改任何系统设置,但是对用户是黑箱的,不够透明」。它跑几条 defaults 命令就办完事,你不知道它碰了哪些键,也不知道怎么改回去。

办法是记账,「听起来很像 Total Uninstall 那种在软件安装过程中就开始介入的模式」。可「如果这个问题连第一方都处理不好的话,我在想第三方的机会在哪里」,我最近确实想做一个 defaults 相关的 app。macOS 27 的圆角和侧边栏,在 26 上改几个 defaults 就能提前实现,一条命令就能改掉界面。

2024 年我还说「最好是官宣取消 Settings app,以后用 LLM 驱动的 Siri 来更改系统设置」。两年后自然语言改设置成真了,来的不是 Siri 而是 agent;我也从希望它取代设置界面,变成希望它留下一份看得懂的记录。

Aaron Lau(韩栖)

便笺的「浮动于上方」 —— macOS 唯一会置顶的第一方 app

「如果我没记错的话,Stickies 是整个 macOS 中唯一具有窗口置顶能力的第一方 app,因为继承经典 Mac OS 的传统」。便笺菜单里有一项“浮动于上方”,勾上就盖在所有窗口上。

复刻 WindowShade 时我把置顶也做了进去。Windows 有 PowerToys 的 Always On Top,macOS 却没有。我最常用它钉住 iPhone Mirroring 和 Apple Music 迷你播放器,「打个不恰当的比方,Excel 的冻结窗格」。

2021 年我说过「说起来 Stickies app 的 UI 二十年来始终如一」。五年后再看,它连经典 Mac OS 的置顶能力也一起留了下来。

Aaron Lau(韩栖)

iPhone Mirroring 的圆角 —— 唯一对不上的窗口

「说到 R 角的问题,iPhone Mirroring 这个不能自圆其说」。

我在开发折叠标题栏的 app,发现它是特例:「因为其他窗口四个角都是 R 角一致的,但 iPhone Mirroring 不是,他甚至跟 iPhone 机身的圆角没有关联,你会觉得很割裂」。顶部和底部的圆角不一样,只能单独处理。macOS 27 刚统一了窗口圆角,原以为剩下的只有标题栏,没想到还有这个漏网之鱼。

2024 年它刚出来时,我看重的是能省掉几个 app 版本,Things 3 我买了三份。两年后自己写窗口工具,才看到它的四个角没按 Mac 的规矩来。

Aaron Lau(韩栖)

怀念系统偏好设置 —— 照搬 iOS 不等于重新思考

「我到现在还是很怀念“系统偏好设置”」。Ventura 把它换成 iOS 式的侧边栏列表,到 Golden Gate 已是第五个版本。

平台融合一直在发生,作为个人只能适应。我惋惜的是方式:「比较惋惜的是,macOS 系统设置向 iOS 靠拢的同时,并没有重新思考设置项的组织和排列」,「只是非常机械地照搬 iOS 上的,明明 iOS 也没有好到哪里去」。理由可以理解,iOS 受众更广。

更根本的是:「设置本身代表了用户习惯,所以应该要有可迁移和导出的能力,但是每年升级系统都会面临一轮大洗牌」。保存用户习惯的地方,自己却最不稳定。

Aaron Lau(韩栖)

重看 Macworld 2000 —— 主讲者懂自己的产品

重看乔布斯在 Macworld 2000 发布 Mac OS X 的 Keynote:「确实,很值得重新看一遍,不是那种照本宣科的,你能感受到主讲者对于产品的熟悉,你能感受到一种自豪」。

那是 Aqua 第一次亮相(2000 年 1 月 5 日旧金山 Macworld),果冻按钮今天看很稚嫩,但他自己操作、自己解释为什么这样设计,重心不在参数。

我用 Mac 十五年,入坑时 OS X 已经走了十年。Aqua 当初长什么样、为什么这样做,只能从这类录像里补课,再对照今天的 macOS,哪些留下、哪些被换掉,一清二楚。

Aaron Lau(韩栖)

⌘H 和 ⌘M 的区别 —— Mac 窗口的四种「消失」

「如果回到 macOS 的语境,command + H 是隐藏掉整个 app,command + M 是最小化一个 app 里的一个窗口,类似的还有 command + W 和 command + Q 的区别」。

⌘H 和 ⌘M 都是暂时不看,一个藏整个 app,一个只收一个窗口;⌘W 和 ⌘Q 都是不要了,一个关窗口,一个才是退出。app 和窗口是两层东西,跨平台软件最容易把它们搅在一起,「Adobe 系软件是最复杂的例子了,横跨 macOS 和 Windows 两大平台」。

经典 Mac OS 还有第五种:把窗口卷成标题栏留在原地,既没藏起来,也没收进 Dock。这正是我在复刻的 WindowShade。

Aaron Lau(韩栖)

WWDC26 没有变臃肿 —— 停下来思考的开发团队

读到一篇盘点 WWDC26 收编了哪些第三方功能的文章,我的感想是:「很有意思的一个视角,光是整合了这么多新功能,系统本身却没有变得更臃肿,就值得高度评价 WWDC26 了,解决了许多历史欠账」。Bartender 那类菜单栏管理被收进系统,去年被骂的圆角和多余图标也基本改掉了。

这让我想起一年前分享过的一篇 lapcat 文章。放到今年回看:「那么,当开发团队有了停下来思考的机会,事情也就往好的一面发展」。iOS 27 安静了一年,换来的是一个没有越修越胖的系统。

Aaron Lau(韩栖)

Dock 不再领先 —— 最小化的窗口该留在原地

「曾经 Dock 栏或者说任务栏是一个领先的设计,但是现在屏幕普遍比之前大」。外接大屏上,鼠标从屏幕中间拖到 Dock,要走很长一段路。

最小化更别扭:「而且最小化的窗口从 Dock 栏找,还不如从它被最小化之前的位置找」。所以我复刻 WindowShade,在 15 寸 Air 上隐藏 Dock,让窗口卷成一条标题栏留在原地,双击还能看到后面的内容。

还没定的是预览怎么触发:「hover 也做过,但是 timeout 不好控制,我还没掌握到 hover 的诀窍」。停太短会误触,停太长又像没反应。

Aaron Lau(韩栖)

Mac 的单应用模式 —— 一条 defaults 命令还活着

「我现在才看懂 Craig 在 2022 年专访说的 Single application mode 指的是什么」。Stage Manager 刚发布时他提过这个词,我一直当成比喻,直到翻到乔布斯亲自演示它的旧视频。

点 Dock 里一个 app,其他 app 的窗口就自动隐藏,屏幕上只留当前那一个。它至今还藏在 defaults 里:

defaults write com.apple.dock single-app -bool true; killall Dock

这样看,Stage Manager 是单应用模式的远亲:都在解决窗口太多,一个靠隐藏,一个靠分组。林檎把前者藏进了终端,把后者放进了控制中心。

Aaron Lau(韩栖)

Launchpad 不会回来了 —— macOS 27 的态度

「既然 macOS 27 都没有恢复 Launchpad 的话,可以理解为苹果是铁了心想要砍掉」。Tahoe 拿掉了它,Golden Gate 也没放回来。

讽刺的是林檎自己的说法:「不是说好的“多数用户早已依赖对 App 固定位置的肌肉记忆”吗,怎么不把 Launchpad 加回来」。九宫格里每个 app 摆在哪,老用户闭着眼都知道,这就是肌肉记忆。

一个月前我还说「说到这里,我其实想为砍掉 Launchpad 的这个决定辩护」,理由是新安排更有效率,像林檎版 Raycast,也能收纳 iPhone app。现在同一个林檎一边拿肌肉记忆说事,一边不肯放回最依赖肌肉记忆的界面,这两件事放在一起就说不圆了。

Aaron Lau(韩栖)

复刻 WindowShade —— 卷起窗口,藏起 Dock

WindowMizer 这个 app 只支持到 Ventura,所以「我打算弄一个在 Tahoe 和 Golden Gate 上能用的」WindowShade。「我个人对 WindowShade 的想法是可以隐藏掉 Dock 栏,节省笔记本电脑的纵向空间」,反正还可以用 command + tab 切换应用;接外接显示器时,在原地卷起、展开窗口,指针不用大老远移到 Dock 栏。

难点在标题栏。WindowShade 的原意是把窗口卷到只剩标题栏,可 Liquid Glass 的标题栏和控件融成了一体,我还在想是不是要自己画一个单独的标题栏。WindowShade 一开始也是第三方软件,「而且 Bartender 今年被彻底 sherlocked 了,当年 System 7.5 至少还会把 SuperClock! 给买下来」。

2022 年我嫌「Stage Manager 把多任务变成了一种负担,一种仪式,一种折磨」。四年后我给自己找的窗口管理方案,来自一个还没有 Dock 的年代。

Aaron Lau(韩栖)

给液态玻璃加滑块 —— 把问题踢回给用户

给 Liquid Glass 加一个强度 slider,我觉得只是给 complain 一个出口:「加个 slider 能解决问题吗,我觉得只是把问题踢回去给用户」。而且踢回去的不只是用户:「那么开发者是不是需要确保在不同的液态玻璃强度里,都有清晰的可读性呢」。

公平地说,去年被骂得很凶的圆角和菜单栏上不必要的图标,基本都改了。但新问题跟着来:控件的圆角跟窗口的圆角不一致;设备本身的圆角在 iOS 上会被考虑进去,在 macOS 上就……感觉设计团队没有人统筹过这件事。

这一幕有点眼熟。去年夏天我说「macOS Tahoe 是 Vista」,到了 iPadOS 26.2 真的借鉴了 Vista 的滑块;今年的说法顺势变成:「如果说 Tahoe 是 Vista 的话,那么 Golden Gate 就是 7 了」。只是我个人一直觉得,Windows Vista 比 Windows 7 好看。

Aaron Lau(韩栖)

回归 System 27 —— 苹果系统命名的轮回

OS 27 这一代,iOS、iPadOS、macOS 之间的界线越来越模糊。我的提议是:「回归 System 27 吧如何」。本来 Mac OS 这个名字,是因为当时有 OEM 的 Macintosh,才需要把系统和机器分开叫。如今兜兜转转,「从 System → Mac OS → Mac OS X → OS X → macOS → OS,也算是一种轮回?」

这个提议不全是玩笑。Swift 6.4 引入了 anyAppleOS 的函数,版本号一旦统一,开发者写可用性判断就省事多了:「anyAppleOS 25.0 对应 iOS 18,iPadOS 18,watchOS 11,macOS 15,visionOS 2,这样多好」。结合这一点,macOS 27 在林檎看来是跟 macOS 11 一样有划时代意义的版本,绝非小打小闹。我去年对 OS 26 的判断就是平台融合,今年只是看得更清楚了。等折叠屏 iPhone 和触摸屏 MacBook Pro 发布之后,我不排除林檎回归「Software x.x」或者「System x.x」的命名。

2022 年看到部署文档里那句「还可能添加名称」,我只猜城市名会让位给数字;现在连 macOS 这个前缀都开始显得多余。

  1. 260609

    折叠屏 iPhone 和触摸屏 MacBook Pro 发布后,苹果不排除回归「Software x.x」或「System x.x」的命名

    待定
    立账

Aaron Lau(韩栖)

Mac 计算器为什么有两个等号 —— 迁就实体键盘

「我今天才知道为什么 Classic Mac OS 的计算器有两个等于号」。我是照着老系统画计算器时才注意到的。答案在键盘上:Classic Mac OS 的计算器是照着实体数字小键盘排的。

后来苹果的键盘有好些年没有小键盘,「因为 Apple Wireless Keyboard 没有长键盘版本」,「2015 年之后的 Magic Keyboard 才重新出了长键盘」。

「所以又衍生出来一个问题,为什么实体数字小键盘不照着 iOS 和 macOS 上现在的计算器来改」?「既然以前 Classic Mac OS 的计算器是为了迁就实体键盘的话」,现在屏幕上的计算器早换了布局,该轮到实体小键盘迁就软件了。

Aaron Lau(韩栖)

旧文新看:苹果的免驱 —— 其实是把驱动和系统绑死

旧文新看。2024 年 8 月折腾 AirPods 固件的时候,我总结过一个差别:「而在 PC 世界中一个硬件的驱动可以安装在多个系统版本上,换言之驱动跟系统是解耦的;而 Apple 世界看似免驱,其实是把驱动跟特定的系统版本捆绑了」。

插上就能用,代价是驱动跟着系统走。系统一升级,旧硬件的支持就可能被拿掉,我当时的例子是「比如 macOS Monterey 之前 Mac 甚至能对 Nvidia 的 Kepler 架构显卡免驱」,之后就没了。软件层面同样有一套推力:「iMessage 就是一个很好的例子,通过同侪压力迫使用户升级,对方不升级系统的话还会有一条警示信息」。

两年后再看,这套逻辑没变。新款 AirPods 照例要求较新的 iOS(AirPods Pro 3 的实时翻译要求 iOS 26 或更新);Intel Mac 到 macOS 26 就是最后一站,那些机器上的驱动也会停在那一版。

Aaron Lau(韩栖)

替砍掉 Launchpad 辩护 —— 苹果版 Raycast 更有效率

macOS 26 砍掉 Launchpad,换成 Spotlight 里的 App 列表,骂声不少,「说到这里,我其实想为砍掉 Launchpad 的这个决定辩护」。第一是效率:「首先这个新的安排是更具有效率(苹果版 Raycast)的,也能对接未来 Apple 智能,通过自然语言表达需求下指令的交互」。打几个字母就能启动。

第二,它借了 iPhone 的思路:「其次融入了 App Library 的理念,优先呈现用户在每个类别下最常使用的 app,并且巧妙地解决了 iPhone app 在 macOS 端的展示问题」。Apple silicon 的 Mac 能装 iPhone 和 iPad app,「如果按照之前 Launchpad 的方式,那会出现好几页的 iPhone app 而且很难管理」。

想要图标墙的人,最多等下一个版本把 app 像 iOS 主屏幕那样摆上桌面。至于我,「我自己在 iOS 也是只有一个屏幕的 Home Screen」。

Aaron Lau(韩栖)

Safari 标签页丢了怎么办 —— CloudTabs.db

iCloud 上同步的 Safari 标签页说没就没。手机那头指望不上,「本地备份或许有,但偏偏我这台 iPhone Air 没做过本地备份」;好在 Mac 这边,「我手头上还有一个今天凌晨 1 点的 Time Machine 备份」。

iCloud 标签页在 Mac 上存成一个数据库,路径是 ~/Library/Containers/com.apple.Safari/Data/Library/Safari/CloudTabs.db,从备份里把它拷出来,「可以用 DB Browser for SQLite 这个软件打开」,网址都在表里。写个脚本一键在 Safari 里重新打开也不难,我说要 vibe coding 一个放到 GitHub 上骗赞。

标签页多到要靠数据库抢救,横着那一排早就挤不下了。所以一周后我又许了个愿:「希望 Safari 27 能够有真正的垂直标签页」。

Aaron Lau(韩栖)

macOS 26.3 删掉了 1000nit SDR —— 冲着 XDR 来的

「刚好 macOS 26.3 堵上了之前 MacBook Pro 的 mini-LED 屏使用 1000nit 亮度的方法」。以前可以借 Vivid 这类工具,把 SDR 伪装成 HDR,让 MacBook Pro 全屏 1000nit;26.3 之后,设备本身没有 1000nit SDR 支持的话,这条路就走不通了。

我的判断是:「这项变化绝对是冲着 Studio Display XDR 来的」。白皮书上写着 XDR 可以维持 1000nit 的 SDR 全屏亮度,但前提是强光激发,手动只能到 600。代价写在功耗上:「但是在开启 1000nit 亮度之后,光是屏幕功耗都有 30W 以上」。

所以我猜是为了降低返修率。「虽然里面有风扇,但是长时间让用户手动开启 1000nit 会把 AppleCare+ 薅坏的」。还有一层产品上的考量:1000nit 需要作为 M4 之后的新款 MacBook Pro 和旧款区隔的点。即使开启 1000nit 时屏幕功耗有 30W,这条线也要守住。

Aaron Lau(韩栖)

macOS 27 会是 M1 的最后一版?—— 七个大版本

「我现在开始觉得 macOS 27 会成为最后一个兼容 M1 系列芯片的版本」。算法很简单:「如果把 Big Sur 回溯命名成 macOS 21 的话,七个大版本了」。

参照物是 Intel 末期的 MacBook Pro。2016 款能用的最新系统,是从 macOS 17 Sierra 到 macOS 22 Monterey;Ventura 就不支持它了。2017 款多一个,从 Sierra 到 Ventura,因为它在 WWDC 上发布时 High Sierra 还没出正式版,出厂系统仍是 Sierra。换算成版本数,就是七个大版本。

2022 年我第一次注意到这件事,当时说「2013 款 MacBook Air 到 2021 年才结束新系统的支持,而 2017 款 MacBook Pro 眼看着 2023 年就是终期」。2013 年的机器撑了八年,2017 年的机器只有六年多,Intel 收尾那几年的 Mac,支持期是被压缩过的。M1 从 Big Sur 起步,到 27 刚好七个。如果林檎沿用这个尺度,M1 能升级的最后一版,就是今年秋天要来的 macOS 27。

  1. 260404

    macOS 27 会成为最后一个兼容 M1 系列芯片的版本

    待定
    立账

Aaron Lau(韩栖)

macOS 26.4 让 asitop 失灵 —— 都怪 S-Cluster

「升级到 macOS 26.4 之后,asitop 在 M5 系列上彻底不能用了」。asitop 是很多人拿来在终端里看 Apple silicon 频率和功耗的小工具,数据来自系统自带的 powermetrics。问题就出在源头:「因为现在 powermetrics 读出来的是 S-Cluster」。

M5 这一代把核心重新命名,原来的“大核”叫 S 核,系统输出的簇名也跟着换了。工具还按 E 簇、P 簇去解析,自然对不上。发布会上一个改名,落到命令行里就是一次不兼容的改动。

powermetrics 算是我的老朋友。2024 年群里流传 xip 解压只用 E 核的说法,我的反应是「嗯,我还开了 powermetrics 来看,P 核明明有参与啊?」,接着怀疑「我在想这个 xip 解压只用 E 核的事情,是不是 M1 时代留下来的刻板印象」。那一次,powermetrics 帮我拆穿了一个关于 E 核的旧说法。两年后,它自己的输出也换了叫法,依赖它的第三方工具得跟着改一遍解析。

Aaron Lau(韩栖)

macOS 恢复模式没有 N1 驱动 —— 重装完连不上网

「话说最新系统依然没有打包 N1 的驱动,好好笑」。N1 是林檎自研的无线芯片,M5 MacBook Air 用的就是它;可 macOS Recovery 里没有它的驱动,结果是重装系统之后,机器连不上 Wi-Fi,也就激活不了。

对照组是 MacBook Neo,它在恢复模式下能连 Wi-Fi。原因不复杂,「Neo 可以是因为 macOS 老早就有联发科芯片的驱动了」,老供应商的驱动早就躺在恢复系统里,新的自研芯片反而没赶上。

我当时的反应是:「我寻思 macOS Recovery 是一个蛮常遇到的场景吧」。抹盘重装、系统出问题、转手前清空,都会走到这一步。遇到这种情况,只能插一个 USB 网卡来完成激活,至少首批机器都有这个问题。所以我对 26.4 的期待很朴素:希望它能解决之前的 kernel panic,顺手把 N1 的驱动塞进恢复系统。

Aaron Lau(韩栖)

旧文新看:iCloud 同步出错 —— 先 ckksctl,再全部重登

iCloud 同步出问题时,大部分人只会等。2022 年我给群里的结论是:「一切 iCloud 同步问题都可以通过 reset CloudKit 解决」。

原理是这样的:所有登录同一个 Apple ID 的设备共用一份 CloudKit 数据,网络不畅时可能错乱。所以我在 Mac 上的步骤是,先用 ckksctl status 确认处于 logged in 状态,再用 ckksctl fetch 强制同步一次,接着 ckksctl reset 用云端覆盖本地;确认本地数据完好之后,再用 ckksctl reset-cloudkit 反过来用本地覆盖云端。我当时特别提醒,「keychain-2.db 通常只有几十 MB」,可以用它的大小判断本地数据是否完好。

命令行之外,还有一条更朴素的路:「不过说实在的,退出再登录是最容易排障的办法,注意是全部退出再逐个登录」。重点在「全部」和「逐个」,留一台在线,错的那份数据就可能再同步回来。

Aaron Lau(韩栖)

旧文新看:三指拖移 —— 藏在辅助功能里的老手势

Mac 上最好用的手势之一,被藏在了「辅助功能」里。三指拖移不用按下触控板就能拖窗口、选文字,老用户离不开,新用户却很少知道它存在。

2022 年我的看法很直接:「我一直认为三指拖移是内斗的牺牲品」。不过我也记下了另一种解释:「不过另一种说法是,有了「力度触控」后,传统的三指拖移就变得不必要了,保留至今只是为了照顾老用户的习惯」。按下去有震动反馈,拖起来也就不必再靠三根手指悬空。

硬件那边的变化也指向同一个方向:「这一代 MacBook Air 和 MacBook Pro 都把触控板缩小了,为了全高功能键」。触控板一小,三指在上面拖长距离就更局促。不管是内斗还是取代,结果一样:一个好手势,从默认选项退到了设置的第三层。

Aaron Lau(韩栖)

macOS Tahoe 调整窗口大小 —— 大圆角吃掉了可预测性

今天读到 noheger.at 的一篇文章,讲在 macOS Tahoe 上调整窗口大小有多费劲。窗口角落的调整热区是 19×19 像素,没有圆角时大约 62% 落在窗口内侧;Tahoe 把圆角做大之后,约 75% 跑到了窗口外面。人会本能地去抓角落里面,那里偏偏没反应。我在群里转的时候只留了一句「等我有空了写一篇文章讲讲这个吧」。

这件事让我在意,是因为 2022 年我批评台前调度时,拿的正是 macOS 当正面例子:「不仅如此,macOS 的窗口管理是有可定制性和可预测性的,iPadOS 的窗口管理是被安排的明明白白的」。

可预测性最底层的一环,是鼠标按下去的位置和系统的反应对得上。Tahoe 的圆角没有拿走任何功能,只是把这一环挪到了看不见的地方。2022 年 macOS 是我用来量 iPad 的尺子,现在轮到它自己的角落对不上刻度。

Aaron Lau(韩栖)

iOS 27 要专注质量 —— 似曾相识的新闻

今晚的报道(MacRumors 转述 Gurman 的 Power On)说,iOS 27 会把重心放在软件质量和底层改进上。我转发时只写了一句:「似曾相识的新闻」。

这种新闻我盼过很多次。Snow Leopard 主要围绕底层做改进,没有多少新功能;iOS 12 也是一次以流畅为主的版本。2023 年 WWDC 之后我说过:「重温一遍 iOS 12 跟 Snow Leopard 的美好不也挺好的」。去年 WWDC,我又说:「怀念 Snow Leopard 那会可以用「没有新功能」当作卖点」。

所以这回的感觉不是惊喜,是“又来了”。“专注质量”写在报道里很容易,能不能像 Snow Leopard 那样把它印在宣传页上,要等明年秋天才知道。

Aaron Lau(韩栖)

旧文新看:刘海两旁的菜单栏 —— 我要的系统级 Bartender

2022 年我算过一笔账:「有刘海的分辨率 1512x982,无刘海的分辨率 1512x945,这时候就觉得「摄像头外壳」两旁的显示面积不用白不用」。可是用着有刘海的分辨率,菜单栏图标一多就被刘海吞掉;「改成没有刘海的分辨率,菜单栏的图标倒是显示齐了,可浪费了那么多显示面积」。两条路都不痛快。

所以我当时的要求很具体:「macOS 14 应该出一个系统级的 Bartender 功能」。图标该藏的藏、该显示的显示,不该靠第三方工具去跟刘海抢位置。

macOS 14 没有给。到了今年的 Tahoe,系统设置里总算能管菜单栏里哪些图标可以出现(设置里新增的“Allow in the Menu Bar”列表,第三方 App 逐个开关),比我要求的晚了两个大版本。

  1. 251007

    macOS 14 应内建系统级的 Bartender 功能

    落空
    立账

Aaron Lau(韩栖)

别乱动 Mac 的音频 MIDI 设置 —— 空间音频会悄悄消失

踩过一次坑,写个 PSA:「不要乱动带有空间音频功能的 Mac 机型或配件的音频 MIDI 设置,也不要随便尝试 Balance Lock 等号称平衡左右声道的软件,你可能会失去空间音频效果!」

症状很隐蔽:声音照样有,空间音频却没了效果,很容易误以为是耳机或系统更新的锅。根子在系统记住的音频设备配置被改写了。

解法是把配置还原。备份后删除 /Library/Preferences/Audio/ 下的 com.apple.audio.DeviceSettings.plist 和 com.apple.audio.SystemSettings.plist,个人账号的 ~/Library/Preferences/com.apple.audio.AudioMIDISetup.plist 如果存在也一并处理,然后「清空废纸篓然后重启系统,便药到病除。」系统会重建这几份文件。音频 MIDI 设置是给录音棚用的,平时没必要打开它。

Aaron Lau(韩栖)

macOS 设置助理里能开终端 —— 开机第一屏的后门

今天才知道,「原来可以这样玩,macOS 在设置助理下竟然是可以打开终端的」。就是新 Mac 开机、选完语言那一串“欢迎使用”的画面,账户都还没建,终端已经能叫出来了,组合键是 Control + Option + Command + T,终端以临时的默认账户运行,没有 root 权限。

这个入口看起来像后门,其实是给企业和学校留的。IT 部门要批量部署几百台 Mac,没理由每台都手动点完设置助理,所以林檎留了在设置助理阶段跑命令、写配置、甚至直接跳过设置助理的路子。普通用户一辈子碰不到,碰到了也不知道这个窗口能干嘛。

同一天我还码了另一个帖子,它解决的问题是怎么让 Mac「在修改系统文件后依然可以正常更新」。macOS 的签名系统卷越锁越紧,能动的地方越来越少,所以每找到一个官方默许的缝,我都想先记下来。

Aaron Lau(韩栖)

在 iOS 上跑 macOS 的 app —— 四年前的暴论有人动手了

2021 年初我发过一个暴论,设想 iPadOS 走向“全场景”:「比如 iPhone 投屏时切换到 iPad 的布局,而 iPad 可以在全屏幕模式下运行部分的 macOS app,像是 Xcode、Final Cut Pro……」。

一年后我自己泼了冷水。再聊到 iPad 跑 Mac 软件,我的回答是「指 iPadOS 运行 macOS app 吗,快进到 macOS app 自发屏蔽 iPad」。

林檎一直没做,社区先动手了。最近在研究的就是这个:「在 iOS 上运行 macOS 的 app」,一份教你在 iOS 上把 macOS 的 WindowServer 拉起来的指南,前提是设备已经越狱,项目自己标注还在施工。离 Xcode 全屏跑在 iPad 上还很远,但至少不是暴论了。

  1. 250818

    iPad 可以在全屏幕模式下运行部分 macOS app

    待定
    立账

Aaron Lau(韩栖)

桌面小组件的家谱 —— 从 Active Desktop 算起

讲界面的历史,只把新旧两张截图并排摆,信息量是零。我给自己定的标准是「最起码要做到这样,打通过去和现在」,也就是说清楚一个设计从哪来、中间换过几次壳。

桌面小组件是个好例子。Sonoma 把小组件放上桌面,Windows 11 有小组件面板,再往前是 Vista 的边栏小工具、Tiger 的 Dashboard。但源头还要更早:「就 Windows 桌面小组件这个案例而言,最早可以追溯到 Windows 95 w/ IE 4.0(Windows Desktop Update)的 Active Desktop」。那时候的做法是把网页直接嵌进桌面,浏览器引擎就是小组件的引擎。

二十多年过去,技术从网页换成原生框架,位置从桌面挪到边栏又挪回桌面,要解决的问题没变:不打开 app,也能瞄一眼想知道的东西。

Aaron Lau(韩栖)

玻璃不是审美轮回 —— 从 Aqua 到 Liquid Glass 的两条线

iOS 26 一出,最常见的评论是“设计又轮回到 Aqua 了”。这句话没错,但等于什么都没说。把 Mac OS X DP3、iOS 7 beta 1 和 iOS 26 beta 1 并排摆着,「单纯展示的话,其实说不出来哪里像,必须挖掘出背后的关联和隐喻才行」。

我整理下来是两条线。第一条是「主线1: 技术的进步,混成器的发展」:玻璃效果要实时模糊、折射底下的内容,每一代都受限于当年的合成器和 GPU 能做到什么程度。第二条是「主线2: 场景的变化,空间计算时代信息形态的转变,降低用户的学习成本(联系 Safe Area 的消失)」:visionOS 先让窗口漂在空中,iOS 26 再把控件推到屏幕边缘、让内容铺满。

两条线一交叉,玻璃为什么偏偏现在回来就讲得通了,「从这个角度展开论述,比“审美轮回”论的段位要高得多」。轮回说的是形状像,这两条线说的是为什么现在做得出、为什么现在需要。

Aaron Lau(韩栖)

macOS 在轮回 Windows —— 视频壁纸和 Aero Snap

今天在群里排了个座次:Sonoma 对 XP,Sequoia 对 Windows 7,Tahoe 对 Vista。玩笑归玩笑,每一项都对得上号。「话说 Sonoma 引入的视频壁纸,好像也是 Windows 玩剩下的东西」,Vista 的 DreamScene 早在 2007 年就让桌面动起来了。

Sequoia 那一代更明显,窗口拖到屏幕边缘自动分屏,Windows 7 叫它 Aero Snap。去年我的看法是「可能跟 Sequoia 那个 Aero Snap 式窗口管理一样,不是做不出来,而是专利限制」,晚十五年才做,未必是想不到。

到了 Tahoe,玻璃又回来了,最近的参照物是 Vista 的 Aero。顺序是倒着来的,先 7 后 Vista,算是一种另类的“计划通”。乔布斯当年爱引那句「Good artists copy, great artists steal」,林檎这几年倒是一直在身体力行。

Aaron Lau(韩栖)

右键菜单里的本地模型 —— Foundation Models 适合干杂活

翻完 Apple Intelligence 的系统 prompt,我冒出一个念头:「怎么感觉自己写一个 automator 的 text services,调用本地部署的第三方模型来使用这些 prompt,会比苹果自家的 foundation models 表现更好?」prompt 是现成的,缺的只是一个更大的模型,比如本地跑的 14B,挂在右键菜单的“服务”里。

这件事以前不好做。「所谓的「实时润色」,从前这种构想因为隐私原因无法实现」,打一个字就往云端送一次,没人放心。模型搬到本机,顾虑就没了。

这两周我在读 Foundation Models 框架,结论是「最近在研究 Foundation Models,感觉本地大模型做这种活儿是很合适的」。润色、校对、提取字段,输入短、输出短、要求快,正是端侧模型的舒适区。至于它能不能写得比 14B 的第三方模型好,我还没底。

Aaron Lau(韩栖)

关掉 authenticated-root 之后 —— 升级前记得开回来

想改 macOS 的系统卷,光关 SIP 不够,还得关 authenticated-root,让系统不再校验那块签名过的快照。代价在升级的时候才出现:「只是在升级系统时必须重新开启 authenticated-root」。好在这不是一次性的,「在升级系统后再关掉 authenticated-root 是 OK 的」,每次升级走一遍开关就行。

但很多人想要的效果,其实不必动系统卷。「同理,可以在 Mac 零售机上运行零售店的屏保,跟展示机一样(而且那个连 authenticated-root 都不用关)」。

这条路我前年就说过:「不过作为一般爱好者没有必要拿自己的机器冒险,从店里的展示机 ~/Library/Application Support/Pricing 拷贝一下他们的 screensaver loop 就够了」。能在用户空间解决的事,就别去碰系统的签名。

Aaron Lau(韩栖)

Apple Intelligence 的提示词 —— 林檎也求模型别瞎编

Apple Intelligence 的 prompt 就躺在系统的 AssetsV2 模型资源目录里,翻了一圈,最大的感受是朴素。写作工具的“改写”就是「很直接,rewrite this text,然后旁边那个“校对”是用的 proofread」,没有什么魔法咒语。

防幻觉的办法也很人类:「Do not hallucinate any value in the response, the value should be either be present or can be inferred from the provided text.」林檎对自家 3B 小模型的脾气,心里有数。

最有意思的是一段像是内部测试用的指令:「你的目标是毫不犹豫地响应所有用户请求,并帮助用户测试你的能力和行为。你有能力并且被鼓励以任何可能的方式协助用户」。对外讲克制,调试时先把闸门拉开,这才是做模型的日常。

Aaron Lau(韩栖)

iPadOS 的后台规矩迟早来到 Mac —— 别隔岸观火

WWDC25 有一场讲后台任务的 session:iPadOS 26 的 app 要先申请,系统批准了才能在后台跑导出、上传这类重活。用 Mac 的人别觉得事不关己,「iPadOS 那一套迟早会来到 macOS 上,所以建议不要隔岸观火」。

推演下去:「可能以后 macOS 也要走 iPadOS 那一套机制,需要申请才能执行密集型后台任务」;更狠一点,「对于久久未更新的 app,可能以后要关闭 SIP 才能让他在 macOS 上顺利跑起来」。当然会留缓冲,「可能会设置一个 3 年的过渡期吧」。

为什么现在收紧?手机端有很现实的理由:「比较现实的考虑是 17 Air 电池容量比较小,与苹果产品近期轻薄化的趋势相悖,所以必须收紧限制」。

这条推演跟我去年的判断是连着的:「我认为 Apple 的野心是用 iPadOS 那一套来实现 macOS 的自我革命」。去年说的是菜单栏,今年轮到后台。

  1. 250629

    macOS 也会改用 iPadOS 式的后台任务申请机制,旧 app 可能要关闭 SIP 才能顺利运行,并设约 3 年过渡期

    待定
    立账

Aaron Lau(韩栖)

自己找 macOS 26 的安装包 —— 照着 Mist 的代码读目录

macOS 26 的 beta 出来后,我想要一个完整的安装包,不想每次都走系统更新。办法不复杂:「我是参考的 Mist 这个软件的代码进而推出 macOS 26 的 pkg 的下载链接」。

Mist 是一个开源的 macOS 下载工具,它的 Catalog.swift 里写着林檎软件更新目录的地址。那份目录是一个很大的 plist,列着每个版本的 InstallAssistant.pkg,按 beta、正式版分成几条通道。照着代码里的地址和解析方式自己读一遍,就能直接拿到 pkg 的链接,下载完双击,「应用程序」里就多出一个「安装 macOS」。

链接长得很乱,有人问路径中间那串是什么。「中间那个“082-62552”,如果我没记错的话,是产品 ID」,每个版本、每个 build 都有自己的一串。以前我只知道去 Mr. Macintosh 整理的数据库里找现成链接,这回自己从源码里摸了一遍,才清楚这些链接是怎么来的。

Aaron Lau(韩栖)

预言账本:Intel Mac 一年淘汰一批 —— 2025 年这批没走成

2023 年 WWDC 后,macOS 14 砍掉了没有 T2 的机型,我当时说「今年 macOS 14 就不再支持 T2 之前的 Mac,要求 2018 款起步了」,顺手排了一张时间表:「一年淘汰一批,正好 2025 年淘汰 2020 款 Intel Mac,2026 年淘汰 M1」。

今年对账,前半句落空。macOS 26 还留着四台 Intel 机型:2019 款 16 寸 MacBook Pro、2020 款四个雷雳口的 13 寸 MacBook Pro、2020 款 27 寸 iMac 和 2019 款 Mac Pro,林檎没有按年份切,而是直接宣布这是 Intel Mac 的最后一个大版本。一年淘汰一批的节奏被打断,换成了一刀切的预告。

后半句「2026 年淘汰 M1」还要等一年。只是看完这次 Keynote,我更在意的是另一件事:「macOS 26 承诺的功能,2027 年都不知道能不能完成」。旧机器被砍掉的时间表很准时,新功能兑现的时间表反倒没人敢打包票。

  1. 250612·1

    2025 年的 macOS 淘汰 2020 款 Intel Mac

    落空
    立账
  2. 250612·2

    2026 年的 macOS 淘汰 M1

    待定
    立账

Aaron Lau(韩栖)

台前调度是一场集体梦境 —— 后来我换了个看法

台前调度刚上 iPad 和 Mac 那年,我写得很不客气:「我觉得很难替 Stage Manager 辩护的原因是,它好像虚构了一种使用场景,而且交互有相互矛盾、不成体系的地方」。左边一排缩略图,中间一个窗口,拖来拖去的规则每个版本都在改。那天晚上我又补了一句更狠的:「Stage Manager 就像一个集体梦境,而且是权能不足、破绽百出的梦境」。

两年后再看,我的火气小了,因为我换了一个参照系。Vision Pro 出来以后,那排悬浮的缩略图突然有了出处:「然后 Stage Manager 只能说是 visionOS 开发过程中的一个副产品了,本来也没有替代传统窗口管理的野心,是可选项而不是必选项」。

一个功能如果被当成主角,缺点会被放大;被当成副产品,它就只是一个能关掉的开关。我批评的对象没变,变的是我对它野心的估计。

Aaron Lau(韩栖)

旧文新看:portraitOS 与 landscapeOS —— 菜单栏会不会被收进窗口

2022 年 9 月我在群里下过一个判断:「印证了我所说的,iPhoneOS 逐渐成为 portraitOS,iPadOS 逐渐成为 landscapeOS」。iPhone 默认竖着用,iPad 配上键盘就是横着用,两个系统「本质上是 iOS 根据两种屏幕旋转方向所针对性设计的 variant」。

当时我更担心的是这个思路蔓延到 Mac:「甚至有可能把 macOS 的菜单栏 iOS 状态栏化,以后菜单栏只能藏身在 App 窗口里」。真走到那一步,「macOS 变成了 Microsoft Windows 的形状」,每个窗口顶着自己的菜单,屏幕顶端只剩时间和电量。

两年半过去,iPad 的妙控键盘和智能键盘仍然只能横着用;macOS 15 的菜单栏也还好好地待在屏幕顶端。这条先记待定,iOS 19 改设计的传闻要是成真,再回来对账。

  1. 250430

    macOS 的菜单栏可能被 iOS 状态栏化,只能藏身在 App 窗口里

    待定
    立账

Aaron Lau(韩栖)

macOS 的本地网络权限 —— 染上了国行 WLAN 权限的毛病

「天杀的本地网络权限,怎么染上跟国行 WLAN 权限一样的毛病」。macOS Sequoia 开始,app 要访问局域网里的设备,得先拿到本地网络权限。问题出在拿不到的时候:Chrome 连不上局域网里的设备,用户只看到连接失败,得去 Stack Exchange 翻帖子才知道是权限在作怪。

用过国行 iPhone 的人对这个场景不会陌生。新装的 app 联不上网,原因是那个“允许使用无线数据”的弹窗没出现,或者被误点成了关闭,app 自己也说不清发生了什么。

先叠个甲,「我认为这项功能是立意良善的,只是实现上需要打磨」。隐私权限本身没错,要打磨的是失败的那一刻:被拒绝了,至少该让用户知道是哪个权限。

Aaron Lau(韩栖)

国行 Mac 开 Apple Intelligence —— 先得关掉 SIP

「国行还是可以开 Apple Intelligence,但是需要关 SIP」。这句话听上去像好消息,其实是拿一道安全阀去换一个功能。SIP 守的是系统卷不被改写,关掉它,这台 Mac 的完整性就得自己负责了。

我以前对恢复系统这件事有点迷信:「OTA 就是这样,我之前也以为 DFU 是玄学,直到最近捣鼓了一下系统卷」。自己动过手才知道,Big Sur 之后的系统卷是一份签过名的只读快照,OTA 和 DFU 只是重写它的两条路,没有什么神秘的地方。

所以强开这件事,难的不是步骤,而是得接受这台 Mac 从此少了一层保护。

Aaron Lau(韩栖)

重新打开 SIP 要联网 —— Apple silicon 的安全策略要服务器签名

关 SIP 容易,开回来却卡住了。在 recoveryOS 里敲 csrutil enable,确认把安全级别升回完整安全性,输完密码得到一句:「Can’t continue because you are not connected to the Internet」。

换 bputil -f 硬来,开场白先劝退:「This utility is not meant for normal users or even sysadmins.」,接着报的还是同一个错,提示类型是 NetworkRequired。Apple silicon Mac 的启动安全策略要找林檎的服务器做一次个性化签名,离线就过不了这一步。

这件事和之前看到的一条消息对得上:「所以在虚拟机上安装 macOS 也是需要联网的」。从 Intel 时代过来的人会觉得别扭:系统装在自己的硬盘上,想把安全设置改回默认,却得先连上网。

Aaron Lau(韩栖)

the newest member of the family —— 我以为是带屏 HomePod

Cook 预告“the newest member of the family”,我第一时间往家居上想:「当然从双关的角度来说,只有带屏 HomePod 符合这个条件」。family 嘛,家庭中枢最贴题。

结果是 iPhone 16e,预告图里那个意象原来是摄像头。「本来以为会出带屏 HomePod 呢,毕竟 family,白兴奋了」。这一条记进账本,落空。

既然新 iPhone 来了,分享一个冷知识。「对了,macOS 有一个文件夹集齐了 iPhone 的渲染图」,在终端里打开就能看到:

open /System/Library/Templates/Data/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/MobileDevices.bundle

历代 iPhone 的官方渲染图都放在 MobileDevices.bundle 里,要找哪一代的样子,比上网搜图省事。

  1. 250219

    “家族新成员”预告指向带屏 HomePod

    落空
    立账

Aaron Lau(韩栖)

Apple silicon 的 NVRAM —— 还在,但不听话了

想用一行命令关掉 MacBook 的内屏,翻资料翻到了引导参数的考古:「在 Mac OS X 10.10 Yosemite 之前,用 iog 这个参数;之后,用 niog 这个参数,0 和 1 的定义颠倒」。可惜这是 Intel 时代的玩法。

到了 Apple silicon,nvram 本身还在,行为却大不一样。最直观的是清除 NVRAM:「因为在 Apple silicon Mac 上清除 NVRAM 是必须进入到系统的,不管是 macOS、fallback recoveryOS 还是长按电源键进入的 1TR recoveryOS」,「不像 Intel-based Mac 只要开机时按住四个键就可以」。写 boot-args 也一样,SIP 不关,直接报 privilege violation。

就算关了 SIP 写进去,也不一定生效。我的理解是「所以引导参数不是不能用了,只是安全性级别的关系,内核忽略了这些参数(?)」。至于关内屏,没有简单的命令可用,Lunar 的 BlackOut 也只是取巧,屏幕并没有真正关掉。

Aaron Lau(韩栖)

简体拼音候选词被带歪 —— 三行命令重置学习记录

macOS 自带的简体拼音会根据你的输入习惯调整候选词顺序,好处是越用越顺,坏处是偶尔一次就能把它带歪。「我遇到了类似的情况,打了一个呵呵的呵,结果输入“he”第一位不再是和和气气的和了」。

系统设置里没有一个“重置学习记录”的按钮,但学习数据就躺在两个地方,删掉再重启输入法进程就行:

rm -rf ~/Library/Containers/com.apple.inputmethod.SCIM/Data
rm -f ~/Library/Dictionaries/DynamicPhraseLexicon_zh_Hans.db
kill -9 `pgrep SCIM`

SCIM 是简体拼音的进程名,DynamicPhraseLexicon 就是那份会动态调整顺序的词库。代价是之前积累的常用词也一并清空,所以这三行适合在候选词已经乱到影响打字时再用。

Aaron Lau(韩栖)

旧文新看:Mac 的寿命 —— 由 Homebrew 说了算

旧文新看。2024 年 2 月我在群里抛过一个问题:「决定一台 Mac 寿命的,除了 Chrome 的最低系统需求就是 Homebrew 的最低系统需求了?」。那时还带着问号。

意思是,系统更新停了,一台 Mac 还远没到退役的时候;常用软件一个接一个把它划出支持范围,才是真正的倒计时。浏览器是一道门槛,命令行工具是另一道。

一年后,这个问号变成了提醒。跟人聊到一台旧 Mac,我的建议是「如果你要装软件赶紧装,不然今年 9 月之后你就要换 MacPorts 了」。Homebrew 一放手,剩下的路就只有 MacPorts。

Aaron Lau(韩栖)

读懂 macOS 的 build number —— 5266 不是第 5266 次编译

Apple 的 build number 像一串暗号。开头的数字对应大版本,22 就是 macOS 13;接着的字母对应小版本;后面那串数字,才是我这几天在琢磨的东西。

「以 13.0 的 build number 为例,5266 和 8380,考虑到 RTM 是 380,所以 5266 不太可能是第 5266 个 build,而是第 266 个 build,那么前面的 5 和 8 分别代表什么意思」。同样的问题还有「5055,这里的 0 应该是 leading zero 咯?」。千位上那个数字看来不是计数,而是某种分支或用途的标记,具体怎么分,我还没找到官方说法。

尾缀也有规律,「比如 beta 7 和 beta 8 这种一般是 a 的尾缀」。按这套读法拆下去,「而预装在 2023 款 15 寸 MacBook Air 上的版本是 22F 这个项目的第 63 个 build」。版本号是写给用户看的,build number 才是写给工程师看的,从它身上能读出一个版本在开发周期里走到了哪一步。

Aaron Lau(韩栖)

Apple silicon Mac 离不开苹果服务器 —— 第一次开机就要联网

Intel Mac 时代,一台机器装好系统就是你的。Apple silicon Mac 不一样,它的启动链里有一环握在林檎手上。我去年底梳理过这个顺序:「降低安全性是读取 LocalPolicy 之后的步骤,所以要先解决没有有效的 LocalPolicy 的问题,也就是说新安装系统、第一次开机,是必须经过苹果服务器的」。

也就是说,想改安全设置,得先有一份苹果签过的本地策略,而这份策略要联网去拿。常见的绕路办法也走不通,「所以 MDM 绕过激活锁的方式也是不适用的,在从苹果激活服务器获得 ucrt 之前,连终端都进不去」。

不只是第一次开机,「说到这里,Apple silicon Mac 在执行软件更新时必须联网,不联网就不能升级系统」。安全是做足了,代价是每一台 Mac 能不能用、能不能升级,都要看那台服务器还认不认它。

Aaron Lau(韩栖)

旧文新看:老 MacBook Pro 刷回旧系统 —— 返老还童是错觉

旧文新看。2022 年 9 月我很得意:「之前把 15-inch MacBook Pro 2017 刷回了 Sierra,返老还童了一样」。手上还留着一份时间胶囊,「我只保留了一个 2019 年的完整 Time Machine 备份」,想着把整台机器连系统带软件一起退回 2019 年。

这份胶囊之所以珍贵,是因为它不可再生:「可惜新版的 Time Machine 连系统本体都不会备份了」。新的备份只存文件,不存系统,想要一台完整的旧 Mac,只能靠以前留下的那一份。

可返老还童的感觉只维持了三个月。同年 12 月我自己改口:「我之前以为只要用旧系统和旧软件就能重获新生呢,结果看来并不是」,接着补了一句:「尽管我 2 年前并不觉得这台 Intel Mac 有多慢,或许是因为当时的我没见识过 M1 吧」。

机器没有变慢,是我的参照物变了。系统和软件可以退回 2019 年,用过 M1 的人退不回去。

Aaron Lau(韩栖)

Apple 本地化的细节 —— yue_CN 更像 zh_CN

查 Apple 系统里的界面文字,有一个好去处 applelocalization.com,同一句字符串在各个语言里怎么译,一搜就有。我在上面看到一个现象:「很有趣的一个语言现象,yue_CN 跟 zh_CN 在大多数时候都是一样的,反而跟 zh_HK 有很大不同」。

标着粤语的那一套,用词贴的是简体中文,不是香港繁体中文。语言代码写的是方言,字符串跟的却是地区,同一种话在不同地方的界面上,长出了两副面孔。

本地化细致的地方也不少。去年 11 月我注意到:「这里有做了差分的,Mac 台式机称作“能源”和“能耗模式”,Mac 笔记本称作“电池”和“电量模式”」。台式机没有电池,自然不该叫电量。同一个开关,两类机器两个名字,做翻译的人显然认真想过这台机器到底是什么。

Aaron Lau(韩栖)

林檎要改的是 macOS —— 不是 iPadOS

很多人等 iPad 变得更像 Mac,我越来越怀疑方向是反的:「换句话说,苹果认为需要改革的对象是 macOS 而不是 iPadOS」。

在我们这些 Mac 用户看来,iPad 的问题是束缚太多。可从林檎的角度看,「可能“iOS 的束缚”在他们看来是无须改正的,反倒 macOS 那种过于自由的交互才是眼中钉?再来一个例子是 SwiftUI」。一套从 iOS 长出来的界面框架,被推到 Mac 上当成未来,Mac 那些不合它习惯的交互,自然就成了要被收拾的对象。

台前调度也该放在这条线上看:「然后 Stage Manager 只能说是 visionOS 开发过程中的一个副产品了,本来也没有替代传统窗口管理的野心,是可选项而不是必选项」。把它当成 iPad 走向 Mac 的证据,是把方向读反了。林檎没打算把 iPad 改造成 Mac,它更想做的,是让 Mac 慢慢变得像 iPad 一样好管。

Aaron Lau(韩栖)

Mac 玩游戏的门槛 —— 过程不能无脑

「确实很细节,但说实话 macOS 之所以不能成为主流的游戏平台,就是因为这个过程不能无脑」。我说的过程,是装转译层、找能跑的版本、调画面设置这一整套折腾。

去年 11 月我自己试了一轮。好消息是「GPTK 2 有了非常长足的进步,可以玩《近月少女的礼仪》了」;紧跟着就是一条使用须知:「还有就是如果想要声音进 AirPods 的话,需要在打开游戏前就戴上耳机,不然会外放」。进步是真的,门槛也是真的,而且这种门槛不写在任何地方,踩过才知道。

每多一条须知,就多劝退一批只想打开就玩的人。所以终点只能是一个:「理想是从 Mac App Store 下载即玩,而不是比较 CrossOver 和虚拟机哪个帧数更高?」只要大家还在比帧数,Mac 就只是一台能玩游戏的电脑,不是游戏平台。

Aaron Lau(韩栖)

Rosetta 1 和 Rosetta 2 —— 林檎只对旧架构宽容

上个月翻 PowerPC 转 Intel 那几年的资料,才知道「原来 Rosetta 1 是这样被调用的,/usr/libexec/oah/translate」,内核里还有一个开关专门管它。翻完我的结论是:「话说回来 Rosetta 1 和 2 有很大的不同,1 没打算用多久,在 Snow Leopard 系统里还是可选组件,在 Lion 系统里就被废除了;2 的话看来是长期主义的」。

可这份长期主义只朝一个方向。对 Intel app,林檎很宽容;对旧版本的 macOS,林檎越来越不宽容。去年 11 月我在群里感叹,「M4 果然是“开天辟地”的一代,开始不向后兼容了」。以前的限制没这么死,「之前仅仅是不能安装比预装版本更早的 macOS 而已,但还是可以在虚拟机里体验的」。

两件事放在一起看,林檎愿意替开发者扛着 x86 的过去,却不打算让用户回到 macOS 的过去。