【发布时间】:2013-11-04 11:10:42
【问题描述】:
背景:
我正在尝试将 Phonegap 与 cocoapods 一起使用。 Phonegap 已经有从命令行编译的问题,所以我只是将 Xcode 与生成的项目文件一起使用(假设我在使用 cocoapods 时无论如何都必须这样做)。
我已经在 Github 上推送了一个复制的空项目,其中包含我的问题: https://github.com/Dan2552/phonegap-reproducable-issue
您可以在 repo 的根目录中的 build_ios 脚本中看到我在制作一个全新的全新 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]覆盖在 `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,这与删除它们产生的结果相同。
【问题讨论】:
-
想知道为什么在 ARM 构建中出现 i.386 错误?您是否正在尝试链接 Intel i.386 库而不是 ARM ?与 Android Intel Atom 支持或 Android 模拟器有关吗?不确定,因为我没有在愤怒中使用过 PhoneGap。
-
Android 无论如何都不应该影响它,如果你查看platforms/ios 目录,你会看到你得到了一个普通的(ish)Xcode 项目,但我同意这很奇怪——也许它编译了 i386对于模拟器(因为它不是模拟器)?
标签: ios xcode cordova build cocoapods