Ios React本机XCode项目产品存档失败,架构arm64的符号重复
奇怪的是,我似乎无法让归档在XCode中工作,但是如果我不尝试归档,而只是构建一个发布版本,那么构建成功,并且没有重复符号上的错误。该项目也正确地构建在设备上 我已经搜索了这个主题,并尝试禁用可测试性,并将项目设置中的“No Common Block”设置为No,但到目前为止运气不佳 该项目是一个基于React Native 0.40的项目,还安装了CocoaPods。这是什么文件Ios React本机XCode项目产品存档失败,架构arm64的符号重复,ios,xcode,react-native,cocoapods,Ios,Xcode,React Native,Cocoapods,奇怪的是,我似乎无法让归档在XCode中工作,但是如果我不尝试归档,而只是构建一个发布版本,那么构建成功,并且没有重复符号上的错误。该项目也正确地构建在设备上 我已经搜索了这个主题,并尝试禁用可测试性,并将项目设置中的“No Common Block”设置为No,但到目前为止运气不佳 该项目是一个基于React Native 0.40的项目,还安装了CocoaPods。这是什么文件 # You Podfile should look similar to this file. React Nat
# 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
#您的文件应该与此文件类似。React Native当前不支持使用\u框架!
来源'https://github.com/CocoaPods/Specs.git'
平台:ios,“8.0”
#更改“AirMapsExplorer”以匹配Xcode项目中的目标。
目标是“街机智能”吗
pod“React”,路径:“../node_modules/React native”,:subsecs=>[
“核心”,
“RCTActionSheet”,
“RCTAnimation”,
“RCTGeolocation”,
“RCTImage”,
“RCTLinkingIOS”,
“RCT网络”,
“RCT设置”,
“RCTText”,
“RCTVibration”,
“RCTWebSocket”
]
pod“GoogleMaps”#在另一个react本地项目中找到相关问题后,最终解决了问题
答案是Xcode项目中有两个React Native副本,一个来自CocoaPods,另一个作为子项目。只需删除Xcode中库
下Podfile中已声明的所有模块,清除并重试后错误就会消失
这个问题的有趣之处在于,调试和发布中的所有构建都可以工作,但在尝试归档项目以进行分发时失败
[2017年5月2日更新]
当您使用react native run ios/android
运行代码时,上述解决方案可能会导致调试时错误,尽管它允许成功归档项目
另一种方法是从Podfile
声明而不是从库
文件夹中删除既存在于库
中又存在于Podfile
中的那些重复模块。当然,运行相关的pod命令,清理项目等等
这样做可以使我的代码存档并在没有调试时错误的情况下运行,因此我对此做了更多的研究,而解决方法实际上要简单得多。至少对我来说是这样。问题是,当您在pod文件中声明React时,Pods xcodeproject会在pod安装过程中获得一个React目标。在Pods项目中有这个目标是导致归档时出错的原因。因此,解决方法是移除目标
在xCode中删除目标的问题在于,这实际上是在Pods文件夹中编辑project.pbxproj文件,该文件夹不在版本控制中。因此,尽管构建将在您完成此操作后存档,但如果您从手动删除它的计算机以外的任何位置部署,它仍将失败。因此,解决方案是将此安装后命令添加到pod文件的底部:
post_install do |installer|
installer.pods_project.targets.each do |target|
if target.name == "React"
target.remove_from_project
end
end
end
这只是在所有要安装的pod中循环,并删除React-one的目标。这样,构建项目的任何地方都将删除目标。现在,当您构建归档时,它不会失败。我通过以下方法解决了这个问题:
(参考文献:)
打开Xcode>Pods>Targets支持文件>Pods-{TARGET-NAME}查找
“其他标志”和仅删除这两个文件中的-ObjC
:
Pods-{TARGET-NAME}.release.xcconfig
e
Pods-{TARGET-NAME}.debug.xcconfig
转到项目主目标>构建
设置>其他链接器标志:确保没有-ObjC
保留在
值我删除了ios中的生成/生成文件夹,并再次运行您的项目李>
现在可以了
上面链接的副作用:应用程序可能会变大,因为其中可能有重复的符号
希望它能对您有所帮助。开发的包含和/或库路径与发行版相同吗?不太清楚您的意思。。。在发布模式下构建应用程序并在设备上运行它,我没有任何问题。存档使用发布版本配置,但只有存档失败并出现这些错误。这也是我的想法,但是当我从项目文件夹中删除库时,当项目构建良好时,在调试时,我有一个本机模块不能为null
错误。你也遇到过这个吗?我现在被困在这个问题上,目前有400多个重复符号。。。我不能存档我的项目,我需要在这个周末发布一个版本。我混合使用libarries和pod,我不确定这是否导致了我的库重叠。我已经运行了pod deintegrate&&pod install
duplicate symbol\u OBJC\u元类\u$\u RCTWebSocketModule
我花了好几个小时跟踪这件事。所有其他选项都会导致“归档”或“运行”被破坏。我花了很长时间才找到为什么React要建两次,但最后,这解决了问题。谢谢@stueynet@Pinguinderk真棒!很高兴听你这么说。我把你的建议代码放在了podfile的最底层,但是我运行了“archive”,它仍然给出了同样的错误,我应该运行pod安装吗?你是我的救星。几个月来我一直在努力解决这个问题,它节省了我的时间。伟大的谢谢。我必须在建筑完成后做一次清理,然后才能成功存档。谢谢你能再解释一下你的架构吗?你在使用哪个图书馆(除了React)?您是如何通过cocoapods(Podfile)安装这些libs的?