This commit is contained in:
2025-11-20 18:23:56 +08:00
parent b23927968f
commit 75d2e4072a
7 changed files with 140 additions and 87 deletions

View File

@@ -1,132 +1,132 @@
/* 字母 q小写 */ /* 字母 q小写 */
"letter_q_lower" = "key_q"; "letter_q_lower" = "key_q";
/* 字母 Q大写 */ /* 字母 Q大写 */
"letter_q_upper" = "key_q"; "letter_q_upper" = "key_q_up";
/* 字母 w小写 */ /* 字母 w小写 */
"letter_w_lower" = "key_w"; "letter_w_lower" = "key_w";
/* 字母 W大写 */ /* 字母 W大写 */
"letter_w_upper" = "key_w"; "letter_w_upper" = "key_w_up";
/* 字母 e小写 */ /* 字母 e小写 */
"letter_e_lower" = "key_e"; "letter_e_lower" = "key_e";
/* 字母 E大写 */ /* 字母 E大写 */
"letter_e_upper" = "key_e"; "letter_e_upper" = "key_e_up";
/* 字母 r小写 */ /* 字母 r小写 */
"letter_r_lower" = "key_r"; "letter_r_lower" = "key_r";
/* 字母 R大写 */ /* 字母 R大写 */
"letter_r_upper" = "key_r"; "letter_r_upper" = "key_r_up";
/* 字母 t小写 */ /* 字母 t小写 */
"letter_t_lower" = "key_t"; "letter_t_lower" = "key_t";
/* 字母 T大写 */ /* 字母 T大写 */
"letter_t_upper" = "key_t"; "letter_t_upper" = "key_t_up";
/* 字母 y小写 */ /* 字母 y小写 */
"letter_y_lower" = "key_y"; "letter_y_lower" = "key_y";
/* 字母 Y大写 */ /* 字母 Y大写 */
"letter_y_upper" = "key_y"; "letter_y_upper" = "key_y_up";
/* 字母 u小写 */ /* 字母 u小写 */
"letter_u_lower" = "key_u"; "letter_u_lower" = "key_u";
/* 字母 U大写 */ /* 字母 U大写 */
"letter_u_upper" = "key_u"; "letter_u_upper" = "key_u_up";
/* 字母 i小写 */ /* 字母 i小写 */
"letter_i_lower" = "key_i"; "letter_i_lower" = "key_i";
/* 字母 I大写 */ /* 字母 I大写 */
"letter_i_upper" = "key_i"; "letter_i_upper" = "key_i_up";
/* 字母 o小写 */ /* 字母 o小写 */
"letter_o_lower" = "key_o"; "letter_o_lower" = "key_o";
/* 字母 O大写 */ /* 字母 O大写 */
"letter_o_upper" = "key_o"; "letter_o_upper" = "key_o_up";
/* 字母 p小写 */ /* 字母 p小写 */
"letter_p_lower" = "key_p"; "letter_p_lower" = "key_p";
/* 字母 P大写 */ /* 字母 P大写 */
"letter_p_upper" = "key_p"; "letter_p_upper" = "key_p_up";
/* 字母 a小写 */ /* 字母 a小写 */
"letter_a_lower" = "key_a"; "letter_a_lower" = "key_a";
/* 字母 A大写 */ /* 字母 A大写 */
"letter_a_upper" = "key_a"; "letter_a_upper" = "key_a_up";
/* 字母 s小写 */ /* 字母 s小写 */
"letter_s_lower" = "key_s"; "letter_s_lower" = "key_s";
/* 字母 S大写 */ /* 字母 S大写 */
"letter_s_upper" = "key_s"; "letter_s_upper" = "key_s_up";
/* 字母 d小写 */ /* 字母 d小写 */
"letter_d_lower" = "key_d"; "letter_d_lower" = "key_d";
/* 字母 D大写 */ /* 字母 D大写 */
"letter_d_upper" = "key_d"; "letter_d_upper" = "key_d_up";
/* 字母 f小写 */ /* 字母 f小写 */
"letter_f_lower" = "key_f"; "letter_f_lower" = "key_f";
/* 字母 F大写 */ /* 字母 F大写 */
"letter_f_upper" = "key_f"; "letter_f_upper" = "key_f_up";
/* 字母 g小写 */ /* 字母 g小写 */
"letter_g_lower" = "key_g"; "letter_g_lower" = "key_g";
/* 字母 G大写 */ /* 字母 G大写 */
"letter_g_upper" = "key_g"; "letter_g_upper" = "key_f_up";
/* 字母 h小写 */ /* 字母 h小写 */
"letter_h_lower" = "key_h"; "letter_h_lower" = "key_h";
/* 字母 H大写 */ /* 字母 H大写 */
"letter_h_upper" = "key_h"; "letter_h_upper" = "key_h_up";
/* 字母 j小写 */ /* 字母 j小写 */
"letter_j_lower" = "key_j"; "letter_j_lower" = "key_j";
/* 字母 J大写 */ /* 字母 J大写 */
"letter_j_upper" = "key_j"; "letter_j_upper" = "key_j_up";
/* 字母 k小写 */ /* 字母 k小写 */
"letter_k_lower" = "key_k"; "letter_k_lower" = "key_k";
/* 字母 K大写 */ /* 字母 K大写 */
"letter_k_upper" = "key_k"; "letter_k_upper" = "key_k_up";
/* 字母 l小写 */ /* 字母 l小写 */
"letter_l_lower" = "key_l"; "letter_l_lower" = "key_l";
/* 字母 L大写 */ /* 字母 L大写 */
"letter_l_upper" = "key_l"; "letter_l_upper" = "key_l_up";
/* 字母 z小写 */ /* 字母 z小写 */
"letter_z_lower" = "key_z"; "letter_z_lower" = "key_z";
/* 字母 Z大写 */ /* 字母 Z大写 */
"letter_z_upper" = "key_z"; "letter_z_upper" = "key_z_up";
/* 字母 x小写 */ /* 字母 x小写 */
"letter_x_lower" = "key_x"; "letter_x_lower" = "key_x";
/* 字母 X大写 */ /* 字母 X大写 */
"letter_x_upper" = "key_x"; "letter_x_upper" = "key_x_up";
/* 字母 c小写 */ /* 字母 c小写 */
"letter_c_lower" = "key_c"; "letter_c_lower" = "key_c";
/* 字母 C大写 */ /* 字母 C大写 */
"letter_c_upper" = "key_c"; "letter_c_upper" = "key_c_up";
/* 字母 v小写 */ /* 字母 v小写 */
"letter_v_lower" = "key_v"; "letter_v_lower" = "key_v";
/* 字母 V大写 */ /* 字母 V大写 */
"letter_v_upper" = "key_v"; "letter_v_upper" = "key_v_up";
/* 字母 b小写 */ /* 字母 b小写 */
"letter_b_lower" = "key_b"; "letter_b_lower" = "key_b";
/* 字母 B大写 */ /* 字母 B大写 */
"letter_b_upper" = "key_b"; "letter_b_upper" = "key_b_up";
/* 字母 n小写 */ /* 字母 n小写 */
"letter_n_lower" = "key_n"; "letter_n_lower" = "key_n";
/* 字母 N大写 */ /* 字母 N大写 */
"letter_n_upper" = "key_n"; "letter_n_upper" = "key_n_up";
/* 字母 m小写 */ /* 字母 m小写 */
"letter_m_lower" = "key_m"; "letter_m_lower" = "key_m";
/* 字母 M大写 */ /* 字母 M大写 */
"letter_m_upper" = "key_m"; "letter_m_upper" = "key_m_up";
/* 数字 1 */ /* 数字 1 */
"digit_1" = "key_1"; "digit_1" = "key_1";

