Skip to main content

Reminders

The TSReminders module provides comprehensive reminder management functionality for smart devices. It allows you to create, retrieve, update, and delete custom reminders while supporting built-in reminder types such as sedentary, drinking water, and taking medicine. This module handles the full lifecycle of reminder management with proper validation and device compatibility.

Prerequisites

  • Device must support reminders functionality
  • Valid connection to the smart device must be established
  • Device firmware must be compatible with the reminder management features

Data Models

TSRemindersModel

Represents a reminder on the device. This class should never be instantiated directly; instances must be obtained through interface methods.

PropertyTypeDescription
reminderIdNSString *Unique identifier for the reminder (auto-assigned by system)
reminderNameNSString *Name of the reminder
isEnabledBOOLIndicates if the reminder is enabled
reminderTypeTSReminderTypeType of the reminder (unknown, sedentary, drinking, medicine, or custom)
repeatDaysTSRemindersRepeatDays of the week the reminder repeats (bitwise options)
timeTypeTSReminderTimeTypeType of time—point or period
startTimeNSIntegerStart time in minutes from midnight (e.g., 360 = 6 AM)
endTimeNSIntegerEnd time in minutes from midnight (e.g., 720 = 12 PM)
intervalNSIntegerInterval between reminders in minutes
timePointsNSArray<NSNumber *> *Array of specific time points in minutes from midnight
notesNSString *Additional notes for the reminder
isLunchBreakDNDEnabledBOOLWhether lunch break do-not-disturb is enabled
lunchBreakDNDStartTimeNSIntegerLunch break DND start time in minutes (recommended: 720 = 12:00)
lunchBreakDNDEndTimeNSIntegerLunch break DND end time in minutes (recommended: 840 = 14:00)

Enumerations

TSReminderType

Specifies the type of reminder.

ValueDescription
TSReminderTypeUnknownUnknown reminder type
TSReminderTypeSedentarySedentary reminder (built-in)
TSReminderTypeDrinkingDrinking water reminder (built-in)
TSReminderTypeTakeMedicineTaking medicine reminder (built-in)
TSReminderTypeCustomCustom reminder

TSRemindersRepeat

Bitwise options for specifying repeat days. Can be combined using bitwise OR operator (|).

ValueDescription
TSRemindersRepeatMondayMonday
TSRemindersRepeatTuesdayTuesday
TSRemindersRepeatWednesdayWednesday
TSRemindersRepeatThursdayThursday
TSRemindersRepeatFridayFriday
TSRemindersRepeatSaturdaySaturday
TSRemindersRepeatSundaySunday
TSRemindersRepeatWorkdayMonday through Friday
TSRemindersRepeatWeekendSaturday and Sunday
TSRemindersRepeatEverydayAll seven days

TSReminderTimeType

Specifies whether the reminder is for a specific point in time or a time period.

ValueDescription
TSReminderTimeTypePeriodPeriod of time (uses startTime, endTime, and interval)
TSReminderTimeTypePointSpecific point in time (uses timePoints)

Callback Types

TSCompletionBlock

typedef void (^TSCompletionBlock)(NSError * _Nullable error);

Completion block for operations that return success/failure status and optional error information.

ParameterTypeDescription
errorNSError * _NullableError object if operation failed; nil if successful

Reminder Template Completion Block

typedef void (^)(TSRemindersModel * _Nullable reminder, NSError * _Nullable error)

Completion block for creating a custom reminder template.

ParameterTypeDescription
reminderTSRemindersModel * _NullableReady-to-use custom reminder model; nil if creation failed
errorNSError * _NullableError object if operation failed; nil if successful

Fetch Reminders Completion Block

typedef void (^)(NSArray<TSRemindersModel *> * _Nullable reminders, NSError * _Nullable error)

Completion block for fetching all reminders.

ParameterTypeDescription
remindersNSArray<TSRemindersModel *> * _NullableArray of reminder objects; nil if fetch failed
errorNSError * _NullableError object if operation failed; nil if successful

API Reference

Get maximum custom reminder count

Returns the maximum number of custom reminders supported by the device.

- (NSInteger)maxSupportedCustomReminderCount;

