В последнее время я пытался создать виджет и хотел поделиться фрагментом данных между моим виджетом и моим приложением.
static var sharedDataFileURL: URL {
let appGroupIdentifier = "group.com.unknownstudios.yk"
guard let url = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: appGroupIdentifier)
else { preconditionFailure("Expected a valid app group container") }
return url.appendingPathComponent("userID.plist")
}
Приведенный выше код отлично работает в моем приложении, но когда я запускаю его в своем виджете, он дает мне следующий результат. Я проверил, что группа приложений верна и активна как в приложении iOS, так и в виджете.
[unspecified] container_create_or_lookup_path_for_platform: client is not entitled
[unspecified] container_create_or_lookup_app_group_path_by_app_group_identifier: client is not entitled
Fatal error: Expected a valid app group container: file WidgetExtension/Library.swift, line 143
Изменить:
Я также пробовал использовать UserDefaults, но они тоже не работают.
Вот как я использую FileManager и UserDefaults.
UserDefaults(suiteName: "group.com.unknownstudios.yk")!.set("**USERID**", forKey: "userID")
let data = Data("**USERID**".utf8)
do {
try data.write(to: URL.sharedDataFileURL, options: .atomic)
} catch {
print(error.localizedDescription)
}
И вот как я пытаюсь прочитать данные из виджета:
var userID: String? = {
if let userid = UserDefaults(suiteName: "group.com.unknownstudios.yk")!.string(forKey: "userID") {
print(userid)
return userid
} else if let url = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.unknownstudios.yk") {
if let data = try? Data(contentsOf: url.appendingPathComponent("userID.plist")), let string = String(data: data, encoding: .utf8) {
return string
}
}
return nil
}()
Группы приложений WidgetExtension:
Основное приложение, группы приложений:
Я выяснил, в чем была моя проблема. Я случайно выбрал вкладку выпуска в разделе «Подпись и возможности». Это привело к тому, что моя группа приложений ошиблась при проверке выпуска, что привело к возникновению ошибки. Мне просто нужно было выбрать «Все» и повторно добавить возможность групп приложений, которая снова заработала.