From 73c83153f9fff66869e6c33f5d0e179ecd0b3f84 Mon Sep 17 00:00:00 2001 From: CodeST <694468528@qq.com> Date: Tue, 25 Nov 2025 21:50:07 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BC=BA=E5=B0=91=E9=94=AE=E7=9B=98=E5=9B=BE?= =?UTF-8?q?=20=E4=BF=AE=E6=94=B9=E7=BD=91=E7=BB=9C=E7=8E=AF=E5=A2=83?= =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CustomKeyboard/Resource/KBSkinIconMap.strings | 2 + CustomKeyboard/Resource/fense.zip | Bin 784557 -> 791498 bytes CustomKeyboard/View/KBKeyboardView.m | 2 +- Shared/KBSkinInstallBridge.m | 2 + keyBoard.xcodeproj/project.pbxproj | 8 ++-- .../xcshareddata/xcschemes/keyBoard.xcscheme | 2 +- .../Home/VC/FunctionTest/KBSkinCenterVC.m | 43 ++++++++---------- keyBoard/Class/Network/KBNetworkManager.m | 3 ++ keyBoard/Class/Resource/KBSkinIconMap.strings | 2 + 9 files changed, 35 insertions(+), 29 deletions(-) diff --git a/CustomKeyboard/Resource/KBSkinIconMap.strings b/CustomKeyboard/Resource/KBSkinIconMap.strings index 2ae0dba..e8ee353 100644 --- a/CustomKeyboard/Resource/KBSkinIconMap.strings +++ b/CustomKeyboard/Resource/KBSkinIconMap.strings @@ -214,6 +214,8 @@ "sym_lt" = "key_lt"; /* '>' */ "sym_gt" = "key_gt"; +/* '¥' */ +"sym_money" = "key_money"; /* '€' */ "sym_euro" = "key_euro"; /* '£' */ diff --git a/CustomKeyboard/Resource/fense.zip b/CustomKeyboard/Resource/fense.zip index d6800c011a1f78f709d70ae1736218f5e31b6182..6613bf02e79f0e44b1437821a0ae306571f44e14 100644 GIT binary patch delta 14148 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 F_&*2X#cu!r delta 7460 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 diff --git a/CustomKeyboard/View/KBKeyboardView.m b/CustomKeyboard/View/KBKeyboardView.m index 2feb255..f1dc854 100644 --- a/CustomKeyboard/View/KBKeyboardView.m +++ b/CustomKeyboard/View/KBKeyboardView.m @@ -197,7 +197,7 @@ static const CGFloat kKBLettersRow2EdgeSpacerMultiplier = 0.5; [KBKey keyWithIdentifier:@"sym_semicolon" title:@";" output:@";" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"sym_paren_l" title:@"(" output:@"(" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"sym_paren_r" title:@")" output:@")" type:KBKeyTypeCharacter], - [KBKey keyWithIdentifier:@"sym_dollar" title:@"$" output:@"$" type:KBKeyTypeCharacter], + [KBKey keyWithIdentifier:@"sym_money" title:@"¥" output:@"¥" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"sym_amp" title:@"&" output:@"&" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"sym_at" title:@"@" output:@"@" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"sym_quote_double" title:@"\"" output:@"\"" type:KBKeyTypeCharacter] ]; diff --git a/Shared/KBSkinInstallBridge.m b/Shared/KBSkinInstallBridge.m index c72a55a..e9b8de6 100644 --- a/Shared/KBSkinInstallBridge.m +++ b/Shared/KBSkinInstallBridge.m @@ -203,8 +203,10 @@ static NSString * const kKBSkinPendingIconShortKey = @"iconShortNames"; #if __has_include("KBNetworkManager.h") // 远程下载(http/https) + NSLog(@"[SkinBridge] will GET zip: %@", zipURL); [KBHUD show]; [[KBNetworkManager shared] GET:zipURL parameters:nil headers:nil completion:^(id jsonOrData, NSURLResponse *response, NSError *error) { + NSLog(@"[SkinBridge] GET finished, error = %@", error); [KBHUD dismiss]; NSData *data = ([jsonOrData isKindOfClass:NSData.class] ? (NSData *)jsonOrData : nil); if (error || data.length == 0) { diff --git a/keyBoard.xcodeproj/project.pbxproj b/keyBoard.xcodeproj/project.pbxproj index e039137..d9a5dce 100644 --- a/keyBoard.xcodeproj/project.pbxproj +++ b/keyBoard.xcodeproj/project.pbxproj @@ -36,7 +36,6 @@ 0459D1B42EBA284C00F2D189 /* KBSkinCenterVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 0459D1B32EBA284C00F2D189 /* KBSkinCenterVC.m */; }; 0459D1B72EBA287900F2D189 /* KBSkinManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 0459D1B62EBA287900F2D189 /* KBSkinManager.m */; }; 0459D1B82EBA287900F2D189 /* KBSkinManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 0459D1B62EBA287900F2D189 /* KBSkinManager.m */; }; - 046131112ECF3A6E00A6FADF /* fense.zip in Resources */ = {isa = PBXBuildFile; fileRef = 046131102ECF3A6E00A6FADF /* fense.zip */; }; 046131142ECF454500A6FADF /* KBKeyPreviewView.m in Sources */ = {isa = PBXBuildFile; fileRef = 046131132ECF454500A6FADF /* KBKeyPreviewView.m */; }; 0477BDF02EBB76E30055D639 /* HomeSheetVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 0477BDEF2EBB76E30055D639 /* HomeSheetVC.m */; }; 0477BDF32EBB7B850055D639 /* KBDirectionIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0477BDF22EBB7B850055D639 /* KBDirectionIndicatorView.m */; }; @@ -53,6 +52,7 @@ 04791F982ED49CE7004E8522 /* KBFont.m in Sources */ = {isa = PBXBuildFile; fileRef = 04791F972ED49CE7004E8522 /* KBFont.m */; }; 04791F992ED49CE7004E8522 /* KBFont.m in Sources */ = {isa = PBXBuildFile; fileRef = 04791F972ED49CE7004E8522 /* KBFont.m */; }; 04791FF72ED5B985004E8522 /* Christmas.zip in Resources */ = {isa = PBXBuildFile; fileRef = 04791FF62ED5B985004E8522 /* Christmas.zip */; }; + 04791FFB2ED5EAB8004E8522 /* fense.zip in Resources */ = {isa = PBXBuildFile; fileRef = 04791FFA2ED5EAB8004E8522 /* fense.zip */; }; 047C650D2EBC8A840035E841 /* KBPanModalView.m in Sources */ = {isa = PBXBuildFile; fileRef = 047C650C2EBC8A840035E841 /* KBPanModalView.m */; }; 047C65102EBCA8DD0035E841 /* HomeRankContentVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 047C650F2EBCA8DD0035E841 /* HomeRankContentVC.m */; }; 047C65502EBCBA9E0035E841 /* KBShopVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 047C654F2EBCBA9E0035E841 /* KBShopVC.m */; }; @@ -236,7 +236,6 @@ 0459D1B32EBA284C00F2D189 /* KBSkinCenterVC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBSkinCenterVC.m; sourceTree = ""; }; 0459D1B52EBA287900F2D189 /* KBSkinManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBSkinManager.h; sourceTree = ""; }; 0459D1B62EBA287900F2D189 /* KBSkinManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBSkinManager.m; sourceTree = ""; }; - 046131102ECF3A6E00A6FADF /* fense.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = fense.zip; sourceTree = ""; }; 046131122ECF454500A6FADF /* KBKeyPreviewView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBKeyPreviewView.h; sourceTree = ""; }; 046131132ECF454500A6FADF /* KBKeyPreviewView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBKeyPreviewView.m; sourceTree = ""; }; 0477BDEE2EBB76E30055D639 /* HomeSheetVC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeSheetVC.h; sourceTree = ""; }; @@ -264,6 +263,7 @@ 04791F962ED49CE7004E8522 /* KBFont.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBFont.h; sourceTree = ""; }; 04791F972ED49CE7004E8522 /* KBFont.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBFont.m; sourceTree = ""; }; 04791FF62ED5B985004E8522 /* Christmas.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = Christmas.zip; sourceTree = ""; }; + 04791FFA2ED5EAB8004E8522 /* fense.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = fense.zip; sourceTree = ""; }; 047C650B2EBC8A840035E841 /* KBPanModalView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBPanModalView.h; sourceTree = ""; }; 047C650C2EBC8A840035E841 /* KBPanModalView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBPanModalView.m; sourceTree = ""; }; 047C650E2EBCA8DD0035E841 /* HomeRankContentVC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeRankContentVC.h; sourceTree = ""; }; @@ -500,7 +500,7 @@ children = ( 041007D12ECE012000D203BB /* KBSkinIconMap.strings */, 041007D32ECE012500D203BB /* 002.zip */, - 046131102ECF3A6E00A6FADF /* fense.zip */, + 04791FFA2ED5EAB8004E8522 /* fense.zip */, 04791FF62ED5B985004E8522 /* Christmas.zip */, ); path = Resource; @@ -1450,9 +1450,9 @@ buildActionMask = 2147483647; files = ( 04A9FE202EB893F10020DB6D /* Localizable.strings in Resources */, - 046131112ECF3A6E00A6FADF /* fense.zip in Resources */, 041007D42ECE012500D203BB /* 002.zip in Resources */, 041007D22ECE012000D203BB /* KBSkinIconMap.strings in Resources */, + 04791FFB2ED5EAB8004E8522 /* fense.zip in Resources */, 04791FF72ED5B985004E8522 /* Christmas.zip in Resources */, 04286A0B2ECD88B400CE730C /* KeyboardAssets.xcassets in Resources */, ); diff --git a/keyBoard.xcodeproj/xcshareddata/xcschemes/keyBoard.xcscheme b/keyBoard.xcodeproj/xcshareddata/xcschemes/keyBoard.xcscheme index c1f01a8..a49a625 100644 --- a/keyBoard.xcodeproj/xcshareddata/xcschemes/keyBoard.xcscheme +++ b/keyBoard.xcodeproj/xcshareddata/xcschemes/keyBoard.xcscheme @@ -65,7 +65,7 @@ + isEnabled = "NO"> diff --git a/keyBoard/Class/Home/VC/FunctionTest/KBSkinCenterVC.m b/keyBoard/Class/Home/VC/FunctionTest/KBSkinCenterVC.m index 47eca11..7fa1fcf 100644 --- a/keyBoard/Class/Home/VC/FunctionTest/KBSkinCenterVC.m +++ b/keyBoard/Class/Home/VC/FunctionTest/KBSkinCenterVC.m @@ -49,10 +49,10 @@ self.view.backgroundColor = [UIColor whiteColor]; self.skins = @[ @{ - @"id": @"local002", - @"name": KBLocalized(@"本地002皮肤"), + @"id": @"local本地", + @"name": KBLocalized(@"粉色皮肤"), // 关键:zip_url 写成 bundle:// 前缀 + 文件名 - @"zip_url": @"bundle://002.zip", + @"zip_url": @"bundle://fense.zip", // 颜色你可以先随便写一套,或者继承默认 @"background": @"#F5FFE8", @@ -66,7 +66,7 @@ @"id": @"remote002", @"name": KBLocalized(@"远程皮肤"), // 关键:zip_url 写成 bundle:// 前缀 + 文件名 - @"zip_url": @"https://raw.githubusercontent.com/CoderST/XDCouponAlertView/master/Christmas.zip", + @"zip_url": @"http://gx.zhukeping.com/download/Christmas.zip", // // 颜色你可以先随便写一套,或者继承默认 // @"background": @"#F5FFE8", @@ -75,21 +75,7 @@ // @"key_highlight": @"#D9F4C4", // @"accent": @"#A4D68A" // 不写 key_icons,代码会自动用本地那份映射表 - }, - @{ - @"id": @"圣诞001", - @"name": KBLocalized(@"本地圣诞皮肤"), - // 关键:zip_url 写成 bundle:// 前缀 + 文件名 - @"zip_url": @"bundle://Christmas.zip", - - // 颜色你可以先随便写一套,或者继承默认 - @"background": @"#F5FFE8", - @"key_bg": @"#FFFFFF", - @"key_text": @"#4A4A4A", - @"key_highlight": @"#D9F4C4", - @"accent": @"#A4D68A" - // 不写 key_icons,代码会自动用本地那份映射表 - }, + } ]; self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, KB_NAV_TOTAL_HEIGHT, KB_SCREEN_WIDTH, KB_SCREEN_HEIGHT - KB_NAV_TOTAL_HEIGHT) style:UITableViewStyleInsetGrouped]; @@ -120,6 +106,13 @@ inset.bottom += 44 + 24; // 按钮高度 + 上下间距 self.tableView.contentInset = inset; self.tableView.scrollIndicatorInsets = inset; + + [[KBNetworkManager shared] GET:@"https://www.apple.com" + parameters:nil + headers:nil + completion:^(id jsonOrData, NSURLResponse *response, NSError *error) { + NSLog(@"[Test] apple.com finished, error = %@", error); + }]; } #pragma mark - UITableView @@ -145,10 +138,14 @@ NSDictionary *skin = self.skins[idx]; if (!skin) return; if (idx == 0) { - [[KBSkinService shared] applySkinWithJSON:skin - fromViewController:self - mode:KBSkinSourceModeLocalBundleZip - completion:nil]; +// NSString *title = (indexPath.item < self.dataSource.count) ? self.dataSource[indexPath.item] : KBLocalized(@"专属皮肤002"); + // 将需求固定到 002.zip,本地写死皮肤 id,便于键盘扩展识别并解压。 + static NSString * const kKBBundleSkinId002 = @"bundle_skin_fense"; + [KBSkinInstallBridge publishBundleSkinRequestWithId:kKBBundleSkinId002 + name:@"" ?: kKBBundleSkinId002 + zipName:@"fense.zip" + iconShortNames:nil]; + [KBHUD showInfo:KBLocalized(@"已通知键盘解压,切换到自定义键盘即可生效")]; }else if (idx == 1){ [[KBSkinService shared] applySkinWithJSON:skin fromViewController:self diff --git a/keyBoard/Class/Network/KBNetworkManager.m b/keyBoard/Class/Network/KBNetworkManager.m index e814bcb..d15f189 100644 --- a/keyBoard/Class/Network/KBNetworkManager.m +++ b/keyBoard/Class/Network/KBNetworkManager.m @@ -50,6 +50,7 @@ NSErrorDomain const KBNetworkErrorDomain = @"com.company.keyboard.network"; parameters:(NSDictionary *)parameters headers:(NSDictionary *)headers completion:(KBNetworkCompletion)completion { + NSLog(@"[KBNetworkManager] GET called, enabled=%d, path=%@", self.isEnabled, path); if (![self ensureEnabled:completion]) return nil; NSString *urlString = [self buildURLStringWithPath:path]; if (!urlString) { [self fail:KBNetworkErrorInvalidURL completion:completion]; return nil; } @@ -144,9 +145,11 @@ NSErrorDomain const KBNetworkErrorDomain = @"com.company.keyboard.network"; } - (NSURLSessionDataTask *)startAFTaskWithRequest:(NSURLRequest *)req completion:(KBNetworkCompletion)completion { + NSLog(@"[KBNetworkManager] startAFTaskWithRequest: %@", req.URL.absoluteString); // 响应先用原始数据返回,再按 Content-Type 解析 JSON(与原实现一致) self.manager.responseSerializer = [AFHTTPResponseSerializer serializer]; NSURLSessionDataTask *task = [self.manager dataTaskWithRequest:req uploadProgress:nil downloadProgress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { + NSLog(@"[KBNetworkManager] task finished, error = %@", error); // AFN 默认对非 2xx 的状态码返回 error;这里先日志,再直接回调上层 if (error) { #if DEBUG diff --git a/keyBoard/Class/Resource/KBSkinIconMap.strings b/keyBoard/Class/Resource/KBSkinIconMap.strings index b750723..8ea5b6e 100644 --- a/keyBoard/Class/Resource/KBSkinIconMap.strings +++ b/keyBoard/Class/Resource/KBSkinIconMap.strings @@ -214,6 +214,8 @@ "sym_lt" = "key_lt"; /* '>' */ "sym_gt" = "key_gt"; +/* '¥' */ +"sym_money" = "key_money"; /* '€' */ "sym_euro" = "key_euro"; /* '£' */