# Lanu_iOS 项目导读（Onboarding）

> 核对时间：2026-04-08  
> 目标：帮助你快速理解这个 iOS 项目的结构、关键模块和上手路径。

## 1. 项目是什么

这是一个 **iOS 15+ 的 Swift 项目**，工程名目录是 `Lanu`，主 Target 是 **`Gami`**（产物 `Gami.app`），当前共享 Scheme 为 **`Lanu_Debug` / `Lanu_Release`**（均指向 `Gami`）。

核心业务从代码看主要包括：
- 登录与账号体系（Google / Apple / 手机验证码）
- 陪玩/技能与订单体系
- IM（腾讯 IM / TUIKit）
- 语音房/直播间能力（AtomicXCore + RTCRoomEngine）
- 钱包与内购（StoreKit 2）
- Profile、关系链、举报、配置中心等

---

## 2. 一眼看懂目录

根目录关键内容：
- `Lanu/`：主业务代码与资源
- `Lanu.xcodeproj` / `Lanu.xcworkspace`：工程与 workspace
- `Podfile` + `Pods/`：CocoaPods 依赖
- `ThirdParty/TUIKit/`：本地引入的 TIMCommon / TUIChat
- `fastlane/`：打包流程（`fastlane ios beta`）

`Lanu/` 下建议重点关注：
- `AppDelegate.swift`、`SceneDelegate.swift`：启动与入口
- `Manager/`：业务管理层（账号、网络、IM、订单、房间、钱包等）
- `Views/`：页面与 UI（体量最大）
- `Common/`：公共组件（主题、扩展、基础视图、存储、日志）
- `Assets.xcassets/`、`Localizable.xcstrings`：资源与多语言

代码规模（粗略）：
- Swift 文件总数：`388`
- `Views`：`241`
- `Manager`：`66`
- `Common`：`79`

---

## 3. 启动流程（主干）

### 3.1 App 启动（AppDelegate）
`AppDelegate` 负责：
- 日志系统初始化（CocoaLumberjack）
- Firebase 初始化（按 Debug/Release 选择 plist）
- Adjust 初始化
- 网络监听启动 `LNNetworkMonitor.startMonitoring()`
- 提前初始化多个核心 Manager（Profile/IM/GameMate/Purchase/Room/...）
- 发送全局启动事件 `LNEventDeliver.notifyAppLaunchFinished()`
- 处理冷启动 Deeplink
- 上报语言、请求推送权限

### 3.2 UI 场景建立（SceneDelegate）
`SceneDelegate` 负责：
- 创建窗口并设置根控制器：`LNNavigationController(rootViewController: LNMainViewController())`
- 自动登录（`wasLogin == true` 且网络可用时）
- 处理 Universal Link / URL Scheme Deeplink
- 响应登录、登出、语言切换等全局事件

### 3.3 主页面（Tab）
`LNMainViewController` 是 `UITabBarController`，包含 4 个主 Tab：
- Home
- Room
- Message
- Mine

其中除了 Home，其他 Tab 默认受登录态保护（未登录会弹登录面板）。

---

## 4. 架构特点（当前实现风格）

## 4.1 Manager + View 的业务组织
- `Views/` 负责界面与交互
- `Manager/` 负责业务状态、网络调用、事件通知
- 页面通过 `LNEventDeliver` + 各 `*ManagerNotify` 协议观察状态变化

这是一种偏“轻 MVVM/Manager 驱动”的组织方式，不是严格单向数据流框架。

## 4.2 网络层统一入口
网络核心在 `LNHttpManager`：
- 统一 `get/post/put/delete` 封装
- 请求头里拼装公共字段（设备、版本、token、网络等）并生成 `sign`
- 响应统一解包 `LNHttpResponse<T>`
- `code != 0` 走业务错误
- 特定错误码触发登录态清理（如被踢）

`LNNetworkConfig` 根据环境切换 host：
- 测试：`https://test-api.gami.vip`
- 线上：`https://api.gami.vip`

## 4.3 事件总线
`LNEventDeliver` 基于 `NSHashTable<AnyObject>.weakObjects()` 维护观察者，提供：
- `addObserver/removeObserver`
- `notifyEvent`
- 约定事件协议（如 `LNAppMainEvent`、`LNNetworkMonitorNotify`、`LNAccountManagerNotify`）

