- 创建medicineExtension小组件,支持iOS桌面显示用药计划 - 实现App Group数据共享机制,支持主应用与小组件数据同步 - 添加AppGroupUserDefaultsManager原生模块,提供跨应用数据访问能力 - 添加WidgetManager和WidgetCenterHelper,实现小组件刷新控制 - 在medications页面和Redux store中集成小组件数据同步逻辑 - 支持实时同步今日用药状态(待服用/已服用/已错过)到小组件 - 配置App Group entitlements (group.com.anonymous.digitalpilates) - 更新Xcode项目配置,添加WidgetKit和SwiftUI框架支持
56 lines
1.6 KiB
Objective-C
56 lines
1.6 KiB
Objective-C
//
|
|
// WidgetManager.m
|
|
// OutLive
|
|
//
|
|
// Created by AI Assistant on 2025/11/13.
|
|
//
|
|
|
|
#import "WidgetManager.h"
|
|
#import "OutLive-Swift.h"
|
|
|
|
@implementation WidgetManager
|
|
|
|
RCT_EXPORT_MODULE();
|
|
|
|
+ (BOOL)requiresMainQueueSetup {
|
|
return NO;
|
|
}
|
|
|
|
RCT_EXPORT_METHOD(reloadTimelines:(RCTPromiseResolveBlock)resolve
|
|
rejecter:(RCTPromiseRejectBlock)reject) {
|
|
|
|
@try {
|
|
if (@available(iOS 14.0, *)) {
|
|
// 刷新所有小组件
|
|
[WidgetCenterHelper reloadAllTimelinesIfAvailable];
|
|
|
|
// 也可以只刷新特定的medicine小组件
|
|
[WidgetCenterHelper reloadTimelinesIfAvailableOfKind:@"medicine"];
|
|
|
|
resolve(@"Widget timelines reloaded successfully");
|
|
} else {
|
|
reject(@"IOS_VERSION_ERROR", @"WidgetKit is not available on this iOS version", nil);
|
|
}
|
|
} @catch (NSException *exception) {
|
|
reject(@"RELOAD_TIMELINES_ERROR", exception.reason, nil);
|
|
}
|
|
}
|
|
|
|
RCT_EXPORT_METHOD(reloadTimeline:(NSString *)widgetKind
|
|
resolver:(RCTPromiseResolveBlock)resolve
|
|
rejecter:(RCTPromiseRejectBlock)reject) {
|
|
|
|
@try {
|
|
if (@available(iOS 14.0, *)) {
|
|
[WidgetCenterHelper reloadTimelinesIfAvailableOfKind:widgetKind];
|
|
resolve([NSString stringWithFormat:@"Widget timeline reloaded for kind: %@", widgetKind]);
|
|
} else {
|
|
reject(@"IOS_VERSION_ERROR", @"WidgetKit is not available on this iOS version", nil);
|
|
}
|
|
} @catch (NSException *exception) {
|
|
reject(@"RELOAD_TIMELINE_ERROR", exception.reason, nil);
|
|
}
|
|
}
|
|
|
|
@end
|