#!/bin/sh\\necho Hello' > /tmp/test.sh && chmod a+x /tmp/test.sh\ntime /tmp/test.sh && time /tmp/test.sh\n\n第一次执行会出现明显延迟,第二次因为缓存而变快。\n\n更新补充:部分用户的\"安全性与隐私\"设置中会出现\"开发者工具\"分类,如果终端被加入其中,则无法复现此延迟。但已有大量用户确认该问题真实存在——一位中国用户反馈使用 VPN 时延迟高达 **5.7 秒**。\n\n作者的困惑:苹果到底在向服务器发送什么?鉴于其隐私立场,不太可能是完整脚本源码,大概率是校验和(checksum)。但问题是:**校验和本该在本地计算,为何要联网?** 况且结果缓存在 inode 上,开发者频繁更新脚本/二进制文件会不断触发新检查(原地保存可避免,但新文件必然触发)。对于动态生成并执行脚本的工作流,性能直接取决于苹果服务器的响应速度。\n\n作者观察到的最大延迟约 7 秒,且有多次重复启动仍然延迟的情况(缓存失效或未生效)。\n\n**苹果回应:这是\"设计使然\"**(报告编号 FB7674490)——这也正是本文标题的由来。\n\n---\n\n## 二、特权文件系统位置:仅仅读取图标就要 150ms\n\nmacOS 对 ~/Desktop、~/Documents、~/Downloads 等目录有访问控制(TCC)。但问题在于:**仅仅获取这些文件夹的显示名称或图标,就会触发权限验证链**。\n\n验证链为:`应用 → sandboxd → tccd → SecCodeCheckValidityWithErrors → 又一个进程(未知)`。每个位置耗时约 **150ms**,且缓存仅在应用本次运行期间有效,重启后全部重新验证。\n\n复现方法:用 Transmission(或任何支持自定义下载目录的应用),将三个保存目录分别设为 ~/Desktop、~/Documents、~/Downloads,然后重启应用并打开设置面板。加载弹窗时就要等约 **0.62 秒**才能看到三个带图标的目录选项。\n\n关键栈帧:`-[NSWorkspace iconForFile:] → getattrlist → __WAITING_ON_APPROVAL_FROM_SANDBOXD__`\n\n**苹果回应:未明确回应是否为缺陷**(报告编号 FB7674470)。\n\n---\n\n## 三、钥匙串访问:一个 API 调用能卡 3.3 秒\n\n调用系统 API `SecKeychainFindGenericPassword` 时也会出现明显延迟。作者在一个\"糟糕的网络日\"观察到单次调用阻塞 **3.3 秒**,且此时 **SIP 已禁用**。\n\n关键证据:\n- 断网后问题完全消失。\n- 联网状态可稳定复现:重启应用,触发同一段代码,必然卡顿。\n- 即使应用已获得该钥匙串条目的访问权限,依然要等。\n\n**苹果回应:开发者不应使用此函数。**但问题是:文档从未标注 deprecated,即便标注了,已授权应用访问已授权条目也不该造成秒级阻塞。\n\n(报告编号 FB7679198)\n\n---\n\n## 四、联系人地址簿:创建对象也要 0.3~1 秒\n\n创建 `ABAddressBook` 实例在作者机器上平均耗时 0.3 秒,最差超过 1 秒。与钥匙串问题相同:断网即消失,禁用 SIP 无效。\n\n(报告编号 FB7679193)\n\n---\n\n## 五、应用启动:5~30 秒的卡死\n\n最严重的问题:某些时候(尤其是启动应用),整个系统会卡 5~30 秒。对启动过程采样,能看到以下栈帧反复出现:\n\n- `ImageLoaderMachO::loadCodeSignature`\n- `SLSMainConnectionID`\n- Skylight 和 CGS(CoreGraphics Server)相关大量引用\n\n断网后延迟消失,禁用 SIP 无改善。\n\n(报告编号 FB7679285)\n\n---\n\n## 本质问题与思考\n\n作者认为这反映了苹果一个严重的架构设计问题:**macOS Catalina 让底层系统 API(如 exec、getxattr)在返回前执行同步网络请求**。\n\n这意味着:\n- 您的系统性能大幅依赖苹果服务器实时响应。\n- 网络不佳时,不仅某个操作变慢,**整个系统会周期性冻结**。\n\n作者补充:在 SIP 开启且网络不佳时,他的机器**每 10 分钟就出现连续 1~2 秒的系统级冻结**,其余时间也感觉迟钝。他在 Michael Tsai 博客评论中提出假设:频繁创建新进程(例如运行 `make` 等工具链)会触发大量 capability 检查(每个新进程都需要),很快达到系统处理上限,引发全局停滞。\n\n## 结语\n\n这不是一篇简单的吐槽文。文中每个结论都提供了可复现的步骤、具体的耗时数据、系统栈帧和与苹果的沟通记录。它揭示出一个令人不安的趋势:**当操作系统把安全机制建立在\"每次操作都要询问远程服务器\"之上时,再快的电脑也会被网络延迟拖垮。**\n\n这些问题影响了基础开发工具链(编译、脚本执行)、日常应用启动、隐私目录使用、钥匙串读取和联系人访问——基本上覆盖了大部分日常操作。在\"隐私安全\"与\"系统响应性\"之间,苹果需要重新寻找平衡点。\n\n原文链接:https://sigpipe.macromates.com/2020/macos-catalina-slow-by-design/\n","is_owner":false,"date":"1970/1/1","category":"操作系统"}