187 lines
5.7 KiB
Markdown
187 lines
5.7 KiB
Markdown
# 调试崩溃问题指南
|
||
|
||
## 问题现象
|
||
`NSLog("XS- init config")` 这个日志都没有打印出来,说明应用在调用 `BbbAdManager.shared.initConfig()` 之前就崩溃了。
|
||
|
||
## 已添加的调试日志
|
||
|
||
### 1. AppDelegate.swift
|
||
```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 初始化
|
||
```swift
|
||
NSLog("XS- bConfig init 开始")
|
||
NSLog("XS- bConfig init: allAdIds count = ...")
|
||
NSLog("XS- bConfig init 完成")
|
||
```
|
||
|
||
### 3. bbbAdManager.swift - BbbAdManager 初始化
|
||
```swift
|
||
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
|
||
```swift
|
||
NSLog("XS- init config") // 第一行
|
||
NSLog("XS- init config 1")
|
||
NSLog("XS- init config 2")
|
||
NSLog("XS- init config 3")
|
||
```
|
||
|
||
### 5. YL_PlayVC.swift
|
||
```swift
|
||
NSLog("XS- YL_PlayVC viewDidLoad 开始")
|
||
NSLog("XS- YL_PlayVC 准备调用 waitForSDKInitialization")
|
||
NSLog("XS- YL_PlayVC waitForSDKInitialization 调用完成")
|
||
```
|
||
|
||
## 下一步操作
|
||
|
||
### 步骤 1: 更新 CocoaPods 依赖
|
||
|
||
我已经更新了 `Podfile`,将最低版本设置为 iOS 12.0:
|
||
|
||
```bash
|
||
cd /Users/mac/workspaces/projects/ios/build-ipa/ironSource/PlayBTopOn
|
||
pod install
|
||
```
|
||
|
||
### 步骤 2: 在 Xcode 中配置弱链接
|
||
|
||
**重要!这一步必须做,否则还是会崩溃:**
|
||
|
||
1. 打开 `PlayBTopOn.xcworkspace`
|
||
2. 选择项目 → TARGETS → PlayBTopOn
|
||
3. Build Phases → Link Binary With Libraries
|
||
4. 将 `AppTrackingTransparency.framework` 的 Status 改为 **Optional**
|
||
|
||
### 步骤 3: 清理并重新编译
|
||
|
||
```bash
|
||
# 在 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:
|
||
```bash
|
||
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: 设置异常断点
|
||
1. Xcode → Breakpoint Navigator (⌘7)
|
||
2. 点击左下角 `+` → Exception Breakpoint
|
||
3. 运行应用,崩溃时会自动在崩溃处暂停
|
||
|
||
### 方法 3: 查看设备日志
|
||
1. Xcode → Window → Devices and Simulators
|
||
2. 选择你的设备
|
||
3. 点击 "Open Console" 查看系统日志
|
||
|
||
## 临时解决方案:提高最低版本
|
||
|
||
如果广告 SDK 确实不支持 iOS 12,可以临时将最低版本改为 iOS 13:
|
||
|
||
### Podfile
|
||
```ruby
|
||
platform :ios, '13.0'
|
||
```
|
||
|
||
### project.pbxproj (在 Xcode 中设置)
|
||
1. 项目设置 → General → Deployment Info
|
||
2. 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 方法中
|
||
```
|
||
|
||
---
|
||
|
||
**总结:**
|
||
1. ✅ 已添加详细日志
|
||
2. ✅ 已更新 Podfile
|
||
3. ⚠️ 需要运行 `pod install`
|
||
4. ⚠️ 需要在 Xcode 中设置 AppTrackingTransparency 为 Optional
|
||
5. ⚠️ 重新编译运行,查看日志确定崩溃点
|