Update:
I added OsSystemExtensionRequest.
But I'm getting this error
The operation couldn’t be completed. (OSSystemExtensionErrorDomain error 1.)
let log = OSLog(subsystem: "com.example.apple-samplecode.DNSTestBed", category: "app")
// let manager = NEDNSProxyManager()
var manager: NEDNSProxyManager?
private func installSystemExtension() {
os_log("DNSFProxy: installing system extension")
let request = OSSystemExtensionRequest.activationRequest(
forExtensionWithIdentifier: "bundle identifier",
queue: .main
)
request.delegate = self
OSSystemExtensionManager.shared.submitRequest(request)
}
private func configureProxy() {
os_log(.info, log: self.log, "will load configurations")
NSLog("QNEDNSProxy.Provider: controller")
NEDNSProxyManager.shared().loadFromPreferences { [weak self] error in
precondition(Thread.isMainThread)
}
os_log(.info, log: self.log, "logs indication the state of loading preferences")
}
override func viewDidLoad() {
super.viewDidLoad()
installSystemExtension()
// configureProxy()
// Do any additional setup after loading the view.
}
//
// override var representedObject: Any? {
// didSet {
// // Update the view, if already loaded.
// }
// }
}
extension ViewController: OSSystemExtensionRequestDelegate {
func request(_ request: OSSystemExtensionRequest, actionForReplacingExtension existing: OSSystemExtensionProperties, withExtension ext: OSSystemExtensionProperties) -> OSSystemExtensionRequest.ReplacementAction {
os_log("DNSProxy: Replacing extension %@ version %@ with version %@", request.identifier, existing.bundleShortVersion, ext.bundleShortVersion)
return .replace
}
func requestNeedsUserApproval(_ request: OSSystemExtensionRequest) {
os_log("DNSProxy: Extension %@ requires user approval", request.identifier)
}
func request(_ request: OSSystemExtensionRequest, didFailWithError error: Error) {
os_log("DNSProxy: System extension request failed: %@", error.localizedDescription)
}
/* Other delegate methods here */
func request(_ request: OSSystemExtensionRequest, didFinishWithResult result: OSSystemExtensionRequest.Result) {
switch result {
case .completed:
manager = NEDNSProxyManager.shared()
case .willCompleteAfterReboot:
os_log("DNSProxy: willCompleteAfterReboot")
@unknown default:
os_log("DNSProxy: default")
}
}
}