macos-mojave - 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 上运行它
我错过了什么??
有人可以帮助我吗?
提前致谢
解决方案
简短的回答
这可能是由于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 周),但答案很中肯。
推荐阅读
- java - 为什么 NetworkInterface.getNetworkInterfaces() 这么慢?
- icalendar - 如何在 Google 日历中创建高级定期活动规则?
- bash - 使用通用对象索引的 Bash Jq 语法错误
- macos - 选择 iTunes 库位置有什么 API?
- amazon-web-services - Step Functions 将参数传递给 lambdas
- linux - 如何在 Linux shell 中根据第一个字符拆分文件
- apache-spark - SparkContext.newAPIHadoopFile API 是否并行读取和处理单个文件?
- ios - ld: 找不到 -lCocoaLumberjack 的库 | 反应原生
- react-native - 三星 Tab A 上的 React Native 很慢
- python - Python Dictionary For Loop - 针对不同的列表测试一个键