Add multiple macOS Fleet-maintained apps (#37101)
This pull request adds support for several new macOS applications to the maintained apps system. It introduces metadata and installer information for each app, including their categories, installation formats, and descriptions. The changes affect both the input definitions and the generated output listings, ensuring these apps are now recognized and manageable within the platform. **New application support:** * Added metadata and installation details for the following apps in the `ee/maintained-apps/inputs/homebrew` directory: FileMaker Pro, NordPass, OBS, Obsidian, OrbStack, pgAdmin4, RapidAPI, Royal TSX, Shottr, Splashtop Business, Splashtop Streamer, Stats, Sublime Merge, Surfshark, and Suspicious Package. [[1]](diffhunk://#diff-4110aafedd820ab411c58a2d1d6aa0dd6280e5f9462784933e351ac50e707180R1-R8) [[2]](diffhunk://#diff-58c420dc373e687e3fa2c3203279266db3b53ddbf8f785bd0fe81c302b391b03R1-R8) [[3]](diffhunk://#diff-a3be001759cc20b5b2beb576815bc7bab7d4a96e633462885b549d9ae16d81d7R1-R8) [[4]](diffhunk://#diff-3719ec4aede4178b68f34f4873badcf791b475f2d96dc98cb46072d22104aa7bR1-R8) [[5]](diffhunk://#diff-ba91b6976eae0e27e6f7ab7a169c493943011be440ad98028468c826e47b1d26R1-R8) [[6]](diffhunk://#diff-8f07dada0c342e599ff8b3fe14a3db9d35af2823edf15974b1f7e944988a8b3eR1-R8) [[7]](diffhunk://#diff-3dfe9b210eaf4845c66a78bac05ce92fa1b49f6e88ed58507571efcf38100e11R1-R8) [[8]](diffhunk://#diff-cd74cef2783aac3981106bf37145df1f7dddc6764f525ba796e49a14088b8f7eR1-R8) [[9]](diffhunk://#diff-991e41b0299e0199ef9935e25962e96fb6869619f91385f42559658cb354e15cR1-R8) [[10]](diffhunk://#diff-c80d444ade7092005119d3f9a49903fb9b9f680e1c8d4d2c119f7b25db69531bR1-R8) [[11]](diffhunk://#diff-8645def0d5c629d7814deb463500b0f54422b8d25f9ff8d9ecf26e908d9e5bf5R1-R8) [[12]](diffhunk://#diff-c655bdf41c305040cf0b1694fd40a3fac6d63e9b4e0a22dbb0fa0def502c32aaR1-R8) [[13]](diffhunk://#diff-b2549d65cd0dd12e9554dc82123b5935eff0673a76c631064f4a30eb088698dbR1-R8) [[14]](diffhunk://#diff-858e6b00e0f8ae199231d5cb1fb40f23a8e554fe8e3b3f5e0d097846e98bd4f4R1-R8) [[15]](diffhunk://#diff-a1ab3a19c9c8fd3a677e28bdd41f39fdc085b39935a85b44984dd3d886870cadR1-R8) **Output listings update:** * Updated `ee/maintained-apps/outputs/apps.json` to include the new apps with their names, slugs, platforms, unique identifiers, and descriptions, making them available for discovery and management. [[1]](diffhunk://#diff-4c1446cfc02c6bb0bda874481e333c65b84e184fcea52f656b49a6489f73c9c2R564-R570) [[2]](diffhunk://#diff-4c1446cfc02c6bb0bda874481e333c65b84e184fcea52f656b49a6489f73c9c2R942-R948) [[3]](diffhunk://#diff-4c1446cfc02c6bb0bda874481e333c65b84e184fcea52f656b49a6489f73c9c2R984-R997) [[4]](diffhunk://#diff-4c1446cfc02c6bb0bda874481e333c65b84e184fcea52f656b49a6489f73c9c2R1026-R1032) [[5]](diffhunk://#diff-4c1446cfc02c6bb0bda874481e333c65b84e184fcea52f656b49a6489f73c9c2R1047-R1053) [[6]](diffhunk://#diff-4c1446cfc02c6bb0bda874481e333c65b84e184fcea52f656b49a6489f73c9c2R1131-R1137) [[7]](diffhunk://#diff-4c1446cfc02c6bb0bda874481e333c65b84e184fcea52f656b49a6489f73c9c2R1159-R1165) [[8]](diffhunk://#diff-4c1446cfc02c6bb0bda874481e333c65b84e184fcea52f656b49a6489f73c9c2R1187-R1193) [[9]](diffhunk://#diff-4c1446cfc02c6bb0bda874481e333c65b84e184fcea52f656b49a6489f73c9c2R1236-R1270) [[10]](diffhunk://#diff-4c1446cfc02c6bb0bda874481e333c65b84e184fcea52f656b49a6489f73c9c2R1285-R1298) **Installer and uninstaller scripts:** * Added detailed versioning and installation/uninstallation scripts for FileMaker Pro in `ee/maintained-apps/outputs/filemaker-pro/darwin.json`, including script references and SHA256 checksum for integrity verification.
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"name": "FileMaker Pro",
|
||||
"unique_identifier": "com.filemaker.client.pro12",
|
||||
"token": "filemaker-pro",
|
||||
"installer_format": "dmg",
|
||||
"slug": "filemaker-pro/darwin",
|
||||
"default_categories": ["Developer tools"]
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"name": "NordPass",
|
||||
"unique_identifier": "com.nordsec.nordpass",
|
||||
"token": "nordpass",
|
||||
"installer_format": "dmg",
|
||||
"slug": "nordpass/darwin",
|
||||
"default_categories": ["Productivity"]
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"name": "OBS",
|
||||
"unique_identifier": "com.obsproject.obs-studio",
|
||||
"token": "obs",
|
||||
"installer_format": "dmg",
|
||||
"slug": "obs/darwin",
|
||||
"default_categories": ["Productivity"]
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"name": "Obsidian",
|
||||
"unique_identifier": "md.obsidian",
|
||||
"token": "obsidian",
|
||||
"installer_format": "dmg",
|
||||
"slug": "obsidian/darwin",
|
||||
"default_categories": ["Productivity"]
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"name": "OrbStack",
|
||||
"unique_identifier": "dev.kdrag0n.MacVirt",
|
||||
"token": "orbstack",
|
||||
"installer_format": "dmg",
|
||||
"slug": "orbstack/darwin",
|
||||
"default_categories": ["Developer tools"]
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"name": "pgAdmin4",
|
||||
"unique_identifier": "org.pgadmin.pgadmin4",
|
||||
"token": "pgadmin4",
|
||||
"installer_format": "dmg",
|
||||
"slug": "pgadmin4/darwin",
|
||||
"default_categories": ["Developer tools"]
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"name": "RapidAPI",
|
||||
"unique_identifier": "com.luckymarmot.Paw",
|
||||
"token": "rapidapi",
|
||||
"installer_format": "zip",
|
||||
"slug": "rapidapi/darwin",
|
||||
"default_categories": ["Developer tools"]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "Royal TSX",
|
||||
"unique_identifier": "com.lemonmojo.RoyalTSX.App",
|
||||
"token": "royal-tsx",
|
||||
"installer_format": "dmg",
|
||||
"slug": "royal-tsx/darwin",
|
||||
"default_categories": ["Productivity"],
|
||||
"install_script_path": "ee/maintained-apps/inputs/homebrew/scripts/royal-tsx-install.sh"
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
#!/bin/sh
|
||||
|
||||
# variables
|
||||
APPDIR="/Applications/"
|
||||
TMPDIR=$(dirname "$(realpath $INSTALLER_PATH)")
|
||||
|
||||
# functions
|
||||
|
||||
quit_application() {
|
||||
local bundle_id="$1"
|
||||
local timeout_duration=10
|
||||
|
||||
# check if the application is running
|
||||
if ! osascript -e "application id \"$bundle_id\" is running" 2>/dev/null; then
|
||||
return
|
||||
fi
|
||||
|
||||
local console_user
|
||||
console_user=$(stat -f "%Su" /dev/console)
|
||||
if [[ $EUID -eq 0 && "$console_user" == "root" ]]; then
|
||||
echo "Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'."
|
||||
return
|
||||
fi
|
||||
|
||||
echo "Quitting application '$bundle_id'..."
|
||||
|
||||
# try to quit the application within the timeout period
|
||||
local quit_success=false
|
||||
SECONDS=0
|
||||
while (( SECONDS < timeout_duration )); do
|
||||
if osascript -e "tell application id \"$bundle_id\" to quit" >/dev/null 2>&1; then
|
||||
if ! pgrep -f "$bundle_id" >/dev/null 2>&1; then
|
||||
echo "Application '$bundle_id' quit successfully."
|
||||
quit_success=true
|
||||
break
|
||||
fi
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
|
||||
if [[ "$quit_success" = false ]]; then
|
||||
echo "Application '$bundle_id' did not quit."
|
||||
fi
|
||||
}
|
||||
|
||||
# extract contents
|
||||
# Use 'yes' to automatically accept license agreement when mounting DMG
|
||||
# This replicates Homebrew's behavior for DMG files with license agreements
|
||||
MOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)
|
||||
yes | hdiutil attach -plist -nobrowse -readonly -mountpoint "$MOUNT_POINT" "$INSTALLER_PATH" || exit 1
|
||||
sudo cp -R "$MOUNT_POINT"/* "$TMPDIR"
|
||||
hdiutil detach "$MOUNT_POINT" || true
|
||||
|
||||
# copy to the applications folder
|
||||
quit_application 'com.lemonmojo.RoyalTSX.App'
|
||||
if [ -d "$APPDIR/Royal TSX.app" ]; then
|
||||
sudo mv "$APPDIR/Royal TSX.app" "$TMPDIR/Royal TSX.app.bkp"
|
||||
fi
|
||||
sudo cp -R "$TMPDIR/Royal TSX.app" "$APPDIR"
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"name": "Shottr",
|
||||
"unique_identifier": "cc.ffitch.shottr",
|
||||
"token": "shottr",
|
||||
"installer_format": "dmg",
|
||||
"slug": "shottr/darwin",
|
||||
"default_categories": ["Productivity"]
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"name": "Splashtop Business",
|
||||
"unique_identifier": "com.splashtop.stb.macosx",
|
||||
"token": "splashtop-business",
|
||||
"installer_format": "dmg",
|
||||
"slug": "splashtop-business/darwin",
|
||||
"default_categories": ["Productivity"]
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"name": "Splashtop Streamer",
|
||||
"unique_identifier": "com.splashtop.Splashtop-Streamer",
|
||||
"token": "splashtop-streamer",
|
||||
"installer_format": "dmg",
|
||||
"slug": "splashtop-streamer/darwin",
|
||||
"default_categories": ["Productivity"]
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"name": "Stats",
|
||||
"unique_identifier": "eu.exelban.Stats",
|
||||
"token": "stats",
|
||||
"installer_format": "dmg",
|
||||
"slug": "stats/darwin",
|
||||
"default_categories": ["Productivity"]
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"name": "Sublime Merge",
|
||||
"unique_identifier": "com.sublimemerge",
|
||||
"token": "sublime-merge",
|
||||
"installer_format": "zip",
|
||||
"slug": "sublime-merge/darwin",
|
||||
"default_categories": ["Developer tools"]
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"name": "Surfshark",
|
||||
"unique_identifier": "com.surfshark.vpnclient.macos.direct",
|
||||
"token": "surfshark",
|
||||
"installer_format": "dmg",
|
||||
"slug": "surfshark/darwin",
|
||||
"default_categories": ["Productivity"]
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"name": "Suspicious Package",
|
||||
"unique_identifier": "com.mothersruin.SuspiciousPackage",
|
||||
"token": "suspicious-package",
|
||||
"installer_format": "dmg",
|
||||
"slug": "suspicious-package/darwin",
|
||||
"default_categories": ["Developer tools"]
|
||||
}
|
||||
@@ -561,6 +561,13 @@
|
||||
"unique_identifier": "Figma",
|
||||
"description": "Figma is a collaborative design tool for teams to create, prototype, and share designs in real time."
|
||||
},
|
||||
{
|
||||
"name": "FileMaker Pro",
|
||||
"slug": "filemaker-pro/darwin",
|
||||
"platform": "darwin",
|
||||
"unique_identifier": "com.filemaker.client.pro12",
|
||||
"description": "FileMaker Pro is a relational database and rapid application development platform."
|
||||
},
|
||||
{
|
||||
"name": "Mozilla Firefox",
|
||||
"slug": "firefox/darwin",
|
||||
@@ -932,6 +939,13 @@
|
||||
"unique_identifier": "com.oracle.workbench.MySQLWorkbench",
|
||||
"description": "MySQL Workbench is a visual tool to design, develop and administer MySQL servers."
|
||||
},
|
||||
{
|
||||
"name": "NordPass",
|
||||
"slug": "nordpass/darwin",
|
||||
"platform": "darwin",
|
||||
"unique_identifier": "com.nordsec.nordpass",
|
||||
"description": "NordPass is a password manager."
|
||||
},
|
||||
{
|
||||
"name": "NordVPN",
|
||||
"slug": "nordvpn/darwin",
|
||||
@@ -967,6 +981,20 @@
|
||||
"unique_identifier": "com.github.macadmins.Nudge",
|
||||
"description": "Nudge is an application for enforcing OS updates."
|
||||
},
|
||||
{
|
||||
"name": "OBS",
|
||||
"slug": "obs/darwin",
|
||||
"platform": "darwin",
|
||||
"unique_identifier": "com.obsproject.obs-studio",
|
||||
"description": "OBS is open-source software for live streaming and screen recording."
|
||||
},
|
||||
{
|
||||
"name": "Obsidian",
|
||||
"slug": "obsidian/darwin",
|
||||
"platform": "darwin",
|
||||
"unique_identifier": "md.obsidian",
|
||||
"description": "Obsidian is a knowledge base that works on top of a local folder of plain text Markdown files."
|
||||
},
|
||||
{
|
||||
"name": "OmniGraffle",
|
||||
"slug": "omnigraffle/darwin",
|
||||
@@ -995,6 +1023,13 @@
|
||||
"unique_identifier": "com.operasoftware.Opera",
|
||||
"description": "Opera is a web browser."
|
||||
},
|
||||
{
|
||||
"name": "OrbStack",
|
||||
"slug": "orbstack/darwin",
|
||||
"platform": "darwin",
|
||||
"unique_identifier": "dev.kdrag0n.MacVirt",
|
||||
"description": "OrbStack is a replacement for Docker Desktop."
|
||||
},
|
||||
{
|
||||
"name": "P4V",
|
||||
"slug": "p4v/darwin",
|
||||
@@ -1009,6 +1044,13 @@
|
||||
"unique_identifier": "com.parallels.desktop.console",
|
||||
"description": "Parallels Desktop is virtualization software."
|
||||
},
|
||||
{
|
||||
"name": "pgAdmin4",
|
||||
"slug": "pgadmin4/darwin",
|
||||
"platform": "darwin",
|
||||
"unique_identifier": "org.pgadmin.pgadmin4",
|
||||
"description": "pgAdmin4 is an administration and development platform for PostgreSQL."
|
||||
},
|
||||
{
|
||||
"name": "PhpStorm",
|
||||
"slug": "phpstorm/darwin",
|
||||
@@ -1086,6 +1128,13 @@
|
||||
"unique_identifier": "io.rancherdesktop.app",
|
||||
"description": "Rancher Desktop is an app for kubernetes and container management on the desktop."
|
||||
},
|
||||
{
|
||||
"name": "RapidAPI",
|
||||
"slug": "rapidapi/darwin",
|
||||
"platform": "darwin",
|
||||
"unique_identifier": "com.luckymarmot.Paw",
|
||||
"description": "RapidAPI is an HTTP client that helps testing and describing APIs."
|
||||
},
|
||||
{
|
||||
"name": "Raycast",
|
||||
"slug": "raycast/darwin",
|
||||
@@ -1107,6 +1156,13 @@
|
||||
"unique_identifier": "com.jetbrains.rider",
|
||||
"description": "Rider is a .NET IDE by JetBrains."
|
||||
},
|
||||
{
|
||||
"name": "Royal TSX",
|
||||
"slug": "royal-tsx/darwin",
|
||||
"platform": "darwin",
|
||||
"unique_identifier": "com.lemonmojo.RoyalTSX.App",
|
||||
"description": "Royal TSX is a remote management solution."
|
||||
},
|
||||
{
|
||||
"name": "RubyMine",
|
||||
"slug": "rubymine/darwin",
|
||||
@@ -1128,6 +1184,13 @@
|
||||
"unique_identifier": "com.northpolesec.santa",
|
||||
"description": "Santa is a binary authorization system for macOS."
|
||||
},
|
||||
{
|
||||
"name": "Shottr",
|
||||
"slug": "shottr/darwin",
|
||||
"platform": "darwin",
|
||||
"unique_identifier": "cc.ffitch.shottr",
|
||||
"description": "Shottr is a screenshot measurement and annotation tool."
|
||||
},
|
||||
{
|
||||
"name": "Signal",
|
||||
"slug": "signal/darwin",
|
||||
@@ -1170,6 +1233,20 @@
|
||||
"unique_identifier": "com.torusknot.SourceTreeNotMAS",
|
||||
"description": "SourceTree is a graphical client for Git version control."
|
||||
},
|
||||
{
|
||||
"name": "Splashtop Business",
|
||||
"slug": "splashtop-business/darwin",
|
||||
"platform": "darwin",
|
||||
"unique_identifier": "com.splashtop.stb.macosx",
|
||||
"description": "Splashtop Business is remote access software."
|
||||
},
|
||||
{
|
||||
"name": "Splashtop Streamer",
|
||||
"slug": "splashtop-streamer/darwin",
|
||||
"platform": "darwin",
|
||||
"unique_identifier": "com.splashtop.Splashtop-Streamer",
|
||||
"description": "Splashtop Streamer is used to connect to and control computers."
|
||||
},
|
||||
{
|
||||
"name": "Spotify",
|
||||
"slug": "spotify/darwin",
|
||||
@@ -1177,6 +1254,20 @@
|
||||
"unique_identifier": "com.spotify.client",
|
||||
"description": "Spotify is a music streaming app."
|
||||
},
|
||||
{
|
||||
"name": "Stats",
|
||||
"slug": "stats/darwin",
|
||||
"platform": "darwin",
|
||||
"unique_identifier": "eu.exelban.Stats",
|
||||
"description": "Stats is a system monitor for the menu bar."
|
||||
},
|
||||
{
|
||||
"name": "Sublime Merge",
|
||||
"slug": "sublime-merge/darwin",
|
||||
"platform": "darwin",
|
||||
"unique_identifier": "com.sublimemerge",
|
||||
"description": "Sublime Merge is a git client."
|
||||
},
|
||||
{
|
||||
"name": "Sublime Text",
|
||||
"slug": "sublime-text/darwin",
|
||||
@@ -1191,6 +1282,20 @@
|
||||
"unique_identifier": "Sublime Text",
|
||||
"description": "Sublime Text is a text editor for code, markup, and prose."
|
||||
},
|
||||
{
|
||||
"name": "Surfshark",
|
||||
"slug": "surfshark/darwin",
|
||||
"platform": "darwin",
|
||||
"unique_identifier": "com.surfshark.vpnclient.macos.direct",
|
||||
"description": "Surfshark is a VPN client for secure internet access and private browsing."
|
||||
},
|
||||
{
|
||||
"name": "Suspicious Package",
|
||||
"slug": "suspicious-package/darwin",
|
||||
"platform": "darwin",
|
||||
"unique_identifier": "com.mothersruin.SuspiciousPackage",
|
||||
"description": "Suspicious Package is an application for inspecting installer packages."
|
||||
},
|
||||
{
|
||||
"name": "Tableau Desktop",
|
||||
"slug": "tableau/darwin",
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"versions": [
|
||||
{
|
||||
"version": "22.0.4.406",
|
||||
"queries": {
|
||||
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.filemaker.client.pro12';"
|
||||
},
|
||||
"installer_url": "https://downloads.claris.com/esd/fmp_22.0.4.406.dmg",
|
||||
"install_script_ref": "33525d56",
|
||||
"uninstall_script_ref": "f4f1edf6",
|
||||
"sha256": "6ab11d3331ac8ffe203280c509a1aa7ce68f251dc2bf01d2f4910af78bd691d2",
|
||||
"default_categories": [
|
||||
"Developer tools"
|
||||
]
|
||||
}
|
||||
],
|
||||
"refs": {
|
||||
"33525d56": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nhdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\"\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\"\n# copy to the applications folder\nquit_application 'com.filemaker.client.pro12'\nif [ -d \"$APPDIR/FileMaker Pro.app\" ]; then\n\tsudo mv \"$APPDIR/FileMaker Pro.app\" \"$TMPDIR/FileMaker Pro.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/FileMaker Pro.app\" \"$APPDIR\"\n",
|
||||
"f4f1edf6": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/FileMaker Pro.app\"\ntrash $LOGGED_IN_USER '/Users/Shared/FileMaker'\ntrash $LOGGED_IN_USER '~/Library/Application Support/FileMaker'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.filemaker.client.pro12'\ntrash $LOGGED_IN_USER '~/Library/Caches/FileMaker'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.filemaker.client.pro12'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.filemaker.client.pro12.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.filemaker.client.pro12.savedState'\ntrash $LOGGED_IN_USER '~/Library/WebKit/com.filemaker.client.pro12'\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"versions": [
|
||||
{
|
||||
"version": "7.2.15",
|
||||
"queries": {
|
||||
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.nordsec.nordpass';"
|
||||
},
|
||||
"installer_url": "https://downloads.npass.app/mac/arm/NordPass.dmg",
|
||||
"install_script_ref": "d6c888b5",
|
||||
"uninstall_script_ref": "eff0e667",
|
||||
"sha256": "no_check",
|
||||
"default_categories": [
|
||||
"Productivity"
|
||||
]
|
||||
}
|
||||
],
|
||||
"refs": {
|
||||
"d6c888b5": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nhdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\"\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\"\n# copy to the applications folder\nquit_application 'com.nordsec.nordpass'\nif [ -d \"$APPDIR/NordPass.app\" ]; then\n\tsudo mv \"$APPDIR/NordPass.app\" \"$TMPDIR/NordPass.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/NordPass.app\" \"$APPDIR\"\n",
|
||||
"eff0e667": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nquit_application 'com.nordsec.nordpass'\nsudo rm -rf \"$APPDIR/NordPass.app\"\ntrash $LOGGED_IN_USER '/Library/Application Support/NordPass'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.nordsec.nordpass.safari.extension'\ntrash $LOGGED_IN_USER '~/Library/Application Support/NordPass'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.nordsec.nordpass.safari.extension'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.nordsec.nordpass.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.nordsec.nordpass.savedState'\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"versions": [
|
||||
{
|
||||
"version": "32.0.3",
|
||||
"queries": {
|
||||
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.obsproject.obs-studio';"
|
||||
},
|
||||
"installer_url": "https://cdn-fastly.obsproject.com/downloads/obs-studio-32.0.3-macos-apple.dmg",
|
||||
"install_script_ref": "d435f99c",
|
||||
"uninstall_script_ref": "b577d75e",
|
||||
"sha256": "5efd7ec3871fa5f217644425e6777354716425dd25c0759c9373b163cc9de6e8",
|
||||
"default_categories": [
|
||||
"Productivity"
|
||||
]
|
||||
}
|
||||
],
|
||||
"refs": {
|
||||
"b577d75e": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf '/Library/CoreMediaIO/Plug-Ins/DAL/obs-mac-virtualcam.plugin'\nsudo rm -rf \"$APPDIR/OBS.app\"\nsudo rm -rf 'obs'\ntrash $LOGGED_IN_USER '~/Library/Application Support/obs-studio'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.obsproject.obs-studio'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.obsproject.obs-studio.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.obsproject.obs-studio.savedState'\n",
|
||||
"d435f99c": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nhdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\"\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\"\n# copy to the applications folder\nquit_application 'com.obsproject.obs-studio'\nif [ -d \"$APPDIR/OBS.app\" ]; then\n\tsudo mv \"$APPDIR/OBS.app\" \"$TMPDIR/OBS.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/OBS.app\" \"$APPDIR\"\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"versions": [
|
||||
{
|
||||
"version": "1.10.6",
|
||||
"queries": {
|
||||
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'md.obsidian';"
|
||||
},
|
||||
"installer_url": "https://github.com/obsidianmd/obsidian-releases/releases/download/v1.10.6/Obsidian-1.10.6.dmg",
|
||||
"install_script_ref": "6044324c",
|
||||
"uninstall_script_ref": "b982bfc2",
|
||||
"sha256": "a7fbd87353d7802933a13e3d90f55c39114c419ac48d459a356bdab73c128a8a",
|
||||
"default_categories": [
|
||||
"Productivity"
|
||||
]
|
||||
}
|
||||
],
|
||||
"refs": {
|
||||
"6044324c": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nhdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\"\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\"\n# copy to the applications folder\nquit_application 'md.obsidian'\nif [ -d \"$APPDIR/Obsidian.app\" ]; then\n\tsudo mv \"$APPDIR/Obsidian.app\" \"$TMPDIR/Obsidian.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Obsidian.app\" \"$APPDIR\"\n",
|
||||
"b982bfc2": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Obsidian.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/md.obsidian.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/obsidian'\ntrash $LOGGED_IN_USER '~/Library/Preferences/md.obsidian.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/md.obsidian.savedState'\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"versions": [
|
||||
{
|
||||
"version": "2.0.5",
|
||||
"queries": {
|
||||
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'dev.kdrag0n.MacVirt';"
|
||||
},
|
||||
"installer_url": "https://cdn-updates.orbstack.dev/arm64/OrbStack_v2.0.5_19905_arm64.dmg",
|
||||
"install_script_ref": "14115520",
|
||||
"uninstall_script_ref": "401d288b",
|
||||
"sha256": "601889551cdfdc7feee148b7fdb0480fa0ba5c0db0be8f1c047fc840886a7571",
|
||||
"default_categories": [
|
||||
"Developer tools"
|
||||
]
|
||||
}
|
||||
],
|
||||
"refs": {
|
||||
"14115520": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nhdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\"\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\"\n# copy to the applications folder\nquit_application 'dev.kdrag0n.MacVirt'\nif [ -d \"$APPDIR/OrbStack.app\" ]; then\n\tsudo mv \"$APPDIR/OrbStack.app\" \"$TMPDIR/OrbStack.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/OrbStack.app\" \"$APPDIR\"\n",
|
||||
"401d288b": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\n(cd /Users/$LOGGED_IN_USER && '$APPDIR/OrbStack.app/Contents/MacOS/bin/orbctl' '_internal' 'brew-uninstall')\nsudo rm -rf \"$APPDIR/OrbStack.app\"\nsudo rmdir '~/OrbStack'\ntrash $LOGGED_IN_USER '~/.orbstack'\ntrash $LOGGED_IN_USER '~/Library/Caches/dev.kdrag0n.MacVirt'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/*.dev.orbstack'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/dev.kdrag0n.MacVirt'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/dev.kdrag0n.MacVirt.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/Preferences/dev.kdrag0n.MacVirt.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/dev.kdrag0n.MacVirt.savedState'\ntrash $LOGGED_IN_USER '~/Library/WebKit/dev.kdrag0n.MacVirt'\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"versions": [
|
||||
{
|
||||
"version": "9.10",
|
||||
"queries": {
|
||||
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'org.pgadmin.pgadmin4';"
|
||||
},
|
||||
"installer_url": "https://ftp.postgresql.org/pub/pgadmin/pgadmin4/v9.10/macos/pgadmin4-9.10-arm64.dmg",
|
||||
"install_script_ref": "6b8f50b9",
|
||||
"uninstall_script_ref": "f1163b80",
|
||||
"sha256": "9d654ccb7eb5d7379c7f004d4824de251c54dc51074bcb938b530593e50fb736",
|
||||
"default_categories": [
|
||||
"Developer tools"
|
||||
]
|
||||
}
|
||||
],
|
||||
"refs": {
|
||||
"6b8f50b9": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nhdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\"\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\"\n# copy to the applications folder\nquit_application 'org.pgadmin.pgadmin4'\nif [ -d \"$APPDIR/pgAdmin 4.app\" ]; then\n\tsudo mv \"$APPDIR/pgAdmin 4.app\" \"$TMPDIR/pgAdmin 4.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/pgAdmin 4.app\" \"$APPDIR\"\n",
|
||||
"f1163b80": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/pgAdmin 4.app\"\ntrash $LOGGED_IN_USER '~/.pgadmin'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/org.pgadmin.pgadmin4.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/pgAdmin 4'\ntrash $LOGGED_IN_USER '~/Library/Caches/pgAdmin 4'\ntrash $LOGGED_IN_USER '~/Library/Preferences/org.pgadmin.pgadmin4.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/org.pgadmin.pgAdmin4.savedState'\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"versions": [
|
||||
{
|
||||
"version": "4.5.2",
|
||||
"queries": {
|
||||
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.luckymarmot.Paw';"
|
||||
},
|
||||
"installer_url": "https://cdn-builds.paw.cloud/paw/RapidAPI-4.5.2.zip",
|
||||
"install_script_ref": "28cca0da",
|
||||
"uninstall_script_ref": "eb82b992",
|
||||
"sha256": "aad9446c07fe06121466aebc4cb79dccfba4dd1d0edcfeff37e9c312dbefd562",
|
||||
"default_categories": [
|
||||
"Developer tools"
|
||||
]
|
||||
}
|
||||
],
|
||||
"refs": {
|
||||
"28cca0da": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_application 'com.luckymarmot.Paw'\nif [ -d \"$APPDIR/RapidAPI.app\" ]; then\n\tsudo mv \"$APPDIR/RapidAPI.app\" \"$TMPDIR/RapidAPI.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/RapidAPI.app\" \"$APPDIR\"\n",
|
||||
"eb82b992": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/RapidAPI.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.luckymarmot.Paw'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/com.luckymarmot.paw.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.luckymarmot.Paw'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.luckymarmot.Paw.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.luckymarmot.Paw.savedState'\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"versions": [
|
||||
{
|
||||
"version": "6.3.0.1000",
|
||||
"queries": {
|
||||
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.lemonmojo.RoyalTSX.App';"
|
||||
},
|
||||
"installer_url": "https://royaltsx-v6.royalapps.com/updates/royaltsx_6.3.0.1000.dmg",
|
||||
"install_script_ref": "0f402271",
|
||||
"uninstall_script_ref": "3f764c08",
|
||||
"sha256": "934ce7ef770b4fc876c08a50f22b0814ccd66d8c0d2542685ddef61609263bcf",
|
||||
"default_categories": [
|
||||
"Productivity"
|
||||
]
|
||||
}
|
||||
],
|
||||
"refs": {
|
||||
"0f402271": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n# extract contents\n# Use 'yes' to automatically accept license agreement when mounting DMG\n# This replicates Homebrew's behavior for DMG files with license agreements\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n\n# copy to the applications folder\nquit_application 'com.lemonmojo.RoyalTSX.App'\nif [ -d \"$APPDIR/Royal TSX.app\" ]; then\n\tsudo mv \"$APPDIR/Royal TSX.app\" \"$TMPDIR/Royal TSX.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Royal TSX.app\" \"$APPDIR\"\n",
|
||||
"3f764c08": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Royal TSX.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.lemonmojo.RoyalTSX.App'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Royal TSX'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.lemonmojo.RoyalTSX.App'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.lemonmojo.RoyalTSX.App.plist'\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"versions": [
|
||||
{
|
||||
"version": "1.9",
|
||||
"queries": {
|
||||
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'cc.ffitch.shottr';"
|
||||
},
|
||||
"installer_url": "https://shottr.cc/dl/Shottr-1.9.dmg",
|
||||
"install_script_ref": "03afa124",
|
||||
"uninstall_script_ref": "cc55e70b",
|
||||
"sha256": "664d95023406c7fa87d88c149a0302fb8ab43bb4aadf3c7f7a9bc9a4447805b0",
|
||||
"default_categories": [
|
||||
"Productivity"
|
||||
]
|
||||
}
|
||||
],
|
||||
"refs": {
|
||||
"03afa124": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nhdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\"\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\"\n# copy to the applications folder\nquit_application 'cc.ffitch.shottr'\nif [ -d \"$APPDIR/Shottr.app\" ]; then\n\tsudo mv \"$APPDIR/Shottr.app\" \"$TMPDIR/Shottr.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Shottr.app\" \"$APPDIR\"\n",
|
||||
"cc55e70b": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Shottr.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/cc.ffitch.shottr'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/cc.ffitch.shottr-LaunchAtLoginHelper'\ntrash $LOGGED_IN_USER '~/Library/Containers/cc.ffitch.shottr'\ntrash $LOGGED_IN_USER '~/Library/Containers/cc.ffitch.shottr-LaunchAtLoginHelper'\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"versions": [
|
||||
{
|
||||
"version": "2.11.62",
|
||||
"queries": {
|
||||
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'eu.exelban.Stats';"
|
||||
},
|
||||
"installer_url": "https://github.com/exelban/stats/releases/download/v2.11.62/Stats.dmg",
|
||||
"install_script_ref": "512089ad",
|
||||
"uninstall_script_ref": "38a63041",
|
||||
"sha256": "db7c533f535b278dde5884842c052eeda66e216d9caf93bc8d5da7469a62f58c",
|
||||
"default_categories": [
|
||||
"Productivity"
|
||||
]
|
||||
}
|
||||
],
|
||||
"refs": {
|
||||
"38a63041": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nquit_application 'eu.exelban.Stats'\nsudo rm -rf \"$APPDIR/Stats.app\"\nsudo rm -rf '/Library/LaunchDaemons/eu.exelban.Stats.SMC.Helper.plist'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/eu.exelban.Stats.LaunchAtLogin'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/eu.exelban.Stats.Widgets'\ntrash $LOGGED_IN_USER '~/Library/Caches/eu.exelban.Stats'\ntrash $LOGGED_IN_USER '~/Library/Containers/eu.exelban.Stats.LaunchAtLogin'\ntrash $LOGGED_IN_USER '~/Library/Containers/eu.exelban.Stats.Widgets'\ntrash $LOGGED_IN_USER '~/Library/Cookies/eu.exelban.Stats.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/eu.exelban.Stats.widgets'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/eu.exelban.Stats'\ntrash $LOGGED_IN_USER '~/Library/Preferences/eu.exelban.Stats.plist'\n",
|
||||
"512089ad": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nhdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\"\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\"\n# copy to the applications folder\nquit_application 'eu.exelban.Stats'\nif [ -d \"$APPDIR/Stats.app\" ]; then\n\tsudo mv \"$APPDIR/Stats.app\" \"$TMPDIR/Stats.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Stats.app\" \"$APPDIR\"\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"versions": [
|
||||
{
|
||||
"version": "2112",
|
||||
"queries": {
|
||||
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.sublimemerge';"
|
||||
},
|
||||
"installer_url": "https://download.sublimetext.com/sublime_merge_build_2112_mac.zip",
|
||||
"install_script_ref": "0afac373",
|
||||
"uninstall_script_ref": "cd1ff75d",
|
||||
"sha256": "a9a6c5cf3760b4d6a767cf32847a7fc47fdeeb8bad893e6f834dbfbfef7f33e5",
|
||||
"default_categories": [
|
||||
"Developer tools"
|
||||
]
|
||||
}
|
||||
],
|
||||
"refs": {
|
||||
"0afac373": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_application 'com.sublimemerge'\nif [ -d \"$APPDIR/Sublime Merge.app\" ]; then\n\tsudo mv \"$APPDIR/Sublime Merge.app\" \"$TMPDIR/Sublime Merge.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Sublime Merge.app\" \"$APPDIR\"\n",
|
||||
"cd1ff75d": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nquit_application 'com.sublimemerge'\nsudo rm -rf \"$APPDIR/Sublime Merge.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/com.sublimemerge.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Sublime Merge'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.sublimemerge'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.sublimemerge.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.sublimemerge.savedState'\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"versions": [
|
||||
{
|
||||
"version": "4.24.1",
|
||||
"queries": {
|
||||
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.surfshark.vpnclient.macos.direct';"
|
||||
},
|
||||
"installer_url": "https://downloads.surfshark.com/macOS/stable/4.24.1/4031/Surfshark.dmg",
|
||||
"install_script_ref": "b1bee585",
|
||||
"uninstall_script_ref": "a2b88fd6",
|
||||
"sha256": "13e662272be822a6dfd9316fa1503e9c26ad97e9cdcfae6738bcfa97e4ab34dc",
|
||||
"default_categories": [
|
||||
"Productivity"
|
||||
]
|
||||
}
|
||||
],
|
||||
"refs": {
|
||||
"a2b88fd6": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Surfshark.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.surfshark.vpnclient.macos*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/CrashReporter/Surfshark.OpenVPN_*.plist'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.surfshark.vpnclient.macos*'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/YHUG37CKN8.com.surfshark.vpn'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.surfshark.vpnclient.macos.savedState'\n",
|
||||
"b1bee585": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nhdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\"\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\"\n# copy to the applications folder\nquit_application 'com.surfshark.vpnclient.macos.direct'\nif [ -d \"$APPDIR/Surfshark.app\" ]; then\n\tsudo mv \"$APPDIR/Surfshark.app\" \"$TMPDIR/Surfshark.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Surfshark.app\" \"$APPDIR\"\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"versions": [
|
||||
{
|
||||
"version": "4.6",
|
||||
"queries": {
|
||||
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.mothersruin.SuspiciousPackage';"
|
||||
},
|
||||
"installer_url": "https://www.mothersruin.com/software/downloads/SuspiciousPackage.dmg",
|
||||
"install_script_ref": "f6117813",
|
||||
"uninstall_script_ref": "80330be8",
|
||||
"sha256": "no_check",
|
||||
"default_categories": [
|
||||
"Developer tools"
|
||||
]
|
||||
}
|
||||
],
|
||||
"refs": {
|
||||
"80330be8": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Suspicious Package.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.mothersruin.SuspiciousPackageApp.QLPreview'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/com.mothersruin.suspiciouspackageapp.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.mothersruin.SuspiciousPackageApp'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.mothersruin.XPCService.UpdateChecker'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.mothersruin.SuspiciousPackageApp.QLPreview'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.mothersruin.SuspiciousPackage.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.mothersruin.SuspiciousPackageApp.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.mothersruin.SuspiciousPackageApp.savedState'\ntrash $LOGGED_IN_USER '~/Library/WebKit/com.mothersruin.SuspiciousPackageApp'\n",
|
||||
"f6117813": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nhdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\"\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\"\n# copy to the applications folder\nquit_application 'com.mothersruin.SuspiciousPackage'\nif [ -d \"$APPDIR/Suspicious Package.app\" ]; then\n\tsudo mv \"$APPDIR/Suspicious Package.app\" \"$TMPDIR/Suspicious Package.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Suspicious Package.app\" \"$APPDIR\"\n"
|
||||
}
|
||||
}
|
||||
@@ -77,6 +77,7 @@ import ExpressVpn from "./ExpressVpn";
|
||||
import Extension from "./Extension";
|
||||
import Falcon from "./Falcon";
|
||||
import Figma from "./Figma";
|
||||
import FileMakerPro from "./FileMakerPro";
|
||||
import Firefox from "./Firefox";
|
||||
import Fork from "./Fork";
|
||||
import Front from "./Front";
|
||||
@@ -123,19 +124,24 @@ import MicrosoftPowerPoint from "./MicrosoftPowerPoint";
|
||||
import Miro from "./Miro";
|
||||
import MongoDbCompass from "./MongoDbCompass";
|
||||
import MySqlWorkbench from "./MySqlWorkbench";
|
||||
import Nordpass from "./Nordpass";
|
||||
import NordVpn from "./NordVpn";
|
||||
import Notion from "./Notion";
|
||||
import NotionCalendar from "./NotionCalendar";
|
||||
import Nova from "./Nova";
|
||||
import Nudge from "./Nudge";
|
||||
import Obs from "./Obs";
|
||||
import Obsidian from "./Obsidian";
|
||||
import OmniGraffle from "./OmniGraffle";
|
||||
import OmnissaHorizonClient from "./OmnissaHorizonClient";
|
||||
import OneDrive from "./OneDrive";
|
||||
import OnePassword from "./OnePassword";
|
||||
import Opera from "./Opera";
|
||||
import OrbStack from "./OrbStack";
|
||||
import P4V from "./P4V";
|
||||
import Package from "./Package";
|
||||
import ParallelsDesktop from "./ParallelsDesktop";
|
||||
import PgAdmin4 from "./PgAdmin4";
|
||||
import PhpStorm from "./PhpStorm";
|
||||
import PodmanDesktop from "./PodmanDesktop";
|
||||
import Postman from "./Postman";
|
||||
@@ -147,20 +153,29 @@ import PyCharm from "./PyCharm";
|
||||
import PyCharmCe from "./PyCharmCe";
|
||||
import Quip from "./Quip";
|
||||
import RancherDesktop from "./RancherDesktop";
|
||||
import RapidApi from "./RapidApi";
|
||||
import Raycast from "./Raycast";
|
||||
import Rectangle from "./Rectangle";
|
||||
import Rider from "./Rider";
|
||||
import RoyalTsx from "./RoyalTsx";
|
||||
import RubyMine from "./RubyMine";
|
||||
import RustRover from "./RustRover";
|
||||
import Safari from "./Safari";
|
||||
import Santa from "./Santa";
|
||||
import Shottr from "./Shottr";
|
||||
import Signal from "./Signal";
|
||||
import Sketch from "./Sketch";
|
||||
import Slack from "./Slack";
|
||||
import Snagit from "./Snagit";
|
||||
import Sourcetree from "./Sourcetree";
|
||||
import SplashtopBusiness from "./SplashtopBusiness";
|
||||
import SplashtopStreamer from "./SplashtopStreamer";
|
||||
import Spotify from "./Spotify";
|
||||
import Stats from "./Stats";
|
||||
import SublimeMerge from "./SublimeMerge";
|
||||
import SublimeText from "./SublimeText";
|
||||
import Surfshark from "./Surfshark";
|
||||
import SuspiciousPackage from "./SuspiciousPackage";
|
||||
import TableauDesktop from "./TableauDesktop";
|
||||
import TablePlus from "./TablePlus";
|
||||
import Tailscale from "./Tailscale";
|
||||
@@ -273,6 +288,7 @@ export const SOFTWARE_NAME_TO_ICON_MAP = {
|
||||
expressvpn: ExpressVpn,
|
||||
falcon: Falcon,
|
||||
figma: Figma,
|
||||
"filemaker pro": FileMakerPro,
|
||||
firefox: Firefox,
|
||||
fork: Fork,
|
||||
front: Front,
|
||||
@@ -322,18 +338,23 @@ export const SOFTWARE_NAME_TO_ICON_MAP = {
|
||||
miro: Miro,
|
||||
"mysql workbench": MySqlWorkbench,
|
||||
"nord vpn": NordVpn,
|
||||
nordpass: Nordpass,
|
||||
nordvpn: NordVpn,
|
||||
"notion calendar": NotionCalendar,
|
||||
notion: Notion,
|
||||
nova: Nova,
|
||||
nudge: Nudge,
|
||||
obs: Obs,
|
||||
obsidian: Obsidian,
|
||||
omnigraffle: OmniGraffle,
|
||||
"omnissa horizon client": OmnissaHorizonClient,
|
||||
onedrive: OneDrive,
|
||||
opera: Opera,
|
||||
orbstack: OrbStack,
|
||||
package: Package,
|
||||
"parallels desktop": ParallelsDesktop,
|
||||
p4v: P4V,
|
||||
"pgadmin 4": PgAdmin4,
|
||||
phpstorm: PhpStorm,
|
||||
"podman desktop": PodmanDesktop,
|
||||
postman: Postman,
|
||||
@@ -345,21 +366,30 @@ export const SOFTWARE_NAME_TO_ICON_MAP = {
|
||||
pycharm: PyCharm,
|
||||
quip: Quip,
|
||||
"rancher desktop": RancherDesktop,
|
||||
rapidapi: RapidApi,
|
||||
raycast: Raycast,
|
||||
rectangle: Rectangle,
|
||||
rider: Rider,
|
||||
"royal tsx": RoyalTsx,
|
||||
rubymine: RubyMine,
|
||||
rustrover: RustRover,
|
||||
safari: Safari,
|
||||
santa: Santa,
|
||||
shottr: Shottr,
|
||||
signal: Signal,
|
||||
sketch: Sketch,
|
||||
slack: Slack,
|
||||
snagit: Snagit,
|
||||
sourcetree: Sourcetree,
|
||||
"splashtop business": SplashtopBusiness,
|
||||
"splashtop streamer": SplashtopStreamer,
|
||||
spotify: Spotify,
|
||||
stats: Stats,
|
||||
"stream deck": ElgatoStreamDeck,
|
||||
"sublime merge": SublimeMerge,
|
||||
"sublime text": SublimeText,
|
||||
surfshark: Surfshark,
|
||||
"suspicious package": SuspiciousPackage,
|
||||
tableau: TableauDesktop,
|
||||
tableplus: TablePlus,
|
||||
tailscale: Tailscale,
|
||||
|
||||
|
After Width: | Height: | Size: 4.8 KiB |
|
After Width: | Height: | Size: 6.4 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 9.6 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 15 KiB |