Alright. I'm continuing to find ways in which Sonoma broke various automations I have. I just discovered that the following command:
quit app "/Applications/Safari.app"
...no longer works in Sonoma. You have to change it to something like:
quit app "Safari.app"
or
quit app "Safari"
Could either of you point me to user-level release notes for changes to AppleScript? I doubt those exist, but it doesn't hurt to ask.
I really wish Apple would provide the bare minimum of a heads up in their release notes when they do things that will break users' scripts, especially since AppleScript was clearly designed to make scripting accessible to regular users.
Post
Replies
Boosts
Views
Activity
That all makes sense. There might be an easier solution however. I haven't looked through the code in red.js yet. (I just know that it's that script that launches node-red.) but in the same directory where red.js is, there's a bin dir with 1 executable in it named node-red-pi. With any luck, that's the "node-red executable" and red.js just runs it with params or something.
Regarding developing for just myself... I had thought about putting all this in a github repo, but RN, there are too many disparate and diverse dependencies: node-red flows, a custom Perl module that I use with all my command line scripts that I never released as its own thing (it's the one that was trying to glob the SQLite files that was failing), webhook-relay, multiple shortcuts and Perl scripts, fswatch, a second node instance on a raspberry pi that's involved, an old Wemo motion sensor, a dependency on iCloud Drive in order to synch config files, multiple apple scripts, and a stereo connected to the Mac... and probably a half dozen other things I'm not thinking about. I futz with things now and again to refine it. It's been surprisingly stable for years, given all the parts that could fail.
I kind of think of myself as a sort of doc brown automation (and reminders) hobbyist. Every DIY home automation platform is subject to failure when reverse engineered proprietary systems change, such as in this case. The DIY community is used to that sort of thing. One such tool I developed around 2019-ish was a node red node that used the undocumented Life360 API. A number of other home automation platforms also had their own versions for integrating Life360, and maybe about a year ago now, Life360 essentially cut off public access to their API. The DIY community tried for awhile to work around it to no avail. So we're all used to being beholden to the companies that are trying to make a buck. We all had to discontinue our Life360 interfaces.
I have often thought that I would at least release components of my system, but the only thing that holds me back is how many other plates I have spinning in the air right now. I can't even make time to blog about this stuff on my blog. I was thinking though, that this experience here might be worth a blog post at least.
I did resolve to make a change to the one Perl module that I have been developing since 1999 and never released as its own thing: CommandLineInterface.pm. Someone on stack pointed out that if I provide a specific parameter to the glob method I use for resolving file globs, I would have seen the operation not permitted error. I have been meaning to release that module for years. The only thing that holds me back with that particular component is that since I started it in 1999, there is a ton of poorly written legacy code in it. I started learning Perl in 1999. I've made tons of improvements to it along the way, and added every conceivable test to harden it, but it's still a bit of a mess.
This was very informative. Thanks so much for your response. I was able to solve my problem by granting full disk access to /usr/local/bin/node. I'll try and refine that access later, but it does prompt a follow-up question...
My initial naive attempt was to grant access to the script red.js that is what is used to launch Node-RED. I get that the node executable in the shebang at the top is what would need access. That makes sense. I feel pretty dumb for having tried to add the script first. I should have realized that on my first attempt, but I was just being hasty.
However, granting access to that executable means any node script has access, not just Node-RED.
So my next question is, is it theoretically possible to grant access to the specific Node-launched process (e.g. for Node-RED) via the disk access system settings pane, if all I have is a script for creating that child-process? I expect not, but I'd just like to see if you can confirm that.
It goes without saying that me accessing the sqlite files is not supported, though I understand that that's a disclaimer you need to make. Regarding EventKit, I assume it would have the same downsides (that lead me to figure out how to access the DB directly) that AppleScript and Shortcuts has (the main one being that it is prohibitively slow if you have a large reminders database, but also issues with not returning reminder in sub-lists)?
Incidentally, my sqlite queries run in a fraction of a second whereas just opening the Reminders app to get the same info freezes it for what feels like 10 seconds and half the time results in the app crashing, so I just make webhook calls to node-red to make the sqlite query. And if I ever need to change a reminder, I use an applescript that makes select queries and then uses sported AppleScript commands to make the modifications.
Even if EventKit doesn't come with the problems I've had with AppleScript and Shortcuts, I would expect that the learning curve would be a time-prohibitive investment for me, because the closest I've come to Apple app development was code-signing a Java app and messing with containerizing it. I'll keep the EventKit suggestion in my back pocket the next time a dramatic change is made to the reminders architecture. This change to Reminders however seems at the moment to just have been a handful of field changes (at least for the fields I use) and a splitting of the table to store list metadata and reminders data into 2 separate tables, so it didn't take long to make the necessary updates. I'll find out later if I need to make more updates now that I can run my reminder automations.
Thanks again!
The proposed solution doesn't work. toggling off listen for her siri doesn't do anything. Siri still activates if you say "hey siri". This is much more problematic than the description states too, because my wife's phone's response to "hey siri" somehow intercepts my command to my phone and she always dismisses it because she's actively using her phone, which means my commands end up never being acted upon. She doesn't want "hey siri" active on her phone, but there's no way to get it to stop.
I'm having a similar issue, but with python and SightHound Video:
Termination Reason: Namespace DYLD, Code 1 Library missing
Library not loaded: /System/Library/Frameworks/Python.framework/Versions/2.7/Python
Referenced from: <3E3308A2-B927-3671-9010-C6850EB7445E> /Applications/Sighthound Video.app/Contents/MacOS/Sighthound Video
Reason: tried: '/System/Library/Frameworks/Python.framework/Versions/2.7/Python' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/System/Library/Frameworks/Python.framework/Versions/2.7/Python' (no such file), '/System/Library/Frameworks/Python.framework/Versions/2.7/Python' (no such file, not in dyld cache), '/Library/Frameworks/Python.framework/Versions/2.7/Python' (no such file)
Glad your issue resolved itself. I assume you are using get contents of URL to make a webhook call or something, because that action by itself doesn't really do anything when the phone is locked.
For timed webhook calls, I usually use either a crib job or a node-red workflow on my computer, which would be more reliable.
I do have some Siri automations and I can say that there are some specific actions that will not run when the phone is locked. Also, just a heads up, if your phone battery is marked as "degraded performance", an AI will randomly decide to power down your phone over night, which will prevent automations from running. (I mitigated this with automations that control a smart outlet that prevents my phone from getting to 100% charge.)
First, I am guessing here, but I suspect you may not be familiar with git. It's a revision control system. It stores every state your code has ever been in. It allows you to go back in time to see code you've removed. But the biggest advantage of git is branching. You can make a branch and try out some code changes to see if they work and if they do, you can merge the code into your main branch.
Then comes GitHub. GitHub is basically a "social coding" platform. Since it's backed by git, all those experimental branches that you can create, others can create as well. They can copy ("fork") your project and make changes. And they can submit those changes to your repository as a "pull request" and you can review them and decide whether to accept ("pull/merge") those changes into your main branch.
To me, that's the biggest advantage. It allows people who have an interest in your project to contribute to its development.
There are tons of other advantages. Continuous integration, code review interfaces, tagging releases, issue tracking, etc. you just have to get used to the idea that it's open source. Anyone could copy your project and diverge (e.g. I forked an RC car controller interface and changed it to control my Bose stereo), so it's important to carefully select the license you want and include it in your repo (e.g. GPL 3.0). It dictates what people are allowed to do with your code.
One other advantage I just thought of... if a developer stops supporting their product and keeping it up to date, any one can jump in and carry the torch by forking the project and maintaining it.
Is there something else you have to do, like log out/in, reboot, or something? Because I tried this and I still get the bus error.
I appear to have this same issue. I wrote an ApplesScript (in Apple's Script Editor) to export my reminders to a json file for use in automations. I want to run it on a cron job using the osascript command line tool, but I always get:
/Users/robleach/Temporary/synchReminders.scpt: execution error: Reminders got an error: AppleEvent timed out. (-1712)
And I have similar messages in the console:
error 19:33:49.628309-0400 tccd Refusing client without path (from responsibility_get_responsible_audit_token_for_audit_token) PID[1422]: (#3) No such process
error 19:33:49.628370-0400 tccd Refusing TCCAccessRequest for service kTCCServiceReminders from invalid client with pid 1422
I wrote a test version of the script that is 3 lines and generates that error when run via osascript:
tell application "Reminders"
set allRems to (properties of every reminder whose completed is false)
end tell
Anyone know how to get this to work? In System Preferences>Security & Privacy>Reminders, osascript is not there, nor do I have ± buttons to add it.