Swift Package Index 标志。Swift Package Index

跟踪 Swift 6 严格并发检查对数据竞争安全性的采用情况。有多少包为 Swift 6 做好准备

为 Apple Silicon 构建 3,238 个 Swift 包


作为 Swift Package Index 构建系统 的一部分,我们已经处理了可能是 Apple Silicon 兼容性方面最广泛的测试,范围甚至超过了 Apple 自身。

在撰写本文时,我们的数据库中目前有 12,942 个 Apple Silicon 构建版本,涵盖了 3,238 个包。为什么这么多?我们测试每个包的最多 三个版本,并使用 xcodebuildswift 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


关于本博客

Swift Package Index 是一个 Swift 包的搜索引擎和元数据索引。我们的主要目标是帮助您更好地决定应用程序和项目中包含的依赖项。如果您是新来的用户,最好的入门方式是搜索包