|
|
@@ -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/订单/房间”四条主线即可快速建立全局认知。
|
|
|
+
|