Skip to the content.

PTools 依赖与供应链

本文件描述当前依赖的用途、所有权、风险和替换策略,不绑定某个历史版本。当前版本号和一次 解析结果分别由 PooTools.podspec、Podfile.lock 和 report/current/ 维护;本文件不修改 第三方源码。

安装入口和 6.0 取舍的逐模块事实见 PACKAGE_MATRIX.md 与 DEPENDENCY_MATRIX.md。

Ownership rules

Direct dependency groups

模块 CocoaPods SwiftPM 主要直接依赖 不应直接带入
Logging PooTools/Logging PToolsLogging Foundation、OSLog、文件日志后端 UIKit、Debug UI、外部日志后端、Network、媒体
Core / UIKit Base PooTools/Core ptools PToolsLogging、PToolsUIFoundation、PToolsDevice、SnapKit、IQKeyboardManager、Kingfisher、SmartCodable、KakaJSON、Lottie Network、PhotoKit 浏览器、Debug UI
Overlay PooTools/Overlay PToolsOverlay Core、UIFoundation、Logging Banner 业务、Network、媒体
Banner PooTools/Banner PooToolsBanner Overlay、Symbols、Logging、UIKit Core 反向依赖、第三方通知条
Network PooTools/NetWork PooToolsNetWork Core、Loading、Alamofire PhotoPicker、MediaViewer、VideoEditor
Security PooTools/Security PooToolsSecurity Foundation、CryptoKit、Security.framework Network、Debug UI、业务模块
SocketKit PooTools/SocketKit PooToolsSocketKit Core、SocketRocket(兼容入口) PhotoPicker、VideoEditor
MediaCore PooTools/MediaCore PooToolsMediaCore Foundation-only 值类型和并发契约 UIKit、PhotoKit、Network、Debug
ImagePicker PooTools/ImagePicker PooToolsImagePicker Core、CameraPermission PhotoKit 多选浏览器
PhotoPicker PooTools/PhotoPicker PooToolsPhotoPicker Core、ImagePicker、Network、Loading、Kakapos VideoEditor、MediaViewer
MediaViewer PooTools/MediaViewer PooToolsMediaViewer Core、ProgressBar、Network、PageControl、LivePhoto、Photos ImagePicker、PhotoPicker 浏览器
ImageEditor PooTools/ImageEditor PooToolsImageEditor Core、HarbethKit、PhotoPicker Network 请求层
VideoEditor PooTools/VideoEditor PooToolsVideoEditor Core、HarbethKit、ProgressBar、Loading Network 请求层
ScrollBanner / PageControl PooTools/ScrollBanner、PooTools/PageControl 对应 PooToolsScrollBanner、PooToolsPageControl Core;ScrollBanner 使用 PageControl Network、媒体模块
Search / SearchBar PooTools/Search、PooTools/SearchBar PooToolsSearch、PooToolsSearchBar Search 依赖 Core、SearchBar;富文本使用 Core 提供的 PTRichText Network、媒体和业务数据
Debug PooTools/DEBUG PooToolsDEBUG Core、Network、Share、SearchBar、PDF Core 反向依赖 Debug;生产不隐式启动诊断
Configuration PooTools/Configuration PToolsConfiguration Storage、Foundation Firebase、LaunchDarkly、CloudKit、Core 默认依赖
Feedback PooTools/Feedback PToolsFeedback UIKit、CoreHaptics 具体设备型号表、第三方触觉库
Audio PooTools/Audio PToolsAudio AVFoundation、AudioToolbox 完整音乐播放器、MusicKit、流媒体引擎
AppIntents PooTools/AppIntents PToolsAppIntents RouteCore、AppIntents UIKit window、业务动作执行器
WidgetCore PooTools/WidgetCore PToolsWidgetCore Storage、RouteCore、DeepLink、WidgetKit SwiftUI Widget UI、猜测 App Group
Activities PooTools/Activities PToolsActivities ActivityKit 业务 ActivityAttributes UI、Push Server

ImagePicker 与 PhotoPicker 有意共存:前者负责单媒体系统选择和相机,后者负责多选、编辑、原图、 Live Photo、自定义 Cell 和 iCloud 进度。不要因都能选择图片就合并成一条不清晰的依赖。

5.69.0 起 PhotoPicker 内部按 PTMediaPickerSession、PTMediaSelectionStore、 PTMediaAlbumRepository 和 PTMediaSubmissionCoordinator 分工;PTMediaLibViewController 仍是公开协调入口,PTMediaLibManager 仍是兼容门面。PhotoPicker 继续依赖现有 Core 的 PTMediaRequestCoordinator、PTMediaSaveService、PTMediaCache 和 PTImageDownsampler,不反向依赖 ImageEditor。该模块使用 UIKit/PhotoKit,当前支持边界为 iOS/iPadOS;watchOS、visionOS、macOS 只保留 Core/值类型层评估,不宣称可直接运行 PhotoPicker UI。

