【问题标题】:iOS 13 Schedule iOS background tasksiOS 13 安排 iOS 后台任务
【发布时间】:2020-01-30 21:29:00
【问题描述】:

我正在实施 BackgroundTasks 框架来更新数据。但是我遇到了以下问题

Could not schedule refreshApp: Error Domain=BGTaskSchedulerErrorDomain Code=1 "(null)"
Could not schedule data featch: Error Domain=BGTaskSchedulerErrorDomain Code=1 "(null)"
2019-10-01 19:19:32.550320+0530 SOBackgroundTask[34131:1129470] Can't end BackgroundTask: no background task exists with identifier 3 (0x3), or it may have already been ended. Break in UIApplicationEndBackgroundTaskError() to debug.

【问题讨论】:

    标签: ios13 xcode11 swift5.1


    【解决方案1】:

    如果出现BGTaskSchedulerErrorDomain 错误3,下面我没有添加

    <array>
        <string>com.shiny.job</string>
        <string>com.shiny.jobpower</string>
        <string>com.shiny.jobnet</string>
        <string>com.shiny.jobpowernet</string>
    </array>```
    

    【讨论】:

      【解决方案2】:

      解决方案是在设备上运行。我在模拟器上运行。但是,在模拟器上运行时,它显示后台应用刷新已在设置中启用。

      可能还有其他一些原因。请拜访 https://developer.apple.com/documentation/backgroundtasks/bgtaskschedulererrorcode/bgtaskschedulererrorcodeunavailable?language=objc

      【讨论】:

        【解决方案3】:

        根据https://developer.apple.com/documentation/backgroundtasks/bgtaskschedulererrorcode/bgtaskschedulererrorcodeunavailable?language=objc 的说法,这个错误的发生通常有以下三个原因之一:

        • 用户已在设置中禁用后台刷新。
        • 应用在不支持后台的模拟器上运行 处理。
        • 键盘扩展或者没有将 RequestsOpenAccess 设置为 YES Info.plist 文件,或用户未授予开放访问权限。
        • 扩展类型无法安排后台任务。

        【讨论】:

          【解决方案4】:

          我认为这是因为您的手机关闭了 bg 刷新!!!!!!!

          【讨论】:

          • 尽管我正在寻找另一个问题,但你让我很开心。非常感谢!
          【解决方案5】:

          只需检查背景模式是否已添加到目标功能中,并且选择了背景获取和背景处理选项

          【讨论】:

            【解决方案6】:

            为:

            BGTaskSchedulerErrorDomain error 3
            

            在项目的 .xcodeproj 文件中检查适当的目标。然后转到信息选项卡和自定义 iOS 目标属性,并检查是否添加了允许的后台任务计划程序标识符 (BGTaskSchedulerPermittedIdentifiers)。

            这解决了我在将BackgroundTasks 添加到现有项目时遇到的问题。

            【讨论】:

              【解决方案7】:

              请检查您是否错过在项目的 info.plist 文件中注册BGTaskSchedulerPermittedIdentifiers

              【讨论】:

                【解决方案8】:

                我在真机(iOS13.2和iOS13.2.2)上测试过,结果是一样的。

                错误域=BGTaskSchedulerErrorDomain 代码=2 "(null)" 无法结束 BackgroundTask:不存在标识符为 37 (0x25) 的后台任务,或者它可能已经结束。中断 UIApplicationEndBackgroundTaskError() 进行调试。

                错误域=BGTaskSchedulerErrorDomain 代码=1 "(null)" 无法结束 BackgroundTask:不存在标识符为 113 (0x71) 的后台任务,或者它可能已经结束。中断 UIApplicationEndBackgroundTaskError() 进行调试。

                好像还有bug。

                https://forums.developer.apple.com/thread/121990

                【讨论】:

                • 当我运行调试命令时,调度成功,但在真实设备上调度任务时出现相同的错误(代码 1)。 (iOS 13.2.3)
                • @Teo 你是什么意思?在模拟器上成功了吗?在真实设备上失败了?
                • 这已在 iOS 13.4 GM 中修复。
                【解决方案9】:

                以下是从 ObjC 标头中提取的 Domain=BGTaskSchedulerErrorDomain 的可能错误代码,并附有一些解释。

                BGTaskSchedulerErrorCodeUnavailable = 1 // 后台任务调度功能不适用于此应用/扩展。后台应用刷新可能已在“设置”中禁用。

                BGTaskSchedulerErrorCodeTooManyPendingTaskRequests = 2 // 由于该类型的待处理任务请求过多,无法提交任务请求。在重试之前取消一些现有的任务请求。

                BGTaskSchedulerErrorCodeNotPermitted = 3 // 无法提交任务请求,因为UIBackgroundModes数组中没有包含相应的后台模式,或者应用程序的Info.plist的BGTaskSchedulerPermittedIdentifiers数组中不存在其标识符。

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2020-01-28
                • 1970-01-01
                • 2017-10-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多