1
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user