iOS 13能否运行WidgetKit代码?低版本系统小组件适配开发问询
问题核心结论
WidgetKit是iOS 14及以上才提供的系统框架,不可能兼容iOS 13系统,你尝试下调WidgetKit target部署版本的操作从根本上无法实现,'main()' is only available in application extensions for iOS 14.0 or newer属于系统级硬限制,添加@available注解无法解决。
可行解决方案
你提到的「Xcode 12已不再支持Today's Widget」属于认知误区,Xcode 12.4完整保留了Today Extension(iOS 10~iOS13系统的官方小组件实现)的创建、编译、调试能力,你可以通过双Extension共存的方案满足全版本需求:
- 保留现有部署目标为iOS14的WidgetKit target,专供iOS14及以上系统用户使用
- 新增一个Today Extension target,部署目标设为iOS13,专供iOS13系统用户使用,两个target完全独立互不干扰
- 可将小组件共用的数据源、UI渲染逻辑封装为公共组件库,同时供两个Extension target依赖,避免重复开发
操作注意事项
- 创建Today Extension的路径:Xcode菜单栏点击
File > New > Target,左侧分类选择iOS > Application Extension,找到Today Extension选项即可创建 - 系统会自动识别适配不同版本的Extension:iOS13设备只会加载Today Extension,iOS14及以上设备可同时识别两种Extension,你可在主App内引导用户优先添加体验更好的WidgetKit组件
- 如果现有Widget用SwiftUI开发,大部分基础SwiftUI API都兼容iOS13,仅需对iOS14+专属API添加
@available(iOS 14.0, *)注解即可实现逻辑复用
内容的提问来源于stack exchange,提问作者Josh Byanec McFergan
相关产品推荐
相关产品推荐

