【问题标题】:UIColor Category Linker ErrorsUIColor 类别链接器错误
【发布时间】:2013-05-01 18:55:28
【问题描述】:

今天早些时候,我尝试将单元测试添加到我正在创建的静态框架的 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 类的一部分。通过更多检查,我还注意到在我的单元测试框架的文件夹中, UIKit.framework 和 Foundation.framework 都是红色的。我已经尝试重新导入它们并进行构建,但这也不能解决该问题。

有趣的是,只要不运行相关的测试,我的静态框架仍然可以构建和运行良好。当我注释掉这个函数时(以及每次我使用它),单元测试构建没有问题。我的假设是否正确,即缺少 UIKit.framework 和 Foundation.framework 可能导致链接器找不到 NSColor 属性?有没有人有任何其他建议可以解释为什么这些属性会导致这些问题,或者我可以做些什么来解决这些问题?

任何帮助将不胜感激。感谢您的帮助。

【问题讨论】:

  • 您是否将CoreGraphics.framework 链接到您的项目?
  • 不,我不在静态框架或单元测试中使用 CoreGraphics.framework。
  • 是的,你做到了。两个CGColor... 函数来自CoreGraphics。您需要将CoreGraphics.framework 链接到您的项目。这将修复链接器错误。
  • 我不知道为什么这之前有效,但是将 CoreGraphics.framework 添加到我的 StaticFramework 目标和单元测试目标解决了这个问题。您能否提交解决方案作为答案,以便我接受?

标签: ios unit-testing linker-errors uicolor


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2023-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 2011-03-16
    相关资源
    最近更新 更多