今天早些時候,我嘗試將單元測試添加到我的xcode項目中,以創建一個靜態框架。在將單元測試目標添加到我的項目後,我能夠成功運行單元測試模板並讓測試捕獲默認斷言。然後,在將我想測試的文件導入到新的SenTestCase子類中之後,我嘗試運行測試,但由於鏈接器錯誤,我的UIColor類別由於測試而失敗。鏈接器錯誤的文本如下:UIColor類別鏈接器錯誤
Undefined symbols for architecture i386:
"_CGColorGetComponents", referenced from:
-[UIColor(ColorExtension) hexValue] in StaticFramework(StaticFramework)
"_CGColorGetNumberOfComponents", referenced from:
-[UIColor(ColorExtension) hexValue] in StaticFramework(StaticFramework)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
接下來,我發現這兩個引用在我的項目中。都住在我的類別下的作用下:
- (NSString *)hexValue
{
UIColor *color = self;
const size_t totalComponents = CGColorGetNumberOfComponents(color.CGColor);
const CGFloat * components = CGColorGetComponents(color.CGColor);
return [NSString stringWithFormat:@"#%02X%02X%02X",
(int)(255 * components[MIN(0,totalComponents-2)]),
(int)(255 * components[MIN(1,totalComponents-2)]),
(int)(255 * components[MIN(2,totalComponents-2)])];
}
如果我沒有記錯,這兩個都是NSColor類的一部分。隨着更多的檢查,我還注意到,在我的單元測試框架的文件夾中,UIKit.framework & Foundation.framework是紅色的。我試圖重新導入它們並構建,但這並不能解決這個問題。
有趣的是,只要沒有運行關聯的Test,我的靜態框架仍然可以正常構建和運行。當我評論這個函數(每次使用它)時,單元測試都沒有問題。假設缺失的UIKit.framework & Foundation.framework可能導致鏈接程序未找到NSColor屬性,我會正確嗎?有沒有人有任何額外的建議,可以解釋爲什麼這些屬性導致這些問題或我可以做些什麼來解決它們?
任何幫助將不勝感激。感謝您的幫助。
您是否將'CoreGraphics.framework'鏈接到您的項目? – rmaddy 2013-05-01 18:57:32
不,我沒有在我的靜態框架或我的單元測試中使用CoreGraphics.framework。 – Krejko 2013-05-01 19:00:59
是的,你做到了。這兩個'CGColor ...'函數來自CoreGraphics。您需要將'CoreGraphics.framework'鏈接到您的項目。這將解決鏈接器錯誤。 – rmaddy 2013-05-01 19:02:39