苹果在线 [设为首页]
[加入收藏]
[订阅RSS]
首页新闻软件应用iPadiOS iPhone iPad软件下载iPhone苹果专卖店苹果软件下载中心苹果搜索苹果维修苹果在线官方微博北京企业宣传片广告片制作公司苹果论坛BBS

获得Mac OS X系统版本号的几种方法
2010-05-27 17:16:25
分享给苹果粉们

由于Mac OS X的系统版本(主要指major version)之间某些方面存在一些差异,例如:
一些API在较低版本系统中可以使用,但是到了较高版本系统中变成了deprecated;
一些API仅在较高版本的系统上才存在,如果程序要支持较低的系统版本,则需要通过别的途径来实现同样功能,等等。

因此,在程序中判断系统版本,并根据不同的分支进行处理在一些时候是必要的。

我总结了一下在代码中判断系统版本的几种方法,希望能抛砖引玉,大家一起集思广益。

1.使用Gestalt函数,可以获得系统版本的16进制数值:
  1. /* 方法1:使用Gestalt */
  2. #include <stdio.h>
  3. #include <CoreServices/CoreServices.h>
  4.  
  5. int main (int argc, const char * argv[]) {
  6.  
  7.     UInt32 systemVersion;
  8.    
  9.     Gestalt(gestaltSystemVersion, &systemVersion);
  10.    
  11.     printf("The system version is 0x%x", systemVersion);
  12.  
  13.     return 0;
  14. }
复制代码
2. 使用NSProcessInfo,可以获得系统的版本号和build版本号。
(根据我的观察,这里的版本号和build版本号是从/System/Library/CoreServices /SystemVersion.plist中读出来的,如果自行手动修改SystemVersion.plist,那么这里得到的结果也会随之改变)
  1. /* 方法2:NSProcessInfo */
  2. #import <Foundation/Foundation.h>
  3.  
  4. int main (int argc, const char * argv[]) {
  5.     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
  6.  
  7.     NSString *versionString = [[NSProcessInfo processInfo] operatingSystemVersionString];
  8.    
  9.     NSLog (@"System version: %@",versionString);
  10.    
  11.     [pool release];
  12.     return 0;
  13. }
复制代码
3. 在AvailabilityMacros.h中,有如下定义:
  1. /*
  2. * Set up standard Mac OS X versions
  3. */
  4. #define MAC_OS_X_VERSION_10_0 1000
  5. #define MAC_OS_X_VERSION_10_1 1010
  6. #define MAC_OS_X_VERSION_10_2 1020
  7. #define MAC_OS_X_VERSION_10_3 1030
  8. #define MAC_OS_X_VERSION_10_4 1040
复制代码
我们可以利用这些宏定义来达到针对不同系统major version进行不同处理的目的:
  1. /* 方法3:使用宏定义 */
  2. #import <AvailabilityMacros.h>
  3.  
  4. int main (int argc, const char * argv[]) {
  5.     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
  6.  
  7. #if MAC_OS_X_VERSION_MIN_REQUIRED == MAC_OS_X_VERSION_10_4
  8.         printf("The system version is Mac OS X 10.4.x ");
  9. #else
  10.     printf("The system version is not Mac OS X 10.4.x ");
  11. #endif
  12.    
  13.     [pool release];
  14.     return 0;
  15. }
复制代码
4. 通过sysctl函数获得内核-xnu的版本号,这种方法不能直观的得到system version,
不过在某些情况下可能也用的上。
  1. /* 方法4:使用sysctl获得内核版本号 */
  2. #import <Foundation/Foundation.h>
  3. #import <sys/sysctl.h>
  4.  
  5. int main (int argc, const char * argv[]) {
  6.     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
  7.  
  8.     int mib[2];
  9.     size_t len = 0;
  10.     char *kernelVersion = NULL;
  11.  
  12.     mib[0] = CTL_KERN;
  13.     mib[1] = KERN_OSRELEASE;
  14.     sysctl(mib, 2, NULL, &len, NULL, 0);
  15.     kernelVersion = malloc(len * sizeof(char));
  16.     sysctl(mib, 2, kernelVersion, &len, NULL, 0);
  17.  
  18.     printf("The kernel version is %s ", kernelVersion);
  19.    
  20.     [pool release];
  21.     return 0;
  22. }

苹果软件硬件应用教程

相关热词搜索:版本 方法 系统

上一篇:苹果更新 27寸iMac 最新固件 解决CPU利用率问题
下一篇:Apple Magic Trackpad for Mac OS X / Windows (Boot Camp)驱动开放下载

站内搜索
填写您的邮件地址,订阅我们的精彩内容:
百度站内搜索
我要投稿
 

常用苹果软件下载
qq movie software bt adult
苹果版QQ MAC优化大师 FireFox浏览器 解压软件 苹果BT下载工具 苹果刻录工具
ipod movies photo tools speed movies
iPod+iTunes 视频播放软件 苹果看图软件 PP浏览器 iGetter下载加速 QuickTime
北京苹果专卖店
企业宣传片广告片制作公司上广传媒
企业宣传片>>
企业宣传片摄制
公司专题片制作
产品教学片拍摄
展会宣传片制作
高清宣传片制作
企业形象宣传片
公司年会晚会片
城市宣传片>>
城市宣传片拍摄
旅游宣传片制作
规划宣传片拍摄
地产宣传片摄制
影视后期大制作
电视频道包装
栏目包装策划
广告片>>
电视广告片摄制
公司广告片摄制
广告片策划制作
医药广告片制作
TVC 形象广告片
影视广告片下载
播客闪客广告片
三维动画>>
三维动画制作
建筑动画制作
投标动画制作
全景仿真制作
虚拟现实动画
Flash2D动画
房地产3D动画
摄像摄影>>
最专业会议摄像摄影
央视摄像师摄像设备
年会摄像年会宣传片
高清宣传片制作公司
北京广告片制作公司
企业专题片制作公司
北京宣传片制作公司
年终总结片>>
年会视频制作
公司年会视频
年会开场视频
开场视频制作
专业年会拍摄
年终总结汇报
央视晚会拍摄
微电影拍摄制作>>
微电影广告植入
微电影策划拍摄
微电影投资制作
微电影作品下载
立体3D拍摄制作
Flash动画制作
招聘影视精英