Update Fleet-maintained apps (#49558)

Automated ingestion of latest Fleet-maintained app data.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Updates**
* Updated macOS packages for ChatGPT, Windsurf, DuckDuckGo, Firefox
Nightly, Krisp, PicView, Postman, Processing, Shapr3D, and Zoom.
  * Updated Postman for Windows to version 12.20.0.
* Refreshed installer links, version detection, and integrity checks for
the latest releases.
  * Improved uninstall cleanup for DuckDuckGo and QLMarkdown.
* Updated Krisp installation and removal behavior for improved app
lifecycle handling.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: allenhouchins <32207388+allenhouchins@users.noreply.github.com>
This commit is contained in:
fleet-release
2026-07-20 09:24:20 -05:00
committed by GitHub
co-authored by allenhouchins
parent fd6209a86f
commit a5cfb705bc
12 changed files with 48 additions and 48 deletions
@@ -1,15 +1,15 @@
{
"versions": [
{
"version": "26.715.31925",
"version": "26.715.52143",
"queries": {
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.openai.chat';",
"patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.openai.chat' AND version_compare(bundle_short_version, '26.715.31925') < 0);"
"patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.openai.chat' AND version_compare(bundle_short_version, '26.715.52143') < 0);"
},
"installer_url": "https://persistent.oaistatic.com/codex-app-prod/ChatGPT-darwin-arm64-26.715.31925.zip",
"installer_url": "https://persistent.oaistatic.com/codex-app-prod/ChatGPT-darwin-arm64-26.715.52143.zip",
"install_script_ref": "6872008e",
"uninstall_script_ref": "678e6cf0",
"sha256": "a0cded116975c71c723dc8601c07402533b5ff23881d15e52cfb6dc71413e45b",
"sha256": "bf7878ece7131e3405041fd90dca8b3894512eeee10d727aafc75573ce2c916a",
"default_categories": [
"Productivity"
]
@@ -1,15 +1,15 @@
{
"versions": [
{
"version": "3.4.27",
"version": "3.5.17",
"queries": {
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.exafunction.windsurf';",
"patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.exafunction.windsurf' AND version_compare(bundle_short_version, '3.4.27') < 0);"
"patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.exafunction.windsurf' AND version_compare(bundle_short_version, '3.5.17') < 0);"
},
"installer_url": "https://windsurf-stable.codeiumdata.com/darwin-arm64-dmg/stable/0d4bf12ed4a7597cb8ae9016fe8474468aad98a2/Devin-darwin-arm64-3.4.27.dmg",
"installer_url": "https://windsurf-stable.codeiumdata.com/darwin-arm64-dmg/stable/2c489dfc762456657db8662309c0d5e76e886397/Devin-darwin-arm64-3.5.17.dmg",
"install_script_ref": "917a2397",
"uninstall_script_ref": "4fdaa2d1",
"sha256": "0d15df47d926a46d4afb3851433384ac8e4bbab3b47757ed0ed0881607b45303",
"sha256": "09a4c5f196367db5a669a435f2a08edd1b67a6418eefbf25a0b1befdbfef271c",
"default_categories": [
"Developer tools"
]
@@ -1,22 +1,22 @@
{
"versions": [
{
"version": "1.198.0",
"version": "1.199.0",
"queries": {
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.duckduckgo.macos.browser';",
"patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.duckduckgo.macos.browser' AND version_compare(bundle_short_version, '1.198.0') < 0);"
"patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.duckduckgo.macos.browser' AND version_compare(bundle_short_version, '1.199.0') < 0);"
},
"installer_url": "https://staticcdn.duckduckgo.com/macos-desktop-browser/duckduckgo-1.198.0.759.dmg",
"installer_url": "https://staticcdn.duckduckgo.com/macos-desktop-browser/duckduckgo-1.199.0.762.dmg",
"install_script_ref": "c6bf9cce",
"uninstall_script_ref": "b6f097db",
"sha256": "e37b38f720468b884951c9c6d063f5734b133aabe29c7820b5bc18dd99fb202b",
"uninstall_script_ref": "b5d499ac",
"sha256": "388b90af43451cca2469bf3b8cde29ba1c7507ebdfb9767de02da9e6826c07f2",
"default_categories": [
"Browsers"
]
}
],
"refs": {
"b6f097db": "#!/bin/bash\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\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\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/DuckDuckGo.app\"\ntrash $LOGGED_IN_USER '~/Library/Caches/com.duckduckgo.macos.browser'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.duckduckgo.macos.browser'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.duckduckgo.macos.browser'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.duckduckgo.macos.browser.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.duckduckgo.macos.browser.savedState'\ntrash $LOGGED_IN_USER '~/Library/WebKit/com.duckduckgo.macos.browser'\n",
"b5d499ac": "#!/bin/bash\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\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\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/DuckDuckGo.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/HKE973VLUW.com.duckduckgo.macos.browser*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.duckduckgo.macos.browser'\ntrash $LOGGED_IN_USER '~/Library/Application Support/DuckDuckGo'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.duckduckgo.macos.browser'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.duckduckgo.macos.browser'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/HKE973VLUW.com.duckduckgo.macos.browser*'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.duckduckgo.macos.browser'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.duckduckgo.macos.browser.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.duckduckgo.macos.browser.savedState'\ntrash $LOGGED_IN_USER '~/Library/WebKit/com.duckduckgo.macos.browser'\n",
"c6bf9cce": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\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\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\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# copy to the applications folder\nquit_and_track_application 'com.duckduckgo.macos.browser'\nif [ -d \"$APPDIR/DuckDuckGo.app\" ]; then\n\tsudo mv \"$APPDIR/DuckDuckGo.app\" \"$TMPDIR/DuckDuckGo.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/DuckDuckGo.app\" \"$APPDIR\"\nrelaunch_application 'com.duckduckgo.macos.browser'\n"
}
}
@@ -6,10 +6,10 @@
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'org.mozilla.nightly';",
"patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'org.mozilla.nightly' AND version_compare(bundle_version, '15426.7.19') < 0);"
},
"installer_url": "https://ftp.mozilla.org/pub/firefox/nightly/2026/07/2026-07-19-09-17-21-mozilla-central/firefox-154.0a1.en-US.mac.dmg",
"installer_url": "https://ftp.mozilla.org/pub/firefox/nightly/2026/07/2026-07-19-21-13-19-mozilla-central/firefox-154.0a1.en-US.mac.dmg",
"install_script_ref": "418c9331",
"uninstall_script_ref": "d7c711ad",
"sha256": "f24f6fc41dd57c59faa366f665b1b53463f5fee6f30807607db6414c20a196a4",
"sha256": "f32f88163197b01e44dc296ee509c06f01c3ef734c2823d5607a39b4186f7ba4",
"default_categories": [
"Browsers"
]
File diff suppressed because one or more lines are too long
@@ -1,15 +1,15 @@
{
"versions": [
{
"version": "4.2.0",
"version": "5.0.0",
"queries": {
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.ruben2776.picview';",
"patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.ruben2776.picview' AND version_compare(bundle_short_version, '4.2.0') < 0);"
"patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.ruben2776.picview' AND version_compare(bundle_short_version, '5.0.0') < 0);"
},
"installer_url": "https://github.com/Ruben2776/PicView/releases/download/4.2.0/PicView-4.2.0-macOS-arm64.dmg",
"installer_url": "https://github.com/Ruben2776/PicView/releases/download/5.0.0/PicView-5.0.0-macOS-arm64.dmg",
"install_script_ref": "f2bdc85e",
"uninstall_script_ref": "48e04b56",
"sha256": "50032ae50d097a6bd1b0d57d2be15dc1448a03fade07193f0be981849b821b95",
"sha256": "b09c47db6094eb4b145df2bf417f9f4c5fb0baee6d30e5b81545a9139b87fc9a",
"default_categories": [
"Productivity"
]
@@ -1,15 +1,15 @@
{
"versions": [
{
"version": "12.19.6",
"version": "12.20.0",
"queries": {
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.postmanlabs.mac';",
"patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.postmanlabs.mac' AND version_compare(bundle_short_version, '12.19.6') < 0);"
"patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.postmanlabs.mac' AND version_compare(bundle_short_version, '12.20.0') < 0);"
},
"installer_url": "https://dl.pstmn.io/download/version/12.19.6/osx_arm64",
"installer_url": "https://dl.pstmn.io/download/version/12.20.0/osx_arm64",
"install_script_ref": "96d73870",
"uninstall_script_ref": "966b2fa5",
"sha256": "5686c1837a40ff7670d5f0ba7f3b9def7dd3fa30f6b44dca95f62dd6e674e4f4",
"sha256": "6b2f2413a2fb3b4d202684085e262adc8f31a0aecd523ed3fcc615b8a1e74a53",
"default_categories": [
"Developer tools"
]
@@ -1,15 +1,15 @@
{
"versions": [
{
"version": "12.19.6",
"version": "12.20.0",
"queries": {
"exists": "SELECT 1 FROM programs WHERE name LIKE 'Postman x64 %' AND publisher = 'Postman';",
"patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'Postman x64 %' AND publisher = 'Postman' AND version_compare(version, '12.19.6') < 0);"
"patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'Postman x64 %' AND publisher = 'Postman' AND version_compare(version, '12.20.0') < 0);"
},
"installer_url": "https://dl.pstmn.io/download/version/12.19.6/windows_64",
"installer_url": "https://dl.pstmn.io/download/version/12.20.0/windows_64",
"install_script_ref": "8594f0bc",
"uninstall_script_ref": "fd59d029",
"sha256": "b9e2c820d6c29dfdc77363f3f6c0d91b85929c536001ffb1445867c48a64828d",
"sha256": "eff360d93e80cc37d1e5556f07ee5443f5e4ac80b128f0ff18da55fffcc3a7a6",
"default_categories": [
"Developer tools"
]
@@ -1,15 +1,15 @@
{
"versions": [
{
"version": "4.5.5",
"version": "4.5.6",
"queries": {
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'org.processing.four';",
"patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'org.processing.four' AND version_compare(bundle_short_version, '4.5.5') < 0);"
"patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'org.processing.four' AND version_compare(bundle_short_version, '4.5.6') < 0);"
},
"installer_url": "https://github.com/processing/processing4/releases/download/processing-1433-4.5.5/processing-4.5.5-macos-aarch64.dmg",
"installer_url": "https://github.com/processing/processing4/releases/download/processing-1434-4.5.6/processing-4.5.6-macos-aarch64.dmg",
"install_script_ref": "c22623fc",
"uninstall_script_ref": "b69978e7",
"sha256": "5bd8e6ad2b9250921cc5d85f9dae16b1eed109ba278976da3e4f96e81d81ef48",
"sha256": "f543a70d06fa43ea4f57955368734296c49960b71b24b2220da18d14806ed3fa",
"default_categories": [
"Productivity"
]
@@ -8,7 +8,7 @@
},
"installer_url": "https://github.com/sbarex/QLMarkdown/releases/download/1.5.2/QLMarkdown.zip",
"install_script_ref": "038ce2fa",
"uninstall_script_ref": "66216336",
"uninstall_script_ref": "fc5e1986",
"sha256": "b111681c95355d931e72f4f8dff63565e329e8b4d5bcd95f127c4cba2b9e3ea0",
"default_categories": [
"Productivity"
@@ -17,6 +17,6 @@
],
"refs": {
"038ce2fa": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\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\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'org.sbarex.QLMarkdown'\nif [ -d \"$APPDIR/QLMarkdown.app\" ]; then\n\tsudo mv \"$APPDIR/QLMarkdown.app\" \"$TMPDIR/QLMarkdown.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/QLMarkdown.app\" \"$APPDIR\"\nrelaunch_application 'org.sbarex.QLMarkdown'\n",
"66216336": "#!/bin/bash\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\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\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/QLMarkdown.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/org.sbarex.QLMarkdown'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/org.sbarex.QLMarkdown.QLExtension'\ntrash $LOGGED_IN_USER '~/Library/Containers/org.sbarex.QLMarkdown'\ntrash $LOGGED_IN_USER '~/Library/Containers/org.sbarex.QLMarkdown.QLExtension'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/org.sbarex.qlmarkdown'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/org.sbarex.QLMarkdown'\ntrash $LOGGED_IN_USER '~/Library/Preferences/org.sbarex.QLMarkdown.plist'\ntrash $LOGGED_IN_USER '~/Library/QuickLook/QLMarkdown.qlgenerator'\n"
"fc5e1986": "#!/bin/bash\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\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\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/QLMarkdown.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/group.org.sbarex.qlmarkdown/'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/org.sbarex.QLMarkdown'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/org.sbarex.QLMarkdown.QLExtension'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/org.sbarex.QLMarkdown.Shortcut-Extension/'\ntrash $LOGGED_IN_USER '~/Library/Application Support/QLMarkdown/'\ntrash $LOGGED_IN_USER '~/Library/Containers/org.sbarex.QLMarkdown'\ntrash $LOGGED_IN_USER '~/Library/Containers/org.sbarex.QLMarkdown.QLExtension'\ntrash $LOGGED_IN_USER '~/Library/Containers/org.sbarex.QLMarkdown.Shortcut-Extension/'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/group.org.sbarex.qlmarkdown/'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/org.sbarex.QLMarkdown'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/org.sbarex.qlmarkdown'\ntrash $LOGGED_IN_USER '~/Library/Preferences/org.sbarex.QLMarkdown.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/org.sbarex.QLMarkdownXPCHelper.plist'\ntrash $LOGGED_IN_USER '~/Library/QuickLook/QLMarkdown.qlgenerator'\n"
}
}
@@ -1,15 +1,15 @@
{
"versions": [
{
"version": "26.120.0.11243",
"version": "26.121.0.11316",
"queries": {
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.shapr3d.shapr';",
"patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.shapr3d.shapr' AND version_compare(bundle_short_version, '26.120.0.11243') < 0);"
"patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.shapr3d.shapr' AND version_compare(bundle_short_version, '26.121.0.11316') < 0);"
},
"installer_url": "https://download.shapr3d.com/mac/Shapr3D-26.120.0.11243.dmg",
"installer_url": "https://download.shapr3d.com/mac/Shapr3D-26.121.0.11316.dmg",
"install_script_ref": "f6e027de",
"uninstall_script_ref": "261544b8",
"sha256": "4624e0360cf8e27ae438b3f7ff6c8290814bffa28456f2f6bf6a85080d9a85b7",
"sha256": "81ec55d285af9b30878dc667c117db2ba0a0f68c90bb1a087524305dd9f704cd",
"default_categories": [
"Productivity"
]
+2 -2
View File
@@ -1,10 +1,10 @@
{
"versions": [
{
"version": "7.1.0.83064",
"version": "7.1.5.84650",
"queries": {
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'us.zoom.xos';",
"patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'us.zoom.xos' AND version_compare(bundle_short_version, '7.1.0.83064') < 0);"
"patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'us.zoom.xos' AND version_compare(bundle_short_version, '7.1.5.84650') < 0);"
},
"installer_url": "https://zoom.us/client/latest/ZoomInstallerIT.pkg",
"install_script_ref": "ab84b572",