iOS编译库/框架链接器标记问题是设备编译而不是模拟器

时间:2013-10-25 11:02:35

标签: ios xcode cordova build cocoapods

背景:

我正在尝试使用带有cocoapods的Phonegap。 Phonegap已经存在从命令行编译的问题,因此我只是将Xcode与生成的项目文件一起使用(并且在使用cocoapods时无论如何我都必须这样做。)

我用我的问题向Github推送了一个复制的空项目: https://github.com/Dan2552/phonegap-reproducable-issue

您可以在repo根目录的build_ios脚本中创建一个简单的全新Phonegap应用程序后看到我所做的步骤。但是我也推高了生成的项目文件(platforms / ios),所以没有Phonegap的人应该能够打开项目。

问题:

编译时我遇到了一个奇怪的问题。可能与预先捆绑的Cordova库和cocoapods有关。

在使用Phonegap生成项目并添加cocoapods后,在没有做任何事情的情况下构建时,我收到以下错误:

Undefined symbols for architecture i386:
"_OBJC_CLASS_$_OTPublisher", referenced from:
  objc-class-ref in libPods.a(OpenTokPlugin.o)
"_OBJC_CLASS_$_OTSession", referenced from:
  objc-class-ref in libPods.a(OpenTokPlugin.o)
"_OBJC_CLASS_$_OTSubscriber", referenced from:
  objc-class-ref in libPods.a(OpenTokPlugin.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Cocoapods警告说:

  

[!]目标HelloWorld [Debug]会覆盖`Pods / Pods.xcconfig'中定义的OTHER_LDFLAGS构建设置。

     

[!]目标HelloWorld [Debug - Release]会覆盖`Pods / Pods.xcconfig'中定义的OTHER_LDFLAGS构建设置。

因此我尝试完全删除OTHER_LDFLAGS(Xcode中的“其他链接标志”)条目。 这可以成功编译iOS设备,但不能在模拟器上编译,项目也不会在存档上构建。

为模拟器构建将获得与之前相同的错误(Undefined symbols for architecture

建立档案馆将获得 /Users/dan2552/projects/ReproducableProblems/OpenTokPhonegap/Classes/OpentokPlugin.h:9:9: 'Cordova/CDVPlugin.h' file not found

我还尝试将$(inherited)放入OTHER_LDFLAGS,这会产生与删除它们相同的结果。

3 个答案:

答案 0 :(得分:3)

您所包含的框架没有模拟器(i386)切片:

$ xcrun -sdk iphoneos lipo -info Pods/OpenTokSDK-WebRTC/Opentok.framework/Versions/A/Opentok 
Architectures in the fat file: Pods/OpenTokSDK-WebRTC/Opentok.framework/Versions/A/Opentok are: armv7 armv7s

因此,它的类不能与模拟器链接。


此外,如果您计划使用CocoaPods,您可以完全删除Cordova项目和静态库,并将pod 'Cordova'添加到您的Podfile中。

答案 1 :(得分:1)

我在尝试运行Xcode项目之前遇到过类似的问题,而不是XCWorkspace。您遇到的问题听起来像是因为您没有运行工作区。

答案 2 :(得分:0)

转到目标构建设置 - >其他链接器标志 - >双击。将$(继承)添加到新行。 。试试这个