【发布时间】:2013-06-17 22:47:22
【问题描述】:
我的应用程序单元测试在模拟器中运行时构建和测试,但在构建和测试到设备时失败并出现链接器错误。
在我的应用程序目标上,我设置了以下构建设置:
DEPLOYMENT_POSTPROCESSING = NO
GCC_SYMBOLS_PRIVATE_EXTERN = NO
在我的单元测试中,我设置了以下构建设置:
BUNDLE_LOADER = $(BUILT_PRODUCTS_DIR)/<app name>.app/<app>
TEST_HOST = $(BUNDLE_LOADER)
链接器错误是:
Undefined symbols for architecture armv7s:
"_<An NSString * const>", referenced from:
-[UnitTestClassA setUp] in UnitTestClassA.o
"_<Another NSString * const>", referenced from:
-[UnitTestClassB helperMethod:] in UnitTestClassB.o
-[UnitTestClassB anotherHelperMethod:] in UnitTestClassB.o
ld: symbol(s) not found for architecture armv7s
clang: error: linker command failed with exit code 1 (use -v to see invocation)
...我在 Xcode 的首选项中打开了“构建错误后继续”,但我没有收到大量抱怨 NSString * const 的链接器错误。如果我做错了什么,那么由于我在整个生产代码中使用字符串常量,因此预计链接错误会比我得到的少数链接错误更多。
我正在创建这样的字符串常量:
.h 文件...
extern NSString * const ReallyGoodString;
.m 文件...
NSString * const ReallyGoodString = @"This string is great!";
....m 文件是生产代码,是我的应用程序目标的一部分,因此我不必将它链接到单元测试包中。
那么,这里发生了什么?为什么这在模拟器上运行得很好,而不是在设备上?
我已经发布了一个sample project to Github 来说明问题。您可以在示例项目中看到这个问题是不一致的:有些符号链接得很好,有些则没有。
【问题讨论】:
-
你有没有想过这个问题?我有同样的问题。更奇怪的是,它以前可以正常工作,链接器只抱怨头文件中的一个字符串常量,从中可以找到其他符号。
-
@JonGrall 还没弄明白
标签: ios xcode unit-testing