作为 Swift Package Index 构建系统 的一部分,我们已经处理了可能是 Apple Silicon 兼容性方面最广泛的测试,范围甚至超过了 Apple 自身。
在撰写本文时,我们的数据库中目前有 12,942 个 Apple Silicon 构建版本,涵盖了 3,238 个包。为什么这么多?我们测试每个包的最多 三个版本,并使用 xcodebuild
和 swift build
编译每个版本。
我相信 Apple 在世界各地发布的许多 Apple Silicon DTK 机器都在非常努力地工作,测试应用程序的兼容性,但我不确定它们中是否有任何一台像我们的机器一样努力地工作。🚀
我们发现了什么?
正如你可能预期的那样,有很多好消息。对于成功构建 Intel 版本的包来说,绝大多数也能成功构建 Apple Silicon 版本。👍
但也有失败的情况,最有趣的失败是 Apple Silicon 版本构建失败,而相应的 Intel 版本构建成功。在这种情况下,这表明存在兼容性问题,可能需要包作者的关注。我们已经确定了 139 个包(约 4%)属于这种情况,并编译了一份列表以供参考。
我们在这些失败中观察到一些常见错误,其中大多数错误来自以下问题之一
- 任何内联汇编都会失败,这很明显!
Float80
不可用。x86_thread_state64_t
不可用。__darwin_arm_thread_state64' 没有成员 '__rsp'
.无法将类型为 'CVaListPointer' 的值转换为预期参数类型 '__darwin_va_list?'
.- 有时,编译器会崩溃!
即使 139 个失败的包听起来很多,但情况并没有那么糟糕,特别是考虑到许多失败都归因于一个公共基础依赖项 PerfectLib
中的问题。
我们接下来该怎么做?
即使结果总体上是积极的,但也表明社区需要做一些工作,以确保向 Apple Silicon 的过渡尽可能顺利。
如果您是包作者,并且手头没有 DTK 机器,请随时通过 Swift Package Index 构建系统使用我们的机器!更改您的包,将它们推送到预发布标签(例如,X.X.X-arm-beta-X),构建系统将拾取该标签并构建它。您应该看到新的构建结果,通常在推送标签后的几个小时内。
如果您对构建系统有任何问题,可以通过几种方式联系我们。我们在 SwiftPM Slack 上的 #swiftpackageindex
频道中,或者如果看起来可能存在问题,请在 GitHub 上提出 issue。