Parameters

None

Return Value

TypeDescription
NSIntegerMaximum number of custom reminders that can be set on the device

Code Example

id<TSRemindersInterface> remindersInterface = /* obtained from SDK */;
NSInteger maxCount = [remindersInterface maxSupportedCustomReminderCount];
TSLog(@"Device supports maximum %ld custom reminders", (long)maxCount);

Create custom reminder template

Creates a custom reminder template with a valid unique ID and default values.

- (void)createCustomReminderTemplateWithCompletion:(void (^)(TSRemindersModel * _Nullable reminder, NSError * _Nullable error))completion;

Parameters

NameTypeDescription
completionvoid (^)(TSRemindersModel * _Nullable reminder, NSError * _Nullable error)Callback block returning the reminder template or error

Code Example

id<TSRemindersInterface> remindersInterface = /* obtained from SDK */;

[remindersInterface createCustomReminderTemplateWithCompletion:^(TSRemindersModel * _Nullable reminder, NSError * _Nullable error) {
if (error) {
TSLog(@"Failed to create reminder template: %@", error.localizedDescription);
return;
}

// Configure the reminder
reminder.reminderName = @"Drink Water";
reminder.timeType = TSReminderTimeTypePoint;
reminder.timePoints = @[@(360), @(720)]; // 6 AM, 12 PM
reminder.repeatDays = TSRemindersRepeatEveryday;
reminder.isEnabled = YES;

TSLog(@"Created reminder template with ID: %@", reminder.reminderId);
}];

Fetch all reminders

Retrieves all reminder settings from the device.

- (void)fetchAllRemindersWithCompletion:(void (^)(NSArray<TSRemindersModel *> * _Nullable reminders, NSError * _Nullable error))completion;

Parameters

NameTypeDescription
completionvoid (^)(NSArray<TSRemindersModel *> * _Nullable reminders, NSError * _Nullable error)Callback block returning array of reminders or error

Code Example

id<TSRemindersInterface> remindersInterface = /* obtained from SDK */;

[remindersInterface fetchAllRemindersWithCompletion:^(NSArray<TSRemindersModel *> * _Nullable reminders, NSError * _Nullable error) {
if (error) {
TSLog(@"Failed to fetch reminders: %@", error.localizedDescription);
return;
}

for (TSRemindersModel *reminder in reminders) {
TSLog(@"Reminder: %@ (ID: %@, Enabled: %d)", reminder.reminderName, reminder.reminderId, reminder.isEnabled);
}
}];

Replace all reminders

Replaces all existing reminders on the device with the provided array.

- (void)replaceAllReminders:(NSArray<TSRemindersModel *> *)reminders completion:(TSCompletionBlock)completion;

Parameters

NameTypeDescription
remindersNSArray<TSRemindersModel *> *Array of reminder objects to set on the device
completionTSCompletionBlockCallback block returning success status and error information

Code Example

id<TSRemindersInterface> remindersInterface = /* obtained from SDK */;

// Create new reminder array
NSMutableArray<TSRemindersModel *> *newReminders = [NSMutableArray array];

// Fetch existing reminders first (optional, for demonstration)
[remindersInterface fetchAllRemindersWithCompletion:^(NSArray<TSRemindersModel *> * _Nullable existingReminders, NSError * _Nullable error) {
if (!error && existingReminders) {
[newReminders addObjectsFromArray:existingReminders];
}

// Now replace all with the modified array
[remindersInterface replaceAllReminders:newReminders completion:^(NSError * _Nullable error) {
if (error) {
TSLog(@"Failed to replace reminders: %@", error.localizedDescription);
} else {
TSLog(@"Successfully replaced all reminders");
}
}];
}];

Update reminder by ID

Updates an existing reminder or adds it if it does not exist (upsert behavior).

- (void)setReminder:(TSRemindersModel *)reminder completion:(TSCompletionBlock)completion;

Parameters

NameTypeDescription
reminderTSRemindersModel *Reminder model containing the updated information
completionTSCompletionBlockCallback block returning success status and error information

Code Example

id<TSRemindersInterface> remindersInterface = /* obtained from SDK */;

