Skip to the content.

PTools 依赖策略

本策略记录 5.x 后期的依赖边界,目标平台为 iOS 17+、Swift 6+,并同时适用于 SwiftPM、CocoaPods 和 Xcode 工程。

日志依赖边界

PToolsLogging 是 PTools 日志能力的唯一所有者。它只依赖 Foundation 和 Apple 的 OSLog 能力,日志记录通过 PTLogger、PTLogRecord 和类型化 Destination 完成。

当前允许的日志后端:

Core、Network、Media、Debug 和 UI 模块可以依赖 PToolsLogging,但 PToolsLogging 不得依赖 UIKit、Network、媒体模块、Debug UI 或业务模块。

5.22 依赖收口

实现路径中不得加入旧日志依赖名称、旧后端类型或影子编译开关。迁移审计文档可以保留历史名称,用于解释升级原因和回滚边界。

包管理器一致性

SwiftPM 与 CocoaPods 必须同时满足:

  1. Core 通过 PToolsLogging 获取日志能力。
  2. Logging 子模块只声明 Foundation/OSLog 系统框架。
  3. Package.resolved 与 Podfile.lock 不包含已移除的直接日志依赖。
  4. 依赖矩阵、模块矩阵和 VERSION 来源保持一致。
  5. 任何有意的 parity 差异都要登记原因、负责人、期限和 6.0 处理动作。

5.23 Category 依赖收口

5.24 SF Symbols 依赖收口

5.25 富文本依赖收口

5.25.0 从 SwiftPM、CocoaPods、锁文件和生产源码移除 lixiang1994/AttributedString,由 PTRichText 提供基于 Foundation AttributedString 的值模型、UIKit 桥接、安全 Range、匹配和内容替换能力。

富文本核心只保存值、语义属性和 Action ID;点击闭包、异步图片加载和 UIKit 视图由 MainActor 渲染器或显式控件回调管理。不得把 closure、UIView 或第三方富文本类型写入跨 actor 的文本值。历史 API 报告可以保留旧符号以说明迁移,但实现路径、包清单和新增调用不得重新引入该依赖。

Rich text core stores values, semantic attributes, and action IDs only; tap closures, asynchronous images, and UIKit views remain in MainActor renderers or explicit control callbacks. Historical API reports may retain removed symbols for migration context, but implementation paths, manifests, and new call sites must not reintroduce the dependency.

El núcleo de texto enriquecido solo almacena valores, atributos semánticos e identificadores de acción; los cierres, las imágenes asíncronas y las vistas UIKit permanecen en renderizadores MainActor o callbacks explícitos.

新依赖准入

新增依赖前必须说明:

禁止为了兼容历史实现而重新引入已经移除的日志后端。新日志功能必须扩展 PTLogger 或新增符合 PTLogDestination 的 PTools 自有实现。

质量门禁

每次修改依赖或日志入口都必须执行:

门禁失败时只能报告为未完成,不能用第三方依赖错误掩盖 PTools 源码结果,也不能创建未通过验证的发布标签。