gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:16:06 26 4
gpt4 key购买 nike

我在 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 上启动,因为签署命令未保留文件 libjli 的 ALIAS 属性.dylib 存在于 - MyApp.app/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 上运行。

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

  1. MyApp.app/Contents/Info.plist 中,CFBundleExecutable 到 MyApp,CFBundleIconFile 到 MyApp.icns。
  2. 需要复制/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/MacOS/libjli.dylibMyApp.app/Contents/PlugIns/jdk1.7.0_45 .jdk/Contents/MacOSlibjli.dylib 别名。
  3. 我们还需要将系统安装的 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:捆绑格式无法识别、无效或不合适 - 我们正面临这个问题,因此我们需要确定导致应用捆绑格式无法识别、无效的原因,或不合适。

谢谢

关于java - 如何在签署应用程序时保留别名属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20190177/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com