以编程方式将资产添加到 iCloud 共享相册

Add assets to an iCloud shared photo album programmatically

使用 PhotoKit 将照片添加到共享的 iCloud 相册有什么限制吗?虽然我可以将新照片添加到作为常规相册的 AssetCollections,但如果 AssetCollection 代表 iCloud 共享相册,它根本不起作用。我还需要添加不同类型的 PHAsset 吗?

如果我将 fetchAssetCollections 调用更改为使用 .albumRegular 而不是 .albumCloudShared,则下面的代码有效。否则我会得到一个错误:

The operation couldn't be completed. (PHPhotosErrorDomain error -1.)

let sharedAlbums = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .albumCloudShared, options: nil)

let target = sharedAlbums.firstObject

PHPhotoLibrary.shared().performChanges({
    let assetChangeRequest = PHAssetChangeRequest.creationRequestForAsset(from: wantedimage)
    let assetPlaceHolder = assetChangeRequest.placeholderForCreatedAsset
    let albumChangeRequestShared = PHAssetCollectionChangeRequest(for: target!)
    let enumeration: NSArray = [assetPlaceHolder!]
    albumChangeRequestShared!.addAssets(enumeration)
}, completionHandler: { result, error in 
    print(result)
    print(error)
    print(error?.localizedDescription)
})


是的,您不能将图像添加到 iCloud 共享相册。

在执行更改请求之前,您应该对 PHAssetCollection 调用 canPerform(_:)

如果您在 albumCloudSharedPHAssetCollectionSubtype 上调用 canPerform(_:),它将 return false。

例如:

    print(collection.canPerform(.createContent)) //false
     
    print(collection.canPerform(.addContent)) //false 

我遇到了同样的问题并通过“反馈”应用程序提交了功能请求。