Took me some work to find out how this works under macOS (tested with Sonoma beta) but I’m not sure how far back (OS version) this works, and I’m not sure how future proof this is either. It’s not like I found this in the documentation from Apple 😜
So this is info and all at your won risk!
For starters: Launchpad looks at the .app bundle name (the .app directory/package), and pretty much ignores most of the info.plist.
However it DOES stores the .app name in a SQLite database.
You can find the db like so (it has a funky name, different per system/user):
echo /private$(getconf DARWIN_USER_DIR)com.apple.dock.launchpad/db/db
So in my case this results in:
/private/var/folders/m5/trfpp5ld12j55z3_mmqrr_hm0000gn/0/com.apple.dock.launchpad/db/db
Now the funky thing is that my favorite SQLite editor (Free: Valentina Studio) somehow cannot open this, but the command line sqlite CAN …
In Terminal:
sqlite3 /private$(getconf DARWIN_USER_DIR)com.apple.dock.launchpad/db/db
Now on the prompt you can type “.fullschema” which shows the database structure (I removed the triggers and indexes from the output to keep it more readable):
CREATE TABLE dbinfo (key VARCHAR, value VARCHAR);
CREATE TABLE items (rowid INTEGER PRIMARY KEY ASC, uuid VARCHAR, flags INTEGER, type INTEGER, parent_id INTEGER NOT NULL, ordering INTEGER);
CREATE TABLE apps (item_id INTEGER PRIMARY KEY, title VARCHAR, bundleid VARCHAR, storeid VARCHAR,category_id INTEGER, moddate REAL, bookmark BLOB);
CREATE TABLE groups (item_id INTEGER PRIMARY KEY, category_id INTEGER, title VARCHAR);
CREATE TABLE downloading_apps (item_id INTEGER PRIMARY KEY, title VARCHAR, bundleid VARCHAR, storeid VARCHAR, category_id INTEGER, install_path VARCHAR);
CREATE TABLE categories (rowid INTEGER PRIMARY KEY ASC, uti VARCHAR);
CREATE TABLE app_sources (rowid INTEGER PRIMARY KEY ASC, uuid VARCHAR, flags INTEGER, bookmark BLOB, last_fsevent_id INTEGER, fsevent_uuid VARCHAR);
CREATE TABLE image_cache (item_id INTEGER, size_big INTEGER, size_mini INTEGER, image_data BLOB, image_data_mini BLOB);
If you run this select statement
SELECT * FROM apps;
you’ll get a list of apps … AND you can update the title
For example like so:
UPDATE apps SET title='Banana' WHERE item_id=223;
(eg. item_id 223 = ApplePiBaker on my Mac)
When digging through the database I could find “ApplePiBaker” (filed: apps.title) as text only once (which is now “Banana”).
Took me again a bit of testing, but killing the Dock reloads the Launchpad:
killall Dock
Hope this is useful to someone!
Tip:
SQLITE updates can be done straight from the command line, for example:
Find item_id:
sqlite3 /private$(getconf DARWIN_USER_DIR)com.apple.dock.launchpad/db/db "SELECT item_id FROM apps WHERE title LIKE ‘%ApplePiBaker%’;"
Response: 223
And now update that title name:
sqlite3 /private$(getconf DARWIN_USER_DIR)com.apple.dock.launchpad/db/db "UPDATE apps SET title='BananaPiBaker' WHERE item_id=223;"