Skip to content

Rebrand VNC Viewer to RealVNC Connect Viewer - #48255

Merged
allenhouchins merged 5 commits into
mainfrom
allenhouchins-real-vnc-updates
Jun 25, 2026
Merged

Rebrand VNC Viewer to RealVNC Connect Viewer#48255
allenhouchins merged 5 commits into
mainfrom
allenhouchins-real-vnc-updates

Conversation

@allenhouchins

@allenhouchins allenhouchins commented Jun 25, 2026

Copy link
Copy Markdown
Member

Update maintained app metadata and frontend mapping to reflect RealVNC rebrand and package changes. Renamed app entries for macOS and Windows, bumped macOS version to 8.4.2, updated bundle identifier checks and patch queries to account for both legacy and new bundle IDs, and replaced installer URL, checksums, and install/uninstall script refs. Marked the Homebrew input as frozen. Also updated frontend icon mappings to include the new "realvnc connect viewer" name (and kept a mapping for the legacy name).

Summary by CodeRabbit

  • New Features

    • Updated the app label to RealVNC Connect Viewer across supported platforms, including catalog/manifest entries.
    • Added/updated icon mappings for RealVNC Connect Viewer and RealVNC Viewer.
  • Bug Fixes

    • Updated the macOS viewer deployment to version 8.4.2.
    • Improved upgrade/uninstall behavior to replace the legacy viewer, relaunch the updated app, and clean up previous remnants.

Update maintained app metadata and frontend mapping to reflect RealVNC rebrand and package changes. Renamed app entries for macOS and Windows, bumped macOS version to 8.4.2, updated bundle identifier checks and patch queries to account for both legacy and new bundle IDs, and replaced installer URL, checksums, and install/uninstall script refs. Marked the Homebrew input as frozen. Also updated frontend icon mappings to include the new "realvnc connect viewer" name (and kept a mapping for the legacy name).
fleet-release
fleet-release previously approved these changes Jun 25, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Script Diff Results

ee/maintained-apps/outputs/vnc-viewer/darwin.json

=== Install // 126e9470 -> 796192e5 ===

--- /tmp/old.Euc5Ds	2026-06-25 03:04:55.648237606 +0000
+++ /tmp/new.QG4kWE	2026-06-25 03:04:55.648237606 +0000
@@ -94,15 +94,11 @@
 }
 
 
