joywayer
|
b866ee212c
|
Phase 1.4:引入 ZIPFoundation SPM 依赖(v0.9.20)
ResourceUnzipper(Phase 1.5)的前置:用 ZIPFoundation 替代旧 ZipArchive
解压 gamehall.zip。ADR-006 纯 SPM + Vendor 策略下的首个 SPM 依赖。
- 引入:https://github.com/weichsel/ZIPFoundation
- 版本 0.9.20(Up to Next Major,commit 22787ffb59de)
- License: MIT;纯 Swift 实现,Xcode 26 原生兼容
- 链接到 target ylgamehall
- pbxproj:XCRemoteSwiftPackageReference + XCSwiftPackageProductDependency
写入;Package.resolved 锁定版本,多机 / CI 复现
- BuildProject 通过;ZIPFoundation 全部 .swift 由 SwiftCompile 实际
参与构建,与 ylgamehall target 链接完成
- 附带:ChannelConfig.plist 移除内联说明注释(Phase 1.1 commit 后由
维护者整理),不影响 plist 数据结构
|
2026-06-21 23:56:32 +08:00 |
|
joywayer
|
730574a2e2
|
Phase 1.3:SandboxPaths 统一沙盒 / Bundle / H5 路径入口
集中管理 NSSearchPathFor... 调用,避免散落,方便后续 ResourceUnzipper
(Phase 1.5)与 WebView 加载(Phase 1.10)复用。
- 新增 ylgamehall/Source/Resource/SandboxPaths.swift
- 基础:caches / documents / bundle
- 大厅 H5:lobbyRoot / lobbyIndex / lobbyVersionXML(基于 BundleConfig
当前渠道值动态拼接)
- 子游戏 H5:subGameRoot(_:) / subGameIndex(_:_:)(Phase 6 调用,
入参传 SwitchOverGameData 解出的 dir/start)
- 全部 enum + static,无状态,Swift 6 严格并发零负担
- RootViewController.viewDidLoad 补 SandboxPaths 烟雾打印 6 项路径,
便于首次启动 console 校验:
- lobbyIndex 应为 {Caches}/FtJf073.../gamehall/index.html
- lobbyVersionXML 应为 {Caches}/FtJf073.../gamehall/version.xml
- BuildProject 通过,synchronized group 自动收编新文件
|
2026-06-21 23:52:23 +08:00 |
|
joywayer
|
dcc12bb76d
|
Phase 1.2:BundleConfig 读 ChannelConfig.plist 完成 11 项渠道注入加载
- 新增 ylgamehall/Source/Resource/BundleConfig.swift
- 11 个 public let 属性(qiniuDomain / gameId / channel / gameDir
/ gameStart / gameConfig / market / agent / appVersion / other
/ appleConfig)
- public init(bundle: Bundle = .main) —— 默认走 main bundle,单测
可注入 mock bundle 验证不同 plist fixture
- PropertyListSerialization 反序列化 ChannelConfig.plist
- final class + Sendable(all-let,String 是 Sendable,Swift 6
严格并发下编译器静态校验通过)
- 单例 BundleConfig.shared,业务统一通过此访问
- RootViewController.viewDidLoad 加烟雾测试 print 11 项值,首次运行
真机/模拟器即可在 console 验证读取正确
- BuildProject 通过,synchronized group 自动收编 BundleConfig.swift
为 source(.swift 文件类型走 SwiftCompile,不再卡 plist 那样的
resource 扁平化问题)
- 单元测试待 Phase 0.2 单测 target 建立后补齐
|
2026-06-21 23:47:23 +08:00 |
|
joywayer
|
c25a7514c7
|
fix(ChannelConfig.plist):注释去掉 -- 双连字符避免 XML parse 错误
XML 注释规范禁止 -- 出现在注释内,原注释包含的 codesign 命令示例
(--force / --sign / --entitlements)触发解析错误,Xcode 直接打开
plist 报 "XML Parse Error: Comment must not contain '--'"。
把详细命令示例移除,只保留单行简短指引,命令示例已在 Design
§7.0.3 写过,不在 plist 重复。
|
2026-06-21 23:45:38 +08:00 |
|
joywayer
|
8c2ffa3106
|
Phase 1.1:渠道注入用 ChannelConfig.plist 替代 msext 目录树(ADR-007)
契约 §0.3 描述 msext 把 11 个渠道值编码为 Bundle 根的 11 个空目录
子文件夹名(目录名本身就是值)。在 Xcode 26.5 默认的 synchronized
group 下,此机制不兼容(子目录被扁平化、11 个 .gitkeep 撞名;
folder reference 拖入流程失效;Run Script Phase 受 sandbox 阻碍且
默认 Based on dependency analysis 让 clean build 也不跑)。
CLAUDE.md 原则 B 落地——原生内部自由重构,不照搬 msext。改用单一
plist 存储等价语义,H5 端通过 app_data.js 看到的 11 个 JS 全局变量
行为完全不变(契约边界在 BundleConfig.shared.xxx,与底层无关)。
多渠道分发用 plutil -replace + 重签 + 重打包,工作量与 mv 目录名
重签完全相同。
- 新增 ylgamehall/Resources/ChannelConfig.plist:11 个 string key
含母包默认值(沿用 msext 现网值);synchronized group 自动入 Bundle
- Design §7.0 / §7.2 重写为 plist 方案;BundleConfig 代码骨架改为
PropertyListSerialization + init(bundle:) 可注入式
- Plan §5 Phase 1.1 任务清单从 4 个子项简化为 1 项;ADR-004 文字
同步;新增 ADR-007 完整记录决策背景 / 触发事件 / 工程兼容性分析
/ 理由 / 守护条款
- pbxproj:ENABLE_USER_SCRIPT_SANDBOXING 残留为 NO(前期 Run Script
方案探索时关闭,plist 方案下不再需要,但未恢复以避免再次 UI 操作;
无 Run Script 故无实际安全暴露面,未来可随时改回 YES)
- BuildProject 验证:plist 已落在 .app 根,plutil -p 输出 11 个键值
完整
|
2026-06-21 23:41:25 +08:00 |
|
joywayer
|
cabdc1ed42
|
docs:剥离 docs/res/ 为私人素材池,废止仓库根 Resources/ 假设
明确 docs/res/ 是项目维护者的私人原始素材池,与项目架构无关;项目
代码 / 构建脚本 / Xcode 工程都不感知它的存在,需要时从中拷一份到
项目按现代实践规划的位置。原 ADR-004「Resources/ 在仓库根 +
Build Phase 引入」语义已崩塌(gamehall.zip / Images.xcassets / Res/
均被挪入 docs/res/),修订为「项目内资源目录由各 Phase 按需落地」:
静态 Bundle 资源走 ylgamehall/Resources/、原生 Asset Catalog 走
ylgamehall/Assets.xcassets/、渠道注入产物走 ylgamehall/ChannelInjection/
(.gitignore + Scripts/inject_channel.sh 生成)、闭源 SDK 走 Vendor/。
- CLAUDE.md 原「Resources/ 目录约定」节改写为「docs/res/ 与项目
资源的关系」,禁止把 docs/res 当项目资源目录使用
- Design §7.0 整节重写为「项目资源目录约定」三小节(docs/res
与项目无关 / 项目内资源目录在 Phase 实施时按需落地 / 渠道注入
运行时路径)
- Plan ADR-004 修订为「项目资源目录由各 Phase 按需落地」;ADR-002
/ §2.2 / Phase 1.1.a-d / 1.5 同步调整为 docs/res → ylgamehall/Resources
的拷贝模型;Phase 1 任务清单细化渠道注入由 Scripts/inject_channel.sh
生成
- 物理迁移:仓库根 Resources/gamehall.zip / Images.xcassets / Res/
全部 rename 到 docs/res/(git rename detection 自动识别)
|
2026-06-21 22:32:38 +08:00 |
|
joywayer
|
17a8b96cf8
|
docs:依赖管理改为纯 SPM + Vendor,移除 CocoaPods(ADR-006)
调研发现 Qiniu SDK 已官方支持 SPM(https://github.com/qiniu/objc-sdk
v8.9.x),AMap 仍仅支持 CocoaPods 或手动 XCFramework;CocoaPods 1.15.2
不兼容 Xcode 26 的 PBXFileSystemSynchronizedRootGroup,需绕道 Bundler
才能升到 1.16+。综合性价比决定不引入 CocoaPods 工具链,所有闭源 SDK
(含 AMap)统一走 Vendor .xcframework 手动接入。
- Design §14.1 三层策略改写为两层(SPM + Vendor),新增 Vendor 接入
标准流程 6 步法
- Design §14.2 AMap 接入方式从 CocoaPods 改为 Vendor,Qiniu 标注 SPM
URL 与版本
- Plan §2.3 / §5 Phase 5.1 / §6.1 / §8 同步 AMap Vendor 化
- Plan 新增 ADR-006 完整决策记录
- CLAUDE.md 新增「依赖管理约定」节,禁止引入 CocoaPods
|
2026-06-21 21:46:19 +08:00 |
|
joywayer
|
2a3d985dd7
|
调整极光
|
2026-06-21 20:48:41 +08:00 |
|
joywayer
|
d18ea4f1c5
|
新增所需资源,修改优化文档
|
2026-06-21 20:40:46 +08:00 |
|
joywayer
|
4e4290ded6
|
建立 .gitignore,清理误入库的 xcuserdata
- 标准 iOS/Swift 模板:忽略 build/DerivedData/xcuserdata、
SPM .build、CocoaPods Pods/、签名证书、本地敏感配置
- 保留 Package.resolved / Podfile.lock / Vendor/ 入库
以保证多人 + CI 依赖锁定与闭源 SDK 可分发
- 同时把误入库的 xcuserdata/xcschememanagement.plist 从
版本控制移除(本地文件保留)
|
2026-06-21 20:05:21 +08:00 |
|
joywayer
|
7a84223841
|
M0:项目基础配置就绪(横屏锁定、Swift 6、代码启动)
- 锁定 iPhone/iPad 仅横屏(LandscapeLeft/Right),契合 H5 端
1280×720 设计分辨率;UIRequiresFullScreen=true 防 iPad
多任务下方向不锁
- Swift Language Version 升到 6.0(配合已启用的
Approachable Concurrency + MainActor 默认隔离)
- 删除默认 Main.storyboard / ViewController.swift 模板,
改用 SceneDelegate 代码创建 RootViewController 启动,
Build Settings 同步清空 INFOPLIST_KEY_UIMainStoryboardFile
- Info.plist 补齐契约项 UIStatusBarHidden=NO、
UIViewControllerBasedStatusBarAppearance=YES,配合
AppDelegate 启动时设置 applicationSupportsShakeToEdit=true
覆盖契约 §4.2.1 摇一摇前置
- BuildProject 通过验证
|
2026-06-21 20:03:33 +08:00 |
|
joywayer
|
1da2884358
|
CLAUDE.md:新增「及时提交」规则到提交规范
每完成一个可独立验证的工作单元(bug 修复 / 配置变更 /
文档更新 / 依赖升级 / M 里程碑子项)就主动提议提交,
BuildProject 通过 / 关键路径手测通过即立即提议。
理由:项目处于 greenfield 重写阶段,commit 颗粒越小
回滚成本越低;CLAUDE.md / docs 与 git log 一起构成
项目记忆,commit message 是"为什么"的第一现场。
|
2026-06-21 20:03:14 +08:00 |
|
joywayer
|
beb05ab451
|
添加文档和CLAUDE.md
|
2026-06-21 19:39:22 +08:00 |
|
joywayer
|
108b359f96
|
Initial Commit
|
2026-06-21 19:37:33 +08:00 |
|