【免费下载链接】kotlin-footgunsBattle-tested agent skills mapping the footguns of Kotlin, Compose Multiplatform and the desktop JVM — mined from a production music app, not from documentation.项目地址https://gitcode.com/gh_mirrors/ko/kotlin-footguns点击查看免费下载kotlin-footguns 是一个从生产级音乐应用中提炼出的 Kotlin 实战技能库收录了 224 个经过战斗检验的 Agent Skills覆盖 Kotlin、Compose Multiplatform 与桌面 JVM 开发的各类暗坑。本文聚焦其中的B 组桌面打包、代码签名与 CI 构建基础设施带你快速读懂 13 个多平台发布路上的经典实战坑让你少走几周的弯路。为什么这套坑位清单值得收藏与大多数按官方文档写的技能库不同kotlin-footguns 的每一条经验都先在真实产品中付过学费——崩溃报告、失败的发布、用户提交的 Issue然后才被写进 skills/ 目录。每个技能都是一个独立的SKILL.md最大篇幅永远是Traps陷阱部分具体的失败方式、机械性的原因、以及在你自己代码里验证失败的命令。完整索引见 CATALOG.mdB 组共 13 个技能正好对应本文的 13 个实战坑#技能一句话概括1conveyor-desktop-packagingHOCON 配置静默吞掉写错位置的键2config-fails-open-verify-artifact对产物而非配置做 A/B 验证3desktop-deep-link-plumbing自定义 URL scheme 的端到端接线4r8-proguard-desktop-survivalR8 瘦身下桌面应用的存活规则5gradle-config-resolved-too-early报错指向了错误的嫌疑人6transitive-version-pinning传递依赖的 strictly 约束偷梁换柱7reproducible-native-bundling-two-tasks原生库捆绑拆成两个任务8windows-vm-detection-post-wmicWin11 移除 wmic 后的 VM 检测9windows-msix-offline-installer自签名 MSIX 的离线安装方案10arm64-native-gap-audit上 ARM64 前先审计原生切片11ci-flaky-timing-luck靠时序运气通过的 CI 步骤12github-actions-multiplatform-release单 Linux 作业交叉编译全平台13buildkonfig-secrets-flavors构建期注入密钥与开源分支一、打包器与配置类坑 1、2、3、13坑 1配置键写错层级构建日志毫无怨言 ⚠️这是 conveyor-desktop-packaging 的核心教训这类声明式打包器读取 HOCON 配置对未知键fails open——不报错、不警告、不提示。把url-schemes写进mac/windows子段解析完全正常但任何平台都不会注册该 scheme而且错误会一直潜伏到你亲手打开构建产物。 心法嵌套层级是键的一部分。每个看起来没效果的键都要在产物里 grep 一次指纹如 Info.plist 里的CFBundleURLSchemes、.desktop里的MimeType并把同样的 grep 接入 CI 作为硬断言。同技能还记录了两个隐蔽陷阱命令行覆盖要用-K点分键值列表值才用方括号打包器的 JDK 来自你构建的 toolchain记得把 CI runner 的 JDK 对齐到同一主版本否则你打包的是一套从未测过的运行时。坑 2验证对象要换成构建产物config-fails-open-verify-artifact 给出了方法论不要对配置做断言要对生成的产物做断言。标准动作是两构建 A/B 差分——只改变键的位置、构建两次、diff 产物中该功能的指纹。键看起来正确、构建全绿、功能却从未被观察到生效正是这个技能要治的病。坑 3深链接只是把窗口带到前台desktop-deep-link-plumbing 处理点击自定义链接后 App 只被唤起、流程却停在原地的问题。要点启动时的argv 过滤必须匹配任意scheme://.desktop文件要写全所有 handler并保留手动粘贴 token 的降级通道单实例场景还要注意链接要能转发给已运行的实例。坑 13开源构建绝不能携带凭据buildkonfig-secrets-flavors 的做法密钥从不入库而是从未跟踪的本地 properties 文件读入经 BuildKonfig 生成编译期常量开源分支拿到空字符串——功能自动禁用而不是构建失败。另外新版 Gradle 对生成源码有隐式任务依赖要求需要显式dependsOn补上否则报错很莫名。二、R8 瘦身与版本治理坑 4、5、6坑 4R8 优化/混淆在桌面端的三大雷区 r8-proguard-desktop-survival 是全文含金量最高的一个技能。桌面 JVM 的类文件校验器严格且运行在加载期UI 层靠反射和名字找渲染后端打包器又从构建输出拼 classpath——这三点决定了桌面的瘦身与移动端完全不同。必须关掉三个优化族返回类型特化、局部变量重分配、方法内联。三者都会在类加载时不是构建时只在瘦身包里炸出校验错误开发运行完全复现不了。混淆破坏按名字解析渲染后端被改名 → 画布/视频表面透明显露桌面动画渲染器被改名 → 区域空白无输出全程无日志无崩溃。能跑但不画东西就是混淆问题的指纹。keep 规则要按族预算JNA 原生绑定、协程运行时整包保留、HTTP 客户端、反射序列化、数据库驱动、ServiceLoader 发现、泛型签名——七族缺一不可。最坑的一点打包插件自动探测的是原始 classpath。瘦身任务的输出必须显式替换它且配置生成任务要dependsOn瘦身任务否则你发布的是没瘦过的包——用安装包体积是否变化来验证覆盖是否生效。 政策只加 keep 规则永不整体关闭 R8。optimize false当临时测试就是临时补丁变成永久配置的起点。坑 5Gradle 报错点名的不是真凶gradle-config-resolved-too-early 处理cannot mutate a configuration after its child configuration was resolved这类错误消息点名的通常是你触碰的 configuration而非过早 resolve 它的插件。解法不是重写那行依赖而是拿一个最小可工作模板做插件二分逐个还原定位真凶。坑 6一个陌生库把共享后端钉到了新版本transitive-version-pinning 记录了一次真实的隔山打牛加了一个玻璃特效 UI 库它对渲染后端声明了strictly约束strict 胜过你的版本、甚至胜过 BOM——编译全绿直到某个动画第一次真正绘制才在新后端已删除的矩阵辅助方法上抛NoSuchMethodError。定位dependencyInsight一条命令给出约束和声明它的模块。决策钉回版本要按作用域论证该平台根本不渲染这个功能钉回零成本并在注释里写明理由防止后人升级回去。三、代码签名与平台陷阱坑 7、8、9、10坑 7原生库捆绑拆成两个家的两个任务reproducible-native-bundling-two-tasks 的架构开发机任务负责构建各架构切片、打 tarball 并打印摘要CI 任务只下载并对齐到构建文件中钉死的摘要校验。这样 CI 不需要原生工具链以为升了版本、实际发的还是旧二进制的静默事故也被摘要校验挡住。坑 8Windows 11 把 wmic 删了windows-vm-detection-post-wmic经典命令查询工具从 Win11 移除检测需改走PowerShell 的 CIM且Manufacturer 与 Model 两个字段都要查更关键的是刻意选择失败方向——透明/无边框窗口在 VM 里进程在、画面没有的故障检测失效时宁可误报也不要漏报。坑 9裸 MSIX 离线装不上windows-msix-offline-installer 的结论打包器输出的安装包清单会去访问 404 的 URL裸包又因自签名证书不受信任而无法双击。用户真正能装的是三文件 zipinstall.bat提权→导入证书→sideloadapp.crt.msix。⚠️ 两个必查点证书是产物不是输入——签名失败而构建仍可能成功zip 里少张证书CI 必须先断言app.crt存在签名密钥跨版本保持稳定否则新包拒绝覆盖旧包。坑 10上 ARM64 前先审计原生切片arm64-native-gap-audit缺一个原生切片不会在打包时失败而是在第一次用到数据库/渲染/媒体层时把整个目标架构打倒。审计要做成对解析产物可重复运行的命令并在每次依赖升级后重跑。配套技能 bundled-native-soname-conflict 还提醒捆绑的原生库会把自己携带的基础库 soname 抢占为整个进程的导致平台 API 报缺符号——加载前先探测 API根治靠排除 SYSTEM_LIBS。四、CI 流水线坑 11、12坑 11绿色了三个月其实是时序运气ci-flaky-timing-luck 抓到两个侥幸通过的步骤同名卷的异步卸载与下一轮挂载相撞下载器把404 错误页当成品存盘。修法捕获工具报告的挂载点而不是猜测下载用curl失败会大声报错而不是静默吞掉错误体的方式。runner 镜像一更新这类步骤立刻现形。坑 12一个 Linux 作业交叉编译全平台 github-actions-multiplatform-release 的流水线设计重作业Linux runner一次产出 Linux 树 双架构 macOS Windows 包薄作业macOS runner只做一件事——把 macOS 应用包进 DMG该工具只随 macOS 分发全程不编译只花几分钟钱。为什么要 DMG同一应用同一签名从压缩包解出比从挂载磁盘镜像拷出受到更严的隔离审查前者弹出开发者无法验证的硬阻断后者只有普通的首次启动提示。CI 侧两大隐形坑外部调用的打包器不触发 Gradle 任务依赖——dependsOn接好的原生切片准备步骤被绕过作业照样成功、装好的安装包却缺原生库一切前置必须写成打包器之前的显式 workflow 步骤另外打包器会清空输出目录分两次调用会把第二次之前暂存的东西吃掉。五、新手落地清单 ✅读完这 13 个坑把它们压成一张可执行的发布前检查表每个无副作用可观察的配置键都在产物里 grep 过一次指纹且进了 CI 断言。瘦身包与安装包在干净机器上跑完文字渲染、动画、透明表面、一次网络请求、开库、原生绑定。macOS 包签名之前清理了._*伴随文件见 macos-codesign-sidecar-strip——签名机上看不到、用户机上应用已损坏的经典案例。原生切片对每个目标架构都有审计记录且 CI 按钉死的摘要校验。Windows 离线安装 zip 里证书存在性有硬断言签名密钥跨版本稳定。CI 中不存在靠时序运气通过的步骤shell 步骤都有set -euo pipefail。每个坑的完整机制、验证命令与修复方案都收录在 skills/ 对应目录的SKILL.md中——文件刻意控制在 60~140 行两分钟可读也适合直接喂给编码 Agent。想按顺序通读全部 224 个技能从 CATALOG.md 的分组索引进入即可。少踩一个坑就是一次没白付的学费。赞分享【免费下载链接】kotlin-footgunsBattle-tested agent skills mapping the footguns of Kotlin, Compose Multiplatform and the desktop JVM — mined from a production music app, not from documentation.项目地址https://gitcode.com/gh_mirrors/ko/kotlin-footguns点击查看免费下载相关推荐holaOS 桌面端Holaboss Local开发与打包实战指南从三栏原型到多平台签名发布holaOS 桌面端Holaboss Local开发与打包实战指南从三栏原型到多平台签名发布 本指南以 apps/desktop/README.md ht人工智能AI AgentAI 应用前端后端即时通讯交互助手工具调用MCP ClientsDLSS 切换终极指南9 种画质 DLL、8 大游戏库不更新游戏自由升降级版本DLSS 切换终极指南9 种画质 DLL、8 大游戏库不更新游戏自由升降级版本 DLSS Swapper 是一款开源的 DLL 切换工具专为 Window桌面应用Happy 桌面端 Tauri 打包与跨平台发布指南从本地构建到签名分发Happy 桌面端 Tauri 打包与跨平台发布指南从本地构建到签名分发 本篇技术指南以仓库内 docs/plans/tauri desktop packag人工智能AI AgentAI 应用移动开发CLI后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考 SEO 优化官网定制响应式建站教育培训建站