Granola 0.4.1

Granola 0.4.1

测试已测试
语言编程语言 Obj-CObjective C
许可证 Apache 2
发布上次发布2016年3月

Brent HargraveEmerson FarrugiaChris Schaefbauer 维护。



Granola 0.4.1

  • Brent Hargrave,Chris Schaefbauer,Emerson Farrugia 和 Simona Carini

为您的 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"
    }
  }
}

HKObjectType 支持

序列化程序支持所有的 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》)发信息。

参与贡献

  1. 将其叉(Fork)过来
  2. 创建您的功能分支(git checkout -b my-new-feature
  3. 提交您的更改(git commit -am 'Add some feature'
  4. 将更改推送到分支(git push origin my-new-feature
  5. 创建新的 Pull Request

要为开发设置 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]》)