Swift API Client and File Uploader
On this page
Swift integration handles uploads and file operations by wrapping Uploadcare Upload API and REST API. This comprehensive API client lets you use most of the Uploadcare features from within your Android app. It also includes a native uploading widget. Builds are available for iOS, iPadOS, tvOS, macOS, and Linux.
Check out a demo app that we created as a showcase for various usage scenarios and tasks that you can resolve.
Features
Uploading (Upload API):
- Upload files from a file, URL, and cloud sources (up to 5 TB)
- Multipart uploading for large files
- Uploading network to speed uploading jobs (like CDN)
File uploading widget:
- Upload files from a local disk, camera, and cloud sources
- Track, pause and continue multipart uploading
- Background uploading
- Bulk file uploading
File management (REST API):
- Get file info and perform various operations (store/delete/copy) with them
- Work with groups of files
- Get info about account project
- Manage webhooks
- Convert documents
- Encode and transform videos
Image processing (URL API):
- Compression
- Geometry
- Colors
- Definition
- Image and text overlays
- Rotations
- Recognition
- File info
- Proxy (fetch)
Security features:
- Secure authentication
- Secure uploads (signed uploads)
- Secure delivery (signed URLs)
- Secure webhooks (signing secret)
Installation
Swift Package Manager
To use a stable version, add a dependency to your Package.swift file:
dependencies: [
.package(url: "https://github.com/uploadcare/uploadcare-swift.git", .branch("master"))
]
swift
If you want to try the current dev version, change dependency to:
dependencies: [
.package(url: "https://github.com/uploadcare/uploadcare-swift.git", branch("develop"))
]
swift
To add from Xcode select File -> Swift Packages -> Add Package Dependency and enter repository URL:
https://github.com/uploadcare/uploadcare-swift
Or you can add it in Xcode: https://github.com/uploadcare/uploadcare-swift (select master branch).
Carthage
To use a stable version, add a dependency to your Cartfile:
github "uploadcare/uploadcare-swift"
To use the current dev version:
github "uploadcare/uploadcare-swift" "develop"
Cocoapods
To use a stable version, add a dependency to your Podfile:
pod 'Uploadcare', git: 'https://github.com/uploadcare/uploadcare-swift'
To use current dev version:
pod 'Uploadcare', git: 'https://github.com/uploadcare/uploadcare-swift', :branch => 'develop'
Initialization
Create your project in Uploadcare dashboard and copy its API keys from there.
Upload API requires only a public key, while REST API requires both public and secret keys:
final class MyClass {
private var uploadcare: Uploadcare
init() {
self.uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY")
// Secret key is optional if you want to use Upload API only.
// REST API requires both public and secret keys:
self.uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")
}
}
swift
You can create more Uploadcare objects if you need to work with multiple projects in your Uploadcare account:
final class MyClass {
private let project1: Uploadcare
private let project2: Uploadcare
init() {
// A project to use Upload API only
self.project1 = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY_1")
// A project to use both REST API and Upload API
self.project2 = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY_2", secretKey: "YOUR_SECRET_KEY_2")
}
}
swift
Keep in mind that since Uploadcare is not a singleton. You should store a strong reference (as an instance variable, for example) to your Uploadcare object or it will get deallocated.
Using Upload API
Check the Upload API documentation to see all available methods.
Example of uploads:
guard let url = URL(string: "https://source.unsplash.com/random") else { return }
guard let data = try? Data(contentsOf: url) else { return }
// You can create UploadedFile object to operate with it
let fileForUploading1 = uploadcare.file(fromData: data)
let fileForUploading2 = uploadcare.file(withContentsOf: url)
// Handle error or result
fileForUploading1.upload(withName: "random_file_name.jpg", store: .store) { result in
}
// Completion block is optional
fileForUploading2?.upload(withName: "my_file.jpg", store: .store)
// Or you can just upload data and provide a filename
let task = uploadcare.uploadFile(data, withName: "random_file_name.jpg", store: .store) { progress in
print("upload progress: \(progress * 100)%")
} _: { result in
switch result {
case .failure(let error):
print(error.detail)
case .success(let file):
print(file)
}
}
// You can cancel uploading if needed
task.cancel()
// task will confirm UploadTaskable protocol if file size is less than 100 mb, and UploadTaskResumable if file size is >= 100mb
// You can pause or resume uploading of file with size >= 100mb if needed
(task as? UploadTaskResumable)?.pause()
(task as? UploadTaskResumable)?.resume()
swift
It is possible to perform uploads in background. But implementation is a platform-specific. This lib doesn't provide default implementation. You can find an example for the iOS in our Demo app. See FilesListStore.swift.
Using REST API
Refer to the REST API documentation for all methods.
Example of getting list of files:
// Make a list of files object
lazy var filesList = uploadcare.listOfFiles()
func someFilesListMethod() {
// Make a query object
let query = PaginationQuery()
.stored(true)
.ordering(.sizeDESC)
.limit(5)
// Get file list
filesList.get(withQuery: query) { result in
switch result {
case .failure(let error):
print(error)
case .success(let list):
print(list)
}
}
}
swift
Get next page:
// Check if the next page is available
guard filesList.next != nil else { return }
// Get the next page
filesList.nextPage { result in
switch result {
case .failure(let error):
print(error)
case .success(let list):
print(list)
}
}
swift
Get previous page:
// Check if the previous page is available
guard filesList.previous != nil else { return }
// Get the previous page
filesList.previousPage { result in
switch result {
case .failure(let error):
print(error)
case .success(let list):
print(list)
}
}
swift
Full documentation
Read the full documentation on GitHub.
Demo app
Check the demo app for usage examples:
- List of files
- List of groups
- File info
- File upload (both direct and multipart, including upload in background)
- Multiple file upload
- Pause and continue multipart uploading
- Project info