 joywayerandClaude Opus 4.7
|
83d9502dee
|
ADR-009 凭证集中化:AppSecrets.plist + 七牛运行参数走 RemoteConfig.audio_*(契约影响)
【数据流改造(三分制)】
- 微信 AppID 唯一源 = Info.plist CFBundleURLTypes (URLName=weixin first scheme)
- 应用级凭证 唯一源 = AppSecrets.plist (wxAppSecret/qiniuAccessKey/qiniuSecretKey)
- 七牛运行参数 唯一源 = RemoteConfig 顶层 audio_domain / audio_bucket(远端动态注入)
【契约影响】
- ChannelConfig.plist:11 key → 10 key,移除 qiniudomain(ADR-007 守护规则同步)
- BundleConfig:删除 qiniuDomain 属性
- RemoteConfig:顶层新增可选字段 audioDomain / audioBucket(JSON snake_case 自动归一化)
- 启动期:WebContainerViewController parsed 分支校验 audio_domain/audio_bucket 非空,
缺失抛 BootError.audioConfigMissing 弹 modal 永停(与 showmessage 同等致命)
- 上线前置:测试 / 生产远端 .txt 配置必须先补 audio_domain / audio_bucket 两个顶层 key
- WeChatSDK.appID / WeChatAuth.appSecret / QiniuConfig.* 调用方零签名变化
【新增】
- ylgamehall/Resources/AppSecrets.plist(3 key)
- ylgamehall/Source/Resource/AppSecrets.swift(单例加载,对齐 BundleConfig 模式)
- QiniuConfig 改 actor:cdnDomain/bucketName 进 actor 状态 + update(...) async;
accessKey/secretKey 仍 nonisolated(直接读 AppSecrets)
- QiniuTokenSigner.uploadToken() 改 async(bucketName 来自 actor)
- QiniuUploader 预取 cdnDomain 闭包外,SDK 同步 callback 内直接拼 URL
【删除】
- WeChatSDK.swift static let appID 硬编码 → Info.plist 启动期解析
- WeChatAuth.swift static let appSecret 硬编码 → AppSecrets.shared.wxAppSecret
- QiniuConfig 中 accessKey / secretKey / bucketName / cdnDomain 四处硬编码
- ChannelConfig.plist 的 qiniudomain 字段(plist 与代码双源僵尸字段)
【文档同步】
- Plan:新增 ADR-009 + ADR-007 守护规则改 10 key + §236 BundleConfig 描述
- Design §3.4 多处 "11 项" → "10 项";§7.0.3 plist 示例 + BundleConfig 代码骨架
+ Scripts/inject_channel.sh 同步
- SDK-Integration-Guide §0 凭证位置改三分制 + §尾"七牛域名读取"加新外壳路径
- Verification-Checklist L69 "(11 项)" → "(10 项)"
参考契约章节:docs/Development-Plan.md ADR-009、docs/H5-Native-Implementation-Design.md §7.0.3
BuildProject 通过,Xcode 即时诊断 0 警告。
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
2026-06-27 21:07:55 +08:00 |
|
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
|
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 |
|