Patch GrowlVoice using Keyboard Maestro to prolong its life
Google recently made some changes to the way Google Voice responds to some requests, and GrowlVoice stopped working.
Update (2014-05-10): There is now a much easier way to do this now. See http://github.com/szhu/fix-growlvoice for instructions on patching this which does not require Keyboard Maestro.
Background: As I understand it, there has never been an official API for Google Voice, so developers have had to figure things out on their own and build a workable solution without the tools they really need. Google has announced plans to integrate Google Voice into Google Hangouts, and the recent change which broke GrowlVoice was part of that. Could GrowlVoice be patched to fix this? Probably, but how long will it be until Google changes something else? And how long will it take Apple to approve the update for the Mac App Store? With no official API for Google Voice, and Google Voice's entire future uncertain, I don't think I'd want to try keeping the app working either if I was the developer.
However, just as clever developers found a way to make Google Voice work without an official API, someone else has figured out how to make Google Voice's current setup work with GrowlVoice, to extend its life, at least until Google changes something else.
Elliot Kroo (@ellkro) came up with an ingenious solution to patch the information that comes from Google Voice so that GrowlVoice can understand it. His instructions can be found at: https://gist.github.com/kroo/11205755.
A big-time hat-tip and thank you to Terry McCall (@hagure) for telling me about Elliot's instructions!
Unfortunately, even after you download the necessary files, this fix requires that you run a Terminal command every time GrowlVoice launches.
You can probably already guess what I thought when I heard that:
"Wait... you have to do something every time something else happens? Can I automate that?"
Spoiler alert: yes. How? Say it with me: Keyboard Maestro.
Here are the (non-automated) steps involved
Before we can automate it, we have to know what steps to take to make it work manually.
Download the files described in the 'gist'
Launch GrowlVoice
Wait for an alert panel that looks like this:
Press OK
Run command
OK, now that we know the steps, we can automate them.
How to do this in Keyboard Maestro
Create a new macro which will run the following commands every time GrowlVoice launches:
"Pause Until" there is a button "OK"
Press "OK" button
Run Terminal commands
Now, that last step is a little tricky because one of those commands has to be run with elevated "permissions" which can be done, but requires some extra work. There are two ways to accomplish this: with AppleScript or with sudo
.
(N.B: Step 3 will also download the necessary files if they are not already installed.)
- AppleScript
However, you have to enter your administrator password every time GrowlVoice launches:
- sudo
/etc/sudoers
file via visudo
But once the initial configuration is done, everything else can be automated, meaning that you do not have to enter your password each time GrowlVoice launches.
This is the line you need to add to /etc/sudoers
:
%admin ALL=NOPASSWD: /Users/luomat/Dropbox/etc/fix-growlvoice/cycript
However, you need to change /Users/luomat/Dropbox/etc/fix-growlvoice/
to the correct path on your Mac.
If you aren't sure what any of that means, use the AppleScript version.
Download
Download and install one of these into Keyboard Maestro:
Whichever one you use, you will have to edit the line in the shell script section:
DIR="$HOME/Dropbox/etc/fix-growlvoice/"
change that to be wherever you want the files to be kept. (If you use the sudo
version, $DIR
should be the folder where the cycript
command is found.)
Regardless of which version you choose, the first time you run it, the necessary files (as referenced in the "gist" above) will be downloaded and installed the directory you set as $DIR
.
It's not a fix, it's a patch
If GrowlVoice's developer doesn't update the app, this patch will only work until Google changes something else, and it will have to be run each time the app launches. It might not be the most elegant solution ever, but it's better than not having GrowlVoice at all.
Again my thanks to Elliot Kroo (@ellkro) and Terry McCall (@hagure). Some days I really love the Internet.