Binary file not shown.

View File

@@ -106,6 +106,9 @@
[self setTitle:@"" forState:UIControlStateHighlighted]; [self setTitle:@"" forState:UIControlStateHighlighted];
[self setTitle:@"" forState:UIControlStateSelected]; [self setTitle:@"" forState:UIControlStateSelected];
self.titleLabel.hidden = YES; self.titleLabel.hidden = YES;
KBSkinTheme *t = [KBSkinManager shared].current;
t.keyBackground = [UIColor clearColor];
} else { } else {
// 使 key.title hidden_keys // 使 key.title hidden_keys
[self setTitle:self.key.title forState:UIControlStateNormal]; [self setTitle:self.key.title forState:UIControlStateNormal];

View File

@@ -133,25 +133,36 @@ typedef NS_ENUM(NSUInteger, KBSkinBridgeErrorCode) {
return NO; return NO;
} }
NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:AppGroup]; // App Group退 Caches
if (!containerURL) { NSFileManager *fm = [NSFileManager defaultManager];
if (error) { NSString *baseRoot = nil;
*error = [NSError errorWithDomain:kKBSkinBridgeErrorDomain NSURL *containerURL = [fm containerURLForSecurityApplicationGroupIdentifier:AppGroup];
code:KBSkinBridgeErrorContainerUnavailable if (containerURL.path.length > 0) {
userInfo:@{NSLocalizedDescriptionKey: @"App Group container unavailable"}]; // Skins/.kb_write_test
NSString *testDir = [[containerURL.path stringByAppendingPathComponent:@"Skins"]
stringByAppendingPathComponent:@".kb_write_test"];
NSError *probeError = nil;
BOOL canWrite = [fm createDirectoryAtPath:testDir
withIntermediateDirectories:YES
attributes:nil
error:&probeError];
if (canWrite) {
baseRoot = containerURL.path;
[fm removeItemAtPath:testDir error:NULL];
} }
return NO; }
if (baseRoot.length == 0) {
NSArray<NSString *> *dirs = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
baseRoot = dirs.firstObject ?: NSTemporaryDirectory();
} }
NSString *skinsRoot = [containerURL.path stringByAppendingPathComponent:@"Skins"]; NSString *skinsRoot = [baseRoot stringByAppendingPathComponent:@"Skins"];
NSString *skinRoot = [skinsRoot stringByAppendingPathComponent:skinId]; NSString *skinRoot = [skinsRoot stringByAppendingPathComponent:skinId];
NSString *iconsDir = [skinRoot stringByAppendingPathComponent:@"icons"]; NSString *iconsDir = [skinRoot stringByAppendingPathComponent:@"icons"];
[[NSFileManager defaultManager] createDirectoryAtPath:iconsDir [fm createDirectoryAtPath:iconsDir
withIntermediateDirectories:YES withIntermediateDirectories:YES
attributes:nil attributes:nil
error:NULL]; error:NULL];
NSFileManager *fm = [NSFileManager defaultManager];
BOOL isDir = NO; BOOL isDir = NO;
BOOL hasIconsDir = [fm fileExistsAtPath:iconsDir isDirectory:&isDir] && isDir; BOOL hasIconsDir = [fm fileExistsAtPath:iconsDir isDirectory:&isDir] && isDir;
NSArray *contents = hasIconsDir ? [fm contentsOfDirectoryAtPath:iconsDir error:NULL] : nil; NSArray *contents = hasIconsDir ? [fm contentsOfDirectoryAtPath:iconsDir error:NULL] : nil;

