This commit is contained in:
2025-11-25 18:54:53 +08:00
parent c4398a689b
commit b8cc38aa61
8 changed files with 303 additions and 195 deletions

View File

@@ -10,6 +10,18 @@ NS_ASSUME_NONNULL_BEGIN
/// 跨进程通知:主 App 请求键盘扩展安装皮肤。
extern NSString * const KBDarwinSkinInstallRequestNotification;
/// 皮肤安装桥接错误域。
extern NSErrorDomain const KBSkinBridgeErrorDomain;
/// 皮肤安装桥接错误码。
typedef NS_ENUM(NSUInteger, KBSkinBridgeErrorCode) {
KBSkinBridgeErrorInvalidPayload = 1,
KBSkinBridgeErrorContainerUnavailable,
KBSkinBridgeErrorZipMissing,
KBSkinBridgeErrorUnzipFailed,
KBSkinBridgeErrorApplyFailed,
};
typedef void (^KBSkinInstallConsumeCompletion)(BOOL success, NSError * _Nullable error);
@interface KBSkinInstallBridge : NSObject
@@ -17,6 +29,17 @@ typedef void (^KBSkinInstallConsumeCompletion)(BOOL success, NSError * _Nullable
/// 默认图标短文件名映射(从 KBSkinIconMap.strings 读取)。
+ (NSDictionary<NSString *, NSString *> *)defaultIconShortNames;
/// 主 App / 键盘扩展:通过远程 zip_url 下载并安装一套皮肤。
/// - skinJSON 结构与后端约定一致,至少包含:
/// * id: 皮肤唯一标识
/// * name: 展示名称(可选,缺省为 id
/// * zip_url: 远程 Zip 地址http/https
/// * key_icons: 按键 -> 图标“短文件名”映射(可选,不传则使用 defaultIconShortNames
/// - 内部会将 Zip 解压到 App Group/Skins/<id>/...,并使用 KBSkinManager 应用主题与背景图。
/// - 应用成功后KBSkinManager 会广播皮肤变更通知,键盘扩展可立即感知。
+ (void)installRemoteSkinWithJSON:(NSDictionary *)skinJSON
completion:(nullable KBSkinInstallConsumeCompletion)completion;
/// 主 App 侧:记录一个“从 bundle 解压皮肤”的请求,写入 App Group 并广播 Darwin 通知。
+ (void)publishBundleSkinRequestWithId:(NSString *)skinId
name:(NSString *)name
@@ -36,4 +59,3 @@ typedef void (^KBSkinInstallConsumeCompletion)(BOOL success, NSError * _Nullable
@end
NS_ASSUME_NONNULL_END