7

背景:

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

我已经在 Github 上推送了一个带有我的问题的复制空项目: https ://github.com/Dan2552/phonegap-reproducable-issue

build_ios您可以在 repo 的根目录中的脚本中看到我在制作一个全新的全新 Phonegap 应用程序后所做的步骤。但我也推送了生成的项目文件(平台/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]覆盖OTHER_LDFLAGS`Pods/Pods.xcconfig' 中定义的构建设置。

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

因此我尝试OTHER_LDFLAGS完全删除(Xcode中的'Other Linker Flags')条目。这可以在 iOS 设备上成功编译,但不能在模拟器上编译,项目也不会在存档上构建。

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

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

我也尝试过放入$(inherited)whichOTHER_LDFLAGS产生与删除它们相同的结果。

4

3 回答 3

3

您包含的框架没有 Simulator (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。

于 2014-08-18T08:34:33.837 回答
1

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

于 2014-08-18T02:16:31.697 回答
0

转到您的 taget 构建设置 -> 其他链接器标志 -> 双击。将 $(inherited) 添加到新行。. 试试这个

于 2014-09-28T13:09:40.877 回答