2012-02-17 48 views
3

更新使用ConnectionKit框架内的一个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的框架,然后构建,运行加载我的包程序后,我的包无法加载,并产生下列输出:

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会有什么合理的输入?

回答

1

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

+0

谢谢,我可能会尝试。你能澄清一下你的意思吗?它的ConnectionKit和DAVKit的设置安装路径...?我不明白你在那里想说什么。 – 2012-02-23 23:46:16

+0

建设DAVKit wihtin ConnectionKit工作,感谢您的提示:) – 2012-02-25 11:12:40

1

你应该把你的软件包与DAVKit连接起来,并把它包括在里面。就像你包括ConnectionKit一样。这避免了多个深度的框架出货

+0

理想情况下,我不想这样做有两个原因。 #1是,这会使框架更新变得更加困难,即不仅仅是在框架上进行“git pull”,然后构建和复制它。 #2简单地将其他框架复制到我的项目中将无法正常工作,因为我需要更正框架的“安装路径”。我在这里写了如何做到这一点:http://pagesofinterest.net/blog/2012/05/using-frameworks-within-nsbundles/ – 2012-05-18 10:22:50

+0

啊,所以你没有ConnectionKit作为子模块呢​​? – 2012-05-18 13:45:32

+0

不,但说实话,直到我阅读你的评论,这并没有发生在我身上!我一直在使用它作为外部框架。现在运行良好,我学会了如何正确使用'install_name_tool'。 – 2012-05-19 09:40:07