Skip to the content.

PooToolsCodeView

1. 概览

PooToolsCodeView 是该稳定 PTools UI-leaf 模块面向 SwiftPM 的 product 名称。本指南由 canonical 模块 registry 生成,说明 iOS 17+ 与 Swift 6+ 下的稳定使用边界。

2. 要求

3. 安装

Swift Package Manager:

import PooToolsCodeView

CocoaPods:

pod 'PooTools/CodeView'

4. 导入

import PooToolsCodeView

5. 快速开始

SwiftPM 使用 PooToolsCodeView,CocoaPods 使用 PooTools/CodeView。模块支持本地生成、宿主提供文本和宿主提供图片三种显示来源。

6. 核心概念

模块只依赖 PTools Core 边界,不负责下载或解码远程媒体;网络工作由宿主完成,再把文本或图片交给控件显示。

7. 主要 API

本地生成使用 PTCodeView(numberOfCodes:numberOfLines:changeTimes:);changeTimes 是以秒为单位的自动刷新间隔,传入 0 可关闭自动刷新。外部文本使用 setCode(_:),图片使用 setCodeImage(_:),程序化刷新使用 requestRefresh()。外部刷新通过 onRefreshRequested 回调,本地刷新通过 codeBlock 回调。

let codeView = PTCodeView(numberOfCodes: 4, numberOfLines: 3, changeTimes: 0)
codeView.setCode("SERVER-001")
codeView.onRefreshRequested = { view, reason in
    view.setCode("SERVER-002")
}

8. 常见场景

常见场景应保持在本模块分类内,不要复制其他 PTools 模块已经提供的 canonical 实现。

9. 高级用法

只有公开 API 提供 Provider 或策略时才注入;不要访问内部状态,也不要改变 UIKit 的私有所有权。

10. Swift 并发

UI 工作使用 @MainActor。PTCodeRefreshReason 遵守 Sendable,外部回调保持在控件所属 actor。控件离开 window 或应用进入后台时会取消自动刷新。

11. 生命周期

遵守模块的 start/stop、register/unregister 和 Scene 生命周期约定,不要让宿主控制器被不必要地长期持有。

12. 错误处理

显式处理公开错误。可恢复错误应交还宿主,权限和配置失败不能被静默吞掉。

13. 权限 / Entitlement / Info.plist

除非源码暴露平台权限、Entitlement、后台模式或 Info.plist key,否则本模块没有额外配置。

14. 模拟器行为

硬件、通知、后台、音频、相机或扩展宿主在模拟器中的行为可能不同;这些能力必须用真机验证。

15. 无障碍

控件提供名为“刷新验证码”的 VoiceOver 自定义操作,并让图片视图保持不可交互。验证码不适合播报时,宿主应提供合适的无障碍标签。

16. 性能

非 UI 工作不要放到主 actor。按照所属服务限制内存、缓存、媒体和网络资源。

17. 隐私与安全

不要记录 token、Cookie、凭据、隐私 payload 或完整用户输入;敏感数据使用类型化边界。

18. 与其他 PTools 模块集成

优先复用已有 PTools canonical service 和 adapter,不要再创建并行缓存、路由、权限或调度器。

19. 迁移

5.x 期间保留兼容包装器;新代码应使用当前 registry 文档中的 canonical 入口。

20. 问题排查

遇到异常时先检查模块选择、target membership、Scene context、权限、取消状态和生成报告,再修改源码。

21. 示例工程

参见 Example 工程和领域测试 registry 获取可执行覆盖。宿主专属 Entitlement 仍由宿主负责。

22. 相关文档

文档索引 · 架构 · 质量