java - 制作 MacOS 守护程序时我可以选择哪些语言?

标签 java objective-c macos mono

我是一名 Windows 开发人员(具有一些 iOS Objective-C 经验),我正在非常仔细地尝试选择正确的语言来为 MacOS 制作一个相当简单的守护程序。

该应用程序将下载和上传文件,并与我们已有的 .NET Web 服务进行通信。

安装将由非技术日常用户完成,因此要求他们自行进行大量配置/脚本编写并不是一个选择。一个完美的包是一个要求。

我认为我的选择是:

  1. Objective-C
  2. Java
  3. 单声道
  4. 脚本

Objective-C 的优点是它是原生的,但我还不是最擅长这种语言的。

Java 非常简单,但是所有用户都掌握它吗?要求人们安装它会有问题吗?

Mono 可以让我利用我的 .NET 技能,但它会作为守护进程优雅地安装吗?

脚本编写可能是一种选择,因为应用程序要做的事情非常简单,但这是交付这样的产品的常态吗?

--

编辑

不会有 GUI。我可以不隐藏代码,尽管需要 UID/PWD 才能访问网络服务(每个客户端都不同)。它将始终为所有客户端运行。

最佳答案

Objective-C/Cocoa 或 C(尤其是使用 Core Foundation )肯定会给您带来最原生的实现,并具有性能和操作系统集成优势。

Java是合理的,将会被内置。您需要一些基本脚本来引导它,但不多。

Mono 也很合理,用户可以相对轻松地安装。您需要将它们指向下载页面并指定它们只需要运行时,但这是可行的。取决于licensing ,您可以将 Mono 运行时安装程序包包含在您自己的安装程序包中,以便它与您的守护程序同时安装。

当然,脚本语言很可能会让您的代码暴露并可修改,因此如果您担心这一点,您可能希望避免采用该途径。

无论使用哪种语言来开发守护程序,您都需要考虑安装和管理。

对于安装,Mac 用户习惯使用两种安装方法:通过安装程序 .pkg 文件进行安装,用户双击该文件,然后完成安装过程,或者将应用程序拖到其安装程序中。应用程序文件夹并双击启动。作为一名开发人员,前者为您提供了很多控制权,包括 README/许可证文本、运行飞行前和飞行后脚本、构建元包以安装一个或多个包(如上所述,重新:可能在您的应用程序中包括 Mono 运行时)自己的安装程序),并且还使操作系统和用户能够查看将安装哪些文件、在何处以及何时(安装后)(如果他们愿意)。或者,许多守护进程将是实际的 Mac OS X 应用程序,然后在首次启动时将其自身安装为后台进程。前者将独立于您的语言选择,但后者将倾向于 Objective-C/Cocoa 实现。

这让我进入了管理层。大多数守护进程都希望通过 launched 运行作为 LaunchDaemon(对于所有用户,通常在启动时启动)或 LaunchAgent(对于特定用户,通常在登录时启动)。如果您与launched很好地集成,每个人都会更高兴,并且应该可以使用您的任何语言选项。

接下来的问题是用户是否需要管理守护进程?如果是这样,则最常将其实现为“额外菜单”或“首选项 Pane ”。在任何一种情况下,守护进程都可以用任何语言开发并由 MenuExtra/首选项 Pane 控制(特别是通过启动),但在某些情况下,MenuExtra 实际上可以充当守护进程,因此您可以想要使用 Objective-C/Cocoa 进行开发。

另请参阅:Apple 的 Designing Daemons & Services文档。

关于java - 制作 MacOS 守护程序时我可以选择哪些语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10502248/

相关文章:

java - 更改 MouseRelease 事件上的 JLabel 背景

objective-c - MKPinAnnotationView 自定义图像替换为具有动画效果的图钉

objective-c - 如何加入 [Number numberWithChar : c]'s into an NSString?] 的 NSArray

c++ - glCreateShader 在 OSX 上抛出异常,为什么?

macos - 在 macOS 上,如何从终端打开新的 Chrome 窗口而不是新选项卡(即 Bash 命令)

c - Mac 上的 lldb 内存读取错误

使用自签名证书的 Java Rest Client

java - 关于在调用查询之前使用 JPA 刷新的问题

ios - 我可以将两个按钮分配给 Xcode 7 中的同一个 Action 或 socket 吗?

java - 如何创建订阅可观察对象的BehaviorSubject?