@ttmg/cli 0.4.4-beta.1 → 0.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -13
- package/dist/index.js +143 -165
- package/dist/index.js.map +1 -1
- package/dist/package.json +4 -2
- package/dist/public/assets/Card-BAsimNoh.js +1 -0
- package/dist/public/assets/Detail-rVxbEDgh.js +1 -0
- package/dist/public/assets/Detail-rVxbEDgh.js.br +0 -0
- package/dist/public/assets/MonetizationMode-B20TAE9o.js +1 -0
- package/dist/public/assets/MonetizationModeSummary-CnHqXyco.js +1 -0
- package/dist/public/assets/{SectionHeader-4yiyPOgU.js → SectionHeader-Cn3FnOqh.js} +1 -1
- package/dist/public/assets/{baseForm-B46NsqNV.js → baseForm-kBTxn8h8.js} +1 -1
- package/dist/public/assets/baseForm-kBTxn8h8.js.br +0 -0
- package/dist/public/assets/{col-DYNqjxgf.js → col-VN3Ivd-x.js} +1 -1
- package/dist/public/assets/{compass-CDbv_4WN.js → compass-BabZVjAl.js} +1 -1
- package/dist/public/assets/{index-orYk2UId.js → index--6iHQzho.js} +1 -1
- package/dist/public/assets/{index-DyFkQnHH.js → index-1WjGwqIV.js} +1 -1
- package/dist/public/assets/index-BFFsJ47B.js +1 -0
- package/dist/public/assets/{index-CjpmMeus.js → index-Ba-JWe4X.js} +1 -1
- package/dist/public/assets/{index-CFIXkzUa.js → index-BjQlJrX7.js} +1 -1
- package/dist/public/assets/index-Bjn0ctEd.js +21 -0
- package/dist/public/assets/index-Bjn0ctEd.js.br +0 -0
- package/dist/public/assets/index-BnOeYQAd.js +1 -0
- package/dist/public/assets/index-BxokHznc.js +1 -0
- package/dist/public/assets/index-BxokHznc.js.br +0 -0
- package/dist/public/assets/{index-FFm0ULGJ.js → index-BxsB5E3u.js} +1 -1
- package/dist/public/assets/index-C83QHLmD.js +1 -0
- package/dist/public/assets/{index-0ZXvsv6N.js → index-CUuX90R9.js} +1 -1
- package/dist/public/assets/{index-BRJFt3oz.css → index-Ckp_mJJy.css} +1 -1
- package/dist/public/assets/index-Ckp_mJJy.css.br +0 -0
- package/dist/public/assets/{index-CLjbrJ-V.js → index-Cl0_vMWE.js} +1 -1
- package/dist/public/assets/index-Cl0_vMWE.js.br +0 -0
- package/dist/public/assets/index-ClU1uQYs.css +1 -0
- package/dist/public/assets/{index-k7bnci5q.js → index-Clq0hTDI.js} +1 -1
- package/dist/public/assets/{index-DM7Cg9s9.css → index-CoYWdJV1.css} +1 -1
- package/dist/public/assets/{index-vdqYVp2k.js → index-CpM8t743.js} +1 -1
- package/dist/public/assets/index-CzXMNZL3.js +1 -0
- package/dist/public/assets/index-DHdJsD10.js +1 -0
- package/dist/public/assets/index-DHdJsD10.js.br +0 -0
- package/dist/public/assets/index-DIcz5ciL.js +1 -0
- package/dist/public/assets/index-DIcz5ciL.js.br +0 -0
- package/dist/public/assets/{index-D7Min-ID.js → index-DK4IvdRl.js} +1 -1
- package/dist/public/assets/{index-BRLaHgvx.js → index-DXDZCuG4.js} +1 -1
- package/dist/public/assets/{index-DZen0tWD.js → index-DnnfZ7H_.js} +1 -1
- package/dist/public/assets/index-Dohibgdp.js +1 -0
- package/dist/public/assets/{index-fYRa-mFF.js → index-DulANwbq.js} +1 -1
- package/dist/public/assets/index-O_L1tU2b.js +1 -0
- package/dist/public/assets/index-O_L1tU2b.js.br +0 -0
- package/dist/public/assets/index-QNLvejKK.js +1 -0
- package/dist/public/assets/index-WyNc-BTG.css +1 -0
- package/dist/public/assets/index-WyNc-BTG.css.br +0 -0
- package/dist/public/assets/index-aSl6Wdrp.js +1 -0
- package/dist/public/assets/index-aSl6Wdrp.js.br +0 -0
- package/dist/public/assets/index-odEI7YQF.js +1 -0
- package/dist/public/assets/index-odEI7YQF.js.br +0 -0
- package/dist/public/assets/{layers-DFzVcSdo.js → layers-B4zhx14P.js} +1 -1
- package/dist/public/assets/{list-checks-sBbjrB9b.js → list-checks-Br6imjXC.js} +1 -1
- package/dist/public/assets/{sparkles-kUOwqZbi.js → sparkles-BjIkcbAi.js} +1 -1
- package/dist/public/assets/{triangle-alert-DEb521qR.js → triangle-alert-CgKAc3w5.js} +1 -1
- package/dist/public/assets/{zap-4GR910dG.js → zap-DFHw5liD.js} +1 -1
- package/dist/public/index.html +2 -2
- package/dist/scripts/docs/render.js +8 -8
- package/dist/scripts/verify-dist-version.js +41 -0
- package/package.json +4 -2
- package/dist/public/assets/Detail-5RBwvI1M.js +0 -1
- package/dist/public/assets/Detail-5RBwvI1M.js.br +0 -0
- package/dist/public/assets/MonetizationMode-BNWhLbH4.js +0 -1
- package/dist/public/assets/MonetizationModeSummary-3IFhpJtg.js +0 -1
- package/dist/public/assets/Tag-BEGC7xBm.js +0 -1
- package/dist/public/assets/baseForm-B46NsqNV.js.br +0 -0
- package/dist/public/assets/index-B51es4GH.js +0 -1
- package/dist/public/assets/index-BRJFt3oz.css.br +0 -0
- package/dist/public/assets/index-BYIujYdU.js +0 -21
- package/dist/public/assets/index-BYIujYdU.js.br +0 -0
- package/dist/public/assets/index-BbwnUecN.js +0 -1
- package/dist/public/assets/index-BbwnUecN.js.br +0 -0
- package/dist/public/assets/index-Bv29rr8X.js +0 -1
- package/dist/public/assets/index-Bv29rr8X.js.br +0 -0
- package/dist/public/assets/index-C4FIEYze.js +0 -1
- package/dist/public/assets/index-CLjbrJ-V.js.br +0 -0
- package/dist/public/assets/index-CMymGpPM.js +0 -1
- package/dist/public/assets/index-D7Ic_K5L.js +0 -1
- package/dist/public/assets/index-DBDUeSB8.css +0 -1
- package/dist/public/assets/index-DBDUeSB8.css.br +0 -0
- package/dist/public/assets/index-De6aUXHS.js +0 -1
- package/dist/public/assets/index-De6aUXHS.js.br +0 -0
- package/dist/public/assets/index-DotB5V_j.js +0 -1
- package/dist/public/assets/index-UhNVLNJV.js +0 -1
- package/dist/public/assets/index-UhNVLNJV.js.br +0 -0
- package/dist/public/assets/index-XHO2ciZ_.js +0 -1
- package/dist/public/assets/index-XHO2ciZ_.js.br +0 -0
- package/dist/public/assets/index-knleXaJV.js +0 -1
- package/dist/public/assets/index-knleXaJV.js.br +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -245,16 +245,6 @@ API 预检建议文案统一收敛,避免重复提示,阅读更清晰
|
|
|
245
245
|
|
|
246
246
|
1. 启动模式新增 `inbox` 场景,支持在调试链路中模拟消息入口启动小游戏。
|
|
247
247
|
|
|
248
|
-
## 0.4.0-beta.1
|
|
249
|
-
|
|
250
|
-
本次测试版本主要补充直玩卡调试与上线链路,并优化能力接入助手体验:
|
|
251
|
-
|
|
252
|
-
1. 能力接入助手的直玩卡联调流程扩展为三个阶段:先调试游戏包本身,再生成预览二维码验证卡面和承接路径,最后管理已验证直玩卡的上线状态。
|
|
253
|
-
2. 阶段三新增「上线 / 下线直玩卡」能力,复用阶段二选中的直玩卡内容,调用平台接口修改直玩卡线上状态。
|
|
254
|
-
3. 阶段三保留卡片名称、Content ID、场景、启动包、Queries 等信息,并单独展示「上线状态」,避免与阶段二「审核状态」混淆。
|
|
255
|
-
4. 已上线卡片会展示「下线直玩卡」操作,未上线卡片展示「上线直玩卡」操作,确认后刷新最新线上状态。
|
|
256
|
-
5. 优化直玩卡调试页面的区块间距,修复操作按钮与信息面板贴得过近的问题。
|
|
257
|
-
|
|
258
248
|
## 0.4.0
|
|
259
249
|
|
|
260
250
|
修复游戏无开发权限时提示信息展示异常的问题,引导更准确。
|
|
@@ -266,12 +256,22 @@ API 预检建议文案统一收敛,避免重复提示,阅读更清晰
|
|
|
266
256
|
1. 上传后的平台处理提示改为更易理解的文案,不再向开发者暴露平台内部状态码及 asset / ready 等技术字段,进度与失败原因表达更清晰。
|
|
267
257
|
2. 重构上传成功卡片布局:二维码与版本信息分区展示并以分隔线区隔,新增成功状态标识,排版更紧凑协调。
|
|
268
258
|
|
|
269
|
-
## 0.4.
|
|
259
|
+
## 0.4.4-beta.1
|
|
260
|
+
|
|
261
|
+
支持版本:TikTok iOS 46.0+、TikTok Android 45.9+。
|
|
270
262
|
|
|
271
263
|
新增子包收集能力:通过真机预览记录启动阶段实际预下载的子包,并生成预加载配置,帮助减少后续资源加载等待。当前仅支持非 Unity 小游戏。
|
|
272
264
|
|
|
273
265
|
使用指南:https://bytedance.my.larkoffice.com/docx/MIyMdmzb0oOQAKxNHGNmR5hDyAh
|
|
274
266
|
|
|
275
|
-
## 0.4.4
|
|
267
|
+
## 0.4.4
|
|
268
|
+
|
|
269
|
+
支持版本:TikTok iOS 46.0+、TikTok Android 45.9+。
|
|
270
|
+
|
|
271
|
+
正式开放子包收集能力:通过真机预览记录启动阶段实际预下载的子包,并生成预加载配置,帮助减少后续资源加载等待。当前仅支持非 Unity 小游戏。
|
|
272
|
+
|
|
273
|
+
子包收集使用指南:https://bytedance.my.larkoffice.com/docx/MIyMdmzb0oOQAKxNHGNmR5hDyAh
|
|
274
|
+
|
|
275
|
+
修复部分企业网络使用非标准局域网网段时,可扫码地址被误判为不可用的问题。
|
|
276
276
|
|
|
277
|
-
|
|
277
|
+
提升本地调试连接稳定性:启动阶段短暂断连会自动恢复,刷新调试页面后可继续使用已连接设备。
|
package/dist/index.js
CHANGED
|
@@ -8726,169 +8726,94 @@ function listen$1() {
|
|
|
8726
8726
|
});
|
|
8727
8727
|
}
|
|
8728
8728
|
|
|
8729
|
-
|
|
8730
|
-
|
|
8731
|
-
|
|
8732
|
-
|
|
8733
|
-
|
|
8734
|
-
|
|
8735
|
-
|
|
8736
|
-
|
|
8737
|
-
|
|
8738
|
-
|
|
8739
|
-
|
|
8740
|
-
|
|
8741
|
-
|
|
8742
|
-
|
|
8743
|
-
|
|
8744
|
-
|
|
8745
|
-
|
|
8746
|
-
|
|
8747
|
-
|
|
8748
|
-
|
|
8749
|
-
|
|
8750
|
-
|
|
8751
|
-
|
|
8752
|
-
|
|
8753
|
-
|
|
8754
|
-
|
|
8755
|
-
|
|
8756
|
-
|
|
8757
|
-
|
|
8758
|
-
|
|
8759
|
-
'
|
|
8760
|
-
|
|
8761
|
-
|
|
8762
|
-
|
|
8763
|
-
|
|
8764
|
-
|
|
8765
|
-
|
|
8766
|
-
|
|
8767
|
-
|
|
8768
|
-
|
|
8769
|
-
|
|
8770
|
-
|
|
8771
|
-
|
|
8772
|
-
|
|
8773
|
-
|
|
8774
|
-
|
|
8775
|
-
|
|
8776
|
-
|
|
8777
|
-
|
|
8778
|
-
|
|
8779
|
-
|
|
8780
|
-
|
|
8781
|
-
|
|
8782
|
-
WIRELESS_KEYWORDS.some(k => lower.includes(k)));
|
|
8783
|
-
}
|
|
8784
|
-
// 判断是否为虚拟/隧道接口
|
|
8785
|
-
function isVirtualInterface(name) {
|
|
8786
|
-
const lower = name.toLowerCase();
|
|
8787
|
-
return VIRTUAL_INTERFACE_KEYWORDS.some(k => lower.includes(k));
|
|
8788
|
-
}
|
|
8789
|
-
// 判断局域网私有 IPv4
|
|
8790
|
-
function isPrivateIPv4(ip) {
|
|
8791
|
-
return (ip.startsWith('10.') ||
|
|
8792
|
-
ip.startsWith('192.168.') ||
|
|
8793
|
-
/^172\.(1[6-9]|2\d|3[01])\./.test(ip));
|
|
8794
|
-
}
|
|
8795
|
-
// 兼容不同 Node 版本中 family 的类型('IPv4' | 4)
|
|
8796
|
-
function isIPv4Family(f) {
|
|
8797
|
-
return f === 4 || f === 'IPv4';
|
|
8798
|
-
}
|
|
8799
|
-
const nets = os.networkInterfaces();
|
|
8800
|
-
const results = [];
|
|
8801
|
-
for (const name of Object.keys(nets)) {
|
|
8802
|
-
const addrs = nets[name] || [];
|
|
8803
|
-
// 先粗略排除明显虚拟接口
|
|
8804
|
-
if (isVirtualInterface(name))
|
|
8729
|
+
const VIRTUAL_INTERFACE_PREFIX = /^(lo\d*|utun\d*|tun\d*|tap\d*|ppp\d*|ipsec\d*|wg\d*|tailscale\d*|zerotier\d*|veth|docker|br-|bridge|vmnet|vbox|anpi|awdl|llw|npf)/i;
|
|
8730
|
+
const VIRTUAL_INTERFACE_KEYWORDS = [
|
|
8731
|
+
'vmware',
|
|
8732
|
+
'virtual',
|
|
8733
|
+
'hyper-v',
|
|
8734
|
+
'vethernet',
|
|
8735
|
+
'anyconnect',
|
|
8736
|
+
'teleport',
|
|
8737
|
+
'npcap',
|
|
8738
|
+
'hamachi',
|
|
8739
|
+
];
|
|
8740
|
+
const WIRELESS_INTERFACE = /^(wl|wlan|wlp|wifi|wi-fi|airport)|无线|无线网络连接/i;
|
|
8741
|
+
const WIRED_INTERFACE = /^(en\d+|enp\w+|eno\w+|ens\w+|eth\w+)$|ethernet|\blan\b|以太网|本地连接/i;
|
|
8742
|
+
function isVirtualInterface(name) {
|
|
8743
|
+
const lowerName = name.toLowerCase();
|
|
8744
|
+
return (VIRTUAL_INTERFACE_PREFIX.test(lowerName) ||
|
|
8745
|
+
VIRTUAL_INTERFACE_KEYWORDS.some(keyword => lowerName.includes(keyword)));
|
|
8746
|
+
}
|
|
8747
|
+
function getInterfaceRank(name) {
|
|
8748
|
+
if (WIRELESS_INTERFACE.test(name))
|
|
8749
|
+
return 0;
|
|
8750
|
+
if (WIRED_INTERFACE.test(name))
|
|
8751
|
+
return 1;
|
|
8752
|
+
return 2;
|
|
8753
|
+
}
|
|
8754
|
+
function isPhysicalInterface(name) {
|
|
8755
|
+
return getInterfaceRank(name) < 2;
|
|
8756
|
+
}
|
|
8757
|
+
function isPrivateIPv4(ip) {
|
|
8758
|
+
return (ip.startsWith('10.') ||
|
|
8759
|
+
ip.startsWith('192.168.') ||
|
|
8760
|
+
/^172\.(1[6-9]|2\d|3[01])\./.test(ip));
|
|
8761
|
+
}
|
|
8762
|
+
function isUsableFallbackIPv4(ip) {
|
|
8763
|
+
const parts = ip.split('.').map(Number);
|
|
8764
|
+
if (parts.length !== 4 ||
|
|
8765
|
+
parts.some(part => !Number.isInteger(part) || part < 0 || part > 255)) {
|
|
8766
|
+
return false;
|
|
8767
|
+
}
|
|
8768
|
+
const [first, second] = parts;
|
|
8769
|
+
return (first !== 0 &&
|
|
8770
|
+
first !== 127 &&
|
|
8771
|
+
first < 224 &&
|
|
8772
|
+
!(first === 169 && second === 254));
|
|
8773
|
+
}
|
|
8774
|
+
function isIPv4Family(family) {
|
|
8775
|
+
return family === 4 || family === 'IPv4';
|
|
8776
|
+
}
|
|
8777
|
+
function selectLocalIPs(nets) {
|
|
8778
|
+
const privateResults = [];
|
|
8779
|
+
const physicalFallbacks = [];
|
|
8780
|
+
for (const [name, addrs] of Object.entries(nets)) {
|
|
8781
|
+
if (!addrs || isVirtualInterface(name) || !isPhysicalInterface(name)) {
|
|
8805
8782
|
continue;
|
|
8806
|
-
|
|
8807
|
-
// 有些系统的命名不标准,允许在地址层面兜底
|
|
8808
|
-
let matchedPhysicalName = isPhysicalInterface(name);
|
|
8783
|
+
}
|
|
8809
8784
|
for (const net of addrs) {
|
|
8810
|
-
if (!isIPv4Family(net.family)
|
|
8785
|
+
if (!isIPv4Family(net.family) ||
|
|
8786
|
+
net.internal ||
|
|
8787
|
+
!net.address) {
|
|
8811
8788
|
continue;
|
|
8812
|
-
if (net.internal)
|
|
8813
|
-
continue;
|
|
8814
|
-
if (!net.address || !isPrivateIPv4(net.address))
|
|
8815
|
-
continue;
|
|
8816
|
-
// 若名称判断不通过,但地址是私有网段、且非回环/非内网,考虑接纳
|
|
8817
|
-
// 但排除明显虚拟(已经在上面过滤 name)
|
|
8818
|
-
if (matchedPhysicalName || shouldAcceptByHeuristic(name, net.address)) {
|
|
8819
|
-
results.push({ name, address: net.address });
|
|
8820
8789
|
}
|
|
8821
|
-
|
|
8822
|
-
|
|
8823
|
-
|
|
8824
|
-
|
|
8825
|
-
|
|
8826
|
-
|
|
8827
|
-
// “有线网段不可达/企业网络隔离”的坑。
|
|
8828
|
-
unique.sort((a, b) => {
|
|
8829
|
-
const rank = (n) => {
|
|
8830
|
-
const lower = n.toLowerCase();
|
|
8831
|
-
if (WIRELESS_KEYWORDS.some(k => lower.includes(k)))
|
|
8832
|
-
return 0;
|
|
8833
|
-
if (WIRED_KEYWORDS.some(k => lower.includes(k)))
|
|
8834
|
-
return 1;
|
|
8835
|
-
return 2;
|
|
8836
|
-
};
|
|
8837
|
-
const ra = rank(a.name);
|
|
8838
|
-
const rb = rank(b.name);
|
|
8839
|
-
if (ra !== rb)
|
|
8840
|
-
return ra - rb;
|
|
8841
|
-
// 同级按名称自然排序
|
|
8842
|
-
return a.name.localeCompare(b.name, undefined, { numeric: true });
|
|
8843
|
-
});
|
|
8844
|
-
return unique.map(item => item.address);
|
|
8845
|
-
// 兜底启发式:如果名字不明显,但常见物理命名模式且 IP 为私网,接受
|
|
8846
|
-
function shouldAcceptByHeuristic(name, ip) {
|
|
8847
|
-
name.toLowerCase();
|
|
8848
|
-
// macOS: en0/en1
|
|
8849
|
-
if (/^en\d+$/i.test(name))
|
|
8850
|
-
return true;
|
|
8851
|
-
// Linux: enpXsY / enoX / wlpXsY
|
|
8852
|
-
if (/^(enp|eno|wlp)\w+$/i.test(name))
|
|
8853
|
-
return true;
|
|
8854
|
-
// Windows: 以太网 / Wi-Fi(非虚拟已过滤)
|
|
8855
|
-
if (/(以太网|本地连接|wi-?fi|无线)/.test(name))
|
|
8856
|
-
return true;
|
|
8857
|
-
return false;
|
|
8858
|
-
}
|
|
8859
|
-
function dedupe(arr) {
|
|
8860
|
-
const seen = new Set();
|
|
8861
|
-
const out = [];
|
|
8862
|
-
for (const item of arr) {
|
|
8863
|
-
const key = `${item.name}|${item.address}`;
|
|
8864
|
-
if (!seen.has(key)) {
|
|
8865
|
-
seen.add(key);
|
|
8866
|
-
out.push(item);
|
|
8790
|
+
const target = isPrivateIPv4(net.address)
|
|
8791
|
+
? privateResults
|
|
8792
|
+
: physicalFallbacks;
|
|
8793
|
+
if (isPrivateIPv4(net.address) ||
|
|
8794
|
+
isUsableFallbackIPv4(net.address)) {
|
|
8795
|
+
target.push({ name, address: net.address });
|
|
8867
8796
|
}
|
|
8868
8797
|
}
|
|
8869
|
-
return out;
|
|
8870
8798
|
}
|
|
8799
|
+
const candidates = privateResults.length > 0 ? privateResults : physicalFallbacks;
|
|
8800
|
+
const seen = new Set();
|
|
8801
|
+
return candidates
|
|
8802
|
+
.sort((a, b) => {
|
|
8803
|
+
const rankDiff = getInterfaceRank(a.name) - getInterfaceRank(b.name);
|
|
8804
|
+
return (rankDiff ||
|
|
8805
|
+
a.name.localeCompare(b.name, undefined, { numeric: true }));
|
|
8806
|
+
})
|
|
8807
|
+
.filter(item => {
|
|
8808
|
+
if (seen.has(item.address))
|
|
8809
|
+
return false;
|
|
8810
|
+
seen.add(item.address);
|
|
8811
|
+
return true;
|
|
8812
|
+
})
|
|
8813
|
+
.map(item => item.address);
|
|
8871
8814
|
}
|
|
8872
|
-
|
|
8873
|
-
|
|
8874
|
-
// 优先使用 getLocalIPs 的过滤 + 排序结果(更适合扫码调试场景)
|
|
8875
|
-
const preferred = getLocalIPs()[0];
|
|
8876
|
-
if (preferred) {
|
|
8877
|
-
return preferred;
|
|
8878
|
-
}
|
|
8879
|
-
const networkInterfaces = os.networkInterfaces();
|
|
8880
|
-
for (const interfaceName in networkInterfaces) {
|
|
8881
|
-
const interfaceInfo = networkInterfaces[interfaceName];
|
|
8882
|
-
if (!interfaceInfo)
|
|
8883
|
-
continue;
|
|
8884
|
-
for (const addressInfo of interfaceInfo) {
|
|
8885
|
-
if (addressInfo.family === 'IPv4' && !addressInfo.internal) {
|
|
8886
|
-
return addressInfo.address;
|
|
8887
|
-
}
|
|
8888
|
-
}
|
|
8889
|
-
}
|
|
8890
|
-
// 极端场景:无可用 IPv4(例如仅有回环/无网络)。避免返回 undefined 破坏 schema。
|
|
8891
|
-
return '127.0.0.1';
|
|
8815
|
+
function getLocalIPs() {
|
|
8816
|
+
return selectLocalIPs(os.networkInterfaces());
|
|
8892
8817
|
}
|
|
8893
8818
|
|
|
8894
8819
|
async function init(options = {}) {
|
|
@@ -9395,6 +9320,8 @@ const gameConfigRoute = {
|
|
|
9395
9320
|
const user = getCurrentUser();
|
|
9396
9321
|
const { clientKey } = getClientKey();
|
|
9397
9322
|
const localLang = getConfiguredLanguage();
|
|
9323
|
+
const localIPs = getLocalIPs();
|
|
9324
|
+
const localHost = localIPs[0] || '127.0.0.1';
|
|
9398
9325
|
res.send({
|
|
9399
9326
|
error: null,
|
|
9400
9327
|
data: {
|
|
@@ -9403,7 +9330,7 @@ const gameConfigRoute = {
|
|
|
9403
9330
|
nodeServerPort: store.getState().nodeServerPort,
|
|
9404
9331
|
nodeWsPort: store.getState().nodeWsPort,
|
|
9405
9332
|
clientKey,
|
|
9406
|
-
schema: `https://www.tiktok.com/ttmg/dev/${clientKey}?host=${
|
|
9333
|
+
schema: `https://www.tiktok.com/ttmg/dev/${clientKey}?host=${localHost}&port=${store.getState().nodeWsPort}&host_list=${encodeURIComponent(JSON.stringify(localIPs))}`,
|
|
9407
9334
|
...basic,
|
|
9408
9335
|
devToolVersion,
|
|
9409
9336
|
checkResult,
|
|
@@ -9466,28 +9393,79 @@ const gameCheckRoute = {
|
|
|
9466
9393
|
|
|
9467
9394
|
const changelog = [
|
|
9468
9395
|
{
|
|
9469
|
-
title: '0.4.
|
|
9396
|
+
title: '0.4.5',
|
|
9470
9397
|
target: {
|
|
9471
|
-
iOS: '>=
|
|
9472
|
-
Android: '>=
|
|
9398
|
+
iOS: '>=46.0',
|
|
9399
|
+
Android: '>=45.9',
|
|
9400
|
+
},
|
|
9401
|
+
changes: {
|
|
9402
|
+
optimize: [
|
|
9403
|
+
{
|
|
9404
|
+
desc: {
|
|
9405
|
+
'zh-CN': '优化调试会话信息展示:开发者选项以独立状态标签呈现,便于快速确认域名校验、vConsole 和开发信息面板的启用状态。',
|
|
9406
|
+
'en-US': 'Improve debugging session details by showing developer options as separate status tags, making it easier to verify domain validation, vConsole, and the developer information panel.',
|
|
9407
|
+
},
|
|
9408
|
+
module: 'devOptions',
|
|
9409
|
+
},
|
|
9410
|
+
{
|
|
9411
|
+
desc: {
|
|
9412
|
+
'zh-CN': '优化扫码网络异常提示:未检测到可用局域网地址时不再展示无效二维码,并引导设置连接地址。',
|
|
9413
|
+
'en-US': 'Improve scan-to-connect network guidance: hide unusable QR codes when no local network address is available and guide developers to set a connection address.',
|
|
9414
|
+
},
|
|
9415
|
+
module: 'scanQrcode',
|
|
9416
|
+
},
|
|
9417
|
+
],
|
|
9418
|
+
bugfix: [
|
|
9419
|
+
{
|
|
9420
|
+
desc: {
|
|
9421
|
+
'zh-CN': '修复子包收集页面在部分环境下无法打开的问题。',
|
|
9422
|
+
'en-US': 'Fix an issue where the Subpackage Collection page could fail to open in some environments.',
|
|
9423
|
+
},
|
|
9424
|
+
module: 'new',
|
|
9425
|
+
},
|
|
9426
|
+
],
|
|
9427
|
+
},
|
|
9428
|
+
},
|
|
9429
|
+
{
|
|
9430
|
+
title: '0.4.4',
|
|
9431
|
+
target: {
|
|
9432
|
+
iOS: '>=46.0',
|
|
9433
|
+
Android: '>=45.9',
|
|
9473
9434
|
},
|
|
9474
9435
|
changes: {
|
|
9475
9436
|
feature: [
|
|
9476
9437
|
{
|
|
9477
9438
|
desc: {
|
|
9478
|
-
'zh-CN': '
|
|
9479
|
-
'en-US': 'Open
|
|
9439
|
+
'zh-CN': '正式开放子包收集能力:通过真机预览记录启动阶段实际预下载的子包,并生成预加载配置,帮助减少后续资源加载等待。当前仅支持非 Unity 小游戏。',
|
|
9440
|
+
'en-US': 'Open Subpackage Collection: use real-device preview to record subpackages downloaded during startup and generate preload configuration, helping reduce subsequent resource loading waits. Currently available for non-Unity mini games only.',
|
|
9480
9441
|
},
|
|
9481
9442
|
module: 'new',
|
|
9443
|
+
link: 'https://bytedance.my.larkoffice.com/docx/MIyMdmzb0oOQAKxNHGNmR5hDyAh',
|
|
9444
|
+
},
|
|
9445
|
+
],
|
|
9446
|
+
bugfix: [
|
|
9447
|
+
{
|
|
9448
|
+
desc: {
|
|
9449
|
+
'zh-CN': '修复部分企业网络使用非标准局域网网段时,可扫码地址被误判为不可用的问题。',
|
|
9450
|
+
'en-US': 'Fix an issue where scannable addresses could be incorrectly reported as unavailable on enterprise networks using non-standard local subnets.',
|
|
9451
|
+
},
|
|
9452
|
+
module: 'scanQrcode',
|
|
9453
|
+
},
|
|
9454
|
+
{
|
|
9455
|
+
desc: {
|
|
9456
|
+
'zh-CN': '提升本地调试连接稳定性:启动阶段短暂断连会自动恢复,刷新调试页面后可继续使用已连接设备。',
|
|
9457
|
+
'en-US': 'Improve local debugging connection stability: recover from transient startup disconnects and retain the connected device after the debugging page is refreshed.',
|
|
9458
|
+
},
|
|
9459
|
+
module: 'scanQrcode',
|
|
9482
9460
|
},
|
|
9483
9461
|
],
|
|
9484
9462
|
},
|
|
9485
9463
|
},
|
|
9486
9464
|
{
|
|
9487
|
-
title: '0.4.
|
|
9465
|
+
title: '0.4.4-beta.1',
|
|
9488
9466
|
target: {
|
|
9489
|
-
iOS: '>=
|
|
9490
|
-
Android: '>=
|
|
9467
|
+
iOS: '>=46.0',
|
|
9468
|
+
Android: '>=45.9',
|
|
9491
9469
|
},
|
|
9492
9470
|
changes: {
|
|
9493
9471
|
feature: [
|
|
@@ -14007,7 +13985,7 @@ async function upload({ clientKey, note = '--', dir, }) {
|
|
|
14007
13985
|
}
|
|
14008
13986
|
}
|
|
14009
13987
|
|
|
14010
|
-
var version = "0.4.
|
|
13988
|
+
var version = "0.4.5";
|
|
14011
13989
|
var pkg = {
|
|
14012
13990
|
version: version};
|
|
14013
13991
|
|