用途:构建或审查媒体选择、相机拍摄、照片库查询与图片缓存流程。技术栈为 PhotosUI(PhotosPicker)、PhotoKit(PHPhotoLibrary)与 AVFoundation,目标 Swift 6.3 / iOS 26+。
主要能力:
- 选择器策略:PhotosPicker(SwiftUI)与 PHPickerViewController(UIKit)均为进程外运行、无需权限,适合用户挑选照片/视频;PHPhotoLibrary 直接 API 适合自定义相册、后台同步与资源删除,需 NSPhotoLibraryUsageDescription;AVCaptureSession 适合实时取景与拍照录像,需 NSCameraUsageDescription。标准媒体选择优先用 PhotosPicker。
- 权限:直接访问 PHPhotoLibrary 时请求授权并处理 .limited(可用 presentLimitedLibraryPicker)。Info.plist 需含 NSPhotoLibraryUsageDescription(读写)或 NSPhotoLibraryAddUsageDescription(仅写入保存)。
- 图片加载与缓存:用 PHCachingImageManager 生成网格缩略图;滚动进入时 startCachingImages(for:targetSize:contentMode:options:);PHImageRequestOptions 用 deliveryMode = .opportunistic;滚动移出时取消过期请求。
- 相机边界:AVCaptureSession 会话配置在专用串行后台队列,勿在 @MainActor;beginConfiguration() 配 defer { commitConfiguration() };取景器用 UIViewRepresentable 加 AVCaptureVideoPreviewLayer 嵌入 SwiftUI。
使用方式:按任务路由,选择器配方、相机拍摄模式、图片加载与缓存、格式转换与压缩、AV 播放各有对应参考文档(资料列出章节与参考标题,未提供具体链接与代码全文)。
常见错误:PhotosPicker 足够时仍申请完整相册权限;网格硬编码 .highQualityFormat;在 @MainActor 启动 AVCaptureSession;忽略 .limited;未降采样即同时加载多张全分辨率图。
限制:资料未提供具体价格、平台范围与安装命令;具体接口与代码示例以官方文档为准。