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

Google-Mobile-Ads-SDK在iOS主App和Framework同时使用初始化报错

问题原因

  • 你当前的Podfile配置会使Google-Mobile-Ads-SDK被独立编译并打包进MyFramework和MainApp两个二进制产物中,App运行时存在两份完全相同的SDK代码副本。
  • Objective-C的Runtime在加载同名类时,后加载的类会覆盖先加载的类实现。主App启动后先加载自身打包的SDK实例,你在主App触发广告请求时,SDK刚开始初始化,随后内嵌Framework加载时,Framework包里的SDK类被Runtime加载,直接覆盖了之前已经半初始化的SDK类状态,就会抛出「SDK未完成初始化就执行网络请求」的错误。
  • 你之前尝试的两种方案还是没有避免重复依赖的问题,两个target各自独立引入SDK还是会产生两份副本。

解决方案

方案1(推荐):调整依赖规则,仅主App打包SDK

修改Podfile如下,让Framework仅在编译阶段引用SDK,不将SDK打包进自身二进制,运行时统一使用主App内的SDK实例:

platform :ios, '10.0'

target 'MainApp' do
  use_frameworks!
  pod 'Google-Mobile-Ads-SDK', '~> 7.67.0'
  pod 'CocoaLumberjack/Swift', '~> 3.5.3'
  ...
end

target 'MyFramework' do
  use_frameworks!
  pod 'FLAnimatedImage', '~> 1.0'
  # 仅编译阶段依赖,不打包进Framework产物
  pod 'Google-Mobile-Ads-SDK', '~> 7.67.0', :configurations => ['Debug', 'Release']
  ...
end

修改完成后进入MyFramework的编译配置,在Build Phases->Embed Frameworks阶段确认没有Google-Mobile-Ads-SDK,链接方式改为Do Not Embed即可。

方案2:使用抽象target统一管理公共依赖

如果需要多target共享依赖且保证仅打包一次,可以用CocoaPods的抽象target特性:

platform :ios, '10.0'

abstract_target 'CommonDeps' do
  use_frameworks!
  pod 'Google-Mobile-Ads-SDK', '~> 7.67.0'

  target 'MyFramework' do
    pod 'FLAnimatedImage', '~> 1.0'
  end

  target 'MainApp' do
    pod 'CocoaLumberjack/Swift', '~> 3.5.3'
  end
end

执行pod install后CocoaPods会自动处理依赖逻辑,仅将广告SDK打包进最终的主App产物,不会出现重复打包问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:18:04