- Mac App Store セーフ
モデル識別子をアイコン名に手動でマップしてから、例を使用します
[[NSWorkspace sharedWorkspace] iconForFileType:@"com.apple.macbookair"];
また
[NSImage imageNamed:NSImageNameComputer]
imageNamed が提供するよりも高い解像度が必要な場合
OSType code = UTGetOSTypeFromString((CFStringRef)CFSTR("root"));
NSImage *computer = [[NSWorkspace sharedWorkspace] iconForFileType:NSFileTypeForHFSTypeCode(code)];
「root」文字列は、IconsCore.h ヘッダー ファイル (kComputer) からのものです。
この plist をコピーして識別子を取得します (アプリ サンドボックスからアクセスしないでください)。
/System/Library/PrivateFrameworks/ServerInformation.framework/Versions/A/Resources/English.lproj/SIMachineAttributes.plist
- Mac App Store は安全ではありません
プライベート フレームワーク SPSupport.Framework をバイナリにリンクする フレームワーク検索パス変数を追加する
$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks
次のインターフェイスをプロジェクトに追加します
#import <Cocoa/Cocoa.h>
@interface SPDocument : NSDocument
- (NSImage *)modelIcon;
- (id)computerName;
- (id)serialNumber;
- (id)modelName;
@end
コードを呼び出します。
SPDocument *document = [[SPDocument alloc] init];
NSImage *icon = [document modelIcon];
- 最も難しい方法
このプライベート関数を使用して CoreFoundation ダンスを把握します (このコードは図であり、正しい型、パラメーターの数を見つけて適切に解放します)
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-gray 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];
モデル識別子またはプロパティリストのシリアル化を解析します