如何获取Mac操作系统的实际名称而不是版本?

问题描述 投票:0回答:3

我可以使用下面给出的代码获取 OSX 的版本,但我想要的是操作系统的名称(使用 Objective C)。

提前致谢!

NSOperatingSystemVersion version = [[NSProcessInfo processInfo] operatingSystemVersion];

NSString* major = [NSString stringWithFormat:@"%d", version.majorVersion];


NSString* minor = [NSString stringWithFormat:@"%d", version.minorVersion];


NSString* patch = [NSString stringWithFormat:@"%d", version.patchVersion];
objective-c c xcode macos cocoa
3个回答
3
投票

据我所知,没有任何 API 可以生成当前操作系统版本的产品名称。即使在系统位置中对产品名称进行

grep
ping 也只能产生很少的结果,而且大多数结果都在私有框架中。我发现的唯一有希望的非私人匹配是在
Setup Assistant.app
中,并且需要可怕的拼凑才能从较长的字符串中提取:

NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:@"/System/Library/CoreServices/Setup Assistant.app/Contents/Resources/en.lproj/Localizable.strings"];
NSString *productName = [dict objectForKey:@"INSTALLATION_COMPLETE"];
if (productName) {
    NSRange r = [productName rangeOfString:@" has been"];
    if (r.location != NSNotFound) {
        productName = [productName substringToIndex:r.location];
    } else {
        productName = nil;
    }
}

这恰好适用于 Yosemite 和 El Capitan,并生成“OS X Yosemite”和“OS X El Capitan”。但即使有这两个版本,其拙劣的本质也暴露无遗。 El Capitan 字符串包含不可破坏的空格...

除此之外(或使用其他不打算以这种方式使用的文件的类似拼凑),当然可以获取数字版本并将其与已知产品名称列表进行匹配,这将是我推荐的解决方案,也许可以使用上面的拼凑作为后备。


0
投票

愚蠢,但这应该可行。

public extension ProcessInfo {
func osName() -> String? {
    let version = self.operatingSystemVersion
    switch version.majorVersion {
        case 14: return "Sonoma"
        case 13: return "Ventura"
        case 12: return "Monterey"
        case 11: return "Big Sur"
        case 10: break
        default: return "macOS \(version.majorVersion)"
    }
    switch version.minorVersion {
        case 15: return "Catalina"
        case 14: return "Mojave"
        case 13: return "High Sierra"
        case 12: return "Sierra"
        case 11: return "El Capitan"
        case 10: return "Yosemite"
        case 9: return "Mavericks"
        case 8: return "Mountain Lion"
        case 7: return "Lion"
        case 6: return "Snow Leopard"
        case 5: return "Leopard"
        case 4: return "Tiger"
        case 3: return "Panther"
        case 2: return "Jaguar"
        case 1: return "Puma"
        case 0: return "Cheetah"
        default: return nil
    }
}

-3
投票

为了多一个选项来找出 OSX 名称,我在下面提供了一种解决方法:

//此函数将返回操作系统名称

-(NSString *)getOSName{     

    // get major version 
    NSString* majorVersion = [self getMajorVersion];
    // get minor version
    NSString* minorVersion= [self getMinorVersion];

    NSString* OSName = @"";

    // figure out the name using versions
     if([minorVersion isEqualTo:@"11"])
{
    OSName = @"El Capitan";
}
else if([minorVersion isEqualTo:@"10"])
{
    OSName = @"Yosemite";
}
else if([minorVersion isEqualTo:@"9"])
{
    OSName = @"Mavericks";
}
else if([minorVersion isEqualTo:@"8"])
{
    OSName = @"Mountain Lion";
}
else if([minorVersion isEqualTo:@"7"])
{
    OSName = @"Lion";
}
else if([minorVersion isEqualTo:@"6"])
{
    OSName = @"Snow Leopard";
}
else if([minorVersion isEqualTo:@"5"])
{
    OSName = @"Leopard";
}
else if([minorVersion isEqualTo:@"4"])
{
    OSName = @"Tiger";
}
else if([minorVersion isEqualTo:@"3"])
{
    OSName = @"Panther";
}
else if([minorVersion isEqualTo:@"2"])
{
    OSName = @"Jaguar";
}
else if([minorVersion isEqualTo:@"1"])
{
    OSName = @"Puma";
}
else if([minorVersion isEqualTo:@"0"])
{
    OSName = @"Kodiak";
}



    return OSName;
}

-(NSString*)getMajorVersion{

NSOperatingSystemVersion version = [[NSProcessInfo processInfo] operatingSystemVersion];

NSString* ver = [NSString stringWithFormat:@"%d", version.majorVersion];

return ver;

}

-(NSString*)getMinorVersion{

NSOperatingSystemVersion version = [[NSProcessInfo processInfo] operatingSystemVersion];

NSString* ver = [NSString stringWithFormat:@"%d", version.minorVersion];

return ver;

}

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.