【问题标题】:Write SDK version to binary when compiling from command line (macOS)从命令行编译时将 SDK 版本写入二进制文件 (macOS)
【发布时间】:2020-04-22 15:57:34
【问题描述】:

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

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

大部分时间都有效,但在 Catalina 上的 Auto 模式下存在问题。

现在,根据我的阅读,更可靠的方法是检查 NSApplicationeffectiveAppearance,如下所示:

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

这种方法的问题是我正在为其编写的应用程序手动设置其appearance 属性,这会阻止effectiveAppearance 使用系统外观。 我在检查effectiveAppearance 之前尝试了设置app.appearance = nil,但没有帮助。

现在还有[NSAppearance currentAppearance] 使用当前线程的外观。如果线程没有明确设置值,我不太确定这个值解析为什么。

我最大的问题是我无法访问运行 macOS 的机器来检查我的代码,所以如果有人知道在这里做什么,我将不胜感激。


编辑:看起来问题是库没有针对正确版本的 SDK 进行编译。或者至少该版本没有写入库信息。

来自documentation

如果您针对较早的 SDK 构建应用但仍希望支持深色模式,请在应用的 Info.plist 文件中包含 NSRequiresAquaSystemAppearance 键(值为 NO)。仅当您的应用在 macOS 10.14 及更高版本中运行并启用暗模式时看起来正确时才这样做。

我已经通过-mmacosx-version-min=10.14 指定版本。从我发现this issue和我的基本一样,但是我不太明白commit的解决方案是什么。

我猜这与-isysroot-platform_version 有关。但是我没有找到任何关于他们做什么以及他们如何工作的好的参考。

我更新后的问题是:

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

【问题讨论】:

    标签: objective-c macos compiler-flags macos-darkmode


    【解决方案1】:

    解决方案非常简单。从命令行手动编译时-mmacosx-version-min=10.14需要传递给编译器和链接器。

    【讨论】:

      猜你喜欢
      • 2013-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-10
      • 2017-09-24
      • 2015-09-13
      • 1970-01-01
      • 2015-01-25
      相关资源
      最近更新 更多