Skip to content

Commit 716b3ed

Browse files
authored
Merge pull request #1208 from cph-cachet/health-13
Health 13.0.0 - Refactored Swift Native Code
2 parents bd9d1be + 067741c commit 716b3ed

File tree

18 files changed

+2054
-1741
lines changed

18 files changed

+2054
-1741
lines changed

packages/carp_background_location/example/ios/Flutter/AppFrameworkInfo.plist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,6 @@
2121
<key>CFBundleVersion</key>
2222
<string>1.0</string>
2323
<key>MinimumOSVersion</key>
24-
<string>11.0</string>
24+
<string>12.0</string>
2525
</dict>
2626
</plist>

packages/carp_background_location/example/ios/Podfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Uncomment this line to define a global platform for your project
2-
# platform :ios, '11.0'
2+
# platform :ios, '12.0'
33

44
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
55
ENV['COCOAPODS_DISABLE_STATS'] = 'true'

packages/carp_background_location/example/ios/Runner.xcodeproj/project.pbxproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@
163163
97C146E61CF9000F007C117D /* Project object */ = {
164164
isa = PBXProject;
165165
attributes = {
166-
LastUpgradeCheck = 1300;
166+
LastUpgradeCheck = 1510;
167167
ORGANIZATIONNAME = "";
168168
TargetAttributes = {
169169
97C146ED1CF9000F007C117D = {
@@ -350,7 +350,7 @@
350350
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
351351
GCC_WARN_UNUSED_FUNCTION = YES;
352352
GCC_WARN_UNUSED_VARIABLE = YES;
353-
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
353+
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
354354
MTL_ENABLE_DEBUG_INFO = NO;
355355
SDKROOT = iphoneos;
356356
SUPPORTED_PLATFORMS = iphoneos;
@@ -436,7 +436,7 @@
436436
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
437437
GCC_WARN_UNUSED_FUNCTION = YES;
438438
GCC_WARN_UNUSED_VARIABLE = YES;
439-
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
439+
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
440440
MTL_ENABLE_DEBUG_INFO = YES;
441441
ONLY_ACTIVE_ARCH = YES;
442442
SDKROOT = iphoneos;
@@ -485,7 +485,7 @@
485485
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
486486
GCC_WARN_UNUSED_FUNCTION = YES;
487487
GCC_WARN_UNUSED_VARIABLE = YES;
488-
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
488+
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
489489
MTL_ENABLE_DEBUG_INFO = NO;
490490
SDKROOT = iphoneos;
491491
SUPPORTED_PLATFORMS = iphoneos;

packages/carp_background_location/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "1300"
3+
LastUpgradeVersion = "1510"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"
@@ -50,6 +50,7 @@
5050
ignoresPersistentStateOnLaunch = "NO"
5151
debugDocumentVersioning = "YES"
5252
debugServiceExtension = "internal"
53+
enableGPUValidationMode = "1"
5354
allowLocationSimulation = "YES">
5455
<BuildableProductRunnable
5556
runnableDebuggingMode = "0">

packages/carp_background_location/example/ios/Runner/AppDelegate.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ func registerPlugins(registry: FlutterPluginRegistry) -> () {
88
}
99
}
1010

11-
@UIApplicationMain
11+
@main
1212
@objc class AppDelegate: FlutterAppDelegate {
1313
override func application(
1414
_ application: UIApplication,

packages/health/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 13.0.0
2+
3+
* Refactored Swift native implementation
4+
15
## 12.2.1
26

37
* iOS: Add `swift_version` for add-to-app implementations - PR [#1205](https://github.com/cph-cachet/flutter-plugins/pull/1205)

packages/health/example/ios/Runner.xcodeproj/project.pbxproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@
249249
);
250250
mainGroup = 97C146E51CF9000F007C117D;
251251
packageReferences = (
252-
ABB05D852D6BB16700FA4740 /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */,
252+
ABB05D852D6BB16700FA4740 /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */,
253253
);
254254
productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
255255
projectDirPath = "";
@@ -761,7 +761,7 @@
761761
/* End XCConfigurationList section */
762762

763763
/* Begin XCLocalSwiftPackageReference section */
764-
ABB05D852D6BB16700FA4740 /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */ = {
764+
ABB05D852D6BB16700FA4740 /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */ = {
765765
isa = XCLocalSwiftPackageReference;
766766
relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage;
767767
};

packages/health/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
buildConfiguration = "Debug"
4545
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
4646
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
47+
customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
4748
shouldUseLaunchSchemeArgsEnv = "YES">
4849
<MacroExpansion>
4950
<BuildableReference
@@ -72,6 +73,7 @@
7273
buildConfiguration = "Debug"
7374
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
7475
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
76+
customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
7577
launchStyle = "0"
7678
useCustomWorkingDirectory = "NO"
7779
ignoresPersistentStateOnLaunch = "NO"

packages/health/example/lib/util.dart

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import 'package:health/health.dart';
22

3-
/// List of data types available on iOS
3+
/// Data types available on iOS via Apple Health.
44
const List<HealthDataType> dataTypesIOS = [
55
HealthDataType.ACTIVE_ENERGY_BURNED,
66
HealthDataType.AUDIOGRAM,
@@ -65,11 +65,7 @@ const List<HealthDataType> dataTypesIOS = [
6565
HealthDataType.UV_INDEX,
6666
];
6767

68-
/// List of data types available on Android.
69-
///
70-
/// Note that these are only the ones supported on Android's Health Connect API.
71-
/// Android's Health Connect has more types that we support in the [HealthDataType]
72-
/// enumeration.
68+
/// Data types available on Android via the Google Health Connect API.
7369
const List<HealthDataType> dataTypesAndroid = [
7470
HealthDataType.ACTIVE_ENERGY_BURNED,
7571
HealthDataType.BASAL_ENERGY_BURNED,
@@ -81,7 +77,7 @@ const List<HealthDataType> dataTypesAndroid = [
8177
HealthDataType.HEIGHT,
8278
HealthDataType.WEIGHT,
8379
HealthDataType.LEAN_BODY_MASS,
84-
// HealthDataType.BODY_MASS_INDEX,
80+
HealthDataType.BODY_MASS_INDEX,
8581
HealthDataType.BODY_TEMPERATURE,
8682
HealthDataType.HEART_RATE,
8783
HealthDataType.HEART_RATE_VARIABILITY_RMSSD,
Lines changed: 211 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,211 @@
1+
import HealthKit
2+
3+
/// Constants used across the Health plugin
4+
enum HealthConstants {
5+
// Recording methods
6+
enum RecordingMethod: Int {
7+
case unknown = 0 // RECORDING_METHOD_UNKNOWN (not supported on iOS)
8+
case active = 1 // RECORDING_METHOD_ACTIVELY_RECORDED (not supported on iOS)
9+
case automatic = 2 // RECORDING_METHOD_AUTOMATICALLY_RECORDED
10+
case manual = 3 // RECORDING_METHOD_MANUAL_ENTRY
11+
}
12+
13+
// Health Data Type Keys
14+
static let ACTIVE_ENERGY_BURNED = "ACTIVE_ENERGY_BURNED"
15+
static let ATRIAL_FIBRILLATION_BURDEN = "ATRIAL_FIBRILLATION_BURDEN"
16+
static let AUDIOGRAM = "AUDIOGRAM"
17+
static let BASAL_ENERGY_BURNED = "BASAL_ENERGY_BURNED"
18+
static let BLOOD_GLUCOSE = "BLOOD_GLUCOSE"
19+
static let BLOOD_OXYGEN = "BLOOD_OXYGEN"
20+
static let BLOOD_PRESSURE_DIASTOLIC = "BLOOD_PRESSURE_DIASTOLIC"
21+
static let BLOOD_PRESSURE_SYSTOLIC = "BLOOD_PRESSURE_SYSTOLIC"
22+
static let BODY_FAT_PERCENTAGE = "BODY_FAT_PERCENTAGE"
23+
static let LEAN_BODY_MASS = "LEAN_BODY_MASS"
24+
static let BODY_MASS_INDEX = "BODY_MASS_INDEX"
25+
static let BODY_TEMPERATURE = "BODY_TEMPERATURE"
26+
27+
// Nutrition
28+
static let DIETARY_CARBS_CONSUMED = "DIETARY_CARBS_CONSUMED"
29+
static let DIETARY_ENERGY_CONSUMED = "DIETARY_ENERGY_CONSUMED"
30+
static let DIETARY_FATS_CONSUMED = "DIETARY_FATS_CONSUMED"
31+
static let DIETARY_PROTEIN_CONSUMED = "DIETARY_PROTEIN_CONSUMED"
32+
static let DIETARY_CAFFEINE = "DIETARY_CAFFEINE"
33+
static let DIETARY_FIBER = "DIETARY_FIBER"
34+
static let DIETARY_SUGAR = "DIETARY_SUGAR"
35+
static let DIETARY_FAT_MONOUNSATURATED = "DIETARY_FAT_MONOUNSATURATED"
36+
static let DIETARY_FAT_POLYUNSATURATED = "DIETARY_FAT_POLYUNSATURATED"
37+
static let DIETARY_FAT_SATURATED = "DIETARY_FAT_SATURATED"
38+
static let DIETARY_CHOLESTEROL = "DIETARY_CHOLESTEROL"
39+
static let DIETARY_VITAMIN_A = "DIETARY_VITAMIN_A"
40+
static let DIETARY_THIAMIN = "DIETARY_THIAMIN"
41+
static let DIETARY_RIBOFLAVIN = "DIETARY_RIBOFLAVIN"
42+
static let DIETARY_NIACIN = "DIETARY_NIACIN"
43+
static let DIETARY_PANTOTHENIC_ACID = "DIETARY_PANTOTHENIC_ACID"
44+
static let DIETARY_VITAMIN_B6 = "DIETARY_VITAMIN_B6"
45+
static let DIETARY_BIOTIN = "DIETARY_BIOTIN"
46+
static let DIETARY_VITAMIN_B12 = "DIETARY_VITAMIN_B12"
47+
static let DIETARY_VITAMIN_C = "DIETARY_VITAMIN_C"
48+
static let DIETARY_VITAMIN_D = "DIETARY_VITAMIN_D"
49+
static let DIETARY_VITAMIN_E = "DIETARY_VITAMIN_E"
50+
static let DIETARY_VITAMIN_K = "DIETARY_VITAMIN_K"
51+
static let DIETARY_FOLATE = "DIETARY_FOLATE"
52+
static let DIETARY_CALCIUM = "DIETARY_CALCIUM"
53+
static let DIETARY_CHLORIDE = "DIETARY_CHLORIDE"
54+
static let DIETARY_IRON = "DIETARY_IRON"
55+
static let DIETARY_MAGNESIUM = "DIETARY_MAGNESIUM"
56+
static let DIETARY_PHOSPHORUS = "DIETARY_PHOSPHORUS"
57+
static let DIETARY_POTASSIUM = "DIETARY_POTASSIUM"
58+
static let DIETARY_SODIUM = "DIETARY_SODIUM"
59+
static let DIETARY_ZINC = "DIETARY_ZINC"
60+
static let DIETARY_WATER = "WATER"
61+
static let DIETARY_CHROMIUM = "DIETARY_CHROMIUM"
62+
static let DIETARY_COPPER = "DIETARY_COPPER"
63+
static let DIETARY_IODINE = "DIETARY_IODINE"
64+
static let DIETARY_MANGANESE = "DIETARY_MANGANESE"
65+
static let DIETARY_MOLYBDENUM = "DIETARY_MOLYBDENUM"
66+
static let DIETARY_SELENIUM = "DIETARY_SELENIUM"
67+
68+
static let NUTRITION_KEYS: [String: HKQuantityTypeIdentifier] = [
69+
"calories": .dietaryEnergyConsumed,
70+
"protein": .dietaryProtein,
71+
"carbs": .dietaryCarbohydrates,
72+
"fat": .dietaryFatTotal,
73+
"caffeine": .dietaryCaffeine,
74+
"vitamin_a": .dietaryVitaminA,
75+
"b1_thiamine": .dietaryThiamin,
76+
"b2_riboflavin": .dietaryRiboflavin,
77+
"b3_niacin" : .dietaryNiacin,
78+
"b5_pantothenic_acid" : .dietaryPantothenicAcid,
79+
"b6_pyridoxine" : .dietaryVitaminB6,
80+
"b7_biotin" : .dietaryBiotin,
81+
"b9_folate" : .dietaryFolate,
82+
"b12_cobalamin": .dietaryVitaminB12,
83+
"vitamin_c": .dietaryVitaminC,
84+
"vitamin_d": .dietaryVitaminD,
85+
"vitamin_e": .dietaryVitaminE,
86+
"vitamin_k": .dietaryVitaminK,
87+
"calcium": .dietaryCalcium,
88+
"chloride": .dietaryChloride,
89+
"cholesterol": .dietaryCholesterol,
90+
"chromium": .dietaryChromium,
91+
"copper": .dietaryCopper,
92+
"fat_unsaturated": .dietaryFatMonounsaturated,
93+
"fat_monounsaturated": .dietaryFatMonounsaturated,
94+
"fat_polyunsaturated": .dietaryFatPolyunsaturated,
95+
"fat_saturated": .dietaryFatSaturated,
96+
// "fat_trans_monoenoic": .dietaryFatTransMonoenoic,
97+
"fiber": .dietaryFiber,
98+
"iodine": .dietaryIodine,
99+
"iron": .dietaryIron,
100+
"magnesium": .dietaryMagnesium,
101+
"manganese": .dietaryManganese,
102+
"molybdenum": .dietaryMolybdenum,
103+
"phosphorus": .dietaryPhosphorus,
104+
"potassium": .dietaryPotassium,
105+
"selenium": .dietarySelenium,
106+
"sodium": .dietarySodium,
107+
"sugar": .dietarySugar,
108+
"water": .dietaryWater,
109+
"zinc": .dietaryZinc,
110+
]
111+
112+
static let ELECTRODERMAL_ACTIVITY = "ELECTRODERMAL_ACTIVITY"
113+
static let FORCED_EXPIRATORY_VOLUME = "FORCED_EXPIRATORY_VOLUME"
114+
static let HEART_RATE = "HEART_RATE"
115+
static let HEART_RATE_VARIABILITY_SDNN = "HEART_RATE_VARIABILITY_SDNN"
116+
static let HEIGHT = "HEIGHT"
117+
static let INSULIN_DELIVERY = "INSULIN_DELIVERY"
118+
static let HIGH_HEART_RATE_EVENT = "HIGH_HEART_RATE_EVENT"
119+
static let IRREGULAR_HEART_RATE_EVENT = "IRREGULAR_HEART_RATE_EVENT"
120+
static let LOW_HEART_RATE_EVENT = "LOW_HEART_RATE_EVENT"
121+
static let RESTING_HEART_RATE = "RESTING_HEART_RATE"
122+
static let RESPIRATORY_RATE = "RESPIRATORY_RATE"
123+
static let PERIPHERAL_PERFUSION_INDEX = "PERIPHERAL_PERFUSION_INDEX"
124+
static let STEPS = "STEPS"
125+
static let WAIST_CIRCUMFERENCE = "WAIST_CIRCUMFERENCE"
126+
static let WALKING_HEART_RATE = "WALKING_HEART_RATE"
127+
static let WEIGHT = "WEIGHT"
128+
static let DISTANCE_WALKING_RUNNING = "DISTANCE_WALKING_RUNNING"
129+
static let DISTANCE_SWIMMING = "DISTANCE_SWIMMING"
130+
static let DISTANCE_CYCLING = "DISTANCE_CYCLING"
131+
static let FLIGHTS_CLIMBED = "FLIGHTS_CLIMBED"
132+
static let MINDFULNESS = "MINDFULNESS"
133+
static let SLEEP_ASLEEP = "SLEEP_ASLEEP"
134+
static let SLEEP_AWAKE = "SLEEP_AWAKE"
135+
static let SLEEP_DEEP = "SLEEP_DEEP"
136+
static let SLEEP_IN_BED = "SLEEP_IN_BED"
137+
static let SLEEP_LIGHT = "SLEEP_LIGHT"
138+
static let SLEEP_REM = "SLEEP_REM"
139+
140+
static let EXERCISE_TIME = "EXERCISE_TIME"
141+
static let WORKOUT = "WORKOUT"
142+
static let HEADACHE_UNSPECIFIED = "HEADACHE_UNSPECIFIED"
143+
static let HEADACHE_NOT_PRESENT = "HEADACHE_NOT_PRESENT"
144+
static let HEADACHE_MILD = "HEADACHE_MILD"
145+
static let HEADACHE_MODERATE = "HEADACHE_MODERATE"
146+
static let HEADACHE_SEVERE = "HEADACHE_SEVERE"
147+
static let ELECTROCARDIOGRAM = "ELECTROCARDIOGRAM"
148+
static let NUTRITION = "NUTRITION"
149+
static let BIRTH_DATE = "BIRTH_DATE"
150+
static let GENDER = "GENDER"
151+
static let BLOOD_TYPE = "BLOOD_TYPE"
152+
static let MENSTRUATION_FLOW = "MENSTRUATION_FLOW"
153+
static let WATER_TEMPERATURE = "WATER_TEMPERATURE"
154+
static let UNDERWATER_DEPTH = "UNDERWATER_DEPTH"
155+
static let UV_INDEX = "UV_INDEX"
156+
157+
// Health Unit types
158+
static let GRAM = "GRAM"
159+
static let KILOGRAM = "KILOGRAM"
160+
static let OUNCE = "OUNCE"
161+
static let POUND = "POUND"
162+
static let STONE = "STONE"
163+
static let METER = "METER"
164+
static let INCH = "INCH"
165+
static let FOOT = "FOOT"
166+
static let YARD = "YARD"
167+
static let MILE = "MILE"
168+
static let LITER = "LITER"
169+
static let MILLILITER = "MILLILITER"
170+
static let FLUID_OUNCE_US = "FLUID_OUNCE_US"
171+
static let FLUID_OUNCE_IMPERIAL = "FLUID_OUNCE_IMPERIAL"
172+
static let CUP_US = "CUP_US"
173+
static let CUP_IMPERIAL = "CUP_IMPERIAL"
174+
static let PINT_US = "PINT_US"
175+
static let PINT_IMPERIAL = "PINT_IMPERIAL"
176+
static let PASCAL = "PASCAL"
177+
static let MILLIMETER_OF_MERCURY = "MILLIMETER_OF_MERCURY"
178+
static let INCHES_OF_MERCURY = "INCHES_OF_MERCURY"
179+
static let CENTIMETER_OF_WATER = "CENTIMETER_OF_WATER"
180+
static let ATMOSPHERE = "ATMOSPHERE"
181+
static let DECIBEL_A_WEIGHTED_SOUND_PRESSURE_LEVEL = "DECIBEL_A_WEIGHTED_SOUND_PRESSURE_LEVEL"
182+
static let SECOND = "SECOND"
183+
static let MILLISECOND = "MILLISECOND"
184+
static let MINUTE = "MINUTE"
185+
static let HOUR = "HOUR"
186+
static let DAY = "DAY"
187+
static let JOULE = "JOULE"
188+
static let KILOCALORIE = "KILOCALORIE"
189+
static let LARGE_CALORIE = "LARGE_CALORIE"
190+
static let SMALL_CALORIE = "SMALL_CALORIE"
191+
static let DEGREE_CELSIUS = "DEGREE_CELSIUS"
192+
static let DEGREE_FAHRENHEIT = "DEGREE_FAHRENHEIT"
193+
static let KELVIN = "KELVIN"
194+
static let DECIBEL_HEARING_LEVEL = "DECIBEL_HEARING_LEVEL"
195+
static let HERTZ = "HERTZ"
196+
static let SIEMEN = "SIEMEN"
197+
static let VOLT = "VOLT"
198+
static let INTERNATIONAL_UNIT = "INTERNATIONAL_UNIT"
199+
static let COUNT = "COUNT"
200+
static let PERCENT = "PERCENT"
201+
static let BEATS_PER_MINUTE = "BEATS_PER_MINUTE"
202+
static let RESPIRATIONS_PER_MINUTE = "RESPIRATIONS_PER_MINUTE"
203+
static let MILLIGRAM_PER_DECILITER = "MILLIGRAM_PER_DECILITER"
204+
static let UNKNOWN_UNIT = "UNKNOWN_UNIT"
205+
static let NO_UNIT = "NO_UNIT"
206+
}
207+
208+
/// Error structure used throughout the plugin
209+
struct PluginError: Error {
210+
let message: String
211+
}

0 commit comments

Comments
 (0)