app_appversion 业务语义纠正:审核切换标志 0/1(非版本号)

调研 daoqi/msext NewRootVC.m:1190-1208 initJSdata 发现 app_appversion
真实业务语义是审核切换标志,**不是 App 的版本号**:

  if (远端 ResolvedVersion.appVersion >= 本地 BundleConfig.appVersion) {
      app_gameconfig = BundleConfig.gameConfig;  // 正常业务接口
      app_appversion = '0';                       // 标志:正常
  } else {  // 远端 < 本地(罕见,审核期 / IPA 已升远端未跟上)
      app_gameconfig = BundleConfig.appleConfig; // 苹果审核期接口
      app_appversion = '1';                       // 标志:审核期
  }

H5 端 if (app_appversion === '1') 切苹果审核期分支;99% 时间下都是 '0'
+ gameconfig。

当前代码两处错误:
   app_appversion 写成 "43"(版本号字符串)
   app_gameconfig 永远是 BundleConfig.gameConfig 硬编码

不符合契约(H5 拿到错误标志会走错分支)。按 CLAUDE.md 原则 A 第一准则
必须 1:1 等价 msext。

修复(Source/WebView/AppDataWriter.swift writeAppData):
  - 加 result 计算:localAppVer = Int(bc.appVersion), remoteAppVer =
    resolvedVersion?.appVersion ?? localAppVer;result = remoteAppVer >=
    localAppVer ? 0 : 1
  - 加 gameConfigStr 切换:result == 0 ? bc.gameConfig : bc.appleConfig
  - app_appversion 写字面 '\(result)' 单引号包裹(与 msext "var
    app_appversion='%d';" 等价)
  - Logger 输出加 result 说明 + local/remote 版本号便于调试

Contract §4.2:新增详细业务语义说明段(含 msext 原 ObjC 代码 + result
0/1 含义解读 + app_gameconfig 动态切换说明),修订记录加一行。

Design §7.5.1 表格:#2 app_gameconfig 数据源改为"动态切换",#6
app_appversion 数据源改为"审核切换标志"。

Plan §6.4 里程碑加一行。

BuildProject 通过

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
joywayer
2026-06-22 18:28:08 +08:00
co-authored by Claude Opus 4.7
parent 7c856d0d66
commit 0a313afe8e
4 changed files with 56 additions and 19 deletions
+2 -2
View File
@@ -1991,11 +1991,11 @@ done
| # | 变量名 | 大厅值(NewRootVC| 子游戏值(gameController)| 数据源(新外壳) | 写入文件 |
|---|---|---|---|---|---|
| 1 | `app_version` | `"1"` 硬编码 | `"1"` 硬编码 | 硬编码 string `"1"`(沿用历史,H5 不会读出不同值) | `app_data.js` |
| 2 | `app_gameconfig` | `self.gameconfig` | `self.gameconfig` | `BundleConfig.shared.gameConfig` | `app_data.js` |
| 2 | `app_gameconfig` | `[FuncPublic filename:@"gameconfig"]` `[FuncPublic filename:@"appleconfig"]`(动态切换,见下方)| 同左 | **动态切换**`result==0``BundleConfig.gameConfig` / `result==1``BundleConfig.appleConfig`(详见 #6 app_appversion 计算)| `app_data.js` |
| 3 | `app_gamedir` | `self.gamedir` | `self.gamefilepath` | 大厅 `BundleConfig.shared.gameDir` / 子游戏 `subGameDir` | `app_data.js` |
| 4 | `app_gamestart` | `self.gamestart` | `self.game_name` | 大厅 `BundleConfig.shared.gameStart` / 子游戏 `subGameName` | `app_data.js` |
| 5 | `app_agent` | `self.agentinfo` | `self.agentinfo` | `BundleConfig.shared.agent` | `app_data.js` |
| 6 | `app_appversion` | 远端 `result` 解析后的 appVersion | `self.result_state` | `ResolvedVersion.appVersion``BundleConfig.shared.appVersion`(启动早期 fallback| `app_data.js` |
| 6 | `app_appversion` | `result`(0/1 二值标志,**不是版本号**) | `self.result_state`(同上) | **审核切换标志**msext NewRootVC.m:1190-1208):`远端 ResolvedVersion.appVersion >= 本地 BundleConfig.appVersion``result=0`(正常 gameconfig),否则 `result=1`(审核期 appleconfig)。写入字面 `'0'` / `'1'` 单引号包裹数字(与 msext `'%d'` 等价| `app_data.js` |
| 7 | `app_market` | `self.market` | `self.market` | `BundleConfig.shared.market` | `app_data.js` |
| 8 | `app_channel` | `self.channel_id` | `self.channel_id` | `BundleConfig.shared.channel` | `app_data.js` |
| 9 | `app_Launchtype` | `"0"` 硬编码 | `"1"` 硬编码 | 大厅 `"0"` / 子游戏 `"1"`(⚠️ L 大写) | `app_data.js` |