You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(ui): guide macOS users to grant Full Disk Access when files are denied
A TCC denial is invisible from the user's side: the backup "succeeds",
some files just never reach Drive. Add a root-mounted dismissible banner
that latches on the first local.permission_denied activity row, counts
DISTINCT files (a denial is permanent, so the same file is re-reported
every cycle, unbounded), and offers a one-click deep link to the Full
Disk Access pane.
The deep link needs an explicit opener capability scope: opener:default
only permits mailto/tel/http/https, so a custom scheme would throw at
runtime while every mocked test still passed.
Document in README and DESIGN s5.3.3 that APFS snapshots do NOT bypass
TCC, and that an unsigned binary's TCC grant can silently invalidate on
update because macOS binds the grant to the code signature.
macOS TCC ("Transparency, Consent, and Control", the privacy layer) blocks every
175
+
app from reading certain locations no matter what the file permissions say -
176
+
Mail, Messages, Safari data, Photos, and parts of `~/Library`. When Driven hits
177
+
one of these it does not fail the backup: it skips that file, reports it as
178
+
`local.permission_denied` in the activity log, and retries it next cycle. The
179
+
rest of the source backs up normally.
180
+
181
+
To back those files up, grant Driven Full Disk Access:
182
+
183
+
1. Open System Settings > Privacy & Security > Full Disk Access. Driven's
184
+
in-app banner has a button that opens this pane directly; from a terminal
185
+
the equivalent is:
186
+
187
+
```sh
188
+
open 'x-apple.systempreferences:com.apple.preference.security?Privacy_AllFiles'
189
+
```
190
+
191
+
2. Add Driven with the `+` button (or drag `Driven.app` in) and switch it on.
192
+
3. Quit and reopen Driven. A TCC grant only applies to a newly launched
193
+
process, so the running app will keep skipping until you restart it.
194
+
195
+
**A grant can silently stop working after an update, because Driven is
196
+
unsigned.** macOS ties a Full Disk Access grant to the binary's code signature
197
+
(its cdhash), not to its path or name. Driven's V1 builds are not signed with a
198
+
Developer ID, so as far as TCC is concerned each new build is a *different*
199
+
program. After you install an update the grant may quietly stop applying and the
200
+
`local.permission_denied` skips come back, even though Driven still appears in
201
+
the Full Disk Access list with its switch on. The fix is to remove the stale
202
+
Driven entry from that list, re-add the new app, and relaunch. This is a
203
+
consequence of the missing code signature rather than a bug, and it goes away
204
+
once macOS code signing lands (see the caveat below).
205
+
206
+
#### What locked-file backup covers on macOS (and what it does not)
207
+
208
+
Two different problems are easy to confuse here, and only one of them has a
209
+
snapshot-based fix:
210
+
211
+
| Situation | Reported as | Fix |
212
+
|-----------|-------------|-----|
213
+
| The file is held open / busy - a live database, a VM disk, a mail store |`local.file_locked`| Turn on "Back up locked files using an APFS snapshot" in Settings > Rules |
214
+
| macOS privacy protection denies the read |`local.permission_denied`| Grant Full Disk Access (above). Nothing else works. |
215
+
216
+
The APFS snapshot option mounts a read-only APFS local snapshot through a small
217
+
helper that gets administrator access once per session, so Driven can read a
218
+
file that is busy while the app itself stays un-elevated.
219
+
220
+
It does **not** read around a TCC denial. A snapshot mount preserves the
221
+
original file's ownership and the mounted tree is itself subject to TCC. The old
222
+
`-o noowners` trick that did bypass this was CVE-2020-9771, fixed by Apple years
223
+
ago, and is now a pattern endpoint-security tools flag - Driven deliberately
224
+
does not use it. So a TCC-denied file needs Full Disk Access, and no snapshot
225
+
setting substitutes for it.
226
+
172
227
#### macOS auto-updater caveat (V1)
173
228
174
229
Because the macOS build is not signed with a Developer ID in V1, the in-app
0 commit comments