隐私
没有遥测、没有数据分析,也没有服务器——以及四种会读取自身容器之外内容的情况。
没有遥测,没有数据分析 SDK,也没有属于我们自己的服务器。每一次网络请求都直接发给被检查应用的厂商——或者发给 api.github.com、formulae.brew.sh 和 xcodereleases.com(Xcode 版本信息读取自这个由社区维护的索引站点)——而且除了请求本身需要的信息之外,不携带任何关于你的内容:唯一携带的是应用自身的版本号,好让厂商的订阅源能针对正确的渠道作答。
有四件事值得明确说一说,因为它们涉及读取我们自身容器之外的内容。
CleanShot X。 如果安装了它,会从它的偏好设置中读取 activationKey,用来请求 CleanShot 自己的更新程序所使用的个性化 appcast。没有这个密钥,CleanShot 的订阅源会报告试用渠道的版本,届时你收到的更新提示会是你根本装不了的。这个密钥只会发送给 legit.maketheweb.io,绝不会写入日志,也不会被写入 HTTP 磁盘缓存。
TablePlus。 会读取它的 IsReceiveBetaBuild 偏好设置,好让检测运行在应用自己设置的那个渠道上。
GitHub。 为了把 API 请求限制从每小时 60 次提高到 5,000 次,会从 GITHUB_TOKEN / GH_TOKEN 中取一个令牌,取不到就改用 gh auth token。它只会发送给 api.github.com,一旦重定向离开这个域名,令牌就会被剥离。
你的 App Store 登录信息。 每次读取 TestFlight 的数据时,都会读取系统账户数据库中的一项内容:当前 App Store 账户的媒体类型里是否包含 App Store。这决定了此刻能不能向你提供 TestFlight 测试版,也避免“刷新”按钮仅仅为了让你登录而去启动 TestFlight。除此之外不会读取任何其他信息——没有 Apple ID,没有姓名,没有任何标识符——而且从那里读到的内容不会离开这台 Mac。
你的 Apple Developer 登录信息(Xcode)
Xcode 的测试版和候选发布版只从 Apple 的开发者网站下载,需要你的 Apple ID。如果你在“设置 → Xcode”里选择登录,登录过程发生在应用内嵌的 Apple 自家页面上:你的密码和双重认证代码直接发给 Apple,应用本身不会读取它们。应用保留的是登录后产生的会话——也就是 Apple 设置的那些 apple.com cookie——保存在钥匙串和应用自己的网页数据存储中,这样重新打开应用不会把你登出。这些 cookie 只会发送给 *.apple.com:用于下载 Xcode,在“设置 → Xcode”中打开或刷新时读取 Apple 的 Xcode 下载列表,以及每隔一小时向 Apple 确认会话是否仍然有效。它们的值绝不会写入日志;日志中只会记录 Apple 返回的 cookie 名称。“设置 → Xcode → 退出登录并清除”会把它们连同“受信任设备” cookie 一起删除,这样下次登录时就会重新要求输入验证码。
Apple 会在几个小时后自行结束这个会话——我们测得的时间大约是八小时。当应用发现会话已经结束时(在每小时一次的检查中,或者在你开始下载 Xcode 时),它会在同一个网页数据存储里、以隐藏方式加载一次 Apple 的登录页面。如果 Apple 仍然认得这台 Mac 的登录状态,就会在不需要你输入密码的情况下返回一个新的会话。不会出现任何窗口,也不会输入任何内容;如果 Apple 要求输入密码,这个页面会在 30 秒后被放弃,Xcode 那一行会要求你重新登录。这种情况每次会话结束时最多发生一次,你也可以在“设置 → Xcode → 在后台续期会话”中关闭它。
凭据始终留在钥匙串中
任何你自己输入的内容——GitHub 令牌、Alcove 许可证、上面提到的 Apple Developer 会话——都以 AfterFirstUnlockThisDeviceOnly 的方式存储在登录钥匙串中。不会同步到 iCloud,也不会写入 plist 文件。
厂商页面不会留下 cookie
只能以厂商自己的网页形式展示的发布说明,会在一个使用非持久化数据存储的 WKWebView 中渲染,所以厂商的 cookie 不会在重新打开应用后留存。唯一的例外是上文说到的 Apple Developer 登录——它的窗口以及那个隐藏的续期页面——会刻意保留会话。
关于这个网站
以上说的都是这个应用。你正在阅读的这个网页是另一回事,它确实会收集一些东西,所以有必要在这里说清楚,而不是让你从应用的行为去推断。
这个网站运行着两个脚本,都来自 Vercel,都是第一方脚本。
Vercel Web Analytics 统计页面访问量。根据 Vercel 自己的文档,它会为每次访问记录:时间、URL 及其路由模式、来源页面、经过筛选的查询参数、大致地理位置(国家、地区、城市)、带版本号的浏览器和操作系统,以及设备类型。
Vercel Speed Insights 测量页面在你这边实际加载的速度。根据 Vercel 自己的文档,每次测量都携带:URL 及其路由模式、所报告的 Web Vital 指标及其归属的元素(一个 CSS 选择器,例如 html>body img.header)、网络连接类型(4g、3g 等)、浏览器、设备类型和设备操作系统、以两字母代码表示的国家、测量所用软件包的版本,以及事件被接收到的时间。注意这里的位置信息更粗略:只到国家一级,而 Analytics 会细到城市。
这两个脚本都不做的事:没有第三方 cookie。Analytics 通过一个由请求本身派生出的哈希值来识别访客,而不是靠存在你机器上的任何东西,并且这个身份会在 24 小时后被丢弃——所以它无法跨网站追踪你,也无法还原你一周前在这里做过什么。Speed Insights 根本没有访客身份这回事;Vercel 声明它不收集也不存储任何能够跨页面还原浏览会话的信息,而且这两个功能都不会把数据点与 IP 地址绑定。
除此之外没有别的了。没有广告网络,没有会话录制,也没有任何第三方脚本。下载按钮直接链接到 GitHub,发布说明则来自这个网站自己仓库里的一个文件。
如果你不想被这样测量,任何内容拦截器都能屏蔽这两个脚本,网站在没有它们的情况下也照常运作,没有任何区别。