有没有人知道如何将Java运行时嵌入到Mac Cocoa(沙盒)应用程序中,以便应用程序可以运行.jar文件而无需用户单独安装Java?
我们有一个Cocoa应用程序,我们通过Mac App Store以及我们自己的站点销售,可以使用Java来完成特定任务.它是一个编写应用程序,因为.doc,.docx和.odt的标准NSText导出器非常有限(不支持页眉,页脚,图像等),我们写出RTF然后使用基于Java的转换器(来自Aspose. com)将RTF转换为.doc,.docx或.odt,具体取决于所选的导出格式.
我通过使用NSTask调用/ usr/bin/java并运行运行转换例程的捆绑.jar文件来实现此目的.这一切都很好用 - 只要Java安装在用户的Mac上.如果没有安装,我们的应用程序会询问用户是否要安装Java以从增强型转换器中受益,或者反过来使用NSText有损转换器.如果用户选择安装Java,我们调用java_home --request来调用OS X的Java安装程序.
但是,既然Apple已经结束(或即将结束)对Java的直接支持,这种方法就存在问题.在我们上一次Mac App Store审核期间,我们被告知我们很快就会停止询问用户是否要安装Java.我已经读到Apple推荐的路线是将Java Runtime Environment嵌入到需要运行Java的Cocoa应用程序中.(例如:http://lists.apple.com/archives/java-dev/2011/Jul/msg00038.html)
在过去的几天里,我一直在研究如何在我的应用程序中嵌入JRE,但是我没有找到任何关于如何在任何地方执行此操作的说明 - 至少我没理解.几年前有人问过类似的问题:
然而,那里和我发现的其他网站上的答案都是关于将Java应用程序捆绑为Mac应用程序,而不是将JRE与现有的Cocoa应用程序包含在一起.(虽然我接受我缺乏Java经验可能意味着我只是不明白如何为我的目的转换指令 - 带我离开Xcode并且我不在我的舒适区.)同样:https:/ /wikis.oracle.com/display/OpenJDK/How+to+embed+a+.jre+bundle+in+your+Mac+app
似乎有几个应用程序已经这样做了(例如Cyberduck),但还没有人记录过这个过程.从我读过的内容来看,我认为我需要从Oracle的JDK或OpenJDK中获取Java虚拟机并将其包含在我的Cocoa应用程序中并从中调用java,但如果我这样做,那么副本中的Java可执行文件JVM不会被沙盒化,因此我的应用程序无法通过MAS审核流程.所以我可能需要以某种方式构建JDK和沙箱的副本,最有可能作为我的大型Xcode项目的一部分?我甚至不确定从哪里开始; 我猜它还处于早期阶段,并没有多少Mac开发人员必须这样做.
有没有人有过将JRE嵌入到Cocoa应用程序中的经验,应用程序只能使用NSTask调用它?并且以这种方式使JRE完全沙箱化并因此被Mac App Store接受?或者,是否有人成功创建了一个运行.jar文件的沙盒Cocoa应用程序,而无需单独的Java安装?如果是这样,你愿意分享你是如何做到的吗?
(我向Apple发起了一个开发者技术支持事件,请求帮助,但有人告诉他们,鉴于Java现在被认为是第三方开发环境,他们根本无法帮助.)
非常感谢您对我可能错过的网页的任何建议或指示.