【问题标题】:How to Get OSX version during boot time in a daemon programme如何在守护程序的启动期间获取 OSX 版本
【发布时间】:2014-11-12 06:25:33
【问题描述】:

由于Gestalt在10.10中被弃用,所以我使用Apple Script来确定OSX版本,实现如下:

NSAppleScript *script = [[NSAppleScript alloc] initWithSource:@"set os_version to do shell script \"sw_vers -productVersion\""];

但是这个苹果脚本在启动时失败并且守护进程崩溃了。我不能使用NSProcessInfo operatingSystemVersion 因为我正在使用 OSX SDK 10.8,现在我不想将我的代码升级到 Xcode 6。我也不能使用operatingSystemVersionString,因为根据 Apple Docs - 解析不安全。

谁能告诉我如何在启动期间使用 OSX SDK 10.810.10 上获取 OSX 版本。

我们可以通过NSTask实现吗?

【问题讨论】:

  • 那么你可以使用sw_vers使用的机制,读取/System/Library/CoreServices/SystemVersion.plist的属性列表,直接读取productVersion。
  • @petesh 启动时间也能正常工作。
  • 我看不出它是怎么做到的。你只是在读一个文件。
  • 我将 sw_vers -productVersion 与 NStask 一起使用,效果很好

标签: objective-c cocoa osx-mountain-lion osx-yosemite


【解决方案1】:

文档说:

NewGestalt()    DEPRECATED 

已弃用: 尽可能使用 NewGestaltValue。

总结: 将选择器代码添加到格式塔已识别的代码中。

讨论: NewGestalt 函数将指定的选择器代码注册到 格式塔管理器,以便在调用格式塔函数时 使用该选择器代码,指定的选择器函数是 执行。在调用 NewGestalt 之前,必须定义一个选择器 函数回调。有关说明,请参见 SelectorFunctionProcPtr 如何定义你的选择器函数。

在格式塔管理器中注册是软件的一种方式 作为系统扩展,让潜在的人知道它们的存在 他们服务的用户。

在 Mac OS X 中,选择器和替换值位于 每个上下文的基础。这意味着它们仅适用于 安装它们的应用程序或其他代码。你不能使用这个 使信息可用于另一个进程的函数。

使用 NewGestalt() 注册的格式塔选择器不能 已删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多