修改运动步数-基于Healthkit

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

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

修改运动步数-基于Healthkit_第1张图片
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_第2张图片
根据日期读取数据


修改运动步数-基于Healthkit_第3张图片
根据日期读取数据



修改运动步数-基于Healthkit_第4张图片
添加步数
修改运动步数-基于Healthkit_第5张图片
添加步数

你可能感兴趣的:(修改运动步数-基于Healthkit)