5.7 KiB
调试崩溃问题指南
问题现象
NSLog("XS- init config") 这个日志都没有打印出来,说明应用在调用 BbbAdManager.shared.initConfig() 之前就崩溃了。
已添加的调试日志
1. AppDelegate.swift
NSLog("XS- app start 21") // 第 26 行
NSLog("XS- 准备访问 BbbAdManager.shared") // 新增
NSLog("XS- BbbAdManager.shared 访问成功") // 新增
NSLog("XS- 准备调用 initConfig()") // 新增
adManager.initConfig()
NSLog("XS- app start 3") // 原有
2. bbbAdManager.swift - bConfig 初始化
NSLog("XS- bConfig init 开始")
NSLog("XS- bConfig init: allAdIds count = ...")
NSLog("XS- bConfig init 完成")
3. bbbAdManager.swift - BbbAdManager 初始化
NSLog("XS- 开始创建 BbbAdManager.config")
NSLog("XS- BbbAdManager.config 创建完成")
NSLog("XS- 开始创建 BbbAdManager.shared 单例")
NSLog("XS- BbbAdManager init 开始")
NSLog("XS- BbbAdManager init 完成")
NSLog("XS- BbbAdManager.shared 单例创建完成")
4. bbbAdManager.swift - initConfig
NSLog("XS- init config") // 第一行
NSLog("XS- init config 1")
NSLog("XS- init config 2")
NSLog("XS- init config 3")
5. YL_PlayVC.swift
NSLog("XS- YL_PlayVC viewDidLoad 开始")
NSLog("XS- YL_PlayVC 准备调用 waitForSDKInitialization")
NSLog("XS- YL_PlayVC waitForSDKInitialization 调用完成")
下一步操作
步骤 1: 更新 CocoaPods 依赖
我已经更新了 Podfile,将最低版本设置为 iOS 12.0:
cd /Users/mac/workspaces/projects/ios/build-ipa/ironSource/PlayBTopOn
pod install
步骤 2: 在 Xcode 中配置弱链接
重要!这一步必须做,否则还是会崩溃:
- 打开
PlayBTopOn.xcworkspace - 选择项目 → TARGETS → PlayBTopOn
- Build Phases → Link Binary With Libraries
- 将
AppTrackingTransparency.framework的 Status 改为 Optional
步骤 3: 清理并重新编译
# 在 Xcode 中:
# 1. Product -> Clean Build Folder (Cmd+Shift+K)
# 2. Product -> Build (Cmd+B)
# 3. Product -> Run (Cmd+R)
步骤 4: 查看控制台日志
运行应用后,查看 Xcode 控制台的输出,找到最后打印的日志,就能确定崩溃发生在哪一步。
可能的崩溃原因
根据日志输出,可以判断崩溃原因:
场景 1: 看不到 "XS- 开始创建 BbbAdManager.config"
原因: 导入 AnyThinkSDK 或 AnyThinkInterstitial 时崩溃
解决: 这些 SDK 可能不支持 iOS 12/13,需要检查 SDK 文档或升级版本
场景 2: 看到 "XS- 开始创建 BbbAdManager.config" 但没有 "完成"
原因: bConfig() 初始化时崩溃
解决: 检查 bConfig 的 init() 方法中的代码
场景 3: 看到 "XS- BbbAdManager.config 创建完成" 但没有 "开始创建 shared"
原因: 在创建 shared 单例之前的某个地方崩溃
解决: 检查类级别的其他静态变量
场景 4: 看到 "XS- 开始创建 BbbAdManager.shared" 但没有 "init 完成"
原因: BbbAdManager 的 init() 方法中崩溃
解决: 检查 init 方法的代码
场景 5: 看到 "XS- 准备访问 BbbAdManager.shared" 但没有 "访问成功"
原因: 访问 BbbAdManager.shared 时触发初始化崩溃
解决: 检查静态变量的初始化顺序
场景 6: 看到 "XS- 准备调用 initConfig()" 但没有 "XS- init config"
原因: 调用 initConfig() 方法时崩溃
解决: 检查方法调用本身是否有问题
最可能的原因
根据经验,最可能的原因是:
1. 广告 SDK 不支持 iOS 12/13
TopOn (AnyThink) SDK 6.4.93 版本可能需要 iOS 13+ 或更高。
验证方法: 查看 Pods 目录下的 SDK 文档或 Info.plist:
cat Pods/TPNiOS/core/AnyThinkSDK.xcframework/Info.plist | grep MinimumOSVersion
解决方案:
- 如果 SDK 不支持 iOS 12,需要降级到支持的版本
- 或者将最低支持版本改为 iOS 13
2. AppTrackingTransparency 框架未设置为 Optional
这个必须在 Xcode 中手动设置(见上面步骤 2)
3. 某些广告 SDK 框架也需要弱链接
某些广告平台的 SDK 可能也包含 iOS 14+ 的 API,需要设置为 Optional
如何查看详细的崩溃信息
方法 1: Xcode 控制台
直接在 Xcode 底部的控制台查看崩溃信息
方法 2: 设置异常断点
- Xcode → Breakpoint Navigator (⌘7)
- 点击左下角
+→ Exception Breakpoint - 运行应用,崩溃时会自动在崩溃处暂停
方法 3: 查看设备日志
- Xcode → Window → Devices and Simulators
- 选择你的设备
- 点击 "Open Console" 查看系统日志
临时解决方案:提高最低版本
如果广告 SDK 确实不支持 iOS 12,可以临时将最低版本改为 iOS 13:
Podfile
platform :ios, '13.0'
project.pbxproj (在 Xcode 中设置)
- 项目设置 → General → Deployment Info
- iOS Deployment Target 设置为 13.0
需要反馈的信息
请运行应用后,把控制台的输出(特别是所有 "XS-" 开头的日志)发给我,我可以帮你精确定位问题。
示例输出:
XS- app start: xxx
XS- app start 2: xxx
XS- YL_PlayVC viewDidLoad 开始
XS- app start 21: xxx
XS- 准备访问 BbbAdManager.shared
XS- 开始创建 BbbAdManager.config
XS- bConfig init 开始
XS- bConfig init: allAdIds count = 3
[崩溃] <--- 如果在这里崩溃,就说明问题出在 bConfig 的 init 方法中
总结:
- ✅ 已添加详细日志
- ✅ 已更新 Podfile
- ⚠️ 需要运行
pod install - ⚠️ 需要在 Xcode 中设置 AppTrackingTransparency 为 Optional
- ⚠️ 重新编译运行,查看日志确定崩溃点