Jelajahi Sumber

[*] 仅仅是帮助了解项目

yanxuyao 1 hari lalu
induk
melakukan
f05cb0905d
1 mengubah file dengan 188 tambahan dan 0 penghapusan
  1. 188 0
      PROJECT_ONBOARDING.md

+ 188 - 0
PROJECT_ONBOARDING.md

@@ -0,0 +1,188 @@
+# Lanu_iOS 项目导读(Onboarding)
+
+> 生成时间:2026-04-07  
+> 目标:帮助你快速理解这个 iOS 项目的结构、关键模块和上手路径。
+
+## 1. 项目是什么
+
+这是一个 **iOS 15+ 的 Swift 项目**,工程名目录是 `Lanu`,主 Target/Scheme 实际是 **`Gami`**(产物 `Gami.app`)。
+
+核心业务从代码看主要包括:
+- 登录与账号体系(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())`
+- 自动登录(有 token 且网络可用时)
+- 处理 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
+- `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/Scheme 名称是 `Gami`,目录名是 `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/订单/房间”四条主线即可快速建立全局认知。
+