将框架嵌入到Mac应用程序包中

9
我正在尝试将SDL和SDL_ttf框架添加到我的应用程序中,我已经按照通常的方式完成了这个过程:在“链接二进制文件与库”部分中添加它们,并添加了一个复制文件阶段,将它们复制到Frameworks目录。这确实创建了一个带有嵌入式框架的应用程序包。然而,当我运行应用程序时,出现以下错误:
dyld: Library not loaded: @rpath/SDL_ttf.framework/Versions/A/SDL_ttf Referenced from: /Users/matthew.davies/Library/Developer/Xcode/DerivedData/MacHub-ambfqujqxbxyiqapaoctvsucpdeu/Build/Products/Release/MacHub.app/Contents/MacOS/MacHub Reason: image not found
我不确定还需要做些什么,以便应用程序可以找到尽管嵌入在其包中的框架。
请问有什么建议吗?
1个回答

7
我在网页评论中发现了原因。我需要将“Runpath Search Paths”构建设置为“@loader_path/../Frameworks”,这样就可以找到框架。
为什么应用程序包的Frameworks目录中的框架不会自动搜索,这对我来说完全是一个谜?苹果公司你在听吗? :)

1
如果按照苹果的建议构建应用程序,它将首先查找@loader_path/../Frameworks/SDL.framework,因此您不需要在搜索路径中添加它。这是一种更安全的解决方案,因为它保证您的应用程序不会链接到错误版本的框架。如果您不按照他们的建议进行操作...那么您就必须学习各种低级细节。(您可能真正想要的是install_name_tool,但是在没有预先知道的情况下自己找到它的几率很小...) - abarnert
1
这里的真正问题是,苹果公司为框架非常简单的“入门”使用和所有工作的低级细节提供了良好的文档,但在两者之间却没有太多内容... - abarnert
在我的项目中,可执行文件同时获取了/Library/Frameworks和app Contents/Frameworks中的框架副本,并警告库选择将是未定义的(事实上,在这种配置下SDL_Mixer无法工作)。这个技巧也可以解决这个问题。 - Justin
只是在检查 - 我想在我的框架中链接第三方框架。目前,我需要将我的框架和我链接的每个框架都提供给我的客户。我正在寻找一种方法来将所有内容打包到我的框架中,以便我的客户不必链接到那些第三方框架。这是您在此问题中尝试做的吗?如果是这样,我想从您那里获取更多信息。愿意按照您的要求为您提问。 - Patricia
不,问题是在询问应用程序如何找到已经打包在应用程序中的那些框架。要进行打包,您必须在Xcode中链接它们并将它们添加到复制文件构建阶段中。但即使您的应用程序包含这些框架,它们也无法被找到。这个问题解决了这个问题。 - Cthutu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接