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

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