如何判断iOS应用是否运行在m1 Mac上

自从Mac推出自研m1芯片以后,打通了Mac和iPhone之间隔阂,自此iOS应用可以直接在Mac上运行。Mac运行iOS应用时,会将自身模拟成iPad,即Mac(Designed for iPad)。这给用户数据统计回收带来了一个新的问题,如何区分真假iPad。

通过ProcessInfo ⭐️最佳实践⭐️

var isiOSAppOnMac = false
if #available(iOS 14.0, *) {
	isiOSAppOnMac = ProcessInfo.processInfo.isiOSAppOnMac
}
print(isiOSAppOnMac)

通过UIDevice

MaciPad
nameArchie’s MacBook ProArchie’s iPad
systemNameiPadOSiPadOS
systemVersion15.515.6
modeliPadiPad
localizedModeliPadiPad
userInterfaceIdiom11
identifierForVendor808B54EF-1948-5CC1-ABF6-4DE4435EAD8790F5F4F1-1E11-4CE6-BFF3-8284B696C3D8

由上可以看出,除了设备名称以外,其他属性两者完全一致。可以通过设备名称做模糊的区分,如果用户使用默认名称的话。

通过Bundle

print(Bundle.main.bundlePath)
MaciPad
bundlePath/private/var/folders/9y/qv19x3g51cjcq5j8txcv9jzw0000gn/X/B0D7A504-D458-5C41-8436-715656E12816/d/Wrapper/ApplicationName.app/private/var/containers/Bundle/Application/9BCE001F-2378-425E-988D-8A11D2905315/ApplicationName.app

通过utsname

/*
struct utsname {
var sysname
var nodename
var release
var version
var machine
}
*/
var systemInfo = utsname()
uname(&systemInfo)
let machineMirror = Mirror(reflecting: systemInfo.machine)
let identifier = machineMirror.children.reduce("") { identifier, element in
	guard let value = element.value as? Int8, value != 0 else { return identifier }
	return identifier + String(UnicodeScalar(UInt8(value)))
}
print(identifier)
MaciPad
sysnameDarwinDarwin
nodenameArchies-MacBook-Pro.localArchies-iPad
release21.5.021.6.0
versionDarwin Kernel Version 21.5.0: Tue Apr 26 21:08:29 PDT 2022; root:xnu-8020.121.3~4/RELEASE_ARM64_T8101Darwin Kernel Version 21.6.0: Sat Jun 18 18:56:14 PDT 2022; root:xnu-8020.140.41~4/RELEASE_ARM64_T8101
machineiPad8,6iPad13,16

这里nodename里Mac会多一个.local。

machine对照表:iPhone/iPad苹果设备型号对应常用名称列表
参考: how-to-detect-if-an-ios-app-is-running-on-an-m1-mac

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值