Как вызвать сценарии оболочки для управления LaunchAgents из изолированного приложения MacOS? - PullRequest
1 голос
/ 07 февраля 2020

У меня есть macOS-приложение без песочницы, которое с радостью вызывает скрипты оболочки в своем комплекте ресурсов следующим образом:

class func runShell(launchPath: String, arguments: [String] = [], waitUntilExit: Bool) -> Void {
    let task = Process()
    task.launchPath = launchPath
    task.arguments = arguments

    let pipe = Pipe()
    task.standardOutput = pipe
    task.launch()

    if waitUntilExit {
        task.waitUntilExit()
    }
}
ABCProcessManager.runShell(launchPath: scriptPath.path, arguments: ["-workingdirectory", path], waitUntilExit: true)

Я пытаюсь преобразовать приложение в песочницу (для загрузки из App Store), но он зависает при вызове скриптов.

Скрипты управляют агентом запуска. Загрузка, выгрузка, запуск, остановка.

Как мне изменить свой код, чтобы он работал при включенной песочнице? Может быть, есть «песочница» для управления агентами запуска?

1 Ответ

2 голосов
/ 07 февраля 2020

Я нашел ответ на форумах поддержки Apple, опубликованных сотрудником Apple:

Возможно ли иметь в App Store приложения Ma c, которые работают с LaunchAgents?

Нет.

Почему бы и нет:

  1. XP C Сервисы, включенные в приложение, доступны только для этого приложения.
  2. Ma c App Store приложениям не разрешается включать в себя демон launchd или агент.

Они также упоминают, что технически существует один недокументированный способ, но настоятельно рекомендуют не идти по этому пути:

Как случайность реализации, служба, зарегистрированная в изолированном от песочницы элементе входа, видна другим процессам, выполняющимся в сеансе пользователя. Таким образом, в современных системах вы можете выполнить эту работу, реализовав совместимый с песочницей элемент входа в систему (как показано в примере кода AppSandboxLoginItemXPCDemo), и ваши инструменты командной строки будут с ним общаться. Проблема этого подхода заключается в том, что это случайность реализации, а не документированная функция. Более того, это противоречит общей цели App Sandbox - изолировать изолированное приложение от остальной системы.

Так что я думаю, что я буду придерживаться приложения без песочницы, распространяемого непосредственно клиенты.

Ссылка службы поддержки Apple

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...