Xcode 频繁 "呼叫" Apple 服务器
Xcode constantly phones home
February 24 2025
之前:macOS Sequoia 上无法访问的 .bnnsir 文件 文章索引 Jeff Johnson (我的应用, PayPal.Me, Mastodon)
在 Xcode 中构建 StopTheMadness Pro 通常非常快,因为我的项目没有使用任何 Swift。它由 Objective-C 和 JavaScript 组成,其中 Objective-C 的编译速度比 Swift 快得多,而 JavaScript 则不需要编译。然而,有时构建速度非常慢,原因很奇怪。查看 Xcode 的构建记录,我发现延迟出现在 "Gather provisioning inputs" 构建阶段。
当整个构建过程耗时 56.8 秒时,这一个阶段就耗时 50.6 秒!
我禁用了互联网进行了测试,慢速构建没有再发生。但是,每次我想构建和运行时都禁用互联网是不切实际的。毕竟,我的项目是一个 Safari 扩展!我确实使用了 Little Snitch,并且之前已经允许 Xcode 与 apple.com
的所有连接,因为这是将构建上传到 App Store Connect 所必需的。当我使用 Little Snitch 仔细检查 Xcode 的单个连接时,我发现 developerservices2.apple.com
是导致 "Gathering provisioning inputs" 构建阶段缓慢的原因。当我使用 Little Snitch 拒绝这些连接时,我的构建始终很快,而且很成功。这个构建阶段 基本上 是不必要的。
我在 Apple Developer Forums 中找到了一个讨论该问题的帖子,其中提到了命令行工具 xcodebuild
的 -allowProvisioningUpdates
选项。 来自 man
手册:
允许 xcodebuild 与 Apple Developer 网站通信。对于自动签名的目标,xcodebuild 将创建和更新配置文件、App IDs 和证书。对于手动签名的目标,xcodebuild 将下载缺失或更新的 provisioning profiles。需要在 Xcode 的 Accounts preference pane 中添加一个开发者帐户。
连接到 developerservices2.apple.com
以及其他一些域名,是将构建上传到 App Store Connect 所必需的。另一方面,对于大多数本地构建,"Gathering provisioning inputs" 构建阶段是不必要的,并且会大大降低构建速度。因此,我现在默认在 Little Snitch 中拒绝 Xcode 连接到 developerservices2.apple.com
,并且仅在上传到 App Store Connect 时才禁用该规则。
在我调查慢速构建的过程中,我注意到了一些其他频繁的 Xcode 连接。例如,Xcode 每次启动时都会连接到 devimages-cdn.apple.com
。根据 Apple 的支持文档 Use Apple products on enterprise networks,该域名用于 "Xcode downloadable components"。我假设这是指 Xcode 设置的 Components 窗格中的平台支持。(请注意,该文档没有提到 developerservices2.apple.com
。)但是,每次启动时都检查更新是不必要的。我宁愿不告诉 Apple 我何时启动 Xcode,或者何时进行应用的本地构建。这当然与 Apple 声称他们相信隐私是一项基本人权的说法不符。或者也许 Apple 认为开发者是次等人……
我把最糟糕的留到了最后。由于某种原因,每次我打开一个 Xcode 项目时,Xcode 都会 "呼叫" appstoreconnect.apple.com
。这似乎也是不必要的,而且在 Little Snitch 中拒绝这些连接后我没有遇到任何问题,所以我这样做了!我假设这些连接将关于 Xcode 项目的识别信息发送给 Apple,否则为什么要打开项目时建立这些连接呢? 并且来自 Xcode 的所有这些连接,到每个域,都需要登录您的 Apple Developer 帐户,因此无论如何,Apple 肯定会收到关于您的识别信息。
实际上,Xcode 是一种开发者分析收集机制,无论你是否喜欢,我都反感这样。
Jeff Johnson (我的应用, PayPal.Me, Mastodon) 文章索引 之前:macOS Sequoia 上无法访问的 .bnnsir 文件