From 4b7a0cec880b4203830ac172f61f2ecbad65d1ae Mon Sep 17 00:00:00 2001 From: Allen Houchins <32207388+allenhouchins@users.noreply.github.com> Date: Tue, 9 Dec 2025 13:38:57 -0600 Subject: [PATCH] Add Arc as a macOS FMA (#36996) This pull request adds support for the Arc browser to both the backend maintained apps and the frontend software icons. The main changes include adding Arc's metadata and install/uninstall scripts, updating the apps listing, and providing a new SVG icon for Arc in the frontend. **Backend: Arc browser support** * Added Arc's metadata to `arc.json`, including its identifier, installer format, and default categories. * Created `arc/darwin.json` with version info, install/uninstall scripts, and installer details for Arc on macOS. * Updated `apps.json` to include Arc in the list of supported apps, with a user-friendly description. **Frontend: Arc browser icon** * Added a new SVG icon component for Arc in `Arc.tsx`. * Registered Arc in the icon index and mapped its name to the new icon for use in the software page. [[1]](diffhunk://#diff-628095892e1d16090be1db6cc1a5c9cebc65248c32a8b1312385394818f2907bR18) [[2]](diffhunk://#diff-628095892e1d16090be1db6cc1a5c9cebc65248c32a8b1312385394818f2907bR175) --- ee/maintained-apps/inputs/homebrew/arc.json | 8 +++++++ ee/maintained-apps/outputs/apps.json | 7 ++++++ ee/maintained-apps/outputs/arc/darwin.json | 21 ++++++++++++++++++ .../SoftwarePage/components/icons/Arc.tsx | 14 ++++++++++++ .../SoftwarePage/components/icons/index.ts | 2 ++ .../assets/images/app-icon-arc-60x60@2x.png | Bin 0 -> 12703 bytes 6 files changed, 52 insertions(+) create mode 100644 ee/maintained-apps/inputs/homebrew/arc.json create mode 100644 ee/maintained-apps/outputs/arc/darwin.json create mode 100644 frontend/pages/SoftwarePage/components/icons/Arc.tsx create mode 100644 website/assets/images/app-icon-arc-60x60@2x.png diff --git a/ee/maintained-apps/inputs/homebrew/arc.json b/ee/maintained-apps/inputs/homebrew/arc.json new file mode 100644 index 0000000000..8894d1c9fc --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/arc.json @@ -0,0 +1,8 @@ +{ + "name": "Arc", + "unique_identifier": "company.thebrowser.Browser", + "token": "arc", + "installer_format": "zip", + "slug": "arc/darwin", + "default_categories": ["Browsers"] +} diff --git a/ee/maintained-apps/outputs/apps.json b/ee/maintained-apps/outputs/apps.json index 20d3017315..70e38c2647 100644 --- a/ee/maintained-apps/outputs/apps.json +++ b/ee/maintained-apps/outputs/apps.json @@ -85,6 +85,13 @@ "unique_identifier": "com.philandro.anydesk", "description": "AnyDesk is an app that allows connection to a computer remotely." }, + { + "name": "Arc", + "slug": "arc/darwin", + "platform": "darwin", + "unique_identifier": "company.thebrowser.Browser", + "description": "Arc is a productivity-focused browser." + }, { "name": "Asana", "slug": "asana/darwin", diff --git a/ee/maintained-apps/outputs/arc/darwin.json b/ee/maintained-apps/outputs/arc/darwin.json new file mode 100644 index 0000000000..6686acb0f5 --- /dev/null +++ b/ee/maintained-apps/outputs/arc/darwin.json @@ -0,0 +1,21 @@ +{ + "versions": [ + { + "version": "1.124.0", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'company.thebrowser.Browser';" + }, + "installer_url": "https://releases.arc.net/release/Arc-1.124.0-71787.zip", + "install_script_ref": "076925e7", + "uninstall_script_ref": "0b3739b1", + "sha256": "422346bd9c1cb164a6682a727eab7fad0bb06d37b6b809fa9fbc173f1f558d5a", + "default_categories": [ + "Browsers" + ] + } + ], + "refs": { + "076925e7": "#!/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 'company.thebrowser.Browser'\nif [ -d \"$APPDIR/Arc.app\" ]; then\n\tsudo mv \"$APPDIR/Arc.app\" \"$TMPDIR/Arc.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Arc.app\" \"$APPDIR\"\n", + "0b3739b1": "#!/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 'company.thebrowser.Browser'\nsudo rm -rf \"$APPDIR/Arc.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/Arc'\ntrash $LOGGED_IN_USER '~/Library/Caches/Arc'\ntrash $LOGGED_IN_USER '~/Library/Caches/CloudKit/company.thebrowser.Browser'\ntrash $LOGGED_IN_USER '~/Library/Caches/company.thebrowser.Browser'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/company.thebrowser.Browser'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/company.thebrowser.Browser.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/Preferences/company.thebrowser.Browser.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/company.thebrowser.Browser.savedState'\ntrash $LOGGED_IN_USER '~/Library/WebKit/company.thebrowser.Browser'\n" + } +} diff --git a/frontend/pages/SoftwarePage/components/icons/Arc.tsx b/frontend/pages/SoftwarePage/components/icons/Arc.tsx new file mode 100644 index 0000000000..a815115820 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Arc.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Arc = (props: SVGProps) => ( + + + +); +export default Arc; diff --git a/frontend/pages/SoftwarePage/components/icons/index.ts b/frontend/pages/SoftwarePage/components/icons/index.ts index 5554f3886a..82bddcaf1f 100644 --- a/frontend/pages/SoftwarePage/components/icons/index.ts +++ b/frontend/pages/SoftwarePage/components/icons/index.ts @@ -15,6 +15,7 @@ import AndroidStudio from "./AndroidStudio"; import AnyDesk from "./AnyDesk"; import AppleApp from "./AppleApp"; import AppleAppStore from "./AppleAppStore"; +import Arc from "./Arc"; import Asana from "./Asana"; import BBEdit from "./BBEdit"; import BeyondCompare from "./BeyondCompare"; @@ -172,6 +173,7 @@ export const SOFTWARE_NAME_TO_ICON_MAP = { "android studio": AndroidStudio, anydesk: AnyDesk, appleAppStore: AppleAppStore, + arc: Arc, asana: Asana, bbedit: BBEdit, "beyond compare": BeyondCompare, diff --git a/website/assets/images/app-icon-arc-60x60@2x.png b/website/assets/images/app-icon-arc-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..64965723c3c60dccea60a55697c73d8ab6e5c4d1 GIT binary patch literal 12703 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 literal 0 HcmV?d00001