PROJECT_ONBOARDING.md 6.9 KB

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.swiftSceneDelegate.swift:启动与入口
  • Manager/:业务管理层(账号、网络、IM、订单、房间、钱包等)
  • Views/:页面与 UI(体量最大)
  • Common/:公共组件(主题、扩展、基础视图、存储、日志)
  • Assets.xcassets/Localizable.xcstrings:资源与多语言

代码规模(粗略):

  • Swift 文件总数:388
  • Views241
  • Manager66
  • Common79

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)

LNMainViewControllerUITabBarController,包含 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
  • 约定事件协议(如 LNAppMainEventLNNetworkMonitorNotifyLNAccountManagerNotify

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


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_DebugLanu_Release Scheme(对应 Target Gami)。
  4. 检查签名、Bundle ID、推送等能力配置是否匹配你本机证书。
  5. 根据环境确认 LNAppConfig.shared.curEnv(测试/线上),并确保对应后端可访问。

8. 当前可见的注意点

  • README.md 目前是空文件,建议后续保留一个面向团队的最小启动说明。
  • Target 名称是 Gami,共享 Scheme 是 Lanu_Debug / Lanu_Release,目录名是 Lanu,新同学容易混淆。
  • Info.plistNSAllowsArbitraryLoads = 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/订单/房间”四条主线即可快速建立全局认知。