Help & Support
Chain of Habits
Quick Start
- Tap Add Habit to create your first habit.
- Choose Every day, Weekdays, Weekends, one exact weekday, or a custom set such as Tuesday and Thursday, then set reminder times.
- Tap a binary habit to mark it complete, or tap a daily counter to log one unit. After counter progress begins, use the visible minus button to remove one.
- Use the date picker to backfill previous days when needed.
Core Features
- One-tap completion: Tap again to uncheck if pressed by mistake.
- Goals: Link habits to goals and track weekly support.
- Momentum: The 12-week heatmap and complete-calendar-week feedback show consistency over time. Select a heatmap day for its breakdown.
- Friction alerts: Shows habits that are frequently missed and suggests adjustments.
- Flexible schedules: Use quick Every day, Weekdays, Weekends, and single-day choices; combine specific weekdays; or track weekly, monthly, every-N-days, and N-times-per-week/month habits.
- Optional days: A habit that is not due on the selected day uses lighter text and an explicit Not due label. It does not count against that day's score, but you can still log it.
- Reminder controls: Add precise reminder times and an optional secondary reminder delay that stays within the same local day.
- CSV recovery: Export habit/completion data and restore it later through a validated, merge-only review.
Cloud Sync (CloudKit)
Chain Of Habits saves your data locally first. The production app enables automatic background CloudKit sync by default. When you are signed in to iCloud and CloudKit is available, supported habit, goal, settings, and completion state can sync through your private iCloud database. The app remains usable if iCloud is unavailable or the device is offline.
Development and UI-test builds can explicitly disable CloudKit. Open Settings → Support → View Cloud Sync Debug Info to review the current account and sync status. CSV export and import remain a user-controlled backup and restore path whether CloudKit is available or not.
If the app cannot sync, check:
- You are signed in to iCloud on the device.
- Network access is available.
- View Cloud Sync Debug Info for the app's current account and sync status.
Export, Restore, and Reset
- Export Data (CSV): Settings → Data → Export Data (CSV)
- Import Data (CSV): Settings → Data → Import Data (CSV)
- Clear All Data: Settings → Data → Clear All Data (with confirmation)
Export creates one UTF-8 CSV containing a habits table, one physically blank separator record, and a completions table. Import accepts that combined file, or exactly two files selected together containing one habits table and one completions table. The app identifies tables by exact headers, not filenames.
Included habit data covers identity and text, active/notification state, schedules and every-N anchors, primary/secondary/weekend reminders, sort order, icon/color, and daily counter target/unit/rule. Included completion data covers habit ID, ISO-8601 time, source, and unit count. Goals/links; Settings/appearance; experiments/reports; insight snoozes, dismissals, and feedback recency; milestone seen/queue/share presentation state; notification authorization; CloudKit diagnostics; and other device-local records are not part of the CSV. Pending notifications and completion sync work are derived after import rather than restored from the file.
Before any write, the review shows selected-file classification, active/inactive and completion totals, adds/updates, legacy warnings, merge-only behavior, and exclusions. Confirmation adds or updates imported identities in one atomic local save. It never deletes data merely because it was omitted. Completion changes stay pending locally and are attempted later only when CloudKit sync is enabled and available; the local result never claims that a cloud upload completed. The aggregate limit is 5 MiB and 100,000 CSV records.
Clear All Data removes visible habits, goals, completion history, and resets settings. Inactive habit deletion tombstones and completion sync bookkeeping may remain locally to prevent deleted cloud data from returning; this action is not an immediate physical purge of every row.
Troubleshooting
App launches but no habits appear
Create a habit first using Add Habit. The list is empty until at least one habit exists.
Unexpected friction alert for a new habit
New habits are evaluated from first completion onward. If behavior looks incorrect, update to latest build.
Notifications not firing
- Enable notifications in app settings and iOS settings.
- Ensure at least one reminder time is configured for the habit.
- Secondary reminders only appear after a configured primary reminder and are not scheduled at or after the next local day boundary.
A habit says Not due today
This means the selected date is outside that habit's schedule. Its lighter text is an obligation cue, not a disabled state: you may still mark it complete or log counter progress, and the optional log will not add the habit to that day's due total.
A completion or quick log could not be saved
Keep the app open and read the error shown on screen. A failed counter, widget, or deep-link update does not advance progress or claim success. Retry after checking available device storage and, for cross-device transport, the Cloud Sync Debug status.
Restore an export
- Choose the newest complete combined export, or select its complementary habits and completions files together.
- Check filenames/table classifications, totals, add/update counts, warnings, and exclusions in the review.
- Choose Confirm Import for the local merge. Canceling or any validation error makes no import change.
- Keep Settings open for the result. A successful result means the atomic local restore completed. Completion updates stay pending locally and are attempted only when CloudKit sync is enabled and available.
- Use View Cloud Sync Debug Info to monitor subsequent synchronization.
The system document picker grants temporary access only to files you select. Chain of Habits copies bounded data, releases that access on success, error, or cancellation, and does not keep permission to browse the rest of the provider.
Contact Support
Need help or want to report a bug?
AppleFeedback@robjoyce.com