Swift 官方发布 Android SDK | 肘子的 Swift 周报 #0108

作者:东坡肘子日期:2025/10/28

issue108.webp

📮 想持续关注 Swift 技术前沿?

每周一期《肘子的 Swift 周报》,为你精选本周最值得关注的 Swift、SwiftUI 技术文章、开源项目和社区动态。

一起构建更好的 Swift 应用!🚀

Swift 官方发布 Android SDK

10 月 24 日,Swift Android 工作组发布了 Swift SDK for Android 的 nightly 预览版本。这标志着该 SDK 从早期的内部测试阶段迈入了官方支持阶段,也意味着 Swift 在跨平台之路上又向前迈出了一大步。

从技术角度来看,Swift for Android 采用了交叉编译方案,核心由三个组件构成:主机工具链、Swift SDK for Android 和 Android NDK 27d。开发者可以将 Swift 代码编译为 Android 共享库,并通过 JNI 与 Java/Kotlin 实现互操作。换言之,Swift 代码已能在 Android 平台上以原生方式运行。

除了工具链的成熟,生态层面也出现了可喜进展。根据 Joannis Orlandos官方介绍文章中的说明,目前 Swift Package Index 上已有超过 25% 的开源包完成了 Android 适配。这个比例虽然还不算大,但已足以显示社区对跨平台开发的积极响应。越来越多的开发者在构建第三方库时,已经开始为 Android 的兼容性预留空间。

当然,问题也随之而来:剩下的约 75% 包中,有多少只是尚未进行适配,有多少则因与苹果生态的深度绑定(例如依赖 UIKit、AppKit、Core Data 等框架)而暂时无解?这将决定 Swift 在 Android 生态中的上限所在。对逻辑层、网络层或数据模型层而言,适配相对简单;但在 UI 层与系统集成层,跨平台的难度仍相当高。

通过 Bruno Valente Pimentel分析文章可以看出,目前在 Android 上使用 Swift 的路径已经相对清晰——无论是依托官方 SDK 进行交叉编译,借助 Skip.tools 实现 SwiftUI → Jetpack Compose 的转译,还是采用其他集成方案,开发者都能找到适合自身需求的切入点。虽然距离「开箱即用」的开发体验仍有差距,但生态的基础框架已然成形,Swift 在 Android 平台的可能性不再停留于概念阶段。

值得关注的是,Skip 的创始人 Marc Prud’hommeaux 亦是 Swift Android 工作组的核心成员之一。官方、商业与开源社区力量的多方联动,可能正是 Swift 生态日趋成熟的关键标志。与此同时,OpenSwiftUI 项目也已开始将其移植到 Android 平台,为跨平台 UI 开发提供开源实现的另一种路径。未来,围绕这一方向,工具链增强、迁移服务、教育培训、以及针对跨平台性能优化的第三方库,都有望成为新的增长点。

Swift Android SDK 的发布,虽然仍处于 nightly 阶段,但它已为跨平台开发打开了一扇新的窗口。对 Swift 开发者而言,这不仅是新的可能性,更是一种邀请——让我们不止见证 Swift 的跨平台成长,更参与其中,成为生态的建设者。

前一期内容全部周报列表

近期推荐

用 AsyncStream 重建 Combine 的多播机制 (Replacing Combine’s subjects with AsyncStream in Swift)

AsyncStream 本质上是一对一的结构:当存在多个 for await 循环时,它们会“竞争”同一个流中的值,而非各自完整接收全部数据,这与 Combine 的 Subject 能天然广播给多个订阅者的机制截然不同。Natascha Fadeeva 通过为每个订阅者创建独立的 AsyncStream 实例,并统一缓存所有 Continuation 进行广播,巧妙地复刻了 Combine 式的多播行为。这一实现既体现了 Swift Concurrency 的灵活性,也揭示了两种异步模型在设计哲学上的差异。

