This guide provides solutions for common build and development issues encountered when working with usbipd-mac.
- Xcode 13+: Required for System Extensions support and Swift Package Manager
- macOS 11.0+ SDK: System Extensions require macOS Big Sur SDK or later
- Code Signing: Optional for development, required for distribution
- Development: Use Xcode automatic signing
- Production: Valid Developer ID certificate
For development with System Extensions:
# Enable System Extension development mode
sudo systemextensionsctl developer on
# Build and install for development
swift build
sudo usbipd daemon --install-extension
# Verify installation
usbipd status
systemextensionsctl list# Clean build to match CI environment
swift package clean
swift package resolve
swift build --verbose
# Check for dependency conflicts
swift package show-dependenciesBuild Issues:
# Clean build if bundle creation fails
swift package clean
swift build
# Check plugin execution
swift build --verbose 2>&1 | grep "SystemExtensionBundleBuilder"# Resolve dependencies explicitly
swift package resolve
# Update package dependencies
swift package update
# Reset package cache if needed
swift package reset# Check violations locally
swiftlint lint --strict
# Auto-fix violations where possible
swiftlint --fix
# Verify configuration
python -c "import yaml; yaml.safe_load(open('.swiftlint.yml'))"# Run tests with detailed output
swift test --verbose --parallel
# Run specific test suite
swift test --filter USBIPDCoreTests
swift test --filter USBIPDCLITestsTesting System Extension functionality requires special setup:
# Enable development mode for testing
sudo systemextensionsctl developer on
# Run System Extension integration tests
swift test --filter SystemExtensionInstallationTests
# Test bundle creation and validation
swift test --filter BuildOutputVerificationTests
# Manual System Extension testing
usbipd status # Check System Extension status
usbipd status --detailed # Detailed health information
usbipd status --health # Health check only# Build and test QEMU server
swift build --product QEMUTestServer
./Scripts/qemu-test-validation.sh
# Run integration tests specifically
swift test --filter IntegrationTests --verboseBefore submitting a pull request, you can run the same checks locally to catch issues early:
# Run all checks in sequence (mimics CI pipeline)
echo "Running SwiftLint..."
swiftlint lint --strict
echo "Building project..."
swift build --verbose
echo "Running unit tests..."
swift test --parallel --verbose
echo "Running integration tests..."
./Scripts/qemu-test-validation.sh
swift test --filter IntegrationTests --verbose
echo "All checks completed successfully!"When new Swift versions become available:
- Update
Package.swifttools version:// swift-tools-version:5.9 - Test locally:
swift build && swift test - Update CI if using specific version (workflow uses
latestby default) - Handle deprecated APIs and breaking changes
- CI automatically uses
macos-latest(currently macOS 13+) - Update minimum deployment target if needed:
.macOS(.v13) - Add availability checks for new APIs:
if #available(macOS 14.0, *) { // Use new API } else { // Fallback implementation }
If build execution is slow:
- Check dependency caching effectiveness
- Profile slow tests:
swift test --verbose 2>&1 | grep "Test Case.*passed" - Optimize build configuration for performance testing
- Consider parallel execution improvements
If these solutions don't resolve your issue:
- Check the System Extension troubleshooting guide
- Review build logs for detailed error messages
- Reproduce the issue with verbose output:
swift build --verbose - Check GitHub Actions status for platform issues
- Consult project maintainers for project-specific guidance