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

> Master .plist and Entitlements setup in vorssaint-utils. Learn how to configure Info.plist, fan-control.plist, and Vorssaint.entitlements with this comprehensive guide.

- Repository: [vorssaint/vorssaint-utils](https://github.com/vorssaint/vorssaint-utils)
- Tags: how-to-guide
- Published: 2026-09-05

---

**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

```swift
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

```swift
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:

```swift
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/`.