Swift Async Algorithms 提案中的 AsyncBroadcastSequence 正在标准化这一能力,提供更完善的特性,如历史值缓存、背压控制与可配置的生命周期管理。另一边,AsyncCombine 的 CurrentValueRelay 则采用类似思路,并补齐了 sinkassign 等 Combine 风格操作符,开箱即用。


SwiftData 与 MVVM:真的不兼容吗? (Is SwiftData incompatible with MVVM?)

严格来说,本文并非真正讨论 MVVM 模式本身,而是探讨在使用 SwiftData 时,是否可以、以及如何将数据访问逻辑(对 ModelContext 的操作)从 View 层上移至 ViewModel 层。Matteo Manferdini 聚焦的是 SwiftUI 与 SwiftData 的集成边界,而非架构取舍。文章通过分析 @Query 宏的展开方式与 DynamicProperty 协议机制,澄清了几个常见误解,并展示了如何通过自定义属性包装器在 SwiftUI 生命周期内安全地注入 ModelContext。结果表明,这种分层不仅可行,而且能够保持代码简洁、结构清晰。


从 iOS 开发者视角看 AI 编程代理的对比 (AI Agents Comparison from iOS Developer Perspective)

在 AI 辅助编程领域,同一模型在不同工具中的表现差异巨大。Tomasz Lizer 以一个真实的 iOS 登录 bug 为基准,用统一提示词测试了 7 款 AI 编程代理,从速度、准确性与回归风险三个维度进行评分。测试结果指出:同样基于 Claude Sonnet 4.5 的模型,在 GitHub Copilot 中表现最差,却在 Claude Code 中表现最佳;Cursor 中也同样出色。这表明,上下文管理与提示工程的实现方式,往往比底层模型更决定实际效果。从 iOS 开发者的角度看,作者认为 Claude Code 是目前最易用且结果最平衡的选择,而 Copilot 的竞争力则已明显下滑。


在 SwiftUI 中打造可交互的渐变网格 (Crafting Interactive Tiles in SwiftUI)

本文展示如何在 SwiftUI 中创建一个交互式渐变网格效果:用户触摸屏幕时,靠近触摸点的瓷砖圆角会变大,随着距离增加逐渐恢复方正。Uladzislau Volchyk 采用逐步构建的方式,从基础网格到手势交互、渐变上色,最后用 Metal shader 添加颗粒纹理。文章大量使用了近一两个版本才出现的新 API,包括 MeshGradient、visualEffectcolorEffect,通过简洁的代码实现了专业级的视觉表现。

很难想象,在没有这些新 API 的支持下,要在 SwiftUI 中实现类似的效果需要编写多少代码。SwiftUI 仍是一个快速演进的框架,即便开发者无法全面掌握它的所有功能,也应该持续关注每个版本新增的关键能力——这些新特性往往能让开发过程事半功倍。


为闭源 SDK 添加 dSYM 符号文件 (Adding dSYMs from a closed-source Swift SDK to an App)

dSYMs(Debug Symbol Files)是将崩溃时的内存地址翻译回源代码位置的符号文件,如果闭源 SDK 缺少它们,会导致生产环境的崩溃报告无法符号化,只能看到内存地址而非具体的函数名和行号,导致几乎无法调试。Daniel Saidi 在本文中介绍了对应的解决方案:SDK 作者应在构建 XCFramework 时添加 DEBUG_INFORMATION_FORMAT=dwarf-with-dsym,并随发布版本提供 dSYM;App 开发者则可在归档后手动将 SDK 的 dSYM 文件放入 .xcarchive 的 dSYMs 文件夹,再上传至 App Store Connect。


在后台上传图片资源 (Uploading Asset Resources in the Background)

对于具备云端同步大量图片功能的应用,经常会遇到一个痛点:数据只有在应用位于前台时才能同步。从 iOS 26.1 开始,PhotoKit 新增的 PHBackgroundResourceUploadExtension 协议终于解决了这一限制——即便用户切换到其他应用或锁定屏幕,系统也能在后台持续上传资源到云端。该 API 还会自动处理网络连接、电源管理与任务调度,大幅提升云同步类应用的体验与可靠性。

