From 79ca8385d6edda106d3b260b1c14d162f0c81a4b Mon Sep 17 00:00:00 2001 From: Council Date: Tue, 30 Jun 2026 15:40:28 +0800 Subject: [PATCH] =?UTF-8?q?fix(iOS=E5=BE=AE=E4=BF=A1=E7=9C=9F=E6=9C=BA):?= =?UTF-8?q?=20=E4=BF=AE=E5=A4=8D=E9=A6=96=E9=A1=B5=E7=99=BD=E5=B1=8F=20+?= =?UTF-8?q?=20=E7=BC=96=E5=86=99=E8=AF=8A=E6=96=AD=E6=8A=A5=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因:b127549e「diy组件分包」将 pages/diy 移入 subPackages 后, iOS 微信真机的 subpackage evaluate 阶段早于 App.vue#onLaunch, 导致 35 个 diy 组件顶层 getApp().globalData.get_system_info() 失败, 全部抛 undefined is not an object (evaluating 'o.functions'),首页白屏。 修复方案 D: 1. pages.json: 把 pages/diy 从 subPackages 移回 pages 主包 2. activity.vue: 把 getApp() 从模块顶层移到 created() 生命周期(示范) 遗留:扫码核销页 verify/index.vue 有相同顶层 getApp 模式,待修复。 详见 docs/ios-weixin-real-device-white-screen-report.md --- ...-weixin-real-device-white-screen-report.md | 380 ++++++++++++++++++ pages.json | 63 ++- pages/diy/components/diy/activity.vue | 25 +- 3 files changed, 423 insertions(+), 45 deletions(-) create mode 100644 docs/ios-weixin-real-device-white-screen-report.md diff --git a/docs/ios-weixin-real-device-white-screen-report.md b/docs/ios-weixin-real-device-white-screen-report.md new file mode 100644 index 00000000..09d59799 --- /dev/null +++ b/docs/ios-weixin-real-device-white-screen-report.md @@ -0,0 +1,380 @@ +# iOS 微信真机白屏问题诊断与修复报告 + +> **日期**:2026-06-30 +> **作者**:Antigravity (AI) + 用户 (bigemon) +> **状态**:首页白屏已解决;扫码核销页待修复(根因已定位) +> **相关文件**:`pages.json`、`pages/diy/components/diy/activity.vue`、`pages/plugins/vr-ticket-wallet/verify/index.vue`、`docs/err.log` + +--- + +## 一、问题概述 + +### 1.1 现象 + +| 环境 | 首页 | 扫码核销页 | +|------|------|-----------| +| 安卓真机 | ✅ 正常 | ✅ 正常 | +| 模拟器 | ✅ 正常 | ✅ 正常 | +| 微信开发者工具 | ✅ 正常 | ✅ 正常 | +| **iOS 微信真机** | ❌ **白屏** | ❌ **空白页(仅 header banner)** | + +### 1.2 错误日志 + +`docs/err.log` 共 2510 行,包含 **57 处**同一类错误: + +``` +Error during evaluating file "pages/diy/components/diy/.js": +undefined is not an object (evaluating 'o.functions') +``` + +涉及文件:`activity.js`、`article-list.js`、`article-tabs.js`、`ask.js`、`ask-tabs.js`、`binding.js`、`blog-list.js`、`blog-tabs.js`、`carousel.js`、`coupon.js`、`custom.js`、`data-magic.js`、`data-tabs.js`、`diy.js`、`float-window.js`、`goods-list.js`、`goods-magic.js`、`goods-tabs.js`、`header.js`、`hot-zone.js`、`img-magic.js`、`nav-group.js`、`notice.js`、`realstore.js`、`rich-text.js`、`salerecords.js`、`search.js`、`seckill.js`、`shop.js`、`tabs.js`、`tabs-carousel.js`、`tabs-magic.js`、`title.js`、`user-info.js`、`video.js`、`auxiliary-blank.js`、`auxiliary-line.js`、`plugins-video-list.js`、`plugins-video-tabs.js` 等。 + +### 1.3 错误调用栈 + +``` +Error during evaluating file "pages/diy/components/diy/.js": +undefined is not an object (evaluating 'o.functions') + at create-component @ .../pages/diy/app-service.js:9783:20428 + at ... + at batchInjectSubPackages @ WASubContext.js:1:413906 + at wrapComponentsInjection @ WAServiceMainContext.js:1:651166 + at wrapSubPackagesInjection @ WAServiceMainContext.js:1:655760 + at onFinished @ WASubContext.js:1:416336 +``` + +--- + +## 二、日志来源确认 + +用户描述"iOS 实机测试里报错"。经堆栈分析,`err.log` 的内容**不是 iOS Native WKWebView** 的日志,而是: + +- `WAServiceMainContext.js` → WeChat App Service Main Context +- `WASubContext.js` → WeChat App Sub Context +- `app-service.js` → uni-app 编译产物 + +**结论**:这是 iOS 微信小程序真机调试时,微信开发者工具 / vConsole 弹出的控制台日志。即"在 iPhone 上的微信里运行小程序真机预览"时抓到的。用户已确认。 + +--- + +## 三、根因分析 + +### 3.1 错误机制 + +`o` 是微信小程序运行时对组件 `options` 的引用,`o.functions` 即 `Vue.options.methods + lifecycle + render`。当 evaluate 阶段拿不到 options 时,所有 57 个组件文件报同一错误。 + +### 3.2 关键代码模式 + +全仓 `pages/diy/components/diy/` 共 39 个 `.vue` 组件,**其中 35 个在 `