2
This commit is contained in:
Binary file not shown.
@@ -129,7 +129,11 @@ static void KBSkinDarwinCallback(CFNotificationCenterRef center, void *observer,
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)applyImageSkinWithData:(NSData *)imageData skinId:(NSString *)skinId name:(NSString *)name {
|
- (BOOL)applyImageSkinWithData:(NSData *)imageData skinId:(NSString *)skinId name:(NSString *)name {
|
||||||
|
// 仅作为“存在背景图”的标记使用:图像文件本身存放在 App Group 容器
|
||||||
|
// Skins/<skinId>/background.png 中,这里不再把二进制图片写入 Keychain,
|
||||||
|
// 避免卸载 App 后仍残留旧背景图。
|
||||||
if (imageData.length == 0) return NO;
|
if (imageData.length == 0) return NO;
|
||||||
|
|
||||||
// 构造新主题,继承当前配色作为按键/强调色的默认值
|
// 构造新主题,继承当前配色作为按键/强调色的默认值
|
||||||
KBSkinTheme *base = self.current ?: [self.class defaultTheme];
|
KBSkinTheme *base = self.current ?: [self.class defaultTheme];
|
||||||
KBSkinTheme *t = [KBSkinTheme new];
|
KBSkinTheme *t = [KBSkinTheme new];
|
||||||
@@ -143,14 +147,34 @@ static void KBSkinDarwinCallback(CFNotificationCenterRef center, void *observer,
|
|||||||
// 继承按键文本隐藏配置和图标映射,避免仅切换背景时丢失这些设置
|
// 继承按键文本隐藏配置和图标映射,避免仅切换背景时丢失这些设置
|
||||||
t.hiddenKeyTextIdentifiers = base.hiddenKeyTextIdentifiers;
|
t.hiddenKeyTextIdentifiers = base.hiddenKeyTextIdentifiers;
|
||||||
t.keyIconMap = base.keyIconMap;
|
t.keyIconMap = base.keyIconMap;
|
||||||
t.backgroundImageData = imageData;
|
// 不再把背景图二进制存进主题(从而写入 Keychain),统一改为按 skinId
|
||||||
|
// 从 App Group 容器读取 Skins/<skinId>/background.png。
|
||||||
|
t.backgroundImageData = nil;
|
||||||
return [self applyTheme:t];
|
return [self applyTheme:t];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (UIImage *)currentBackgroundImage {
|
- (UIImage *)currentBackgroundImage {
|
||||||
NSData *d = self.current.backgroundImageData;
|
// 新策略:始终从 App Group 容器按 skinId 读取背景图文件,
|
||||||
if (d.length == 0) return nil;
|
// 确保当 AppGroup 目录被系统清理时,背景图与按键图标一起消失,
|
||||||
return [UIImage imageWithData:d scale:[UIScreen mainScreen].scale] ?: nil;
|
// 不再依赖 Keychain 中可能残留的 backgroundImageData。
|
||||||
|
NSString *skinId = self.current.skinId;
|
||||||
|
if (skinId.length == 0) return nil;
|
||||||
|
|
||||||
|
NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:AppGroup];
|
||||||
|
if (!containerURL) return nil;
|
||||||
|
|
||||||
|
NSString *relative = [NSString stringWithFormat:@"Skins/%@/background.png", skinId];
|
||||||
|
NSString *bgPath = [[containerURL.path stringByAppendingPathComponent:relative] stringByStandardizingPath];
|
||||||
|
|
||||||
|
NSFileManager *fm = [NSFileManager defaultManager];
|
||||||
|
BOOL isDir = NO;
|
||||||
|
if (![fm fileExistsAtPath:bgPath isDirectory:&isDir] || isDir) {
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
NSData *data = [NSData dataWithContentsOfFile:bgPath];
|
||||||
|
if (data.length == 0) return nil;
|
||||||
|
return [UIImage imageWithData:data scale:[UIScreen mainScreen].scale] ?: nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)shouldHideKeyTextForIdentifier:(NSString *)identifier {
|
- (BOOL)shouldHideKeyTextForIdentifier:(NSString *)identifier {
|
||||||
|
|||||||
Reference in New Issue
Block a user