MacOS – Where does launchpad store folder information? (database, etc?)

folderslaunchpadmacos

So i've been searching around and trying to figure this out but can't seem to.

I know that the launchpad SQLite db is stored at ~/Library/Application Support/Dock/some-uuid.db (ref), but as best I can tell it doesn't seem to include any information about folders created in launchpad.

Does anyone know where this information is stored, and in what format?

Edit: Found the location, details in my answer below. The only bits I can't figure out now are:

  • How to programatically create a new folder and move apps into it (using this db)
  • What the db-shm and db-wal files are used for.
  • Whether ~/Library/Application Support/Dock/some-uuid.db is used at all anymore, or if it was just leftover from an osx upgrade.

Best Answer

Ok, I think i've found it. Turns out that (at least under El Capitan) things are a little different.

This AskDifferent answer by Greg Hacke pointed me in the right direction.

It seems the databases are stored in $TMPDIR/../0/com.apple.dock.launchpad/db/, with the main sqlite db being aptly named db.

(After reading Geoff Hackworth's AskDifferent response, it seems a better way to get the path would be getconf DARWIN_USER_DIR rather than $TMPDIR/../0/)

Editing this with a sqlite GUI showed that the groups table stores the folders, with title holding the folder name.

After making any desired changes, and writing them back to the db, we still need to do a killall Dock to refresh the launchpad screen.

Some observations:

  • There are a number of groups that don't have a title (set to null), so not really sure what they are for.
  • It seems that just creating a new entry doesn't cause a group to show up (maybe because it would be an 'empty folder'?).
    • In this case, how can we create a new folder and move apps into it from the db?
  • By editing the title field in the apps table we can change the display name of the app.