Начинающий (?) Вопрос здесь. Я искал StackOverflow и пробовал несколько решений, но не смог решить эту проблему - я не могу ничего сохранить в каталог группы приложений, созданный после добавления возможности групп приложений к цели.
Сохранение работает нормально, когда я пытаюсь записать в каталог Document. И ранее, до перехода на простое сохранение JSON, запись и чтение в группы приложений работали нормально, когда я использовал Core Data.
Прикреплен мой код в одноэлементном классе DataManager:
func getAppGroupURL() -> URL {
if let groupUrl = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.myName.appName") {
print("Group Directory exists.")
return groupUrl.appendingPathComponent("group.com.myName.appName")
} else {
print("Couldn't find directory, reverting to default.")
let appUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
return appUrl
}
}
func saveToJSON(entries: [Entry]) {
let groupURL = DataManager.shared.getAppGroupURL()
let jsonURL = groupURL.appendingPathComponent("entries").appendingPathExtension("json")
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
do {
let jsonData = try encoder.encode(entries)
try jsonData.write(to: jsonURL)
print("Encoded JSON data is:")
print(String(data: jsonData, encoding: .ascii)!)
} catch {
print("Error encoding: " + error.localizedDescription)
}
}
func getFromJSON() -> [Entry]? {
let groupURL = DataManager.shared.getAppGroupURL()
let jsonURL = groupURL.appendingPathComponent("entries").appendingPathExtension("json")
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
decoder.dateDecodingStrategy = .secondsSince1970
do {
let data = try Data(contentsOf: jsonURL)
print("JSON data is: " + String(data: data, encoding: .ascii)!)
let entries = try decoder.decode([Entry].self, from: data)
print("Decoded JSON data is: \(entries)")
return thingItems
} catch {
print("Error decoding: " + error.localizedDescription)
return nil
}
}
Я получаю это сообщение об ошибке, когда пытаюсь использовать функцию saveToJSON или даже функцию createFile (atPath :) FileManager для записи:
Каталог группы существует. Кодировка ошибок: файл «records.json» не существует.
И при попытке использовать функцию getFromJSON для сохранения я получаю: Ошибка декодирования: Не удалось открыть файл «records.json». потому что такого файла нет.
Опять же, все это работает, когда я использую каталог документов по умолчанию, я могу сохранять и читать, но не с каталогом группы приложений ... Я был бы очень признателенесли бы кто-то мог указать, что здесь не так!