2***@qq.com
2***@qq.com
  • 发布:2026-02-24 21:10
  • 更新:2026-02-24 21:11
  • 阅读:16

iOS live activity uts 开发无法预先加载WidgetBundle

分类:uts

WidgetBundle 如下:

import WidgetKit
import SwiftUI

@main
struct MyWidgetBundle: WidgetBundle {
var body: some Widget {
MyWidgetLiveActivity()
}
}

iOS的 live activity(锁屏活动) 案例代码中这段是app运行就被执行了,然后就可以request 唤起锁屏活动

这个我和iOS的uts 插件代码一起的,但是好像 @main 没执行,request执行后返回是成功了,但是实际上UI没有展示,有没有方法让其运行?

2026-02-24 21:10 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

在 uni-app 的 uts 插件中,iOS 的 Live Activity(灵动岛/锁屏实时活动)依赖的 WidgetBundle 并不会像纯原生项目那样在 App 启动时自动加载,因为 uni-app 的运行机制是通过 JSBridge 与原生端通信,原生插件需要显式注册和初始化。

问题原因

@main struct MyWidgetBundle 没有被系统执行,是因为 uni-app 的 uts 插件不会自动加载 Swift 的 WidgetBundle,需要手动在原生工程中注册 Live Activity。

解决方案

你需要在 uts 插件的 iOS 原生代码中手动注册 Live Activity,并通过 uni-app 触发。

✅ 步骤一:在 uts 插件中添加 Live Activity 注册逻辑

uni_modules/your-plugin/utssdk/app-ios/ 目录下新建或修改 Swift 文件,添加如下代码:

import ActivityKit  
import WidgetKit  

@available(iOS 16.1, *)  
@objc public class LiveActivityManager: NSObject {  
    @objc public static func startLiveActivity() {  
        let attributes = MyLiveActivityAttributes(name: "测试活动")  
        let contentState = MyLiveActivityAttributes.ContentState(value: 100)  
        do {  
            let activity = try Activity<MyLiveActivityAttributes>.request(  
                attributes: attributes,  
                contentState: contentState  
            )  
            print("Live Activity 启动成功:\(activity.id)")  
        } catch {  
            print("Live Activity 启动失败:\(error)")  
        }  
    }  
}

✅ 步骤二:定义 Live Activity 的 Attributes

在同一目录下创建 MyLiveActivityAttributes.swift

import ActivityKit  
import WidgetKit  

struct MyLiveActivityAttributes: ActivityAttributes {  
    public struct ContentState: Codable, Hashable {  
        var value: Int  
    }  

    var name: String  
}

✅ 步骤三:在 uni-app 中调用

在你的页面或逻辑中调用:

// #ifdef APP-PLUS  
if (uni.getSystemInfoSync().platform === 'ios') {  
  const liveActivity = uni.requireNativePlugin('YourPlugin-LiveActivity');  
  liveActivity.startLiveActivity();  
}  
// #endif

✅ 步骤四:配置 Info.plist

确保在 Info.plist 中添加:

<key>NSSupportsLiveActivities</key>  
<true/>

✅ 步骤五:使用自定义基座运行

由于 Live Activity 是原生能力,必须使用 自定义基座 才能在真机上测试。


注意事项

  • Live Activity 仅支持 iOS 16.1+
  • 必须在真机上测试,模拟器不支持
  • 插件中 Swift 文件需正确配置 package.json 中的 "ios" 字段
  • 如果仍不显示,检查是否已授予通知权限,或尝试重启设备

总结

uni-app 的 uts 插件不会自动执行 @main WidgetBundle,你需要手动在插件中注册 Live Activity,并通过 JSBridge 触发。确保使用自定义基座并在真机上测试。

内容为 AI 生成,仅供参考

要回复问题请先登录注册