首页 > 解决方案 > macOS应用程序的公证过程不起作用

问题描述

我为 MacOS 开发了一个应用程序。我将公证过程作为其分发的一部分。我已按照所有步骤操作并运行:

xcrun altool --notarize-app --primary-bundle-id "${APP_BUNDLE_ID}" --username "${APPLE_DEV_ID}" --password "${DEV_APP_SPECIFIC_PASSWORD}" --file "${DMG_PATH}"  

然后我使用以下方法检查公证进度:

xcrun altool --notarization-info "${notarize_uuid}"  -u "${APPLE_DEV_ID}" -p "${DEV_APP_SPECIFIC_PASSWORD} 

它的输出是:

RequestUUID: =<Request>  
      Date: 2019-05-26 09:40:34 +0000  
    Status: success  
    LogFileURL: <Log file>  
    Status Code: 0  
    Status Message: Package Approved =~ success ]] 

然后我启动装订命令:

xcrun stapler staple -v <dmg file>

它也以成功结束:

The staple and validate action worked!  

但是,当我提取 .app 文件并运行时:

spctl --assess --verbose ./macos/MyApp.app  
./macos/MyApp.app/: accepted  

根据我读过的文档,它应该说:“source=Notarized Developer ID”,对吧?

我在 MacOS Mojave 10.14.5 上运行它

我错过了什么??

有人可以帮助我吗?

提前致谢

标签: macos-mojavecodesignnotarize

解决方案


简短的回答

这可能是由于RPATH引用了 App 捆绑包之外的路径。删除此 RPATH 将解决该问题。

检查日志文件

您可以在Console.app. 请注意,在尝试打开被阻止的应用程序之前,您应该打开 Console.app,否则可能不会记录所有消息。您应该XprotectService在设备的日志中查找进程(即在 Console.app 的左侧栏中选择您的设备)。如果 RPATH 确实是问题所在,您应该找到这样的记录:

XprotectService:[com.apple.xprotect:xprotect] 文件 /path/to/your/executable/or/library 在 rPathCmd /rpath/causing/the/problem 上失败(rpath 解析为:(找不到路径),bundleURL:/path /to/your/bundle.app)

检查这些日志文件也可能为您提供解决其他问题的关键。

请注意,我从 Apple 工程师那里收到了以下信息:

Gatekeeper 不会通过 UI 通知用户错误的细节,尽管它在日志中供开发人员查看。公证过程纯粹是关于检测恶意软件,不会复制 Gatekeeper 的执行。您仍然需要对软件进行公证并使用 Gatekeeper 进行测试。

我们希望在未来为开发人员提供更好的工具来预检其中一些常见错误。

联系苹果

如果您无法通过上述信息解决您的问题,您可能需要使用反馈助手联系 Apple 。他们的反应不是很快(约 1-2 周),但答案很中肯。


推荐阅读