- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试向 OS X 用户分发 Java 应用程序。我没有使用 Mac 商店——它将通过我自己的网站进行分发。无论我尝试什么,OS X 的 Gatekeeper 都会拒绝该应用程序。
这是我的方法:
(1) 像往常一样构建应用程序,获取 JAR 文件
(2) 按此处所述使用 appbundler
:https://docs.oracle.com/javase/7/docs/technotes/guides/jweb/packagingAppsForMac.html .这会在我的 JAR 周围创建一个运行良好的 .app,并在 MyApp.app/Contents/PlugIns
目录中包含 JVM。
(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
选项(我试过但没有)进行签名没用)。
最佳答案
你不能使用--deep
。这听起来是个正确的选择,因为您还需要签署嵌入式 JRE,但它不起作用。来自 Apple's docs :
Important: While the --deep option can be applied to a signing operation, this is not recommended. We recommend that you sign code inside out in individual stages (as Xcode does automatically). Signing with --deep is for emergency repairs and temporary adjustments only.
经过大量的努力,我从各种教程中拼凑了这个。 This one是最有帮助的。这是我作为 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>
另一件需要注意的事情是不要在签名后使用命令行 zip
打包您的应用程序,因为它会破坏应用程序的代码签名。您应该使用 productbuild
、PackageMaker、xip
或 dmg 对其进行打包。
关于java - OS X Gatekeeper 的代码签名 Java 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26938414/
我们有一套多平台的命令行可执行文件和库,可以移植到 Mac。文件布局是 /应用程序/ (公司文件夹)/ (我们的用户界面).app (产品名称)/ 仓/ ...执行... 库/ ...dylibs..
我正在尝试将 ProxyInjector 设置为自动将 keycloak-gateway 注入(inject)任何具有如下注释的容器中,这些容器用于我在 kubernetes 上部署的服务: "ann
我正在为 iPhone 开发一个应用程序。有时我会收到此日志: Named service 'com.apple.PersistentURLTranslator.Gatekeeper' not fou
我在 Xcode 中有一个被 Gatekeeper 阻止的“命令行工具”目标(不是应用程序包)。多年来,我一直将此工具用作 PostCheck 地址簿插件的简单安装程序。 2012 年,我使用我的 A
目标 :当 nginx 入口具有事件重写目标功能时,Keycloak 网守部署。 Ingress 根据以下内容重写目标: rewrite.bar.com/something/重写为 rewrite.b
我将我的 Mac 操作系统更新到 Catalina beta 版本,并在卸载 DMG 时收到 Gatekeeper 警告,提示为“MyApp.app 无法打开,因为苹果无法检查它是否存在恶意内容”。但
设置 aud 的正确方法是什么?声称避免以下错误? unable to verify the id token {"error": "oidc: JWT claims invalid: inval
我想知道控制与某些事件监听器关联的逻辑是否处于事件状态的最佳方法。 我自然而然地遇到了三种控制事件监听器内部逻辑的方法。 使用一个可由所有连接的套接字访问的变量,充当看门人。如果一个套接字将该变量设置
我观察到,一旦我的签名应用程序从 Internet 下载并通过了 GateKeeper 接受(即我在警告对话框中单击“确定”),它就永远不会再次被隔离。也就是说后续的下载不会收到任何警告。即使它是应用
在 MacOS Mojave 10.14.5 上,依赖 TCP 连接的本地服务会随机中止连接,从而导致“Mysql 已消失”和 Nginx 连接重置等错误。 似乎 Mojave 操作系统正在监视并阻止
来自苹果最近的一篇文章: With the release of OS X Mavericks 10.9.5, the way that OS X recognizes signed apps wil
当前流量: incoming request (/sso-kibana) --> Envoy proxy --> /sso-kibana 预计流量: incoming request (/sso-ki
我正在尝试向 OS X 用户分发 Java 应用程序。我没有使用 Mac 商店——它将通过我自己的网站进行分发。无论我尝试什么,OS X 的 Gatekeeper 都会拒绝该应用程序。 这是我的方法:
我是否需要 99 美元的 Apple 开发者帐户才能使我的应用程序避免“ [此应用程序] 无法打开,因为它来自身份不明的开发者”警告,或者我可以通过免费的开发者帐户?我知道我的客户可以通过更改他们的
自从我将我的 MacBook 升级到 macOS Catalina。尽管我禁用了“spctl”,但我还是收到了永久消息(“ideviceinfo”无法打开,因为开发人员未经过验证)。有人可以帮忙吗?我
在 OS X 10.8 的新版本中,当您尝试启动已签名的 Java 小程序时,Gatekeeper 将弹出以下警告: 小程序已使用有效的代码签名证书进行签名,并且可以在其他平台以及以前版本的 OS X
我的公司为服务器生产 Java 应用程序并提供 JNLP 文件以启动本地应用程序。从 OSX 10.8.4 开始,需要使用 Developer ID 对 JNLP 文件进行签名才能让 Gatekeep
我想在 K8sPSPCapabilities 约束模板中将一个容器列入白名单,但我在使用 rego 语言时遇到了一些困难。我想禁止除特定容器之外的所有容器的 NET_RAW 功能。如果有人能指出我正确
我正在构建我的应用程序并使用有效的代码签名证书(开发人员 ID 应用程序...)进行签名: codesign --force --verify --verbose --sign "Developer
场景 我想发布一个适用于 Mac OS X 的应用程序,但不在 AppStore 上。该应用程序在 10.6 - 10.8 及更高版本上运行。 问题 Apple 要求 Mac OS X 10.8+ 的
我是一名优秀的程序员,十分优秀!