HTTP Networking library written in Swift.
- iOS 15.0+
- Xcode 11+
- Swift 5.0+
YMNetwork has been designed to create HTTP requests very easily.
IMPORTANT NOTE: If you're implementing via Cocoapods you need to import framework as import YMNetwork_Swift and for Carthage import YMNetwork is enough. Please see Installation for detail informations. Also check Example Project.
Mapping is super easy in YMNetwork. You just need to conform your response struct to YMResponse and model to YMModel.
struct MovieResponse: YMResponse {
private enum CodingKeys: String, CodingKey {
case page
case numberOfResults = "total_results"
case numberOfPages = "total_pages"
case movies = "results"
}
let page: Int
let numberOfResults: Int
let numberOfPages: Int
let movies: [Movie]
}
// MARK: - Movie
struct Movie: YMModel {
let id: Int
let posterPath: String
let backdrop: String
let title: String
let releaseDate: String
let rating: Double
let overview: String
enum CodingKeys: String, CodingKey {
case id
case posterPath = "poster_path"
case backdrop = "backdrop_path"
case title
case releaseDate = "release_date"
case rating = "vote_average"
case overview
}
}Create your download requests using YMDownloadRequest. If you conform YMNetworkManagerDownloadDelegate in your class you will be able to manage and see progress all your downloads on
func ymNetworkManager(_ manager: YMNetworkManager, request: YMDownloadRequest?, downloadTask: URLSessionDownloadTask)You can also pause, resume or cancel your download tasks.
private let manager = YMNetworkManager(
configuration: YMNetworkConfiguartion(
baseURL: environment.baseURL,
headers: [:]
)
)
// Start Download
try? manager.shared.download(with: &request)
// Pause Download
manager.pauseDownloadTask(of: request)
// Resume Download
manager.resumeDownloadTask(of: request) { (status, error) in
completion(status, error)
}
// Cancel Download
manager.cancelDownloadTask(of: request)You can manage your request requirements on your request class by conforming it to YMRequest.
All possible values are:
var path: String { get }
var method: HTTPMethod { get }
var headers: HTTPHeaders? { get }
var bodyParameters: Parameters? { get }
var urlParameters: Parameters? { get }
var task: HTTPTaskType { get }Simple usage:
struct MovieRequest: BaseRequest {
var path: String = "now_playing"
var urlParameters: Parameters?
init(page: Int) {
urlParameters?["page"] = page
}
}
// Send request
private let manager = YMNetworkManager(
configuration: YMNetworkConfiguartion(
baseURL: environment.baseURL,
headers: [:]
)
)
let request = MovieRequest(page: 1)
manager.request(request) { (response, result: YMResult<T>, error) in
if error != nil {
completion(nil, "Please check your network connection")
}
switch result {
case .success(let data):
completion(data, nil)
case .failure(let error):
completion(nil, error.rawValue)
}
}You can upload your files by passing it's file url into YMUploadRequest.
struct UploadRequest: YMUploadRequest {
var fileURL: URL?
var path: String = "post"
init(fileURL: URL?) {
self.fileURL = fileURL
}
}
let request = UploadRequest(fileURL: Bundle.main.url(forResource: "cat", withExtension: "jpg"))
private let manager = YMNetworkManager(
configuration: YMNetworkConfiguartion(
baseURL: environment.baseURL,
headers: [:]
)
)
manager.request(request) { (response, result: YMResult<T>, error) in
if error != nil {
completion(nil, "Please check your network connection")
}
switch result {
case .success(let data):
completion(data, nil)
case .failure(let error):
completion(nil, error.rawValue)
}
}Well.. YMNetwork is already taken for cocoapods. You should be installing pod as pod 'YMNetwork-Swift' but when you import framework in your code please just use import YMNetwork_Swift
Check out Get Started tab on cocoapods.org.
To use YMNetwork in your project add the following 'Podfile' to your project
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '15.0'
use_frameworks!
pod 'YMNetwork-Swift'
Then run:
pod install
Check out the Carthage docs on how to add a install. The YMNetwork framework is already setup with shared schemes.
You can install Carthage with Homebrew using the following command:
$ brew update
$ brew install carthageTo integrate YMNetwork into your Xcode project using Carthage, specify it in your Cartfile:
github "miletliyusuf/YMNetwork"
https://github.com/miletliyusuf/YMNetwork
- Better Upload Management
- Image caching
- Better support for URLSession configurations
- Upload with Data
- Better Documentation
Yusuf Miletli – Linkedin, miletliyusuf@gmail.com
Distributed under the MIT license. See LICENSE for more information.
