Передача аргумента из делегата приложения в расширение системы, 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.