下面的方法可以将 sysctl hw.model 获取的苹果电脑硬件型号转换为容易看懂的形式。

1 复制下面的代码,将其保存为Macintosh.dict:

 

  1. {
  2.     "ADP2,1" = "Developer Transition Kit";
  3.     "iMac,1" = iMac;
  4.     "iMac4,1" = "iMac (Core Duo)";
  5.     "iMac5,1" = "iMac (Core 2 Duo)";
  6.     "iMac6,1" = "iMac (24-inch Core 2 Duo)";
  7.     "M43ADP1,1"  = "Development Mac Pro";
  8.     "MacBook1,1" = "MacBook (Core Duo)";
  9.     "MacBook2,1" = "MacBook (Core 2 Duo)";
  10.     "MacBook3,1" = "MacBook (Core 2 Duo)";
  11.     "MacBook4,1" = "MacBook (Early 2008)";
  12.     "MacBookAir1,1" = "MacBook Air";
  13.     "MacBookPro1,1" = "MacBook Pro (15-inch Core Duo)";
  14.     "MacBookPro1,2" = "MacBook Pro (17-inch Core Duo)";
  15.     "MacBookPro2,1" = "MacBook Pro (17-inch Core 2 Duo)";
  16.     "MacBookPro2,2" = "MacBook Pro (15-inch Core 2 Duo)";
  17.     "MacBookPro3,1" = "MacBook Pro (15-inch or 17-inch LED, Core 2 Duo)";
  18.     "MacBookPro4,1" = "MacBook Pro (15-inch or 17-inch LED, Early 2008)";
  19.     "Macmini1,1" = "Mac mini (Core Duo/Solo)";
  20.     "MacPro1,1" = "Mac Pro (Quad Xeon)";
  21.     "MacPro2,1" = "Mac Pro (Octal Xeon)";
  22.     "MacPro3,1" = "Mac Pro (Early 2008)";
  23.     "PowerBook1,1" = "PowerBook G3";
  24.     "PowerBook2,1" = iBook;
  25.     "PowerBook2,2" = "iBook (FireWire)";
  26.     "PowerBook3,1" = "PowerBook G3 (FireWire)";
  27.     "PowerBook3,2" = "PowerBook G4";
  28.     "PowerBook3,3" = "PowerBook G4 (Gigabit Ethernet)";
  29.     "PowerBook3,4" = "PowerBook G4 (DVI)";
  30.     "PowerBook3,5" = "PowerBook G4 (867, 1 GHz)";
  31.     "PowerBook4,1" = "iBook G3";
  32.     "PowerBook4,2" = "iBook G3";
  33.     "PowerBook4,3" = "iBook G3";
  34.     "PowerBook5,1" = "PowerBook G4 (17-inch)";
  35.     "PowerBook5,2" = "PowerBook G4 (15-inch FW800)";
  36.     "PowerBook5,3" = "PowerBook G4 (17-inch 1.33 GHz)";
  37.     "PowerBook5,4" = "PowerBook G4 (15-inch 1.5/1.33 GHz)";
  38.     "PowerBook5,5" = "PowerBook G4 (17-inch 1.5 GHz)";
  39.     "PowerBook5,6" = "PowerBook G4 (15-inch 1.67/1.5 GHz)";
  40.     "PowerBook5,7" = "PowerBook G4 (17-inch 1.67 GHz)";
  41.     "PowerBook5,8" = "PowerBook G4 (Double-Layer SD, 15-inch)";
  42.     "PowerBook5,9" = "PowerBook G4 (Double-Layer SD, 17-inch)";
  43.     "PowerBook6,1" = "PowerBook G4 (12-inch)";
  44.     "PowerBook6,2" = "PowerBook G4 (12-inch DVI)";
  45.     "PowerBook6,3" = "iBook G4";
  46.     "PowerBook6,4" = "PowerBook G4 (12-inch 1.33 GHz)";
  47.     "PowerBook6,5" = "iBook G4";
  48.     "PowerBook6,7" = "iBook G4";
  49.     "PowerBook6,8" = "PowerBook G4 (12-inch 1.5 GHz)";
  50.     "PowerMac1,1" = "Power Macintosh G3 (B&W)";
  51.     "PowerMac1,2" = "Power Macintosh G4 (PCI-Graphics)";
  52.     "PowerMac10,1" = "Mac mini";
  53.     "PowerMac10,2" = "Mac mini";
  54.     "PowerMac11,2" = "Power Macintosh G5 (PCIe)";
  55.     "PowerMac12,1" = "iMac G5 (iSight)";
  56.     "PowerMac2,1" = "iMac (Slot-Loading)";
  57.     "PowerMac2,2" = "iMac (2000)";
  58.     "PowerMac3,1" = "Power Macintosh G4 (AGP-Graphics)";
  59.     "PowerMac3,2" = "Power Macintosh G4 (AGP-Graphics)";
  60.     "PowerMac3,3" = "Power Macintosh G4 (Gigabit Ethernet)";
  61.     "PowerMac3,4" = "Power Macintosh G4 (Digital Audio)";
  62.     "PowerMac3,5" = "Power Macintosh G4 (Quick Silver)";
  63.     "PowerMac3,6" = "Power Macintosh G4 (Mirrored Drive Doors)";
  64.     "PowerMac4,1" = "iMac (2001)";
  65.     "PowerMac4,2" = "iMac (Flat Panel)";
  66.     "PowerMac4,4" = "eMac G3";
  67.     "PowerMac4,5" = "iMac (17-inch Flat Panel)";
  68.     "PowerMac5,1" = "Power Macintosh G4 Cube";
  69.     "PowerMac6,1" = "iMac (USB 2.0)";
  70.     "PowerMac6,3" = "iMac (20-inch Flat Panel)";
  71.     "PowerMac6,4" = "eMac (USB 2.0)";
  72.     "PowerMac7,2" = "Power Macintosh G5";
  73.     "PowerMac7,3" = "Power Macintosh G5";
  74.     "PowerMac8,1" = "iMac G5";
  75.     "PowerMac8,2" = "iMac G5 (Ambient Light Sensor)";
  76.     "PowerMac9,1" = "Power Macintosh G5 (Late 2004)";
  77.     "RackMac1,1" = "Xserve G4";
  78.     "RackMac1,2" = "Xserve G4 (Slot-Loading)";
  79.     "RackMac3,1" = "Xserve G5";
  80.     "Xserve1,1" = "Xserve Xeon";
  81.     "Xserve2,1" = "Xserve Xeon";
  82. }

 

