Unity Xcode13链接UnityFramework报AdMob符号未定义打包错误
Unity更换Mac设备后iOS构建AdMob armv7符号缺失错误修复
核心根因
报错和CocoaPods与Xcode的通信异常无关,本质是新设备升级到Xcode 13.0后,CocoaPods默认拉取的Google Mobile Ads SDK版本和你项目使用的AdMob v5.3.0 Unity插件不兼容:
- Xcode 12.1环境下CocoaPods拉取的AdMob SDK版本和v5.3.0插件完全匹配,所以旧设备无需额外配置就能正常构建
- Xcode 13.0搭配iOS 15 SDK时,默认拉取的高版本AdMob SDK已经把
GADInterstitialAd等类重命名为带Beta后缀的版本,且逐步移除了armv7 32位架构的符号支持,才会触发连环符号找不到的报错。
修复步骤(按优先级尝试,第一个方案成功率最高)
方案1:锁定CocoaPods依赖版本,和旧设备运行环境完全对齐
不需要修改任何项目业务代码,完全复现旧设备的依赖环境:
- 回到旧设备,打开能正常构建的Xcode工程根目录,找到
Podfile.lock文件,记录所有AdMob相关依赖的精确版本号,包括但不限于:- Google-Mobile-Ads-SDK
- GoogleAppMeasurement
- GoogleUserMessagingPlatform
- GoogleUtilities
- PromisesObjC
- nanopb
- 回到新设备,从Unity重新导出Xcode工程后,先不要打开工程构建,打开工程根目录下的
Podfile,给上述所有依赖添加精确版本锁定,格式参考:
pod 'Google-Mobile-Ads-SDK', '= 旧设备上记录的对应版本号' pod 'GoogleAppMeasurement', '= 旧设备上记录的对应版本号' # 其余相关依赖全部按相同格式锁版本
- 打开终端进入Xcode工程根目录,执行命令清理旧缓存并重新安装匹配版本的依赖:
pod deintegrate pod cache clean --all pod install
- 依赖安装完成后,务必通过
.xcworkspace后缀的文件打开Xcode工程构建,不要打开.xcodeproj文件。
方案2:移除armv7架构支持(无副作用,适配当前上架要求)
2022年起App Store已经不再接收支持32位armv7设备的安装包,最低支持arm64架构、iOS 11以上系统完全不影响上架和用户覆盖:
- 打开Unity的iOS Player Settings,在Other Settings分类下找到Architecture选项,直接选择
arm64,移除armv7架构 - 将Target minimum iOS Version设置为
11.0或更高 - 重新导出Xcode工程,执行
pod install后直接构建即可,不需要额外调整依赖版本。
方案3:降级本地CocoaPods源到Xcode 12适配时期版本
如果无法拿到旧设备的依赖版本记录、又必须保留armv7支持,可以直接把本地CocoaPods的spec仓库回退到2021年10月(Xcode 12.1正式版最后适配的时间点),拉取的依赖版本会和旧设备完全一致:
- 终端执行命令删除现有本地CocoaPods仓库:
pod repo remove trunk
- 拉取对应时间点的CocoaPods spec源,完成后重新执行
pod install即可。
之前尝试的操作无效的原因
- 调整Other Linker Flags、手动增减架构、手动添加链接库的操作,都没有解决「SDK版本和Unity插件API不匹配」的核心问题,自然无法修复报错
- 升级CocoaPods版本会默认拉取更新版的依赖,反而会加剧版本不兼容问题
- 手动将报错类替换为Beta后缀类的做法,是硬把旧版Unity插件往新版SDK上适配,会触发连环API不兼容问题,没有实际可行性。
内容的提问来源于stack exchange,提问作者theBranderson
相关产品推荐
相关产品推荐

