Tap*_*rms 6 macos cocoa airdrop multipeer-connectivity
我知道你可以使用以下代码从cocoa获取当前机器的图标:
NSImage *machineIcon = [NSImage imageNamed:NSImageNameComputer];
Run Code Online (Sandbox Code Playgroud)
但是只给出型号时是否可以获得图标?如MacBookPro11,3?
我需要这个的原因是因为我正在使用MultiPeer Connectivity我想要连接的网络浏览设备.但我想在自定义浏览器视图中显示这些设备中的图标.
我知道OS X几乎包含以下文件夹中所有设备的每个图标:
/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/
Run Code Online (Sandbox Code Playgroud)
但我想知道如何从我的应用程序中访问它们:
我想过使用discoveryInfofrom MCNearbyServiceAdvertiser来传输设备广告的图标,但你无法使用传输那么多的数据discoveryInfo.它仅适用于少量文本.所以我决定只传输机器的型号.我希望将机器的型号解析为另一侧的图标.有点像AirDrop它是怎么回事.
手动将模型标识符映射到图标名称,然后使用eg
[[NSWorkspace sharedWorkspace] iconForFileType:@"com.apple.macbookair"];
Run Code Online (Sandbox Code Playgroud)
要么
[NSImage imageNamed:NSImageNameComputer]
Run Code Online (Sandbox Code Playgroud)
如果你需要比imageNamed更高的分辨率提供使用
OSType code = UTGetOSTypeFromString((CFStringRef)CFSTR("root"));
NSImage *computer = [[NSWorkspace sharedWorkspace] iconForFileType:NSFileTypeForHFSTypeCode(code)];
Run Code Online (Sandbox Code Playgroud)
其中"root"字符串来自IconsCore.h头文件(kComputer).
复制此plist以获取标识符(不要从app sandbox访问它)
/System/Library/PrivateFrameworks/ServerInformation.framework/Versions/A/Resources/English.lproj/SIMachineAttributes.plist
链接私有框架SPSupport.Framework与您的二进制添加FrameWork搜索路径变量
$(SYSTEM_LIBRARY_DIR)/ PrivateFrameworks
将以下界面添加到项目中
#import <Cocoa/Cocoa.h>
@interface SPDocument : NSDocument
- (NSImage *)modelIcon;
- (id)computerName;
- (id)serialNumber;
- (id)modelName;
@end
Run Code Online (Sandbox Code Playgroud)
致电您的代码:
SPDocument *document = [[SPDocument alloc] init];
NSImage *icon = [document modelIcon];
Run Code Online (Sandbox Code Playgroud)
通过这个私有函数找出CoreFoundation舞蹈(这段代码是插图,找到正确的类型,params的数量并正确释放)
Run Code Online (Sandbox Code Playgroud)output = _LSCreateDeviceTypeIdentifierWithModelCode((CFStringRef)@"MacBookPro6,2"); NSImage *image = [[NSWorkspace sharedWorkspace] iconForFileType: output];
编辑: 我刚刚意识到您需要选项号1,3(给定型号的图标).GL打这个.
EDIT2 方法3补充说.更改了订单并在数字1下添加.
EDIT3 彩色版本的新UTI com.apple.macbook-retina-silver com.apple.device-model-code MacBook8,1 @ ECOLOR = 225,225,223
com.apple.macbook-retina-gold com.apple.device-model-code MacBook8,1 @ ECOLOR = 235,215,191
com.apple.macbook-retina-space-grey com.apple.device-model-code MacBook8,1 @ ECOLOR = 155,158,159 MacBook8,1 @ ECOLOR = 157,157,160
NSImage*image = [[NSWorkspace sharedWorkspace] iconForFileType:@"com.apple.macbook-retina-gold"];
如何获取型号/标识符(sysctl hw.model被system_profiler替换)?
NSPipe *outputPipe = [NSPipe pipe];
NSTask *task = [[NSTask alloc] init];
[task setLaunchPath:@"/usr/sbin/system_profiler"];
[task setArguments:@[@"SPHardwareDataType"]];
[task setStandardOutput:outputPipe];
[task launch];
[task waitUntilExit];
NSData *outputData = [[outputPipe fileHandleForReading] readDataToEndOfFile];
NSString *hardware = [[NSString alloc] initWithData:outputData encoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)
并解析模型标识符或属性列表序列化
| 归档时间: |
|
| 查看次数: |
921 次 |
| 最近记录: |