View File

@@ -59,18 +59,38 @@ static NSString * const kKBSkinThemeStoreKey = @"KBSkinThemeCurrent";
@implementation KBSkinManager @implementation KBSkinManager
/// skinId App Group Skins/<skinId>/... /// App Group Caches
+ (NSArray<NSString *> *)kb_candidateBaseRoots {
NSMutableArray<NSString *> *roots = [NSMutableArray array];
NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:AppGroup];
if (containerURL.path.length > 0) {
[roots addObject:containerURL.path];
}
NSArray<NSString *> *dirs = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *caches = dirs.firstObject;
if (caches.length > 0) {
[roots addObject:caches];
}
return roots;
}
/// skinId Skins/<skinId>/...
/// nil / @"default" /// nil / @"default"
+ (BOOL)kb_hasAssetsForSkinId:(NSString *)skinId { + (BOOL)kb_hasAssetsForSkinId:(NSString *)skinId {
if (skinId.length == 0 || [skinId isEqualToString:@"default"]) { if (skinId.length == 0 || [skinId isEqualToString:@"default"]) {
return YES; return YES;
} }
NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:AppGroup]; NSArray<NSString *> *roots = [self kb_candidateBaseRoots];
if (!containerURL) return NO; NSFileManager *fm = [NSFileManager defaultManager];
NSString *skinsRoot = [containerURL.path stringByAppendingPathComponent:@"Skins"]; for (NSString *base in roots) {
NSString *skinRoot = [skinsRoot stringByAppendingPathComponent:skinId]; NSString *skinsRoot = [base stringByAppendingPathComponent:@"Skins"];
BOOL isDir = NO; NSString *skinRoot = [skinsRoot stringByAppendingPathComponent:skinId];
return [[NSFileManager defaultManager] fileExistsAtPath:skinRoot isDirectory:&isDir] && isDir; BOOL isDir = NO;
if ([fm fileExistsAtPath:skinRoot isDirectory:&isDir] && isDir) {
return YES;
}
}
return NO;
} }
+ (instancetype)shared { + (instancetype)shared {
@@ -176,27 +196,25 @@ static void KBSkinDarwinCallback(CFNotificationCenterRef center, void *observer,
} }
- (UIImage *)currentBackgroundImage { - (UIImage *)currentBackgroundImage {
// App Group skinId
// AppGroup
// Keychain backgroundImageData
NSString *skinId = self.current.skinId; NSString *skinId = self.current.skinId;
if (skinId.length == 0) return nil; if (skinId.length == 0) return nil;
NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:AppGroup]; NSArray<NSString *> *roots = [self.class kb_candidateBaseRoots];
if (!containerURL) return nil;
NSString *relative = [NSString stringWithFormat:@"Skins/%@/background.png", skinId];
NSString *bgPath = [[containerURL.path stringByAppendingPathComponent:relative] stringByStandardizingPath];
NSFileManager *fm = [NSFileManager defaultManager]; NSFileManager *fm = [NSFileManager defaultManager];
BOOL isDir = NO; NSString *relative = [NSString stringWithFormat:@"Skins/%@/background.png", skinId];
if (![fm fileExistsAtPath:bgPath isDirectory:&isDir] || isDir) {
return nil;
}
NSData *data = [NSData dataWithContentsOfFile:bgPath]; for (NSString *base in roots) {
if (data.length == 0) return nil; NSString *bgPath = [[base stringByAppendingPathComponent:relative] stringByStandardizingPath];
return [UIImage imageWithData:data scale:[UIScreen mainScreen].scale] ?: nil; BOOL isDir = NO;
if (![fm fileExistsAtPath:bgPath isDirectory:&isDir] || isDir) {
continue;
}
NSData *data = [NSData dataWithContentsOfFile:bgPath];
if (data.length == 0) continue;
UIImage *img = [UIImage imageWithData:data scale:[UIScreen mainScreen].scale];
if (img) return img;
}
return nil;
} }
- (BOOL)shouldHideKeyTextForIdentifier:(NSString *)identifier { - (BOOL)shouldHideKeyTextForIdentifier:(NSString *)identifier {
@@ -257,12 +275,19 @@ static void KBSkinDarwinCallback(CFNotificationCenterRef center, void *observer,
// keyIconMap value // keyIconMap value
if (value.length > 0) { if (value.length > 0) {
if ([value containsString:@"/"]) { if ([value containsString:@"/"]) {
// App Group // App Group / Caches
NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:AppGroup]; NSArray<NSString *> *roots = [self.class kb_candidateBaseRoots];
if (!containerURL) return nil; NSFileManager *fm = [NSFileManager defaultManager];
NSString *fullPath = [[containerURL.path stringByAppendingPathComponent:value] stringByStandardizingPath]; for (NSString *base in roots) {
if (![[NSFileManager defaultManager] fileExistsAtPath:fullPath]) return nil; NSString *fullPath = [[base stringByAppendingPathComponent:value] stringByStandardizingPath];
return [UIImage imageWithContentsOfFile:fullPath]; BOOL isDir = NO;
if (![fm fileExistsAtPath:fullPath isDirectory:&isDir] || isDir) {
continue;
}
UIImage *img = [UIImage imageWithContentsOfFile:fullPath];
if (img) return img;
}
return nil;
} }
// Assets // Assets
return [UIImage imageNamed:value]; return [UIImage imageNamed:value];
@@ -272,28 +297,34 @@ static void KBSkinDarwinCallback(CFNotificationCenterRef center, void *observer,
// Skins/<skinId>/icons/(identifier[_upper/_lower]).png // Skins/<skinId>/icons/(identifier[_upper/_lower]).png
NSString *skinId = self.current.skinId; NSString *skinId = self.current.skinId;
if (skinId.length == 0 || identifier.length == 0) return nil; if (skinId.length == 0 || identifier.length == 0) return nil;
NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:AppGroup]; NSArray<NSString *> *roots = [self.class kb_candidateBaseRoots];
if (!containerURL) return nil; NSFileManager *fm = [NSFileManager defaultManager];
// //
if (caseVariant == 2) { if (caseVariant == 2 || caseVariant == 1) {
NSString *relativeUpper = [NSString stringWithFormat:@"Skins/%@/icons/%@_upper.png", skinId, identifier]; NSString *suffix = (caseVariant == 2) ? @"_upper" : @"_lower";
NSString *fullUpper = [[containerURL.path stringByAppendingPathComponent:relativeUpper] stringByStandardizingPath]; NSString *relative = [NSString stringWithFormat:@"Skins/%@/icons/%@%@.png", skinId, identifier, suffix];
if ([[NSFileManager defaultManager] fileExistsAtPath:fullUpper]) { for (NSString *base in roots) {
return [UIImage imageWithContentsOfFile:fullUpper]; NSString *fullPath = [[base stringByAppendingPathComponent:relative] stringByStandardizingPath];
} BOOL isDir = NO;
} else if (caseVariant == 1) { if ([fm fileExistsAtPath:fullPath isDirectory:&isDir] && !isDir) {
NSString *relativeLower = [NSString stringWithFormat:@"Skins/%@/icons/%@_lower.png", skinId, identifier]; UIImage *img = [UIImage imageWithContentsOfFile:fullPath];
NSString *fullLower = [[containerURL.path stringByAppendingPathComponent:relativeLower] stringByStandardizingPath]; if (img) return img;
if ([[NSFileManager defaultManager] fileExistsAtPath:fullLower]) { }
return [UIImage imageWithContentsOfFile:fullLower];
} }
} }
// 退 idSkins/<skinId>/icons/<identifier>.png // 退 idSkins/<skinId>/icons/<identifier>.png
NSString *relative = [NSString stringWithFormat:@"Skins/%@/icons/%@.png", skinId, identifier]; NSString *relative = [NSString stringWithFormat:@"Skins/%@/icons/%@.png", skinId, identifier];
NSString *fullPath = [[containerURL.path stringByAppendingPathComponent:relative] stringByStandardizingPath]; for (NSString *base in roots) {
if (![[NSFileManager defaultManager] fileExistsAtPath:fullPath]) return nil; NSString *fullPath = [[base stringByAppendingPathComponent:relative] stringByStandardizingPath];
return [UIImage imageWithContentsOfFile:fullPath]; BOOL isDir = NO;
if ([fm fileExistsAtPath:fullPath isDirectory:&isDir] && !isDir) {
UIImage *img = [UIImage imageWithContentsOfFile:fullPath];
if (img) return img;
}
}
return nil;
} }
+ (UIColor *)colorFromHexString:(NSString *)hex defaultColor:(UIColor *)fallback { + (UIColor *)colorFromHexString:(NSString *)hex defaultColor:(UIColor *)fallback {

View File

@@ -36,6 +36,7 @@
0459D1B42EBA284C00F2D189 /* KBSkinCenterVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 0459D1B32EBA284C00F2D189 /* KBSkinCenterVC.m */; }; 0459D1B42EBA284C00F2D189 /* KBSkinCenterVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 0459D1B32EBA284C00F2D189 /* KBSkinCenterVC.m */; };
0459D1B72EBA287900F2D189 /* KBSkinManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 0459D1B62EBA287900F2D189 /* KBSkinManager.m */; }; 0459D1B72EBA287900F2D189 /* KBSkinManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 0459D1B62EBA287900F2D189 /* KBSkinManager.m */; };
0459D1B82EBA287900F2D189 /* KBSkinManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 0459D1B62EBA287900F2D189 /* KBSkinManager.m */; }; 0459D1B82EBA287900F2D189 /* KBSkinManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 0459D1B62EBA287900F2D189 /* KBSkinManager.m */; };
0461310F2ECF0FBC00A6FADF /* fense.zip in Resources */ = {isa = PBXBuildFile; fileRef = 0461310E2ECF0FBC00A6FADF /* fense.zip */; };
0477BD952EBAFF4E0055D639 /* KBURLOpenBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 0477BD932EBAFF4E0055D639 /* KBURLOpenBridge.m */; }; 0477BD952EBAFF4E0055D639 /* KBURLOpenBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 0477BD932EBAFF4E0055D639 /* KBURLOpenBridge.m */; };
0477BDF02EBB76E30055D639 /* HomeSheetVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 0477BDEF2EBB76E30055D639 /* HomeSheetVC.m */; }; 0477BDF02EBB76E30055D639 /* HomeSheetVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 0477BDEF2EBB76E30055D639 /* HomeSheetVC.m */; };
0477BDF32EBB7B850055D639 /* KBDirectionIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0477BDF22EBB7B850055D639 /* KBDirectionIndicatorView.m */; }; 0477BDF32EBB7B850055D639 /* KBDirectionIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0477BDF22EBB7B850055D639 /* KBDirectionIndicatorView.m */; };
@@ -228,6 +229,7 @@
0459D1B32EBA284C00F2D189 /* KBSkinCenterVC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBSkinCenterVC.m; sourceTree = "<group>"; }; 0459D1B32EBA284C00F2D189 /* KBSkinCenterVC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBSkinCenterVC.m; sourceTree = "<group>"; };
0459D1B52EBA287900F2D189 /* KBSkinManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBSkinManager.h; sourceTree = "<group>"; }; 0459D1B52EBA287900F2D189 /* KBSkinManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBSkinManager.h; sourceTree = "<group>"; };
0459D1B62EBA287900F2D189 /* KBSkinManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBSkinManager.m; sourceTree = "<group>"; }; 0459D1B62EBA287900F2D189 /* KBSkinManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBSkinManager.m; sourceTree = "<group>"; };
0461310E2ECF0FBC00A6FADF /* fense.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = fense.zip; sourceTree = "<group>"; };
0477BD922EBAFF4E0055D639 /* KBURLOpenBridge.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBURLOpenBridge.h; sourceTree = "<group>"; }; 0477BD922EBAFF4E0055D639 /* KBURLOpenBridge.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBURLOpenBridge.h; sourceTree = "<group>"; };
0477BD932EBAFF4E0055D639 /* KBURLOpenBridge.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBURLOpenBridge.m; sourceTree = "<group>"; }; 0477BD932EBAFF4E0055D639 /* KBURLOpenBridge.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBURLOpenBridge.m; sourceTree = "<group>"; };
0477BDEE2EBB76E30055D639 /* HomeSheetVC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeSheetVC.h; sourceTree = "<group>"; }; 0477BDEE2EBB76E30055D639 /* HomeSheetVC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeSheetVC.h; sourceTree = "<group>"; };
@@ -482,6 +484,7 @@
children = ( children = (
041007D12ECE012000D203BB /* KBSkinIconMap.strings */, 041007D12ECE012000D203BB /* KBSkinIconMap.strings */,
041007D32ECE012500D203BB /* 002.zip */, 041007D32ECE012500D203BB /* 002.zip */,
0461310E2ECF0FBC00A6FADF /* fense.zip */,
); );
path = Resource; path = Resource;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -1422,6 +1425,7 @@
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
04A9FE202EB893F10020DB6D /* Localizable.strings in Resources */, 04A9FE202EB893F10020DB6D /* Localizable.strings in Resources */,
0461310F2ECF0FBC00A6FADF /* fense.zip in Resources */,
041007D42ECE012500D203BB /* 002.zip in Resources */, 041007D42ECE012500D203BB /* 002.zip in Resources */,
041007D22ECE012000D203BB /* KBSkinIconMap.strings in Resources */, 041007D22ECE012000D203BB /* KBSkinIconMap.strings in Resources */,
04286A0B2ECD88B400CE730C /* KeyboardAssets.xcassets in Resources */, 04286A0B2ECD88B400CE730C /* KeyboardAssets.xcassets in Resources */,
@@ -1474,10 +1478,14 @@
inputFileListPaths = ( inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-keyBoard/Pods-keyBoard-frameworks-${CONFIGURATION}-input-files.xcfilelist", "${PODS_ROOT}/Target Support Files/Pods-keyBoard/Pods-keyBoard-frameworks-${CONFIGURATION}-input-files.xcfilelist",
); );
inputPaths = (
);
name = "[CP] Embed Pods Frameworks"; name = "[CP] Embed Pods Frameworks";
outputFileListPaths = ( outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-keyBoard/Pods-keyBoard-frameworks-${CONFIGURATION}-output-files.xcfilelist", "${PODS_ROOT}/Target Support Files/Pods-keyBoard/Pods-keyBoard-frameworks-${CONFIGURATION}-output-files.xcfilelist",
); );
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-keyBoard/Pods-keyBoard-frameworks.sh\"\n"; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-keyBoard/Pods-keyBoard-frameworks.sh\"\n";

