Skip to main content

DailyActivity

The DailyActivity module provides comprehensive management of daily physical activity and exercise tracking. It allows you to retrieve and configure daily activity goals (steps, calories, distance, activity/exercise duration and frequency), manage reminder notifications, synchronize today's activity data, and access historical activity records within specified time ranges. This module integrates seamlessly with the device to provide real-time activity monitoring and goal-based health tracking.

Prerequisites

  • TopStepComKit SDK properly initialized and connected to a device
  • Valid BLE connection with the wearable device
  • Device must support daily activity features
  • User must have necessary permissions to read/write activity data

Data Models

TSActivityDailyModel

Represents aggregated daily activity data with individual activity items.

PropertyTypeDescription
stepsNSIntegerDaily aggregated steps count
caloriesNSIntegerDaily aggregated calories consumed (kilocalories)
distanceNSIntegerDaily aggregated distance in meters
activityDurationNSIntegerDaily aggregated activity duration in seconds
activityTimesNSIntegerDaily aggregated activity sessions count
exercisesDurationNSIntegerDaily aggregated exercise duration in seconds
exercisesTimesNSIntegerDaily aggregated exercise sessions count
activityItemsNSArray<TSDailyActivityItem *> *Array of individual activity items for the day, ordered by time ascending

TSDailyActivityGoals

Manages user's daily exercise goals for all activity metrics.

PropertyTypeDescription
stepsGoalNSIntegerDaily steps target (0–100,000 recommended)
caloriesGoalNSIntegerDaily calorie consumption target in kcal (50–3,000 recommended)
distanceGoalNSIntegerDaily distance target in meters (0–100,000 recommended)
activityDurationGoalNSIntegerDaily activity duration target in minutes (0–1,440)
exerciseDurationGoalNSIntegerDaily exercise duration target in minutes (0–1,440)
exerciseTimesGoalNSIntegerDaily exercise frequency target (1–50 recommended)
activityTimesGoalNSIntegerDaily activity frequency target (1–100 recommended)

TSDailyActivityItem

Represents detailed activity statistics for a specific time period.

PropertyTypeDescription
stepsNSIntegerTotal step count
caloriesNSIntegerTotal calories burned (small kilocalories)
distanceNSIntegerTotal distance covered in meters
activityDurationNSIntegerTotal activity duration in seconds
exercisesDurationNSIntegerTotal exercise duration in seconds
exercisesTimesNSIntegerNumber of exercise sessions
activityTimesNSIntegerNumber of activity sessions

TSDailyActivityReminder

Stores reminder notification switches for daily activity goals.

PropertyTypeDescription
stepsReminderEnabledBOOLSteps goal reminder enabled
caloriesReminderEnabledBOOLCalories goal reminder enabled
distanceReminderEnabledBOOLDistance goal reminder enabled
activityTimesReminderEnabledBOOLActivity times goal reminder enabled
activityDurationReminderEnabledBOOLActivity duration goal reminder enabled
exerciseTimesReminderEnabledBOOLExercise times goal reminder enabled
exerciseDurationReminderEnabledBOOLExercise duration goal reminder enabled

Enumerations

TSDailyActivityType

Defines the types of daily activities displayed on the device.

ValueNameDescription
1TSDailyActivityTypeStepCountStep count
2TSDailyActivityTypeExerciseDurationExercise duration
3TSDailyActivityTypeActivityCountActivity count
4TSDailyActivityTypeActiveDurationActive duration
5TSDailyActivityTypeDistanceDistance
6TSDailyActivityTypeCaloriesCalories

Callback Types

Activity Types Completion Block

void (^)(NSArray<NSNumber *> *_Nullable activityTypes, NSError *_Nullable error)
ParameterTypeDescription
activityTypesNSArray<NSNumber *> *Array of supported activity type values (TSDailyActivityType)
errorNSError *Error object if operation failed

Goals Completion Block

void (^)(TSDailyActivityGoals *_Nullable goals, NSError *_Nullable error)
ParameterTypeDescription
goalsTSDailyActivityGoals *Current daily exercise goals
errorNSError *Error object if operation failed

Goals and Reminder Completion Block

void (^)(TSDailyActivityGoals *_Nullable goals, TSDailyActivityReminder *_Nullable reminder, NSError *_Nullable error)
ParameterTypeDescription
goalsTSDailyActivityGoals *Current daily exercise goals
reminderTSDailyActivityReminder *Current reminder configuration
errorNSError *Error object if operation failed

