【问题标题】:Embedding frameworks in a Mac App Bundle在 Mac App Bundle 中嵌入框架
【发布时间】:2012-09-12 00:41:31
【问题描述】:

我正在尝试将 SDL 和 SDL_ttf 框架添加到我的应用程序中,我已经按照通常的方式完成了:将它们添加到“将二进制文件与库链接”部分中,并添加了一个复制文件阶段,将它们复制到框架目录.这确实创建了一个带有嵌入式框架的应用程序包。但是,当我运行应用程序时,我收到此错误:

dyld:库未加载:@rpath/SDL_ttf.framework/Versions/A/SDL_ttf 参考自: /Users/matthew.davies/Library/Developer/Xcode/DerivedData/MacHub-ambfqujqxbxyiqapaoctvsucpdeu/Build/Products/Release/MacHub.app/Contents/MacOS/MacHub 原因:找不到图片

我不知道还有什么办法可以让应用找到框架,尽管它已经嵌入到它的包中。

有什么想法吗?

【问题讨论】:

    标签: xcode macos frameworks bundle


    【解决方案1】:

    我在网页上的评论中发现了原因。我需要将“运行路径搜索路径”构建设置设置为“@loader_path/../Frameworks”并找到框架。

    为什么没有在应用程序包的 Frameworks 目录中自动搜索框架对我来说完全是个谜?你在听苹果吗? :)

    【讨论】:

    • 如果您按照 Apple 推荐的方式构建东西,它最终会首先寻找 @loader_path/../Frameworks/SDL.framework,因此您在搜索路径中不需要它。这是一个更安全的解决方案,因为它保证您的应用程序最终不会链接到错误版本的框架。如果你不按照他们推荐的方式做事……好吧,那么你必须学习各种底层细节。 (你可能真正想要的是install_name_tool,但你在事先不知道的情况下自己发现的可能性很小......)
    • 这里真正的问题是,Apple 有很好的文档,用于非常简单的“开始”使用框架,以及所有工作原理的低级细节,但在两者之间没有太多......
    • 在我的项目中,可执行文件同时获取框架的 /Library/Frameworks 和应用程序 Contents/Frameworks 副本,并警告库选择未定义(事实上,SDL_Mixer 没有不能在此配置中工作)。这个技巧也解决了这个问题。
    • 只是检查 - 我想在我的框架中链接第 3 方框架。目前我需要给我的客户我的框架和我在我的框架中链接的每个框架。我正在寻找一种方法将其全部打包到我的框架中,这样我的客户就不必链接到那些第 3 方框架。这就是你在这个问题上试图做的吗?如果是这样,我想从你那里得到更多信息。愿意应您的要求为您提出问题。
    • 不,问题是应用程序如何找到那些已经打包在应用程序中的框架。要打包,您必须在 Xcode 中链接它们并在复制文件构建阶段添加它们。但是即使您的应用程序包具有框架,也找不到它们。这个问题解决了这个问题。
    猜你喜欢
    • 2020-06-07
    • 2011-10-20
    • 2014-12-04
    • 2016-07-25
    • 2019-09-30
    • 1970-01-01
    • 2015-03-08
    • 2011-06-05
    • 1970-01-01
    相关资源
    最近更新 更多