有些遗憾,PHBackgroundResourceUploadExtension 并不是通用的后台上传接口,而是一个受系统托管、仅能操作 PhotoKit 资源的后台上传机制(虽然上传目标可以是任意服务器)。希望未来苹果能扩展这类能力,尤其是在 SwiftData 或 Core Data 的 CloudKit 同步中提供类似机制,让数据在后台也能无缝同步。这样用户在新设备上安装应用后,就无需再“盯着前台等待同步完成”了。


并发详解:协议一致性的陷阱与新解法 (Concurrency Step-by-Step: Conforming to Protocols)

为降低并发特性的学习门槛并改善开发者体验,Swift 6.2 正式引入了 Approachable Concurrency 概念。该模式下包含多项新的编译选项与默认行为(如 InferIsolatedConformances、NonisolatedNonsendingByDefault 等),不同组合会直接影响类型在并发语义下的表现。开发者会发现——在不同的编译配置中,为具备隔离语义的类型添加协议一致性的方式,会因编译配置而不同。Matt Massicotte 在本文中聚焦于这一主题,层层拆解了 Swift 6.2 的并发模型、编译器选项与协议一致性之间的关系,并总结了多种处理“隔离一致性冲突”的策略。

文末,Matt 还提出了他推崇的 “Non-Sendable First Design” 思想——通过将类型显式标注为 nonisolated,让其实例“被困”在创建它的隔离域内,以换取更清晰的并发边界与更高的安全性。


Android 不配拥有 Swift——但我们还是做到了 (Android Doesn’t Deserve Swift—But We Did It Anyway)

在 NSSpain 大会上,Pierluigi Cifani 以电商应用 Nuras 的移植为例,展示了 Skip 工具链如何让小团队以纯 Swift 实现跨平台开发。团队仅用数周就完成了包含蓝牙通信在内的复杂功能移植,并实现了完整 SwiftUI 组件的共享,使 Android 版本的发布速度提升了两倍。Pierluigi 坦言过程并非一帆风顺,但收益巨大。他也向社区发出呼吁:Swift 可以并且应该成为构建跨平台应用的方式。"如果我们不成功,劣质的跨平台方案将被强加给我们。"


深入理解iOS CoreText API

CoreText 是一个强大但复杂的低级文本引擎,Apple 建议开发者优先使用更高级的框架(如 Text Kit、UIKit 组件),仅在它们无法满足需求时才考虑 CoreText。由于学习曲线陡峭,很多开发者在真正需要使用时往往感到无从下手。非专业程序员Ping 系统地介绍了 CoreText 的概念、API 与实现路径,从 CTFramesetter(文档)到 CTFrame(段落)、CTLine(行)、CTRun(字形)的层级结构讲起,涵盖了文本计算、排版、绘制、点击检测、图文混排等常见场景,并配有大量可运行示例。文章还特别指出了容易踩坑的技术细节,如 UTF-16 编码计算、点击检测的正确方式等,适合需要深度定制富文本渲染的开发者收藏。

工具

PureSQL - 从纯 SQL 生成类型安全的代码

你是否也认为“SQL 本身已经足够强大,只是缺少类型安全”?如果你曾在 Go 中使用过 sqlc,或在 Android 开发中体验过 sqldelight,那么 Wes Wickwire 创建的 PureSQL 将是你一直在等待的工具。PureSQL 将“从纯 SQL 生成类型安全的代码”的理念带入了 Swift 生态。

