如何在Swift中根据watchOS版本条件导入新版框架?
在兼容旧版watchOS的前提下导入新版框架
要实现只在watchOS 10.0及以上版本导入并使用WorkoutKit,你不能直接用条件语句或@available修饰import声明,得用框架弱链接+运行时API检查的组合方式,具体步骤如下:
1. 将WorkoutKit设置为弱链接
在Xcode里操作:
- 选中你的watchOS Target,切换到「General」标签页
- 在「Frameworks, Libraries, and Embedded Content」列表中找到WorkoutKit
- 将它的依赖状态从「Required」改为「Optional」
弱链接的作用是:旧版本watchOS系统上不会尝试加载这个框架,避免启动崩溃,同时不影响新版本系统正常使用框架。
2. 全局导入框架,结合可用性检查使用API
直接在文件顶部全局导入WorkoutKit,然后在需要使用该框架API的代码块/类/方法上添加可用性限制:
示例1:给类添加可用性标记
import WorkoutKit @available(watchOS 10.0, *) class WorkoutSessionManager: NSObject { func startNewWorkout() { let config = WKWorkoutConfiguration() config.activityType = .running let session = try? WKWorkoutSession(configuration: config) // 后续WorkoutKit相关逻辑 } }
示例2:在函数内做运行时检查
import WorkoutKit func triggerWorkoutFlow() { if #available(watchOS 10.0, *) { let manager = WKWorkoutManager.shared() manager.startWorkout() } else { // 旧系统下的替代逻辑,比如提示用户升级系统或使用基础功能 } }
为什么你之前的写法不生效?
- 第一种
if #available包裹import的写法:Swift不允许在顶层作用域写条件语句,所以报「Statements are not allowed at the top level」错误 - 第二种
@available修饰import的写法:Swift的@available属性不能直接应用于import声明,因此报「'@available' attribute cannot be applied to this declaration」错误
内容的提问来源于stack exchange,提问作者Miamy
相关产品推荐
相关产品推荐

