如何从 MacOS 的照片库中获取所有 PHAsset
Posted
技术标签:
【中文标题】如何从 MacOS 的照片库中获取所有 PHAsset【英文标题】:How to get all PHAssets from MacOS's Photo Library 【发布时间】:2017-12-05 11:49:09 【问题描述】:我想使用 PHAsset 解析我的 MacOS 照片库中的所有图像。但是,我发现的所有示例都仅适用于 ios,如下面的示例,其中检索资产的最后一行在 macos 框架上不可用:
NSMutableArray *photos = [[NSMutableArray alloc] init];
PHFetchOptions *allPhotosOptions = [[PHFetchOptions alloc] init];
allPhotosOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]];
// Below compilation error as fetchAssetsWithMediaType is only on iOS framework
PHFetchResult *allPhotos = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:allPhotosOptions];
我应该在 MacOS(10.13 版)上使用什么 fetchAssets 命令,或者有其他方法吗?
【问题讨论】:
【参考方案1】:照片框架——或者至少是该框架的主要子集,它为应用程序提供对整个照片库的读/写访问权限——在 macOS 中不可用。
照片和 PhotosUI 存在于 macOS 中,但仅支持特定的应用扩展功能:
照片编辑扩展。用户在单个资产的编辑模式下从照片应用调用这些,它提供对该资产的照片/视频数据的直接访问,因此它甚至不使用PHAsset
类。
照片项目扩展。这些涉及资产集合并为每个资产选择性地加载数据,因此存在更多PHAsset
/PHImageManager
系统。但是,与 iOS 相比,它仍然是一个缩减的子集(仅是项目扩展所需的内容,例如获取该项目中的资产),并且它只能由应用扩展访问,而不是独立应用。
如果您想要 macOS 上的完整照片框架,最好的选择是file a feature request with Apple。
【讨论】:
【参考方案2】:从 macOS 10.15 Catalina 开始,Photos 和 PhotosUI 框架现在可以在 Mac 上使用,适用于 Catalyst 和 AppKit 应用程序。因此,您现在应该能够将几乎所有使用 PhotoKit 的 iOS 代码转移到您的 Mac 应用程序中,只要它具有 10.15 作为最低系统要求。
【讨论】:
以上是关于如何从 MacOS 的照片库中获取所有 PHAsset的主要内容,如果未能解决你的问题,请参考以下文章