PureSQL 内置了一个强大的编译器(通过 SPM 插件或命令行工具运行),它会在编译时解析并验证你的 SQL 文件,然后自动生成一套完整的、类型安全的 Swift 数据访问代码。这意味着你可以获得几乎完整的原生 SQL 能力和精确性,同时享受现代 Swift 带来的编译时安全检查和一流的 IDE 支持。对于追求极致性能、希望掌控原生 SQL 但又不愿放弃类型安全的开发者来说,PureSQL 提供了一个很好的平衡。

往期内容

THANK YOU

如果你觉得这份周报或者我的文章对你有所帮助,欢迎 点赞 并将其 转发 给更多的朋友。

📮 想持续关注 Swift 技术前沿?

每周一期《肘子的 Swift 周报》,为你精选本周最值得关注的 Swift、SwiftUI 技术文章、开源项目和社区动态。

一起构建更好的 Swift 应用!🚀


Swift 官方发布 Android SDK | 肘子的 Swift 周报 #0108》 是转载文章,点击查看原文


相关推荐


大模型时代的广告营销变革与实践
京东零售技术2025/10/25

大模型时代的广告营销变革与实践 互联网领域,广告营销是一种核心业态,也是先进技术和研究成果的商业化进程最快的一种渠道。伴随生成式大模型的浪潮汹涌袭来,京东广告结合自身业务特性和电商零售的新业态,推出了自主研发的广告营销商业化场景大模型,并据此带来了一场深刻的技术和业务变革。 在2025年9月25日,京东JDD(京东全球科技探索者)大会的Oxygen 智能零售论坛上,京东广告团队做了题为《大模型时代的广告营销变革与实践》的报告。 核心观点 1. 通用大模型想解决营销领域问题需向垂类模型转型。 “全


【Java】基于 Tabula 的 PDF 合并单元格内容提取
Kida的躺平小屋2025/10/22

坑还是要填的,但是填得是否平整就有待商榷了(狗头保命...)。 本人技术有限,只能帮各位实现的这个地步了。各路大神如果还有更好的实现也可以发出来跟小弟共勉一下哈。 首先需要说一下的是以下提供的代码仅作研究参考使用,各位在使用之前务必自检,因为并不是所有 pdf 的表格格式都适合。 本次实现的难点在于 PDF 是一种视觉格式,而不是语义格式。 它只记录了“在 (x, y) 坐标绘制文本 'ABC'”和“从 (x1, y1) 到 (x2, y2) 绘制一条线”。它根本不“知道”什么是“表格”、“


猿辅导Java面试真实经历与深度总结(二)
360_go_php2025/10/22

​ 在面试中,掌握Java的基础知识和深入的理解是非常重要的。今天,我们来解析几个常见的Java面试问题,包括线程状态、线程池、深拷贝与浅拷贝、线程安全、Lock与Synchronized的区别,以及逃逸分析等话题。 1. 线程状态 Java中,线程有七种状态,它们是由 Thread.State 枚举类定义的。线程的状态随着程序的执行而发生变化,下面是七种状态的描述:​编辑 NEW:线程被创建,但尚未启动。 RUNNABLE:线程可以运行,或者已经正在运行。线程调度器选择合适的线程让它执行


Docker 通信核心:docker.sock 完全指南
做运维的阿瑞2025/10/20

阅读时长: 15min | 难度: 中级 | 作者: 做运维的阿瑞 | 更新时间: 2025-10 文章目录 前言一、Docker 通信原理总览1.1 技术架构解析1.2 核心技术对比 二、核心用法与技巧2.1 容器内访问宿主机 Docker2.2 使用 Docker SDK2.3 直接与 API 交互 三、安全风险与最佳实践Q1: 有多危险?为什么说拿到 `docker.sock` 就等于 `root`?Q2: 如何安全地授权用户使用 Docker?Q3: 有没有比挂


自定义Spring Boot Starter项目并且在其他项目中通过pom引入使用
劝导小子2025/10/19

