A modern Swift wrapper for Apple's SystemExtensions framework that provides async/await support and simplified APIs for managing system extensions on macOS.
- 🔄 Async/await support - Modern Swift concurrency
- 📱 Simple API - Easy-to-use methods for common tasks
- 🛡️ Error handling - Comprehensive error types and descriptions
- 📊 Progress tracking - Real-time status updates
- 🎯 Swift 5.10+ - Built for modern Swift
- 📦 SwiftPM - Multiple installation options
- macOS 10.15+
- Swift 5.10+
- Xcode 14.0+
dependencies:[.package(url:"https://github.com/codingiran/SystemExtensionKit.git", from:"2.1.0")]import SystemExtensionKit
// Activate system extension
do{tryawaitSystemExtension.activeSystemExtension()print("Extension activated successfully")}catch{print("Failed to activate: \(error.localizedDescription)")}
// Check extension status
letstatus=awaitSystemExtension.checkSystemExtensionStatus()switch status {case.installed:print("Extension is installed and running")case.waitingApproval:print("Extension needs user approval")case.notInstalled:print("Extension is not installed")case.unknown:print("Status unknown (macOS < 12.0)")}
// Deactivate system extension
do{tryawaitSystemExtension.deactiveSystemExtension()print("Extension deactivated successfully")}catch{print("Failed to deactivate: \(error.localizedDescription)")}classExtensionManager:SystemExtensionRequestUpdating{func setupExtension(){
// Set progress updater
SystemExtension.requestUpdater =selfTask{do{tryawaitSystemExtension.activeSystemExtension()}catch{print("Extension activation failed: \(error)")}}}
// MARK: - SystemExtensionRequestUpdating
func systemExtensionRequest(_ request:SystemExtensionRequest, updateProgress progress:SystemExtensionRequest.Progress){switch progress {case.submitting:print("Submitting extension request...")case.needsUserApproval:print("User approval required")case.completed:print("Extension request completed")case.willCompleteAfterReboot:print("Restart required to complete")case.failed(let error):print("Request failed: \(error.localizedDescription)")case.replacingExtension(let existing,let new):print("Replacing version \(existing) with \(new)")case.cancelExtension(let existing,let new):print("Canceling replacement of \(existing) with \(new)")}}}// Force update extension
tryawaitSystemExtension.activeSystemExtension(forceUpdate:true)
// Get extension properties (macOS 12.0+)
if #available(macOS 12.0,*){
if let properties =tryawaitSystemExtension.enabledSystemExtensionProperty(){print("Bundle ID: \(properties.bundleIdentifier)")print("Version: \(properties.bundleVersion)")print("Awaiting approval: \(properties.isAwaitingUserApproval)")}}SystemExtensionKit provides comprehensive error types:
do{tryawaitSystemExtension.activeSystemExtension()}catchSystemExtensionKit.ExtensionError.extensionNotExist {print("No system extension found in app bundle")}catchSystemExtensionKit.ExtensionError.extensionNeedReboot {print("System restart required")}catchSystemExtensionKit.ExtensionError.extensionSystemUnsupport {print("System version not supported")}catch{print("Other error: \(error.localizedDescription)")}SystemExtensionKit is available under the MIT license. See the LICENSE file for more info.
