Ios 如何检测M7是否存在,也就是说它是iPhone 5S或更高版本?

Ios 如何检测M7是否存在,也就是说它是iPhone 5S或更高版本?,ios,sdk,core-motion,apple-m7,Ios,Sdk,Core Motion,Apple M7,试图找到一种检测M7是否存在的方法 如果M7不存在,查询CMStepCounter或CMMotionActivity类是否毫无意义?我的猜测是,在iOS 7.0的非M7机型上,这些类获取数据的效率并不高&使用的电池要多得多 一个粗略的方法是: struct utsname systemInfo; uname(&systemInfo); model = [[NSString alloc] initWithCString:systemInfo.machine

试图找到一种检测M7是否存在的方法

如果M7不存在,查询CMStepCounter或CMMotionActivity类是否毫无意义?我的猜测是,在iOS 7.0的非M7机型上,这些类获取数据的效率并不高&使用的电池要多得多

一个粗略的方法是:

struct utsname systemInfo;

uname(&systemInfo);

model =  [[NSString alloc] initWithCString:systemInfo.machine
                                      encoding:NSUTF8StringEncoding];

version =  [[NSString alloc] initWithString:[[UIDevice currentDevice] systemVersion]];


if ([model compare:@"iPhone6,1"]) {

}

使用Apple提供的API:

if ([CMStepCounter isStepCountingAvailable]) {
    // The device supports step counting
} else {
    // The device does not support step counting
}

if ([CMMotionActivityManager isActivityAvailable]) {
    // You can use CMMotionActivity
} else {
    // Nope, not supported
}

当然,此API仅适用于iOS 7或更高版本。因此,如果您需要支持iOS 5或iOS 6,那么您也需要在检查
CMStepCounter
类时包装此代码。

在非M7机型(5S除外)上,这些类似乎无法获取数据。他们需要M7芯片。按以下方式检查isStepCountingAvailable或isActivityAvailable似乎有效。实际上,不需要显式检查类。如果您使用的是iOS 6或更早版本,[CMStepCounter isStepCountingAvailable]将返回false,因为CMStepCounter将为零。(同样适用于[CMMotionActivityManager isActivityAvailable])CMStepCounter在iOS 8中被弃用。使用CMP计步器代替。[CMPedometer isStepCountingAvailable]的工作原理与其前身相同。课堂参考: