From eda289f6f5b23dbe7ab621839e0b7df722dc4106 Mon Sep 17 00:00:00 2001 From: Mitch Francese <2227948+tux234@users.noreply.github.com> Date: Wed, 11 Mar 2026 15:35:49 -0400 Subject: [PATCH] Add The Unarchiver as a Fleet-maintained app (#41467) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary - Add The Unarchiver as a new macOS-only Fleet Maintained App - The Unarchiver is a free archive extraction utility supporting ZIP, RAR, 7z, and many other formats - Homebrew cask: `the-unarchiver`, bundle ID: `cx.c3.theunarchiver` - Category: Utilities ## Changes - `ee/maintained-apps/inputs/homebrew/the-unarchiver.json` — input definition - `ee/maintained-apps/outputs/the-unarchiver/darwin.json` — generated output with install/uninstall scripts - `ee/maintained-apps/outputs/apps.json` — added entry in alphabetical order with description - `frontend/pages/SoftwarePage/components/icons/TheUnarchiver.tsx` — generated icon component - `frontend/pages/SoftwarePage/components/icons/index.ts` — icon import and map entry - `website/assets/images/app-icon-the-unarchiver-60x60@2x.png` — app icon asset --- .../inputs/homebrew/the-unarchiver.json | 8 +++++++ ee/maintained-apps/outputs/apps.json | 7 ++++++ .../outputs/the-unarchiver/darwin.json | 21 ++++++++++++++++++ .../components/icons/TheUnarchiver.tsx | 14 ++++++++++++ .../SoftwarePage/components/icons/index.ts | 2 ++ .../app-icon-the-unarchiver-60x60@2x.png | Bin 0 -> 9849 bytes 6 files changed, 52 insertions(+) create mode 100644 ee/maintained-apps/inputs/homebrew/the-unarchiver.json create mode 100644 ee/maintained-apps/outputs/the-unarchiver/darwin.json create mode 100644 frontend/pages/SoftwarePage/components/icons/TheUnarchiver.tsx create mode 100644 website/assets/images/app-icon-the-unarchiver-60x60@2x.png diff --git a/ee/maintained-apps/inputs/homebrew/the-unarchiver.json b/ee/maintained-apps/inputs/homebrew/the-unarchiver.json new file mode 100644 index 0000000000..0cbafddbb7 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/the-unarchiver.json @@ -0,0 +1,8 @@ +{ + "name": "The Unarchiver", + "unique_identifier": "cx.c3.theunarchiver", + "token": "the-unarchiver", + "installer_format": "zip", + "slug": "the-unarchiver/darwin", + "default_categories": ["Utilities"] +} diff --git a/ee/maintained-apps/outputs/apps.json b/ee/maintained-apps/outputs/apps.json index 22534dd8f5..be6174be70 100644 --- a/ee/maintained-apps/outputs/apps.json +++ b/ee/maintained-apps/outputs/apps.json @@ -1597,6 +1597,13 @@ "unique_identifier": "com.smileonmymac.textexpander", "description": "TextExpander is an application that let's you create and insert pre-made snippets of text anywhere." }, + { + "name": "The Unarchiver", + "slug": "the-unarchiver/darwin", + "platform": "darwin", + "unique_identifier": "cx.c3.theunarchiver", + "description": "The Unarchiver is an archive extraction utility that supports many formats including ZIP, RAR, and 7z." + }, { "name": "Thunderbird", "slug": "thunderbird/darwin", diff --git a/ee/maintained-apps/outputs/the-unarchiver/darwin.json b/ee/maintained-apps/outputs/the-unarchiver/darwin.json new file mode 100644 index 0000000000..2abbf5ce63 --- /dev/null +++ b/ee/maintained-apps/outputs/the-unarchiver/darwin.json @@ -0,0 +1,21 @@ +{ + "versions": [ + { + "version": "4.3.9", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'cx.c3.theunarchiver';" + }, + "installer_url": "https://dl.devmate.com/com.macpaw.site.theunarchiver/147/1742287964/TheUnarchiver-147.zip", + "install_script_ref": "ac7232e8", + "uninstall_script_ref": "6af28446", + "sha256": "d0d8dd2e028519ece5eeb0f018b3392f67e1c85053472ccbbaee64e87f173a28", + "default_categories": [ + "Utilities" + ] + } + ], + "refs": { + "6af28446": "#!/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/The Unarchiver.app\"\ntrash $LOGGED_IN_USER '~/Library/Caches/cx.c3.theunarchiver'\ntrash $LOGGED_IN_USER '~/Library/Cookies/cx.c3.theunarchiver.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/Preferences/cx.c3.theunarchiver.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/cx.c3.theunarchiver.savedState'\n", + "ac7232e8": "#!/bin/sh\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 if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; 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 [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; 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 [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; 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 # Try to launch the application\n if osascript -e \"tell application id \\\"$bundle_id\\\" to activate\" >/dev/null 2>&1; 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 'cx.c3.theunarchiver'\nif [ -d \"$APPDIR/The Unarchiver.app\" ]; then\n\tsudo mv \"$APPDIR/The Unarchiver.app\" \"$TMPDIR/The Unarchiver.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/The Unarchiver.app\" \"$APPDIR\"\nrelaunch_application 'cx.c3.theunarchiver'\n" + } +} diff --git a/frontend/pages/SoftwarePage/components/icons/TheUnarchiver.tsx b/frontend/pages/SoftwarePage/components/icons/TheUnarchiver.tsx new file mode 100644 index 0000000000..bf4a27f29b --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/TheUnarchiver.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const TheUnarchiver = (props: SVGProps) => ( + + + +); +export default TheUnarchiver; diff --git a/frontend/pages/SoftwarePage/components/icons/index.ts b/frontend/pages/SoftwarePage/components/icons/index.ts index a18e1a4cca..c3d04661fc 100644 --- a/frontend/pages/SoftwarePage/components/icons/index.ts +++ b/frontend/pages/SoftwarePage/components/icons/index.ts @@ -205,6 +205,7 @@ import Telegram from "./Telegram"; import TeleportConnect from "./TeleportConnect"; import Terminal from "./Terminal"; import TextExpander from "./TextExpander"; +import TheUnarchiver from "./TheUnarchiver"; import Thunderbird from "./Thunderbird"; import Todoist from "./Todoist"; import Tower from "./Tower"; @@ -455,6 +456,7 @@ export const SOFTWARE_NAME_TO_ICON_MAP = { terminal: Terminal, teamviewer: TeamViewer, textexpander: TextExpander, + "the unarchiver": TheUnarchiver, thunderbird: Thunderbird, todoist: Todoist, tower: Tower, diff --git a/website/assets/images/app-icon-the-unarchiver-60x60@2x.png b/website/assets/images/app-icon-the-unarchiver-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..cfb68b06832f6089d812cd413c42016ad0cbe446 GIT binary patch literal 9849 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 P+P;+J)MRVknuh!jGt|bj literal 0 HcmV?d00001