ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java-如何在签名应用程序时保留别名属性?

2019-10-30 06:03:16  阅读:236  来源: 互联网

标签:xcode osx-mavericks code-signing codesign java


我已经在Mavericks的JavaFX应用程序上创建了应用程序,并使用Xcode 5.0.2进行了签名-

codesign --deep -s "my name" MayApp.app
codesign -v MayApp.app && echo MayApp.app is Signed Successfully!

没有签署MYAPP启动罚款!

如果不使用–deep,则无法在Mavericks上签名应用.

-更多尝试-

现在在Mavericks,如果该包中的任何嵌套包都未签名,我们将无法再对其进行签名.我确实按照http://furbo.org/2013/10/17/code-signing-and-mavericks/上的说明签署了我的应用程序框架

codesign --verbose --force --sign "my name" MyApp.app/Contents/PlugIns/jdk1.7.0_21.jdk

单独或在签署框架后签署框架命令,不会在签署应用程序中进行任何更改.

——主要问题——

在运行以上命令(无论仅对应用程序签名还是与框架签名一起运行)时,MyApp.app已成功签名,但该应用程序无法在Mac上启动,因为签名命令没有为-MyApp.app中存在的文件libjli.dylib保留ALIAS属性/Contents/PlugIns/jdk1.7.0_21.jdk/Contents/MacOS.对将libjli.dylib别名转换为动态库的应用程序代码进行签名.

然后我想到了通过以下命令复制libjli.dylib-

<target name="Copylib" depends="SigningApp">
<delete file="MyApp.app/Contents/PlugIns/jdk1.7.0_21.jdk/Contents/MacOS/libjli.dylib"/>
<exec executable="cp">
   <arg line="-R /Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/MacOS/ MyApp.app/Contents/PlugIns/jdk1.7.0_21.jdk/Contents/MacOS"/>
</exec>
</target>

这个保留别名,但现在在验证签名应用程序时说-

admins-iMac:osx admin$codesign -v -v MyApp.app
MyApp.app: code object is not signed at all
In subcomponent: MyApp.app/Contents/PlugIns/jdk1.7.0_21.jdk
In architecture: x86_64

如果我在MyApp.app中手动复制该别名,也会发生同样的情况.

请提出任何方法来签署应用程序,以保留我框架中存在的所有文件的属性,方法是-Contents / PlugIns / jdk1.7.0_21.jdk?

谢谢

解决方法:

通过将Java从jdk7u21更新到最新的jdk7u45,我的问题得到了解决,因为Apple已在OS X上禁用了Oracle的Java 7u25及更低版本.更新到最新版本将允许Java在Mac OS X上运行.

此外,我必须进行这些更改才能使应用有效进行签名-

>在MyApp.app/Contents/Info.plist中,对于CFBundleExecutable到MyApp,将CFBundleIconFile到MyApp.icns.
>需要将/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/MacOS/libjli.dylib复制到MyApp.app/Contents/PlugIns/jdk1.7.0_45.jdk/Contents/MacOS中以获取libjli.dylib别名.
>我们还需要将系统安装的jdk中的/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Info.plist复制到我们的MyApp.app/Contents/PlugIns/jdk1.7.0_45.jdk/Contents/

注意:步骤2和步骤3是必需的,因为在部署JavaFx应用程序时,部署过程默认仅将/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home复制到MyApp.app/Contents/PlugIns中,跳过MacOS /文件夹和Info.plist.

在不进行上述更改的情况下,通过-

codesign --deep -s "my name" MayApp.app

我在签名时遇到了错误-MyApp.app:无法识别,无效或不合适的捆绑软件格式-我们正面临此问题,因此我们需要确定是什么导致无法识别,无效或不合适的应用捆绑格式.

谢谢

标签:xcode,osx-mavericks,code-signing,codesign,java
来源: https://codeday.me/bug/20191030/1965749.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有