Как получить доступ к собственным атрибутам Objective C?

В настоящее время я пишу приложение для Mac OSX на C # с использованием Mono. Я хотел бы определить версию OSX, на которой работает программа.

Я нашел константу NSAppKitVersionNumber, которая соответствует моим потребностям.

Однако я понятия не имею, как получить к нему доступ ...

Я уверен, что это возможно, поэтому мы будем очень признательны за любую вашу помощь!


person wojtuch    schedule 18.01.2013    source источник


Ответы (2)


Что-то вроде этого:

    [DllImport("/System/Library/Frameworks/CoreServices.framework/CoreServices")]
    internal static extern short Gestalt(int selector, ref int response);
    static string m_OSInfoString = null;
    static void InitOSInfoString()
    {
        //const int gestaltSystemVersion = 0x73797376;
        const int gestaltSystemVersionMajor = 0x73797331;
        const int gestaltSystemVersionMinor = 0x73797332;
        const int gestaltSystemVersionBugFix = 0x73797333;

        int major = 0;
        int minor = 0;
        int bugFix = 0;

        Gestalt(gestaltSystemVersionMajor, ref major);
        Gestalt(gestaltSystemVersionMinor, ref minor);
        Gestalt(gestaltSystemVersionBugFix, ref bugFix);

        if (major == 10 && minor == 5)
            RunningOnLeopard = true;
        else
        {
            RunningOnLeopard = false;
            if (major == 10 && minor == 7)
                RunningOnLion = true;
        }

        m_OSInfoString = string.Format("Mac OS X/{0}.{1}.{2}", major, minor, bugFix);
    }
person TrustMe    schedule 19.01.2013
comment
спасибо, ваше решение также было применимо, но я нашел один лайнер, который также решает мою проблему, см. мой комментарий под сообщением ниже - person wojtuch; 24.01.2013

В .NET для Windows у вас есть метод Environment.OSVersion. Вы можете попробовать его, чтобы увидеть, что он дает в Mac OS:

// Sample for the Environment.OSVersion property 
using System;

class Sample 
{
    public static void Main() 
    {
    Console.WriteLine();
    Console.WriteLine("OSVersion: {0}", Environment.OSVersion.ToString());
    }
}
/*
This example produces the following results:

OSVersion: Microsoft Windows NT 5.1.2600.0
*/
person ShawnW.    schedule 18.01.2013
comment
На моем Mountain Lion Environment.OSVersion возвращает Unix 12.2.0.0 - и с этим stackoverflow.com/a/11697362/183422 вы должны быть в состоянии собрать что-то воедино. - person Rolf Bjarne Kvinge; 19.01.2013
comment
Большое спасибо за подсказку, решил так: bool CanUseUserNotificationCenter = Environment.OSVersion.Version.Major >= 12; - person wojtuch; 24.01.2013