React Native XCode项目产品存档失败,具有架构arm64的重复符号

XCode日志

奇怪的是,我似乎无法让Archive在XCode中工作,但如果我不尝试存档而只是构建一个发行版本,那么构建成功而没有重复符号上的错误。 该项目也适用于设备。

我已经搜索了这个主题并尝试禁用可测试性,并将项目设置中的“No Common Blocks”设置为NO,但到目前为止还没有运气。

该项目是一个基于React Native 0.40的项目,同时安装了CocoaPods。 PodFile就是这个

# You Podfile should look similar to this file. React Native currently does not support use_frameworks! source 'https://github.com/CocoaPods/Specs.git' platform :ios, '8.0' # Change 'AirMapsExplorer' to match the target in your Xcode project. target 'StreetSmart' do pod 'React', path: '../node_modules/react-native', :subspecs => [ 'Core', 'RCTActionSheet', 'RCTAnimation', 'RCTGeolocation', 'RCTImage', 'RCTLinkingIOS', 'RCTNetwork', 'RCTSettings', 'RCTText', 'RCTVibration', 'RCTWebSocket' ] pod 'GoogleMaps' # <~~ remove this line if you do not want to support GoogleMaps on iOS # when not using frameworks we can do this instead of including the source files in our project (1/4): # pod 'react-native-maps', path: '../../' # pod 'react-native-google-maps', path: '../../' # <~~ if you need GoogleMaps support on iOS end 

XCode版本是8.2.1,项目文件是通过.xcworkspace打开的,因为安装了pod。

真的很感激任何帮助或对此的见解,被困在这几个小时。

所以我对此做了更多研究,解决方法实际上要简单得多。 或者至少在我的情况下。 问题是当你在podfile中声明React时,Pods xcodeproject会在pod install过程中获得一个React目标。 在Pods项目中具有此目标是导致存档时出错的原因。 所以解决方法是删除目标。

在此处输入图像描述

在xCode中删除目标的问题是,它实际上编辑了Pods文件夹中不在版本控制中的project.pbxproj文件。 因此,一旦您执行此操作,构建将进行存档,如果您从手动删除它的计算机以外的任何位置进行部署,它仍将失败。 所以解决方案是将此post install命令添加到podfile的底部:

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

这只是循环遍历要安装的所有pod,并删除React的目标。 这种方式构建项目的任何地方也将删除目标。 现在,当您构建归档时,它不会失败。

最后在这里找到另一个反应原生项目的相关问题后解决了问题。

答案是Xcode项目中有两个React Native副本,一个来自CocoaPods,另一个来自子项目。 只需删除已经在Xcode中的Libraries下的Podfile中声明的所有模块,并在干净并重新尝试后错误消失。

这个问题的有趣之处在于Debug和Release中的所有构建都有效但在尝试归档项目以进行分发时它会失败。

[2017年5月2日更新]

当您使用react-native run-ios/android运行代码时,上面描述的解决方案可能会导致调试时错误,尽管它允许项目成功存档。

另一种方法是 Podfile声明而不是Libraries文件夹中删除LibrariesPodfile中存在的那些重复模块。 当然,运行相关的pod命令,清理项目等。

这样做可以使我的代码存档,也可以在没有调试时错误的情况下运行

我通过以下方式解决了这个问题:(参考: https : //github.com/react-community/react-native-maps/issues/718 )

  1. 打开Xcode> Pods> Targets支持文件> Pods- { TARGET-NAME }找到“OTHER_LDFLAGS”并在这两个文件删除 -ObjC:

Pods-{TARGET-NAME}.release.xcconfig e Pods-{TARGET-NAME}.debug.xcconfig

  1. 转到项目主目标 >构建设置>其他链接器标志:确保在我删除ios中的构建/构建文件夹的值中没有-ObjC ,并再次运行项目。

它现在有效。

上面链接的副作用:app可能会变大,因为其中可能存在重复的符号。

希望它可以帮到你。