riverak 2021-11-26 13:18 采纳率: 100%
浏览 12
已结题

cartool 使用报错 ,替换代码也没用。Mac OS10.15.7

cartool 使用报错 ,替换代码也没用。Mac OS10.15.7

在本站找了替换代码的方案,替换后还是报错。

求一个Mac OS10.15.7系统能用的 cartool

img


//
//  main.m
//  cartool
//
//  Created by Steven Troughton-Smith on 14/07/2013.
//  Copyright (c) 2013 High Caffeine Content. All rights reserved.
//

#import <Foundation/Foundation.h>

typedef enum _kCoreThemeIdiom {

kCoreThemeIdiomUniversal,

kCoreThemeIdiomPhone,

kCoreThemeIdiomPad,

kCoreThemeIdiomTV,

kCoreThemeIdiomCar,

kCoreThemeIdiomWatch,

kCoreThemeIdiomMarketing
} kCoreThemeIdiom;

typedef NS_ENUM(NSInteger, UIUserInterfaceSizeClass) {

UIUserInterfaceSizeClassUnspecified = 0,

UIUserInterfaceSizeClassCompact 
= 1,

UIUserInterfaceSizeClassRegular 
= 2,
};

@interface CUICommonAssetStorage : NSObject

-(NSArray *)allAssetKeys;
-(NSArray *)allRenditionNames;

-(id)initWithPath:(NSString *)p;

-(NSString *)versionString;

@end

@interface CUINamedImage : NSObject

@property(readonly) CGSize size;
@property(readonly) CGFloat scale;
@property(readonly) kCoreThemeIdiom idiom;
@property(readonly) UIUserInterfaceSizeClass sizeClassHorizontal;
@property(readonly) UIUserInterfaceSizeClass sizeClassVertical;

-(CGImageRef)image;

@end

@interface CUIRenditionKey : NSObject
@end

@interface CUIThemeFacet : NSObject

+(CUIThemeFacet *)themeWithContentsOfURL:(NSURL *)u error:(NSError **)e;

@end

@interface CUICatalog : NSObject

@property(readonly) bool isVectorBased;
-(id)initWithURL:(NSURL *)URL error:(NSError **)error;
-(id)initWithName:(NSString *)n fromBundle:(NSBundle *)b;
-(id)allKeys;
-(id)allImageNames;
-(CUINamedImage *)imageWithName:(NSString *)n scaleFactor:(CGFloat)s;
-(CUINamedImage *)imageWithName:(NSString *)n scaleFactor:(CGFloat)s deviceIdiom:(int)idiom;
-(NSArray *)imagesWithName:(NSString *)n;

@end



void CGImageWriteToFile(CGImageRef image, NSString *path)
{

CFURLRef url = (__bridge CFURLRef)[NSURL fileURLWithPath:path];

CGImageDestinationRef destination = CGImageDestinationCreateWithURL(url, kUTTypePNG, 1, NULL);

CGImageDestinationAddImage(destination, image, nil);



if (!CGImageDestinationFinalize(destination)) {


NSLog(@"Failed to write image to %@", path);

}



CFRelease(destination);
}

NSString *idiomSuffixForCoreThemeIdiom(kCoreThemeIdiom idiom)
{

switch (idiom) {


case kCoreThemeIdiomUniversal:



return @"";



break;


case kCoreThemeIdiomPhone:



return @"~iphone";



break;


case kCoreThemeIdiomPad:



return @"~ipad";



break;


case kCoreThemeIdiomTV:



return @"~tv";



break;


case kCoreThemeIdiomCar:



return @"~carplay";



break;


case kCoreThemeIdiomWatch:



return @"~watch";



break;


case kCoreThemeIdiomMarketing:



return @"~marketing";



break;


default:



break;

}



return @"";
}

NSString *sizeClassSuffixForSizeClass(UIUserInterfaceSizeClass sizeClass)
{

switch (sizeClass)

{


case UIUserInterfaceSizeClassCompact:



return @"C";



break;


case UIUserInterfaceSizeClassRegular:



return @"R";



break;


default:



return @"A";

}
}

NSMutableArray *getImagesArray(CUICatalog *catalog, NSString *key)
{

NSMutableArray *images = [[NSMutableArray alloc] initWithCapacity:5];


for (NSNumber *scaleFactor in @[@1, @2, @3])

{


CUINamedImage *image = [catalog imageWithName:key scaleFactor:scaleFactor.doubleValue];



if (image && image.scale == scaleFactor.floatValue) [images addObject:image];

}


return images;
}