View File

@@ -122,10 +122,10 @@
- (void)kb_handleShopTapAtIndexPath:(NSIndexPath *)indexPath { - (void)kb_handleShopTapAtIndexPath:(NSIndexPath *)indexPath {
NSString *title = (indexPath.item < self.dataSource.count) ? self.dataSource[indexPath.item] : KBLocalized(@"专属皮肤002"); NSString *title = (indexPath.item < self.dataSource.count) ? self.dataSource[indexPath.item] : KBLocalized(@"专属皮肤002");
// 002.zip id便 // 002.zip id便
static NSString * const kKBBundleSkinId002 = @"bundle_skin_002"; static NSString * const kKBBundleSkinId002 = @"bundle_skin_fense";
[KBSkinInstallBridge publishBundleSkinRequestWithId:kKBBundleSkinId002 [KBSkinInstallBridge publishBundleSkinRequestWithId:kKBBundleSkinId002
name:title ?: kKBBundleSkinId002 name:title ?: kKBBundleSkinId002
zipName:@"002.zip" zipName:@"fense.zip"
iconShortNames:nil]; iconShortNames:nil];
[KBHUD showInfo:KBLocalized(@"已通知键盘解压,切换到自定义键盘即可生效")]; [KBHUD showInfo:KBLocalized(@"已通知键盘解压,切换到自定义键盘即可生效")];
} }