Xcode 10.2与Ionic 3构建报错:x86_64架构存在重复符号
问题原因及解决方案
首先,你遇到的ld: 6 duplicate symbols for architecture x86_64是链接器错误,本质是Xcode在构建时发现同一个代码符号(比如函数名、变量名)被多次定义,导致无法合并最终的二进制文件。结合你的环境和插件列表,最可能的原因及解决办法如下:
一、核心原因:重复安装功能重叠的插件
看你的已安装插件列表,有两个功能完全重叠的小数键盘插件:
cordova-plugin-decimal-keyboardcordova-plugin-decimal-keyboard-wkwebview
这两个插件都会生成相同的iOS原生代码文件,导致链接器检测到重复符号,直接抛出错误。这是触发这类问题最常见的原因。
二、分步解决办法
1. 移除重复插件,清理环境
首先卸载其中一个冗余的小数键盘插件,建议保留适配WKWebView的版本(因为你用了cordova-plugin-ionic-webview):
# 移除旧的非WKWebView版本插件 ionic cordova plugin remove cordova-plugin-decimal-keyboard
然后彻底清理并重新构建iOS平台,确保残留文件被清除:
# 移除iOS平台 ionic cordova platform remove ios # 重新添加指定版本的iOS平台 ionic cordova platform add ios@4.5.5 # 清理Ionic缓存 ionic cordova clean ios # 重新安装npm依赖 rm -rf node_modules package-lock.json npm install
2. 清理Xcode本地缓存
有时候Xcode的构建缓存会残留旧的符号信息,导致问题持续:
- 打开Xcode,点击顶部菜单
Product > Clean Build Folder(快捷键Cmd + Shift + K) - 删除Xcode的DerivedData:通过
Xcode > Preferences > Locations找到DerivedData的路径,手动删除对应项目的文件夹
3. 排查其他潜在冲突插件
如果上面的步骤没有解决问题,检查是否还有其他功能重复的插件:
- 比如你同时安装了
phonegap-plugin-barcodescanner和cordova-plugin-qrscanner,虽然功能类似但一般不会冲突,但如果其中一个插件依赖的第三方库和另一个重复,也可能触发问题,可以尝试暂时卸载其中一个测试。 - 检查
es6-promise-plugin是否被多个插件重复引入,部分插件会自带Promise实现,导致重复符号。
4. 调整Xcode构建设置(可选)
如果以上步骤都无效,可以尝试调整Xcode的链接器设置:
- 打开Xcode项目,找到
Build Settings > Linking > Other Linker Flags,尝试添加-ObjC(注意这个可能会增加包体积,谨慎使用) - 尝试切换构建系统:你当前用了
-UseModernBuildSystem=0,可以尝试去掉这个参数,或者在Xcode中手动设置File > Project Settings > Build System为New Build System (Default)
三、额外优化建议
- 你的Cordova iOS平台版本是4.5.5,比较老旧,对Xcode 10.2.1的兼容性有限,可以考虑升级到兼容Ionic 3的较新版本(比如iOS 5.x系列,注意提前测试插件兼容性)
- 升级部分老旧插件,比如
cordova-plugin-ionic-webview可以升级到2.x系列(适配Ionic 3的最新稳定版),提升对新Xcode的支持
内容的提问来源于stack exchange,提问作者Anwar Reefat
相关产品推荐
相关产品推荐

