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