ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Omi App iOS 真机 flutter run 正常但脱离调试连接后崩溃怎么排查

Omi App iOS 真机 flutter run 正常但脱离调试连接后崩溃怎么排查 Omi App iOS 真机 flutter run 正常但脱离调试连接后崩溃怎么排查【免费下载链接】FriendAI that sees your screen, listens to your conversations and tells you what to do项目地址: https://gitcode.com/GitHub_Trending/fr/Friend如果你按 App 开发文档 用bash setup.sh ios把 Omi App 的 dev 构建装到真机 iPhone 上会看到一个典型现象flutter run连着时应用一切正常断开调试连接后从主屏幕打开应用应用立刻崩溃或 iOS 因蓝牙/VoIP 在后台把它重新拉起时崩溃。这不是偶发 bug而是 iOS 对 debugJIT构建的限制Omi 仓库的文档和代码里都有明确说明。这篇文章说明如何确认这个现象、它为什么发生以及仓库文档给出的两条解决路径。适用前提macOS Xcode 环境通过app/setup.sh ios打的 dev flavor 构建目标是一台通过 USB 连接的真机 iPhone。先确认是不是这个已知问题对照 docs/doc/developer/AppSetup.mdx 的 Troubleshooting 一节iOS: works under flutter run, crashes when opened from the Home Screen该问题有三个可核对的特征手机崩溃报告crash report结尾是SwiftAwesomeNotificationsPlugin.register(with:)报错为KERN_INVALID_ADDRESS at 0x0。flutter run终端本身会打印error: Unable to flip between RX and RW memory protection on pages应用只有在flutter run附加期间能跑一旦调试连接断开就从主屏幕打不开。另外注意较新的代码已经加了一层保护。当FlutterEngine初始化拿不到 engine 时AppDelegate.swift 不再继续注册插件而是通过 FlutterLaunchEngineGuard.swift 显示一段提示文案。debug 构建下的提示内容是应用名 is a debug build, and iOS only lets Flutter tooling start a debug Dart VM on a device. Launch it again with flutter run, or install a build that opens on its own (from app/): OMI_MOBILE_BUILD_MODEprofile bash setup.sh ios也就是说在带这层 guard 的构建上你可能看到的是这个提示页而不是崩溃——但结论相同这个 debug 构建无法脱离flutter run独立运行仍需按下面的方法处理。原因JIT Dart VM 只能由 Flutter 工具链在真机上启动仓库文档docs/doc/developer/AppSetup.mdx、app/AGENTS.md和 setup.sh 的注释对根因的说明是一致的debug 构建让 Dart VM 以 JIT 模式运行而 iOS 只允许 Flutter 工具即flutter run这条调试连接在真机上启动 JIT Dart VM没有调试连接时FlutterEngine初始化返回 nilstoryboard 里的FlutterViewController没有 engine插件注册时拿到的是 nil registrar第一个 Swift 插件SwiftAwesomeNotificationsPlugin.register解引用时崩溃profile / release 构建是 AOT没有这个限制可以从主屏幕直接打开。setup.sh在 dev debug 构建即将装到真机时也会主动打印警告warn_ios_debug_build_untethered提示你改用OMI_MOBILE_BUILD_MODEprofile bash setup.sh ios。如果你在装包时忽略过这条 ⚠️ 警告基本可以确定就是这个原因。解决路径一推荐安装 AOT 构建让应用自主打开在app/目录下执行OMI_MOBILE_BUILD_MODEprofile bash setup.sh iosOMI_MOBILE_BUILD_MODE只接受debug、profile、release三个值默认debugprofile对应flutter run --profilerelease对应--release见 setup.sh 的mobile_build_mode_flag函数传其他值脚本会直接报错退出。该命令会完整走一遍 setup 流程改写本仓库内app/下的本地开发配置.dev.env、Firebase 预置配置、ios/Flutter/Custom.xcconfig等执行flutter pub get、pod install --repo-update、dart run build_runner build最后以--profile模式flutter run。也就是说它只影响本机的开发配置文件和本地 Pods不会连生产环境本地后端 harness 仍需你自己先启动。副作用profile/release 构建没有 hot reload。文档给出的做法是在flutter run里按d断开调试连接让应用继续独立运行。真机 dev 构建还有一个前置条件否则即使应用能独立打开所有请求也连不上后端在运行setup.sh ios和make dev-up之前把OMI_DEV_HOST设为 Mac 的局域网或 Tailscale 地址并在同一个 shell 中导出让两条命令都看到它。只有私有地址可用LAN 如192.168.x.x或 Tailscale/CGNAT 如100.x.x.x公网地址会被拒绝setup.sh检测到真机 dev flavor 未设置OMI_DEV_HOST时也会打印警告因为此时 dev 后端默认指向127.0.0.1而手机上的127.0.0.1是手机自己。解决路径二可选debug 开发改在 iOS 模拟器上docs/doc/developer/AppSetup.mdx 给出的另一条路模拟器没有 JIT 限制flutter run --flavor dev在模拟器上从主屏幕打开同样可以工作。如果你的目的就是带 hot reload 的 debug 开发这条路径不需要重新打包。手动构建的等价路径可选分支app/README.md 的 Building and Deploying to iPhone 一节给出不用 wrapper 的等价做法适合需要自己控制构建参数时# 在 app/ 目录下且已跑过普通 setup 播种 iOS/Firebase 文件 source setup.sh setup_app_env local_dev $LOCAL_API_BASE_URL scripts/validate_mobile_build_config.sh --flavor dev --profile local_dev flutter build ios --flavor dev --release \ --dart-defineOMI_APP_PROFILElocal_dev \ --dart-defineOMI_API_BASE_URL$LOCAL_API_BASE_URL \ --dart-defineOMI_FIREBASE_AUTH_EMULATOR_HOST$LOCAL_DEV_HOST产物在build/ios/iphoneos/Runner.app文档推荐用ios-deploy安装到已连接的 iPhoneios-deploy --bundle build/ios/iphoneos/Runner.app --debug其中LOCAL_API_BASE_URL、LOCAL_DEV_HOST是setup.sh里基于OMI_DEV_HOST默认127.0.0.1派生的变量。安装后应用即可独立于开发机运行。验证与边界成功的判定以文档描述为准profile或 release构建可以从主屏幕独立打开不再依赖flutter runsetup.sh ios之后也不会再出现debug build 将装到真机的警告因为此时OMI_MOBILE_BUILD_MODE已不是debug。如果独立打开后界面能显示但网络请求全部失败那是另一个已记录的独立问题App cant reach the backend排查方向是make dev-up/make dev-status和OMI_DEV_HOST与本节的 JIT 问题不同。带 guard 的构建上debug 构建脱离flutter run打开时显示的是engine unavailable提示页而不是崩溃提示文案本身就指向OMI_MOBILE_BUILD_MODEprofile bash setup.sh ios这个修复动作。【免费下载链接】FriendAI that sees your screen, listens to your conversations and tells you what to do项目地址: https://gitcode.com/GitHub_Trending/fr/Friend创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表