Swift - 小部件无法访问应用程序组

Posted

技术标签:

【中文标题】Swift - 小部件无法访问应用程序组【英文标题】:Swift - Widget not able to access app group 【发布时间】:2020-10-06 15:44:44 【问题描述】:

我最近一直在尝试制作一个小部件,并希望在我的小部件和我的应用程序之间共享一段数据。

    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 应用组:

主应用、应用组:

【问题讨论】:

【参考方案1】:

我发现了我的问题所在。我不小心选择了签名和功能下的发布选项卡。这导致我的应用程序组在检查发布时出错,从而导致错误发生。 我只需要选择全部并重新添加应用组功能,使其再次工作。

【讨论】:

以上是关于Swift - 小部件无法访问应用程序组的主要内容,如果未能解决你的问题,请参考以下文章

Qt - 无法访问动态创建的 QHBoxLayout 小部件

Android:manifest targetSdkVersion 更改导致:图标不可见,小部件不再工作,并且无法访问数据

如何在页面类型的转换中访问小部件的属性

在 iOS 14 中的主应用程序和小部件之间共享 UserDefaults

访问动态添加的小部件 (pyqt)

QTabWidget 访问实际选项卡(不是内容小部件)