我有一个非常奇怪的代码设计问题。以前几乎相同的版本已通过验证并已提交到 App Store,因此我的代码签名没有损坏。
最近我一直在尝试使用iTunesLibrary框架。此框架仅在您的应用程序经过代码签名时才有效。尝试初始化表明代码设计失败的框架时,我遇到了一个常见错误:
错误域 = NSPOSIXErrorDomain 代码 = 100001 “无法加载。” UserInfo=0x100329d80 {NSLocalizedDescription=无法加载。,NSUnderlyingError=0x10031a430“操作无法完成。(OSStatus 错误 100005。)”}
我的应用程序被组织成多个框架,包括动态链接和插件。我一直在使用该--deep
标志对我的应用程序进行递归签名,但显然这是错误的。现在我正在使用run script
构建阶段来签署我的每个框架和插件。这似乎codesign
告诉我应用程序已签名。
我已经在调试模式下构建了应用程序,并将其存档并导出为开发人员 ID 签名程序并检查了签名——两种构建模式都通过了。当我运行它时,我从iTunesLibrary
. 真正奇怪的部分是,如果我导出应用程序并自己重新签名,如下所示,则iTunesLibrary
可以正常运行:
codesign --force --sign "MyIdentity" --deep MyApp.app
如果我spctl --assess
过去试图告诉我更多关于此的信息,我会发现这个应用程序尽管工作正常,但签名错误:
/Users/me/Desktop/MyApp.app: rejected
iTunesLibrary
另一方面不喜欢的应用程序通过spctl
检查:
/Users/me/Desktop/MyApp.app: accepted
source=Developer ID
origin=Developer ID Application: Me