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 个键值
  完整
This commit is contained in:
joywayer
2026-06-21 23:41:25 +08:00
parent cabdc1ed42
commit 8c2ffa3106
4 changed files with 180 additions and 43 deletions
+56
View File
@@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<!--
渠道注入配置(母包默认值,沿用 msext 现网)
设计模式:母包 + IPA 后处理
详见 docs/H5-Native-Implementation-Design.md §7
docs/H5-Native-Contract.md §0.3
docs/Development-Plan.md ADR-007
渠道分发不重新 Xcode build,按以下脚本修改本 plist + 重签 + 重打包:
plutil -replace channel -string "<新渠道 ID>" ChannelConfig.plist
plutil -replace market -string "<新市场 ID>" ChannelConfig.plist
codesign --force --sign "$IDENTITY" --entitlements "$ENT" <app>.app
zip -r <channel>.ipa Payload/
契约:11 个 key 名严格固定,与 msext 的 11 个目录名一一对应(H5 通过
app_data.js 间接读,看不到存储介质差异)。
-->
<key>qiniudomain</key>
<string>iosaudio.daoqi88.cn</string>
<key>gameid</key>
<string>G2hw0ubng0zcoI0r4mx3H2yr4GejidwO</string>
<key>channel</key>
<string>FtJf073aa0d6rI1xD8J1Y42fINTm0ziK</string>
<key>gamedir</key>
<string>FtJf073aa0d6rI1xD8J1Y42fINTm0ziK</string>
<key>gamestart</key>
<string>gamehall</string>
<key>gameconfig</key>
<string>tsgames.daoqi88.cn-config_test-update_jsonv2_test</string>
<key>market</key>
<string>2</string>
<key>agent</key>
<string>veRa0qrBf0df2K1G4de2tgfmVxB2jxpv</string>
<key>appversion</key>
<string>43</string>
<key>other</key>
<string></string>
<key>appleconfig</key>
<string></string>
</dict>
</plist>