跳到主要内容
本页目录

排错与 FAQ

先跑 kxbuild doctor;然后按错误消息查安装、工程、签名、设备、发布、插件六类问题,以及日志在哪看。

先运行体检

大多数安装、编译、连接问题都是环境问题。先运行 kxbuild doctor 检查并修复工具链、SDK、CocoaPods、Node 和设备驱动,带上工程路径还会按工程类型准备 Flutter、React Native、Expo、Kotlin Multiplatform 所需的环境。VS Code 中运行 KXBuild: 体检并修复开发环境。

> kxbuild doctor
> kxbuild doctor D:\projects\MyApp -v

-v 输出每一步和子进程的完整日志,求助时附上这份输出最有用。升级 kxbuild 用 kxbuild update,升级后自动再体检一次。排错时不要加 --json,错误说明在普通输出中。

日志位置

内容位置
构建日志VS Code「输出」面板的 KXBuild 通道,命令行在终端。加 -v 查看每条编译命令
编译错误VS Code「问题」面板,点一下跳到源码行
调试器输出「调试控制台」
手机上的日志kxdevice syslog 查看系统日志,kxdevice ostrace 查看 os_log
崩溃报告kxdevice crash
体检详情kxbuild doctor -v

按错误消息查

安装与工具链

kxbuild: command not found / 不是内部或外部命令
原因安装脚本修改了 PATH,当前终端或 VS Code 是安装之前打开的。
处理新开终端,重启 VS Code。仍不行检查安装目录下的 bin 是否在 PATH 中,插件里可以点 KXBuild 视图的「选择已有的安装目录」指定。
Swift 工具链下载中断
原因网络不稳定,工具链约 1 GB。
处理重新执行同一条安装命令,会断点续传。
doctor 报 Swift SDK 和工具链版本不一致
原因手动换过工具链或 SDK。
处理让 doctor 修复,仍不一致则 kxbuild update 后再运行一次。
Windows 上路径相关的错误(文件名过长、找不到文件)
原因没开长路径支持,或工程放得太深。
处理doctor 会开启系统的长路径支持,需要一次管理员授权。工程放到短路径如 D:\proj,React Native 和 Unity 导出的工程尤其要注意。
插件提示工具链版本不匹配 / 请运行 Doctor
原因插件和 kxbuild 只升级了一个。
处理按提示运行体检,或 kxbuild update 后重启 VS Code。

工程与编译

编译时报路径无效
原因给 kxbuild build 传了目录而不是工程文件。
处理路径以 .xcodeproj 或 .xcworkspace 结尾,Swift Package 传含 Package.swift 的目录。
编译报找不到依赖(Pods)
原因构建的是 .xcodeproj,而依赖在 CocoaPods 的工作区中。
处理先 pod install,再构建生成的 .xcworkspace。React Native、Flutter、Cordova 工程都是如此。
拉不到 Swift Package,或编译报找不到包
原因依赖还没解析,或缓存损坏。
处理kxbuild resolve <工程>,仍不行加 --force 重置缓存。
Debug 构建链接时报 undefined symbol: …vpfi
原因开源 Swift 编译器按文件编译时的已知问题。@State private var count = 0 这类带初始值的属性,所在结构体的 init 写在另一个文件里就会出现。远程 Swift Package 默认已经整模块编译,报错的是工程自己的代码或本地包。
处理设置环境变量 KXBUILD_SWIFT_WHOLE_MODULE=all,重开终端或 VS Code 后再构建,所有 Swift 目标都改为整模块编译。只临时试一次可以加 -D KXBUILD_SWIFT_WHOLE_MODULE=all。也可以把 init 移到声明属性的文件里。
Metal shaders (.metal) … need metal, which is not installed on this host
原因工程里有 Metal 着色器,本机没装 Apple 的 Metal 编译器。
处理登录 Apple 账号下载安装 Metal Developer Tools for Windows,见Metal 着色器。
scheme / target "…" not found
原因名字不对,或 scheme 未共享。
处理kxbuild project info <工程> 列出全部 scheme 和 target。Unity 导出的 target 叫 Unity-iPhone。
新建工程时没有模板可选
原因模板组件还没安装。
处理再运行一次 kxbuild doctor。
Run Script 阶段报错(Flutter / RN / KMP)
原因框架自己的工具没准备好,例如 Flutter SDK 没设 FLUTTER_ROOT、Node 依赖没安装、Kotlin/Native 没打补丁、JAVA_HOME 没设置。
处理带工程路径运行 kxbuild doctor <工程目录>,它会补齐这些环境。
代码提示不工作 / 跳转失效
原因compile_commands.json 过期,或 Swift 与 clangd 处理了同一种文件。
处理依次运行「KXBuild: 生成 compile_commands.json」和「KXBuild: 重启代码提示」,仍不行运行「KXBuild: 重建项目索引」。.m .mm .c .cpp 由 clangd 负责,Swift 由 SourceKit-LSP 负责,不要在设置中把 C 系语言加回 SourceKit-LSP。

