A Few Words on Debugging
Spotlight plugin development can be frustrating because the debugging process isn't always that easy. You have to actually install the plugin and monitor its behavior to determine if it's working, which means extra time copying files around, extra time on the command line, etc. Recall from last time the following tools
mdls: lists the metadata attributes for the specified file
mdfind: finds files matching a given query
mdimport: imports file hierarchies into the metadata datastore
mdutil: manages the metadata stores used by Spotlight
Of these tools, stick mdimport inside of "code" tags to be absolutely vital. For example,
mdimport -d1 ~/Library/StickiesData.aaa provides feedback that tells you whether or not the proper Spotlight plugin can be located by the server—a fair question to ask. Apple has a very good document on debugging Spotlight plugins available here that you should definitely read.
In Apple’s debugging document, you'll see references to a command called
lsregister, which can force the Spotlight server to recognize a bundled Spotlight plugin (like the one just given to you in the "OpenStickies.app"). By default, however, this command is not in your path. Type the following into Terminal to place a soft link to
lsregister in your path.
sudo ln -s /System/Library/Frameworks/ApplicationServices.framework/\ Versions/A/Frameworks/LaunchServices.framework/Versions/A/\ Support/lsregister /usr/bin/lsregister
A Freebie for All of your Hard Work
You may have already noticed an inconvenience. You can't click on the "StickiesDatabase.aaa" file that appears in Spotlight's results and have it open up Stickies, as would be the case for most any other application. This is truly annoying, but nothing a good old-fashioned hack can't fix.
By choosing to "Get Info" on a file, you can set its default application that should open it. The problem then is that there is no default application to do such a thing for type "aaa" files—well not yet. To get Stickies to come front and center when we click on the "StickiesDatabase.aaa" file in Spotlight's search window, we simply need to run a simple AppleScript from within an application bundle. The AppleScript is a one-liner:
tell application "Stickies" to activate
This script opens Stickies if it's not already open, and brings all of its windows to the front, giving us the desired effect even though it's not really "opening" the file at all. All that's left now is to create and associate a bundled utility application that executes the AppleScript with the ".aaa" file type. It's that simple.
Embedding an AppleScript into a Cocoa app is really simple, and you can read about it here. I've used this very approach to create a project called "OpenStickies.app." The project's source is available here.
One thing that I didn't mention is that you can embed Spotlight plugins into application bundles. If you'd like a compiled version of "OpenStickies.app" with the "StickiesImporter" plugin already embedded, you can get it here. You'll need copy it to your "Applications" folder and manually run it once to ensure it is "trusted." Once it's in place, go to your
~/Library/StickiesDatabase.aaa file (which cron should be updating every minute), choose to "Get Info," and set "OpenStickies.app" for its default application. Make sure to check the box that says "Always Open With" to fully automate the process. (Try clicking on “StickiesDatabase.aaa” in Finder to test). Assuming you've made your one-line update with
cron, you're now good to go.
Set the utility application "OpenStickies.app" to open files of type "aaa" (top) so that Stickies will come front and center when you click on "StickiesData.aaa" in the Spotlight search window (bottom).
Let's face it, if you've followed this tutorial, you're up to speed on using Spotlight in your Cocoa apps, you can create custom Spotlight plugins (even for the most contrived situations) and you've enjoyed some good hacking along the way. Bravo.
Matthew Russell is a computer scientist from middle Tennessee; and serves Digital Reasoning Systems as the Director of Advanced Technology. Hacking and writing are two activities essential to his renaissance man regimen.
Return to the Mac DevCenter
2007-02-18 02:01:45 PhilipOrr [View]
2007-02-19 04:55:07 Matthew Russell | [View]
2007-02-19 15:02:28 PhilipOrr [View]
2005-07-21 09:00:17 SADev [View]
2005-07-18 11:02:11 SADev [View]
2005-07-18 06:37:26 SADev [View]
Linker errors ...
2005-07-18 07:56:38 Matthew Russell | [View]
Linker errors ...
2005-07-18 11:00:50 SADev [View]
How to Write a Spotlight Plugin
2005-07-17 19:39:22 [View]