UIColor类别链接器错误

时间:2013-05-01 18:55:29

标签: ios unit-testing linker-errors uicolor

今天早些时候,我尝试将单元测试添加到我的xcode项目中,以获得我正在创建的静态框架。将单元测试目标添加到我的项目后,我能够成功运行单元测试模板并让测试捕获默认断言。然后,在将我想要测试的文件导入到我的新SenTestCase子类之后,我尝试运行测试,但由于链接器错误,我的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类的一部分。通过更多的检查,我还注意到在我的Unit Test的框架文件夹中,UIKit.framework& Foundation.framework是红色的。我曾尝试重新导入它们并进行构建,但这也无法解决这个问题。

有趣的是,只要相关的Test也没有运行,我的静态框架仍然会构建并运行良好。当我评论这个功能时(每次我使用它),单元测试构建没有问题。我假设失踪的UIKit.framework& amp; Foundation.framework可能导致链接器找不到NSColor属性?有没有人有任何其他建议可以解释为什么这些属性导致这些问题或我可以做些什么来解决它们?

非常感谢任何帮助。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

链接器错误表明您正在使用CoreGraphics函数,但您没有链接CoreGraphics框架。

更新您的项目/目标,以便链接CoreGraphics.framework并解决链接器问题。