Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 将参数从应用程序委托传递给系统扩展,Mac OS_Swift_Macos_Macos System Extension - Fatal编程技术网

Swift 将参数从应用程序委托传递给系统扩展,Mac OS

Swift 将参数从应用程序委托传递给系统扩展,Mac OS,swift,macos,macos-system-extension,Swift,Macos,Macos System Extension,我正在创建一个系统扩展,并将其捆绑到MacOS Catalina上的Mac应用程序中。 我已成功构建应用程序,并请求我的应用程序代表(Swift)激活扩展。我的系统扩展可以成功运行 我的问题是,我需要以某种方式将请求激活扩展的app委托的附加参数传递给我的系统扩展的主功能。具体来说,我正在尝试传递运行应用程序的用户的用户名。是否有方法将其他参数从委托传递到扩展 我无法从系统扩展中获取当前用户,因为该扩展始终以root用户身份运行。因此,获取当前用户的操作将返回root 应用程序代表的相关代码:

我正在创建一个系统扩展,并将其捆绑到MacOS Catalina上的Mac应用程序中。 我已成功构建应用程序,并请求我的应用程序代表(Swift)激活扩展。我的系统扩展可以成功运行

我的问题是,我需要以某种方式将请求激活扩展的app委托的附加参数传递给我的系统扩展的主功能。具体来说,我正在尝试传递运行应用程序的用户的用户名。是否有方法将其他参数从委托传递到扩展

我无法从系统扩展中获取当前用户,因为该扩展始终以root用户身份运行。因此,获取当前用户的操作将返回root

应用程序代表的相关代码:

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扩展通常通过
    iUserClient
    子类与应用程序通信
  • 对于没有指定机制的任何东西,我的猜测是使用XPC

这就是我的想法,谢谢。顺便说一下,它是一个端点安全扩展。同样,在你回答这个问题的同时,我对你在其他地方给出的另一个答案进行了评论哈哈。我相信谷歌已经将其移植到了一个端点安全扩展,看看它在内部是如何工作的可能是有用的。(开源)