This commit is contained in:
2025-11-20 14:56:15 +08:00
parent 799b0f3989
commit bc1264e28f
2 changed files with 28 additions and 4 deletions

Binary file not shown.

View File

@@ -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 {