Записать версию SDK в двоичный файл при компиляции из командной строки (macOS) - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь определить, находится ли система в темном режиме. Я уже пытался прочитать AppleInterfaceStyle по умолчанию, то есть

    NSString *interfaceStyle = [[NSUserDefaults standardUserDefaults] stringForKey:@"AppleInterfaceStyle"];
    BOOL isDark = [@"dark" caseInsensitiveCompare:interfaceStyle] == NSOrderedSame;

, который работает большую часть времени, но имеет проблемы в режиме Auto на Catalina.

Теперь из того, что у меня есть читаем, что более надежный подход заключается в проверке effectiveAppearance из NSApplication, который выглядит следующим образом:

    NSApplication *app = [NSApplication sharedApplication];
    NSAppearance *appearance = app.effectiveAppearance;
    NSAppearanceName appearanceName = [appearance bestMatchFromAppearancesWithNames:@[NSAppearanceNameAqua, NSAppearanceNameDarkAqua]];
    BOOL isDark = [appearanceName isEqualToString:NSAppearanceNameDarkAqua];

Проблема с этим подходом состоит в том, что приложение, для которого я пишу это, вручную устанавливает appearance свойство, которое не позволяет effectiveAppearance использовать внешний вид системы. Я попробовал настройки app.appearance = nil перед проверкой effectiveAppearance, но это не помогло.

Теперь также есть [NSAppearance currentAppearance], который использует внешний вид текущего потока. Я не совсем уверен, к чему относится это значение, если поток не установил значение явно.

Моя большая проблема заключается в том, что у меня нет доступа к машине, работающей под macOS, чтобы проверить мой код, поэтому я был бы очень признателен, если бы кто-нибудь знал, что здесь делать.


Редактировать: похоже, проблема в том, что библиотека не компилируется с верной версией SDK. Или, по крайней мере, эта версия не записана в информацию библиотеки.

Из документации :

Если вы создаете свое приложение на основе более раннего SDK, но все же для поддержки темного режима включите ключ NSRequiresAquaSystemAppearance (со значением NO) в файл Info.plist вашего приложения. Делайте это только в том случае, если внешний вид вашего приложения выглядит корректно при работе в macOS 10.14 и более поздних версиях с включенным Dark Mode.

Я уже указываю версию через -mmacosx-version-min=10.14. Из того, что я обнаружил , эта проблема в основном та же, что и у меня, но я не совсем понимаю, каково решение от коммита.

Я думаю, это как-то связано с -isysroot и -platform_version. Но я не нашел ни одной хорошей ссылки на то, что они делают и как они работают.

Мой обновленный вопрос будет таким:

Как работают -isysroot и -platform_version и как мне это сделать использовать их для включения функциональности SDK Speci c с моими двоичными файлами?

...