优点：接入简单。  
风险：全局广播过多时，调用链和时序排查成本会上升。

---

## 5. 核心业务模块速览

- `LNAccountManager`：登录、token 刷新、验证码倒计时、在线心跳
- `LNProfileManager`：用户资料、语音条、缓存、语言上报
- `LNGameMateManager`：游戏分类、陪玩技能、筛选项、入驻流程
- `LNOrderManager`：订单创建/取消/完成/退款/评价与折扣信息
- `LNIMManager`：会话列表、在线状态、官方消息、语音通话状态
- `LNRoomManager`：房间创建/加入/离开、大厅入口、房间搜索
- `LNPurchaseManager`：钱包信息、商品列表、StoreKit2 支付与验单
- `LNConfigManager`：通用配置和国家码加载
- `LNDeeplinkManager`：统一路由 URL Scheme + Universal Link

---

## 6. 依赖与基础设施

## 6.1 CocoaPods（Podfile）
- TIMCommon / TUIChat（本地路径）
- TIMPush
- AtomicXCore（含 RTC 房间能力）
- Adjust
- DoraemonKit（Debug）
- LookinServer（Debug）

平台：`iOS 15.0`，并在 `post_install` 强制所有 Pods 最低版本为 15.0。

## 6.2 SwiftPM（Package.resolved）
可见主要还有：
- FirebaseCore / FirebaseCrashlytics
- GoogleSignIn
- SnapKit
- SDWebImage
- CocoaLumberjackSwift
- AutoCodable
- MJRefresh

其中部分仓库来自内部 Git 服务（`git.gami-internal.vip`）。

## 6.3 构建与发布
- `fastlane ios beta`：自增 build number -> `cocoapods` -> 打包 ad-hoc
- `fastlane/Fastfile` 当前写的是 `scheme: "Lanu"`，与仓库内共享 Scheme（`Lanu_Debug`/`Lanu_Release`）不一致；在新环境中可能需要补本地 Scheme 或调整 Fastfile。
- `Gemfile` 已固定 `cocoapods 1.16.2`

---

## 7. 本地运行建议步骤

1. 使用 `Lanu.xcworkspace` 打开工程（不是 `.xcodeproj`）。
2. 安装依赖：`bundle install` + `bundle exec pod install`（如 Pods 需更新）。
3. Xcode 选择 `Lanu_Debug` 或 `Lanu_Release` Scheme（对应 Target `Gami`）。
4. 检查签名、Bundle ID、推送等能力配置是否匹配你本机证书。
5. 根据环境确认 `LNAppConfig.shared.curEnv`（测试/线上），并确保对应后端可访问。

---

## 8. 当前可见的注意点

- `README.md` 目前是空文件，建议后续保留一个面向团队的最小启动说明。
- Target 名称是 `Gami`，共享 Scheme 是 `Lanu_Debug` / `Lanu_Release`，目录名是 `Lanu`，新同学容易混淆。
- `Info.plist` 中 `NSAllowsArbitraryLoads = true`，上线前建议确认安全策略要求。
- 未看到独立测试 Target（单测/UI 测试基本为空），回归更多依赖手工验证。

---

## 9. 推荐阅读顺序（30-90 分钟版本）

1. `Lanu/AppDelegate.swift`
2. `Lanu/SceneDelegate.swift`
3. `Lanu/Views/Main/LNMainViewController.swift`
4. `Lanu/Manager/LNEventDeliver.swift`
5. `Lanu/Manager/Network/LNHttpManager.swift`
6. `Lanu/Manager/Account/LNAccountManager.swift`
7. `Lanu/Manager/IM/LNIMManager.swift`
8. `Lanu/Manager/Order/LNOrderManager.swift`
9. `Lanu/Manager/Room/LNRoomManager.swift`
10. `Lanu/Views/Home/` + `Lanu/Views/IM/` 对照看页面落地

---

## 10. 一句话总结

这是一个功能较完整、业务模块很多的社交/陪玩类 iOS 项目，采用 `Manager + View + 全局事件` 的组织方式，网络层和业务模块边界相对清晰，上手时优先抓住“启动链路 + 网络层 + 账号/IM/订单/房间”四条主线即可快速建立全局认知。