void exportCarFileAtPath(NSString * carPath, NSString *outputDirectoryPath)
{

NSError *error = nil;



outputDirectoryPath = [outputDirectoryPath stringByExpandingTildeInPath];


//
CUIThemeFacet *facet = [CUIThemeFacet themeWithContentsOfURL:[NSURL fileURLWithPath:carPath] error:&error];
//
//
CUICatalog *catalog = [[CUICatalog alloc] init];
//
//
/* Override CUICatalog to point to a file rather than a bundle */
//
[catalog setValue:facet forKey:@"_storageRef"];



/* CUICommonAssetStorage won't link */





CUICatalog *catalog = nil;

if ([CUICatalog instancesRespondToSelector:@selector(initWithURL:error:)]) {


/* If CUICatalog has the URL API (Mojave), use it. */


catalog = [[CUICatalog alloc] initWithURL:[NSURL fileURLWithPath:carPath] error:&error];

} else {


CUIThemeFacet *facet = [CUIThemeFacet themeWithContentsOfURL:[NSURL fileURLWithPath:carPath] error:&error];


catalog = [[CUICatalog alloc] init];


/* Override CUICatalog to point to a file rather than a bundle */


[catalog setValue:facet forKey:@"_storageRef"];

}

NSCAssert(!error, @"Error attempting to open asset catalog (%@): %@", carPath, error);



CUICommonAssetStorage *storage = [[NSClassFromString(@"CUICommonAssetStorage") alloc] initWithPath:carPath];



for (NSString *key in [storage allRenditionNames])

{


printf("%s\n", [key UTF8String]);





NSArray* pathComponents = [key pathComponents];


if (pathComponents.count > 1)


{



// Create subdirectories for namespaced assets (those with names like "some/namespace/image-name")



NSArray* subdirectoryComponents = [pathComponents subarrayWithRange:NSMakeRange(0, pathComponents.count - 1)];







NSString* subdirectoryPath = [outputDirectoryPath copy];



for (NSString* pathComponent in subdirectoryComponents)



{




subdirectoryPath = [subdirectoryPath stringByAppendingPathComponent:pathComponent];



}







[[NSFileManager defaultManager] createDirectoryAtPath:subdirectoryPath
  








withIntermediateDirectories:YES
   












attributes:nil















error:&error];


}





NSMutableArray *images = getImagesArray(catalog, key);


for( CUINamedImage *image in images )


{



if( CGSizeEqualToSize(image.size, CGSizeZero) )




printf("\tnil image?\n");



else



{




CGImageRef cgImage = [image image];




NSString *idiomSuffix = idiomSuffixForCoreThemeIdiom(image.idiom);









NSString *sizeClassSuffix = @"";









if (image.sizeClassHorizontal || image.sizeClassVertical)




{





sizeClassSuffix = [NSString stringWithFormat:@"-%@x%@", sizeClassSuffixForSizeClass(image.sizeClassHorizontal), sizeClassSuffixForSizeClass(image.sizeClassVertical)];




}









NSString *scale = image.scale > 1.0 ? [NSString stringWithFormat:@"@%dx", (int)floor(image.scale)] : @"";




NSString *name = [NSString stringWithFormat:@"%@%@%@%@.png", key, idiomSuffix, sizeClassSuffix, scale];




printf("\t%s\n", [name UTF8String]);




if( outputDirectoryPath )





CGImageWriteToFile(cgImage, [outputDirectoryPath stringByAppendingPathComponent:name]);



}


}

}
}

int main(int argc, const char * argv[])
{

@autoreleasepool {





if (argc < 2)


{



printf("Usage: cartool <path to Assets.car> [outputDirectory]\n");



return -1;


}





exportCarFileAtPath([NSString stringWithUTF8String:argv[1]], argc > 2 ? [NSString stringWithUTF8String:argv[2]] : nil);

}

return 0;
}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 12月4日
    • 创建了问题 11月26日

    悬赏问题

    • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
    • ¥15 求daily translation(DT)偏差订正方法的代码
    • ¥15 js调用html页面需要隐藏某个按钮
    • ¥15 ads仿真结果在圆图上是怎么读数的
    • ¥20 Cotex M3的调试和程序执行方式是什么样的?
    • ¥20 java项目连接sqlserver时报ssl相关错误
    • ¥15 一道python难题3
    • ¥15 牛顿斯科特系数表表示
    • ¥15 arduino 步进电机
    • ¥20 程序进入HardFault_Handler