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

编译成功后watchOS Complication未出现在表盘可选列表的问题咨询

Apple Watch Complication 编译正常但未出现在表盘可选列表的问题

我按照以下步骤将iOS Widget扩展为watchOS Complication:

  • 复制iOS Widget目标以扩展到watchOS
  • 将Targeted Device Families修改为Apple Watch
  • 将Base SDK修改为watchOS
  • 修改bundle identifier和配置文件(provisionings)
  • 将Complication目标嵌入到watch app目标中

所有步骤编译无错误、警告,但添加Complication到表盘时,它并未出现在可选列表里。我是不是漏了什么?

我的Widget代码如下:

import WidgetKit
import SwiftUI

struct CurrentMonth: Widget {
    @available(watchOS 9.0, *)
    var families: [WidgetFamily] {
#if os(watchOS)
        return [.accessoryInline, .accessoryCircular, .accessoryRectangular]
#else
        if #available(iOS 16.0, *) {
            return [.systemSmall, .systemMedium, .systemLarge, .systemExtraLarge, .accessoryInline, .accessoryCircular, .accessoryRectangular]
        } else {
            return [.systemSmall, .systemMedium, .systemLarge, .systemExtraLarge]
        }
#endif
    }
    @available(watchOS 9.0, *)
    var body: some WidgetConfiguration {
        StaticConfiguration(
            kind: "WidgetCurrentMonth",
            provider: MonthTimeline(), content: { entry in
                WidgetCurrentMonthView(entry: entry)
            })
            .configurationDisplayName("widget.currentmonth.title".localized)
            .description("widget.currentmonth.description".localized)
            .supportedFamilies(families)
    }
}

@available(watchOS 9.0, *)
struct WidgetCurrentMonthView: View {
    let entry: LastMonthEntry
    @Environment(\.widgetFamily) var family
    var body: some View {
        HStack {
            Image.briefcase
            Text("abcd")
        }
    }
}

这份代码同时用于iOS Widget目标和watchOS Complication目标。

另外,我下载了苹果官方的Complication示例项目,尝试安装到watch模拟器和真机上,同样无法正常显示Complication。这是怎么回事?

我使用的表盘如图所示,我的应用名为Field Service Watch,应该出现在Compass和Heart Rate之间。


可能的原因及解决办法:

  1. 系统版本兼容性
    代码中声明了@available(watchOS 9.0, *),需确认测试的手表/模拟器系统版本是否≥watchOS 9.0。低于该版本的设备会直接忽略这个Complication。

  2. Target配置遗漏

    • 检查watchOS Complication目标的Info.plist:必须添加NSExtension字典,其中NSExtensionPointIdentifier设为com.apple.widgetkit-extension,同时NSExtensionAttributes内要有WKComplicationSupportedFamilies数组,填入你支持的Complication类型(如accessoryInline、accessoryCircular、accessoryRectangular)。
    • 确认bundle ID层级:watch app的bundle ID需是iOS主应用ID加上.watchkitapp后缀,Complication的bundle ID需是watch app ID加上.widget后缀(例如主应用ID为com.xxx.app,watch app为com.xxx.app.watchkitapp,Complication为com.xxx.app.watchkitapp.widget)。同时watch app的Info.plist中WKCompanionAppBundleIdentifier要正确指向iOS主应用的bundle ID。
  3. WidgetKind唯一性
    确保StaticConfiguration中的kind值在整个应用(iOS+watchOS)内唯一,避免与其他Widget/Complication冲突导致加载失败。

  4. 缓存清理

    • 模拟器:彻底删除watch模拟器上的应用,重启模拟器后重新安装。
    • 真机:卸载手表上的应用,重启手表后重新同步安装。
    • 清理Xcode Derived Data:打开Xcode -> Preferences -> Locations -> Derived Data,点击路径删除对应文件夹。
  5. 官方示例运行注意事项
    运行官方示例时需选择watch app目标(而非单独的Complication目标),且确保iOS与watch模拟器配对正常;真机则需手机与手表已配对,应用在两者上均正确安装。

  6. 表盘类型匹配
    确认你使用的表盘支持你声明的Complication类型。比如若只支持accessoryInline,但表盘没有对应插槽,Complication不会出现在可选列表中。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:54:53