
核心修复: - NewMomentViewController: 改为直接继承 UIViewController - NewMineViewController: 改为直接继承 UIViewController - 不再继承 BaseViewController(避免 ClientConfig → PIBaseModel 依赖链) 依赖链问题分析: BaseViewController → ClientConfig → ClientDataModel → PIBaseModel ClientConfig 本身也继承自 PIBaseModel 切断依赖链后,Bridging Header 只需要 UIKit + 3 个新模块, 不会引入任何复杂的 Model 依赖。 这样做的好处: 1. 编译不会有 PIBaseModel 错误 2. 新模块完全独立,不依赖旧代码 3. 更符合白牌项目的目标(完全不同的代码结构)
152 lines
3.9 KiB
Markdown
152 lines
3.9 KiB
Markdown
# 白牌项目构建指南
|
||
|
||
## ⚠️ 重要:使用 Workspace 而不是 Project
|
||
|
||
**错误方式**:
|
||
```bash
|
||
xcodebuild -project YuMi.xcodeproj -scheme YuMi build ❌
|
||
```
|
||
|
||
**正确方式**:
|
||
```bash
|
||
xcodebuild -workspace YuMi.xcworkspace -scheme YuMi build ✅
|
||
```
|
||
|
||
## 为什么?
|
||
|
||
因为项目使用了 **CocoaPods**:
|
||
- CocoaPods 会创建 `.xcworkspace` 文件
|
||
- Workspace 包含了主项目 + Pods 项目
|
||
- 直接用 `.xcodeproj` 编译会找不到 Pods 中的库(如 MJRefresh)
|
||
|
||
## 在 Xcode 中打开项目
|
||
|
||
**正确方式**:
|
||
1. 打开 `YuMi.xcworkspace`(双击这个文件)
|
||
2. 不要打开 `YuMi.xcodeproj`
|
||
|
||
**验证方式**:
|
||
- 打开后,左侧应该看到 2 个项目:
|
||
- YuMi(主项目)
|
||
- Pods(依赖项目)
|
||
|
||
## 编译项目
|
||
|
||
### 方式 1:在 Xcode 中(推荐)
|
||
|
||
1. 打开 `YuMi.xcworkspace`
|
||
2. 选择真机设备(iPhone for iPhone)
|
||
3. `Cmd + B` 编译
|
||
4. 修复任何错误
|
||
5. `Cmd + R` 运行(如果需要)
|
||
|
||
### 方式 2:命令行
|
||
|
||
```bash
|
||
cd "/Users/edwinqqq/Local/Company Projects/E-Parti"
|
||
|
||
# 清理
|
||
xcodebuild -workspace YuMi.xcworkspace -scheme YuMi clean
|
||
|
||
# 编译(真机)
|
||
xcodebuild -workspace YuMi.xcworkspace -scheme YuMi \
|
||
-destination 'generic/platform=iOS' \
|
||
-configuration Debug \
|
||
build
|
||
```
|
||
|
||
## Build Settings 配置验证
|
||
|
||
在 Xcode 中:
|
||
|
||
1. 打开 `YuMi.xcworkspace`
|
||
2. 选择 YuMi Target
|
||
3. Build Settings → 搜索框输入以下关键词并检查:
|
||
|
||
| 设置项 | 期望值 | 状态 |
|
||
|--------|--------|------|
|
||
| **Swift Objc Bridging Header** | `YuMi/YuMi-Bridging-Header.h` | ✅ 已配置 |
|
||
| **Swift Version** | `Swift 5` | ✅ 已配置 |
|
||
| **Defines Module** | `YES` | ✅ 已配置 |
|
||
|
||
## 常见错误排查
|
||
|
||
### 错误 1: `'MJRefresh/MJRefresh.h' file not found`
|
||
|
||
**原因**:使用了 `.xcodeproj` 而不是 `.xcworkspace`
|
||
|
||
**解决**:使用 `.xcworkspace` 打开和编译
|
||
|
||
### 错误 2: `SwiftGeneratePch failed`
|
||
|
||
**原因**:Bridging Header 中引用的头文件找不到
|
||
|
||
**解决**:
|
||
1. 确保使用 `.xcworkspace`
|
||
2. 检查 Bridging Header 中的所有 `#import` 是否正确
|
||
3. 确保所有依赖的 Pod 都安装了
|
||
|
||
### 错误 3: `Cannot find 'HttpRequestHelper' in scope`
|
||
|
||
**原因**:Bridging Header 路径未配置
|
||
|
||
**解决**:已修复,Build Settings 中设置了正确路径
|
||
|
||
## 当前项目配置
|
||
|
||
### 文件结构
|
||
```
|
||
E-Parti/
|
||
├── YuMi.xcworkspace ← 用这个打开!
|
||
├── YuMi.xcodeproj ← 不要用这个
|
||
├── Podfile
|
||
├── Pods/ ← CocoaPods 依赖
|
||
├── YuMi/
|
||
│ ├── YuMi-Bridging-Header.h ← Swift/OC 桥接
|
||
│ ├── Config/
|
||
│ │ └── APIConfig.swift ← API 域名配置
|
||
│ ├── Global/
|
||
│ │ └── GlobalEventManager.h/m ← 全局事件管理
|
||
│ └── Modules/
|
||
│ ├── NewTabBar/
|
||
│ │ └── NewTabBarController.swift
|
||
│ ├── NewMoments/
|
||
│ │ ├── Controllers/
|
||
│ │ │ └── NewMomentViewController.h/m
|
||
│ │ └── Views/
|
||
│ │ └── NewMomentCell.h/m
|
||
│ └── NewMine/
|
||
│ ├── Controllers/
|
||
│ │ └── NewMineViewController.h/m
|
||
│ └── Views/
|
||
│ └── NewMineHeaderView.h/m
|
||
```
|
||
|
||
### Swift/OC 混编配置
|
||
|
||
**Bridging Header**:`YuMi/YuMi-Bridging-Header.h`
|
||
- 引入所有需要在 Swift 中使用的 OC 类
|
||
- 包括第三方 SDK(NIMSDK, AFNetworking)
|
||
- 包括项目的 Models、Managers、Views
|
||
|
||
**Build Settings**:
|
||
- `SWIFT_OBJC_BRIDGING_HEADER = YuMi/YuMi-Bridging-Header.h`
|
||
- `DEFINES_MODULE = YES`
|
||
- `SWIFT_VERSION = 5.0`
|
||
|
||
## 验证配置是否成功
|
||
|
||
编译成功后,应该能在 Console 看到:
|
||
|
||
```
|
||
[NewTabBarController] 初始化完成
|
||
[APIConfig] 解密后的域名: https://api.epartylive.com
|
||
[GlobalEventManager] SDK 代理设置完成
|
||
```
|
||
|
||
---
|
||
|
||
**更新时间**: 2025-10-09
|
||
**状态**: ✅ 配置已修复
|
||
**下一步**: 使用 YuMi.xcworkspace 在 Xcode 中编译
|