Vapor应用编译报错'all()仅支持macOS12+',如何指定目标系统?
解决Vapor编译时“'all()' is only available in macOS 12 or newer”错误
问题根源
你的项目最低部署目标设为macOS 10.15,但代码中调用了仅在macOS 12及以上系统才支持的all()方法;同时Package.swift里的swift-tools-version版本过低,导致你无法直接选择更高的macOS版本枚举值。
解决方案
方案1:提升项目最低部署目标到macOS 12
升级Swift工具链版本:
把Package.swift开头的// swift-tools-version:5.2修改为// swift-tools-version:5.5或更高(Swift 5.5及以上才支持直接使用.v12这类macOS 12的枚举值,对应Xcode 13及以上版本)。修改platforms配置:
更新后的platforms部分代码如下:platforms: [ .macOS(.v12) ],要是在Xcode里看不到
.v12选项,检查你的Xcode版本是否为13或更高——旧版Xcode不支持这个枚举值,需要升级Xcode。
方案2:兼容旧系统,替换all()方法
如果不想提升部署目标,找到代码中调用all()的位置,替换为兼容macOS 10.15的实现:
- 若为
CaseIterable类型的all()(实际是allCases转集合),直接用Set(allCases)替代即可; - 若是特定API的
all()(比如某些系统框架新增的静态属性),查找该API的低版本兼容写法,或者用条件编译区分版本:// 示例条件编译写法 let allOptions: YourOptionType #if os(macOS 12.0) allOptions = .all() #else // 手动构建等效的选项集合 allOptions = [.option1, .option2, .option3] #endif
额外说明
你的Ventura 13.4.1系统本身支持macOS 12+的API,但项目的部署目标决定了编译器会按最低版本做兼容性检查,所以必须调整部署目标或兼容代码才能解决错误。
内容的提问来源于stack exchange,提问作者Dan Donaldson
相关产品推荐
相关产品推荐

