Skip to content

Repository files navigation


logo

Modern Swift Wrapper for SystemExtensions API


SwiftPM CompatibleCocoapods CompatiblemacOS Versions SupportedMIT License

SystemExtensionKit

A modern Swift wrapper for Apple's SystemExtensions framework that provides async/await support and simplified APIs for managing system extensions on macOS.

Features

  • 🔄 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

Requirements

  • macOS 10.15+
  • Swift 5.10+
  • Xcode 14.0+

Installation

Swift Package Manager

dependencies:[.package(url:"https://github.com/codingiran/SystemExtensionKit.git", from:"2.1.0")]

Quick Start

Basic Usage

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)")}

Progress Monitoring

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)")}}}

Advanced Usage

// 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)")}}

Error Handling

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)")}

License

SystemExtensionKit is available under the MIT license. See the LICENSE file for more info.

About

macOS platform utils for SystemExtension

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages