Передача аргумента от делегата приложения к расширению системы, Ma c OS - PullRequest
1 голос
/ 20 июня 2020

Я создаю расширение системы и включаю его в приложение Ma c на Ma c 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 Ответ

1 голос
/ 21 июня 2020

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

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