Reminder Completion Block

void (^)(TSDailyActivityReminder *_Nullable reminder, NSError *_Nullable error)
ParameterTypeDescription
reminderTSDailyActivityReminder *Current reminder switches
errorNSError *Error object if operation failed

Today's Activity Completion Block

void (^)(TSActivityDailyModel *_Nullable todayActivity, NSError *_Nullable error)
ParameterTypeDescription
todayActivityTSActivityDailyModel *Today's aggregated activity data
errorNSError *Error object if operation failed

Activity Items Completion Block

void (^)(NSArray<TSDailyActivityItem *> *_Nullable activityItems, NSError *_Nullable error)
ParameterTypeDescription
activityItemsNSArray<TSDailyActivityItem *> *Array of daily activity items
errorNSError *Error object if operation failed

Daily Models Completion Block

void (^)(NSArray<TSActivityDailyModel *> *_Nullable dailyModels, NSError *_Nullable error)
ParameterTypeDescription
dailyModelsNSArray<TSActivityDailyModel *> *Array of daily aggregated activity models
errorNSError *Error object if operation failed

API Reference

Fetch supported daily activity types

Retrieves the list of daily activity types that the device supports and displays.

- (void)fetchSupportedDailyActivityTypesWithCompletion:(void(^)(NSArray<NSNumber *> *_Nullable activityTypes, NSError *_Nullable error))completion;
ParameterTypeDescription
completionvoid (^)(NSArray<NSNumber *> *, NSError *)Completion block returning array of supported activity types

Code Example:

id<TSDailyActivityInterface> dailyActivity = [TopStepComKit sharedInstance].dailyActivity;

[dailyActivity fetchSupportedDailyActivityTypesWithCompletion:^(NSArray<NSNumber *> * _Nullable activityTypes, NSError * _Nullable error) {
if (error) {
TSLog(@"Failed to fetch supported activity types: %@", error.localizedDescription);
return;
}

TSLog(@"Supported activity types: %@", activityTypes);

for (NSNumber *typeNumber in activityTypes) {
TSDailyActivityType type = (TSDailyActivityType)[typeNumber integerValue];
switch (type) {
case TSDailyActivityTypeStepCount:
TSLog(@"Step count supported");
break;
case TSDailyActivityTypeExerciseDuration:
TSLog(@"Exercise duration supported");
break;
default:
break;
}
}
}];

Get current daily exercise goals

Retrieves the user's current daily exercise goals from the device.

- (void)fetchDailyExerciseGoalsWithCompletion:(void(^)(TSDailyActivityGoals *_Nullable goals, NSError *_Nullable error))completion;
ParameterTypeDescription
completionvoid (^)(TSDailyActivityGoals *, NSError *)Completion block returning current goals

Code Example:

id<TSDailyActivityInterface> dailyActivity = [TopStepComKit sharedInstance].dailyActivity;

[dailyActivity fetchDailyExerciseGoalsWithCompletion:^(TSDailyActivityGoals * _Nullable goals, NSError * _Nullable error) {
if (error) {
TSLog(@"Failed to fetch exercise goals: %@", error.localizedDescription);
return;
}

TSLog(@"Current Daily Goals:");
TSLog(@" Steps: %ld", (long)goals.stepsGoal);
TSLog(@" Calories: %ld kcal", (long)goals.caloriesGoal);
TSLog(@" Distance: %ld m", (long)goals.distanceGoal);
TSLog(@" Activity Duration: %ld min", (long)goals.activityDurationGoal);
TSLog(@" Exercise Duration: %ld min", (long)goals.exerciseDurationGoal);
TSLog(@" Exercise Frequency: %ld times", (long)goals.exerciseTimesGoal);
TSLog(@" Activity Frequency: %ld times", (long)goals.activityTimesGoal);
}];

Set daily exercise goals

Writes user's daily exercise goals to the device.

- (void)pushDailyExerciseGoals:(TSDailyActivityGoals *)goalsModel
completion:(TSCompletionBlock)completion;
ParameterTypeDescription
goalsModelTSDailyActivityGoals *Model containing goals to set
completionTSCompletionBlockCompletion block indicating success or failure

Code Example:

id<TSDailyActivityInterface> dailyActivity = [TopStepComKit sharedInstance].dailyActivity;

