将参数从 App Delegate 传递到系统扩展,Mac OS
Pass Argument From App Delegate to System Extension, Mac OS
我正在创建一个系统扩展并将其捆绑在 Mac OS Catalina 上的 Mac 应用程序中。
我已成功构建应用程序并请求我的应用程序委托 (Swift) 激活扩展。我的系统扩展可以成功 运行.
我的问题是,我需要以某种方式将请求激活扩展的应用委托的附加参数传递到我的系统扩展的主要功能。具体来说,我正在尝试传递 运行 应用程序的用户的用户名。有没有办法将其他参数从委托传递给扩展?
我无法从系统扩展中获取当前用户,因为扩展 运行 始终是 root。所以获取当前用户将 return root.
来自app delegate的相关代码:
func applicationDidFinishLaunching(_ aNotification: Notification) {
let ID = "com...."
let req = OSSystemExtensionRequest.activationRequest(forExtensionWithIdentifier: ID,
queue: DispatchQueue.main).
req.delegate = self
/*some how pass this arguments to extension*/
let username = NSFullUserName()
OSSystemExtensionManager.shared.extensionManager.submitRequest(req)
}
我的系统扩展的主要功能:
int main(int argc, const char* argv[]){
//start.....extension
//Need to receive arguments here
dispatch_main();
}
如果我能以某种方式接收传递给 argv
的用户名,那就太好了。我对其他解决方案持开放态度。底线是我需要以某种方式在两者之间传达这个用户名值。
如果我正确理解你的问题,那么答案很大程度上取决于你正在开发的系统扩展类型。例如:
- VPN 网络扩展 API 已经有一个内置的机制来与其启动器应用程序通信,通过在隧道启动请求期间传递选项等。
- DriverKit 扩展通常会通过
IOUserClient
个子类与应用程序通信。
- 对于没有指定机制的任何东西,我的猜测是使用 XPC。
我正在创建一个系统扩展并将其捆绑在 Mac OS Catalina 上的 Mac 应用程序中。 我已成功构建应用程序并请求我的应用程序委托 (Swift) 激活扩展。我的系统扩展可以成功 运行.
我的问题是,我需要以某种方式将请求激活扩展的应用委托的附加参数传递到我的系统扩展的主要功能。具体来说,我正在尝试传递 运行 应用程序的用户的用户名。有没有办法将其他参数从委托传递给扩展?
我无法从系统扩展中获取当前用户,因为扩展 运行 始终是 root。所以获取当前用户将 return root.
来自app delegate的相关代码:
func applicationDidFinishLaunching(_ aNotification: Notification) {
let ID = "com...."
let req = OSSystemExtensionRequest.activationRequest(forExtensionWithIdentifier: ID,
queue: DispatchQueue.main).
req.delegate = self
/*some how pass this arguments to extension*/
let username = NSFullUserName()
OSSystemExtensionManager.shared.extensionManager.submitRequest(req)
}
我的系统扩展的主要功能:
int main(int argc, const char* argv[]){
//start.....extension
//Need to receive arguments here
dispatch_main();
}
如果我能以某种方式接收传递给 argv
的用户名,那就太好了。我对其他解决方案持开放态度。底线是我需要以某种方式在两者之间传达这个用户名值。
如果我正确理解你的问题,那么答案很大程度上取决于你正在开发的系统扩展类型。例如:
- VPN 网络扩展 API 已经有一个内置的机制来与其启动器应用程序通信,通过在隧道启动请求期间传递选项等。
- DriverKit 扩展通常会通过
IOUserClient
个子类与应用程序通信。 - 对于没有指定机制的任何东西,我的猜测是使用 XPC。