Privacy Policy
Chain of Habits
Overview
Chain of Habits is a habit tracking app focused on daily execution. This policy explains what data the app stores, how it is used, and your choices.
Data We Store
The app stores information needed to provide core functionality, including:
- Habits you create (identity, title, category, notes, schedule, reminder configuration, icon/color, daily target/unit/rule, ordering, and active status).
- Goals you create and linked habit relationships.
- Completion history (date/time, source such as app, widget, sync, or restore, and unit count).
- Settings (appearance, notification, weekly summary, Last Call, and coaching-copy preferences).
- Device-local experiment, feedback-recency, and milestone presentation state used by in-app coaching and celebrations.
- Bounded on-device notification and sync diagnostic history, described below.
How Data Is Used
- To display your habit dashboard, streaks, momentum heatmap, and weekly execution feedback.
- To schedule local notifications and same-day follow-up reminders you request.
- To synchronize supported app data across your devices through Apple CloudKit when iCloud is signed in and available.
- To export and restore your own habit/completion data (CSV) when you choose.
CSV Export and Import
A CSV export contains habits and completion history. It does not contain goals/links; Settings/appearance; experiments/reports; insight snoozes, dismissals, or feedback recency; milestone seen/queue/share presentation state; notification authorization; CloudKit and notification diagnostics; or other device-local records. Pending notifications and completion sync work are derived after import, not restored from CSV.
Import accepts one combined export or exactly one habits CSV plus one completions CSV selected together. The app validates the complete selection, shows a review, and performs a merge-only atomic local update after confirmation. Matching records may be updated and missing records added; unrelated or omitted app records are not deleted. Completion changes remain pending locally and are attempted later when CloudKit sync is enabled and available. Production enables this background sync by default; a successful local import does not confirm upload.
File access is temporary and security scoped to the URLs you select in Apple's document picker. The app copies at most 5 MiB and 100,000 CSV records in aggregate for validation, releases file access on success, error, or cancellation, and does not retain permission to browse the surrounding storage provider. CSV files you export or keep in another app/provider are governed by the privacy and retention choices of that destination.
CloudKit / iCloud Sync
Chain Of Habits saves its working 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 be transmitted to your private iCloud database and synchronized across your devices. The app remains usable when iCloud is signed out, restricted, temporarily unavailable, or offline.
Development and UI-test configurations can explicitly disable CloudKit. CloudKit data handling is governed by Apple's terms and privacy practices. The in-app Cloud Sync Debug view reports the current account and sync status; a local save or CSV import result does not by itself confirm that a cloud upload completed.
On-Device Notification Diagnostics
Version 2.3 records normal reminder scheduling automatically to help investigate missing alerts. The local journal keeps up to 40 operation events and a separately retained latest failure, plus up to 120 distinct normal alert records with planned times, scheduling outcomes, and available observations from the operating system. Repeated rebuilds are coalesced; older entries are removed as these limits are reached. The journal persists between app launches and is not included in CloudKit sync or CSV backups.
Settings → Notification Diagnostics can read notification authorization and delivery settings, pending requests, and retained delivered requests. It also shows app/build and OS information, time zone, aggregate habit/configuration information, controlled sync stage and elapsed time, local reminder status, and safe error domain/code summaries. Passive refresh records observations without requesting notification permission or scheduling reminders. Local reminder scheduling works independently of cloud waits.
Diagnostic history and exported reports omit habit names and notification content. Request correlation uses a local hashed key; raw request identifiers and those correlation hashes are omitted from reports. An accepted scheduling request or a retained delivered entry does not establish that a banner, sound, or Watch alert appeared. Missing entries remain inconclusive.
These reports are not transmitted automatically. You choose whether to copy a report to the clipboard or share it with another app or support recipient. Once you send or save a report, its handling is governed by your chosen recipient or destination. The optional ten-second notification test is a separate, explicit action and does not send a report to the developer.
Data Sharing
We do not sell your data. The app does not use third-party ad networks.
Data may be transmitted to Apple services for the automatic iCloud/CloudKit sync described above and for standard Apple platform services.
Data Retention and Deletion
- Your habit, goal, and completion data is kept until you delete it. Diagnostic history is bounded as described above and older entries can be replaced during normal use.
- You can use Settings → Clear All Data to remove visible habits, goals, completion history, and reset settings locally.
- Inactive habit deletion tombstones and completion sync bookkeeping may remain locally to prevent deleted cloud data from returning; Clear All Data is not an immediate physical purge of every row.
- You can remove the app to delete local data from a device.
- Cloud data may persist according to Apple CloudKit behavior and your iCloud account state.
Children's Privacy
The app is not directed to children under 13 and does not knowingly collect personal information from children.
Changes to This Policy
This policy may be updated from time to time. The “Last updated” date will change when updates are made.
Contact
For privacy questions, contact the developer at:
AppleFeedback@robjoyce.com