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:
co-authored by
Claude Opus 4.7
parent
7c856d0d66
commit
0a313afe8e
@@ -93,19 +93,28 @@ public struct AppDataWriter {
|
||||
gameStart = name
|
||||
}
|
||||
|
||||
let appVersion = resolvedVersion?.appVersion.description ?? bc.appVersion
|
||||
// ⚠️ app_appversion 不是 "App 的版本号",而是审核切换标志(参 msext NewRootVC.m:1190-1208):
|
||||
// 远端 ResolvedVersion.appVersion >= 本地 BundleConfig.appVersion
|
||||
// → result = 0,app_gameconfig 取 BundleConfig.gameConfig(正常业务)
|
||||
// 否则(远端 < 本地,罕见,可能审核期 / IPA 已升远端未更新)
|
||||
// → result = 1,app_gameconfig 取 BundleConfig.appleConfig(审核期接口)
|
||||
// app_appversion 写入字面 '0' / '1'(单引号包裹数字,与 msext "var app_appversion='%d';" 等价)
|
||||
let localAppVer = Int(bc.appVersion) ?? 0
|
||||
let remoteAppVer = resolvedVersion?.appVersion ?? localAppVer
|
||||
let result: Int = remoteAppVer >= localAppVer ? 0 : 1
|
||||
let gameConfigStr: String = result == 0 ? bc.gameConfig : bc.appleConfig
|
||||
|
||||
// ⚠️ 严格保持字面(参 docs/H5-Native-Contract.md §4.2 + msext NewRootVC.m:1204):
|
||||
// - 字符串字段单引号包裹(msext "var x='%@';")
|
||||
// - 数值字段无引号(app_version=1 / app_Launchtype=0 / app_getwifisignalLevel=1)
|
||||
// - app_appversion msext 是 %d 形式但传入是 NSString,实际行为同字符串—— 这里转字面串与 msext 等价
|
||||
// - app_appversion 单引号包裹(msext "var app_appversion='%d';",H5 拿到的是字符串 '0' / '1')
|
||||
// - 大小写不能改:app_Launchtype L 大写、app_getwifisignalLevel wifi 小写 + signal/Level 区分
|
||||
//
|
||||
// 声明顺序:5 个关键字段(gameconfig / market / agent / channel / Launchtype)
|
||||
// 提到最前,便于 H5 console 调试时一眼看到核心值;JS var 提升机制下顺序对最终读取
|
||||
// 值无影响,与 msext 行为等价。
|
||||
let lines =
|
||||
"var app_gameconfig='\(escape(bc.gameConfig))';" +
|
||||
"var app_gameconfig='\(escape(gameConfigStr))';" +
|
||||
"var app_market='\(escape(bc.market))';" +
|
||||
"var app_agent='\(escape(bc.agent))';" +
|
||||
"var app_channel='\(escape(bc.channel))';" +
|
||||
@@ -113,7 +122,7 @@ public struct AppDataWriter {
|
||||
"var app_version=1;" +
|
||||
"var app_gamedir='\(escape(gameDir))';" +
|
||||
"var app_gamestart='\(escape(gameStart))';" +
|
||||
"var app_appversion='\(escape(appVersion))';" +
|
||||
"var app_appversion='\(result)';" +
|
||||
"var app_getwifisignalLevel=1;" +
|
||||
"var app_gamename='\(escape(gameName))';" +
|
||||
"var app_invitationcode='\(escape(bc.other))';"
|
||||
@@ -123,7 +132,7 @@ public struct AppDataWriter {
|
||||
|
||||
Self.log.debug("""
|
||||
[\(containerRole.description, privacy: .public)] write app_data.js → \(url.path, privacy: .public)
|
||||
app_gameconfig = '\(bc.gameConfig, privacy: .public)'
|
||||
app_gameconfig = '\(gameConfigStr, privacy: .public)' (result=\(result, privacy: .public))
|
||||
app_market = '\(bc.market, privacy: .public)'
|
||||
app_agent = '\(bc.agent, privacy: .public)'
|
||||
app_channel = '\(bc.channel, privacy: .public)'
|
||||
@@ -131,7 +140,7 @@ public struct AppDataWriter {
|
||||
app_version = 1
|
||||
app_gamedir = '\(gameDir, privacy: .public)'
|
||||
app_gamestart = '\(gameStart, privacy: .public)'
|
||||
app_appversion = '\(appVersion, privacy: .public)'
|
||||
app_appversion = '\(result, privacy: .public)' [审核切换标志,非版本号;local=\(localAppVer, privacy: .public) remote=\(remoteAppVer, privacy: .public)]
|
||||
app_getwifisignalLevel = 1
|
||||
app_gamename = '\(gameName, privacy: .public)'
|
||||
app_invitationcode = '\(bc.other, privacy: .public)'
|
||||
|
||||
Reference in New Issue
Block a user