I just updated to Sonoma on a Mac Mini that runs all my ad-hoc DIY home automations, and I have a bunch of custom self-made tools for triggering automations based in part on the state of reminders in the Reminders app. All of that stopped working immediately after the update. It took me a day to update my code for the new location of the sqlite reminders files and I made the changes to get my scripts working again, however one remaining problem is that I run an fswatch
from node-red to monitor the database for changes to trigger my automations.
Eventually, with help from stack and perlmonks, I found out that even though the permissions on the full path (via my home directory/Library) to the files is r*x to me and the node-red executable is running as me, I get an Operation not permitted
error when I just try ls
ing the directories leading to the sqlite files.
I read elsewhere that this sort of problem can be solved by granting full disk access to the executables(/processes) that are getting the Operation not permitted
errors. However, I tried this, yet I still get the same error. Do I need to reboot?
Is there some sort of documentation for casual users like myself that just code for themselves that can answer questions like this? The more aggressive Apple gets with security, the safer users are, but the more headaches and bewilderment it causes people like me.
There are a lot of parts to this. First, check out On File System Permissions, which has a bunch of useful backstory.
Second, we don’t support folks reading the Reminders database directly. I mean, it’s your Mac, so you should go to town, but the location and format of that database is not considered API, so this might break at some point in the future.
Third, you can access reminders through the EventKit framework, and that’s going to be more sustainable approach. It’ll also get you out of the Full Disk Access business.
Finally, on the Full Disk Access front, that issue is complex and it very much depends on how the accessing process is started. I’m not familiar with Node-RED or fswatch
, so I can’t offer any insight on that front. The general idea, however, is that you must grant Full Disk Access to the responsible code, which is a term I defined in the above-mentioned post. Tracking down the responsible code can be tricky but, in general, if a process is blocked from accessing something then the responsible code will show up in System Settings > Privacy & Security > Full Disk Access even when no alert is presented.
Share and Enjoy
—
Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"