SwiftQueue alternatives and similar libraries
Based on the "Concurrency" category.
Alternatively, view SwiftQueue alternatives based on common mentions on social networks and blogs.
-
Overdrive
DISCONTINUED. Fast async task based Swift framework with focus on type safety, concurrency and multi threading. -
Kommander
DISCONTINUED. A lightweight, pure-Swift library for manage the task execution in different threads. Through the definition a simple but powerful concept, Kommand. -
StickyLocking
A general purpose embedded hierarchical lock manager used to build highly concurrent applications of all types. Same type of locker used in many of the large and small DBMSs in existence today. -
NSLock+Synchronized
DISCONTINUED. Do you miss @synchronized in Swift? NSLock+Synchronized gives you back @synchronized in Swift via a global function and NSLock class and instance methods, conveniently usable via Cocoapod and Carthage Framework.
CodeRabbit: AI Code Reviews for Developers

* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of SwiftQueue or a related project?
README
SwiftQueue
Schedule tasks with constraints made easy.
SwiftQueue
is a job scheduler for iOS inspired by popular android libraries like android-priority-jobqueue or android-job. It allows you to run your tasks with run and retry constraints.
Library will rely on Operation
and OperationQueue
to make sure all tasks will run in order. Don't forget to check our WIKI.
Features
- [x] Sequential or Concurrent execution
- [x] Persistence
- [x] Cancel all, by id or by tag
- [x] Start / Stop queue
Job Constraints:
- [x] Delay
- [x] Deadline
- [x] Timeout
- [x] Internet
- [x] Charging
- [x] Single instance in queue
- [x] Retry: Max count, exponential backoff
- [x] Periodic: Max run, interval delay
- [x] Experimental Foreground or Background execution
Requirements
- iOS 8.0+, watchOS 2.0+, macOS 10.10+, tvOS 9.0+
- Xcode 11.0
Installation
SwiftPackageManager (SPM)
To integrate using Apple's Swift package manager, add the following as a dependency to your Package.swift:
.package(url: "https://github.com/lucas34/SwiftQueue.git", .upToNextMajor(from: "4.0.0"))
Carthage
SwiftQueue
is carthage
compatible. Add the following entry in your Cartfile
:
github "lucas34/SwiftQueue"
Then run carthage update
.
CocoaPods
You can use CocoaPods to install SwiftQueue
by adding it to your Podfile
:
platform :ios, '8.0'
use_frameworks!
pod 'SwiftQueue'
In your application, simply import the library
import SwiftQueue
Example
This example will simply wrap an api call. Create your custom job by extending Job
with onRun
, onRetry
and onRemove
callbacks.
// A job to send a tweet
class SendTweetJob: Job {
// Type to know which Job to return in job creator
static let type = "SendTweetJob"
// Param
private let tweet: [String: Any]
required init(params: [String: Any]) {
// Receive params from JobBuilder.with()
self.tweet = params
}
func onRun(callback: JobResult) {
let api = Api()
api.sendTweet(data: tweet).execute(onSuccess: {
callback.done(.success)
}, onError: { error in
callback.done(.fail(error))
})
}
func onRetry(error: Error) -> RetryConstraint {
// Check if error is non fatal
return error is ApiError ? RetryConstraint.cancel : RetryConstraint.retry(delay: 0) // immediate retry
}
func onRemove(result: JobCompletion) {
// This job will never run anymore
switch result {
case .success:
// Job success
break
case .fail(let error):
// Job fail
break
}
}
}
Create your SwiftQueueManager
and keep the reference. If you want to cancel a job it has to be done with the same instance.
let manager = SwiftQueueManagerBuilder(creator: TweetJobCreator()).build()
Schedule your job and specify the constraints.
JobBuilder(type: SendTweetJob.type)
// Requires internet to run
.internet(atLeast: .cellular)
// params of my job
.with(params: ["content": "Hello world"])
// Add to queue manager
.schedule(manager: manager)
Bind your job
type with an actual instance.
class TweetJobCreator: JobCreator {
// Base on type, return the actual job implementation
func create(type: String, params: [String: Any]?) -> Job {
// check for job and params type
if type == SendTweetJob.type {
return SendTweetJob(params: params)
} else {
// Nothing match
// You can use `fatalError` or create an empty job to report this issue.
fatalError("No Job !")
}
}
}
3rd Party Extensions
- SQLitePersisterForSwiftQueue: A SQLite3 based persister for SwiftQueue
Contributors
We would love you for the contribution to SwiftQueue, check the [LICENSE
](LICENSE) file for more info.
License
Distributed under the MIT license. See [LICENSE
](LICENSE) for more information.
*Note that all licence references and agreements mentioned in the SwiftQueue README section above
are relevant to that project's source code only.