如何使用Objective-C从其他应用程序获取图标?
到目前为止,我已经尝试了这个,但它只返回null
:
NSURL *path = [NSURL URLWithString:@"/Applications/Calculator.app"];
NSLog(@"%@", path);
NSImage *image = (__bridge NSImage *)(QLThumbnailImageCreate(kCFAllocatorDefault, (__bridge CFURLRef)(path), CGSizeMake(100, 100), (__bridge CFDictionaryRef)(@{(NSString *)kQLThumbnailOptionIconModeKey: @NO})));
NSLog(@"%@", image);
答案 0 :(得分:19)
您可以使用NSWorkspace,例如
NSImage *image = [[NSWorkspace sharedWorkspace] iconForFile:path];
如果您想使用应用bundleId
而不是知道其路径,可以先执行此操作
path = [[NSWorkspace sharedWorkspace] absolutePathForAppBundleWithIdentifier:bundleIdentifier];
答案 1 :(得分:3)
我认为您正在寻找[[NSWorkspace sharedWorkspace] iconForFile:pathToFile]
答案 2 :(得分:3)
应用程序的图标文件通常在CFBundleIconFile键下的Info.plist中定义。通过获取图标文件名,您可以从bundle的Resources目录中获取此图标(path-to-anApplication / Contents / Resources /)。
要获取Info.plist内容,您可以直接在NSDictionary中加载它(使用dictionaryWithContentsOfFile :)或从应用程序的bundle对象中获取它(例如:[[NSBundle bundleWithPath:path-to-anApp] infoDictionary])
。
图标文件将是CFBundleIconFile密钥的值(即:iconFile = [infoDictionary valueForKey:@"CFBundleIconFile"]
。它的路径将是:path-to-anApplication / Contents / Resources / iconFile)。