我有个很奇怪的设计问题。以前的几乎相同的版本已经通过验证并提交到App,因此我的共同设计不会中断。
最近,我一直试图使用iTunesLibrary框架。只有当您的应用程序是协同设计时,此框架才能工作。在试图初始化表示协同设计失败的框架时,我遇到了一个常见错误:
“错误Domain=NSPOSIXErrorDomain Code=100001”无法加载。UserInfo=0x100329d80 {NSLocalizedDescription=Could not load.,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发布于 2014-02-28 22:27:17
解决方案是将iTunesLibrary框架链接到您的主要可执行文件以及实际使用它的框架。
我想知道为什么..。
发布于 2014-03-01 03:11:41
如果要嵌入框架,则需要创建“复制文件”构建阶段,将your.framework移动到框架目标。在添加了构建阶段之后,添加一个运行脚本,其内容如下:
LOCATION="${BUILT_PRODUCTS_DIR}"/"${FRAMEWORKS_FOLDER_PATH}"
IDENTITY="Developer ID Application: Certificate Common Name"
codesign --verbose --force --sign "$IDENTITY" "$LOCATION/your.framework/Versions/A"简而言之,--deep标志不能正确地完成这项工作。是的,它递归地对嵌套的包签名,但是,它将顶层包的参数应用到所有嵌套的包中。反过来,您的应用程序的权利将导致所产生的包无效。
人类共同设计
任何间接嵌套的内容都需要递归应用codesign命令。
https://stackoverflow.com/questions/22106510
复制相似问题