Newshot

Swift 2026 年 11 月动态:CocoaPods 退役与包注册表进展

AI summary

Swift 项目发布 2026 年 11 月动态汇总。嘉宾撰稿人、Swift Package Index 联合创始人介绍了 Apple 正在开发的公开跨平台 Swift 包注册表。CocoaPods 在经历两年过渡期后走向退役,SwiftPM 已成为 Swift 各平台依赖管理的标准。

Translation(model translation, not the source's own text)

Swift 新动态:2026 年 11 月版

欢迎阅读最新一期的“Swift 新动态”,本期精选了 Swift 项目与社区发布的版本、新闻和讨论。

首先,我们的特邀撰稿人向仍在使用 CocoaPods 的开发者发出一个及时的提醒:

大家好,我是 Dave Verwer,Swift Package Index 的联合创始人,目前是 Apple 一个团队的一员,正在为 Swift 构建一个公开的跨平台包注册表。开发者如何在整个生态系统中查找、分享和管理依赖,是我们经常思考的问题。CocoaPods 是用于 Swift 和 Objective-C Cocoa 项目的依赖管理器。该项目始于 2011 年,当时 Swift 尚未公开发布,Swift Package Manager(SwiftPM)更是远未出现。对于许多从 iPhone SDK 开始开发的人来说,这是他们第一次见识依赖管理器能做什么。如今,Swift 已扩展到各个平台,SwiftPM 已成为在 Swift 运行的所有地方管理依赖的标准。继 2024 年开始的两年逐步停用期之后,CocoaPods 项目将于 2026 年 12 月 2 日停止接受新的 pod 和 pod 版本。距离这个日期已不足一个月,我希望确保这个里程碑在你的关注范围内,并分享它对你们的项目意味着什么。如果你的项目仍在使用 CocoaPods,这一变化不会立即破坏你的构建。所有现有的 pod 和版本仍然可用,只是处于只读状态。然而,由于 pod 作者将无法再发布更新,如果你还没有切换到 SwiftPM,现在正是时候。你依赖中仍在维护的大多数 pod 已经与 SwiftPM 兼容,最简单的检查方式是在 Swift Package Index 上查找它们。索引中的每个包都是 SwiftPM 包,如果你发现任何不兼容的 pod,可以搜索替代方案,以免让自己留下无人维护的依赖。我想亲自感谢每一位在过去十五年里为 CocoaPods 付出努力、创建并维护它的人。他们的工作塑造了社区分享代码的方式,并为 Swift 今天所拥有的现代跨平台包生态系统奠定了基础。我也要对团队管理这次逐步停用并如此清晰地传达过渡信息的方式表示钦佩。

大家好,我是 Dave Verwer,Swift Package Index 的联合创始人,目前是 Apple 一个团队的一员,正在为 Swift 构建一个公开的跨平台包注册表。开发者如何在整个生态系统中查找、分享和管理依赖,是我们经常思考的问题。

CocoaPods 是用于 Swift 和 Objective-C Cocoa 项目的依赖管理器。该项目始于 2011 年,当时 Swift 尚未公开发布,Swift Package Manager(SwiftPM)更是远未出现。对于许多从 iPhone SDK 开始开发的人来说,这是他们第一次见识依赖管理器能做什么。如今,Swift 已扩展到各个平台,SwiftPM 已成为在 Swift 运行的所有地方管理依赖的标准。

继 2024 年开始的两年逐步停用期之后,CocoaPods 项目将于 2026 年 12 月 2 日停止接受新的 pod 和 pod 版本。距离这个日期已不足一个月,我希望确保这个里程碑在你的关注范围内,并分享它对你们的项目意味着什么。如果你的项目仍在使用 CocoaPods,这一变化不会立即破坏你的构建。所有现有的 pod 和版本仍然可用,只是处于只读状态。然而,由于 pod 作者将无法再发布更新,如果你还没有切换到 SwiftPM,现在正是时候。

像 {{NAME_ab12cd34}} 这样写出的值是真实值的占位符。请完全按照书写的方式使用它们,无论是在回复中还是在工具调用中:它们会在任何内容运行之前被替换为真实值。不要要求验证它们,也不要用示例替换它们。

文章标题:Swift 新动态:2026 年 11 月版

正文: 你的依赖中仍在维护的大多数 pod 都已经与 SwiftPM 兼容,最简单的检查方式是在 Swift Package Index 上查找它们。索引中的每个包都是 SwiftPM 包,如果你发现任何不兼容的 pod,可以搜索替代方案,以免留下无人维护的依赖。

我想亲自感谢所有为 CocoaPods 付出努力的人,感谢他们在过去十五年里创建并维护它。他们的工作塑造了社区共享代码的方式,也为 Swift 如今现代、跨平台的包生态系统奠定了基础。我也要对团队处理这次落幕以及如此清晰地传达过渡安排的方式表达敬意。

现在来看其他 Swift 新闻:

值得观看的视频

  • Tim Condon 在 ACCU 2026 的演讲《Incrementally Migrating C++ to a Memory Safe Language with Swift》展示了 Swift 的 C++ 互操作性如何让你逐步采用内存安全,而无需一次性重写所有内容。
  • 《Building Android App with Swift: First-Hand Experience》是与 Pierluigi Cifani 的对话,他描述了其团队如何在 iOS 和 Android 之间共享业务逻辑和 ViewModel,两端使用原生 UI,并由 Skip 桥接两者,应用于 Polymarket 等应用。
  • 想用 Swift 构建 Minecraft mod 吗?最近 iOSDC Japan 的一场闪电演讲《Creating a Minecraft Java mod with Swift》展示了如何借助 swift-java 与 Minecraft Java Edition 互操作。演讲者的博客文章中有幻灯片和更多演示视频。该演讲为日语,YouTube 上提供自动配音的英语音轨。

社区亮点

  • 你知道 Optional 有一个 take() 方法吗?John Sundell 的《Interesting ways of using Swift optionals》超越了 if let,介绍了 take()、直接对可选枚举进行 switch,以及一个可与 key path 配合使用的小型 isNil(or:) 辅助方法。
  • 当你让编译器检查整个网站时会发生什么?Sindre Sorhus 用 Swift 重建了他的网站,从 Astro 迁移过来,使失效链接和错误的元数据变成构建错误。
  • 两个服务端框架,一个团队的经验。《Don’t Underestimate Swift》分享了 EPAM 的工程师使用 Hummingbird 和 Vapor 构建后端的经验,以及这些服务与 FastAPI 和 Node.js 的对比。
  • Swift Testing 中 Embedded Swift 支持的预览展示了几乎整个 API,包括 @Test、#expect() 和自定义 trait,都能在 Embedded Swift 中运行。它已在 Safari 中的 WASI、Raspberry Pi Pico 2、Playdate 和 Game Boy Advance SP 上试用过。

新包发布

  • Swift Kafka Client 已达到 1.0.0。这个用于事件流平台 Apache Kafka 的客户端基于 librdkafka 构建,支持结构化并发,通过 swift-metrics 提供内置指标,并支持静态 Linux 构建。
  • 机器人技术遇上 Swift。swift-ros2 是机器人框架 ROS 2 的原生客户端库。它可在 Apple 平台、Linux、Windows 和 Android 上运行,3.1.0 版本最近新增了 topic graph API,用于发现机器人网络上可用的内容。
  • Perfect-NIO,Perfect 服务端框架的 HTTP 层,已基于 SwiftNIO 和 Swift 6 并发重写。0.1.0 版本使用 async、@Sendable 路由处理器,0.2.0 增加了 WebSocket 消息大小限制。

Swift Evolution

Swift 项目通过 Swift Evolution 流程添加新的语言特性。以下是目前正在审查或最近被接受用于未来 Swift 版本的一些提案。

正在积极审查中:

  • SE-0559 Add bidiClass to Unicode.Scalar.Properties - 如果你的代码要布局或转换混合了从右到左和从左到右文字系统的文本,你通常需要知道特定字符的行为方式。该提案为 Unicode.Scalar.Properties 添加了 bidiClass,让你可以在 Swift 中查询字符的双向类别,而无需桥接到 ICU 等外部库。

文章标题:Swift 新特性:2026 年 11 月版

正文:

  • SE-0560 针对目标依赖的构建配置条件 - 该提案允许你根据是为调试还是发布构建,有条件地包含 SwiftPM 依赖。通过添加新的配置条件,你可以仅将调试菜单链接到调试构建中,或仅将崩溃报告器链接到发布构建中。

近期已接受:

  • SE-0552 Float.pi 的舍入 - 该提案移除了 FloatingPoint.pi 必须向零舍入的要求,因此 Float.pi 可以返回最佳近似值。这使 Swift 与 IEEE 754 工作组的指导方针保持一致,即实现应返回它们所能提供的最佳近似值。
  • SE-0545 SwiftPM 构建性能调试选项 - 如果你正试图加快包的构建时间,该提案新增了两个调试选项,帮助你了解时间花在了哪里。它引入了可在 Perfetto 等工具中查看的 trace event 文件,以及描述导致每个任务运行的事件序列的任务回溯。两者都以实验性标志的形式在 nightly 工具链中提供。
  • SE-0553 任务标识 - 该提案引入了 Task.currentID,这是一个低开销、进程唯一的当前任务标识符。它专为性能敏感的插桩而设计,例如结构化日志和追踪,让你无需 withUnsafeCurrentTask 的开销就能识别任务。
  • SE-0551 单个值上的 Span - 该提案新增了 Span(ofOne:) 和 MutableSpan(ofOne:) 等初始化器,让你可以就地借用单个值。它提供了 withUnsafePointer(to:) 的安全替代方案,并在将单个值传递给接受 Span 的 API 时避免了不必要的复制。

近期经修改后接受:

  • SE-0547 SwiftPM 对编译缓存的支持 - 为了加快那些无法从传统增量构建中受益的工作流(例如切换分支或运行干净的 CI 构建),该提案让 SwiftPM 能够配置内容寻址的编译缓存。你可以使用新的 swift package build-cache configure 命令,全局、按包或按构建来管理此缓存。

作者

继续阅读

The translation is machine-generated and individual terms may be off. Nothing is rewritten or cut; the original is authoritative.

Published by Swift Blog
This site only summarises and aggregates; copyright stays with the original author. Headlines and summaries follow the source — where they differ, the original wins.
Read the original ↗