Latest 0.2.2
License MIT
Platforms ios 10.0

Build Status

C0T0 – simple networking library for iOS based on NSURLSession



To integrate C0T0 into your Xcode project using CocoaPods, specify it in your Podfile:

source ''
platform :ios, '10.0'

target '<target name>' do
  pod 'C0T0', '~> 0.2.0'

Then, run the following command:

$ pod install


Making a simple GET request

Create an object of SessionConfiguration with specified host.

If you’re interested in logging requests, responses and errors, just enable logging in SessionConfiguration init method. By default logging is disable (also the default value is set so you can skip it in init method).

    private let sessionConfiguration = SessionConfiguration(
                                           host: "",
                                           loggingEnabled: true

Next create instance of ApiService

    private lazy var apiService = ApiService(configuration: sessionConfiguration)

Remember to retain the apiService object instead of creating local variable inside a function’s scope, otherwise your object may be released before the response will be received.

Here’s an example of requestRepositories(for:) function with setting repositories array for success or showing the error alert in case of failure. For parsing the results we’re using Codable models. So for the Result you have to provide a generic type which is conforming to Codable protocol.

private func requestRepositories(for organization: String) {
        let apiRequest = ApiRequest(endpoint: "/orgs/(organization)/repos", method: .GET)

        apiService.send(request: apiRequest) { [weak self] (result: Result<[Repository], ApiError>) in
            result.ifSuccess { repositories in
                self?.repositories = repositories
            }.else(closure: { error in
                DispatchQueue.main.async {

URL encoded parameters

If your request needs an URL encoded parameters just create the request like below:

        let apiRequest = ApiRequest(
                             endpoint: "/endpoint",
                             method: .GET, 
                             urlParameters: ["sampleKey": "sampleValue"]

Making a POST request with headers

If your request needs JSON encoded parameters you can achieve that in that way:

        let postJSON = """
                            "name": "ToopLoox team member"
                            "job" : "iOS Developer"
        let postJSONData = .utf8)
        let apiRequest = ApiRequest(
                             endpoint: "/users",
                             method: .POST,
                             httpBody: postJSONData,
                             headers: ["Content-Type": "application/json"]

Download content

ApiService also supports downloading. url) { (result: Result<Data, ApiError>) in
            result.ifSuccess(closure: { data in
                // Your's code goes here

Sample project

Sample project is included in this repository, just type pod install and you’re ready to run it.


Tests covering the code are included in Example Project


C0T0 is released under the MIT license. See LICENSE for details.

Latest podspec

    "name": "C0T0",
    "version": "0.2.2",
    "summary": "HTTP networking library.",
    "description": "HTTP networking library written in Swift.",
    "homepage": "",
    "license": "MIT",
    "authors": {
        "TPLX iOS team": "[email protected]"
    "platforms": {
        "ios": "10.0"
    "source": {
        "git": "",
        "tag": "v0.2.2"
    "source_files": "C0T0/**/*.swift",
    "swift_version": "4.1"

Pin It on Pinterest

Share This