TSDailyActivityGoals *newGoals = [[TSDailyActivityGoals alloc] init];
newGoals.stepsGoal = 10000;
newGoals.caloriesGoal = 500;
newGoals.distanceGoal = 8000;
newGoals.activityDurationGoal = 30;
newGoals.exerciseDurationGoal = 60;
newGoals.exerciseTimesGoal = 1;
newGoals.activityTimesGoal = 10;

[dailyActivity pushDailyExerciseGoals:newGoals completion:^(NSError * _Nullable error) {
if (error) {
TSLog(@"Failed to set exercise goals: %@", error.localizedDescription);
} else {
TSLog(@"Exercise goals set successfully");
}
}];

Fetch daily exercise goals and reminders in one call

Retrieves both daily exercise goals and their reminder switches in a single request.

- (void)fetchDailyExerciseAllWithCompletion:(void(^)(TSDailyActivityGoals *_Nullable goals,
TSDailyActivityReminder *_Nullable reminder,
NSError *_Nullable error))completion;
ParameterTypeDescription
completionvoid (^)(TSDailyActivityGoals *, TSDailyActivityReminder *, NSError *)Completion block returning goals, reminders, and error

Code Example:

id<TSDailyActivityInterface> dailyActivity = [TopStepComKit sharedInstance].dailyActivity;

[dailyActivity fetchDailyExerciseAllWithCompletion:^(TSDailyActivityGoals * _Nullable goals, TSDailyActivityReminder * _Nullable reminder, NSError * _Nullable error) {
if (error) {
TSLog(@"Failed to fetch goals and reminders: %@", error.localizedDescription);
return;
}

TSLog(@"Goals and Reminders Retrieved:");
TSLog(@"Steps Goal: %ld (Reminder: %@)", (long)goals.stepsGoal, reminder.stepsReminderEnabled ? @"ON" : @"OFF");
TSLog(@"Calories Goal: %ld (Reminder: %@)", (long)goals.caloriesGoal, reminder.caloriesReminderEnabled ? @"ON" : @"OFF");
TSLog(@"Distance Goal: %ld (Reminder: %@)", (long)goals.distanceGoal, reminder.distanceReminderEnabled ? @"ON" : @"OFF");
TSLog(@"Activity Duration Goal: %ld (Reminder: %@)", (long)goals.activityDurationGoal, reminder.activityDurationReminderEnabled ? @"ON" : @"OFF");
TSLog(@"Exercise Duration Goal: %ld (Reminder: %@)", (long)goals.exerciseDurationGoal, reminder.exerciseDurationReminderEnabled ? @"ON" : @"OFF");
}];

Push daily exercise goals and reminders atomically

Writes both goals and reminder switches in a single atomic operation.

- (void)pushDailyExerciseGoals:(TSDailyActivityGoals *)goalsModel
reminder:(TSDailyActivityReminder *)reminder
completion:(TSCompletionBlock)completion;
ParameterTypeDescription
goalsModelTSDailyActivityGoals *Goals model to set
reminderTSDailyActivityReminder *Reminder switches model to set
completionTSCompletionBlockCompletion block indicating success or failure

Code Example:

id<TSDailyActivityInterface> dailyActivity = [TopStepComKit sharedInstance].dailyActivity;

TSDailyActivityGoals *goals = [[TSDailyActivityGoals alloc] init];
goals.stepsGoal = 10000;
goals.caloriesGoal = 500;
goals.distanceGoal = 8000;
goals.activityDurationGoal = 30;
goals.exerciseDurationGoal = 60;
goals.exerciseTimesGoal = 1;
goals.activityTimesGoal = 10;

TSDailyActivityReminder *reminder = [[TSDailyActivityReminder alloc] init];
reminder.stepsReminderEnabled = YES;
reminder.caloriesReminderEnabled = YES;
reminder.distanceReminderEnabled = YES;
reminder.activityDurationReminderEnabled = YES;
reminder.exerciseDurationReminderEnabled = YES;
reminder.exerciseTimesReminderEnabled = YES;
reminder.activityTimesReminderEnabled = YES;

[dailyActivity pushDailyExerciseGoals:goals reminder:reminder completion:^(NSError * _Nullable error) {
if (error) {
TSLog(@"Failed to set goals and reminders: %@", error.localizedDescription);
} else {
TSLog(@"Goals and reminders set successfully");
}
}];

