PhotoKit

义项:苹果照片编辑框架
PhotoKit

PhotoKit是苹果公司为旗下操作系统提供的照片与视频资源访问框架,由Photos和PhotosUI两个框架组合而成。开发者借助它可以读取和修改「照片」应用管理的图像与视频资源,包括iCloud照片和实况照片,也可以管理相簿、瞬间和共享相簿等资源集合,或为「照片」应用编写照片编辑扩展。该框架随iOS 8于2014年推出,取代了此前的Assets Library框架,是iOS、iPadOS、macOS、tvOS、visionOS和watchOS上第三方应用接入系统照片库的主要途径。

目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

PhotoKit是苹果公司提供的框架集合,用于处理「照片」应用所管理的图像和视频资源,涵盖来自iCloud照片和实况照片的内容。按照苹果开发者文档的说明,PhotoKit并非单一框架,而是Photos框架与PhotosUI框架的组合,前者负责照片库的访问与修改,后者负责选择器界面、实况照片显示以及照片编辑扩展的呈现。

开发者通过它既能编辑和显示用户照片,也能管理相簿、瞬间、共享相簿等资源集合,还可实现资源的获取与缓存、变更请求提交、其他应用所做修改的监听,以及可断点续传的资源内容编辑。该框架支持iOS 8.0、iPadOS 8.0、Mac Catalyst 13.1、macOS 10.11、tvOS 10.0、visionOS 1.0和watchOS 10.0及更高版本[1]。

原理

PhotoKit采用与「照片」应用内部模型相对应的对象图。所有对象都继承自抽象基类PHObject,其公共接口只暴露一个本地标识符属性;照片和视频由PHAsset表示,它携带媒体类型、创建日期、位置、是否收藏等元数据[2]。成组的资源称为资源集合,由PHAssetCollection表示,可以是相簿、某个时刻或系统提供的智能相簿;PHCollectionList则表示集合的集合,从而形成「照片—时刻—精选—年度」这样的层级[3]。

取用数据的方式是获取而非枚举:调用PHAsset等类的获取方法并传入PHFetchOptions进行过滤和排序,返回一个PHFetchResult对象,它以类似数组的接口按需加载并缓存内容[2]。真正的图像数据由PHImageManager负责检索或生成,它可按需下载、缩放并缓存图像,PHCachingImageManager作为其子类针对批量预载大量资源做了优化。模型对象本身是只读、不可变的,若要改动需创建对应的变更请求类,例如修改PHAsset要创建PHAssetChangeRequest,再将编辑结果写入PHContentEditingOutput并提交到共享的PHPhotoLibrary[4]。由于可能有多个应用同时操作同一照片库,开发者可以注册观察者,在他人修改元数据或内容时收到PHChange通知并据此刷新界面[4]。

发展历程

在iOS 8之前,开发者访问设备照片库只能依赖Assets Library框架。随着相机与照片应用不断加入按时刻组织照片等新特性,这一旧框架逐渐跟不上节奏[2]。苹果在iOS 8中引入Photos框架,作为Assets Library的替代品,苹果文档也注明后者自iOS 8.0起被弃用,建议改用PhotoKit。

与旧框架相比,PhotoKit的差异集中在三点:以带参数的获取取代遍历枚举,用PHFetchResult统一承载资源与集合,并在返回结果时一并给出此前难以取得的资源元数据[5]。此后苹果持续为该框架补充能力,例如为「照片」应用提供照片选择器、SwiftUI选择器视图与内联选择器等接口,以及面向隐私的权限控制[1]。2025年10月有报道称,iOS 26.1开始PhotoKit将新增名为Background Resource Upload的扩展类型,由系统代为调度网络连接、能耗与执行时机,使照片类应用可在用户切换应用或锁屏时继续向云端上传资源。

应用

PhotoKit最常见的用途是构建自定义图片选择器和照片浏览界面。开发者可以获取系统智能相簿与用户自建相簿,遍历其中的资源,并以缩略图填充网格视图,从而在不导入照片的前提下直接展示和操作设备照片库内容[6]。

编辑是另一类主要场景。应用可以申请资源的编辑输入,借助Core Image等图像处理能力施加滤镜,再把结果作为编辑输出提交回照片库;「照片」应用会为每个资源保存版本信息,并通过PHAdjustmentData记录最近一次编辑的描述,使不同应用之间的编辑可以接续[7]。此外,PhotoKit支持为「照片」应用编写照片编辑扩展,也支持macOS上创建幻灯片放映等工程项目扩展,把第三方功能直接嵌入系统照片应用。在跨平台开发方面,Xamarin.iOS等工具链也对PhotoKit提供了封装,使C#开发者能够查询系统图像库并构建自定义界面[4]。

局限

PhotoKit只能操作由「照片」应用托管的资源。框架不提供对文件系统中任意图片文件的直接读取能力,开发者要处理其他来源的图片需配合其他接口,临时创建的资源集合也不会写入照片库,更不会出现在「照片」应用中[2]。

访问权限受用户控制。应用在读取照片库前必须先获得授权,并需要在信息属性列表中提供用途说明文本,否则无法访问[4]。获取方法返回的PHFetchResult不会随照片库内容变化自动更新,开发者必须注册变更观察者并自行处理更新,否则界面可能与实际数据不一致[2]。新近加入的后台上传扩展同样受限,它并非通用的后台上传接口,而是由系统托管、只能操作PhotoKit资源的机制,其中部分能力在发布时仍处于测试阶段,可能发生变化[8]。

参见

  • 苹果公司 —— PhotoKit的开发者,也是iOS、macOS等系统的提供方。

  • iOS —— PhotoKit自iOS 8起随该系统一同提供。

  • iCloud —— PhotoKit可访问其中的iCloud照片资源。

  • 实况照片 —— PhotoKit支持显示与编辑的一种资源类型。

  • Core Image —— 常与PhotoKit配合用于图像滤镜处理的框架。

  • SwiftUI —— 提供照片选择器视图,与PhotoKit配合使用。

参考资料

  1. PhotoKit | Apple Developer Documentation . apple.com [引用日期2026-10-08]
  2. 照片框架 - Objective-C 期刊 . yonyoucloud.com [引用日期2026-10-08]
  3. < . apple.com [引用日期2026-10-08]
  4. Xamarin.iOS 中的 PhotoKit . microsoft.com [引用日期2026-10-08]
  5. iOS开发照片框架详解(二)-- PhotoKit . tencent.cn [引用日期2026-10-08]
  6. iOS 图片选择打造专属于自己的 ImagePicker . tencent.com.cn [引用日期2026-10-08]
  7. [iOS 8] PhotoKit 1 – Photos frameworkの概要 | DevelopersIO . classmethod.jp [引用日期2026-10-08]
  8. photokit . tencent.com.cn [引用日期2026-10-08]
词条评价
词条统计

浏览次数:3 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-08T11:45:02Z

历史版本

完成率 = 阅读完成量 ÷ 阅读量,分母是阅读量不是浏览次数 —— 关了 JS 的、秒退的都在浏览次数里、不在阅读量里。 详细口径在后台的「数据统计」页。

本条目引用的词条
苹果公司 Core Image 苹果公司 iOS iCloud 实况照片 Core Image SwiftUI
红色的还不存在。红链不是错误——它标出"这个概念被引用了但还没人写"。