// Create and configure a new reminder
[remindersInterface createCustomReminderTemplateWithCompletion:^(TSRemindersModel * _Nullable reminder, NSError * _Nullable error) {
if (error) {
TSLog(@"Failed to create reminder: %@", error.localizedDescription);
return;
}

// Configure the reminder
reminder.reminderName = @"Take Medicine";
reminder.timeType = TSReminderTimeTypePoint;
reminder.timePoints = @[@(480)]; // 8 AM
reminder.repeatDays = TSRemindersRepeatEveryday;
reminder.isEnabled = YES;
reminder.notes = @"Morning medication";

// Set the reminder on the device
[remindersInterface setReminder:reminder completion:^(NSError * _Nullable setError) {
if (setError) {
TSLog(@"Failed to set reminder: %@", setError.localizedDescription);
} else {
TSLog(@"Successfully set reminder: %@", reminder.reminderName);
}
}];
}];

Delete reminder by ID

Deletes a specific reminder from the device.

- (void)deleteReminderWithId:(NSString *)reminderId completion:(TSCompletionBlock)completion;

Parameters

NameTypeDescription
reminderIdNSString *Unique identifier of the reminder to delete
completionTSCompletionBlockCallback block returning success status and error information

Code Example

id<TSRemindersInterface> remindersInterface = /* obtained from SDK */;

NSString *reminderIdToDelete = @"custom_reminder_001";

[remindersInterface deleteReminderWithId:reminderIdToDelete completion:^(NSError * _Nullable error) {
if (error) {
TSLog(@"Failed to delete reminder: %@", error.localizedDescription);
} else {
TSLog(@"Successfully deleted reminder with ID: %@", reminderIdToDelete);
}
}];

Validate reminder models

Validates an array of reminder models before batch operations.

+ (NSError * _Nullable)validateReminders:(NSArray<TSRemindersModel *> *)reminders;

Parameters

NameTypeDescription
remindersNSArray<TSRemindersModel *> *Array of reminder models to validate

Return Value

TypeDescription
NSError * _NullableFirst error encountered; nil if all models are valid

Code Example

NSMutableArray<TSRemindersModel *> *remindersToValidate = [NSMutableArray array];

// Add reminders to array (obtained from UI or other sources)
// ...

NSError *validationError = [TSRemindersModel validateReminders:remindersToValidate];
if (validationError) {
TSLog(@"Validation failed: %@", validationError.localizedDescription);
} else {
TSLog(@"All reminders are valid");
}

Important Notes

  1. Never instantiate TSRemindersModel directly — Always obtain reminder instances through fetchAllRemindersWithCompletion: or createCustomReminderTemplateWithCompletion: methods.

  2. Custom reminder creation — Always use createCustomReminderTemplateWithCompletion: to ensure the reminder receives a valid system-assigned ID and appropriate default values.

  3. Built-in vs. custom reminders — Built-in reminders (sedentary, drinking water, taking medicine) can only be modified or disabled; they cannot be deleted. Only custom reminders can be permanently deleted.

  4. Upsert behavior — The setReminder: method implements upsert semantics: if a reminder with the specified ID exists, it will be updated; otherwise, a new reminder will be created (subject to device limits).

  5. Time representation — Times are represented in minutes from midnight (0–1439). For example, 360 = 6 AM, 720 = 12 PM, 1080 = 6 PM.

  6. Repeat days usage — Use bitwise OR operator to combine multiple days: TSRemindersRepeatMonday | TSRemindersRepeatWednesday | TSRemindersRepeatFriday.

  7. Time type selection — When timeType is set to TSReminderTimeTypePoint, use the timePoints array; when set to TSReminderTimeTypePeriod, use startTime, endTime, and interval properties.

  8. **Lunch break DND** — The lunch break do-not-disturb feature suppresses reminders during configured hours. Recommended values are 720 (12:00) for start and 840 (14:00) for end.

  9. Device limits — Different device models may support different maximum numbers of custom reminders. Check maxSupportedCustomReminderCount to verify limits before creating new reminders.

  10. Validation before batch operations — Use validateReminders: to validate an array of reminders before calling replaceAllReminders: to improve reliability and provide early error detection.