2015-01-09 38 views
1

我需要在OSX上的应用程序内部的框架中创建符号链接(10.10.1节)。由于该应用程序是在Qt中开发的,因此我不在Xcode中。它提供了框架,但他们需要修改一些新的协调规则。在应用包中的OSX框架中创建符号链接

我称之为“ln -s path_origin path_target_link”,显然它起作用,链接被创建并且它们解析到正确的位置。

但是,当我协同设计的应用程序,我得到一个错误“出现在嵌入式框架的根目录下启封内容”

(为了验证我的过程中,我从另一个包复制框架下载一个验证codesigning和我可以成功地签署它,当我创建一个符号链接我的方式codesign开始给出错误,所以我假设问题是我的符号链接创建)

我试过其他方法结果相同,所以我必须缺少一些东西。有任何想法吗?

回答

1

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

0

版本1代码符号仅记录Resources目录中的文件并忽略其余部分。但版本2默认记录基本上所有的文件。所以我们必须签署每个框架包的版本和应用程序二进制文件。

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

根据苹果公司的文档,framework bundles没有'Contents'文件夹。相反,每个版本文件夹都会获得一个“资源”文件夹,其中包含Info.plist文件,并且该文件夹也在顶层框架文件夹中进行了符号链接。 Qt5框架在SDK构建之后布局不正确,因此这不仅仅是macdeployqt的问题,而是整个框架组装部分。

enter image description here

所以确认,有一个在您的应用程序包没有错误的布局。

如果你的Qt框架包(即QtCore.framework/QtCore.prl)有* .prl。 * .prl文件可能会给您带来麻烦,因为codesign只是在“未封装的内容呈现在嵌入式框架的根目录中”的情况下退出,而没有准确地告知发生了什么。剥离如果您有任何prl文件。

Info.plist必须具有正确的CFBundleExecutable字段。目前它没有。 Info.plist的调试版本将覆盖发行版本,并且它也恰好包含无效数据。特别是,CFBundleExecutable将包含_debug后缀库名称,它不应该。如果你有这个问题,那么修改不正确的info.plist。

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