Xcode 在Mac应用程序包中嵌入框架

Xcode 在Mac应用程序包中嵌入框架,xcode,macos,frameworks,bundle,Xcode,Macos,Frameworks,Bundle,我正在尝试将SDL和SDL_ttf框架添加到我的应用程序中,我使用了通常的方法:在“将二进制文件与库链接”部分添加它们,并添加了一个复制文件阶段,将它们复制到frameworks目录中。这确实创建了一个带有嵌入式框架的应用程序包。但是,当我运行应用程序时,会出现以下错误: dyld:未加载库:@rpath/SDL_ttf.framework/Versions/A/SDL_ttf 引用自: /Users/matthew.davies/Library/Developer/Xcode/DerivedD

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

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

我不知道还需要做些什么才能让应用程序找到框架,尽管它已经嵌入到包中


有什么想法吗?

我在一个网页上的评论中找到了原因。我需要将“运行路径搜索路径”构建设置设置为“@loader\u path/。/Frameworks”,然后框架就被找到了


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

如果你按照苹果推荐的方式构建东西,它会首先查找
@loader\u path/./Frameworks/SDL.framework
,因此你不会在搜索路径上需要它。这是一个更安全的解决方案,因为它保证你的应用程序不会最终链接到错误版本的框架。如果你没有按照他们推荐的方式做事……那么,你必须学习各种低级细节。(你可能真正想要的是
install_name_tool
,但你自己在不事先知道的情况下发现这一点的可能性很小……)这里真正的问题是,苹果公司有很好的文档,用于非常简单的“入门”框架使用,以及它如何工作的低级细节,但在我的项目中,可执行文件同时获取了框架的/Library/Frameworks和app Contents/Frameworks副本,并警告库选择将是未定义的(事实上,SDL_Mixer在此配置中不起作用)。这个技巧也解决了这个问题。只是检查一下-我想在我的框架中链接第三方框架。目前,我需要向我的客户提供我的框架以及我在框架中链接的每个框架。我正在寻找一种方法,将其打包到我的框架中,这样我的客户就不必链接到那些第三方框架。这就是你在这个问题上试图做的吗?如果是这样,我想从你那里得到更多的信息。愿意应您的请求为您提问。不,问题是应用程序如何找到已打包在应用程序中的框架。要打包,您必须在Xcode中链接它们,并在复制文件构建阶段添加它们。但是,即使你的应用包中有框架,也没有找到。这个问题解决了这个问题。