从命令行(macOS)编译时将SDK版本写入二进制文件

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

我正在尝试检测系统是否处于暗模式。我已经尝试从用户默认值即[>读取AppleInterfaceStyle]

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

大多数时间都有效,但是在Catalina的Auto模式下有问题。

现在,我读到的是,更健壮的方法是检查effectiveAppearanceNSApplication,如下所示:

    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进行编译。或者至少该版本未写入库信息。

documentation

如果您使用较早的SDK构建应用程序,但仍希望支持黑暗模式,请在应用程序的Info.plist文件中包含NSRequiresAquaSystemAppearance键(值为NO)。仅当在macOS 10.14及更高版本中启用了暗模式的应用程序的外观看起来正确时,才执行此操作。

我已经通过-mmacosx-version-min=10.14指定了版本。根据我的发现,this issue与我的基本相同,但我不太了解提交所带来的解决方案。

我想它与-isysroot-platform_version有关。但是我没有找到关于它们的工作方式和工作方式的任何参考。

我更新的问题将是:

-isysroot-platform_version如何工作,如何使用它们通过我的二进制文件启用SDK特定功能?

我正在尝试检测系统是否处于暗模式。我已经尝试从用户默认值(即NSString * interfaceStyle = [[NSUserDefaults ...

objective-c macos compiler-flags macos-darkmode
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.