如何从MacOS的照片库中获取所有PHAsset

时间:2017-12-05 11:49:10

标签: objective-c macos photos phasset

我想使用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命令,还是有其他方法可以这样做?

2 个答案:

答案 0 :(得分:3)

照片框架 - 或者至少是该框架的主要子集,它为应用程序提供对整个照片库的读/写访问权限 - 在macOS中不可用。

照片和PhotosUI存在于macOS中,但仅支持特定的应用扩展功能:

  • 照片编辑扩展程序。用户在处于单一资产的“编辑”模式时从“照片”应用调用这些内容,并且可以直接访问该资产的照片/视频数据,因此它甚至不使用PHAsset类。
  • 照片项目扩展。这些涉及资产集合并有选择地为每个资源加载数据,因此存在更多PHAsset / PHImageManager系统。但是,与iOS相比,它仍然是一个缩小的子集(只有项目扩展所需的内容,比如获取该项目中的资产),并且只能访问应用扩展,而不能访问独立应用。

如果您想在macOS上使用完整的照片框架,最好的选择是file a feature request with Apple

答案 1 :(得分:1)

从macOS 10.15 Catalina开始,Mac和Catalyst和AppKit应用程序现在都可以使用Photos和PhotosUI框架。因此,只要最低系统要求为10.15,您就应该能够将几乎所有使用PhotoKit的iOS代码转移到Mac应用程序上。