Я хочу поддерживать добавление файлов в iCloud в моем приложении iOS. Я хочу, чтобы эти файлы были добавлены в папку на 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>
После Для этого я добавил в приложение функцию iCloud: ![iCloud capability](https://i.stack.imgur.com/NO5gD.png)
Затем я добавил следующий код в свой 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. Но когда я загружаю контейнер приложений и просматриваю его содержимое, я вижу файл, указанный в /AppData/Documents
.
Кто-то еще получил это? И / или кто-то знает, как решить эту проблему?
Спасибо!
Я также изменил номера сборки / версии своего приложения, но безрезультатно