Skip to content

NoCompile v0.2.9

Choose a tag to compare

@wangwanjie wangwanjie released this 22 Oct 06:39
· 57 commits to c5219fa4f25798a9d3775baca6257eb551f97ce5 since this release

NoCompile 0.2.9

本版本是一次全面的代码审查与加固:修复了连接、日志解析、资源热重载、注入中的多处缺陷,补齐了单元测试,并改进了按芯片分发的安装包。

修复

  • 私有类的改动不生效:private / fileprivate 的 Swift 类,以及开启 -fvisibility=hidden 或 EXPORTED_SYMBOLS_FILE 的工程里的 ObjC 类,改了方法体后注入报「未替换任何实现」。现在改用符号表中的地址定位这些类
  • 真机上修改颜色集(.colorset)必定失败,提示「资源包缺少文件」
  • 名称带设备后缀的资源(如 icon@2x~ipad.png、Main~iphone.xib)保存后不触发热重载
  • 颜色集以 0–255 整数填写分量时颜色错误
  • swiftc -### 输出中单引号包裹的参数(如 -Xcc '-DM=a\b')里的反斜杠被吞掉,宏值被改写
  • 推送途中连接断开时,改动被误记为「已应用」,同一进程重连后不再补推。现在收到 App 回报后才登记
  • Wi-Fi 连接在 Mac 休眠或设备断网后变成半开连接,两端都不会重连。两端已开启 TCP 保活,约 1 分钟内判定断开并自动重连
  • 模拟器 App 刚连上就崩溃等情况下,Mac 端停止接受所有新连接,之后的 App 都连不上
  • 切换工程的瞬间连上的连接不会被关闭、一直占着设备
  • 构建日志解析中途失败(超时、Xcode 正在写入)后被记为已解析,之后一直提示「请先完整构建」
  • 偏好设置在主线程修改、在引擎线程读取的数据竞争,可能导致崩溃
  • tvOS 真机的编译命令被归为未知平台,无法热重载
  • 自定义了带连字符配置名(如 Debug-Staging)的 macOS 工程,资源找不到所属的 bundle
  • 消息中含无法序列化为 JSON 的内容时 App 或 Mac 端崩溃
  • 在主线程发起注入时可能死锁;+load 中用 method_setImplementation / class_replaceMethod 写的 hook 在注入时被重复安装
  • 方法实现的符号被剥离时,新实现可能被写到无关的方法上
  • 真机写入 dylib 失败(存储空间不足)时给出误导性的错误
  • 打开已被移动或删除的最近工程时没有任何提示;恢复默认设置后 DerivedData、排除规则不生效;「登录时自动启动」开关会重复注册 / 注销;系统睡眠唤醒后被误判为主线程卡顿
  • 命令行工具静默忽略拼错的参数,现在报错退出;支持 nocompile <工程路径>、--version,Ctrl+C 时先停止引擎再退出

新功能

  • 注入记录右键「在 Xcode 中打开」,编译失败时直接定位到第一条错误所在的行
  • Mac Catalyst App(实验性):与 macOS App 一样连接本机 NoCompile
  • 在 Apple 芯片的 Mac 上运行 Intel 版时给出提示,检查更新时自动换成 arm64 版本
  • 最近工程菜单标出已不存在的工程,并可一键清空
  • 偏好设置显示当前安装包的架构

分发

  • 每个 Release 额外提供不带版本号的 NoCompile_arm64.dmg / NoCompile_x86_64.dmg,README 中的下载链接始终指向最新版,并附 SHA256SUMS.txt
  • arm64 包中的 Sparkle 等依赖也精简为单一架构,打包时逐个校验所有二进制的架构、客户端 bundle 的完整性与版本
  • Sparkle feed 保留全部历史版本,发布后自动校验下载地址

测试

  • 新增单元测试(swift test):构建日志解析、命令分词、协议帧编解码、构建清单、头文件改动分析、版本号一致性,以及客户端的帧收发、ObjC 方法替换、布局变化保护等

升级提示

  • 客户端修订号没有变化,已编译的 App 仍可正常热重载。要用上客户端侧的修复(私有类、颜色集、Wi-Fi 保活等),请重新编译运行 App;用「拷贝 bundle」方式接入的,确认这次构建执行了 nocompile_copy_bundle.sh

详见 接入指南。

下载

芯片 文件 大小 SHA-256
Apple 芯片(M 系列) NoCompile_v0.2.9_arm64.dmg 3.5M 94ba16555aa57ee48580b6470ed94a6448a3ae17dfd6f45182af347be750cca7
Intel NoCompile_v0.2.9_x86_64.dmg 4.7M 10a62a8db0d6f03cce6d24934028a66ad8c9bb0e18827577fc3eede59237065a

不确定芯片类型:点击屏幕左上角的苹果菜单 → 关于本机,「芯片」一栏显示 Apple M 系列即选 arm64,显示 Intel 即选 x86_64。