修复 PIBaseModel 依赖链问题

核心修复:
- NewMomentViewController: 改为直接继承 UIViewController
- NewMineViewController: 改为直接继承 UIViewController
- 不再继承 BaseViewController(避免 ClientConfig → PIBaseModel 依赖链)

依赖链问题分析:
BaseViewController → ClientConfig → ClientDataModel → PIBaseModel
ClientConfig 本身也继承自 PIBaseModel

切断依赖链后,Bridging Header 只需要 UIKit + 3 个新模块,
不会引入任何复杂的 Model 依赖。

这样做的好处:
1. 编译不会有 PIBaseModel 错误
2. 新模块完全独立,不依赖旧代码
3. 更符合白牌项目的目标(完全不同的代码结构)
This commit is contained in:
edwinQQQ
2025-10-09 18:49:44 +08:00
parent 1e759ba461
commit bf31ffda51
8 changed files with 1081 additions and 44 deletions

194
COMPILE_FIX_GUIDE.md Normal file
View File

@@ -0,0 +1,194 @@
# 编译错误修复指南
## 错误Cannot find 'HttpRequestHelper' in scope
### 问题分析
`APIConfig.swift` 中调用了 `HttpRequestHelper.getHostUrl()`,但 Swift 找不到这个 OC 类。
**已确认**
- ✅ Bridging Header 已包含 `#import "HttpRequestHelper.h"`
- ✅ HttpRequestHelper.h 有正确的方法声明
- ✅ 文件路径正确
**可能原因**
- ⚠️ Xcode Build Settings 中 Bridging Header 路径配置错误
- ⚠️ DEFINES_MODULE 未设置为 YES
- ⚠️ Xcode 缓存未清理
### 解决方案
#### 方案 1在 Xcode 中检查 Build Settings推荐
1. **打开 Xcode**
2. **选择 YuMi Target**
3. **进入 Build Settings**
4. **搜索 "Bridging"**
5. **检查以下配置**
```
Objective-C Bridging Header = YuMi/YuMi-Bridging-Header.h
```
**完整路径应该是**`YuMi/YuMi-Bridging-Header.h`(相对于项目根目录)
6. **搜索 "Defines Module"**
7. **确保设置为**
```
Defines Module = YES
```
8. **搜索 "Swift"**
9. **检查 Swift 版本**
```
Swift Language Version = Swift 5
```
#### 方案 2清理缓存并重新编译
在 Xcode 中:
1. **Cmd + Shift + K** - Clean Build Folder
2. **Cmd + Option + Shift + K** - Clean Build Folder (深度清理)
3. **删除 DerivedData**
- 关闭 Xcode
- 运行:`rm -rf ~/Library/Developer/Xcode/DerivedData`
- 重新打开 Xcode
4. **Cmd + B** - 重新编译
#### 方案 3修改 APIConfig.swift临时绕过
如果上述方法都不行,临时修改 `APIConfig.swift`,不使用 `HttpRequestHelper`
```swift
// APIConfig.swift
import Foundation
@objc class APIConfig: NSObject {
private static let xorKey: UInt8 = 77
// RELEASE 环境域名(加密)
private static let releaseEncodedParts: [String] = [
"JTk5PT53YmI=", // https://
"LD0kYw==", // api.
"KD0sPzk0ISQ7KGMuIiA=", // epartylive.com
]
// DEV 环境域名(硬编码,临时方案)
private static let devBaseURL = "你的测试域名"
@objc static func baseURL() -> String {
#if DEBUG
// 临时:直接返回硬编码的测试域名
return devBaseURL
#else
// RELEASE使用加密域名
return decodeURL(from: releaseEncodedParts)
#endif
}
// ... 其他代码保持不变
}
```
**注意**:这只是临时方案,最终还是要修复 Bridging Header 配置。
### 方案 4检查文件是否添加到 Target
1. 在 Xcode 中选中 `YuMi-Bridging-Header.h`
2. 打开右侧 **File Inspector**
3. 检查 **Target Membership**
4. **不要勾选** YuMi TargetBridging Header 不需要加入 Target
### 方案 5手动验证 Bridging 是否工作
`NewTabBarController.swift` 中添加测试代码:
```swift
override func viewDidLoad() {
super.viewDidLoad()
// 测试 Bridging 是否工作
#if DEBUG
print("[Test] Testing Bridging Header...")
// 测试 GlobalEventManager应该能找到
let manager = GlobalEventManager.shared()
print("[Test] GlobalEventManager: \(manager)")
// 测试 HttpRequestHelper如果找不到会报错
// let url = HttpRequestHelper.getHostUrl()
// print("[Test] Host URL: \(url)")
#endif
// ... 其他代码
}
```
**如果 GlobalEventManager 也找不到**:说明 Bridging Header 完全没生效。
**如果只有 HttpRequestHelper 找不到**:说明 `HttpRequestHelper.h` 的路径有问题。
### 方案 6检查 HttpRequestHelper.h 的实际位置
运行以下命令确认文件位置:
```bash
cd "/Users/edwinqqq/Local/Company Projects/E-Parti"
find . -name "HttpRequestHelper.h" -type f
```
**应该输出**`./YuMi/Network/HttpRequestHelper.h`
如果路径不对,需要在 Bridging Header 中使用正确的相对路径:
```objc
// 可能需要改为:
#import "Network/HttpRequestHelper.h"
// 或者
#import "../Network/HttpRequestHelper.h"
```
### 终极方案:重新创建 Bridging Header
如果以上都不行,删除并重新创建:
1. 在 Xcode 中删除 `YuMi-Bridging-Header.h`
2. 创建一个新的 Swift 文件(如 `Temp.swift`
3. Xcode 会提示:"Would you like to configure an Objective-C bridging header?"
4. 点击 **Create Bridging Header**
5. Xcode 会自动创建并配置 Bridging Header
6. 将原来的内容复制回去
7. 删除 `Temp.swift`
---
## 推荐执行顺序
1. **首先**:清理缓存(方案 2
2. **然后**:检查 Build Settings方案 1
3. **如果不行**:手动验证(方案 5
4. **最后**:临时绕过(方案 3或重新创建终极方案
---
## 成功标志
编译成功后,应该能看到:
```
Build Succeeded
```
没有任何关于 "Cannot find 'HttpRequestHelper'" 的错误。
---
**更新时间**: 2025-10-09
**问题状态**: 待修复
**优先级**: P0阻塞编译