IOSTaskScheduler

iOS implementation of TaskScheduler backed by BGTaskScheduler.

⚠️ iOS Background Execution Limitations:

  • Apple's OS controls when tasks actually run. KMPWorker cannot override this.

  • BGAppRefreshTask (OneTime) has a strict time limit (~30 seconds).

  • BGProcessingTask (Periodic) may only run when device is idle and charging.

  • Tasks are NOT guaranteed to execute at requested intervals.

  • Always handle TaskState.Failed — the OS may kill the task at any time.

Required setup in AppDelegate:

BackgroundInitializerKt.initialize()

Required in Info.plist:

<key>BGTaskSchedulerPermittedIdentifiers</key>
<array>
<string>your-task-id</string>
</array>

Constructors

Link copied to clipboard
constructor()

Functions

Link copied to clipboard
open suspend override fun cancel(taskId: String)
Link copied to clipboard
open suspend fun cancelBatch(taskIds: List<String>)
Link copied to clipboard
open suspend override fun cancelByTag(tag: String)
Link copied to clipboard
open suspend fun clearExecutionHistory()
Link copied to clipboard
open suspend override fun enqueue(request: TaskRequest)
Link copied to clipboard
open suspend fun enqueueBatch(requests: List<TaskRequest>)
Link copied to clipboard
open suspend fun enqueueChain(chain: TaskChain)
open suspend override fun enqueueChain(chain: TaskChain, policy: ChainPolicy): Nothing
Link copied to clipboard
open suspend fun getExecutionHistory(limit: Int): List<ExecutionRecord>
Link copied to clipboard
open override fun observe(taskId: String): Flow<TaskState>
Link copied to clipboard
open override fun observeAll(): Flow<Pair<String, TaskState>>
Link copied to clipboard
open override fun observeChain(chainId: String): Flow<TaskState>
Link copied to clipboard
open override fun register(taskId: String, block: suspend () -> Unit)
Link copied to clipboard
open override fun registerWithContext(taskId: String, block: suspend TaskExecutionContext.() -> Unit)