iOS Swift 3以编程方式将文件复制到iCloud Drive

在我的文件下载选项中。 当用户从我的应用程序下载文档时,我需要将其存储到已安装在移动用户中的iCloud Drive用户。 我已经在网络和Xcode中配置了iCloud,但问题是我无法正确地将文件复制到iCloud Drive。 文件已成功下载,并且它也会移至iCloud,但文件不会出现在iCloud Drive App中。 这是我尝试过的代码:

NSUbiquitousContainers  iCloud.MyAppBundleIdentifier  NSUbiquitousContainerIsDocumentScopePublic  NSUbiquitousContainerName iCloudDriveDemo NSUbiquitousContainerSupportedFolderLevels Any   

这是我的iCloud存储代码:

 func DownloadDocumnt() { print("Selected URL: \(self.SelectedDownloadURL)") let fileURL = URL(string: "\(self.SelectedDownloadURL)")! let documentsUrl:URL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first as URL! let destinationFileUrl = documentsUrl.appendingPathComponent("Libra-\(self.SelectedDownloadFileName)") let sessionConfig = URLSessionConfiguration.default let session = URLSession(configuration: sessionConfig) let request = URLRequest(url:fileURL) let task = session.downloadTask(with: request) { (tempLocalUrl, response, error) in if let tempLocalUrl = tempLocalUrl, error == nil { if let statusCode = (response as? HTTPURLResponse)?.statusCode { print("Successfully downloaded. Status code: \(statusCode)") } do { if(FileManager.default.fileExists(atPath: destinationFileUrl.path)) { try FileManager.default.removeItem(at: destinationFileUrl) try FileManager.default.copyItem(at: tempLocalUrl, to: destinationFileUrl) } else { try FileManager.default.copyItem(at: tempLocalUrl, to: destinationFileUrl) } if let iCloudDocumentsURL = FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents") { if(!FileManager.default.fileExists(atPath: iCloudDocumentsURL.path, isDirectory: nil)) { try FileManager.default.createDirectory(at: iCloudDocumentsURL, withIntermediateDirectories: true, attributes: nil) } } let iCloudDocumentsURL = FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents").appendingPathComponent("Libra-\(self.SelectedDownloadFileName)") if let iCloudDocumentsURL = iCloudDocumentsURL { var isDir:ObjCBool = false if(FileManager.default.fileExists(atPath: iCloudDocumentsURL.path, isDirectory: &isDir)) { try FileManager.default.removeItem(at: iCloudDocumentsURL) try FileManager.default.copyItem(at: tempLocalUrl, to: iCloudDocumentsURL) } else { try FileManager.default.copyItem(at: destinationFileUrl, to: iCloudDocumentsURL) } } } catch (let writeError) { print("Error creating a file \(destinationFileUrl) : \(writeError)") } } else { print("Error took place while downloading a file. Error description"); } } task.resume() } 

遇到此问题时最有用的文章之一是以下链接:

技术问答QA1893更新iCloud Drive的iCloud容器元数据

我也删除并重新添加了我的info.plist条目非常小心。 这似乎是有效的。 我最初复制并粘贴了在线资源中的条目。 似乎键不完全正确或包含一些隐藏的字符,导致它们无法被识别。

在iCloud Drive中启用文档存储

如果文件存储在App的iCloud容器中,则无法直接在iCloud Drive App中查看文件。

  let iCloudDocumentsURL = FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents") 

使用UbiquityContainerIdentifier路径将文件保存到iCloud时,它会将文件保存在App的iCloud容器中。 您应用的容器受到保护,无法直接在iCloud Drive中查看。

但我们可以通过设置 – >点击您的iCloud – > iCloud – > iCloud – >管理存储 – >您的应用名称 – >