1、创建starter项目 我电脑只有JDK 8,但是创建项目的时候最低只能选择17,后续创建完后去修改即可 2、项目结构 删除主启动类Application:Starter不需要启动类删除配置文件application.properties:Starter不需要自己的配置文件删除test里面的测试启动类 在resources下创建META-INF文件夹 3、修改JDK 修改成JDK8,如果你有更高的版本请切换 4、配置pom.xml <?xml version="1


RabbitMQ消息传输中Protostuff序列化数据异常的深度解析与解决方案
Mr.45672025/10/18

目录 问题背景 环境配置 使用的依赖 测试对象 初始代码(有问题的版本) 问题分析 1. 初步排查 2. 关键发现 3. RabbitTemplate的默认行为分析 4. SimpleMessageConverter的处理机制 深入理解消息转换 消息转换器的层次结构: 而直接发送 Message: 解决方案 方案1:直接使用Message对象(推荐) 方案2:配置自定义MessageConverter 问题根因总结 经验教训 结论 最后最后附上序列化工具:


Apache Doris 与 ClickHouse:运维与开源闭源对比
SelectDB技术团队2025/10/16

引言 在当今数据驱动的商业环境中,OLAP(在线分析处理)数据库的选择对企业的数据分析能力和运维成本有着深远影响。Apache Doris 和 ClickHouse 作为业界领先的高性能 OLAP 数据库,各自在不同场景下展现出独特优势。 Apache Doris 以其优秀的宽表查询能力、多表 JOIN 性能、实时更新、search 以及湖加速特性而著称。ClickHouse 同样在宽表处理方面表现出色,其丰富的分析函数库和高性能单表聚合能力备受青睐。 然而,从运维角度来看,两者在存算分离


统一高效图像生成与编辑!百度&新加坡国立提出Query-Kontext,多项任务“反杀”专用模型
AI生成未来2025/10/15

论文链接:https://arxiv.org/pdf/2509.26641 亮点直击 Query-Kontext,一种经济型集成多模态模型(UMM),能够将视觉语言模型(VLMs)中的多模态生成推理与扩散模型执行的高保真视觉渲染相分离。 提出了一种三阶段渐进式训练策略,该策略逐步将 VLM 与越来越强大的扩散生成器对齐,同时增强它们在生成推理和视觉合成方面的各自优势。 提出了一种精心策划的数据集收集方案,以收集真实、合成和经过仔细筛选的开源数据集,涵盖多样的多模态参考到图像


微美全息(NASDAQ:WIMI)融合区块链+AI+IoT 三大技术,解锁物联网入侵检测新范式
爱看科技2025/10/14

在全面数字化转型的浪潮中,区块链、网络安全、人工智能与机器学习不再是孤立的技术概念,而是相互交织、共同推动行业进步的强大引擎。这些技术的紧密结合,特别是在物联网(IoT)领域的应用,正引领着一场前所未有的安全、效率与智能化变革。   实际,区块链技术以其去中心化、安全性和不可篡改性,为物联网数据存储和共享提供了全新的解决方案。而人工智能与机器学习技术的应用,使得物联网系统具备了自我学习和优化的能力。机器学习算法能够分析海量数据,识别出潜在的安全威胁或性能瓶颈,为系统提供精准的决策支持。


基于旗鱼算法优化卷积神经网络结合长短期记忆网络与注意力机制(CNN-LSTM-Attention)的风电场发电功率预测
智能算法研学社(Jack旭)2025/10/12

基于旗鱼算法优化卷积神经网络结合长短期记忆网络与注意力机制(CNN-LSTM-Attention)的风电场发电功率预测 文章目录 基于旗鱼算法优化卷积神经网络结合长短期记忆网络与注意力机制(CNN-LSTM-Attention)的风电场发电功率预测1.CNN原理2.LSTM原理3.注意力机制4.CNN-LSTM-Attention5.风电功率预测5.1 数据集6.基于旗鱼算法优化的CNN-LSTM-Attention7.实验结果8.Matlab代码 1.CNN原理 卷积神经

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0