我是一名 Windows 开发人员(具有一些 iOS Objective-C 经验),我正在非常仔细地尝试选择正确的语言来为 MacOS 制作一个相当简单的守护程序。
该应用程序将下载和上传文件,并与我们已有的 .NET Web 服务进行通信。
安装将由非技术日常用户完成,因此要求他们自行进行大量配置/脚本编写并不是一个选择。一个完美的包是一个要求。
我认为我的选择是:
- Objective-C
- Java
- 单声道
- 脚本
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/