Get current daily exercise reminder switches

Retrieves reminder switches for all exercise goals.

- (void)fetchDailyExerciseReminderConfigWithCompletion:(void(^)(TSDailyActivityReminder *_Nullable reminder, NSError *_Nullable error))completion;
ParameterTypeDescription
completionvoid (^)(TSDailyActivityReminder *, NSError *)Completion block returning reminder configuration

Code Example:

id<TSDailyActivityInterface> dailyActivity = [TopStepComKit sharedInstance].dailyActivity;

[dailyActivity fetchDailyExerciseReminderConfigWithCompletion:^(TSDailyActivityReminder * _Nullable reminder, NSError * _Nullable error) {
if (error) {
TSLog(@"Failed to fetch reminder config: %@", error.localizedDescription);
return;
}

TSLog(@"Current Reminder Settings:");
TSLog(@" Steps Reminder: %@", reminder.stepsReminderEnabled ? @"ON" : @"OFF");
TSLog(@" Calories Reminder: %@", reminder.caloriesReminderEnabled ? @"ON" : @"OFF");
TSLog(@" Distance Reminder: %@", reminder.distanceReminderEnabled ? @"ON" : @"OFF");
TSLog(@" Activity Duration Reminder: %@", reminder.activityDurationReminderEnabled ? @"ON" : @"OFF");
TSLog(@" Exercise Duration Reminder: %@", reminder.exerciseDurationReminderEnabled ? @"ON" : @"OFF");
TSLog(@" Exercise Times Reminder: %@", reminder.exerciseTimesReminderEnabled ? @"ON" : @"OFF");
TSLog(@" Activity Times Reminder: %@", reminder.activityTimesReminderEnabled ? @"ON" : @"OFF");
}];

Set daily exercise reminder switches

Writes reminder switches for all exercise goals.

- (void)pushDailyExerciseReminder:(TSDailyActivityReminder *)reminder
completion:(TSCompletionBlock)completion;
ParameterTypeDescription
reminderTSDailyActivityReminder *Reminder switches model to set
completionTSCompletionBlockCompletion block indicating success or failure

Code Example:

id<TSDailyActivityInterface> dailyActivity = [TopStepComKit sharedInstance].dailyActivity;

TSDailyActivityReminder *reminder = [[TSDailyActivityReminder alloc] init];
reminder.stepsReminderEnabled = YES;
reminder.caloriesReminderEnabled = YES;
reminder.distanceReminderEnabled = NO;
reminder.activityDurationReminderEnabled = YES;
reminder.exerciseDurationReminderEnabled = YES;
reminder.exerciseTimesReminderEnabled = YES;
reminder.activityTimesReminderEnabled = NO;

[dailyActivity pushDailyExerciseReminder:reminder completion:^(NSError * _Nullable error) {
if (error) {
TSLog(@"Failed to set reminders: %@", error.localizedDescription);
} else {
TSLog(@"Reminders set successfully");
}
}];

Synchronize today's daily exercise data

Retrieves the current day's activity data from the device.

- (void)syncTodayDailyExerciseDataCompletion:(void (^)(TSActivityDailyModel *_Nullable todayActivity, NSError *_Nullable error))completion;
ParameterTypeDescription
completionvoid (^)(TSActivityDailyModel *, NSError *)Completion block with today's exercise data

Code Example:

id<TSDailyActivityInterface> dailyActivity = [TopStepComKit sharedInstance].dailyActivity;

[dailyActivity syncTodayDailyExerciseDataCompletion:^(TSActivityDailyModel * _Nullable todayActivity, NSError * _Nullable error) {
if (error) {
TSLog(@"Failed to sync today's data: %@", error.localizedDescription);
return;
}

TSLog(@"Today's Activity Data:");
TSLog(@" Steps: %ld", (long)todayActivity.steps);
TSLog(@" Calories: %ld kcal", (long)todayActivity.calories);
TSLog(@" Distance: %ld m", (long)todayActivity.distance);
TSLog(@" Activity Duration: %ld seconds", (long)todayActivity.activityDuration);
TSLog(@" Activity Times: %ld", (long)todayActivity.activityTimes);
TSLog(@" Exercise Duration: %ld seconds", (long)todayActivity.exercisesDuration);
TSLog(@" Exercise Times: %ld", (long)todayActivity.exercisesTimes);
TSLog(@" Activity Items Count: %lu", (unsigned long)todayActivity.activityItems.count);
}];

