設置:
的Xcode 4.5.2(4G2008a)
OS X 10.7.5iOS UnitTests:無法鏈接到我的應用程序目標中的符號。怎麼了?
我有一個正常的iOS Application
目標的Xcode項目。我試圖添加ApplicationTests
單元測試包(不是LogicTests
包)作爲described by Apple's documentation。
我仔細地遵循了文檔中提供的步驟,並重新檢查了幾次。但是,我無法構建ApplicationTests目標...嘗試鏈接到我的Appliation類時,發生鏈接器錯誤時失敗。看起來好像設置構建設置的ApplicationTests
目標不起作用。但是AFAICT,我正確地設置了這一點,正如Apple的文檔所述。
我的步驟TO攝製:
- 按照Apple's documentation for setting up an ApplicationTests bundle。
- 在
ApplicationTests
目標中編寫單元測試方法,該目標從Application
目標(例如MyAppClass
)導入和練習類。 - 在運行目的地彈出
Product
>Test
預期選擇的方案彈出的應用目標和iPhone 6.0模擬器:
模擬器應啓動和我ApplicationTests
應該運行。
實際:
的ApplicationTests
目標構建失敗,以下錯誤:
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_MyAppClass", referenced from:
objc-class-ref in ApplicationTests.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
如果我在單元測試中刪除對MyAppClass
引用文件,其ApplicationTests
束將建成併成功運行。
同樣,我似乎沒有在我的ApplicationTests
目標中正確設置Bundle Loader
構建設置,但我已重新檢查,並且我似乎正確地遵循了Apple的說明。
如果我的ApplicationTests
目標無法鏈接到我的Application
目標中的符號,我該怎麼做?
更新:我也試圖與Application
和ApplicationTests
目標從頭開始創建新的虛擬項目。在虛擬項目中,我向Application
目標添加了一個MyAppClass
類,並且能夠鏈接到該目標,併成功運行在虛擬ApplicationTests
目標中使用MyAppClass
的單元測試。
因此,我的虛擬項目中的應用測試工作。但他們不適合我的真實項目。我將虛擬和實際項目中的目標進行了比較,但無法找到明顯的差異,這隻會導致我的真實項目出現此問題。
我的真實項目已經很老了(但也非常複雜,所以很難重新開始)。我想知道該項目的老舊程度是否阻止了這個相對較新的功能的運作?
它在我看來仍然像我在我的真實項目的目標之一中有一個構建設置問題。但我找不到它。
MyAppClass是否也編譯爲ApplicationTests目標? – Moxy
@Moxy,實際上,沒有。未選擇MyAppClass作爲要編譯到ApplicationTests目標中的文件。但是,如Apple的文檔所述,創建「應用程序測試」目標(而不是「邏輯測試」目標)時不一定要這樣做。 (http://developer.apple.com/library/ios/#documentation/DeveloperTools/Conceptual/UnitTesting/02-Setting_Up_Unit_Tests_in_a_Project/setting_up.html#//apple_ref/doc/uid/TP40002143-CH3-SW1) –
您可以驗證在構建日誌中,當您「爲測試構建」時,-bundle_loader標誌正確傳遞?您是否將應用程序目標添加爲測試目標的依賴項? –