Re: Ehh, what's up Dock?
Re: Ehh, what's up Dock?
- Subject: Re: Ehh, what's up Dock?
- From: Stuart Ramdeen <email@hidden>
- Date: Fri, 09 Mar 2012 10:48:45 +0000
Brilliant post. Thanks for putting the effort in, I'm sure emmett will come in handy.
Sent from my Spectrum +3
On 9 Mar 2012, at 00:20, Stephane Sudre <email@hidden> wrote:
> A question that comes from time to time on this list is:
>
> How do I add my application to the Dock?
>
> Here is a beginning of an answer.
>
>
> Foreword
> --------
>
>
> Installing items into the user's Dock is either considered bad or OK.
> Personally, I don't care who's right or wrong for the following
> reasons: people complaining about installers adding items into the
> Dock (because it's not the way to do it on the Mac) are the same ones
> who will tell you that iWorks is a great office suite. Guess which
> office suite from a Californian company whose name starts with the
> letter A is installing its applications into the Dock upon
> installation. Let's also forget what happens when you download an
> application from the Mac App Store on Mac OS X v10.6.8.
>
>
> The Problem
> -----------
>
>
> You would like to install your application into the Dock upon
> installation. While it's easy to do it with a mouse (or trackpad),
> it's not so easy to automate this.
>
> As far as I know there is no command line tool in a standard Mac OS X
> system to do this. And there is, for instance, no such action in
> PackageMaker.
>
> Facts
> -----
>
>
> o The list of items of the Dock is saved in the preferences file of
> the Dock in ˜/Library/Preferences/com.apple.dock.plist.
>
> o The format of this property list is something like this:
>
> <dict>
> <key>persistent-apps</key>
> <array>
> <dict>
> <key>GUID</key>
> <integer></integer>
> <key>tile-data</key>
> <dict>
> <key>file-data</key>
> <dict>
> <key>_CFURLAliasData</key>
> <data></data> <--- AliasHandle data
> <key>_CFURLString</key>
> <string></string> <--- Absolute file path or URL
> <key>_CFURLStringType</key>
> <integer></integer> <--- Path type (0: path
> / 15: URL)
> </dict>
> <key>file-label</key>
> <string></string>
> <key>file-mod-date</key>
> <integer></integer> <--- UTCDate
> <key>file-type</key>
> <integer></integer>
> <key>parent-mod-date</key>
> <integer></integer> <--- UTCDate
> </dict>
> <key>tile-type</key>
> <string>file-tile</string>
> </dict>
> ...
> </array>
> <key>peristent-others</key>
> <array>
> ...
> </array>
> ...
> </dict>
>
>
>
> Cheap Solutions
> ---------------
>
>
> o #1: Use the defaults command like too to edit the com.apple.dock.plist file.
>
> This makes sense since, after all, you are looking into modifying
> the preferences of the Dock application.
>
> An example showing how to do this is available on the Mac OS X Hints web site:
>
> http://hints.macworld.com/article.php?story=20040819170450489
>
> $ defaults write com.apple.dock persistent-apps -array-add
> '<dict><key>tile-data</key><dict><key>file-data</key><dict><key>_CFURLString</key><string>/Path/to/the/Program.app</string><key>_CFURLStringType</key><integer>0</integer></dict></dict></dict>'
>
> Followed by:
>
> $ killall Dock
>
> to reflect the change in the Dock.
>
> This probably works fine in most cases and on most Mac OS X
> versions. I haven't tried it myself.
>
> o #2: Edit the plist file directly.
>
> This still makes sense since after all you are editing a property
> list file. The issue is that there's no command line tool available in
> a standard Mac OS X system to do this. You either need to write your
> own, include another one or dig into an Apple installation package
> using one and borrow it or use some features of a scripting language.
>
> Again, after editing the file, you will call:
>
> $ killall Dock
>
> to reflect the change in the Dock.
>
>
> Why do I label these solutions as cheap?
>
> 3 reasons:
>
> - Though the Dock seems to accept new entries with a bunch of missing
> key-values, it's not ideal to have really inconsistent entries into
> the Dock preferences. And good luck with computing the AliasHandle or
> the modification UTCDate of a file from the command line.
>
> - As mentioned in the short Facts paragraph, a file can be referenced
> by either an absolute path or URL. Starting with Mac OS X Lion, the
> _CFURLString regular entries look like this: file://localhost/a/path.
> The defaults or plist editing solution usually still set _CFURLString
> as /a/path
>
> - Calling killall Dock is a bit violent. And Apple does not do it like
> this in the iWork '09 installer. They first send a quit Apple Event to
> the Dock, then wait for the Dock to be relaunched, then stop (SIGSTOP)
> the Dock process, make the modifications and then resume (SIGCONT) the
> process and then kill it. There must be a reason for that.
>
>
> Less Cheap Solutions
> --------------------
>
>
> o #1: Use dockutil
>
> It's somehow funny that when you google for "add items to the dock"
> you don't get dockutil as the top result. Because it's a very good
> solution for this.
>
> As mentioned on its dedicated web page
> (http://code.google.com/p/dockutil/), dockutil is a command line
> utility for managing Mac OS X dock items. It works on Mac OS X v10.4,
> v10.5. I tried it successfully on Mac OS X v10.6 and v10.7. I also
> tried it on the next version of Mac OS X but I can't talk about it.
> You will need to try it on your side to know whether it still works or
> not.
>
> Using dockutil is easy. You do not have to re-invent the wheel, you just call:
>
> dockutil --add /Applications/MyApp.app
>
> and that's all.
>
> It will add entries that are more complete than the cheap solutions
> (it takes care of the file://localhost/ vs / case).
>
> It will kill the Dock for you.
>
> It has a lot of options (not to kill the Dock for instance).
>
> It's free and available under the Apache 2.0 license.
>
> o #2: Use emmett
>
> emmett is a command line tool I wanted to write for a while and
> finally had some spare time to do it. I didn't know about the dockutil
> tool before I had almost completed writing emmett and was checking if
> the "dockutil" name was already used. emmett works on Mac OS X v10.5
> and later.
>
> http://s.sudre.free.fr/Software/DevPotPourri.html
>
> Using emmett is also easy.
>
> emmett add /Applications/MyApp.app
>
> That's all.
>
> It will add entries that are even more complete than the ones made
> by dockutil. It also kill the Dock for you (but not with a killall, it
> does it the way the iWork installer does it).
>
> It has a few options (not to kill the Dock for instance).
>
> It's free and available under the BSD license (the Obj-C/Foundation
> source code is also available under the BSD license).
>
>
> Integration into an installation package
> ----------------------------------------
>
> You can find an example using emmett that covers that for Packages here:
>
> http://s.sudre.free.fr/Software/Packages/Q&A_2.html
>
> If you are using PackageMaker, you can probably get some inspiration from it.
>
>
>
> Hope it can help. If you spot an error, don't hesitate to report it.
>
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Installer-dev mailing list (email@hidden)
> Help/Unsubscribe/Update your Subscription:
>
> This email sent to email@hidden
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Installer-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden