Swift macCatalyst 可用性检查/iOS 失败

Swift availability check for macCatalyst / iOS failing

我已经在我的应用程序中添加了一个 iOS 15+/macCatalyst 15.0+ 功能,现在当 运行 在 M1 iMac 到 Mac Catalyst (Designed for iPad) 上 运行 时它崩溃了。

我对我的函数进行了可用性检查,但是当 运行 在我的 Mac (macOS 11.6) 上时,可用性检查中的代码仍然 运行s,然后崩溃。

if #available(iOS 15.0, macCatalyst 15.0, *) {
    dataSource.applySnapshotUsingReloadData(fullSnapshot, completion: nil)
} else {
    dataSource.apply(fullSnapshot, animatingDifferences: false)
}

我理解 Designed for iPad mac 催化剂 运行s 为 iOS,我可以确认它是 运行ning 为 iOS 14.7使用 print(UIDevice.current.systemVersion) 那么为什么 运行ning 代码仅在 iOS 15+ 上设置为 运行?

我的 macCatalyst 检查正确吗?

原来这是一个已知问题,实际上在 Xcode 13 发行说明中提到过。

Availability checks in iPhone and iPad apps on a Mac with Apple silicon always return true. This causes iOS apps running in macOS 11 Big Sur to see iOS 15 APIs as available, resulting in crashes. This only affects apps available in the Mac App Store built with the “My Mac (Designed for iPhone)” or “My Mac (Designed for iPad)” run destination. It doesn’t affect Mac Catalyst apps. (83378814)

Workaround: Use the following code to check for iOS 15 availability:

if #available(iOS 15, *), ProcessInfo.processInfo.operatingSystemVersion.majorVersion >= 15 {

我需要检查这个,但我需要添加功能 if 运行 作为 Mac 上的 iOS 应用程序和这个似乎可以解决问题:

if ProcessInfo.processInfo.isiOSAppOnMac {
    // blah blah yada yada etc etc
}

还有一个 isMacCatalystApp 值。