CloudKit - 将 CKAsset 与包文件一起使用

CloudKit - using CKAsset with package files

我正在尝试使用 CKAssets 将我的应用程序中的文件存储到 CloudKit 中。一切正常,使用 CKRecord + CKAsset 上传和下载工作正常,除了一些文件类型,包括 Numbers、Keynote 和 Pages 文档。当我尝试将这些保存到 CloudKit 时,出现以下错误:

CKOperationBase error = <CKError 0x12ddeece0: "Partial Failure" (2/1011); "Failed to modify some records"; partial errors: {
  FileAttachments.169DBAC2-8A14-43F0-9F5A-F851E7FF623B:(CJCloudKitPrivateZoneName:__defaultOwner__) = <CKError 0x12f05dcc0: "Invalid Arguments" (12/1017); "Not a regular file">

我的猜测是,这与文件 'package files' 有关...即在它们下面隐藏了一个子目录,您可以在使用 "Show Package Contacts".[=12= 时看到该子目录]

这种情况下,我应该如何上传文件到CloudKit?是否有任何 API 可以检测这些 'package files',并将它们压缩成可以导出的格式?如果我不能在一台设备上上传 Keynote 文档并通过我自己的应用程序在另一台设备上访问它(作为 Keynote 文档),那将是非常令人失望的。

这里没有神奇的解决方案,您必须自己压缩和解压缩包。

在此处找到解决方案:

基本上,使用 NSFileCoordinatorNSFileCoordinatorReadingForUploading 选项是关键...如果需要,这会压缩文件,您可以将 newURL 从块传递到 CKAsset 中,然后它工作正常。在找到此解决方案之前,我正在使用 NSFileCoordinatorReadingWithoutChanges