From b0fbbfdc387c27cc80cf4de0028e38238cd31348 Mon Sep 17 00:00:00 2001 From: Kenny Botelho <63611879+kennyb-222@users.noreply.github.com> Date: Wed, 3 Sep 2025 13:21:54 -0700 Subject: [PATCH] feat: add Omnissa Horizon Client as a maintained app (#30503) Closes #32558 This PR adds Omnissa Horizon Client as a new maintained app for macOS. The app is available through homebrew and is used for connecting to virtual desktops and applications in enterprise environments, enabling secure remote access for end users. ## Summary by CodeRabbit * **New Features** * Added support for the Omnissa Horizon Client application on macOS, including installation and comprehensive uninstallation procedures. * The application is now listed among maintained apps with relevant metadata and management scripts. --------- Co-authored-by: Kenny Botelho Co-authored-by: jkatz01 --- .../homebrew/omnissa-horizon-client.json | 7 +++++++ ee/maintained-apps/outputs/apps.json | 7 +++++++ .../omnissa-horizon-client/darwin.json | 19 +++++++++++++++++++ 3 files changed, 33 insertions(+) create mode 100644 ee/maintained-apps/inputs/homebrew/omnissa-horizon-client.json create mode 100644 ee/maintained-apps/outputs/omnissa-horizon-client/darwin.json diff --git a/ee/maintained-apps/inputs/homebrew/omnissa-horizon-client.json b/ee/maintained-apps/inputs/homebrew/omnissa-horizon-client.json new file mode 100644 index 0000000000..8deb15beff --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/omnissa-horizon-client.json @@ -0,0 +1,7 @@ +{ + "name": "Omnissa Horizon Client", + "slug": "omnissa-horizon-client/darwin", + "unique_identifier": "com.omnissa.horizon.client.mac", + "token": "omnissa-horizon-client", + "installer_format": "dmg" +} \ No newline at end of file diff --git a/ee/maintained-apps/outputs/apps.json b/ee/maintained-apps/outputs/apps.json index a030c7f84b..650d24f73e 100644 --- a/ee/maintained-apps/outputs/apps.json +++ b/ee/maintained-apps/outputs/apps.json @@ -155,6 +155,13 @@ "unique_identifier": "notion.id", "description": "Notion is an all-in-one workspace for writing, planning, collaborating, and organizing." }, + { + "name": "Omnissa Horizon Client", + "slug": "omnissa-horizon-client/darwin", + "platform": "darwin", + "unique_identifier": "com.omnissa.horizon.client.mac", + "description": "" + }, { "name": "Postman", "slug": "postman/darwin", diff --git a/ee/maintained-apps/outputs/omnissa-horizon-client/darwin.json b/ee/maintained-apps/outputs/omnissa-horizon-client/darwin.json new file mode 100644 index 0000000000..311ab8dcbc --- /dev/null +++ b/ee/maintained-apps/outputs/omnissa-horizon-client/darwin.json @@ -0,0 +1,19 @@ +{ + "versions": [ + { + "version": "2506-8.16.0-16536825094", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.omnissa.horizon.client.mac';" + }, + "installer_url": "https://download3.omnissa.com/software/CART26FQ2_MAC_2506/Omnissa-Horizon-Client-2506-8.16.0-16536825094.dmg", + "install_script_ref": "d39d0371", + "uninstall_script_ref": "ca658441", + "sha256": "45bb7a2ec1b309e9bf93ccda155ab78890c12eabe52cff3e57cd900662a100c0", + "default_categories": null + } + ], + "refs": { + "ca658441": "#!/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\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\u003e/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 \u0026\u0026 \"$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 \u003c timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" \u003e/dev/null 2\u003e\u00261; then\n if ! pgrep -f \"$bundle_id\" \u003e/dev/null 2\u003e\u00261; 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\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 'com.omnissa.horizon.CDSHelper'\nremove_launchctl_service 'com.ws1.deem.MacUIEvents'\nremove_launchctl_service 'com.ws1.deemd'\nremove_launchctl_service 'com.ws1.ws1etlm'\nremove_launchctl_service 'com.ws1.ws1etlmu'\nquit_application 'com.omnissa.horizonapp'\nremove_pkg_files 'com.omnissa.horizon.client.mac'\nforget_pkg 'com.omnissa.horizon.client.mac'\nremove_pkg_files 'com.ws1.Deem'\nforget_pkg 'com.ws1.Deem'\nremove_pkg_files 'com.ws1.Deem.InstallerHelper'\nforget_pkg 'com.ws1.Deem.InstallerHelper'\nremove_pkg_files 'com.ws1.EndpointTelemetryService'\nforget_pkg 'com.ws1.EndpointTelemetryService'\ntrash $LOGGED_IN_USER '/Applications/Omnissa Horizon Client.app'\ntrash $LOGGED_IN_USER '/Library/Application Support/Omnissa'\ntrash $LOGGED_IN_USER '/Library/LaunchDaemons/com.omnissa.horizon.CDSHelper.plist'\ntrash $LOGGED_IN_USER '/Library/Preferences/com.omnissa.horizon.client.mac.plist'\ntrash $LOGGED_IN_USER '/Library/PrivilegedHelperTools/com.omnissa.horizon.CDSHelper'\ntrash $LOGGED_IN_USER '~/.omnissa'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Omnissa Horizon Client'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.omnissa.horizon.client.mac'\ntrash $LOGGED_IN_USER '~/Library/Logs/Omnissa Horizon Client'\ntrash $LOGGED_IN_USER '~/Library/Logs/Omnissa'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.omnissa.horizon.client.mac.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.omnissa.horizon.keyboard.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.omnissa.horizon.client.mac.savedState'\ntrash $LOGGED_IN_USER '~/Library/WebKit/com.omnissa.horizon.client.mac'\n", + "d39d0371": "#!/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/Omnissa Horizon Client.pkg\" -target /\n" + } +} \ No newline at end of file