Pre-configuration allows IT administrators to deploy Workspace Windows app with pre-configured settings and data sources (Devolutions Server and Devolutions Hub Business) across Windows endpoints. This eliminates the need for end users to manually configure the application after installation.
Zero-touch deployment: Users start with fully configured applications
Consistency: Ensure all users have the same data sources and settings
Time savings: Eliminate manual configuration steps
Flexibility: Multiple deployment methods to fit different IT infrastructures
Scalability: Deploy to hundreds or thousands of endpoints efficiently
An IT Admin configures datasources and settings via MSI parameters or configuration files.
Deployment tool pushes installation to managed devices (Intune, SCCM, PDQ Deploy, etc.).
Users launche app for the first time.
The app reads the configuration and automatically creates datasources.
Users log in to complete the connection.
Authentication required: Pre-configured datasources are created in a "pending" state. Users must still log in to complete the connection.
First launch only: Configuration is applied once on first launch. Subsequent changes require app reinstallation or manual configuration.
Credentials NOT Stored: Pre-configuration does NOT include user credentials. Users must log in with their own credentials.
Pass configuration parameters directly to the Windows installer during deployment. You can combine data source parameters with application settings.
Use case: Quick deployments, simple configurations, testing
Basic example (data sources only):
msiexec /i Workspace.msi /qn DVLS_SERVER_URL="https://server.com" HUB_NAME="mycompany"
With settings (data sources + application settings):
msiexec /i Workspace.msi /qn ^
DVLS_SERVER_URL="https://server.com" ^
HUB_NAME="mycompany" ^
ORGANIZATION_ID="guid-here" ^
LANGUAGE="fr" ^
LOCKING_OPTION="windowsCredentials"
Limitations: Only one Devolutions Server can be configured via MSI parameters. For multiple servers, use Method 2.
Deploy a pre-created .cfg file to target systems.
Use case: Intune, SCCM, complex configurations, multiple data sources
msiexec /i Workspace.msi /qn DEPLOY_CONFIG="C:\path\to\Config.cfg"
Target:
%ProgramData%\net.devolutions\Workspace\DefaultConfig.cfgHow it works:
MSI writes config to ProgramData during installation
When any user launches Workspace, app detects system-wide config
Config automatically copies to user's Roaming profile
User has configured application
Reliable: Works regardless of user context (no "Default user" issues)
Consistent: All users on machine get same configuration
Automation-friendly: Perfect for Intune, SCCM, silent installs
Multi-user support: Applies to all existing and future users
Best for: Intune, SCCM, silent installs, multi-user machines, shared workstations
msiexec /i Workspace.msi /qn USER_CONFIG="C:\path\to\Config.cfg"
Target:
%LOCALAPPDATA%\net.devolutions\Workspace\Config.cfgHow it works:
MSI writes config to installing user's Local AppData
User launches Workspace
Config copies to user's Roaming profile
Only that user has configured application
Limitations:
Only configures the user who ran the installer
May fail in automated deployments (user context issues)
Not suitable for multi-user machines
Best for: Interactive installations by end users, single-user devices
Use the desktop application to create configuration files and MSI commands.
Use case: IT administrators preparing deployment packages
Access: Tools – Custom installation (in the desktop application)
See Configuration file creator section for details.
Configuration files use the .cfg extension and contain JSON-formatted data.
{
"hubs": [
{
"url": "https://mycompany.devolutions.app",
"organizationId": "00000000-0000-0000-0000-000000000000",
"type": "Business",
"version": ""
}
],
"dvls": [
{
"name": "Production DVLS",
"serverUrl": "https://dvls.company.com",
"serverVersion": ""
},
{
"name": "Development DVLS",
"serverUrl": "https://dvls-dev.company.com",
"serverVersion": ""
}
],
"configs": {
"language": "en-US",
"reduceToTrayOnClose": true,
"clearClipboardSensitiveData": true,
"clipboardTimer": 30,
"useFavicon": true,
"useEntriesSyncOnDatasourceAccess": false,
"useHubEmbeddedBrowser": true,
"shareUsageData": false,
"lockingOption": "windowsCredentials",
"useBackgroundLock": true,
"useLockWhenInactive": true,
"lockInactivityDelay": 300
}
}
Array of Devolutions Hub Business instances to configure.
| Field | Type | Required | Description |
|---|---|---|---|
| url | string | Yes | Hub URL (e.g., https://mycompany.devolutions.app) |
| organizationId | string | Yes | Organization GUID |
| type | string | No | Always "Business" (auto-populated) |
| version | string | No | Hub version (auto-populated on first connection) |
Array of Devolutions Server instances to configure.
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | Yes | Display name for the server |
| serverUrl | string | Yes | Devolutions Server URL (e.g., https://dvls.company.com) |
| serverVersion | string | No | Server version (auto-populated on first connection) |
Application settings to pre-configure.
See Configuration settings reference for complete list.
Configuration files are loaded in priority order based on location.
Roaming AppData:
%APPDATA%\net.devolutions\Workspace\Config.cfgDefault:
C:\Users\[Username]\AppData\Roaming\net.devolutions\Workspace\Config.cfgSyncs across domain-joined computers
Highest priority (user-specific)
-
Local AppData:
%LOCALAPPDATA%\net.devolutions\Workspace\Config.cfgDefault:
C:\Users\[Username]\AppData\Local\net.devolutions\Workspace\Config.cfgMachine-specific, not synced
Used during MSI installation, then copied to Roaming
-
ProgramData:
%ProgramData%\net.devolutions\Workspace\DefaultConfig.cfgDefault:
C:\ProgramData\net.devolutions\Workspace\DefaultConfig.cfgApplies to all users on the system
Requires
config.readyindicator file in same directoryCopied to user Roaming location on first launch (if user config doesn't exist)
File:
config.readyLocation: Same directory as
DefaultConfig.cfgPurpose: Signals that system-wide config is ready for deployment
Content: Empty file, presence is checked only
Configuration sources are checked in the following order (first found wins):
User Configuration File – User – specific config
System Configuration File – System – wide default (copied to user location)
The Windows MSI installer accepts the following parameters for pre-configuration.
| Parameter | Type | Description | Example |
|---|---|---|---|
| DVLS_SERVER_URL | String | Devolutions Server URL | https://dvls.company.com |
Note: Only one (Devolutions Server can be configured via MSI parameters. For multiple servers, use a configuration file.
| Parameter | Type | Description | Example |
|---|---|---|---|
| HUB_NAME | String | Hub subdomain name (required) | mycompany |
| ORGANIZATION_ID | String | Organization GUID (optional - leave empty if not applicable) | 00000000-0000-0000-0000-000000000000 |
Note: The full Devolutions Hub URL is constructed as
https://{HUB_NAME}.devolutions.appNote:
ORGANIZATION_IDis optional. Some Devolutions Hub Business instances don't require an organization ID. If not applicable, you can omit this parameter or pass an empty string.
| Parameter | Type | Description | Target Location |
|---|---|---|---|
| DEPLOY_CONFIG | String | System-wide config (recommended) | %ProgramData%\net.devolutions\Workspace\DefaultConfig.cfg |
| USER_CONFIG | String | Per-user config (interactive installs) | %LOCALAPPDATA%\net.devolutions\Workspace\Config.cfg |
| Parameter | Type | Values | Default | Description |
|---|---|---|---|---|
| TARGET_LOCATION | String | roaming, local, system |
roaming |
Where to save configuration. |
| LANGUAGE | String | Language code | en-US |
Application language. |
| Parameter | Type | Values | Default | Description |
|---|---|---|---|---|
| REDUCE_TO_TRAY_ON_CLOSE | String | true, false |
false |
Minimize to system tray instead of closing. |
| USE_FAVICON | String | true, false |
false |
Download and display website favicons. |
| USE_HUB_EMBEDDED_BROWSER | String | true, false |
true |
Use embedded browser for Hub authentication. |
| Parameter | Type | Values | Default | Description |
|---|---|---|---|---|
| CLEAR_CLIPBOARD_SENSITIVE_DATA | String | true, false |
false |
Auto-clear clipboard after copying passwords. |
| CLIPBOARD_TIMER | Number | Seconds (1-999) | 30 |
Seconds before clearing clipboard. |
| LOCKING_OPTION | String | password, biometric, windowsCredentials |
(none) | Method to lock application. |
| USE_BACKGROUND_LOCK | String | true, false |
false |
Lock when minimized to tray. |
| USE_LOCK_WHEN_INACTIVE | String | true, false |
false |
Lock after period of inactivity. |
| LOCK_INACTIVITY_DELAY | Number | Seconds (30-3600) | 30 |
Seconds before auto-lock. |
| Parameter | Type | Values | Default | Description |
|---|---|---|---|---|
| USE_ENTRIES_SYNC_ON_DATASOURCE_ACCESS | String | true, false |
false |
Auto-sync entries when accessing data source. |
| Parameter | Type | Values | Default | Description |
|---|---|---|---|---|
| SHARE_USAGE_DATA | String | true, false |
true |
Share anonymous usage statistics. |
The desktop application includes a visual tool for creating configuration files.
Launch Devolutions Workspace (desktop version).
Navigate to: Tools – Custom Installation.
Data Source Selection.
View all configured (Devolutions Server and Hub Business instances
Select which data sources to include via checkboxes
Multiple data sources supported
Settings Configuration
Enable/disable individual application settings grouped by category:
General (Language, Tray behavior)
Security (Clipboard, Locking)
Synchronization
Privacy (Usage statistics)
Live Preview
Real-time JSON preview of configuration
Copy JSON to clipboard
Preview updates as selections change
Export Options
Generate .cfg File: Save configuration to
.cfgfileCopy MSI Command: Generate complete MSI command with all parameters
File Selection
Browse for
.cfgfilesFile validation and parsing
Preview Before Import
View data sources and settings before applying
Duplicate detection (warns if data source already exists)
Import Actions
Applies configuration to current application
Creates new data sources if they don't exist
Updates settings immediately
Complete reference of all configurable settings.
| Export Key (Config/MSI) | Internal Key | Type | Default | Description |
|---|---|---|---|---|
| language | languageCode | String | en-US |
Application UI language |
| reduceToTrayOnClose | minimizeOnClose | Boolean | false |
Minimize to tray instead of exiting |
| clearClipboardSensitiveData | removeSensitiveFromKeyboard | Boolean | false |
Auto-clear clipboard timer |
| clipboardTimer | clipboardTimer | Integer | 30 |
Seconds before clearing clipboard (1-999) |
| useFavicon | useRichIcons | Boolean | false |
Download website favicons for entries |
| useEntriesSyncOnDatasourceAccess | useEntriesSyncSpaceAccess | Boolean | false |
Auto-sync entries when accessing data source |
| useHubEmbeddedBrowser | hubEmbeddedBrowser | Boolean | true |
Use embedded browser for Hub authentication |
| shareUsageData | shareAnonymousData | Boolean | true |
Share anonymous usage statistics |
| lockingOption | lockingOption | String | (none) |
Lock method: password, biometric, windowsCredentials |
| useBackgroundLock | useBackgroundLock | Boolean | false |
Lock when minimized to tray |
| useLockWhenInactive | useLockWhenInactive | Boolean | false |
Lock after period of inactivity |
| lockInactivityDelay | lockInactivityDelay | Integer | 30 |
Seconds before auto-lock (30-3600) |
| Code | Language |
|---|---|
en-US |
English (United States) |
fr |
French |
de |
German |
es |
Spanish |
cs |
Czech |
hu |
Hungarian |
it |
Italian |
nl |
Dutch |
pl |
Polish |
ru |
Russian |
sv |
Swedish |
tr |
Turkish |
uk |
Ukrainian |
zh-CHS |
Chinese (Simplified) |
zh-TW |
Chinese (Traditional) |
| Value | Description | Requirements |
|---|---|---|
| password | Master password | User sets password on first lock |
| biometric | Fingerprint/Face ID | Biometric hardware required |
| windowsCredentials | Windows Hello | Windows 10/11 with Windows Hello |
Note: If Windows Hello is not available, falls back to password.
msiexec /i Workspace.msi /qn ^
DVLS_SERVER_URL="https://dvls.company.com" ^
LOCKING_OPTION="windowsCredentials" ^
USE_LOCK_WHEN_INACTIVE="true" ^
LOCK_INACTIVITY_DELAY="300" ^
CLEAR_CLIPBOARD_SENSITIVE_DATA="true" ^
CLIPBOARD_TIMER="60"
# With Organization ID
msiexec /i Workspace.msi /qn ^
HUB_NAME="mycompany" ^
ORGANIZATION_ID="12345678-1234-1234-1234-123456789abc" ^
LANGUAGE="fr" ^
REDUCE_TO_TRAY_ON_CLOSE="true"
# Without Organization ID (for Hubs that don't require it)
msiexec /i Workspace.msi /qn ^
HUB_NAME="mycompany" ^
LANGUAGE="fr" ^
REDUCE_TO_TRAY_ON_CLOSE="true"
Create a working folder (e.g., C:\IntuneApps\Workspace\) and place these files:
Workspace.msiconfig.cfg(created via Tools – Custom installation or manually)Install-Workspace.ps1(PowerShell script below)
Create Install-Workspace.ps1:
# Install-Workspace.ps1
# Source files in the Intune package
$ConfigSource = "$PSScriptRoot\config.cfg"
$ConfigTarget = "C:\Program Files\config.cfg"
$MsiPath = "$PSScriptRoot\Workspace.msi"
# Copy config.cfg to Program Files
try {
Copy-Item -Path $ConfigSource -Destination $ConfigTarget -Force
} catch {
Write-Host "Error copying config file: $($_.Exception.Message)"
exit 1
}
# Install MSI silently with DEPLOY_CONFIG parameter
$Arguments = "/i `"$MsiPath`" /qn /norestart DEPLOY_CONFIG=`"C:\Program Files\config.cfg`""
$Process = Start-Process "msiexec.exe" -ArgumentList $Arguments -Wait -PassThru
# Return exit code to Intune
exit $Process.ExitCode
Use the Microsoft Win32 Content Prep Tool (IntuneWinAppUtil.exe):
IntuneWinAppUtil.exe -c C:\IntuneApps\Workspace -s Install-Workspace.ps1 -o C:\IntuneApps\Output
In Microsoft Intune Portal:
Navigate to: Apps – Windows – Add – Windows app (Win32)
App Package File: Upload
Workspace.intunewinApp Information: Fill in name, description, publisher
Program configuration:
Install command:
powershell.exe -ExecutionPolicy Bypass -File .\Install-Workspace.ps1Uninstall command:
msiexec.exe /x {PRODUCT-CODE-GUID} /qn /norestartInstall behavior: System
Requirements: Windows 10 1607+ (64-bit)
Detection Rules: MSI product code (auto-detected)
Assignments: Assign to target groups
When the app is deployed to a device, the following happens automatically:
Intune downloads and executes
Install-Workspace.ps1The script copies
config.cfgtoC:\Program Files\config.cfgThe script installs the MSI with
DEPLOY_CONFIG="C:\Program Files\config.cfg"The MSI reads the configuration file and writes it to
%ProgramData%\net.devolutions\Workspace\DefaultConfig.cfgWhen a user launches Workspace Windows app, the app detects the system-wide config and applies it
The result: the configuration file is distributed with the application, placed automatically in the correct location, and the installation is fully silent and Intune-compatible.
Install command:
msiexec /i Workspace.msi /qn /norestart DEPLOY_CONFIG="%~dp0Config.cfg"
Uninstall command:
msiexec /x {PRODUCT-CODE} /qn /norestart
Detection method: Registry key
HKLM\SOFTWARE\Devolutions\Workspace\Version
Create config.cfg:
{
"dvls": [
{
"name": "Production DVLS",
"serverUrl": "https://dvls-prod.company.com"
},
{
"name": "Development DVLS",
"serverUrl": "https://dvls-dev.company.com"
},
{
"name": "Test DVLS",
"serverUrl": "https://dvls-test.company.com"
}
],
"configs": {
"language": "en-US",
"shareUsageData": false
}
}
Deploy via:
msiexec /i Workspace.msi /qn DEPLOY_CONFIG="\\fileserver\IT\Workspace\config.cfg"
Configuration file present but settings not applied.
Check file location: Verify correct path (
%ProgramData%\net.devolutions\Workspace\DefaultConfig.cfg)Check JSON validity: Validate JSON syntax (no trailing commas, proper quotes)
Check permissions: User must have read access to config file
Verify indicator file: Check if
config.readyfile exists in same directoryCheck logs: Review application logs for parsing errors
Problem: System-wide configuration ignored.
Solution: Create
config.readyfile:
type nul > "%ProgramData%\net.devolutions\Workspace\config.ready"
Problem: USER_CONFIG fails in silent/automated installs, config ends up in
C:\Users\Default\AppData\Local.Cause: USER_CONFIG requires active user session context, which isn't available during automated MSI installation.
Solution: Use DEPLOY_CONFIG for enterprise deployments:
# CORRECT for Intune/SCCM
msiexec /i Workspace.msi /qn /norestart DEPLOY_CONFIG="%~dp0Config.cfg"
# WRONG for automated deployment
msiexec /i Workspace.msi /qn /norestart USER_CONFIG="%~dp0Config.cfg"
MSI parameters not creating configuration.
Check parameter syntax: Ensure proper quoting (use
"value", not'value')Log MSI installation: Add
/l*v install.logto see detailed errorsVerify PowerShell execution: Check if execution policy blocks scripts
Administrative rights: Ensure installer runs with elevation
Example with logging:
msiexec /i Workspace.msi /qn /l*v C:\Temp\install.log DVLS_SERVER_URL="https://server.com"
Settings revert to defaults after restart.
User vs System Config: System config only applies if user config doesn't exist. Once user modifies settings, they are saved to user config and override system defaults.
Group Policy Override: Check if GPO is enforcing settings
File Permissions: Verify write permissions to user config location
Problem: Import fails with "data source already exists" message.
Explanation: Configuration parser detects duplicates by normalized URL (case-insensitive, trailing slash removed).
Remove existing data source manually before importing
Edit configuration file to remove duplicate entries
Use Custom Installation tool to merge configurations
Windows Hello not activating.
Windows Hello Setup: Ensure Windows Hello is configured in Windows Settings
Fallback: System automatically falls back to password if hardware unavailable
Check logs: Review application logs for biometric initialization errors
Before deploying to all users:
Create a test user/device group
Apply configuration to test group
Verify datasources and settings work as expected
Roll out to production
Always use DEPLOY_CONFIG for:
Intune deployments
SCCM deployments
Silent/unattended installations
Multi-user machines
Shared workstations
Only use USER_CONFIG for:
Interactive installations by end users
Single-user devices
Testing scenarios
Maintain documentation of your configuration including:
Which datasources are pre-configured
What settings are enforced
Expected user experience
Support contact for issues
Inform users:
Datasources will be pre-configured
They still need to log in with their credentials
Configuration happens on first app launch
Contact IT if datasources don't appear
Recommended security settings:
{
"lockingOption": "windowsCredentials",
"useBackgroundLock": true,
"useLockWhenInactive": true,
"lockInactivityDelay": 300,
"clearClipboardSensitiveData": true,
"clipboardTimer": 60,
"shareUsageData": false
}
Why:
Enforces Windows Hello authentication
Locks app immediately when backgrounded
Auto-locks after 5 minutes of inactivity
Clears clipboard after 60 seconds
Disables usage data collection (optional)
All URLs must:
Include protocol (
https://)Be valid, accessible URLs
Not end with trailing slash (app will normalize)
Examples:
https://dvls.company.comhttps://workspace.devolutions.appdvls.company.com(missing https://)http://dvls.company.com(HTTP not recommended)
Domain-Joined: Use Roaming AppData (
TARGET_LOCATION="roaming") for profile syncStandalone: Use Local AppData (
TARGET_LOCATION="local") or System (TARGET_LOCATION="system")
{
"dvls": [
{
"name": "DVLS Server",
"serverUrl": "https://dvls.example.com"
}
]
}
msiexec /i Workspace.msi /qn /norestart DEPLOY_CONFIG="\\server\share\Config.cfg"
Pre-configuration allows IT administrators to deploy Workspace with pre-configured settings and data sources (Devolutions Server and Devolutions Hub Business instances) across managed macOS endpoints. This eliminates the need for end-users to manually configure the application after installation.
Zero-touch deployment: Users start with fully configured applications
Consistency: Ensure all users have the same data sources and settings
Time savings: Eliminate manual configuration steps
Centralized management: Configure from MDM console
Policy enforcement: Can prevent users from changing settings
Enterprise standard: Recommended approach for managed macOS fleets
IT Admin configures datasources and settings via MDM or configuration files
MDM pushes configuration to managed devices
User launches app for the first time
App reads configuration and creates datasources automatically
User authenticates to complete the connection (enters credentials)
Authentication required: Pre-configured datasources are created in a "pending" state. Users must still authenticate (log in) to complete the connection.
First launch only: Configuration is applied once on first launch. Subsequent changes require app reinstallation or manual configuration.
Credentials NOT Stored: Pre-configuration does NOT include user credentials. Users must log in with their own credentials.
Deploy configuration via Mobile Device Management (MDM) solutions for managed macOS environments.
Use case: Jamf Pro, Microsoft Intune for Mac, other MDM solutions
Priority: Highest (overrides all file-based configurations)
Preference domain:
net.devolutions.authenticator
Centralized management: Configure from MDM console
Policy enforcement: Can prevent users from changing settings
Highest priority: Overrides local configuration files
Enterprise standard: Recommended approach for managed macOS fleets
See MDM/Managed Preferences section for detailed instructions.
Deploy a pre-created .cfg file to target systems.
Use Case: Scripted deployments, non-MDM environments, testing
System-Wide Location:
/Library/Application Support/Devolutions/Workspace/DefaultConfig.cfgPer-User Location:
~/Library/Application Support/Workspace/Config.cfg
See Configuration file structure section for details.
For manual configuration or scripting:
# Set language
defaults write net.devolutions.authenticator language -string "en-US"
# Enable tray minimize
defaults write net.devolutions.authenticator reduceToTrayOnClose -bool true
# Set locking option
defaults write net.devolutions.authenticator lockingOption -string "biometric"
Use case: Manual setup, testing, shell scripts
Download or copy the Jamf Pro JSON Schema for Workspace:
Click to expand: Workspace Jamf Pro JSON Schema
{
"title": "Devolutions Workspace Configuration (net.devolutions.authenticator)",
"description": "Configuration settings for Devolutions Workspace application deployed via Jamf Pro. These settings are deployed as managed preferences to managed devices.",
"__version": "1.0",
"__preferencedomain": "net.devolutions.authenticator",
"options": {
"remove_empty_properties": true
},
"properties": {
"dvls": {
"title": "DVLS Configuration",
"description": "Devolutions Server connection settings",
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"title": "Server Name",
"description": "Display name for the DVLS server",
"type": "string",
"default": "Devolutions Server"
},
"serverUrl": {
"title": "Server URL",
"description": "Full URL to the DVLS server (e.g., https://server.company.com)",
"type": "string",
"pattern": "^https?://.*"
},
"serverVersion": {
"title": "Server Version",
"description": "DVLS server version (optional)",
"type": "string",
"default": ""
}
},
"required": ["serverUrl"]
},
"default": []
},
"hubs": {
"title": "Hub Business Configuration",
"description": "Devolutions Hub Business connection settings",
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"title": "Hub URL",
"description": "Full Hub URL (e.g., https://yourcompany.devolutions.app)",
"type": "string",
"pattern": "^https://.*\\.devolutions\\.app$"
},
"organizationId": {
"title": "Organization ID",
"description": "Organization identifier for Hub Business",
"type": "string"
},
"type": {
"title": "Hub Type",
"description": "Hub connection type (optional)",
"type": "string"
},
"version": {
"title": "Hub Version",
"description": "Hub version compatibility",
"type": "string",
"default": "2020"
}
},
"required": ["url"]
},
"default": []
},
"configs": {
"title": "Application Settings",
"description": "User preferences and application behavior settings",
"type": "object",
"properties": {
"language": {
"title": "Language",
"description": "Default language for Workspace interface",
"type": "string",
"enum": [
"en-US", "fr", "de", "es", "cs", "hu", "it", "nl", "pl", "ru", "sv", "tr", "uk", "zh-CHS", "zh-TW"
],
"default": "en-US",
"options": {
"enum_titles": [
"English", "Français", "Deutsch", "Español", "Čeština", "Magyar", "Italiano",
"Nederlands", "Polski", "Русский", "Svenska", "Türkçe", "Українська", "简体中文", "繁體中文"
]
}
},
"reduceToTrayOnClose": {
"title": "Minimize to Tray on Close",
"description": "When enabled, closing the window minimizes to system tray instead of quitting",
"type": "boolean",
"default": false
},
"clearClipboardSensitiveData": {
"title": "Clear Clipboard Sensitive Data",
"description": "Automatically clear sensitive data from clipboard after a specified timeout",
"type": "boolean",
"default": false
},
"clipboardTimer": {
"title": "Clipboard Timeout (seconds)",
"description": "Duration in seconds before clearing clipboard when sensitive data clearing is enabled",
"type": "integer",
"enum": [30, 60, 120, 180, 240, 300, 0],
"default": 30,
"options": {
"enum_titles": ["30 seconds", "1 minute", "2 minutes", "3 minutes", "4 minutes", "5 minutes", "Never"]
}
},
"useFavicon": {
"title": "Use Favicons",
"description": "Download and display website favicons for entries",
"type": "boolean",
"default": false
},
"useEntriesSyncOnDatasourceAccess": {
"title": "Sync Entries on Data Source Access",
"description": "Automatically synchronize entries when accessing a data source",
"type": "boolean",
"default": false
},
"useHubEmbeddedBrowser": {
"title": "Use Hub Embedded Browser",
"description": "Open Hub connections in embedded browser (disable if using credential providers)",
"type": "boolean",
"default": true
},
"lockingOption": {
"title": "Locking Method",
"description": "Authentication method used when locking/unlocking Workspace. Leave empty for no locking method.",
"type": "string",
"enum": ["", "password", "biometric"],
"default": "",
"options": {
"enum_titles": ["None", "Password/PIN", "Biometric (Touch ID)"]
}
},
"useBackgroundLock": {
"title": "Lock When Backgrounded",
"description": "Automatically lock the application when minimized or sent to system tray",
"type": "boolean",
"default": false
},
"useLockWhenInactive": {
"title": "Auto-Lock When Inactive",
"description": "Automatically lock the application after a period of inactivity",
"type": "boolean",
"default": false
},
"lockInactivityDelay": {
"title": "Inactivity Lock Delay (seconds)",
"description": "Time in seconds before locking due to inactivity (requires Auto-Lock to be enabled)",
"type": "integer",
"enum": [30, 60, 120, 180, 240, 300],
"default": 30,
"options": {
"enum_titles": ["30 seconds", "1 minute", "2 minutes", "3 minutes", "4 minutes", "5 minutes"]
}
}
}
},
"preventStartup": {
"title": "Prevent Startup",
"description": "When true, prevents Workspace from starting automatically after configuration deployment",
"type": "boolean",
"default": true
}
}
}
In Jamf Pro, navigate to: Computers – Configuration Profiles – Application & Custom Settings
Click Configure and upload the JSON schema file
Configure your desired settings using the GUI interface provided by Jamf
Scope the profile to your target computers
Deploy the configuration profile
If not using Jamf Pro, you can create a standard macOS configuration profile:
Example profile (com.devolutions.workspace.mobileconfig):
<?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>PayloadContent</key>
<array>
<dict>
<key>PayloadType</key>
<string>net.devolutions.authenticator</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>PayloadIdentifier</key>
<string>net.devolutions.authenticator.config</string>
<key>PayloadUUID</key>
<string>GENERATE-UUID-HERE</string>
<key>PayloadDisplayName</key>
<string>Workspace Configuration</string>
<key>language</key>
<string>en-US</string>
<key>reduceToTrayOnClose</key>
<true/>
<key>lockingOption</key>
<string>biometric</string>
<key>dvls</key>
<array>
<dict>
<key>name</key>
<string>Corporate DVLS</string>
<key>serverUrl</key>
<string>https://dvls.company.com</string>
</dict>
</array>
</dict>
</array>
</dict>
</plist>
Deploy via:
Jamf Pro: Configuration Profiles – Upload profile
Microsoft Intune: Device Configuration – Custom profile
Other MDMs: Custom configuration profile upload
Navigate to: Devices – Configuration profiles – Create profile.
Platform: macOS.
Profile type: Custom.
Upload the configuration profile (
.mobileconfigfile).Assign to target groups.
Deploy.
On a managed Mac:
# Check if preferences are set
defaults read net.devolutions.authenticator
# Check for specific setting
defaults read net.devolutions.authenticator language
Configuration files use the .cfg extension and contain JSON-formatted data.
{
"hubs": [
{
"url": "https://mycompany.devolutions.app",
"organizationId": "00000000-0000-0000-0000-000000000000",
"type": "Business",
"version": ""
}
],
"dvls": [
{
"name": "Production DVLS",
"serverUrl": "https://dvls.company.com",
"serverVersion": ""
},
{
"name": "Development DVLS",
"serverUrl": "https://dvls-dev.company.com",
"serverVersion": ""
}
],
"configs": {
"language": "en-US",
"reduceToTrayOnClose": true,
"clearClipboardSensitiveData": true,
"clipboardTimer": 30,
"useFavicon": true,
"useEntriesSyncOnDatasourceAccess": false,
"useHubEmbeddedBrowser": true,
"shareUsageData": false,
"lockingOption": "biometric",
"useBackgroundLock": true,
"useLockWhenInactive": true,
"lockInactivityDelay": 300
}
}
Array of Devolutions Hub Business instances to configure.
| Field | Type | Required | Description |
|---|---|---|---|
| url | string | Yes | Hub URL (e.g., https://mycompany.devolutions.app) |
| organizationId | string | Yes | Organization GUID |
| type | string | No | Always "Business" (auto-populated) |
| version | string | No | Hub version (auto-populated on first connection) |
Array of Devolutions Server instances to configure.
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | Yes | Display name for the server |
| serverUrl | string | Yes | (Devolutions Server URL (e.g., https://dvls.company.com) |
| serverVersion | string | No | Server version (auto-populated on first connection) |
Application settings to pre-configure.
See Configuration settings reference for complete list.
Path:
~/Library/Application Support/Workspace/Config.cfgPriority: Highest for user-specific configs
Path:
/Library/Application Support/Devolutions/Workspace/DefaultConfig.cfgPriority: Applied if user config doesn't exist
Priority: Highest (overrides all file-based configs)
Preference domain:
net.devolutions.authenticatorKeys: Same as
configsobject in JSON formatConfiguration: Via MDM profile or
defaultscommand
Configuration sources are checked in the following order (first found wins):
macOS managed preferences – MDM/Jamf policies (highest priority)
User configuration file – User-specific config
System configuration file – System-wide default (copied to user location)
Complete reference of all configurable settings.
| Export Key (Config/MDM) | Type | Default | Description |
|---|---|---|---|
| language | String | en-US |
Application UI language |
| reduceToTrayOnClose | Boolean | false |
Minimize to tray instead of exiting |
| clearClipboardSensitiveData | Boolean | false |
Auto-clear clipboard timer |
| clipboardTimer | Integer | 30 |
Seconds before clearing clipboard (1-999) |
| useFavicon | Boolean | false |
Download website favicons for entries |
| useEntriesSyncOnDatasourceAccess | Boolean | false |
Auto-sync entries when accessing data source |
| useHubEmbeddedBrowser | Boolean | true |
Use embedded browser for Hub authentication |
| shareUsageData | Boolean | true |
Share anonymous usage statistics |
| lockingOption | String | (none) | Lock method: password, biometric |
| useBackgroundLock | Boolean | false |
Lock when minimized to tray |
| useLockWhenInactive | Boolean | false |
Lock after period of inactivity |
| lockInactivityDelay | Integer | 30 |
Seconds before auto-lock (30-3600) |
| Code | Language |
|---|---|
en-US |
English (United States) |
fr |
French |
de |
German |
es |
Spanish |
cs |
Czech |
hu |
Hungarian |
it |
Italian |
nl |
Dutch |
pl |
Polish |
ru |
Russian |
sv |
Swedish |
tr |
Turkish |
uk |
Ukrainian |
zh-CHS |
Chinese (Simplified) |
zh-TW |
Chinese (Traditional) |
| Value | Description | Requirements |
|---|---|---|
| password | Master password | User sets password on first lock |
| biometric | Touch ID | Touch ID hardware required |
Using Jamf JSON Schema:
Upload the JSON schema to Jamf Pro
Configure via GUI:
Devolutions Server configuration: Add server with URL
https://dvls.company.comLocking Method: Biometric (Touch ID)
Lock When Backgrounded: Enabled
Auto-Lock When Inactive: Enabled
Inactivity Lock Delay: 5 minutes (300 seconds)
Scope to target computers
Deploy
<?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>PayloadContent</key>
<array>
<dict>
<key>PayloadType</key>
<string>net.devolutions.authenticator</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>PayloadIdentifier</key>
<string>net.devolutions.authenticator.config</string>
<key>PayloadUUID</key>
<string>REPLACE-WITH-UNIQUE-UUID</string>
<key>PayloadDisplayName</key>
<string>Workspace Hub Configuration</string>
<key>hubs</key>
<array>
<dict>
<key>url</key>
<string>https://mycompany.devolutions.app</string>
<key>organizationId</key>
<string>12345678-1234-1234-1234-123456789abc</string>
<key>type</key>
<string>Business</string>
<key>version</key>
<string>2020</string>
</dict>
</array>
<key>configs</key>
<dict>
<key>language</key>
<string>en-US</string>
<key>lockingOption</key>
<string>biometric</string>
</dict>
</dict>
</array>
</dict>
</plist>
#!/bin/bash
# Configure DVLS server (complex structure requires plist file)
defaults write net.devolutions.authenticator dvls -array-add \
'{name = "Production DVLS"; serverUrl = "https://dvls.company.com"; }'
# Configure application settings
defaults write net.devolutions.authenticator language -string "en-US"
defaults write net.devolutions.authenticator lockingOption -string "biometric"
defaults write net.devolutions.authenticator useBackgroundLock -bool true
defaults write net.devolutions.authenticator useLockWhenInactive -bool true
defaults write net.devolutions.authenticator lockInactivityDelay -int 300
defaults write net.devolutions.authenticator clearClipboardSensitiveData -bool true
defaults write net.devolutions.authenticator clipboardTimer -int 60
#!/bin/bash
# Create system-wide configuration directory
sudo mkdir -p "/Library/Application Support/Devolutions/Workspace"
# Deploy configuration file
sudo cp "/path/to/config.cfg" "/Library/Application Support/Devolutions/Workspace/DefaultConfig.cfg"
# Set proper permissions
sudo chmod 644 "/Library/Application Support/Devolutions/Workspace/DefaultConfig.cfg"
Create config.cfg:
{
"dvls": [
{
"name": "Production DVLS",
"serverUrl": "https://dvls-prod.company.com"
},
{
"name": "Development DVLS",
"serverUrl": "https://dvls-dev.company.com"
},
{
"name": "Test DVLS",
"serverUrl": "https://dvls-test.company.com"
}
],
"configs": {
"language": "en-US",
"shareUsageData": false
}
}
Deploy via script or manually place in system-wide location.
Configuration profile installed but settings not applying.
Verify preference domain: Ensure using
net.devolutions.authenticator(notnet.devolutions.workspace).Check profile status: System Preferences – Profiles – Verify profile is installed.
Force profile refresh:
sudo profiles renew -type enrollment.Check for conflicts: Remove any existing user configuration files.
Review logs: Check Console.app for Workspace – related errors.
Configuration file present but not being applied.
Check file location: Verify correct path (
/Library/Application Support/Devolutions/Workspace/DefaultConfig.cfg).Check JSON validity: Validate JSON syntax (no trailing commas, proper quotes).
Check permissions: Ensure file is readable by all users (
chmod 644).Check ownership: Should be owned by root or admin.
Delete user config: Remove
~/Library/Application Support/Workspace/Config.cfgto allow system config to apply.
Touch ID not activating.
Hardware Check: Verify Mac has Touch ID hardware
Touch ID Setup: Ensure Touch ID is configured in System Preferences – Touch ID
Fallback: System automatically falls back to password if hardware unavailable
Check logs: Review application logs for biometric initialization errors
Unsure which preference domain to use.
Solution: Always use net.devolutions.authenticator for all Workspace configurations (both mobile and desktop).
Settings revert to defaults after restart.
MDM vs User config: MDM settings have highest priority and will override user changes
User vs System config: System config only applies if user config doesn't exist
File permissions: Verify write permissions to user config location
Import fails with "data source already exists" message.
Explanation: Configuration parser detects duplicates by normalized URL (case-insensitive, trailing slash removed).
Remove existing data source manually before applying configuration.
Edit configuration to remove duplicate entries.
Delete user config file to force re-import of system config.
Before deploying to all users:
Create a test computer group in Jamf/Intune.
Apply configuration to test group.
Verify datasources and settings work as expected.
Roll out to production.
Always use MDM/Managed preferences for:
Jamf Pro managed Macs
Intune managed Macs
Any MDM-managed environment
Benefits:
Centralized management
Policy enforcement
Highest priority (overrides local configs)
Enterprise standard approach
Maintain documentation of your MDM configuration including:
Which datasources are pre-configured
What settings are enforced
Expected user experience
Support contact for issues
Inform users:
Datasources will be pre-configured
They still need to log in with their credentials
Configuration happens on first app launch
Contact IT if datasources don't appear
Recommended security settings:
{
"lockingOption": "biometric",
"useBackgroundLock": true,
"useLockWhenInactive": true,
"lockInactivityDelay": 300,
"clearClipboardSensitiveData": true,
"clipboardTimer": 60,
"shareUsageData": false
}
Why:
Enforces Touch ID authentication
Locks app immediately when backgrounded
Auto-locks after 5 minutes of inactivity
Clears clipboard after 60 seconds
Disables usage data collection (optional)
All URLs must:
Include protocol (
https://)Be valid, accessible URLs
Not end with trailing slash (app will normalize)
Examples:
https://dvls.company.comhttps://workspace.devolutions.appdvls.company.com(missing https://)http://dvls.company.com(HTTP not recommended)
For Jamf Pro deployments, always use the JSON schema:
Provides user-friendly GUI interface
Validates configuration before deployment
Prevents syntax errors
Shows all available options with descriptions
{
"dvls": [
{
"name": "DVLS Server",
"serverUrl": "https://dvls.example.com"
}
]
}
net.devolutions.authenticator
/Library/Application Support/Devolutions/Workspace/DefaultConfig.cfg
defaults read net.devolutions.authenticator
MDM (Mobile Device Management) pre–configuration allows IT administrators to automatically provision Workspace datasources (Devolutions Server and Devolutions Hub Business) and application settings on managed iOS devices before users first launch the app.
Zero–touch deployment: Users receive pre–configured datasources.
Consistent configuration: Ensure all users have the same settings.
Reduced support burden: No need to manually guide users through setup.
Enforce security policies: Pre–configure biometric lock, clipboard timers, etc.
IT Admin configures datasources and settings in MDM console (Jamf or Apple MDM).
MDM pushes configuration to managed devices.
User launches app for the first time.
App reads MDM configuration and creates datasources automatically.
User authenticates to complete the connection (enters credentials).
Authentication Required: Pre–configured datasources are created in a "pending" state. Users must still authenticate (log in) to complete the connection.
First Launch Only: Configuration is applied once on first launch. Subsequent changes require app reinstallation or manual configuration.
Credentials NOT Stored: MDM pre–configuration does NOT include user credentials. Users must log in with their own credentials.
Jamf Pro server or Apple MDM solution
Workspace app deployed via MDM (App Store or in–house)
iOS 13.0 or later on managed devices
Devices enrolled in MDM
Log in to Jamf Pro.
Navigate to Mobile Device Apps – Find "Workspace" app.
Click on the app – Go to App Configuration tab.
Click Add to create a new configuration.
In the App configuration screen:
Select: Upload specfile to the Jamf AppConfig Generator for a GUI form (recommended), OR
Select: Enter configuration directly as a plist/dictionary in Jamf Pro
Jamf Pro uses the AppConfig community standard for iOS managed app configuration. The specfile provides a GUI form in the Jamf AppConfig Generator where administrators can configure settings without writing raw configuration.
Download the Workspace Mobile AppConfig specfile:
workspace_mobile_appconfig_specfile.xml.Open the Jamf AppConfig Generator.
Upload the specfile and configure settings using the GUI form.
Download the generated configuration plist from the generator.
In Jamf Pro, navigate to Mobile Device Apps – Workspace – App Configuration.
Paste the generated plist into the App Configuration field, scope to target devices, and deploy.
If not using the specfile, you can enter configuration directly as a plist dictionary in Jamf Pro. Use the flat key format below — the app automatically transforms flat keys (e.g., dvls_serverUrl, hub_url) into the internal nested structure:
<dict>
<!–– DVLS Server ––>
<key>dvls_serverUrl</key>
<string>https://dvls.company.com</string>
<!–– Hub Business ––>
<key>hub_url</key>
<string>https://workspace.devolutions.app</string>
<key>hub_organizationId</key>
<string>your–org–id</string>
<!–– Application Settings ––>
<key>language</key>
<string>en–US</string>
<key>lockingOption</key>
<string>biometric</string>
<key>shareUsageData</key>
<false/>
<key>useBackgroundLock</key>
<true/>
<key>backgroundLockDelay</key>
<integer>0</integer>
<key>useLockWhenInactive</key>
<true/>
<key>lockInactivityDelay</key>
<integer>300</integer>
<key>useFavicon</key>
<true/>
<key>autoSearch</key>
<false/>
<key>useHubEmbeddedBrowser</key>
<true/>
</dict>
Note: The flat key format (dvls_serverUrl, hub_url) is used for Jamf managed app configuration. The app automatically detects this format and transforms it into the internal nested structure. A display name is auto–generated from the DVLS URL.
Set Distribution Method to appropriate scope (users, devices, or groups).
Click Save.
Push the configuration to target devices.
On a managed iOS device:
Install/launch Workspace iOS app.
App should automatically show pre–configured datasources.
User taps datasource – enters credentials – connects.
{
"name": string, // Display name (required)
"serverUrl": string, // Full URL with https:// (required)
"serverVersion": string // Version like "2024.1" (optional)
}
{
"url": string, // Full URL with https:// (required)
"organizationId": string, // Org ID (optional)
"type": "business", // Always "business" (required)
"version": "2020" // Always "2020" (required)
}
| Setting | Type | Valid Values | Description |
|---|---|---|---|
| language | String | "en-US", "fr", "de", "es", etc. | App display language |
| lockingOption | String | "", "biometric" | App locking method |
| shareUsageData | Boolean | true, false | Share anonymous usage analytics |
| useBackgroundLock | Boolean | true, false | Lock when app goes to background |
| backgroundLockDelay | Integer | 0, 60, 300, 900, 1800, 3600 | Delay before locking when backgrounded (seconds) |
| useLockWhenInactive | Boolean | true, false | Enable auto-lock after inactivity |
| lockInactivityDelay | Integer | 30, 60, 120, 180, 240, 300 | Inactivity timeout (seconds) |
| useFavicon | Boolean | true, false | Use website favicons |
| autoSearch | Boolean | true, false | Enable auto-search in vaults |
| useHubEmbeddedBrowser | Boolean | true, false | Use embedded browser for Hub authentication |
| highlightSpecialCharacters | Boolean | true, false | Highlight special characters in passwords |
Jamf Configuration (using schema GUI):
Devolutions Server: Add one server
Name: "Corporate DVLS"
Server URL: "https://dvls.acme.com"
Server Version: "2024.1"
Devolutions Hub Business instances: Leave empty
Application settings: Leave default
Direct JSON (if not using schema):
{
"dvls": [
{
"name": "Corporate DVLS",
"serverUrl": "https://dvls.acme.com",
"serverVersion": "2024.1"
}
]
}
Jamf Configuration (using schema GUI):
Devolutions Hub Business instances: Add one Hub
Hub URL: "https://workspace.devolutions.app"
Organization ID: (leave empty or enter your org ID)
Application Settings:
Locking Method: "Biometric (Touch ID/Face ID)"
Lock When Backgrounded: Enabled
Background Lock Delay: "Immediately"
Auto–Lock When Inactive: Enabled
Inactivity Lock Delay: "3 minutes"
Direct JSON (if not using schema):
{
"hubs": [
{
"url": "https://workspace.devolutions.app",
"organizationId": "",
"type": "business",
"version": "2020"
}
],
"configs": {
"lockingOption": "biometric",
"useBackgroundLock": true,
"backgroundLockDelay": 0,
"useLockWhenInactive": true,
"lockInactivityDelay": 180
}
}
Jamf Configuration (using schema GUI):
Devolutions Server: Add multiple
Server 1: Name "Production DVLS", URL "https://dvls–prod.company.com"
Server 2: Name "Test DVLS", URL "https://dvls–test.company.com"
Devolutions Hub Business instances: Add one
Hub URL: "https://workspace.devolutions.app"
Organization ID: "org–abc123"
Application Settings:
Language: "English"
Share Usage Data: Disabled
Direct JSON (if not using schema):
{
"dvls": [
{
"name": "Production DVLS",
"serverUrl": "https://dvls–prod.company.com",
"serverVersion": "2024.1"
},
{
"name": "Test DVLS",
"serverUrl": "https://dvls–test.company.com",
"serverVersion": "2024.1"
}
],
"hubs": [
{
"url": "https://workspace.devolutions.app",
"organizationId": "org–abc123",
"type": "business",
"version": "2020"
}
],
"configs": {
"language": "en–US",
"shareUsageData": false
}
}
Problem: Users report no pre–configured datasources appear.
Solutions:
Verify MDM enrollment:
iOS: Settings – General – VPN & Device Management – Check profile
Check configuration syntax:
Validate JSON syntax (use jsonlint.com)
Ensure all required fields are present
Verify app is MDM–managed:
App must be deployed via MDM (not manually installed from App Store)
Re–apply configuration:
Delete app – Reinstall via MDM – Configuration applies on first launch
Users stuck with pending datasources they can't remove.
New in version 2025.3.2: Users can now delete pending datasources
From drawer menu: Long–press datasource – Select "Remove"
From pending screen: Tap "Remove" button
Settings don't match expected values.
Check data types:
Booleans: Use
true/false(not"true"/"false"strings)Integers: Use numbers without quotes (e.g.,
60not"60")Strings: Always use quotes (e.g.,
"en–US")
Verify setting names:
Check spelling (e.g.,
lockInactivityDelaynotlockInactivityTimeout)Case–sensitive (use exact casing shown in schema)
Duplicate datasources appear. Configuration was applied multiple times (app reinstalled or configuration changed).
Pre–configuration checks for existing datasources by URL
If duplicates exist, users can delete extras via drawer menu
Face ID/Touch ID not activating.
Check device support: Verify device has Face ID or Touch ID hardware
Check iOS settings: Ensure Face ID/Touch ID is set up in Settings
Check permissions: App may need biometric permission from user
Fallback: System automatically falls back to passcode if biometric unavailable
Before deploying to all users:
Create a test user/device group in Jamf.
Apply configuration to test group.
Verify datasources and settings work as expected.
Roll out to production.
For Jamf Pro deployments:
Always use the AppConfig specfile (option A).
Provides user–friendly GUI form via the Jamf AppConfig Generator.
Validates configuration before deployment.
Prevents syntax errors.
Shows all available options with descriptions.
Maintain documentation of your MDM configuration including:
Which datasources are pre–configured
What settings are enforced
Expected user experience
Support contact for issues
Inform users:
Datasources will be pre–configured
They still need to log in with their credentials
Configuration happens on first app launch
Contact IT if datasources don't appear
Recommended security settings:
{
"lockingOption": "biometric",
"useBackgroundLock": true,
"backgroundLockDelay": 0,
"useLockWhenInactive": true,
"lockInactivityDelay": 300,
"shareUsageData": false
}
Why:
Enforces Face ID/Touch ID authentication
Locks app immediately when backgrounded
Auto–locks after 5 minutes of inactivity
Disables usage data collection (optional)
Minimum Version: 2025.3.2 (for full pending datasource support)
Devolutions Server versions: Devolutions Server 2023.3+ recommended
iOS: 13.0+ required
All URLs must:
Include protocol (
https://)Be valid, accessible URLs
Not end with trailing slash (app will normalize)
Examples:
https://dvls.company.comhttps://workspace.devolutions.appdvls.company.com(missing https://)http://dvls.company.com(HTTP not recommended)
For organizations with multiple environments (prod, dev, test):
Create separate Jamf configuration profiles for each environment
Scope each profile to appropriate device groups
Users in each environment get correct datasources automatically
{
"dvls": [
{
"name": "DVLS Server",
"serverUrl": "https://dvls.example.com"
}
]
}
net.devolutions.workspace.mobile
Download the AppConfig specfile.
Upload to the Jamf AppConfig Generator.
Configure settings via the GUI form.
Download the generated plist.
In Jamf Pro: Mobile Device Apps – Workspace – App Configuration.
Paste the plist, scope to target devices, and deploy.