【发布时间】:2021-09-19 23:20:42
【问题描述】:
我用 Swift 写了一个屏幕保护程序。
虽然我已将 macOS 部署目标设置为 macOS 10.13,但它无法在运行 macOS High Sierra 10.13.6 的 x86_64 Mid 2010 Mac Pro 上运行。
同时,它在装有 macOS Big Sur 11.5.2 的 arm64 2020 MBP M1 和装有 macOS Catalina 10.15.6 的 x86_64 2019 MacBook Air 上运行良好。
屏幕保护程序在所有机器上都能正常安装,但在运行 High Sierra 的机器上却说屏幕保护程序不兼容。
显示的错误消息如下(“vibe”是我制作的屏幕保护程序的名称。因此,遇到相同问题的任何其他人都会看到类似的消息,但用他们自己的屏幕保护程序的名称代替当然):
此版本的 macOS 无法使用 vibe 屏幕保护程序。
请联系供应商以获取更新版本的屏幕保护程序。
我想知道是否有一种方法可以自动确定我的代码使用的 API 或其他功能是否在 macOS 10.13 中不可用。而且我想知道您是否通常可以为给定的 macOS 部署目标构建,然后当您尝试在应支持的范围内的机器上运行该程序时,该程序毕竟不会运行。我原以为如果构建的程序无法在其上运行,则为 macOS 部署目标构建会出现构建时间错误。
我正在使用在我的 MBP M1、macOS 11.5.2 上运行的 Xcode 12.5.1,并且如前所述,我正在为设置为 macOS 10.13 的 macOS 部署目标构建。屏幕保护程序在带有 macOS 10.15 的 Intel 和带有 macOS 11.5 的 ARM 上运行良好。我正在使用 Swift 语言版本 Swift 5。
【问题讨论】:
-
你有没有尝试过在 Console.app 周围查看是否记录了任何有趣的内容?
-
特别有趣,因为它说“联系供应商以获得更新”.. 更新意味着与旧系统的兼容性更差。除了 Quartz 之外,您还使用哪些 API 会很有趣。如果您可以从 Xcode11.3 中获得针对 osx10.13 的编译版本,那么理论上您至少可以比较这两个版本以获得一些线索。
-
@Alexander 感谢您在 Console.app 中浏览的建议,我确实在那里找到了一些高度相关的信息。将用我发现的内容发布我自己的问题的答案。
-
@OlSen RE:“联系供应商以获取更新”。是的 :P 有一段时间,这个措辞也让我觉得可能 macOS 10.13 对胖二进制文件感到困惑,因为 macOS 10.13 是在 macOS 的 arm64 版本之前发布的。我在想也许它以某种方式得出了胖二进制=旧的结论,因为它们曾经使为powerpc + intel构建胖二进制成为可能。但后来我意识到这可能不是原因,因为我认为他们可能已经将 arm64 + intel fat 二进制文件与 iOS 模拟器结合使用。此外,我认为可能是苹果
-
@OlSen (cont. from prev. comment) Apple 可能已经使 Mach-O fat 二进制格式向前兼容,因为他们的操作系统将忽略所有其他存在的架构,因此在任何情况下在未来,他们可以为未来的架构制作嵌入二进制文件的胖二进制文件,同时允许旧版本的 macOS 为他们自己的架构加载嵌入的二进制文件,而不会产生混淆。