Недавно я пытался создать виджет и хотел поделиться частью данных между моим виджетом и моим приложением.
статический varsharedDataFileURL: URL { let appGroupIdentifier = "group.com.unknownstudios.yk" Guard let url = FileManager.default.containerURL (forSecurityApplicationGroupIdentifier: appGroupIdentifier) else { preconditionFailure("Ожидается действительный контейнер группы приложений") } вернуть url.appendingPathComponent("userID.plist") } Приведенный выше код отлично работает в моем приложении, но когда я запускаю его в своем виджете, я получаю следующий результат. Я проверил, что группа приложений правильна и активна как в приложении iOS, так и в виджете.
[не указано]Container_create_or_lookup_path_for_platform: клиент не имеет прав [не указано]Container_create_or_lookup_app_group_path_by_app_group_identifier: клиент не имеет прав Неустранимая ошибка: ожидается действительный контейнер группы приложений: файл WidgetExtension/Library.swift, строка 143. Изменить:
Я также пытался использовать UserDefaults, но они тоже не работают.
Следующим образом я использую FileManager и UserDefaults
UserDefaults(suiteName: "group.com.unknownstudios.yk")!.set("**USERID**", forKey: "userID") let data = Data("**USERID**".utf8) делать { попробуйте data.write(to: URL.sharedDataFileURL, параметры: .atomic) } ловить { печать (error.localizedDescription) } И вот как я пытаюсь прочитать данные из виджета:
var userID: String? "=" if let userid = UserDefaults(suiteName: "group.com.unknownstudios.yk")!.string(forKey: "userID") { печать (идентификатор пользователя) вернуть идентификатор пользователя } else if let url = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.unknownstudios.yk") { если позволить данным = попробовать? Data(contentsOf: url.appendingPathComponent("userID.plist")), let string = String(data: data,coding: .utf8) { возвращаемая строка } } вернуть ноль }() Группы приложений WidgetExtension:

Основное приложение, группы приложений:

Мобильная версия