You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在运行时或编译时检测Mac Catalyst应用的适配模式?

检测Mac Catalyst应用的运行模式

编译时检测:无法实现

正如你提到的,targetEnvironment(macCatalyst)这类条件编译块只能判断当前是否处于Mac Catalyst环境,没法区分“缩放匹配iPad”和“针对Mac优化”这两种模式——因为这两种模式共用同一套编译产物,编译阶段系统没有对应的区分标识。

运行时检测:读取Info.plist中的TARGETED_DEVICE_FAMILY

虽然该信息不在ProcessInfo.processInfo.environment中,但可以直接从应用的Info.plist文件里读取TARGETED_DEVICE_FAMILY字段判断:

  • 若TARGETED_DEVICE_FAMILY数组包含3(Mac对应的设备代码),说明应用处于“针对Mac优化”模式;
  • 若数组仅包含2(iPad对应的设备代码),则处于“缩放匹配iPad”模式。

以下是Swift实现的示例代码:

func isOptimizedForMac() -> Bool {
    guard let infoDict = Bundle.main.infoDictionary,
          let deviceFamilies = infoDict["TARGETED_DEVICE_FAMILY"] as? [String] else {
        return false
    }
    return deviceFamilies.contains("3")
}

需要注意的是,这个判断逻辑依赖Xcode的自动配置:当你在项目设置中切换到“Optimize for Mac”模式时,Xcode会自动将3添加到TARGETED_DEVICE_FAMILY数组中;切换回“Scaled to Match iPad”时则会移除3。

内容的提问来源于stack exchange,提问作者John Cashew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 03:59:55