我想支持在我的iOS应用程序中将文件添加到iCloud。我希望将这些文件添加到iCloud Drive上的文件夹(例如,Numbers或Pages文件夹)。我尝试了我在网上找到的有关该主题的所有内容,但没有设法将文件夹添加到iCloud Drive。
首先,我将NSUbiquitousContainers
添加到了info.plist
<key>NSUbiquitousContainers</key>
<dict>
<key>iCloud.com.<xyz>.AppName</key>
<dict>
<key>NSUbiquitousContainerIsDocumentScopePublic</key>
<true/>
<key>NSUbiquitousContainerName</key>
<string>App Name</string>
<key>NSUbiquitousContainerSupportedFolderLevels</key>
<string>Any</string>
</dict>
</dict>
然后,我在ViewController中添加了以下代码:
if let iCloudDocumentsURL = FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents") {
if (!FileManager.default.fileExists(atPath: iCloudDocumentsURL.path, isDirectory: nil)) {
do {
try FileManager.default.createDirectory(at: iCloudDocumentsURL, withIntermediateDirectories: true, attributes: nil)
} catch {
print(error.localizedDescription)
}
}
}
注意:设置断点后,我发现if (!FileManager.default.fileExists(atPath: iCloudDocumentsURL.path, isDirectory: nil)) {
之后的代码永远不会被调用。我暂时删除了这一行,但这没有做任何事情。
最后,我使用以下代码添加了文件:
//Save text file to local directory
let file = "file.txt" //Text file to save to iCloud
let text = "sample text" //Text to write into the file
func saveToDirectory(){
guard let directory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { return }
let fileURL = directory.appendingPathComponent(file)
print(directory)
//Writing
do {
try text.write(to: fileURL, atomically: false, encoding: .utf8)
} catch {
/* error handling here */
print("Error in writing")
}
//Reading
do {
let getText = try String(contentsOf: fileURL, encoding: .utf8)
print(getText)
} catch {
/* error handling here */
print("Error in reading")
}
}
我看不到应用程序的文件夹,或者以上文件显示在我的iCloud驱动器上。但是,当我下载apps容器并查看其内容时,我看到/AppData/Documents
下列出的文件。
其他人得到了这个吗?和/或有人知道如何解决吗?
谢谢!
我还更改了应用程序的内部版本号,但没有任何结果
您应该将文件复制到iCloud容器,仅将其写入应用程序沙箱。
首先,在iCloud容器上创建Documents
文件夹-如果将文件存储在其他文件夹中,则另一台设备上的应用程序将看到该文件夹,但不会出现在“文件”应用程序中。
然后将您的file.txt复制到iCloud容器上的Documents
文件夹中。