Configuration Files in vorssaint-utils: A Complete Guide to .plist and Entitlements Setup

Vorssaint-utils stores its configuration in three static property-list files located in the Resources/ directory: Info.plist, com.vorssaint.utils.fan-control.plist, and Vorssaint.entitlements.

The vorssaint-utils repository is a macOS utility bundle that relies on standard Apple configuration formats for bundle metadata, daemon management, and code-signing permissions. Understanding these configuration files is essential for developers who need to modify, extend, or troubleshoot the application.

Info.plist: The Core Bundle Configuration

The Resources/Info.plist file serves as the primary bundle descriptor for macOS. It defines everything the operating system needs to identify and launch the application correctly.

According to the vorssaint-utils source code, this file contains:

  • Bundle identifier (CFBundleIdentifier): The unique reverse-domain identifier
  • Version strings (CFBundleShortVersionString, CFBundleVersion): For update and compatibility checks
  • Supported platforms and minimum OS requirements
  • Localization list: Available language bundles
  • Required permissions: Declared capabilities for system features

Reading Info.plist at Runtime

if let info = Bundle.main.infoDictionary {
    let version = info["CFBundleShortVersionString"] as? String ?? "-"
    let identifier = info["CFBundleIdentifier"] as? String ?? "-"
    print("Vorssaint version \(version) – bundle \(identifier)")
}

This standard Swift pattern accesses the plist through Bundle.main.infoDictionary, which automatically loads the merged configuration from the app bundle.

Fan-Control Daemon Configuration

The Resources/com.vorssaint.utils.fan-control.plist file configures an optional launch daemon for hardware fan control. This is a separate property list that follows Apple's launchd format.

Key properties in this configuration include:

Property Purpose
Label Unique identifier for the daemon (com.vorssaint.utils.fan-control)
ProgramArguments Path to the executable binary
KeepAlive Restart policy for the daemon
ThrottleInterval Minimum seconds between restarts (5 seconds in the source)

Loading and Parsing the Fan-Control Plist

import Foundation

let fanPlistURL = Bundle.main.url(forResource: "com.vorssaint.utils.fan-control", withExtension: "plist")!
let data = try Data(contentsOf: fanPlistURL)
let plist = try PropertyListSerialization.propertyList(from: data, options: [], format: nil) as! [String: Any]

print("Daemon label:", plist["Label"] as! String)               // com.vorssaint.utils.fan-control
print("Throttle interval:", plist["ThrottleInterval"] as! Int) // 5 seconds

This configuration file is not loaded automatically—the application or an installer must copy it to /Library/LaunchDaemons/ and register it with launchctl to activate the fan-control feature.

Vorssaint.entitlements: Code-Signing Permissions

The Resources/Vorssaint.entitlements file contains code-signing entitlements that grant the application privileged access to macOS protected APIs. These declarations are enforced by the operating system's security framework and must match the capabilities requested during app notarization.

Based on the vorssaint-utils source, this entitlements file includes permissions for:

  • com.apple.security.device.audio-input — Microphone access
  • com.apple.security.files.user-selected.read-write — File system access for user-selected locations

Runtime Entitlement Verification

macOS 10.15 and later allow applications to verify their own entitlements programmatically:

import Security

func hasEntitlement(_ key: String) -> Bool {
    var value: CFTypeRef?
    let status = SecTaskCopyValueForEntitlement(
        SecTaskCreateFromSelf(nil)!, key as CFString, &value)
    return status == errSecSuccess && (value as? Bool ?? false)
}

let canAccessMicrophone = hasEntitlement("com.apple.security.device.audio-input")
print("Microphone entitlement present:", canAccessMicrophone)

The SecTaskCreateFromSelf and SecTaskCopyValueForEntitlement functions from the Security framework provide runtime introspection of the code signature.

Configuration File Locations and Build Integration

All three configuration files reside in the Resources/ directory at the repository root. During the build process, Xcode or another build tool copies these into the final .app bundle structure:


Vorssaint.app/
├── Contents/
│   ├── Info.plist          ← Copied from Resources/Info.plist
│   ├── Resources/
│   │   ├── com.vorssaint.utils.fan-control.plist
│   │   └── Vorssaint.entitlements
│   └── MacOS/
│       └── Vorssaint       ← Main executable

The entitlements file is referenced during the code-signing phase rather than being bundled, while the two .plist files are embedded resources accessible at runtime.

Summary

  • Info.plist (Resources/Info.plist): Bundle metadata, versioning, and OS compatibility declarations
  • Fan-control plist (Resources/com.vorssaint.utils.fan-control.plist): Launch daemon configuration for the optional hardware control feature
  • Entitlements (Resources/Vorssaint.entitlements): Code-signing permissions for privileged macOS APIs

These are the only static configuration files in the vorssaint-utils repository. Runtime state—including user preferences and caches—is stored separately in the user's ~/Library folders and managed programmatically.

Frequently Asked Questions

How do I modify vorssaint-utils configuration files for development?

Edit the source files in Resources/ directly, then rebuild the application. Changes to Info.plist require a full rebuild to propagate into the bundle. For entitlements changes, you must re-sign the application with codesign --entitlements Resources/Vorssaint.entitlements for testing.

Why does vorssaint-utils use .plist format instead of JSON or YAML?

Apple's property-list format is the native standard for macOS bundle configuration. The operating system provides PropertyListSerialization and Bundle APIs that read .plist files automatically. JSON support was added to plists in macOS 10.13, but binary and XML plists remain the conventional choice for App Store distribution.

What happens if the fan-control plist is missing from the installed app?

The fan-control feature becomes unavailable, but the main application continues to function. The daemon configuration is optional—vorssaint-utils operates normally without it, simply disabling hardware fan management. The application does not crash or produce errors; it silently skips daemon registration attempts when the file is absent.

Where does vorssaint-utils store user preferences if not in these plist files?

Runtime user preferences are stored in ~/Library/Preferences/ using NSUserDefaults (now UserDefaults in Swift), which writes to a separate domain-specific plist managed by the system. These are generated dynamically and excluded from version control, unlike the static configuration files in Resources/.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →