最近涉足了一点 Catalyst 跨平台的内容,基本需要贯穿开发流程的一个工具方法是:判断当前 APP 的运行环境是否为 Catalyst(即 UIKit on macOS)。

常规的思路此时已经无用,例如使用 UIDevice.current.userInterfaceIdiom


switch UIDevice.current.userInterfaceIdiom {
case .pad:
    /// iPadOS / macOS + Catalyst Stuff
default:
    /// Other Platforms
}

在 iPadOS 和 macOS 平台运行时,属性均为 .iPad,无法做细致的区分。

因此,我们需要使用下面的 #if targetEnvironment 来做判断:


func isCatalyst() -> Bool {
    #if targetEnvironment(macCatalyst)
        return true
    #else
        return false
    #endif
}