• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Ehh, what's up Dock?
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


  • Follow-Ups:
    • RE: Ehh, what's up Dock?
      • From: Prema Kumar <email@hidden>
References: 
 >Ehh, what's up Dock? (From: Stephane Sudre <email@hidden>)

  • Prev by Date: Re: Ehh, what's up Dock?
  • Next by Date: We have an immediate requirement for an exprienced Mac Packager in India
  • Previous by thread: Re: Ehh, what's up Dock?
  • Next by thread: RE: Ehh, what's up Dock?
  • Index(es):
    • Date
    • Thread