Contributing
Device Capture (macOS)
This guide walks you through capturing device configuration data from your Apollo on macOS using DTrace. This data is essential for supporting Apollo models we don't have physical access to.
The capture script is read-only — it observes data the UA driver is already exchanging with its mixer software. It makes zero writes to hardware.
Important: System Integrity Protection (SIP)
DTrace requires System Integrity Protection to be disabled. SIP is a macOS security feature that restricts certain system-level operations, including kernel tracing.
What SIP does
SIP prevents modification of protected system files and restricts debugging tools like DTrace from attaching to system processes. It is an important security layer, and you should only disable it temporarily for this capture.
Security implications
With SIP disabled, software running as root has fewer restrictions on what it can access. This is why you should:
- Only disable SIP on a machine you trust
- Run only the capture script while SIP is disabled
- Re-enable SIP immediately after capturing
Apple's official SIP documentation: https://support.apple.com/en-us/102149
Step 1: Disable SIP
- Shut down your Mac
- Boot into Recovery Mode:
- Apple Silicon: Hold the power button until "Loading startup options" appears, then select Options
- Intel: Hold Cmd+R during startup
- Open Terminal from the Utilities menu
- Run:
csrutil disable - Restart your Mac normally
Verify SIP is disabled:
csrutil status
# Should say: "System Integrity Protection status: disabled"
Step 2: Prepare for capture
Make sure:
- Your Apollo is connected via Thunderbolt and powered on
- UA Console or UA Connect is running (the capture observes communication between the UA mixer software and the driver)
- UAD software is installed
Clone the repository if you haven't already:
git clone https://github.com/open-apollo/open-apollo.git
cd open-apollo
Step 3: Run the capture
sudo ./tools/contribute/macos/capture.sh
The script will:
- Verify SIP is disabled
- Check that the UA driver is loaded
- Capture device configuration from IORegistry
- Run DTrace probes for approximately 10 seconds to capture routing data
- Save everything to a JSON file
The output file is saved in the current directory with a timestamp, for example: apollo-macos-capture-YYYYMMDD-HHMMSS.json
Step 4: Review the capture
Before submitting, open the JSON file and review its contents. It contains:
- System info: macOS version and architecture
- Device info: Apollo model name, device type, channel counts
- Routing data: How audio channels are mapped between DMA and DSP
It does not contain: personal information, audio data, filesystem paths, network information, or any data unrelated to the Apollo hardware configuration.
Step 5: Re-enable SIP immediately
This is critical. Do not leave SIP disabled longer than necessary.
- Shut down your Mac
- Boot into Recovery Mode (same method as Step 1)
- Open Terminal from the Utilities menu
- Run:
csrutil enable - Restart your Mac normally
Verify SIP is re-enabled:
csrutil status
# Should say: "System Integrity Protection status: enabled"
What the script captures (technical details)
The DTrace probes target IOConnectCallStructMethod, the standard macOS API for kernel driver communication. The probes intercept calls from the UA Mixer Engine process to read:
- Selector 171 (routing table): Maps audio channels between DMA and DSP — this is the key data needed for Linux support
- Device identification: Model type and hardware capabilities
These are the same calls the UA software makes during normal operation. The probes only observe — they do not inject, modify, or replay any calls.
See tools/contribute/macos/WHAT-THIS-DOES.md in the repository for a line-by-line explanation of the capture script.
Next steps
- Submitting Your Data — how to submit your capture
- How to Contribute — other ways to help