用途
该技能处理一个 macOS 应用签名特有的故障:应用包在用户机器上被报告为“已损坏”而无法打开,而构建机上同一应用却能正常启动。根因是归档解包产生的 ._* 扩展属性伴随文件在签名前进入应用包,随后被系统在文件操作时删除,造成签名密封清单与实际文件不一致。
主要能力
- 在解包预构建或第三方负载后、打包签名前,遍历目标目录删除所有以 ._ 开头的文件,并输出清理数量日志。
- 要求对所有平台的负载无条件执行清理,而非仅对 macOS 负载,因为伴随文件由打包归档的机器产生。
- 提供定位方法:将清理放在把负载解包进待签名树的那个任务里,位于解包之后、打包步骤运行之前。
- 提供验证手段:签名前用 find 检查暂存树中无 ._* 文件;对构建产物执行 codesign --verify --deep --strict --verbose=2;并对归档往返后的副本重复验证与启动测试。
使用方式
在构建脚本中,解包负载到 target 目录后执行类似 Kotlin 的遍历清理:筛选出文件名为 ._ 开头的普通文件并逐个删除,若有删除则记录日志。清理代码必须注释说明这是正确性修复并写明所预防的症状,避免被当作无关注释在整理时删除。
适用场景
- 将第三方或预构建的原生负载解包进 macOS 应用包的构建流水线。
- 在 macOS 上打包的 Linux 或 Windows 负载,同样可能携带这些伴随文件。
- 需要排查“构建机可运行、用户机报损坏”类签名问题的场景。
限制与注意事项
- 签名后再删除伴随文件不能修复问题,反而造成同样故障;清理必须发生在任何签名动作之前。
- 在构建目录直接启动应用无法触发伴随文件删除,不能作为有效测试;必须经过归档或磁盘映像的往返流程。
- 在打包端阻止生成伴随文件不能替代解包时清理,因为负载常由他人在未知设置下构建。
- 伴随文件通常只携带来源属性等内容,但删除前应先用 xattr -l 检查确认没有必须保留的信息;若有,应放入构建输入而非依赖会被系统删除的伴随文件。
- 用户看到的错误信息指向应用本身而非归档,容易被误判为下载损坏或公证问题;区分证据是校验报告缺失的密封资源而非签名无效。
- 原文未提供具体产品定价、平台支持范围或安装命令等信息。