Synchronize raw daily activity data within a specified time range

Retrieves historical daily activity data for the specified time range.

- (void)syncRawDataFromStartTime:(NSTimeInterval)startTime
endTime:(NSTimeInterval)endTime
completion:(nonnull void (^)(NSArray<TSDailyActivityItem *> *_Nullable activityItems, NSError *_Nullable error))completion;
ParameterTypeDescription
startTimeNSTimeIntervalStart time timestamp in seconds since 1970
endTimeNSTimeIntervalEnd time timestamp in seconds since 1970
completionvoid (^)(NSArray<TSDailyActivityItem *> *, NSError *)Completion block with activity items

Code Example:

id<TSDailyActivityInterface> dailyActivity = [TopStepComKit sharedInstance].dailyActivity;

NSDate *startDate = [NSDate dateWithTimeIntervalSinceNow:-7*24*3600]; // 7 days ago
NSDate *endDate = [NSDate date]; // Now

[dailyActivity syncRawDataFromStartTime:startDate.timeIntervalSince1970
endTime:endDate.timeIntervalSince1970
completion:^(NSArray<TSDailyActivityItem *> * _Nullable activityItems, NSError * _Nullable error) {
if (error) {
TSLog(@"Failed to sync raw data: %@", error.localizedDescription);
return;
}

TSLog(@"Retrieved %lu activity items", (unsigned long)activityItems.count);

for (TSDailyActivityItem *item in activityItems) {
TSLog(@"Activity Item:");
TSLog(@" Steps: %ld", (long)item.steps);
TSLog(@" Calories: %ld", (long)item.calories);
TSLog(@" Distance: %ld m", (long)item.distance);
TSLog(@" Activity Duration: %ld seconds", (long)item.activityDuration);
TSLog(@" Exercise Duration: %ld seconds", (long)item.exercisesDuration);
}
}];

Synchronize raw daily activity data from a specified start time until now

Retrieves historical daily activity data from the specified start time to the current time.

- (void)syncRawDataFromStartTime:(NSTimeInterval)startTime
completion:(nonnull void (^)(NSArray<TSDailyActivityItem *> *_Nullable activityItems, NSError *_Nullable error))completion;
ParameterTypeDescription
startTimeNSTimeIntervalStart time timestamp in seconds since 1970
completionvoid (^)(NSArray<TSDailyActivityItem *> *, NSError *)Completion block with activity items

Code Example:

id<TSDailyActivityInterface> dailyActivity = [TopStepComKit sharedInstance].dailyActivity;

NSDate *startDate = [NSDate dateWithTimeIntervalSinceNow:-30*24*3600]; // 30 days ago

[dailyActivity syncRawDataFromStartTime:startDate.timeIntervalSince1970
completion:^(NSArray<TSDailyActivityItem *> * _Nullable activityItems, NSError * _Nullable error) {
if (error) {
TSLog(@"Failed to sync raw data: %@", error.localizedDescription);
return;
}

TSLog(@"Retrieved %lu activity items from last 30 days", (unsigned long)activityItems.count);

NSInteger totalSteps = 0;
for (TSDailyActivityItem *item in activityItems) {
totalSteps += item.steps;
}

TSLog(@"Total steps in 30 days: %ld", (long)totalSteps);
TSLog(@"Average steps per day: %ld", (long)(totalSteps / activityItems.count));
}];

Synchronize daily activity data within a specified time range

Retrieves aggregated daily activity data for the specified time range.

- (void)syncDailyDataFromStartTime:(NSTimeInterval)startTime
endTime:(NSTimeInterval)endTime
completion:(nonnull void (^)(NSArray<TSActivityDailyModel *> *_Nullable dailyModels, NSError *_Nullable error))completion;
ParameterTypeDescription
startTimeNSTimeIntervalStart time timestamp in seconds since 1970 (normalized to 00:00:00)
endTimeNSTimeIntervalEnd time timestamp in seconds since 1970 (normalized to 23:59:59)
completionvoid (^)(NSArray<TSActivityDailyModel *> *, NSError *)Completion block with daily models

Code Example:

id<TSDailyActivityInterface> dailyActivity = [TopStepComKit sharedInstance].dailyActivity;

