From 82cff8ba4b7a9db79f3364ce88c22b053d82ff82 Mon Sep 17 00:00:00 2001 From: Allen Houchins <32207388+allenhouchins@users.noreply.github.com> Date: Mon, 17 Nov 2025 20:42:22 -0600 Subject: [PATCH] Add Adobe Acrobat Pro as macOS Fleet-maintained app (#35660) **Related issue:** Resolves # # Checklist for submitter If some of the following don't apply, delete the relevant line. - [ ] Changes file added for user-visible changes in `changes/`, `orbit/changes/` or `ee/fleetd-chrome/changes`. See [Changes files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/guides/committing-changes.md#changes-files) for more information. - [ ] Input data is properly validated, `SELECT *` is avoided, SQL injection is prevented (using placeholders for values in statements) - [ ] If paths of existing endpoints are modified without backwards compatibility, checked the frontend/CLI for any necessary changes ## Testing - [ ] Added/updated automated tests - [ ] Where appropriate, [automated tests simulate multiple hosts and test for host isolation](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/reference/patterns-backend.md#unit-testing) (updates to one hosts's records do not affect another) - [ ] QA'd all new/changed functionality manually For unreleased bug fixes in a release candidate, one of: - [ ] Confirmed that the fix is not expected to adversely impact load test results - [ ] Alerted the release DRI if additional load testing is needed ## Database migrations - [ ] Checked schema for all modified table for columns that will auto-update timestamps during migration. - [ ] Confirmed that updating the timestamps is acceptable, and will not cause unwanted side effects. - [ ] Ensured the correct collation is explicitly set for character columns (`COLLATE utf8mb4_unicode_ci`). ## New Fleet configuration settings - [ ] Setting(s) is/are explicitly excluded from GitOps If you didn't check the box above, follow this checklist for GitOps-enabled settings: - [ ] Verified that the setting is exported via `fleetctl generate-gitops` - [ ] Verified the setting is documented in a separate PR to [the GitOps documentation](https://github.com/fleetdm/fleet/blob/main/docs/Configuration/yaml-files.md#L485) - [ ] Verified that the setting is cleared on the server if it is not supplied in a YAML file (or that it is documented as being optional) - [ ] Verified that any relevant UI is disabled when GitOps mode is enabled ## fleetd/orbit/Fleet Desktop - [ ] Verified compatibility with the latest released version of Fleet (see [Must rule](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/workflows/fleetd-development-and-release-strategy.md)) - [ ] If the change applies to only one platform, confirmed that `runtime.GOOS` is used as needed to isolate changes - [ ] Verified that fleetd runs on macOS, Linux and Windows - [ ] Verified auto-update works from the released version of component to the new version (see [tools/tuf/test](../tools/tuf/test/README.md)) --- .../inputs/homebrew/adobe-acrobat-pro.json | 8 +++++++ .../outputs/adobe-acrobat-pro/darwin.json | 21 ++++++++++++++++++ ee/maintained-apps/outputs/apps.json | 9 +++++++- .../components/icons/AdobeAcrobat.tsx | 14 ++++++++++++ .../app-icon-adobe-acrobat-pro-60x60@2x.png | Bin 0 -> 4157 bytes 5 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 ee/maintained-apps/inputs/homebrew/adobe-acrobat-pro.json create mode 100644 ee/maintained-apps/outputs/adobe-acrobat-pro/darwin.json create mode 100644 frontend/pages/SoftwarePage/components/icons/AdobeAcrobat.tsx create mode 100644 website/assets/images/app-icon-adobe-acrobat-pro-60x60@2x.png diff --git a/ee/maintained-apps/inputs/homebrew/adobe-acrobat-pro.json b/ee/maintained-apps/inputs/homebrew/adobe-acrobat-pro.json new file mode 100644 index 0000000000..acd10a5d44 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/adobe-acrobat-pro.json @@ -0,0 +1,8 @@ +{ + "name": "Adobe Acrobat Pro DC", + "unique_identifier": "com.adobe.Acrobat.Pro", + "token": "adobe-acrobat-pro", + "installer_format": "dmg", + "slug": "adobe-acrobat-pro/darwin", + "default_categories": ["Productivity"] +} diff --git a/ee/maintained-apps/outputs/adobe-acrobat-pro/darwin.json b/ee/maintained-apps/outputs/adobe-acrobat-pro/darwin.json new file mode 100644 index 0000000000..42eced71df --- /dev/null +++ b/ee/maintained-apps/outputs/adobe-acrobat-pro/darwin.json @@ -0,0 +1,21 @@ +{ + "versions": [ + { + "version": "25.001.20841", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.adobe.Acrobat.Pro';" + }, + "installer_url": "https://trials.adobe.com/AdobeProducts/APRO/Acrobat_HelpX/osx10/Acrobat_DC_Web_WWMUI.dmg", + "install_script_ref": "cc10a586", + "uninstall_script_ref": "c098bf7c", + "sha256": "no_check", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "c098bf7c": "#!/bin/sh\n\n# variables\nLOGGED_IN_USER=$(scutil \u003c\u003c\u003c \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nexpand_pkgid_and_map() {\n local PKGID=\"$1\"\n local FUNC=\"$2\"\n if [[ \"$PKGID\" == *\"*\" ]]; then\n local prefix=\"${PKGID%\\*}\"\n echo \"Expanding wildcard for PKGID: $PKGID\"\n for receipt in $(pkgutil --pkgs | grep \"^${prefix}\"); do\n echo \"Processing $receipt\"\n \"$FUNC\" \"$receipt\"\n done\n else\n \"$FUNC\" \"$PKGID\"\n fi\n}\n\nforget_pkg() {\n local PKGID=\"$1\"\n expand_pkgid_and_map \"$PKGID\" forget_receipt\n}\n\nforget_receipt() {\n local PKGID=\"$1\"\n sudo pkgutil --forget \"$PKGID\"\n}\n\nremove_launchctl_service() {\n local service=\"$1\"\n local booleans=(\"true\" \"false\")\n local plist_status\n local paths\n local should_sudo\n\n echo \"Removing launchctl service ${service}\"\n\n for should_sudo in \"${booleans[@]}\"; do\n plist_status=$(launchctl list \"${service}\" 2\u003e/dev/null)\n\n if [[ $plist_status == \\{* ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo launchctl remove \"${service}\"\n else\n launchctl remove \"${service}\"\n fi\n sleep 1\n fi\n\n paths=(\n \"/Library/LaunchAgents/${service}.plist\"\n \"/Library/LaunchDaemons/${service}.plist\"\n )\n\n # if not using sudo, prepend the home directory to the paths\n if [[ $should_sudo == \"false\" ]]; then\n for i in \"${!paths[@]}\"; do\n paths[i]=\"${HOME}${paths[i]}\"\n done\n fi\n\n for path in \"${paths[@]}\"; do\n if [[ -e \"$path\" ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo rm -f -- \"$path\"\n else\n rm -f -- \"$path\"\n fi\n fi\n done\n done\n}\n\nremove_pkg_files() {\n local PKGID=\"$1\"\n expand_pkgid_and_map \"$PKGID\" remove_receipt_files\n}\n\nremove_receipt_files() {\n local PKGID=\"$1\"\n local PKGINFO VOLUME INSTALL_LOCATION FULL_INSTALL_LOCATION\n\n echo \"pkgutil --pkg-info-plist \\\"$PKGID\\\"\"\n PKGINFO=$(pkgutil --pkg-info-plist \"$PKGID\")\n VOLUME=$(echo \"$PKGINFO\" | awk '/\u003ckey\u003evolume\u003c\\/key\u003e/ {getline; gsub(/.*\u003cstring\u003e|\u003c\\/string\u003e.*/, \"\"); print}')\n INSTALL_LOCATION=$(echo \"$PKGINFO\" | awk '/\u003ckey\u003einstall-location\u003c\\/key\u003e/ {getline; gsub(/.*\u003cstring\u003e|\u003c\\/string\u003e.*/, \"\"); print}')\n\n if [ -z \"$INSTALL_LOCATION\" ] || [ \"$INSTALL_LOCATION\" = \"/\" ]; then\n FULL_INSTALL_LOCATION=\"$VOLUME\"\n else\n FULL_INSTALL_LOCATION=\"$VOLUME/$INSTALL_LOCATION\"\n FULL_INSTALL_LOCATION=$(echo \"$FULL_INSTALL_LOCATION\" | sed 's|//|/|g')\n fi\n\n echo \"sudo pkgutil --only-files --files \\\"$PKGID\\\" | sed \\\"s|^|${FULL_INSTALL_LOCATION}/|\\\" | tr '\\\\\\\\n' '\\\\\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\"\n sudo pkgutil --only-files --files \"$PKGID\" | sed \"s|^|/${INSTALL_LOCATION}/|\" | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n echo \"sudo pkgutil --only-dirs --files \\\"$PKGID\\\" | sed \\\"s|^|${FULL_INSTALL_LOCATION}/|\\\" | grep '\\\\.app$' | tr '\\\\\\\\n' '\\\\\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\"\n sudo pkgutil --only-dirs --files \"$PKGID\" | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" | grep '\\.app$' | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n root_app_dir=$(\n sudo pkgutil --only-dirs --files \"$PKGID\" \\\n | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" \\\n | grep 'Applications' \\\n | awk '{ print length, $0 }' \\\n | sort -n \\\n | head -n1 \\\n | cut -d' ' -f2-\n )\n if [ -n \"$root_app_dir\" ]; then\n echo \"sudo rmdir -p \\\"$root_app_dir\\\" 2\u003e/dev/null || :\"\n sudo rmdir -p \"$root_app_dir\" 2\u003e/dev/null || :\n fi\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\nremove_launchctl_service 'Adobe_Genuine_Software_Integrity_Service'\nremove_launchctl_service 'com.adobe.AAM.Startup-1.0'\nremove_launchctl_service 'com.adobe.AAM.Updater-1.0'\nremove_launchctl_service 'com.adobe.agsservice'\nremove_launchctl_service 'com.adobe.ARMDC.Communicator'\nremove_launchctl_service 'com.adobe.ARMDC.SMJobBlessHelper'\nremove_launchctl_service 'com.adobe.ARMDCHelper.cc24aef4a1b90ed56a725c38014c95072f92651fb65e1bf9c8e43c37a23d420d'\nremove_pkg_files 'com.adobe.acrobat.DC.*'\nforget_pkg 'com.adobe.acrobat.DC.*'\nremove_pkg_files 'com.adobe.AcroServicesUpdater'\nforget_pkg 'com.adobe.AcroServicesUpdater'\nremove_pkg_files 'com.adobe.armdc.app.pkg'\nforget_pkg 'com.adobe.armdc.app.pkg'\nremove_pkg_files 'com.adobe.PDApp.AdobeApplicationManager.installer.pkg'\nforget_pkg 'com.adobe.PDApp.AdobeApplicationManager.installer.pkg'\nsudo rm -rf '/Applications/Adobe Acrobat DC/'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Adobe/Acrobat'\ntrash $LOGGED_IN_USER '~/Library/Caches/Acrobat'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.adobe.Acrobat.Pro'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.adobe.Acrobat.Pro'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.adobe.Acrobat.Pro.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/Preferences/Adobe/Acrobat'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.adobe.Acrobat.Pro.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.adobe.Acrobat.Pro.savedState'\ntrash $LOGGED_IN_USER '~/Library/WebKit/com.adobe.Acrobat.Pro'\n", + "cc10a586": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\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# install pkg files\nsudo installer -pkg \"$TMPDIR/Acrobat/Acrobat DC Installer.pkg\" -target /\n" + } +} \ No newline at end of file diff --git a/ee/maintained-apps/outputs/apps.json b/ee/maintained-apps/outputs/apps.json index d9b18758cc..bf8f14ea2c 100644 --- a/ee/maintained-apps/outputs/apps.json +++ b/ee/maintained-apps/outputs/apps.json @@ -15,11 +15,18 @@ "unique_identifier": "com.1password.1password", "description": "Password manager that keeps all passwords secure behind one password." }, + { + "name": "Adobe Acrobat Pro DC", + "slug": "adobe-acrobat-pro/darwin", + "platform": "darwin", + "unique_identifier": "com.adobe.Acrobat.Pro", + "description": "Adobe Acrobat Pro is an app to view, create, manipulate, print and manage files in Portable Document Format." + }, { "name": "Abstract", "slug": "abstract/darwin", "platform": "darwin", - "unique_identifier": "com.SweetScape.010Editor", + "unique_identifier": "com.elasticprojects.abstract-desktop", "description": "Abstract is a collaborative design tool with support for Sketch files." }, { diff --git a/frontend/pages/SoftwarePage/components/icons/AdobeAcrobat.tsx b/frontend/pages/SoftwarePage/components/icons/AdobeAcrobat.tsx new file mode 100644 index 0000000000..2fd5786c0a --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/AdobeAcrobat.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const AdobeAcrobat = (props: SVGProps) => ( + + + +); +export default AdobeAcrobat; diff --git a/website/assets/images/app-icon-adobe-acrobat-pro-60x60@2x.png b/website/assets/images/app-icon-adobe-acrobat-pro-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c78e220d8695f0baf70a32817317d0f68354546d GIT binary patch literal 4157 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 a;TY0xw(5|gh-v+Ibw}!%=vL}rqW=R?gS+DZ literal 0 HcmV?d00001