Swift Package中URLSession的async/await异步网络调用失效问题
问题原因
URLSession 的 data(for:) 异步方法属于 Foundation 提供的并发扩展接口,要在 Swift Package 中正常使用该接口,需要同时满足两个条件:
- Swift 工具链版本 ≥ 5.5
- 包配置的最低部署平台版本符合接口要求:
- iOS ≥ 15.0
- macOS ≥ 12.0
- watchOS ≥ 8.0
- tvOS ≥ 15.0
你遇到的报错就是因为 Swift Package 默认使用了较低的默认部署版本,不满足接口的版本要求,所以无法识别该方法;而 Playground 会默认使用当前运行环境的最新系统版本,满足接口要求,所以可以正常运行。
解决方案
修改你的 Package.swift 配置,在 platforms 字段中指定符合要求的最低部署版本即可,示例配置如下:
// swift-tools-version: 5.5 import PackageDescription let package = Package( name: "你的包名", // 新增/修改platforms字段 platforms: [ .iOS(.v15), .macOS(.v12), // 按需添加其他支持的平台,保证版本满足最低要求 ], products: [ // 你原有产品配置保持不变 ], dependencies: [ // 你原有依赖配置保持不变 ], targets: [ // 你原有Target配置保持不变 ] )
修改配置后重新加载包,即可正常使用该异步方法,代码补全也会正常显示对应接口。
如果你的包需要兼容更低版本的系统,可以引入第三方的并发能力向后兼容库来实现对应功能。
内容的提问来源于stack exchange,提问作者Sabesh Bharathi
相关产品推荐
相关产品推荐