签名

No signing certificate matching "…" found
原因证书目录中没有工程要求的证书类型或团队不对。
处理放入对应的 .p12,或用 -D CODE_SIGN_IDENTITY=… -D DEVELOPMENT_TEAM=… 改成目录中已有的。
no provisioning profile named "…"
原因工程指定了 PROVISIONING_PROFILE_SPECIFIER,目录中没有同名描述文件。
处理放入同名的 .mobileprovision,或把工程改回自动签名,按 Bundle ID 和团队自动匹配。
证书读不出来 / 口令错误
原因password.properties 中没有这张证书,或文件名不一致。
处理每行一张证书,格式为 文件名.p12=密码,文件名含后缀、区分大小写,密码中的等号或空格照写,不加引号。
编译成功,装到手机失败或装上打不开
原因没有签名,或描述文件中没有这部手机的 UDID,或企业证书没在手机上信任。
处理检查证书目录位置,见证书与签名。把 UDID 加进 Development 描述文件重新下载。企业签名在手机「设置 → 通用 → VPN 与设备管理」中信任。

设备与调试

kxdevice device list 是空的
原因Apple 设备驱动或服务没启动,用的不是数据线,手机没解锁或没信任。
处理运行「KXBuild: 设备诊断」或 kxdevice doctor,换线换口,解锁手机点信任。「Apple 设备」能看到手机,KXBuild 就能看到。
WSL 里看不到设备
原因没经过 Windows 侧中转,或手机被 usbipd 直通到了 WSL。
处理在 WSL 中运行 kxdevice doctor,不要同时用 usbipd 直通。
连不上 instruments / debugserver,或提示开发者模式
原因开发者模式没打开,或开发者镜像没挂载。
处理手机「设置 → 隐私与安全性 → 开发者模式」打开并重启,重新插拔后再按 F5。
断点不停 / 停在汇编上
原因用 Release 配置构建,优化后断点位置对不上,或符号库还没下载完。
处理调试用 Debug 配置,等待符号库下载完成。
App 装上了但一打开就红屏(RN / Expo)
原因手机连不上电脑上的 Metro 开发服务器,是网络问题。
处理手机和电脑在同一网络,Windows 防火墙放行 Metro 端口,见 React Native 页。
Dart 断点打不上(Flutter)
原因没安装 Dart 扩展。
处理安装 Dart-Code.dart-code 后重新调试。

发布

Release 构建没有 .ipa
原因构建的不是应用 target,或加了 --no-ipa。
处理用 -s 指定应用的 scheme。
上传时报 Invalid Bundle / 缺少 SwiftSupport
原因上传的是手工打包的 zip,不是构建生成的 .ipa。
处理直接上传 build\<App>.ipa,它已包含 App Store Connect 要求的结构。

插件

KXBuild 视图提示「本机没有找到 KXBuild 工具链」
原因还没安装工具链,或安装在插件找不到的位置。
处理点视图中的「安装 KXBuild」或「选择已有的安装目录」,安装后重载窗口。详见 安装插件与工具链。
插件提示版本不一致 / 请运行体检
原因插件和 kxbuild 只升级了一个。
处理运行「KXBuild: 体检并修复开发环境」,或在终端执行 kxbuild update。插件本身在扩展视图中更新。
工程设置编辑器变成只读,提示更新
原因kxbuild 版本过旧。
处理kxbuild update,仍只读则更新插件到最新版。

还没解决

把 kxbuild version、kxbuild doctor -v 的输出和出错命令的完整日志一起发到联系我们。能提供工程最好,不方便的话说明工程类型和 iOS 版本。

接下来