flutter_workmanager icon indicating copy to clipboard operation
flutter_workmanager copied to clipboard

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

Open rapkatt opened this issue 1 year ago • 16 comments

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

rapkatt avatar Oct 23 '24 18:10 rapkatt

did this work, ?

arun-gautham avatar Nov 26 '24 06:11 arun-gautham

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

rapkatt avatar Dec 02 '24 16:12 rapkatt

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?

claudiulazar avatar Dec 28 '24 12:12 claudiulazar

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

xunreal75 avatar Dec 28 '24 13:12 xunreal75

Yes I got it to work perfectly fine

arun-gautham avatar Dec 30 '24 07:12 arun-gautham

Yes I got it to work perfectly fine

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

jawad111 avatar Dec 30 '24 12:12 jawad111

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 avatar Dec 31 '24 06:12 arun-gautham

@arun-gautham

Your example is OneOffTask, not PeriodicTask.

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

ctenhank avatar Jan 02 '25 05:01 ctenhank

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.

arun-gautham avatar Jan 02 '25 05:01 arun-gautham

@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

jawad111 avatar Jan 02 '25 12:01 jawad111

@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: https://github.com/agilord/cron/issues/48#issue-2000358497.

ctenhank avatar Jan 03 '25 05:01 ctenhank

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!

Luqmanasif6 avatar Jan 16 '25 12:01 Luqmanasif6

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

dipin111 avatar Jan 24 '25 13:01 dipin111

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

jawad111 avatar Feb 23 '25 11:02 jawad111

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?

MincDev avatar Jun 03 '25 07:06 MincDev

After a lot of circus , i used the register-task to do the trick. Now my job runs even when screen is locked

This is what i dis as the schedule task didnt run

I use the background task to upload files one at a time. When app starts it runs a task , if files in queue this tSk schedules a next task. This happens till all files are uploaded. Id there are no files , nothing is scheduled. If i add few more files to queue . The task is scheduled during the adding files to queue call .

arun-gautham avatar Jun 03 '25 11:06 arun-gautham