Передача аргумента из делегата приложения в расширение системы, Mac OS

Я создаю системное расширение и встраиваю его в приложение Mac на Mac OS Catalina. Мне удалось создать приложение и запросить активацию расширения у делегата моего приложения (Swift). Мое системное расширение может успешно работать.

Мой вопрос в том, что мне нужно каким-то образом передать дополнительные аргументы от делегата приложения, который запрашивает активацию расширения основной функции моего системного расширения. В частности, я пытаюсь передать имя пользователя, запустившего приложение. Есть ли способ передать дополнительные аргументы от делегата расширению?

Я не могу получить текущего пользователя из системного расширения, потому что расширение всегда работает как 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, это было бы прекрасно. Я открыт для других решений. Суть в том, что мне нужно каким-то образом передать это значение имени пользователя между ними.

1 ответ

Решение

Если я правильно понимаю ваш вопрос, то ответ во многом зависит от того, какое расширение системы вы разрабатываете. Например:

  • API-интерфейсы расширения сети VPN уже имеют встроенный механизм для связи с их приложением запуска, путем передачи параметров во время запроса на запуск туннеля и т. Д.
  • Расширения DriverKit обычно взаимодействуют с приложениями через IOUserClient подклассы.
  • Я предполагаю, что для всего, что не имеет определенного механизма, использовать XPC.
Другие вопросы по тегам