NSDate *startDate = [NSDate dateWithTimeIntervalSinceNow:-7*24*3600]; // 7 days ago
NSDate *endDate = [NSDate date]; // Now

[dailyActivity syncDailyDataFromStartTime:startDate.timeIntervalSince1970
endTime:endDate.timeIntervalSince1970
completion:^(NSArray<TSActivityDailyModel *> * _Nullable dailyModels, NSError * _Nullable error) {
if (error) {
TSLog(@"Failed to sync daily data: %@", error.localizedDescription);
return;
}

TSLog(@"Retrieved %lu days of activity data", (unsigned long)dailyModels.count);

for (TSActivityDailyModel *dailyModel in dailyModels) {
NSDate *date = [NSDate dateWithTimeIntervalSince1970:dailyModel.startTime];
TSLog(@"Date: %@", date);
TSLog(@" Steps: %ld", (long)dailyModel.steps);
TSLog(@" Calories: %ld", (long)dailyModel.calories);
TSLog(@" Distance: %ld m", (long)dailyModel.distance);
TSLog(@" Activity Duration: %ld seconds", (long)dailyModel.activityDuration);
TSLog(@" Activity Times: %ld", (long)dailyModel.activityTimes);
TSLog(@" Exercise Duration: %ld seconds", (long)dailyModel.exercisesDuration);
TSLog(@" Exercise Times: %ld", (long)dailyModel.exercisesTimes);
TSLog(@" Items: %lu", (unsigned long)dailyModel.activityItems.count);
}
}];

Synchronize daily activity data from a specified start time until now

Retrieves aggregated daily activity data from the specified start time to the current time.

- (void)syncDailyDataFromStartTime:(NSTimeInterval)startTime
completion:(nonnull void (^)(NSArray<TSActivityDailyModel *> *_Nullable dailyModels, NSError *_Nullable error))completion;
ParameterTypeDescription
startTimeNSTimeIntervalStart time timestamp in seconds since 1970 (normalized to 00:00:00)
completionvoid (^)(NSArray<TSActivityDailyModel *> *, NSError *)Completion block with daily models

Code Example:

id<TSDailyActivityInterface> dailyActivity = [TopStepComKit sharedInstance].dailyActivity;

NSDate *startDate = [NSDate dateWithTimeIntervalSinceNow:-30*24*3600]; // 30 days ago

[dailyActivity syncDailyDataFromStartTime:startDate.timeIntervalSince1970
completion:^(NSArray<TSActivityDailyModel *> * _Nullable dailyModels, NSError * _Nullable error) {
if (error) {
TSLog(@"Failed to sync daily data: %@", error.localizedDescription);
return;
}

TSLog(@"Retrieved activity data for %lu days", (unsigned long)dailyModels.count);

// Calculate weekly averages
NSInteger totalSteps = 0;
NSInteger totalCalories = 0;

for (TSActivityDailyModel *dailyModel in dailyModels) {
totalSteps += dailyModel.steps;
totalCalories += dailyModel.calories;
}

TSLog(@"Average daily steps: %ld", (long)(totalSteps / dailyModels.count));
TSLog(@"Average daily calories: %ld", (long)(totalCalories / dailyModels.count));
}];

Important Notes

  1. **Time Normalization**: Start and end times in daily data synchronization methods are automatically normalized to day boundaries (00:00:00 and 23:59:59 respectively). Specify time using Unix timestamps (seconds since 1970).

  2. **Data Consistency**: Use fetchDailyExerciseAllWithCompletion: and pushDailyExerciseGoals:reminder:completion: for atomic read/write operations to avoid intermediate inconsistent states when handling both goals and reminders.

  3. **Callback Execution**: All completion blocks are invoked on the main thread, making it safe to directly update UI elements within the completion handlers.

  4. **Activity vs Exercise**: Activity duration tracks all physical movement exceeding a minimum threshold, while exercise duration tracks only dedicated exercise sessions meeting intensity and duration criteria.

  5. **Historical Data Access**: Use syncRawDataFromStartTime:endTime:completion: for detailed item-level data and syncDailyDataFromStartTime:endTime:completion: for aggregated daily summaries. Choose based on your analysis needs.

  6. **Goal Value Ranges**: Adhere to the recommended ranges for each goal type (e.g., 0–100,000 steps, 50–3,000 kcal) to ensure accurate health analysis on the device.

  7. **Reminder Configuration**: Reminder switches are independent of goals. Users