1

当我尝试在通过 phonegap 生成的 ios 项目中添加测试目标时,出现链接器错误。似乎无法找到我项目中的cordova项目(我认为),因此在我运行测试时它会引发错误。

我花了一段时间搜索,没有人有这个错误,甚至可以为cordova项目创建本机单元测试吗?- 只是为了澄清我正在为 cookie 使用一些本机代码并希望对其进行单元测试。

错误是:

Undefined symbols for architecture i386:
"_CGRectZero", referenced from:
  +[CDVUserAgentUtil originalUserAgent] in libCordova.a(CDVUserAgentUtil.o)
"_OBJC_CLASS_$_ALAssetsLibrary", referenced from:
  objc-class-ref in libCordova.a(CDVURLProtocol.o)
"_OBJC_CLASS_$_CLLocation", referenced from:
  l_OBJC_$_CATEGORY_CLLocation_$_JSONMethods in libCordova.a(CDVShared.o)
"_UTTypeCopyPreferredTagWithClass", referenced from:
  ___30-[CDVURLProtocol startLoading]_block_invoke in libCordova.a(CDVURLProtocol.o)
"_kUTTagClassMIMEType", referenced from:
  ___30-[CDVURLProtocol startLoading]_block_invoke in libCordova.a(CDVURLProtocol.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

任何帮助都是极好的!!!!谢谢。

4

1 回答 1

0

基本上,Cordova 依赖于 Apple 框架(在运行时链接)。这些框架没有打包在 phonegap 内的 Cordova 项目中。

它会起作用,您需要做的就是将相关的 Apple 框架添加到您的项目中。例如,未定义的符号之一是“_OBJC_CLASS_$_ALAssetsLibrary”,这是 AssetsLibrary.framework 中的一个对象。因此,将此框架添加到您的项目中(并确保它链接到您的应用程序目标)。

对于这些未定义的符号中的每一个,只需 Google/Bing 似乎相关的符号部分(通常是初始下划线之后或 _OBJC_CLASS_$_ 之后的部分)并查看该符号属于哪个框架,然后将该框架添加到您的项目。

请注意以下示例中 IOBluetooth.framework 和 Cocoa.framework 如何与 MyTestApp 链接:

在此处输入图像描述

于 2013-08-24T01:11:27.070 回答