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