Skip to content

iOS Periodic Task Not Triggering callbackDispatcher on Real Device but Works on Simulator #574

Open
@rapkatt

Description

@rapkatt

App does not trigger the callbackDispatcher method on a real iOS device. However, the task works as expected on the iOS simulator.

Steps to Reproduce:
1. Schedule the task with a repeat interval (e.g., 15 min).
2.Deploy the app to a real iOS device and wait for the periodic task to trigger.
3.The task not trigger callbackDispatcher on the real device.

Test Methods:
- Waited more than an hour to see if the task triggers on the real device.
- Used Xcode's Debug -> Simulate background fetch to manually trigger the task.

Results:
- The task triggers and executes callbackDispatcher as expected on the iOS simulator.
- The task does not trigger at all on the real device, even after waiting or simulating a background fetch in Xcode.

Expected Behavior
- The periodic task should trigger the callbackDispatcher method both on the iOS simulator and real devices.

Flutter version: 3.24.3
WorkManager version:
git: url: https://github.com/fluttercommunity/flutter_workmanager.git
ref: b783000
iOS version: 17.5.1
Device: 11 Pro Max

Screenshot 2024-10-24 at 00 03 06

Screenshot 2024-10-24 at 00 03 44

Screenshot 2024-10-24 at 00 04 07

Screenshot 2024-10-24 at 00 04 33

Activity

arun-gautham

arun-gautham commented on Nov 26, 2024

@arun-gautham

did this work, ?

rapkatt

rapkatt commented on Dec 2, 2024

@rapkatt
Author

@arun-gautham
Yes, it's work. I solved my problem with restarting the device

claudiulazar

claudiulazar commented on Dec 28, 2024

@claudiulazar

I did exactly what @rapkatt showed in the first comment and the periodic task is not triggered at all ...

@rapkatt does it still work for you with the latest iOS?
@arun-gautham did you manage to make it work for your part?

xunreal75

xunreal75 commented on Dec 28, 2024

@xunreal75
Contributor

Please read apples documentation about background tasks. There is no BG-scheduler in iOS which safely starts your preferred update task . It's an normal apple behavior.
https://developer.apple.com/documentation/uikit/using-background-tasks-to-update-your-app

arun-gautham

arun-gautham commented on Dec 30, 2024

@arun-gautham

Yes I got it to work perfectly fine

jawad111

jawad111 commented on Dec 30, 2024

@jawad111

Yes I got it to work perfectly fine

did you get callbackDispatcher to work with Workmanager().registerPeriodicTask ? how?

arun-gautham

arun-gautham commented on Dec 31, 2024

@arun-gautham

Note the key "offcloud-file-upload" , update it as per your app

info plist:

         <key>UIBackgroundModes</key>
	<array>
	<string>processing</string>
	</array>
	<key>BGTaskSchedulerPermittedIdentifiers</key>
	<array>
		<string>offcloud-file-upload</string>
	</array>

Appdeletegate.swift
override func application(

  _ application: UIApplication,
   didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
 ) -> Bool {
   GeneratedPluginRegistrant.register(with: self)
     WorkmanagerPlugin.setPluginRegistrantCallback {registry in
         GeneratedPluginRegistrant.register(with: registry)
     }
   **WorkmanagerPlugin.registerBGProcessingTask(withIdentifier: "offcloud-file-upload")
   return super.application(application, didFinishLaunchingWithOptions: launchOptions)**
 }

flutter

Workmanager().registerOneOffTask(
          "offcloud-file-upload",
          "offcloud-file-upload",
          constraints: Constraints(
            // connected or metered mark the task as requiring internet
            networkType: NetworkType.connected,
            // require suffucinat power
            requiresBatteryNotLow: true,
          ),
ctenhank

ctenhank commented on Jan 2, 2025

@ctenhank

@arun-gautham

Your example is OneOffTask, not PeriodicTask.

Are you sure that you did test using "PeriodicTask"?

arun-gautham

arun-gautham commented on Jan 2, 2025

@arun-gautham

Actually no , I did a cron that kicks off a one off task. and as this did serve my purpose,
How ever I can give the periodic task a try as well in couple of days.

jawad111

jawad111 commented on Jan 2, 2025

@jawad111

@rapkatt and @arun-gautham, are you both bots or something? 😄

@rapkatt: Honestly, I tried restarting five different devices with exact same setup, and it still didn't work, even on the emulators and after multiple restarts.

@arun-gautham: You keep mentioning it works without pointing out that you are referring to OneOffTask, but you're missing the crucial point that this entire discussion is based on Periodic Tasks. This is very misleading.

Yes I got it to work perfectly fine

Note the key "offcloud-file-upload" , update it as per your app

info plist:

         <key>UIBackgroundModes</key>
	<array>
	<string>processing</string>
	</array>
	<key>BGTaskSchedulerPermittedIdentifiers</key>
	<array>
		<string>offcloud-file-upload</string>
	</array>

Appdeletegate.swift override func application(

  _ application: UIApplication,
   didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
 ) -> Bool {
   GeneratedPluginRegistrant.register(with: self)
     WorkmanagerPlugin.setPluginRegistrantCallback {registry in
         GeneratedPluginRegistrant.register(with: registry)
     }
   **WorkmanagerPlugin.registerBGProcessingTask(withIdentifier: "offcloud-file-upload")
   return super.application(application, didFinishLaunchingWithOptions: launchOptions)**
 }

flutter

Workmanager().registerOneOffTask(
          "offcloud-file-upload",
          "offcloud-file-upload",
          constraints: Constraints(
            // connected or metered mark the task as requiring internet
            networkType: NetworkType.connected,
            // require suffucinat power
            requiresBatteryNotLow: true,
          ),

@arun-gautham Yes, it's work. I solved my problem with restarting the device

ctenhank

ctenhank commented on Jan 3, 2025

@ctenhank

@jawad111

I think, he did test using "cron" and "workmanager" as mentioned.
(cron is for a repeat, and workmanager is for a background execution)

But, the "cron" may not work in background: agilord/cron#48 (comment).

Luqmanasif6

Luqmanasif6 commented on Jan 16, 2025

@Luqmanasif6

Hi @jawad111 ,
I hope you're doing well. I’ve been exploring ways to run background tasks on iOS but haven’t had success so far despite trying several methods. Could you kindly provide some guidance or suggest any alternative approaches? I’d really appreciate your help.

Thanks in advance!

dipin111

dipin111 commented on Jan 24, 2025

@dipin111

For me it is not working even on simulator, the oneOffTask runs but the periodic ones are not.

jawad111

jawad111 commented on Feb 23, 2025

@jawad111

Hi @jawad111 , I hope you're doing well. I’ve been exploring ways to run background tasks on iOS but haven’t had success so far despite trying several methods. Could you kindly provide some guidance or suggest any alternative approaches? I’d really appreciate your help.

Thanks in advance!

Hi @Luqmanasif6

I apologize for the delayed response. Please take a look at this Gem article, which includes working code. It provides more in-depth information than Apple’s documentation.

Best practice: iOS background processing - Background App Refresh Task

MincDev

MincDev commented on Jun 3, 2025

@MincDev

This still seems to be a problem. Either the documentation does not clearly explain what should be done to trigger this background fetch or the functionality is broken. Can we please get some assistance on this?

1 remaining item

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      iOS Periodic Task Not Triggering callbackDispatcher on Real Device but Works on Simulator · Issue #574 · fluttercommunity/flutter_workmanager