【问题标题】:Creating symlinks in OSX frameworks inside app bundle在应用程序包内的 OSX 框架中创建符号链接
【发布时间】:2015-04-15 21:01:31
【问题描述】:

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

我调用“ln -s path_origin path_target_link”,显然它有效,链接被创建并且它们解析到正确的位置。

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

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

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

【问题讨论】:

    标签: macos symlink codesign


    【解决方案1】:

    对于这种情况,它对任何人都有用。就我而言,问题是我正在创建带有绝对路径的链接。显然它们应该是相对的:您移动到链接所在的目录并创建相对于当前位置的链接。

    【讨论】:

      【解决方案2】:

      版本 1 代码签名仅记录了 Resources 目录中的文件,而忽略了其余部分。但默认情况下,版本 2 几乎记录了所有文件。所以我们必须签署每个框架包的版本和应用程序二进制文件。

      确保您的框架包结构符合苹果的要求。

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

      所以请确认,您的 app bundle 中没有错误的布局。

      如果您的 Qt 框架包中有 *.prl(即 QtCore.framework/QtCore.prl)。 *.prl 文件可能会给您带来麻烦,因为 codesign 只是通过“嵌入式框架的根目录中存在未密封的内容”来解决问题,而没有确切说明发生了什么。如果您有任何 prl 文件,请剥离。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-08-17
        • 2021-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-30
        • 1970-01-01
        相关资源
        最近更新 更多