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

背景:

我正在尝试使用带有cocoapods的Phonegap. 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警告:

[!] The target HelloWorld [Debug] overrides the OTHER_LDFLAGS build setting defined in `Pods/Pods.xcconfig’.

[!] The target HelloWorld [Debug - Release] overrides the OTHER_LDFLAGS build setting defined in `Pods/Pods.xcconfig’.

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

构建模拟器将获得与以前相同的错误(架构的未定义符号)

建立档案将得到
/Users/dan2552/projects/ReproducableProblems/OpenTokPhonegap/Classes/OpentokPlugin.h:9:9:找不到’Cordova / CDVPlugin.h’文件

我也尝试将$(inherited)放在OTHER_LDFLAGS中,它产生与删除它们相同的结果.

解决方法

您包含的框架没有模拟器(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中.

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...