美文网首页
修改运动步数-基于Healthkit

修改运动步数-基于Healthkit

作者: 是夏目啊 | 来源:发表于2017-03-06 15:35 被阅读0次

    网上有一些基于逆向工程的应用的方案中,是直接在微信头文件中发现,WCDeviceStepObject这个类里面有很显眼的属性: m7StepCount, hkStepCount, 一猜就是用来记录运动步数的属性, 然后直接编写Tweak.xm,修改m7StepCount的get方法,直接返回一个运动步数,就可以修改自己微信的运动步数了。

    由于本人对逆向工程了解的不多,所以这篇文章主要是学习苹果的healthKit框架,打通各种第三方app和苹果本身健康应用之间的数据通道,实现各种健康数据在第三方应用和苹果健康应用之间的读写。

    iOS8:Health

    HealthKit框架:

    1.HKUnit: 由于健康数据包括各种各样数据类型,HealthKit对这些数据进行了统一规范,HKUnit包括了Mass,Length,Volume,Pressure,Time,Energy,Temperature,Electrical Conductance,Scalar等各种数据类型.

    [HKUnit countUnit]

    2.HKQuantity: 通过数据类型HKUnit,把我们数学意义上的数量转换成HealthKit的数据.

    HKQuantity *stepQuantityConsumed = [HKQuantity quantityWithUnit:[HKUnit countUnit] doubleValue:stepNum];quantityWithUnit:poundUnit doubleValue:weight];

    3.HKObjectType: 健康数据的类型,包括运动步数,心率,卡路里等等.

    HKObjectType一般都根据identifier来创建的

    +(nullable HKQuantityType)quantityTypeForIdentifier:(NSString)identifier;

    +(nullable HKCategoryType)categoryTypeForIdentifier:(NSString)identifier;

    +(nullable HKCharacteristicType)characteristicTypeForIdentifier:(NSString)identifier;

    创建运动步数的HKObject的例子:

    NSDate endDate = [NSDate date];

    NSDatestartDate = [NSDate dateWithTimeInterval:-300 sinceDate:endDate];

    HKQuantitystepQuantityConsumed = [HKQuantity quantityWithUnit:[HKUnit countUnit] doubleValue:stepNum];

    HKQuantityType stepConsumedType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];

    4.HKHealthStore: healthKit的管理器,用来链接到数据库,保存和查询数据,在app中必须一直被持有(should be long lived).类似下面的操作均是HKHealthStore的对象方法.

    - (void)saveObject:(HKObject)object withCompletion:(void(^)(BOOL success, NSError__nullable error))completion;

    - (void)executeQuery:(HKQuery)query;

    - (void)deleteObject:(HKObject)object withCompletion:(void(^)(BOOL success, NSError * __nullable error))completion;

    5.HKQuery: healthKit数据的查询

    -(instancetype)initWithSampleType:(HKSampleType)sampleType predicate:(nullable NSPredicate)predicate limit:(NSUInteger)limit sortDescriptors:(nullable NSArray)sortDescriptors resultsHandler:(void(^)(HKSampleQueryquery, NSArray<__kindof HKSample *>__nullable results, NSError__nullable error))resultsHandler;

    修改运动步数: 要修改微信或者其他第三方app的健康数据,只需要修改苹果中HKHealthStore的数据即可,有些第三方app是读取HKHealthStore的数据的.(有些对数据来源做了限制,例如:微信)

    根据日期读取数据:

    根据日期读取数据 根据日期读取数据 添加步数 添加步数

    相关文章

      网友评论

          本文标题:修改运动步数-基于Healthkit

          本文链接:https://www.haomeiwen.com/subject/uckugttx.html