You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

tvOS项目编译报错:_OBJC_CLASS_$_IMACompanionAdSlot符号未定义

tvOS下Google Ads IMA SDK编译错误:OBJC_CLASS$_IMACompanionAdSlot符号未定义

问题详情

  • 项目环境:tvOS平台,通过CocoaPods集成GoogleAds-IMA-tvOS-SDK 4.3.2版本(更新至SDK新版本后问题仍存在)
  • 编译错误表现:
    • 当SWIFT_OPTIMIZATION_LEVEL设置为-Onone时,真机arm64架构编译失败,报错_OBJC_CLASS_$_IMACompanionAdSlot符号未定义,涉及DAILinearTVPlayer.o和NativePlayer.o文件
    • 切换优化等级为-O时真机编译成功,但模拟器(x86_64架构)编译时依旧出现同类符号未定义错误
  • 已尝试:Stack Overflow相关问题的多数常规解决方案,均未解决

可行解决方向

1. 验证IMA SDK的架构完整性

先确认SDK是否包含所需的架构,在终端执行以下命令:

lipo -info Pods/GoogleAds-IMA-tvOS-SDK/Frameworks/GoogleInteractiveMediaAds.framework/GoogleInteractiveMediaAds

如果输出里缺少arm64或x86_64,说明SDK本身架构不全,检查Pod源是否正确,或者直接去Google官方下载对应版本的SDK替换Pod中的framework。

2. 调整Pod目标的编译设置

找到Pods项目里的GoogleInteractiveMediaAds target,修改以下设置:

  • 确保Deployment Target和主项目的tvOS版本完全一致
  • 在Other Linker Flags中添加-ObjC(如果原本没有的话)
  • 将Dead Code Stripping设为YES(解决-Onone模式下符号未被正确加载的问题)

3. 彻底清理缓存后重建

  • Xcode中依次执行Command + Shift + K(清理项目)、Command + Option + Shift + K(清理构建文件夹)
  • 删除项目根目录的Pods文件夹和Podfile.lock,重新执行pod install
  • 重启Xcode后再尝试编译

4. 绕过无用的符号引用

如果你的项目根本没用到IMACompanionAdSlot,可以试试这两个办法:

  • 检查DAILinearTVPlayer和NativePlayer中的代码,注释掉所有涉及IMACompanionAdSlot的引用
  • 在任意Objective-C文件中添加空类别,欺骗编译器符号存在:
@implementation IMACompanionAdSlot (Dummy)
@end

5. 强制加载IMA SDK的符号

在主项目的Other Linker Flags中添加强制加载SDK的配置:

-force_load $(PODS_ROOT)/GoogleAds-IMA-tvOS-SDK/Frameworks/GoogleInteractiveMediaAds.framework/GoogleInteractiveMediaAds

这个设置会让链接器强制加载SDK中的所有符号,避免优化或架构差异导致的符号丢失。

内容的提问来源于stack exchange,提问作者mkbrwr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 04:18:15