1

I need to accomplish following three things. I am not sure how to go about it using Swift and Xcode

  1. Package an existing CLI tool with the APP.

  2. Use swift to issue commands to this CLI app and let it do its thing.

  3. Read the output stream coming from the CLI app in real-time if possible.

I have found NSTask that should be utilized, but I get App Previlege Issues and errors. SMJobBless sounds helpful but I am having hard time to understand all this. All I was trying to do was issuing some commands to a cli app that is already embedded within my app package.

4

1 回答 1

0

如果您希望打包您已经编写的命令行工具并使其以 root 身份运行,则可以通过安装它来完成,SMJobBless但这将涉及一些工作。以这种方式安装命令行工具时,Apple 将其称为帮助工具。(有时是特权帮助工具。)

为了SMJobBless成功,Apple 需要以下条件:

  1. 您的应用必须经过签名。
  2. 必须对帮助工具进行签名。
  3. 辅助工具必须位于Contents/Library/LaunchServices应用程序包内的目录中。
  4. 帮助工具的文件名应该是反向 DNS 格式。
    • 如果您的应用具有捆绑标识符“com.example.YourApp”,那么您的帮助工具的文件名可能为“com.example.YourApp.helper”。
  5. 帮助工具必须有一个嵌入的 launchd 属性列表。
  6. 辅助工具的嵌入式启动属性列表必须有一个Label作为键的条目,值 必须是辅助工具的文件名。
  7. 辅助工具必须具有嵌入的信息属性列表。
  8. 辅助工具的嵌入信息属性列表必须有一个条目, SMAuthorizedClients 其键和值必须是字符串数组。每个字符串都必须代码签名要求。您的应用必须至少满足其中一项要求。
    • 只有满足其中一项或多项要求的进程才能安装或更新帮助工具。
    • 这些要求与哪些进程可以安装或更新帮助工具有关。它们对哪些进程可以与帮助工具进行通信没有施加任何限制。
  9. 辅助工具的嵌入信息属性列表必须有一个条目, CFBundleVersion 其键和值必须是与文档中描述的格式匹配的字符串CFBundleVersion
    • Apple记录此要求,但已强制执行。
    • 虽然 Apple 没有记录,但不会用与其条目SMJobBless具有相同或更低值的辅助工具覆盖现有安装。CFBundleVersion
  10. 您的应用程序的 Info.plist必须有一个条目 SMPrivilegedExecutables 作为其键,其值必须是字典。每个字典键必须是辅助工具的文件名;例如“com.example.YourApp.helper”。每个字典值必须是帮助工具满足的代码签名要求的字符串表示形式。

如果您想查看配置为满足这些要求的示例项目,可以查看SwiftAuthorizationSample

于 2021-10-28T09:17:12.303 回答