测试已测试 | ✓ |
语言编程语言 | Obj-CObjective C |
许可证 | Apache 2 |
发布上次发布 | 2016年3月 |
由 Brent Hargrave,Emerson Farrugia,Chris Schaefbauer 维护。
为您的 HealthKit 数据提供一个健康的序列化工具。
所以,您想在 HealthKit 以外的地方存储您的应用数据,例如分析或备份的远程服务器?使用 Granola 来序列化您的数据。
Granola 可以让您免于自己映射 HealthKit 的 API 到 JSON,并输出验证 Open mHealth(由 Open mHealth 开发的模式)以确保数据的直观性和临床意义。
首先,确保研究 Apple 的 HealthKit 框架参考,其中包含代码示例,说明如何请求您的应用用户允许访问其 HealthKit 数据,并在获得权限后如何查询这些数据。
假设您想要看到一个 "步数" 样本数据点序列化为 JSON 的样子。
// Granola includes OMHSerializer for serializing HealthKit data
#import "OMHSerializer.h"
// (initialize your HKHealthStore instance, request permissions with it)
// ...
// create a query for steps data
HKSampleType *stepsSampleType =
[HKSampleType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];
HKSampleQuery* query =
[[HKSampleQuery alloc] initWithSampleType:stepsSampleType
predicate:nil
limit:HKObjectQueryNoLimit
sortDescriptors:nil
resultsHandler:^(HKSampleQuery *query,
NSArray *results,
NSError *error) {
if (!results) abort();
// pick a sample to serialize
HKQuantitySample *sample = [results first];
// create and use a serializer instance
OMHSerializer *serializer = [OMHSerializer new];
NSString* jsonString = [serializer jsonForSample:sample error:nil];
NSLog(@"sample json: %@", jsonString);
}];
// run the query with your authorized HKHealthStore instance
[self.healthStore executeQuery:query];
运行您的代码后,控制台将渲染符合 Open mHealth 标准的数据样本 JSON 格式
{
"body" : {
"step_count" : 45,
"effective_time_frame" : {
"time_interval" : {
"start_date_time" : "2015-05-12T18:58:06.969Z",
"end_date_time" : "2015-05-12T18:58:32.524Z"
}
}
},
"header" : {
"id" : "4A00E553-B01D-4757-ADD0-A4283BABAC6F",
"creation_date_time" : "2015-05-12T18:58:06.969Z",
"schema_id" : {
"namespace" : "omh",
"name" : "step-count",
"version" : "1.0"
}
}
}
序列化程序支持所有的 HealthKit 样本(HKSample
),无论是通过精心编制的 Open mHealth 模式还是通用的 HealthKit 模式。您可以查看 支持类型及其相关模式的映射表,以了解数据是如何映射的。《HKObjectType》标识符来自 HealthKit 常量参考。
您可以通过调用静态方法获取 Granola 中支持的类型和它们使用的特定序列化程序的类名映射(NSDictionary
)
[OMHHealthKitConstantsMapper allSupportedTypeIdentifiersToClasses]
您还可以通过以下方法获取一个不包含相关序列化程序的类型列表
[OMHSerializer supportedTypeIdentifiers]
并且,通过以下方法获取使用 Open mHealth 精心编制的模式的序列化类型列表(而不是通用类型模式)
[OMHSerializer supportedTypeIdentifiersWithOMHSchema]
随着时间的推移,随着精心的模式开发出来以对应于通用模式表示的 HealthKit 数据,通用的映射将被映射到精心编制的模式。
联系我们 以请求对特定类型的支持或贡献支持,请创建 pull request。
Granola 使用为 HKMetadataKeyTimeZone
键指定的时区序列化时间戳(当存在时)。如果未提供时区元数据,Granola 使用应用程序默认时区进行 UTC 偏移量。尽管这些时间戳是正确的,但某些数据(尤其是较旧的数据)在被序列化时可能会因原始由 HealthKit 在不同的时区创建而出现错误偏移。例如,如果数据点最初于 2015 年 6 月 1 日在旧金山 8:00 am(-07:00)由 HealthKit 创建,但三个月后在纽约序列化,则时间戳将显示为 2015-06-01T11:00-04:00。这些在技术上是在同一时间点,但它们的偏移不同。
在未来的更新中,我们计划允许开发者为序列化数据点指定首选时区,以便他们可以控制时间戳的序列化方式。
有任何疑问?请打开一个 issue!
您也可以直接通过 Tweeter 向 Open mHealth(《@openmhealth》)发信息。
git checkout -b my-new-feature
)git commit -am 'Add some feature'
)git push origin my-new-feature
)要为开发设置 Granola,首先拉取代码。然后安装 CocoaPods
$ gem install cocoapods
之后,转换到 Example 目录
$ cd Example
并输入
pod install
然后打开 .xcworkspace 文件而不是 .xcodeproj 文件。这允许您对代码进行更改,并为您所做的任何更改运行和添加测试。
Granola 在 Apache 2 许可证下可用。有关更多信息,请参阅LICENSE 文件。
Brent Hargrave(《@brenthargrave》)
Chris Schaefbauer(《[email protected]》)
Emerson Farrugia(《[email protected]》)