MacのCocoa(サンドボックス)アプリケーションにJavaランタイムを埋め込む方法を知っている人は誰でも、Javaを別途インストールしなくても.jarファイルを実行できますか?Javaランタイムをサンドボックス化されたCocoa Macアプリケーションに埋め込む
私たちは、Mac App Storeを通じて販売されているココアのアプリケーションだけでなく、Javaを特定のタスクに使用できる独自のサイトで販売しています。筆記用アプリであり、.doc、.docx、.odtの標準NSTextエクスポータは非常に限られているので(ヘッダー、フッター、イメージなどはサポートしていません)、RTFに書き出してからJavaベースのコンバータを使用します。 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を実行する必要があるCocoaアプリケーションにJava Runtime Environmentを埋め込むことだと読んでいます。 (Eg:http://lists.apple.com/archives/java-dev/2011/Jul/msg00038.html)
私はここ数日間、私のアプリにJREを埋め込む方法を研究していましたが、私はどのようにそのように行うべきかについての指示はありませんでした私は少なくとも理解する。程度が答え、しかし
Bundling a private JRE on Mac OS X
、そして私が見つけた他のサイトで、すべてのMacアプリケーションとして、Javaアプリケーションをバンドルについてです、ではない:誰かが数年前にここに同様の質問を既存のCocoaアプリケーションを使用したJREも含まれます。 (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を呼び出すことができるようになった経験はありますか? JREは完全にサンドボックス化されており、Mac App Storeで受け入れられるようになっていますか?または、別のJavaインストールを必要とせずに.jarファイルを実行するサンドボックス化されたCocoaアプリケーションを誰も作成できましたか?もしそうなら、あなたはそれをどうやって分かち合うのですか?
(私はAppleがこれに助けを求めて開発者の技術サポートインシデントを取り出したが、彼らは、Javaは現在、サードパーティの開発環境と考えられていることを考えると、全く助けることができなかったことを言われました。)
私が見逃している可能性のあるウェブページへの提案や指針については、事前に多くの感謝をします。
それはあなたが特定のケースで好き_looks_より一般的な「サンドボックス内の補助実行ファイルを使用する方法」の問題。 JREのエンタイトルメントを指定したり、http://www.codeotaku.com/journal/2012-10/code-signing-auxiliary-executables/indexに記述されているようにコード署名することは問題ではありませんか? –
多くの感謝!私はリンクがちょうど私が必要としたものだと思う。 (そして、別の実行可能ファイルで直面していた問題も解決しています。)したがって、私のアプローチは、OracleのサイトからJREを私のアプリケーションでバンドルします。 10.6以降では、OS Xの組み込みバージョンのJavaを呼び出します(デフォルトでは10.6にインストールされ、OracleのJRE 7は10.7以降でのみ動作します)。 10.7以降では、アプリケーションに組み込まれているJREを呼び出し、codeotakuリンクのメソッドを使用してJava実行可能ファイルをサンドボックスします。指が通過してレビューを通過する。再度、感謝します! – kayembi