Как получить доступ к упакованному инструменту CLI, используя Swift на OSX

Мне нужно выполнить следующие три вещи. Я не уверен, как это сделать, используя Swift и Xcode

  1. Пакет существующего инструмента CLI с приложением.

  2. Используйте swift для выдачи команд этому приложению CLI и позвольте ему делать свое дело.

  3. Читайте поток вывода, поступающий из приложения CLI в режиме реального времени, если это возможно.

Я нашел NSTask, который следует использовать, но я получаю проблемы и ошибки приложения. SMJobBless звучит полезно, но мне трудно все это понять. Все, что я пытался сделать, это ввести некоторые команды для приложения cli, которое уже встроено в мой пакет приложения.

1 ответ

Если вы хотите упаковать инструмент командной строки, который вы уже написали, и запустить его от имени пользователя root, это можно сделать, установив его, но это потребует некоторой работы. При установке инструмента командной строки таким образом Apple называет его вспомогательным инструментом. (Иногда это привилегированный вспомогательный инструмент.)

Для успеха Apple требуется следующее:

  1. Ваше приложение должно быть подписано.
  2. Вспомогательный инструмент должен быть подписан.
  3. Вспомогательный инструмент должен находиться в Contents/Library/LaunchServices каталог внутри пакета вашего приложения.
  4. Имя файла вспомогательного инструмента должно быть в формате обратного DNS.
    • Если ваше приложение имеет идентификатор пакета «com.example.YourApp», тогда имя вашего вспомогательного инструмента может иметь имя «com.example.YourApp.helper».
  5. Вспомогательный инструмент должен иметь встроенный список свойств launchd.
  6. Встроенный список свойств launchd вспомогательного инструмента должен содержать запись с Labelв качестве ключа и значения должно быть имя файла вспомогательного инструмента.
  7. Вспомогательный инструмент должен иметь встроенный список свойств информации.
  8. Список свойств встроенной информации вспомогательного инструмента должен содержать запись сSMAuthorizedClientsпоскольку его ключ и его значение должны быть массивом строк. Каждая строка должна соответствовать требованию подписи кода . Ваше приложение должно удовлетворять хотя бы одному из этих требований.
    • Только процессы, отвечающие одному или нескольким из этих требований, могут устанавливать или обновлять вспомогательный инструмент.
    • Эти требования касаются только того, какие процессы могут устанавливать или обновлять вспомогательный инструмент. Они не накладывают ограничений на то, какие процессы могут взаимодействовать со вспомогательным инструментом.
  9. Список свойств встроенной информации вспомогательного инструмента должен содержать запись споскольку его ключ и значение должны быть строкой, соответствующей формату, описанному в документации.
    • Это требование не задокументировано Apple, но соблюдается.
    • Хотя это не задокументировано Apple, SMJobBless не будет перезаписывать существующую установку вспомогательного инструмента установкой с равным или меньшим значением для его CFBundleVersion Вход.
  10. В Info.plist вашего приложения должна быть запись сSMPrivilegedExecutablesпоскольку его ключ и его значение должны быть словарем. Каждый ключ словаря должен быть именем файла вспомогательного инструмента; например com.example.YourApp.helper. Каждое значение словаря должно быть строковым представлением требования подписи кода, которому удовлетворяет вспомогательный инструмент.

Если вы хотите увидеть образец проекта, который настроен для удовлетворения этих требований, вы можете взглянуть на SwiftAuthorizationSample.

Другие вопросы по тегам