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

如何判断iOS Widget在开启「使用iPhone Widgets」的Mac上运行?

判断运行在Mac上的iPhone Widget的方法

由于这种从iPhone迁移到Mac的Widget是在Rosetta模拟的iOS环境中运行,常规的Catalyst应用判断手段(如ProcessInfo.processInfo.isiOSAppOnMac、用户文档路径)无法生效,以下是几种可靠的判断方式:

1. 读取系统注入的环境变量

Mac在运行iPhone应用/Widget时会注入__IS_MAC_ENVIRONMENT__环境变量,直接检查该变量即可:

func isRunningOnMacAsIPhoneWidget() -> Bool {
    return ProcessInfo.processInfo.environment["__IS_MAC_ENVIRONMENT__"] != nil
}

2. 通过设备模型标识符判断

运行在Mac上的iPhone Widget,其设备模型会包含Mac相关的型号标识(如MacBookPro18,3),可以通过获取设备型号来判断:

import UIKit

func isRunningOnMac() -> Bool {
    return UIDevice.current.modelIdentifier.contains("Mac")
}

// 扩展UIDevice获取具体型号标识符
extension UIDevice {
    var modelIdentifier: String {
        var systemInfo = utsname()
        uname(&systemInfo)
        let machineMirror = Mirror(reflecting: systemInfo.machine)
        return machineMirror.children.reduce("") { identifier, element in
            guard let value = element.value as? Int8, value != 0 else { return identifier }
            return identifier + String(UnicodeScalar(UInt8(value)))
        }
    }
}

3. 辅助判断:屏幕尺寸特性

Mac的屏幕通常具备更大的分辨率,可作为辅助判断依据(需结合你的Widget适配场景调整阈值):

func isLikelyRunningOnMac() -> Bool {
    // 示例:判断屏幕宽度是否超过1024(多数Mac屏幕的最小宽度)
    return UIScreen.main.bounds.width > 1024
}

优先级建议

优先使用环境变量检查的方法,这是系统直接提供的标识,准确性最高;设备型号判断次之;屏幕尺寸仅作为补充验证手段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 21:34:54