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.
| Property | Type | Description |
|---|---|---|
reminderId | NSString * | Unique identifier for the reminder (auto-assigned by system) |
reminderName | NSString * | Name of the reminder |
isEnabled | BOOL | Indicates if the reminder is enabled |
reminderType | TSReminderType | Type of the reminder (unknown, sedentary, drinking, medicine, or custom) |
repeatDays | TSRemindersRepeat | Days of the week the reminder repeats (bitwise options) |
timeType | TSReminderTimeType | Type of time—point or period |
startTime | NSInteger | Start time in minutes from midnight (e.g., 360 = 6 AM) |
endTime | NSInteger | End time in minutes from midnight (e.g., 720 = 12 PM) |
interval | NSInteger | Interval between reminders in minutes |
timePoints | NSArray<NSNumber *> * | Array of specific time points in minutes from midnight |
notes | NSString * | Additional notes for the reminder |
isLunchBreakDNDEnabled | BOOL | Whether lunch break do-not-disturb is enabled |
lunchBreakDNDStartTime | NSInteger | Lunch break DND start time in minutes (recommended: 720 = 12:00) |
lunchBreakDNDEndTime | NSInteger | Lunch break DND end time in minutes (recommended: 840 = 14:00) |
Enumerations
TSReminderType
Specifies the type of reminder.
| Value | Description |
|---|---|
TSReminderTypeUnknown | Unknown reminder type |
TSReminderTypeSedentary | Sedentary reminder (built-in) |
TSReminderTypeDrinking | Drinking water reminder (built-in) |
TSReminderTypeTakeMedicine | Taking medicine reminder (built-in) |
TSReminderTypeCustom | Custom reminder |
TSRemindersRepeat
Bitwise options for specifying repeat days. Can be combined using bitwise OR operator (|).
| Value | Description |
|---|---|
TSRemindersRepeatMonday | Monday |
TSRemindersRepeatTuesday | Tuesday |
TSRemindersRepeatWednesday | Wednesday |
TSRemindersRepeatThursday | Thursday |
TSRemindersRepeatFriday | Friday |
TSRemindersRepeatSaturday | Saturday |
TSRemindersRepeatSunday | Sunday |
TSRemindersRepeatWorkday | Monday through Friday |
TSRemindersRepeatWeekend | Saturday and Sunday |
TSRemindersRepeatEveryday | All seven days |
TSReminderTimeType
Specifies whether the reminder is for a specific point in time or a time period.
| Value | Description |
|---|---|
TSReminderTimeTypePeriod | Period of time (uses startTime, endTime, and interval) |
TSReminderTimeTypePoint | Specific 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.
| Parameter | Type | Description |
|---|---|---|
error | NSError * _Nullable | Error 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.
| Parameter | Type | Description |
|---|---|---|
reminder | TSRemindersModel * _Nullable | Ready-to-use custom reminder model; nil if creation failed |
error | NSError * _Nullable | Error 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.
| Parameter | Type | Description |
|---|---|---|
reminders | NSArray<TSRemindersModel *> * _Nullable | Array of reminder objects; nil if fetch failed |
error | NSError * _Nullable | Error 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
| Type | Description |
|---|---|
NSInteger | Maximum 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
| Name | Type | Description |
|---|---|---|
completion | void (^)(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
| Name | Type | Description |
|---|---|---|
completion | void (^)(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
| Name | Type | Description |
|---|---|---|
reminders | NSArray<TSRemindersModel *> * | Array of reminder objects to set on the device |
completion | TSCompletionBlock | Callback 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
| Name | Type | Description |
|---|---|---|
reminder | TSRemindersModel * | Reminder model containing the updated information |
completion | TSCompletionBlock | Callback 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
| Name | Type | Description |
|---|---|---|
reminderId | NSString * | Unique identifier of the reminder to delete |
completion | TSCompletionBlock | Callback 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
| Name | Type | Description |
|---|---|---|
reminders | NSArray<TSRemindersModel *> * | Array of reminder models to validate |
Return Value
| Type | Description |
|---|---|
NSError * _Nullable | First 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
-
Never instantiate TSRemindersModel directly — Always obtain reminder instances through
fetchAllRemindersWithCompletion:orcreateCustomReminderTemplateWithCompletion:methods. -
Custom reminder creation — Always use
createCustomReminderTemplateWithCompletion:to ensure the reminder receives a valid system-assigned ID and appropriate default values. -
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.
-
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). -
Time representation — Times are represented in minutes from midnight (0–1439). For example, 360 = 6 AM, 720 = 12 PM, 1080 = 6 PM.
-
Repeat days usage — Use bitwise OR operator to combine multiple days:
TSRemindersRepeatMonday | TSRemindersRepeatWednesday | TSRemindersRepeatFriday. -
Time type selection — When
timeTypeis set toTSReminderTimeTypePoint, use thetimePointsarray; when set toTSReminderTimeTypePeriod, usestartTime,endTime, andintervalproperties. -
**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. -
Device limits — Different device models may support different maximum numbers of custom reminders. Check
maxSupportedCustomReminderCountto verify limits before creating new reminders. -
Validation before batch operations — Use
validateReminders:to validate an array of reminders before callingreplaceAllReminders:to improve reliability and provide early error detection.