未定义的架构符号,可应对原生的cocoapod问题

时间:2018-10-02 22:54:27

标签: reactjs react-native cocoapods

我有一个现有的react native应用程序,我想对带有PodSpecs的新依赖项使用react-native链接。但是,这引起了一个问题,因为他们每个人都对React有所依赖。

我在Podfile中添加了以下内容:

pod 'React', :path => '../node_modules/react-native'

# Explicitly include Yoga
pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga'

这解决了其他模块的PodSpecs中的依赖性问题,但是引入了以下新错误:

Undefined symbols for architecture arm64:
  "_OBJC_CLASS_$_RCTCxxBridge", referenced from:
     objc-class-ref in libReact.a(RCTBridge.o)
ld: symbol(s) not found for architecture arm64

这个错误似乎是由于我没有列出React的任何子规范(特别是“ CxxBridge”)。当我确实将CxxBridge添加到Podfile时,由于“ CxxBridge”取决于Folly,我被迫添加以下依赖项:

# Third party deps podspec link
pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec'
pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'

添加这些依赖项没有问题,但是它们的来源已经存在于node_modules/react-native/third-party中。理想情况下,我想在Podfile中指定路径,这样我就不必提交大量的样板代码,但由于源文件没有PodSpec,所以我无法这样做。

有什么方法可以将CxxBridge链接到项目中,而不必添加node_modules中已经存在的额外代码?其他人如何在第三方依赖项中(带有react-native链接)使用PodSpecs?希望提供帮助和/或Podfile示例

react-native: 0.57.1
xcode: 9.4.1

1 个答案:

答案 0 :(得分:2)

发布答案,以防其他人遇到类似问题。事实证明,链接的库是错误的,因为某些库可能已经从node_modules引用了React项目中的库,而有些库可能已经从React Pod引用了库。

修复步骤:

  • 删除指向React的链接以及React项目中包含的任何子规范。
  • 删除所有以前生成的Pod文件
  • 将安装后脚本添加到Podfile
  • 运行pod install
  • 链接所有必要的React依赖项

安装后脚本:

post_install do |installer|
    installer.pods_project.targets.each do |target|
        if target.name == "React"
            target.remove_from_project
        end
    end
end