【问题标题】:Including OSXFUSE framework in XCode project在 XCode 项目中包含 OSXFUSE 框架
【发布时间】:2013-05-02 09:17:59
【问题描述】:

我已经构建了一个基于 OS X FUSE 的应用程序(即我有自己的基于 OS X FUSE 的文件系统)。 安装 OSXFUSE 后,我当然可以包含 /Library/Frameworks 中的 OSXFUSE.framework。 但是,当我分发应用程序时,我不能指望用户已经安装了它,所以我尝试将框架包含在包中,如下所示:

  • 将框架从 /Library/Frameworks 拖到我的项目中
  • 创建了一个新的 Copy Files 构建阶段(使用目标框架)
  • 将框架添加到该复制构建阶段

但是,当我在没有安装 FUSE 的系统上运行它时,我得到一个错误:

dyld:库未加载:/Library/Frameworks/OSXFUSE.framework/Versions/A/OSXFUSE 引用自:/Users/me/Library/Developer/Xcode/DerivedData/

副本构建阶段不应该阻止这种情况吗?我在这里错过了什么?

【问题讨论】:

  • 首先要检查的当然是框架是否真的被复制到了应用程序包中。您是否尝试在应用程序包的查找器中使用“显示包内容”?或者,cd 从终端进入捆绑包。接下来,您可能仍然需要正确设置 dyld 链接路径(因为我接触到这个已经有一段时间了)。请参阅我的近距离投票评论。
  • 是的,框架实际上被复制到了应用程序包(到 Frameworks 文件夹)。我阅读了您的链接问题,并将@loader_path/../Frameworks 添加到Runpath Search Path,但这没有任何效果......
  • 引用的手册页实际上建议使用 @executable_path 如果要从应用程序包(而不是插件包)加载。我了解到您正在构建一个应用程序,而不是一个插件?
  • 我也试过@executable_path/../Frameworks,但这也不起作用。我也有点困惑。我过去使用过各种 3rd 方框架(如 sparkle、dropbox 等),将它们添加到复制文件构建阶段总是足够的。我从来不需要更改任何框架搜索路径。这个 OSXFUSE 框架有什么特别之处?

标签: xcode cocoa frameworks fuse


【解决方案1】:

我终于发现,我可以通过将 required 标志更改为 optional 来明确告诉 XCode 弱链接框架。

这可以在Project Overview > Target > Linked Frameworks and Libraries 中完成。每个框架旁边都有一个下拉菜单,您可以在其中选择optional

所以我的问题实际上是这个How do I weak link frameworks on Xcode 4?的副本

【讨论】:

    【解决方案2】:

    我相信 OSXFuse 框架需要相应的内核模块才能工作。这必须单独安装,因此您必须将安装程序包放在一起,首先安装内核模块和首选项窗格,然后安装您的应用程序。

    或者,您可以通知用户该模块需要单独安装,并提供下载链接或类似的东西。

    【讨论】:

    • 我认为动态库/框架的实际目的是,它们是弱链接的。我确实包含了安装程序,但是当我的应用程序甚至无法启动时,如何通知用户缺少 FUSE 库。我想做的是在运行时检查 FUSE 安装,如果不存在就要求安装它。我怎样才能做到这一点?我不想为我的应用安装安装程序,因为 FUSE 组件是可选的。
    • 是的,DLL 和它们的 OSX 等效项旨在启用运行时链接,但这并不意味着库的存在是可选的。至于您的具体问题,也许您可​​以添加一个单独的可执行文件来检查库是否存在,如果存在则启动应用程序,或者如果不存在则要求用户下载它。
    • 我明白了。感谢您的回答。我已经有一个单独的可执行文件来检查安装并提供下载。我只是希望我可以将所有内容放在一个应用程序中并在运行时检查......
    猜你喜欢
    • 1970-01-01
    • 2017-06-03
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 2010-12-26
    相关资源
    最近更新 更多