7

Java アプリケーションを OS X ユーザーに配布しようとしています。私は Mac ストアを使用していません。自分の Web サイトから配布する予定です。何を試しても、OS X の Gatekeeper はアプリを拒否します。

これが私の方法です:

(1) 通常どおりアプリをビルドし、JAR ファイルを取得します

(2) https://docs.oracle.com/javase/7/docs/technotes/guides/jweb/packagingAppsForMac.htmlappbundlerの説明に従って使用します。これにより、JAR の周りに .app が作成され、うまく動作し、ディレクトリに JVM が含まれます。MyApp.app/Contents/PlugIns

(3) 開発者証明書でアプリに署名します。

codesign -s 'Developer ID Application: MyCompany Ltd' --deep MyApp.app

...プロセスは正常に完了しました

(4) .app が Gatekeeper の鉄則に準拠していることを確認します。

spctl --assess --verbose=4 --type execute MyApp.app

...そして、返される結果は次のとおりです。

MyApp.app: a sealed resource is missing or invalid

私にはあまり冗長に見えません!私は何が間違っているのでしょうか?または、どうすればより多くの情報を入手できますか?

「封印されたリソース...」に関するSO / Google検索は、署名フレームワーク(私が持っていない)を参照するか、--forceオプションを使用して署名することを提案します(試しましたが機能しません)。

4

1 に答える 1

8

使用できません--deep。組み込み JRE にも署名する必要があるため、使用するのに適したオプションのように思えますが、機能しません。Appleのドキュメントから:

重要: --deep オプションは署名操作に適用できますが、これはお勧めしません。Xcode が自動的に行うように、個々の段階でコードに裏返しに署名することをお勧めします。--deep による署名は、緊急の修理と一時的な調整のみを目的としています。

多くの髪の毛を引っ張った後、さまざまなチュートリアルからこれをまとめました。 これが一番役に立ちました。Antスクリプトとしての私の最終的な解決策は次のとおりです。

<!-- code sign -->
<exec executable="chmod">
    <arg line="a+w ${build.dir}/Mac/MyApp.app/Contents/PlugIns/jre"/>
</exec>

<apply executable="codesign"> <!-- note: this loops through the contents of dir -->
    <arg line="-f -s 'Developer ID Application: My Organization'"/>
    <fileset dir="${build.dir}/Mac/MyApp.app/Contents/PlugIns/jre" />
</apply>

<exec executable="codesign" dir="${build.dir}/Mac"> 
    <arg line="-f -s 'Developer ID Application: My Organization' MyApp.app/Contents/PlugIns/jre"/>
</exec>

<exec executable="codesign" dir="${build.dir}/Mac"> 
    <arg line="-f -s 'Developer ID Application: My Organization' MyApp.app/Contents/PlugIns/jre/Contents/_CodeSignature/CodeResources"/>
</exec>

<!-- also codesign anything else in _CodeSignature (see comments) -->

<exec executable="codesign" dir="${build.dir}/Mac">
    <arg line="-f -s 'Developer ID Application: My Organization' MyApp.app"/>
</exec>


<!-- verify codesign -->
<exec executable="codesign" dir="${build.dir}/Mac" failonerror="true">
    <arg line="-vv MyApp.app"/>
</exec>


<!-- verify gatekeeper -->
<exec executable="spctl" dir="${build.dir}/Mac" failonerror="true">
    <arg line="-vv --assess --type execute MyApp.app"/>
</exec>

もう 1 つ気を付けなければならないzipことは、署名後にコマンドラインを使用してアプリをパッケージ化しないことです。これは、アプリのコード署名が壊れるためです。productbuild、PackageMaker、、xipまたは dmgを使用してパッケージ化する必要があります。

于 2014-11-14T20:45:26.503 に答える