2012-02-17 57 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