5.15.0 的媒体缓存和解码由 Core 提供:PTImageDownsampler 负责 ImageIO 目标像素解码, PTMediaCache 负责 Memory/Disk 变体键和容量维护,PTVideoThumbnailService 负责视频帧生成。 Feature 模块只能使用这些入口,不应重新创建 CGImageSource、视频封面磁盘目录或重复的缓存键。

Third-party inventory

依赖 所属边界 用途 维护风险 替换方向
SwiftDate Core 日期解析和格式化 中 Foundation Calendar / ISO8601
SnapKit Core / UI UIKit 布局 DSL 低至中 原生 NSLayoutConstraint,按模块迁移
PToolsLogging Core / Debug PTLogger、OSLog、文件日志和内存日志 低 PTools 自有实现;不得重新引入外部日志后端
PToolsDevice Core / Foundation 设备身份、目录和动态能力状态 低 Foundation、Apple 公开系统 API
PTRichText Core / UI Foundation Foundation AttributedString 值模型、UIKit 桥接和安全匹配 低 PTools 自有实现;继续收敛 UIKit 与 Foundation 边界
IQKeyboardManager Core / UI 键盘避让兼容 中 keyboardLayoutGuide 和通知
Kingfisher Core / Image 图片缓存和加载 中 PTLoadImageFunction + URLSession/cache
SmartCodable Core / Network 类型化模型解析 中 Foundation Codable 或独立 Serialization
KakaJSON 兼容层 历史动态模型解析 高 只保留兼容包装器,6.0 评估移出 Core
Lottie UI / Debug 动画资源播放 中 UIKit / Core Animation
Alamofire Network 上传、下载和请求适配 中 URLSession 统一执行器
CryptoSwift DataEncrypt 兼容层 历史 AES/DES API 高 PTSecurity 的 CryptoKit/Security.framework 入口
PToolsOverlay / PooToolsBanner UI Scene-aware 浮层基础设施和原生通知条 低 PTools 自有 UIKit 实现
Swift-JWT CheckUpdate Apple API JWT 签名 高 CryptoKit/Security 窄适配器
SocketRocket SocketKit WebSocket 兼容 中 URLSessionWebSocketTask

Fixed revisions

当前已固定的外部 revision:

依赖 URL Revision
SocketRocket https://github.com/robnadin/SocketRocket.git fe86ec01176ea3365ffa2d04a2bb6dd7a9e6c01e

固定 revision 只保证可复现,不等价于上游 release 稳定;升级必须经过构建、API 和运行时回归。

Kitura / JWT boundary

PTCheckUpdateFunction.swift 是仓库内直接使用 Swift-JWT 的生产路径。BlueCryptor、BlueRSA、 BlueECC、LoggerAPI 和 KituraContracts 是传递依赖,不在 PTools Core 重复声明。当前 5.x 保留 JWT 行为;6.0 再评估使用 CryptoKit/Security 的窄范围实现。外部依赖的 Swift 6 诊断属于环境阻断, 不应通过修改 Pods 源码解决。

Codable dual stack

SmartCodable 是当前类型化入口;KakaJSON 只留在 PTBaseModel 和 Network 的历史兼容边界。新 代码不得让 Any 或 KakaJSON 动态结果进入 Swift 6 并发核心执行器。后续可在独立 Serialization feature 中完成迁移,不能在兼容版本中直接删除公开模型。

Rich text boundary

5.25.0 removes the third-party lixiang1994/AttributedString package from SwiftPM, CocoaPods and production source. PTRichText stores the Foundation AttributedString value and exposes an explicit NSAttributedString bridge for UIKit. Search, Base, Button, ScrollBanner, Stepper, PhotoPicker and WhatsNewsKit use this bridge instead of importing a third-party type. Interactive text actions are represented by explicit UI callbacks or PTTextActionRegistry; closures are not stored inside the Sendable text value.

5.25.0 从 SwiftPM、CocoaPods 和生产源码移除 lixiang1994/AttributedString。PTRichText 内部保存 Foundation AttributedString,通过明确的 NSAttributedString 桥接服务 UIKit。 交互行为使用 UI 回调或 PTTextActionRegistry,不把闭包写入 Sendable 富文本值。

Binary and validation

Bugly 等二进制 SDK 必须提供与目标平台匹配的 XCFramework 或 simulator/device slices;缺失产物、 Metal toolchain、签名和链接搜索路径单独记入 report/baselines/。依赖图、module parity、branch 扫描和供应链事实以 report/current/ 为准。