Xcode 6 测试目标:Unidentified Symbols for Architecture

Posted

技术标签:

【中文标题】Xcode 6 测试目标:Unidentified Symbols for Architecture【英文标题】:Xcode 6 test target: Unidentified Symbols for Architecture 【发布时间】:2015-01-13 17:58:16 【问题描述】:

我正在运行 Xcode 6.1.1。 我使用以下方法设置了一个新的测试目标:File > New > Target

使用空模板运行测试可以正常工作。我导入了一个标头ServerController,并尝试创建一个实例:

#import <UIKit/UIKit.h>
#import <XCTest/XCTest.h>
#import "ServerController.h"

@interface Tixie_Tests : XCTestCase

@end

@implementation Tixie_Tests

- (void)setUp 
    [super setUp];
    // Put setup code here. This method is called before the invocation of each test method in the class.
    ServerController * s = [[ServerController alloc] init];


- (void)tearDown 
    // Put teardown code here. This method is called after the invocation of each test method in the class.
    [super tearDown];


- (void)testExample 
    // This is an example of a functional test case.
    XCTAssert(YES, @"Pass");


- (void)testPerformanceExample 
    // This is an example of a performance test case.
    [self measureBlock:^
        // Put the code you want to measure the time of here.
    ];


@end

现在运行测试给了我这个:

Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_ServerController", referenced from:
      objc-class-ref in <omitted>.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

【问题讨论】:

您是否通过选中属性检查器面板中的目标复选框将 ServerController.m 文件添加到新目标? 不,我知道这行得通,但我读到它会导致其他问题,并且它不应该因为它被设置为构建我的主要目标而无论如何都行得通吗? 【参考方案1】:

对于在您的应用程序中寻找类的链接器错误...在您的应用程序目标中将“默认隐藏的符号”构建设置设置为“否”。这使您的所有应用程序类自动可用于您的测试目标...... 所以,这意味着:

Project Navigator > 选择您的项目

Targets > 选择你的应用(不是测试)

构建设置 > 搜索“默认隐藏的符号”

“默认隐藏的符号”> 将其从“YES”更改为“NO”

查看来源:answer

【讨论】:

以上是关于Xcode 6 测试目标:Unidentified Symbols for Architecture的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins 和 Xcode5 单元测试目标 - 没有测试输出?

使用 Xcode 6 构建 iOS 9 功能

Xcode 4:为啥我不能将头文件添加到单元测试目标?

Xcode 5:一个方案中的多个测试目标:“模拟器已在使用”

从 XCode UI 测试目标访问项目文件

如何在 Xcode 7 中动态更改单元测试的目标?