在app bundle中的OSX框架中创建符号链接

时间:2015-01-09 23:43:40

标签: macos symlink codesign

我需要在OSX上的app中的框架中创建符号链接(第10.10.1节)。我在XCode之外,因为该应用程序是在Qt开发的。它提供了框架,但是它们需要一些修改来处理新的代码签名规则。

我称之为“ln -s path_origin path_target_link”,显然它有效,链接已创建,并且它们会解析到正确的位置。

但是当我对应用程序进行协同设计时,我收到错误“嵌入式框架的根目录中存在未密封的内容”

(为了验证我的程序,我从另一个下载的包复制了一个框架,验证了代码签名,我可以成功签名,当我创建一个符号链接时,我的方式代码签名开始给出错误所以我假设问题是我的符号链接创建)

我尝试了其他相同结果的方法,所以我必须遗漏一些东西。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

对于这种情况,它对任何人都有用。在我的情况下,问题是我正在创建与absoulte路径的链接。显然它们应该是相对的:你移动到链接应该去的目录,并创建相对于当前位置的链接。

答案 1 :(得分:0)

版本1代码符号仅记录Resources目录中的文件,而忽略其余文件。但是版本2默认记录了几乎所有文件。所以我们必须签署每个框架捆绑包的版本和app二进制文件。

确保您的框架捆绑结构符合Apple的要求。 Imposed Framework structured by Apple

根据Apple的文档,框架包没有“Contents”文件夹。相反,每个版本文件夹都会获得一个“Resources”文件夹,其中包含Info.plist文件,该文件夹也在顶级框架文件夹中进行符号链接。 SDK构建后Qt5框架的布局不正确,所以这不仅仅是macdeployqt的问题,而是整个框架组件的一部分。

enter image description here

所以请确认,您的应用包中没有错误的布局。

如果你的Qt框架包中有* .prl(即QtCore.framework / QtCore.prl)。 * .prl文件可能会给您带来麻烦,因为代码签名只是在“嵌入式​​框架的根目录中显示未密封的内容”而不确切地告诉您发生了什么。如果您有任何prl文件,请删除。

Info.plist必须具有正确的CFBundleExecutable字段。目前它没有。 Info.plist的调试版本将覆盖发布版本,它也恰好包含无效数据。特别是,CFBundleExecutable将包含_debug后缀库名称,它不应该。如果您遇到此问题,请修改错误的info.plist。

最后一步是您必须在签署整个应用程序包之前对所有框架进行编码。

相关问题