然后在程序中加入如下代码即可:

  1. #import <sys /sysctl.h>
  2.  
  3. + (NSString *)hardwareModel
  4. {
  5.     static NSString *hardwareModel = nil;
  6.     if (!hardwareModel) {
  7.         char buffer[128];
  8.         size_t length = sizeof(buffer);
  9.         if (sysctlbyname("hw.model", &buffer, &length, NULL, 0) == 0) {
  10.             hardwareModel = [[NSString allocWithZone:NULL] initWithCString:buffer encoding:NSASCIIStringEncoding];
  11.         }
  12.         if (!hardwareModel || [hardwareModel length] == 0) {
  13.             hardwareModel = @"Unknown";
  14.         }
  15.     }
  16.     return hardwareModel;    
  17. }
  18.  
  19. + (NSString *)computerModel
  20. {
  21.     static NSString *computerModel = nil;
  22.     if (!computerModel) {
  23.         NSString *path, *hardwareModel = [self hardwareModel];
  24.         if ((path = [[NSBundle mainBundle] pathForResource:@"Macintosh" ofType:@"dict"])) {
  25.             computerModel = [[[NSDictionary dictionaryWithContentsOfFile:path] objectForKey:hardwareModel] copy];
  26.         }
  27.         if (!computerModel) {
  28.             char buffer[128];
  29.             size_t length = sizeof(buffer);
  30.             if (sysctlbyname("hw.machine", &buffer, &length, NULL, 0) == 0) {
  31.                 computerModel = [[NSString allocWithZone:NULL] initWithCString:buffer encoding:NSASCIIStringEncoding];
  32.             }
  33.         }
  34.         if (!computerModel || [computerModel length] == 0) {
  35.             computerModel = [[NSString allocWithZone:NULL] initWithFormat:@"%@ computer model", hardwareModel];
  36.         }
  37.     }
  38.     return computerModel;
  39. }
  40. </sys>

最新的代码在这里