-# extract contents
-MOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)
-yes | hdiutil attach -plist -nobrowse -readonly -mountpoint "$MOUNT_POINT" "$INSTALLER_PATH" || exit 1
-sudo cp -R "$MOUNT_POINT"/* "$TMPDIR"
-hdiutil detach "$MOUNT_POINT" || true
-# copy to the applications folder
+# install pkg files
+quit_and_track_application 'com.realvnc.rvncconnect'
+sudo installer -pkg "$TMPDIR/RealVNC-Connect-Viewer-8.4.2-MacOSX-universal.pkg" -target /
+relaunch_application 'com.realvnc.rvncconnect'
+# Remove the legacy VNC Viewer (pre-rebrand bundle id com.realvnc.vncviewer) so the rebranded
+# RealVNC Connect Viewer supersedes it and the patch policy converges.
 quit_and_track_application 'com.realvnc.vncviewer'
-if [ -d "$APPDIR/VNC Viewer.app" ]; then
-	sudo mv "$APPDIR/VNC Viewer.app" "$TMPDIR/VNC Viewer.app.bkp"
-fi
-sudo cp -R "$TMPDIR/VNC Viewer.app" "$APPDIR"
-relaunch_application 'com.realvnc.vncviewer'
+sudo rm -rf "/Applications/VNC Viewer.app"

=== Uninstall // ca97bbc0 -> 2477e102 ===

--- /tmp/old.shDE0A	2026-06-25 03:04:55.675237790 +0000
+++ /tmp/new.Q7Jh3N	2026-06-25 03:04:55.676237797 +0000
@@ -1,10 +1,48 @@
 #!/bin/bash
 
 # variables
-APPDIR="/Applications/"
 LOGGED_IN_USER=$(scutil <<< "show State:/Users/ConsoleUser" | awk '/Name :/ { print $3 }')
 # functions
 
+quit_application() {
+  local bundle_id="$1"
+  local timeout_duration=10
+
+  # check if the application is running
+  local app_running
+  app_running=$(osascript -e "application id \"$bundle_id\" is running" 2>/dev/null)
+  if [[ "$app_running" != "true" ]]; then
+    return
+  fi
+
+  local console_user
+  console_user=$(stat -f "%Su" /dev/console)
+  if [[ -z "$console_user" || "$console_user" == "root" || "$console_user" == "loginwindow" ]]; then
+    echo "Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'."
+    return
+  fi
+
+  echo "Quitting application '$bundle_id'..."
+
+  # try to quit the application within the timeout period
+  local quit_success=false
+  SECONDS=0
+  while (( SECONDS < timeout_duration )); do
+    if osascript -e "tell application id \"$bundle_id\" to quit" >/dev/null 2>&1; then
+      if ! pgrep -f "$bundle_id" >/dev/null 2>&1; then
+        echo "Application '$bundle_id' quit successfully."
+        quit_success=true
+        break
+      fi
+    fi
+    sleep 1
+  done
+
+  if [[ "$quit_success" = false ]]; then
+    echo "Application '$bundle_id' did not quit."
+  fi
+}
+
 trash() {
   local logged_in_user="$1"
   local target_file="$2"
@@ -52,6 +90,11 @@
   fi
 }
 
-sudo rm -rf "$APPDIR/VNC Viewer.app"
-trash $LOGGED_IN_USER '~/Library/Preferences/com.realvnc.vncviewer.plist'
-trash $LOGGED_IN_USER '~/Library/Saved Application State/com.realvnc.vncviewer.savedState'
+quit_application 'com.realvnc.rvncconnect'
+sudo rm -rf '/Applications/RealVNC Connect Viewer.app'
+sudo pkgutil --forget 'com.realvnc.rvncconnect.viewer.1' 2>/dev/null || true
+trash $LOGGED_IN_USER '~/Library/Application Support/com.realvnc.rvncconnect'
+trash $LOGGED_IN_USER '~/Library/Caches/com.realvnc.rvncconnect'
+trash $LOGGED_IN_USER '~/Library/Logs/vnc'
+trash $LOGGED_IN_USER '~/Library/Preferences/com.realvnc.rvncconnect.plist'
+trash $LOGGED_IN_USER '~/Library/Saved Application State/com.realvnc.rvncconnect.savedState'

@codecov

codecov Bot commented Jun 25, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 67.30%. Comparing base (67cdbee) to head (2aed5b6).
⚠️ Report is 3 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff            @@
##             main   #48255    +/-   ##
========================================
  Coverage   67.30%   67.30%            
========================================
  Files        3660     3660            
  Lines      231442   231442            
  Branches    12156    12302   +146     
========================================
  Hits       155762   155762            
+ Misses      61742    61741     -1     
- Partials    13938    13939     +1     
Flag Coverage Δ
frontend 58.65% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

fleet-release
fleet-release previously approved these changes Jun 25, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Script Diff Results

ee/maintained-apps/outputs/vnc-viewer/darwin.json

=== Install // 126e9470 -> 796192e5 ===

--- /tmp/old.vxhf2G	2026-06-25 03:12:46.245678963 +0000
+++ /tmp/new.5hw6ck	2026-06-25 03:12:46.245678963 +0000
@@ -94,15 +94,11 @@
 }
 
 
-# extract contents
-MOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)
-yes | hdiutil attach -plist -nobrowse -readonly -mountpoint "$MOUNT_POINT" "$INSTALLER_PATH" || exit 1
-sudo cp -R "$MOUNT_POINT"/* "$TMPDIR"
-hdiutil detach "$MOUNT_POINT" || true
-# copy to the applications folder
+# install pkg files
+quit_and_track_application 'com.realvnc.rvncconnect'
+sudo installer -pkg "$TMPDIR/RealVNC-Connect-Viewer-8.4.2-MacOSX-universal.pkg" -target /
+relaunch_application 'com.realvnc.rvncconnect'
+# Remove the legacy VNC Viewer (pre-rebrand bundle id com.realvnc.vncviewer) so the rebranded
+# RealVNC Connect Viewer supersedes it and the patch policy converges.
 quit_and_track_application 'com.realvnc.vncviewer'
-if [ -d "$APPDIR/VNC Viewer.app" ]; then
-	sudo mv "$APPDIR/VNC Viewer.app" "$TMPDIR/VNC Viewer.app.bkp"
-fi
-sudo cp -R "$TMPDIR/VNC Viewer.app" "$APPDIR"
-relaunch_application 'com.realvnc.vncviewer'
+sudo rm -rf "/Applications/VNC Viewer.app"

=== Uninstall // ca97bbc0 -> 2477e102 ===

--- /tmp/old.JQHvgH	2026-06-25 03:12:46.262679174 +0000
+++ /tmp/new.AGlMiT	2026-06-25 03:12:46.263679186 +0000
@@ -1,10 +1,48 @@
 #!/bin/bash
 
 # variables
-APPDIR="/Applications/"
 LOGGED_IN_USER=$(scutil <<< "show State:/Users/ConsoleUser" | awk '/Name :/ { print $3 }')
 # functions
 
+quit_application() {
+  local bundle_id="$1"
+  local timeout_duration=10
+
+  # check if the application is running
+  local app_running
+  app_running=$(osascript -e "application id \"$bundle_id\" is running" 2>/dev/null)
+  if [[ "$app_running" != "true" ]]; then
+    return
+  fi
+
+  local console_user
+  console_user=$(stat -f "%Su" /dev/console)
+  if [[ -z "$console_user" || "$console_user" == "root" || "$console_user" == "loginwindow" ]]; then
+    echo "Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'."
+    return
+  fi
+
+  echo "Quitting application '$bundle_id'..."
+
+  # try to quit the application within the timeout period
+  local quit_success=false
+  SECONDS=0
+  while (( SECONDS < timeout_duration )); do
+    if osascript -e "tell application id \"$bundle_id\" to quit" >/dev/null 2>&1; then
+      if ! pgrep -f "$bundle_id" >/dev/null 2>&1; then
+        echo "Application '$bundle_id' quit successfully."
+        quit_success=true
+        break
+      fi
+    fi
+    sleep 1
+  done
+
+  if [[ "$quit_success" = false ]]; then
+    echo "Application '$bundle_id' did not quit."
+  fi
+}
+
 trash() {
   local logged_in_user="$1"
   local target_file="$2"
@@ -52,6 +90,11 @@
   fi
 }
 
-sudo rm -rf "$APPDIR/VNC Viewer.app"
-trash $LOGGED_IN_USER '~/Library/Preferences/com.realvnc.vncviewer.plist'
-trash $LOGGED_IN_USER '~/Library/Saved Application State/com.realvnc.vncviewer.savedState'
+quit_application 'com.realvnc.rvncconnect'
+sudo rm -rf '/Applications/RealVNC Connect Viewer.app'
+sudo pkgutil --forget 'com.realvnc.rvncconnect.viewer.1' 2>/dev/null || true
+trash $LOGGED_IN_USER '~/Library/Application Support/com.realvnc.rvncconnect'
+trash $LOGGED_IN_USER '~/Library/Caches/com.realvnc.rvncconnect'
+trash $LOGGED_IN_USER '~/Library/Logs/vnc'
+trash $LOGGED_IN_USER '~/Library/Preferences/com.realvnc.rvncconnect.plist'
+trash $LOGGED_IN_USER '~/Library/Saved Application State/com.realvnc.rvncconnect.savedState'

@allenhouchins
allenhouchins marked this pull request as ready for review June 25, 2026 03:19
@allenhouchins
allenhouchins requested a review from a team as a code owner June 25, 2026 03:19
Copilot AI review requested due to automatic review settings June 25, 2026 03:19

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Claude Code Review

This repository is configured for manual code reviews. Comment @claude review to trigger a review and subscribe this PR to future pushes, or @claude review once for a one-time review.

Tip: disable this comment in your organization's Code Review settings.

fleet-release
fleet-release previously approved these changes Jun 25, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Script Diff Results

ee/maintained-apps/outputs/vnc-viewer/darwin.json

=== Install // 126e9470 -> 796192e5 ===

--- /tmp/old.O3PEkE	2026-06-25 03:19:44.947248060 +0000
+++ /tmp/new.11s0ly	2026-06-25 03:19:44.947248060 +0000
@@ -94,15 +94,11 @@
 }
 
 
-# extract contents
-MOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)
-yes | hdiutil attach -plist -nobrowse -readonly -mountpoint "$MOUNT_POINT" "$INSTALLER_PATH" || exit 1
-sudo cp -R "$MOUNT_POINT"/* "$TMPDIR"
-hdiutil detach "$MOUNT_POINT" || true
-# copy to the applications folder
+# install pkg files
+quit_and_track_application 'com.realvnc.rvncconnect'
+sudo installer -pkg "$TMPDIR/RealVNC-Connect-Viewer-8.4.2-MacOSX-universal.pkg" -target /
+relaunch_application 'com.realvnc.rvncconnect'
+# Remove the legacy VNC Viewer (pre-rebrand bundle id com.realvnc.vncviewer) so the rebranded
+# RealVNC Connect Viewer supersedes it and the patch policy converges.
 quit_and_track_application 'com.realvnc.vncviewer'
-if [ -d "$APPDIR/VNC Viewer.app" ]; then
-	sudo mv "$APPDIR/VNC Viewer.app" "$TMPDIR/VNC Viewer.app.bkp"
-fi
-sudo cp -R "$TMPDIR/VNC Viewer.app" "$APPDIR"
-relaunch_application 'com.realvnc.vncviewer'
+sudo rm -rf "/Applications/VNC Viewer.app"

=== Uninstall // ca97bbc0 -> 2477e102 ===

--- /tmp/old.XmJ4HZ	2026-06-25 03:19:44.973248489 +0000
+++ /tmp/new.7EbZi5	2026-06-25 03:19:44.973248489 +0000
@@ -1,10 +1,48 @@
 #!/bin/bash
 
 # variables
-APPDIR="/Applications/"
 LOGGED_IN_USER=$(scutil <<< "show State:/Users/ConsoleUser" | awk '/Name :/ { print $3 }')
 # functions
 
+quit_application() {
+  local bundle_id="$1"
+  local timeout_duration=10
+
+  # check if the application is running
+  local app_running
+  app_running=$(osascript -e "application id \"$bundle_id\" is running" 2>/dev/null)
+  if [[ "$app_running" != "true" ]]; then
+    return
+  fi
+
+  local console_user
+  console_user=$(stat -f "%Su" /dev/console)
+  if [[ -z "$console_user" || "$console_user" == "root" || "$console_user" == "loginwindow" ]]; then
+    echo "Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'."
+    return
+  fi
+
+  echo "Quitting application '$bundle_id'..."
+
+  # try to quit the application within the timeout period
+  local quit_success=false
+  SECONDS=0
+  while (( SECONDS < timeout_duration )); do
+    if osascript -e "tell application id \"$bundle_id\" to quit" >/dev/null 2>&1; then
+      if ! pgrep -f "$bundle_id" >/dev/null 2>&1; then
+        echo "Application '$bundle_id' quit successfully."
+        quit_success=true
+        break
+      fi
+    fi
+    sleep 1
+  done
+
+  if [[ "$quit_success" = false ]]; then
+    echo "Application '$bundle_id' did not quit."
+  fi
+}
+
 trash() {
   local logged_in_user="$1"
   local target_file="$2"
@@ -52,6 +90,11 @@
   fi
 }
 
-sudo rm -rf "$APPDIR/VNC Viewer.app"
-trash $LOGGED_IN_USER '~/Library/Preferences/com.realvnc.vncviewer.plist'
-trash $LOGGED_IN_USER '~/Library/Saved Application State/com.realvnc.vncviewer.savedState'
+quit_application 'com.realvnc.rvncconnect'
+sudo rm -rf '/Applications/RealVNC Connect Viewer.app'
+sudo pkgutil --forget 'com.realvnc.rvncconnect.viewer.1' 2>/dev/null || true
+trash $LOGGED_IN_USER '~/Library/Application Support/com.realvnc.rvncconnect'
+trash $LOGGED_IN_USER '~/Library/Caches/com.realvnc.rvncconnect'
+trash $LOGGED_IN_USER '~/Library/Logs/vnc'
+trash $LOGGED_IN_USER '~/Library/Preferences/com.realvnc.rvncconnect.plist'
+trash $LOGGED_IN_USER '~/Library/Saved Application State/com.realvnc.rvncconnect.savedState'

@coderabbitai

coderabbitai Bot commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: b3914e6d-4a5d-44f5-be87-21913391825f

📥 Commits

Reviewing files that changed from the base of the PR and between d6f8513 and 2aed5b6.

📒 Files selected for processing (1)
  • ee/maintained-apps/outputs/vnc-viewer/darwin.json
🚧 Files skipped from review as they are similar to previous changes (1)
  • ee/maintained-apps/outputs/vnc-viewer/darwin.json

Walkthrough

The PR renames VNC Viewer entries to RealVNC Connect Viewer in the Homebrew and Winget inputs and in the maintained app registry. It also marks the Homebrew input as frozen, updates the Darwin deployment policy to version 8.4.2 with new install and uninstall refs, and adds RealVNC viewer aliases to the frontend icon map.

Possibly related PRs

  • fleetdm/fleet#47732: Also updates frontend/pages/SoftwarePage/components/icons/index.ts by extending SOFTWARE_NAME_TO_ICON_MAP.
  • fleetdm/fleet#47979: Also changes the vnc-viewer records and related Windows/Winget handling for the RealVNC viewer rename.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description is a summary paragraph and does not follow the required template sections or checklist items. Rewrite the PR description using the repository template, including Related issue, checklist items, Testing, Database migrations, and any applicable fleetd/orbit sections.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main change: rebranding VNC Viewer to RealVNC Connect Viewer.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch allenhouchins-real-vnc-updates

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates Fleet-maintained app metadata (macOS + Windows) and the Software page icon mapping to reflect the RealVNC Viewer rebrand to RealVNC Connect Viewer, including updated installer metadata and name-to-icon aliases.

Changes:

  • Updated maintained app list entries to rename “VNC Viewer” → “RealVNC Connect Viewer” (macOS + Windows) and adjusted identifiers/descriptions.
  • Updated the macOS maintained-app manifest to the new 8.4.2 package URL, scripts, SHA, and patch logic intended to account for legacy vs rebranded bundle IDs.
  • Added icon mappings for the new software name while keeping legacy mappings.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
frontend/pages/SoftwarePage/components/icons/index.ts Adds icon aliases for “realvnc connect viewer” and “realvnc viewer”.
ee/maintained-apps/outputs/vnc-viewer/darwin.json Updates macOS manifest to new pkg installer + scripts and bundle-id-aware patch query.
ee/maintained-apps/outputs/apps.json Renames the maintained app entries and updates identifiers/descriptions.
ee/maintained-apps/inputs/winget/vnc-viewer.json Updates the Winget input display name to the rebranded name.
ee/maintained-apps/inputs/homebrew/vnc-viewer.json Renames the Homebrew input and marks it frozen.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

"queries": {
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.realvnc.vncviewer';",
"patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.realvnc.vncviewer' AND version_compare(bundle_short_version, '7.15.1') < 0);"
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.realvnc.rvncconnect';",
"126e9470": "#!/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.realvnc.vncviewer'\nif [ -d \"$APPDIR/VNC Viewer.app\" ]; then\n\tsudo mv \"$APPDIR/VNC Viewer.app\" \"$TMPDIR/VNC Viewer.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/VNC Viewer.app\" \"$APPDIR\"\nrelaunch_application 'com.realvnc.vncviewer'\n",
"ca97bbc0": "#!/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/VNC Viewer.app\"\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.realvnc.vncviewer.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.realvnc.vncviewer.savedState'\n"
"2477e102": "#!/bin/bash\n\n# variables\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 local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; 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 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\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\nquit_application 'com.realvnc.rvncconnect'\nsudo rm -rf '/Applications/RealVNC Connect Viewer.app'\nsudo pkgutil --forget 'com.realvnc.rvncconnect.viewer.1' 2>/dev/null || true\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.realvnc.rvncconnect'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.realvnc.rvncconnect'\ntrash $LOGGED_IN_USER '~/Library/Logs/vnc'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.realvnc.rvncconnect.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.realvnc.rvncconnect.savedState'\n",
"796192e5": "#!/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# install pkg files\nquit_and_track_application 'com.realvnc.rvncconnect'\nsudo installer -pkg \"$TMPDIR/RealVNC-Connect-Viewer-8.4.2-MacOSX-universal.pkg\" -target /\nrelaunch_application 'com.realvnc.rvncconnect'\n# Remove the legacy VNC Viewer (pre-rebrand bundle id com.realvnc.vncviewer) so the rebranded\n# RealVNC Connect Viewer supersedes it and the patch policy converges.\nquit_and_track_application 'com.realvnc.vncviewer'\nsudo rm -rf \"/Applications/VNC Viewer.app\"\n"
Comment on lines 2 to 3
"name": "RealVNC Connect Viewer",
"unique_identifier": "com.realvnc.vncviewer",

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@ee/maintained-apps/outputs/vnc-viewer/darwin.json`:
- Around line 6-7: The install check is missing the legacy bundle ID, so
`exists` in the vnc-viewer Darwin output should match both
`com.realvnc.rvncconnect` and `com.realvnc.vncviewer` just like the migration
logic does. Update the `exists` query in this JSON entry to include the
pre-rebrand bundle identifier so the check remains consistent with the migration
path and still detects older installs.
- Line 19: The uninstall script currently only targets the new RealVNC Connect
Viewer app, so legacy VNC Viewer installs are left behind. Update the uninstall
flow in the script around quit_application and the app-removal step to also
detect and remove the legacy “VNC Viewer.app” alongside “RealVNC Connect
Viewer.app”, and make sure any related pkgutil forget or cleanup paths cover the
legacy bundle identifier if it exists.
- Line 20: The relaunch tracking in
quit_and_track_application/relaunch_application only covers
com.realvnc.rvncconnect, so a legacy-running upgrade can lose the app state when
com.realvnc.vncviewer is the one that was open. Track the running state for the
legacy bundle id before removing it, then relaunch the new bundle id after
installation if the legacy app was previously running; use the existing
quit_and_track_application and relaunch_application flow to preserve state
across the migration.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 8460cfe9-6d68-424b-bb87-6345ec991445

📥 Commits

Reviewing files that changed from the base of the PR and between a31090b and ad4787e.

📒 Files selected for processing (5)
  • ee/maintained-apps/inputs/homebrew/vnc-viewer.json
  • ee/maintained-apps/inputs/winget/vnc-viewer.json
  • ee/maintained-apps/outputs/apps.json
  • ee/maintained-apps/outputs/vnc-viewer/darwin.json
  • frontend/pages/SoftwarePage/components/icons/index.ts

Comment on lines +6 to +7
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.realvnc.rvncconnect';",
"patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.realvnc.vncviewer' OR (bundle_identifier = 'com.realvnc.rvncconnect' AND version_compare(bundle_short_version, '8.4.2') < 0));"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Include the legacy bundle ID in exists.

Line 6 now recognizes only com.realvnc.rvncconnect, so machines that still have the pre-rebrand com.realvnc.vncviewer app will stop matching the install check even though Line 7 and Line 20 still try to migrate that legacy install.

Suggested fix
-      "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.realvnc.rvncconnect';",
+      "exists": "SELECT 1 FROM apps WHERE bundle_identifier IN ('com.realvnc.vncviewer', 'com.realvnc.rvncconnect');",
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.realvnc.rvncconnect';",
"patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.realvnc.vncviewer' OR (bundle_identifier = 'com.realvnc.rvncconnect' AND version_compare(bundle_short_version, '8.4.2') < 0));"
"exists": "SELECT 1 FROM apps WHERE bundle_identifier IN ('com.realvnc.vncviewer', 'com.realvnc.rvncconnect');",
"patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.realvnc.vncviewer' OR (bundle_identifier = 'com.realvnc.rvncconnect' AND version_compare(bundle_short_version, '8.4.2') < 0));"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ee/maintained-apps/outputs/vnc-viewer/darwin.json` around lines 6 - 7, The
install check is missing the legacy bundle ID, so `exists` in the vnc-viewer
Darwin output should match both `com.realvnc.rvncconnect` and
`com.realvnc.vncviewer` just like the migration logic does. Update the `exists`
query in this JSON entry to include the pre-rebrand bundle identifier so the
check remains consistent with the migration path and still detects older
installs.

Comment thread ee/maintained-apps/outputs/vnc-viewer/darwin.json Outdated
Comment thread ee/maintained-apps/outputs/vnc-viewer/darwin.json Outdated
fleet-release
fleet-release previously approved these changes Jun 25, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Script Diff Results

ee/maintained-apps/outputs/vnc-viewer/darwin.json

=== Install // 126e9470 -> 796192e5 ===

--- /tmp/old.VScg70	2026-06-25 03:36:04.778526515 +0000
+++ /tmp/new.zK8iWd	2026-06-25 03:36:04.778526515 +0000
@@ -94,15 +94,11 @@
 }
 
 
-# extract contents
-MOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)
-yes | hdiutil attach -plist -nobrowse -readonly -mountpoint "$MOUNT_POINT" "$INSTALLER_PATH" || exit 1
-sudo cp -R "$MOUNT_POINT"/* "$TMPDIR"
-hdiutil detach "$MOUNT_POINT" || true
-# copy to the applications folder
+# install pkg files
+quit_and_track_application 'com.realvnc.rvncconnect'
+sudo installer -pkg "$TMPDIR/RealVNC-Connect-Viewer-8.4.2-MacOSX-universal.pkg" -target /
+relaunch_application 'com.realvnc.rvncconnect'
+# Remove the legacy VNC Viewer (pre-rebrand bundle id com.realvnc.vncviewer) so the rebranded
+# RealVNC Connect Viewer supersedes it and the patch policy converges.
 quit_and_track_application 'com.realvnc.vncviewer'
-if [ -d "$APPDIR/VNC Viewer.app" ]; then
-	sudo mv "$APPDIR/VNC Viewer.app" "$TMPDIR/VNC Viewer.app.bkp"
-fi
-sudo cp -R "$TMPDIR/VNC Viewer.app" "$APPDIR"
-relaunch_application 'com.realvnc.vncviewer'
+sudo rm -rf "/Applications/VNC Viewer.app"

=== Uninstall // ca97bbc0 -> 2477e102 ===

--- /tmp/old.RwNMej	2026-06-25 03:36:04.822526669 +0000
+++ /tmp/new.LQgfQl	2026-06-25 03:36:04.822526669 +0000
@@ -1,10 +1,48 @@
 #!/bin/bash
 
 # variables
-APPDIR="/Applications/"
 LOGGED_IN_USER=$(scutil <<< "show State:/Users/ConsoleUser" | awk '/Name :/ { print $3 }')
 # functions
 
+quit_application() {
+  local bundle_id="$1"
+  local timeout_duration=10
+
+  # check if the application is running
+  local app_running
+  app_running=$(osascript -e "application id \"$bundle_id\" is running" 2>/dev/null)
+  if [[ "$app_running" != "true" ]]; then
+    return
+  fi
+
+  local console_user
+  console_user=$(stat -f "%Su" /dev/console)
+  if [[ -z "$console_user" || "$console_user" == "root" || "$console_user" == "loginwindow" ]]; then
+    echo "Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'."
+    return
+  fi
+
+  echo "Quitting application '$bundle_id'..."
+
+  # try to quit the application within the timeout period
+  local quit_success=false
+  SECONDS=0
+  while (( SECONDS < timeout_duration )); do
+    if osascript -e "tell application id \"$bundle_id\" to quit" >/dev/null 2>&1; then
+      if ! pgrep -f "$bundle_id" >/dev/null 2>&1; then
+        echo "Application '$bundle_id' quit successfully."
+        quit_success=true
+        break
+      fi
+    fi
+    sleep 1
+  done
+
+  if [[ "$quit_success" = false ]]; then
+    echo "Application '$bundle_id' did not quit."
+  fi
+}
+
 trash() {
   local logged_in_user="$1"
   local target_file="$2"
@@ -52,6 +90,11 @@
   fi
 }
 
-sudo rm -rf "$APPDIR/VNC Viewer.app"
-trash $LOGGED_IN_USER '~/Library/Preferences/com.realvnc.vncviewer.plist'
-trash $LOGGED_IN_USER '~/Library/Saved Application State/com.realvnc.vncviewer.savedState'
+quit_application 'com.realvnc.rvncconnect'
+sudo rm -rf '/Applications/RealVNC Connect Viewer.app'
+sudo pkgutil --forget 'com.realvnc.rvncconnect.viewer.1' 2>/dev/null || true
+trash $LOGGED_IN_USER '~/Library/Application Support/com.realvnc.rvncconnect'
+trash $LOGGED_IN_USER '~/Library/Caches/com.realvnc.rvncconnect'
+trash $LOGGED_IN_USER '~/Library/Logs/vnc'
+trash $LOGGED_IN_USER '~/Library/Preferences/com.realvnc.rvncconnect.plist'
+trash $LOGGED_IN_USER '~/Library/Saved Application State/com.realvnc.rvncconnect.savedState'

@github-actions

Copy link
Copy Markdown
Contributor

Script Diff Results

ee/maintained-apps/outputs/vnc-viewer/darwin.json

=== Install // 796192e5 -> 932783c1 ===

--- /tmp/old.V2BFMz	2026-06-25 03:48:49.647381940 +0000
+++ /tmp/new.Elnh1x	2026-06-25 03:48:49.647381940 +0000
@@ -102,3 +102,8 @@
 # RealVNC Connect Viewer supersedes it and the patch policy converges.
 quit_and_track_application 'com.realvnc.vncviewer'
 sudo rm -rf "/Applications/VNC Viewer.app"
+# If the legacy VNC Viewer was running, relaunch the rebranded app in its place.
+if [ "$APP_WAS_RUNNING_com_realvnc_vncviewer" = "1" ]; then
+  export APP_WAS_RUNNING_com_realvnc_rvncconnect=1
+  relaunch_application 'com.realvnc.rvncconnect'
+fi

=== Uninstall // 2477e102 -> 4d626246 ===

--- /tmp/old.uwAJH4	2026-06-25 03:48:49.691381817 +0000
+++ /tmp/new.wYzdjS	2026-06-25 03:48:49.691381817 +0000
@@ -93,8 +93,13 @@
 quit_application 'com.realvnc.rvncconnect'
 sudo rm -rf '/Applications/RealVNC Connect Viewer.app'
 sudo pkgutil --forget 'com.realvnc.rvncconnect.viewer.1' 2>/dev/null || true
+# Also remove the legacy VNC Viewer (pre-rebrand bundle id com.realvnc.vncviewer) if present.
+quit_application 'com.realvnc.vncviewer'
+sudo rm -rf '/Applications/VNC Viewer.app'
 trash $LOGGED_IN_USER '~/Library/Application Support/com.realvnc.rvncconnect'
 trash $LOGGED_IN_USER '~/Library/Caches/com.realvnc.rvncconnect'
 trash $LOGGED_IN_USER '~/Library/Logs/vnc'
 trash $LOGGED_IN_USER '~/Library/Preferences/com.realvnc.rvncconnect.plist'
 trash $LOGGED_IN_USER '~/Library/Saved Application State/com.realvnc.rvncconnect.savedState'
+trash $LOGGED_IN_USER '~/Library/Preferences/com.realvnc.vncviewer.plist'
+trash $LOGGED_IN_USER '~/Library/Saved Application State/com.realvnc.vncviewer.savedState'

@allenhouchins
allenhouchins merged commit d60cf12 into main Jun 25, 2026
29 of 31 checks passed
@allenhouchins
allenhouchins deleted the allenhouchins-real-vnc-updates branch June 25, 2026 03:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants