在NSBundle中使用ConnectionKit框架

时间:2012-02-17 05:32:09

标签: objective-c cocoa nsbundle

更新

我已经花时间学习如何使用install_name_tool& otool要正确执行此操作,并在此处记录流程:Using Frameworks Within NSBundles


我想在我正在制作的NSBundle中使用Connection Kit框架。

为了让我的包成功加载框架,我已将dynamic library install name更改为使用@loader_path而不是@executable_path

Connection Kit dynamic library install name

在我的NSBundle中构建并包含框架之后,然后构建它,运行加载我的bundle的程序,我的bundle无法加载并产生以下输出:

Error loading MyBundle.rwplugin/Contents/MacOS/MyBundle:  dlopen(/Users/facelap/Library/Developer/Xcode/DerivedData/MyBundle-hiyhdkndcnuhspfqwcuyneqobeou/Build/Products/Debug/MyBundle.rwplugin/Contents/MacOS/MyBundle, 265): Library not loaded: @executable_path/../Frameworks/DAVKit.framework/Versions/A/DAVKit
  Referenced from: /Users/facelap/Library/Developer/Xcode/DerivedData/MyBundle-hiyhdkndcnuhspfqwcuyneqobeou/Build/Products/Debug/MyBundle.rwplugin/Contents/MacOS/../Frameworks/Connection.framework/Versions/A/Connection
  Reason: image not found

似乎Connection Kit本身使用了一个框架。

我也有这个框架的来源。我尝试将其dynamic library install name设置为@loader_path,但这导致了类似的输出(并且捆绑未能保留)。

对于在NSBundle中使用的框架内的框架dynamic library install name,一个理智的条目是什么?

2 个答案:

答案 0 :(得分:1)

查看崩溃日志。它说你捆绑无法加载DAVKit.framework这么简单的方法 - 它重建ConnectionKit框架,但不是嵌入DAVKit.xcodeproj插入所有DAVKit源。最简单的方法,但更正确 - 它的ConnectionKit和DAVKit框架的安装安装路径。 它的链接可以帮助你: embedding frameworks in loadable bundles

答案 1 :(得分:1)

您应该将您的捆绑包与DAVKit链接并将其包含在那里与您包含ConnectionKit的方式相同。这样可以避免出现多个深度的框架