Skip to content

App Setup Helper

Victor Deon edited this page Oct 9, 2025 · 4 revisions

The App Setup Helper tool guides users through enabling Screen Recording permissions for specified applications on macOS and consolidates permission requests into a single prompt for multiple applications. By leveraging macOS's Privacy & Security settings, this tool facilitates Screen Recording configuration to support applications such as video conferencing or screen sharing software. It utilizes native SwiftUI to provide an intuitive user interface that presents a single consolidated prompt for all apps listed in the --appNames parameter, monitors their status, and updates the display dynamically.

Quick Start

In this example, we prompt the user to enable screen recording for both Google Chrome and Zoom, with a 5 minute timeout. To set this up, you will need:

  • Configuration Profile
  • Policy

Example Configuration Profile

Below is a Managed PLIST that can be deployed through a Configuration Profile to the following domain: tech.rocketman.appsetuphelper

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>appNames</key>
    <array>
      <string>Zoom:us.zoom.xos</string>
      <string>Chrome:com.google.chrome</string>
    </array>
    <key>title</key>
    <string>Enable Screen Recording for Apps</string>
    <key>message</key>
    <string>Screen sharing needs to be enabled for the following application(s).</string>
    <key>timeout</key>
    <integer>300</integer>
  </dict>
</plist>

Example Policy

When setting up the Launch a Tool Script in Jamf Pro, use the following script parameters:

  • Parameter 4 (Global Options and Tool Name): AppSetupHelper

Command Options

Required Parameters

--appNames [string]

Defines the applications requiring Screen Recording permissions. Each application is specified as "Display Name:BundleID", where:

  • Display Name is the name shown to the user.

  • BundleID is the application’s unique identifier, which can be obtained using the command osascript -e 'id of app "App Name"'.

  • Type: array of strings

  • Example:

    rocketman AppSetupHelper --appNames "Chrome:com.google.chrome" "Zoom:us.zoom.xos"

Optional Parameters

--title [string]

Sets the title text for the dialog window.

  • Type: string
  • Default: "Enable Screen Sharing"
  • Example:
    rocketman AppSetupHelper --title "Enable Screen Recording for Apps"

--message [string]

Defines the body text displayed within the dialog window.

  • Type: string
  • Default: "Screen sharing needs to be enabled for the following application(s)."
  • Example:
    rocketman AppSetupHelper --message "Screen recording permissions are required for the following applications:"

--icon [path]

Provides the full path to an icon file to be displayed in the dialog window.

  • Type: string
  • Default: "/Library/Application Support/Rocketman/logo.png"
  • Example:
    rocketman AppSetupHelper --icon "/Library/Application Support/Rocketman/logo.png"

--domain [string]

Specifies the domain for storing options in local or managed plists. This setting allows for persistent configuration management.

  • Type: string
  • Default: "tech.rocketman.appsetuphelper"
  • Example:
    rocketman AppSetupHelper --domain "tech.rocketman.customdomain"

--width [string]

Sets the width of the dialog box in pixels.

  • Type: string
  • Default: "615"
  • Example:
    rocketman AppSetupHelper --width "700"

--height [string]

Sets the height of the dialog box in pixels.

  • Type: string
  • Default: "615"
  • Example:
    rocketman AppSetupHelper --height "400"

--timeout [integer]

Defines the time in seconds to wait for the user to enable Screen Recording for the listed applications. After this period, the tool will exit.

  • Type: integer
  • Default: 300 seconds
  • Example:
    rocketman AppSetupHelper --timeout 600

Advanced Usage Example

Below is a command configuring the App Setup Helper tool with multiple applications, a customized dialog title, body message, timeout setting, and icon.

rocketman AppSetupHelper \
  --appNames "Chrome:com.google.chrome" "Zoom:us.zoom.xos" \
  --title "Enable Screen Recording for Applications" \
  --message "Please allow screen recording for the applications listed below." \
  --icon "/Library/Application Support/Rocketman/logo.png" \
  --timeout 600

CAUTION

  • When running this tool through Terminal for testing purposes, it will require Terminal to have Full Disk Access. This is because Terminal is technically executing the tool. However, if deployed more commonly through a Jamf Policy, this won't be an issue because Jamf Pro already has the required PPPC profile to run with full disk access.

JSON Scheme

{
  "title": "App Setup Helper (tech.rocketman.appsetuphelper)",
  "description": "A tool that guides users through the process of enabling Screen Recording on their Macs.",
  "properties": {
    "appNames": {
      "title": "App Names",
      "description": "The Display Name and Bundle ID of the app(s) that you want the user to enable screen sharing for. This is done by defining both the display name that will be shown and the bundle ID of the app, separated by a colon. Note, this parameter can be used multiple times to define multiple applications.",
      "property_order": 1,
      "type": "array",
      "items": {
        "type": "string",
        "title": "Application Name",
        "default": "Google Chrome:com.google.chrome"
      }
    },
    "title": {
      "title": "Dialog Title",
      "description": "The Title in the window that the user sees",
      "property_order": 2,
      "type": "string",
      "default": "Enable Screen Recording for Apps"
    },
    "message": {
      "title": "Dialog Message",
      "description": "The body text of the dialog window",
      "property_order": 3,
      "type": "string",
      "default": "Screen recording permissions are required for the following applications:"
    },
    "icon": {
      "title": "Dialog Icon Path",
      "description": "Full path to the icon added to the window",
      "property_order": 4,
      "type": "string",
      "default": "/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/ToolbarInfo.icns"
    },
    "width": {
      "title": "Dialog Width",
      "description": "Width of dialog box",
      "property_order": 5,
      "type": "string",
      "default": 700
    },
    "height": {
      "title": "Dialog Height",
      "description": "Height of dialog box",
      "property_order": 6,
      "type": "string",
      "default": 400
    },
    "timeout": {
      "title": "Dialog Timeout",
      "description": "Time in seconds to wait for the user to enable screen recording before timing out.",
      "property_order": 7,
      "type": "integer",
      "default": 600
    }
  },
  "required": [
    "appNames"
  ]
}

Introduction

Resources

Tools

Misc

Pipeline

Submit an Issue

Clone this wiki locally