2010-03-18 116 views
6

當我從命令行運行iPhone應用程序時,將框架添加到我的項目時遇到一些困難。 我的最終目標是從自動構建過程中運行應用程序測試。dyld:Library not loaded - 當應用程序從命令行運行時

當我運行在Xcode我的應用程序:

我添加了一個「複製文件」構築階段我的目標和一切順利。 副本設置爲$(BUILT_PRODUCTS_DIR)爲「絕對路徑」

當我從終端運行我的應用程序(使用iphonesim項目)我得到這個錯誤:

dyld: Library not loaded: @rpath/OCMock.framework/Versions/A/OCMock 

UIKitApplication:indemnisation[0xb894][26380]  Referenced from: /Users/Admin/Library/Application Support/iPhone Simulator/User/Applications/CD5729B5-A674-49B2-91F6-AD398094B6F8/indemINT.app/indemINT 

什麼我不明白的是,複製構建階段只是將框架文件複製到與應用程序相同的目錄中。

當我從命令行運行應用程序時,框架文件已經在同一個目錄中。有誰知道它爲什麼不起作用?

我也嘗試添加OCMock.framework在以下目錄中(沒有成功):提前

/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library 

/Library/Frameworks 

/Users/Admin/Library/Application Support/iPhone Simulator/User/Applications/CD5729B5-A674-49B2-91F6-AD398094B6F8 

感謝, 文森特。

回答

2

iPhone不支持傳統的Mac OS X框架。儘管iPhone確實使用以「.framework」結尾的文件夾,但這些文件夾的結構與典型的Mac OS X框架不同。最值得注意的是,iPhone框架只允許使用靜態庫,而典型的Mac OS X框架則是動態加載的。該消息來自dyld表示您正在使用共享庫;但是,針對iPhone的應用程序可能只能靜態鏈接。

+1

請注意,如果你想這樣做的OSX,您的目標應設定爲«框架»,沒有子路徑,在«複製文件»建設階段,因此包含在框架中的應用(有它在與應用程序相同的文件夾不是解決方案)。 – Macmade 2010-03-18 17:51:08

8

我在Lion上的Xcode 4.2(4D199)中只有這個相同的確切錯誤。我將OCMock.framework文件夾拖放到我的項目中,然後選中「複製文件」複選框。我看到了上面的答案,並意識到我忽略了添加「複製文件」構建階段來移動框架。我添加了一個並在編譯文件構建階段之後立即將其拖動,並嘗試再次運行我的測試。直到我將「複製文件」階段中的目的地更改爲「產品目錄」後,我才能完成工作。使用「框架」或「共享框架」不起作用。

+0

謝謝你的指針! – 2013-04-02 16:01:10

0

OCMock是作爲一個框架分發的,iPhone不允許你構建自己的任意框架(在只有128MB內存且沒有交換的設備上有足夠的理由這樣做)。

我在網絡上很多地方看到的解決方案是將OCMock.framework放入/ Library/Frameworks或標準框架搜索路徑中的任何其他位置。這不是一個很好的解決方案:您的構建系統現在取決於您的特定機器的狀態。不好。

另一種選擇是將OCMock的源代碼添加到您的單元測試目標中。這可以工作,但是沒有必要,因爲你的測試永遠不會在iPhone上運行,所以爲什麼要爲ARM構建它們呢?爲iPhone模擬器構建的可執行文件(Mac OS X二進制文件)可以很好地鏈接到動態庫。我們可以利用這個優勢。

接下來的是什麼,我相信是獲得OCMock與iPhone項目工作的最佳方式:

首先,添加OCMock.framework到您的項目。確保將其添加到您的單元測試目標中,而不是您的應用程序。

接下來,將文件複製階段添加到您的單元測試的目標。設置它像這樣:

目標:絕對路徑 完整路徑:$(BUILT_PRODUCTS_DIR)

現在,拖OCMock.framework到新的文件複製階段將其添加到文件列表中被複制。

最後,拖動文件複製階段,這是我給它改名爲「複製OCMock」,在編譯源代碼和二進制鏈接與圖書館階段之間。

這就是它!運行(通過運行我的意思是構建)你的測試,一切都應該正常工作。

相關問題