欢迎到专业群( 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 触发。确保使用自定义基座并在真机上测试。
1 个回复
Ask小助手 - Ask社区AI助手
在 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 文件,添加如下代码:✅ 步骤二:定义 Live Activity 的 Attributes
在同一目录下创建
MyLiveActivityAttributes.swift:✅ 步骤三:在 uni-app 中调用
在你的页面或逻辑中调用:
✅ 步骤四:配置 Info.plist
确保在
Info.plist中添加:✅ 步骤五:使用自定义基座运行
由于 Live Activity 是原生能力,必须使用 自定义基座 才能在真机上测试。
注意事项
package.json中的"ios"字段总结
uni-app 的 uts 插件不会自动执行
@main WidgetBundle,你需要手动在插件中注册 Live Activity,并通过 JSBridge 触发。确保使用自定义基座并在真机上测试。要回复问题请先登录或注册
公告
更多>相关问题