Ios 后台提取在实际设备上不起作用

Ios 后台提取在实际设备上不起作用,ios,swift,ios-background-mode,Ios,Swift,Ios Background Mode,请帮忙提建议。出于某种原因,在真正的iOS设备上进行后台提取不起作用。当运行Xcode(Debug->Sumulate Background Fetch)时,一切正常。但是,当我在真实设备上安装应用程序时,此功能不起作用 我将澄清以下几点: 我不会终止应用程序,只是将其最小化 Background App Refresh设置在应用程序的设置和整个手机的设置中均已启用 我等了一天多,什么也没发生 在我看来,原因是什么: 我通过TestFlight在iPhone上运行该应用程序 iPhone上没有安

请帮忙提建议。出于某种原因,在真正的iOS设备上进行后台提取不起作用。当运行Xcode(
Debug->Sumulate Background Fetch
)时,一切正常。但是,当我在真实设备上安装应用程序时,此功能不起作用

我将澄清以下几点:

  • 我不会终止应用程序,只是将其最小化
  • Background App Refresh
    设置在应用程序的设置和整个手机的设置中均已启用
  • 我等了一天多,什么也没发生
  • 在我看来,原因是什么:

  • 我通过
    TestFlight
    在iPhone上运行该应用程序
  • iPhone上没有安装SIM卡
  • 在我的应用程序中,
    AppDelegate
    文件的标准名称更改为
    BaseDelegate
    ,其位置从
    MyApp/MyApp/AppDelegate.swift
    更改为
    MyApp/MyApp/base/BaseDelegate.swift
    (该应用程序已正确配置此文件的新名称和位置)。 它能以某种方式影响吗
  • 我所做的:

  • 我在项目设置中打开了
    后台提取
    模式
  • 我将以下代码添加到
    info.plist

  • 为了测试这个应用程序,我发送了一个本地通知,还用UserDefaults节省了时间。

    一大堆问题:1。您可以再次检查以确保SIM卡的缺失没有将此设置为除
    .available
    之外的其他设置。也许可以使用选项登录
    didfishlaunchingwithoptions
    ,这将确保您的应用程序代理正在被调用,并且状态与您认为的状态相同。2.我假设设备已连接到电源和wifi?3。我假设只有在异步网络活动完成后才调用完成处理程序?您的代码片段看起来就像是您立即调用它(一旦您在没有实际执行网络请求的情况下调用了一次,您的应用程序将不再参与后台提取)。4.我想你真的请求了某个地方的本地通知吗?@Rob,谢谢你的回答。我的评论:1。感谢您的建议,请查看
    ui背景刷新状态
    。结果一出来,我就写在这里。2.是,设备已连接到充电和Wi-Fi。3.是的,在向网络发出异步请求后调用完成处理程序。4.是的,我有权发送通知。通知发送正确。@Rob用
    UIBackgroundRefreshStatus
    检查了理论。因此,我总是获得可用的
    。代码中没有问题,但在实际设备上,
    后台提取
    仍然不起作用。第二天和第三天已经过去了……似乎唯一可能导致这种情况的原因是应用程序正在通过
    TestFlight
    进行测试。
    <key>UIBackgroundModes</key>
    <array>
        <string>fetch</string>
    </array>
    
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 
        UIApplication.shared.setMinimumBackgroundFetchInterval(UIApplication.backgroundFetchIntervalMinimum) 
    }
    
    func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
        var message = UserDefaults.standard.string(forKey: "fetch") ?? "nil"
        message = "\(message) | \(Helper.getStringFromDate(Helper.getCurrentDate()))"
        UserDefaults.standard.set(message, forKey: "fetch")
    
        // Sending local notification ...
    
        // Receiving data from the server ...
    
        completionHandler(.newData)
    }