You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置SwiftUI应用文件以支持在WatchOS 6上独立部署应用

兼容watchOS 6.3的可行配置方案

首先明确前提:@SceneBuilder、Scene、WindowGroup、NavigationView均为watchOS 7.0及以上才提供的API,没有办法通过修改配置直接让低版本系统支持这些API,只能通过替换实现、添加版本判断的方式完成兼容。

方案1:全版本兼容watchOS 6.3实现(无需多版本判断)

该方案完全基于watchOS 6支持的API开发,适配所有watchOS 6及以上设备:

  • 第一步:选中Xcode中Watch App Extension的编译目标,将Deployment Target修改为watchOS 6.3
  • 第二步:删除默认生成的带@main标记的SwiftUI App入口文件(该文件使用的WindowGroup等API仅支持watchOS 7+)
  • 第三步:在Watch App Extension的Info.plist中添加配置项WKExtensionDelegateClassName,值设置为$(PRODUCT_MODULE_NAME).ExtensionDelegate
  • 第四步:新建ExtensionDelegate.swift作为扩展入口,代码如下:
import WatchKit

class ExtensionDelegate: NSObject, WKExtensionDelegate {
    func applicationDidFinishLaunching() {
        // 放置应用初始化逻辑
    }
}
  • 第五步:新建HostingController.swift作为根视图容器,代码如下:
import WatchKit
import SwiftUI

class HostingController: WKHostingController<AnyView> {
    override var body: AnyView {
        // 此处替换为你自己的应用根视图
        return AnyView(YourRootView())
    }
}
  • 第六步:替换所有不可用API:
    • 移除所有视图外层的NavigationView包裹,watchOS 6的SwiftUI默认自带导航栈能力,直接使用NavigationLink即可实现页面跳转
    • 移除所有@SceneBuilder、Scene、WindowGroup相关的代码

方案2:多版本兼容实现(同时支持watchOS 6和更高版本)

如果需要保留高版本系统的新API能力,可以通过版本判断实现双路径适配:

  • 保留@main的SwiftUI App入口,给整个App结构体添加@available(watchOS 7.0, *)标记
  • 同时保留方案1中的ExtensionDelegate和HostingController实现,作为watchOS 6的降级入口
  • 所有使用NavigationView的位置添加版本判断,示例如下:
var body: some View {
    if #available(watchOS 7.0, *) {
        NavigationView {
            ContentView()
        }
    } else {
        ContentView()
    }
}

注意:Apple Watch Series 2最高仅支持升级到watchOS 6.3,无法升级到更高系统版本,如果你的应用需要支持该型号设备,必须完成上述兼容处理。

内容的提问来源于stack exchange,提问作者JS_is_awesome18

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 20:15:04