
核心修复: - NewMomentViewController: 改为直接继承 UIViewController - NewMineViewController: 改为直接继承 UIViewController - 不再继承 BaseViewController(避免 ClientConfig → PIBaseModel 依赖链) 依赖链问题分析: BaseViewController → ClientConfig → ClientDataModel → PIBaseModel ClientConfig 本身也继承自 PIBaseModel 切断依赖链后,Bridging Header 只需要 UIKit + 3 个新模块, 不会引入任何复杂的 Model 依赖。 这样做的好处: 1. 编译不会有 PIBaseModel 错误 2. 新模块完全独立,不依赖旧代码 3. 更符合白牌项目的目标(完全不同的代码结构)
195 lines
4.8 KiB
Markdown
195 lines
4.8 KiB
Markdown
# 编译错误修复指南
|
||
|
||
## 错误: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 Target(Bridging 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(阻塞编译)
|