You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编程将视频保存至Photos指定相册 解决iCloud同步后Mac端相册归属异常

根因说明

该问题的核心原因是你获取的原视频所属相册为系统智能相册,这类相册的资产归属规则由系统自动维护,你通过API手动添加资产到智能相册的操作仅会在本地iOS设备生效,对应变更不会同步到iCloud,因此Mac端无法识别到该归属关系,只能在所有资源列表中找到压缩后的视频。

修复方案

1. 调整相册查询逻辑,仅查询用户自定义相册

修改步骤3.1的代码,明确指定查询类型为用户手动创建的自定义相册,排除系统智能相册:

let fetchOptions = PHFetchOptions()
// with参数传入.album,仅查询用户创建的自定义相册,排除系统智能相册
let collection = PHAssetCollection.fetchAssetCollectionsContaining(fileAsset, with: .album, options: fetchOptions)
// 先做空判断,避免崩溃
guard let assetCollection = collection.firstObject else {
    // 若原视频不在任何自定义相册,可自行补充降级逻辑,比如存到默认创建的压缩视频相册
    return
}

2. 优化资源创建参数,确保同步生效

修改步骤3.2的资源创建请求,显式声明资源可同步:

let creationRequest = PHAssetCreationRequest.forAsset()
let resourceOptions = PHAssetResourceCreationOptions()
resourceOptions.shouldMoveFile = false
creationRequest.addResource(with: .video, fileURL: videoURL, options: resourceOptions)

3. 确保所有变更操作都包裹在PhotoLibrary变更闭包中

确认你的步骤3.2、3.3的代码都放在PHPhotoLibrary.shared().performChanges闭包内,所有变更操作完成后再触发iCloud同步:

PHPhotoLibrary.shared().performChanges {
    // 此处放置你的步骤3.2、3.3代码
} completionHandler: { success, error in
    if let error = error {
        print("相册操作失败: \(error.localizedDescription)")
        return
    }
    // 操作成功后可延迟1秒刷新图库状态,触发iCloud同步
    DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
        PHPhotoLibrary.shared().performChanges({}) { _, _ in }
    }
}

验证方法

修改完成后重新测试:

  • iOS端完成操作后,等待2-3分钟待iCloud同步完成
  • 打开Mac端照片App,查看对应自定义相册,即可看到压缩后的视频已经出现在目标相册中

内容的提问来源于stack exchange,提问作者Phong Đằng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 06:54:03