2014-11-14 9 views
4

자바 응용 프로그램을 서명합니다. Mac 스토어를 사용하지 않고 있습니다. 이것은 내 웹 사이트를 통해 배포됩니다. 내가 시도해도 OS X의 게이트 키퍼는 앱을 거부한다.코드는 내가 OS X 사용자에게 자바 응용 프로그램을 배포하려고 OS X 게이트 키퍼

여기 내 방법입니다 : https://docs.oracle.com/javase/7/docs/technotes/guides/jweb/packagingAppsForMac.html을 :

(1) 평소와 같이 응용 프로그램을 구축, 여기에 설명 된대로

(2) appbundler를 사용하여 JAR 파일을 얻을. 이것은 멋지게 실행되는 JAR 주위에 .app을 만들고 MyApp.app/Contents/PlugIns 디렉토리에 JVM을 포함합니다.

(3) 내 개발자 인증서를 사용하여 응용 프로그램을 로그인 :

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

이 ... 프로세스가 성공적으로 완료

(4) .APP는 게이트 키퍼의 철 주먹 법률을 준수하는지 확인 :

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

... 그 결과 I는 다시 얻을 :

MyApp.app: a sealed resource is missing or invalid 

나에게 매우 장황하지 않습니다! 나는 무엇을 잘못 할 수 있 었는가? 또는 어떻게하면 더 많은 정보를 얻을 수 있습니까?

'봉인 된 리소스 ...'를 검색하는 SO/Google은 --force 옵션 (내가 시도했지만 작동하지 않음)을 사용하여 서명하는 방법을 제안하거나 서명하는 프레임 워크를 참조합니다.

답변

4

당신은 --deep을 사용할 수 없습니다. 임베디드 JRE에 서명해야하기 때문에 올바른 옵션처럼 들리지만 작동하지 않습니다. 중요

: Apple's docs부터 --deep 옵션은 서명 작업에 적용 할 수 있지만,이 방법은 사용하지 않는 것이 좋습니다. 개별 단계에서 코드 을 서명하는 것이 좋습니다 (Xcode가 자동으로 수행함). --deep을 사용하여 에 서명하면 응급 수리 및 임시 조정에만 사용됩니다.

머리카락을 많이 잡아 당긴 뒤 여러 가지 자습서에서이 글을 함께 답장했습니다. This one이 가장 도움이되었습니다. 이 응용 프로그램의 통합 설계를 깰 때문에

<!-- 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> 

또 다른 한가지는, 서명 한 후 응용 프로그램을 패키지로 명령 줄 zip을 사용하지 않는 것입니다 피려 : 여기에 개미 스크립트로 내 최종 솔루션이었다. productbuild, PackageMaker, xip 또는 dmg를 사용하여 패키지해야합니다.

+0

응답에 대한 많은 감사의 말씀을드립니다. 불행히도 이것은 검증 ('codesign -vv MyApp.app' 행)이'[exec] MyApp.app : code 객체가 전혀 서명되지 않았습니다'/'[exec]와 충돌합니다. 하위 구성 요소 : MyApp.app/ Contents/PlugIns/jre/Contents/_CodeSignature/CodeDirectory'를 참조하십시오. 어떤 아이디어? – HughHughTeotl

+1

@HughHughTeotl 내가 실행할 때'_CodeSignature/CodeDirectory'를 얻지 못했습니다. 무엇이 그 차이를 일으키고 있는지 확실하지 않습니다. '_CodeSignature'에있는 모든 것을 사인해야하기 때문에'_CodeSignature/CodeDirectory'를리스트에 추가하면됩니다. 또한 OS X 10에 로그인하고 있는지 확인하십시오.9 이상. 이전 버전의 OS X를 사용하는 경우 코드 서명이 작동하지 않습니다. – whiskeyspider

+0

굉장한! 그것은 작동하는 것 같습니다. 그 작은 변화로 답을 편집하여 받아 들일 수 있습니다. (괜찮습니다.) 많은 많은 감사합니다. – HughHughTeotl