Restofire is a protocol oriented networking client for Alamofire

Overview

Restofire: A Protocol Oriented Networking Abstraction Layer in Swift

Platforms License

Swift Package Manager Carthage compatible CocoaPods compatible

Travis

Join the chat at https://gitter.im/Restofire/Restofire Twitter

Restofire is a protocol oriented networking client for Alamofire.

Features

  • Global Configuration for host / headers / parameters etc
  • Group Configurations
  • Per Request Configuration
  • Authentication
  • Response Validations
  • Custom Response Serializers like JSONDecodable
  • Isolate Network Requests from ViewControllers
  • Auto retry based on URLError codes
  • Request eventually when network is reachable
  • NSOperations
  • Complete Documentation

Requirements

  • iOS 10.0+ / Mac OS X 10.12+ / tvOS 10.0+ / watchOS 3.0+
  • Xcode 10

Installation

Dependency Managers

CocoaPods

CocoaPods is a dependency manager for Cocoa projects. You can install it with the following command:

$ gem install cocoapods

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

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '10.0'
use_frameworks!

pod 'Restofire', '~> 5.0'

Then, run the following command:

$ pod install
Carthage

Carthage is a decentralized dependency manager that automates the process of adding frameworks to your Cocoa application.

You can install Carthage with Homebrew using the following command:

$ brew update
$ brew install carthage

To integrate Restofire into your Xcode project using Carthage, specify it in your Cartfile:

github "Restofire/Restofire" ~> 5.0
Swift Package Manager

To use Restofire as a Swift Package Manager package just add the following in your Package.swift file.

import PackageDescription

let package = Package(
    name: "HelloRestofire",
    dependencies: [
        .Package(url: "https://github.com/Restofire/Restofire.git", from: "5.0.0")
    ]
)

Manually

If you prefer not to use either of the aforementioned dependency managers, you can integrate Restofire into your project manually.

Git Submodules

  • Open up Terminal, cd into your top-level project directory, and run the following command "if" your project is not initialized as a git repository:
$ git init
  • Add Restofire as a git submodule by running the following command:
$ git submodule add https://github.com/Restofire/Restofire.git
$ git submodule update --init --recursive
  • Open the new Restofire folder, and drag the Restofire.xcodeproj into the Project Navigator of your application's Xcode project.

    It should appear nested underneath your application's blue project icon. Whether it is above or below all the other Xcode groups does not matter.

  • Select the Restofire.xcodeproj in the Project Navigator and verify the deployment target matches that of your application target.

  • Next, select your application project in the Project Navigator (blue project icon) to navigate to the target configuration window and select the application target under the "Targets" heading in the sidebar.

  • In the tab bar at the top of that window, open the "General" panel.

  • Click on the + button under the "Embedded Binaries" section.

  • You will see two different Restofire.xcodeproj folders each with two different versions of the Restofire.framework nested inside a Products folder.

    It does not matter which Products folder you choose from.

  • Select the Restofire.framework & Alamofire.framework.

  • And that's it!

The Restofire.framework is automagically added as a target dependency, linked framework and embedded framework in a copy files build phase which is all you need to build on the simulator and a device.

Embeded Binaries

  • Download the latest release from https://github.com/Restofire/Restofire/releases
  • Next, select your application project in the Project Navigator (blue project icon) to navigate to the target configuration window and select the application target under the "Targets" heading in the sidebar.
  • In the tab bar at the top of that window, open the "General" panel.
  • Click on the + button under the "Embedded Binaries" section.
  • Add the downloaded Restofire.framework & Alamofire.framework.
  • And that's it!

Configurations

Three levels of configuration

  • Global Configuration – The global configuration will be applied to all the requests. These include values like scheme, host, version, headers, sessionManager, callbackQueue, maxRetryCount, waitsForConnectivity etc.
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    Restofire.Configuration.default.host = "httpbin.org"
    Restofire.Retry.default.retryErrorCodes = [.requestTimedOut,.networkConnectionLost]

    return true
}
  • Group Configuration – The group configuration inherits all the values from the global configuration. It can be used to group requests that have same behaviour but are different from the global configuration. For instance, If you have more than one host or if your global configuration has default url session and some requests require you to use ephemeral URL session.
import Restofire

protocol ApiaryConfigurable: Configurable {}

extension ApiaryConfigurable {
    public var configuration: Configuration {
        var configuration = Configuration.default
        configuration.host = "private-07c21-rahulkatariya.apiary-mock.com"
        configuration.headers = ["Content-Type": "application/json"]
        return configuration
    }
}

protocol ApiaryRequestable: Requestable, ApiaryConfigurable {}

import Restofire

struct NoteResponseModel: Decodable {
    var id: Int16
    var title: String
}

struct NotesGETService: ApiaryRequestable {
    typealias Response = [NoteResponseModel]
    var path: String? = "notes"
}
  • Per Request Configuration – The request configuration inherits all the values from the group configuration or directly from the global configuration.
import Restofire

struct NoteRequestModel: Encodable {
    var title: String
}

struct NotePOSTService: Requestable {
    typealias Response = NoteResponseModel
    let host: String = "private-07c21-rahulkatariya.apiary-mock.com"
    let headers = ["Content-Type": "application/json"]
    let path: String? = "notes"
    let method: HTTPMethod = .post
    var parameters: Any?

    init(parameters: NoteRequestModel) {
        let data = try! JSONEncoder().encode(parameters)
        self.parameters = try! JSONSerialization.jsonObject(with: data, options: .allowFragments)
    }
}

Usage

Making a Request

Requestable gives completion handler to enable making requests and receive response.

import Restofire

class ViewController: UITableViewController {
    var notes: [NoteResponseModel]!
    var requestOp: RequestOperation<NotesGetAllService>!

    override func viewDidLoad() {
        super.viewDidLoad()
        // We want to cancel the request to save resources when the user pops the view controller.
        requestOp = NotesGetAllService().execute() {
            if let value = $0.result.value {
                self.notes = value
            }
        }
    }

    func postNote(title: String) {
        let noteRequestModel = NoteRequestModel(title: title)
        // We don't want to cancel the request even if user pops the view controller.
        NotePOSTService(parameters: noteRequestModel).execute()
    }

    deinit {
        requestOp.cancel()
    }
}

Isolating Network Requests from UIViewControllers

Requestable gives delegate methods to enable making requests from anywhere which you can use to store data in your cache.

import Restofire

struct NotesGetAllService: ApiaryRequestable {
    ...

    func request(_ request: RequestOperation<NotesGetAllService>, didCompleteWithValue value: [NoteResponseModel]) {
      // Here you can store the results into your cache and then listen for changes inside your view controller.
    }
}

Custom Response Serializers

  • Decodable

By adding the following snippet in your project, All Requestable associatedType Response as Decodable will be decoded with JSONDecoder.

import Restofire

extension Restofire.DataResponseSerializable where Response: Decodable {
    public var responseSerializer: DataResponseSerializer<Response> {
        return DataRequest.JSONDecodableResponseSerializer()
    }
}
  • JSON

By adding the following snippet in your project, All Requestable associatedType Response as Any will be decoded with NSJSONSerialization.

import Restofire

extension Restofire.DataResponseSerializable where Response == Any {
    public var responseSerializer: DataResponseSerializer<Response> {
        return DataRequest.jsonResponseSerializer()
    }
}

Wait for Internet Connectivity

Requestable gives you a property waitsForConnectivity which can be set to true. This will make the first request regardless of the internet connectivity. If the request fails due to .notConnectedToInternet, it will retry the request when internet connection is established.

struct PushTokenPutService: Requestable {

    typealias Response = Data
    ...
    var waitsForConnectivity: Bool = true

}

Contributing

Issues and pull requests are welcome!

Author

Rahul Katariya @rahulkatariya91

License

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

Comments
  • Manual Installation

    Manual Installation

    CocoaPods and Carthage are awesome tools and make our life really easier, but there are some devs who still don't know how to use them.

    It would be cool to add the Manual installation guide in your README.md. You can take a look at my iOS Readme Template to see how you can do it.

    help wanted 
    opened by lfarah 7
  • iOS 13 issue

    iOS 13 issue "resource exceeds maximum size"

    What did you do?

    Just perform any GET request. For example: http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?steamids=76561198015933145&key=BBD52AB62CD9B4E067C060466F0E9AC9

    What did you expect to happen?

    it should return any json.

    What happened instead?

    The issue description: https://forums.developer.apple.com/thread/123348 "resource exceeds maximum size"

    Restofire Environment

    Restofire version: 4.0.1 Xcode version: 11.2.1 Swift version: 5 Platform(s) running Restofire: iOS 13.2.2 macOS version running Xcode: 10.15

    Demo Project

    import UIKit
    import Restofire
    
    let apiKey = "BBD52AB62CD9B4E067C060466F0E9AC9"
    
    struct FSUserInfoModel: Codable {
        struct User: Codable {
            let steamid: String
            let personaname: String
            let profileurl: String
            let avatar: String?
            let avatarmedium: String?
            let avatarfull: String?
            let personastate: Int
            let communityvisibilitystate: Int
            let profilestate: Int?
            let lastlogoff: TimeInterval?
            let commentpermission: Int?
    
            func bestAvatarImagePath() -> String? {
                return (avatarfull ?? avatarmedium ?? avatar)
            }
        }
    
        let info: User?
    
        enum NestedKeys: String, CodingKey {
            case response
            case players
        }
    
        init(from decoder: Decoder) throws {
            let container = try decoder.container(keyedBy: NestedKeys.self)
            let response = try container.nestedContainer(keyedBy: NestedKeys.self, forKey: .response)
            let users = try response.decode([User].self, forKey: .players)
            info = users.first
        }
    }
    
    extension Restofire.DataResponseSerializable where Response: Decodable {
        public var responseSerializer: DataResponseSerializer<Response> {
            return DataRequest.JSONDecodableResponseSerializer()
        }
    }
    
    struct FDGetPlayerSummariesService: Requestable {
        typealias Response = FSUserInfoModel
        var path: String? = "ISteamUser/GetPlayerSummaries/v0002/?steamids=76561198015933145&key=BBD52AB62CD9B4E067C060466F0E9AC9"
        var parameters: Any?
    
        init(steamids: [String]) {
    //        let steamidsString = steamids.joined(separator: ",")
    //        parameters = ["steamids": steamidsString, "key": apiKey]
            parameters = [:]
        }
    
        func request(_ request: RequestOperation<FDGetPlayerSummariesService>, didCompleteWithValue value: [FSUserInfoModel]) {
            print()
        }
    
        func request(_ request: RequestOperation<Self>, didFailWithError error: Error) {
            print()
        }
    }
    
    class FDNetworkBox {
        static let shared = FDNetworkBox()
    
        init() {
            Restofire.Configuration.default.scheme = "http://"
            Restofire.Configuration.default.host = "api.steampowered.com"
            Restofire.Retry.default.retryErrorCodes = [.timedOut,.networkConnectionLost]
        }
    
        func sync() {
            FDGetPlayerSummariesService(steamids: ["76561198015933145"]).execute()
        }
    }
    

    NOTE: I have even hardcoded the path which works in browser and in other libraries like MHNetwork but doesn't work with Restofire

    opened by Gargo 6
  • Error in readme

    Error in readme

    What did you do?

    Copied some code from readme.

    What did you expect to happen?

    The project is compiled

    What happened instead?

    self.path += path
    Value of optional type 'String?' must be unwrapped to a value of type 'String'
    

    you can't apply += to String? and String variables.

    Restofire Environment

    Restofire version: 4.0.1 Xcode version: 11.2.1 Swift version: 5 Platform(s) running Restofire: iOS macOS version running Xcode: 10.15.1

    Demo Project

    import Foundation
    import Restofire
    
    protocol NYConfigurable: Configurable {}
    protocol NYRequestable: Requestable, NYConfigurable {}
    
    extension Restofire.DataResponseSerializable where Response: Decodable {
        public var responseSerializer: DataResponseSerializer<Response> {
            return DataRequest.JSONDecodableResponseSerializer()
        }
    }
    
    struct UserInfoGETService: NYRequestable {
        typealias Response = FSUserInfoModel
        var path: String?
        var parameters: Any?
    
        init(path: String, parameters: Any) {
            self.path += path
            self.parameters = parameters
        }
    }
    

    in general why +=? Maybe simply =?

    opened by gerchicov-bp 4
  • Fix package manager installation

    Fix package manager installation

    Issue Link :link:

    Resolves #44.

    Goals :soccer:

    Makes it possible to install and use Restofire in Swift Package Manager packages.

    Implementation Details :construction:

    • Moves the Swift tools version specification to the top of Package.swift, so that the version is correctly set. See here for details.
    • Updates the package specification in Package.swift to package description v4 syntax (similary to how the package template that swift package init produces is structured).
    • Adds a missing Foundation import in RestofireRequest.swift.

    Testing Details :mag:

    Check out a working example project here:

    git clone [email protected]:dnlggr/RestofireTest.git && cd RestofireTest
    swift run
    

    Let me know what you think! 🙂

    opened by ghost 3
  • Swift Package Manager installation does not work

    Swift Package Manager installation does not work

    First of all thanks for an awesome looking project. Can't wait to try it out! 🎉

    What did you do?

    • Tried to install Restofire with Swift Package Manager - Swift 4.1.0 (swiftpm-14050)

    What did you expect to happen?

    • Restofire and it's dependencies being downloaded and linked with my package

    What happened instead?

    • A build error. More specifically, a manifest parse error of Restofire's Package.swift when running swift build:
    $ RestofireTest swift build
    Updating https://github.com/Restofire/Restofire.git
    https://github.com/Restofire/Restofire.git @ 4.0.0: error: manifest parse error(s):
    /var/folders/jf/jlrsnxnx5pz247ctyynyjlgm0000gn/T/TemporaryFile.8zoWzT.swift:34:70: error: type 'Version' has no member 'upToNextMajor'
            .Package(url: "https://github.com/Alamofire/Alamofire.git", .upToNextMajor(from: "4.5.0"))
                                                                         ^~~~~~~~~~~~~
    

    My Findings 💡

    upToNextMajor has been introduced in V4 of the package description API.

    Interestingly, if I clone Restofire and run swift package tools-version it outputs 3.1.0. This is the default version if you do not specify a tools version.

    Restofire does specify // swift-tools-version:4.0 in it's Package.swift. However, this needs to be done in the first line of the file (which is not the case for Restofire).

    The issue can probably be fixed by moving // swift-tools-version:4.0 from its current position in Package.swift to the top of the file.

    👉 If it's ok with you, I'd be happy to try this out and submit a pull request if it works! 🤓 🙏

    Restofire Environment

    Restofire version: 4.0.0 Xcode version: Version 9.3 (9E145) (did not use Restofire in Xcode, though) Swift version: Apple Swift version 4.1 (swiftlang-902.0.48 clang-902.0.37.1) Platform(s) running Restofire: macOS macOS version running Xcode: macOS HighSierra Version 10.13.3

    Demo Project

    Just set up an empty Swift Package and try to install Restofire:

    $ mkdir RestofireTest
    $ cd RestofireTest
    $ swift package init
    

    then edit Package.swift:

    // swift-tools-version:4.0
    
    import PackageDescription
    
    let package = Package(
        name: "RestofireTest",
        products: [
            .library(name: "RestofireTest", targets: ["RestofireTest"]),
        ],
        dependencies: [
            .package(url: "https://github.com/Restofire/Restofire.git", .upToNextMajor(from: "4.0.0"))
        ],
        targets: [
            .target(name: "RestofireTest", dependencies: ["Restofire"])
        ]
    )
    
    bug help wanted 
    opened by ghost 3
  • Feature: Request Delegates

    Feature: Request Delegates

    Request Delegates inspired by @codeOfRobin talk about http://khanlou.com/2017/01/request-behaviors/ at Swift Delhi Meetup It will require refactoring Request, Upload and Download Operations to reuse the code.

    feature help wanted 
    opened by rahul0x24 3
  • Failed to serialize Requestable Model

    Failed to serialize Requestable Model

    fatal error: ResponseSerializer failed to serialize the response to Requestable Model of type Dictionary<String, Any>:Restofire/Sources/AlamofireUtils.swift, line 110

    I took this error in JSON starts and ends with "[]" like arrays. g.e. [ { "name": "" }, { "name":"" }]

    but it works perfectly in "{}" response. g.e. { "name":"" }

    Is this problem related with Restofire or Alamofire?

    edit: I tested with Alamofire's standart API, it works perfectly. I think the problem related with Restofire's itself. I sent email as complete response that fails to serialize.

    opened by ttuygun 3
  • Command failed due to signal: Segmantation fault: 11

    Command failed due to signal: Segmantation fault: 11

    I encounted this error in Xcode 8 using Swift 3 compitable version of 2.0. I cleaned derived data or re-install pod from 1.1.0 cocoapods but it don't work. Any suggestion?

    Thanks in advance

    question 
    opened by ttuygun 3
  • Bump kramdown from 2.1.0 to 2.3.0

    Bump kramdown from 2.1.0 to 2.3.0

    Bumps kramdown from 2.1.0 to 2.3.0.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 1
  • XCODE 9 UrlError.Code error

    XCODE 9 UrlError.Code error

    Error occurred - Type 'URLError.Code' does not conform to protocol 'Hashable' in struct Retry public var retryErrorCodes: Set<URLError.Code> = [.timedOut, .cannotFindHost, .cannotConnectToHost, .dnsLookupFailed, .networkConnectionLost ]

    opened by nkarataev 1
  • Doesn't work with SPM

    Doesn't work with SPM

    $ swift package fetch Cloning https://github.com/Restofire/Restofire.git HEAD is now at 885fdf5 Add pod trunk push script to automatically deploy to cocoapods Resolved version: 2.1.0 Cloning https://github.com/Alamofire/Alamofire.git HEAD is now at 668cc5a Added release notes to the CHANGELOG and bumped the version to 4.0.1. Resolved version: 4.0.1 error: the package has an unsupported layout, unexpected source file(s) found: …/Packages/Alamofire-4.0.1/Tests/AFError+AlamofireTests.swift, …/Packages/Alamofire-4.0.1/Tests/AuthenticationTests.swift, …/Packages/Alamofire-4.0.1/Tests/BaseTestCase.swift, …/Packages/Alamofire-4.0.1/Tests/CacheTests.swift, …/Packages/Alamofire-4.0.1/Tests/DownloadTests.swift, …/Packages/Alamofire-4.0.1/Tests/FileManager+AlamofireTests.swift, …/Packages/Alamofire-4.0.1/Tests/MultipartFormDataTests.swift, …/Packages/Alamofire-4.0.1/Tests/NetworkReachabilityManagerTests.swift, …/Packages/Alamofire-4.0.1/Tests/ParameterEncodingTests.swift, …/Packages/Alamofire-4.0.1/Tests/RequestTests.swift, …/Packages/Alamofire-4.0.1/Tests/ResponseSerializationTests.swift, …/Packages/Alamofire-4.0.1/Tests/ResponseTests.swift, …/Packages/Alamofire-4.0.1/Tests/ResultTests.swift, …/Packages/Alamofire-4.0.1/Tests/ServerTrustPolicyTests.swift, …/Packages/Alamofire-4.0.1/Tests/SessionDelegateTests.swift, …/Packages/Alamofire-4.0.1/Tests/SessionManagerTests.swift, …/Packages/Alamofire-4.0.1/Tests/String+AlamofireTests.swift, …/Packages/Alamofire-4.0.1/Tests/TLSEvaluationTests.swift, …/Packages/Alamofire-4.0.1/Tests/URLProtocolTests.swift, …/Packages/Alamofire-4.0.1/Tests/UploadTests.swift, …/Packages/Alamofire-4.0.1/Tests/ValidationTests.swift fix: move the file(s) inside a module

    $ swift package generate-xcodeproj error: the package has an unsupported layout, unexpected source file(s) found: …/Packages/Alamofire-4.0.1/Tests/AFError+AlamofireTests.swift, …/Packages/Alamofire-4.0.1/Tests/AuthenticationTests.swift, …/Packages/Alamofire-4.0.1/Tests/BaseTestCase.swift, …/Packages/Alamofire-4.0.1/Tests/CacheTests.swift, …/Packages/Alamofire-4.0.1/Tests/DownloadTests.swift, …/Packages/Alamofire-4.0.1/Tests/FileManager+AlamofireTests.swift, …/Packages/Alamofire-4.0.1/Tests/MultipartFormDataTests.swift, …/Packages/Alamofire-4.0.1/Tests/NetworkReachabilityManagerTests.swift, …/Packages/Alamofire-4.0.1/Tests/ParameterEncodingTests.swift, …/Packages/Alamofire-4.0.1/Tests/RequestTests.swift, …/Packages/Alamofire-4.0.1/Tests/ResponseSerializationTests.swift, …/Packages/Alamofire-4.0.1/Tests/ResponseTests.swift, …/Packages/Alamofire-4.0.1/Tests/ResultTests.swift, …/Packages/Alamofire-4.0.1/Tests/ServerTrustPolicyTests.swift, …/Packages/Alamofire-4.0.1/Tests/SessionDelegateTests.swift, …/Packages/Alamofire-4.0.1/Tests/SessionManagerTests.swift, …/Packages/Alamofire-4.0.1/Tests/String+AlamofireTests.swift, …/Packages/Alamofire-4.0.1/Tests/TLSEvaluationTests.swift, …/Packages/Alamofire-4.0.1/Tests/URLProtocolTests.swift, …/Packages/Alamofire-4.0.1/Tests/UploadTests.swift, …/Packages/Alamofire-4.0.1/Tests/ValidationTests.swift fix: move the file(s) inside a module

    $ swift --version Apple Swift version 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1) Target: x86_64-apple-macosx10.9

    opened by wadetregaskis 1
  • Bump git from 1.5.0 to 1.11.0

    Bump git from 1.5.0 to 1.11.0

    Bumps git from 1.5.0 to 1.11.0.

    Release notes

    Sourced from git's releases.

    Release v1.11.0

    Full Changelog

    • 292087e Supress unneeded test output (#570)
    • 19dfe5e Add support for fetch options "--force/-f" and "--prune-tags/-P". (#563)
    • 018d919 Fix bug when grepping lines that contain numbers surrounded by colons (#566)
    • c04d16e remove from maintainer (#567)
    • 291ca09 Address command line injection in Git::Lib#fetch
    • 521b8e7 Release v1.10.2 (#561)

    Release v1.10.2

    Full Changelog

    • 57f941c Release v1.10.2
    • c987a74 Add create-release, setup, and console dev scripts (#560)
    • 12e3d03 Store tempfile objects to prevent deletion during tests (#555)

    Release v1.10.1

    Full Changelog

    • c7b12af Release v1.10.1
    • ea28118 Properly escape double quotes in shell commands on Windows (#552)
    • db060fc Properly unescape diff paths (#504)
    • ea47044 Add Ruby 3.0 to CI build (#547)
    • cb01d2b Create a Docker image to run the changelog (#546)

    v.1.10.0

    Full Changelog

    • 8acec7d Release v1.10.0 (#545)
    • 8feb4ff Refactor directory initialization (#544)
    • 3884314 Add -ff option to git clean (#529)
    • 984ff7f #533 Add --depth options for fetch call (#534)
    • 6cba37e Add support for git init --initial-branch=main argument (#539)
    • ff98c42 Add support for the git merge --no-commit argument (#538)
    • 1023f85 Require pathname module (#536)

    v1.9.1

    Full Changelog

    • 58100b0 Release v1.9.1 (#527)
    • 45aeac9 Fix the gpg_sign commit option (#525)

    v1.9.0

    Full Changelog

    • 07a1167 Release v1.9.0 (#524)
    • 8fe479b Fix worktree test when git dir includes symlinks (#522)
    • 0cef8ac feat: add --gpg-sign option on commits (#518)
    • 765df7c Adds file option to config_set to allow adding to specific git-config files (#458)

    ... (truncated)

    Changelog

    Sourced from git's changelog.

    v1.11.0

    • 292087e Supress unneeded test output (#570)
    • 19dfe5e Add support for fetch options "--force/-f" and "--prune-tags/-P". (#563)
    • 018d919 Fix bug when grepping lines that contain numbers surrounded by colons (#566)
    • c04d16e remove from maintainer (#567)
    • 291ca09 Address command line injection in Git::Lib#fetch
    • 521b8e7 Release v1.10.2 (#561)

    See https://github.com/ruby-git/ruby-git/releases/tag/v1.11.0

    v1.10.2

    See https://github.com/ruby-git/ruby-git/releases/tag/v1.10.2

    1.10.1

    See https://github.com/ruby-git/ruby-git/releases/tag/v1.10.1

    1.10.0

    See https://github.com/ruby-git/ruby-git/releases/tag/v1.10.0

    1.9.1

    See https://github.com/ruby-git/ruby-git/releases/tag/v1.9.1

    1.9.0

    See https://github.com/ruby-git/ruby-git/releases/tag/v1.9.0

    1.8.1

    See https://github.com/ruby-git/ruby-git/releases/tag/v1.8.1

    1.8.0

    See https://github.com/ruby-git/ruby-git/releases/tag/v1.8.0

    1.7.0

    See https://github.com/ruby-git/ruby-git/releases/tag/v1.7.0

    1.6.0

    See https://github.com/ruby-git/ruby-git/releases/tag/v1.6.0

    1.6.0.pre1

    See https://github.com/ruby-git/ruby-git/releases/tag/v1.6.0.pre1

    Commits
    • 546bc03 Release v1.11.0
    • 292087e Supress unneeded test output (#570)
    • 19dfe5e Add support for fetch options "--force/-f" and "--prune-tags/-P". (#563)
    • 018d919 Fix bug when grepping lines that contain numbers surrounded by colons (#566)
    • c04d16e remove from maintainer (#567)
    • 291ca09 Address command line injection in Git::Lib#fetch
    • 521b8e7 Release v1.10.2 (#561)
    • c987a74 Add create-release, setup, and console dev scripts (#560)
    • 12e3d03 Store tempfile objects to prevent deletion during tests (#555)
    • 735b083 Release v1.10.1 (#553)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump cocoapods-downloader from 1.3.0 to 1.6.3

    Bump cocoapods-downloader from 1.3.0 to 1.6.3

    Bumps cocoapods-downloader from 1.3.0 to 1.6.3.

    Release notes

    Sourced from cocoapods-downloader's releases.

    1.6.3

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.2

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.1

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.0

    Enhancements
    • None.
    Bug Fixes
    • Adds a check for command injections in the input for hg and git.
      orta #124

    1.5.1

    Enhancements
    • None.
    Bug Fixes
    • Fix "can't modify frozen string" errors when pods are integrated using the branch option
      buju77 #10920

    1.5.0

    ... (truncated)

    Changelog

    Sourced from cocoapods-downloader's changelog.

    1.6.3 (2022-04-01)

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.2 (2022-03-28)

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.1 (2022-03-23)

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.0 (2022-03-22)

    Enhancements
    • None.
    Bug Fixes
    • Adds a check for command injections in the input for hg and git.
      orta #124

    1.5.1 (2021-09-07)

    Enhancements
    • None.

    ... (truncated)

    Commits
    • c03e2ed Release 1.6.3
    • f75bccc Disable Bazaar tests due to macOS 12.3 not including python2
    • 52a0d54 Merge pull request #128 from CocoaPods/validate_before_dl
    • d27c983 Ensure that the git pre-processor doesn't accidentally bail also
    • 3adfe1f [CHANGELOG] Add empty Master section
    • 591167a Release 1.6.2
    • d2564c3 Merge pull request #127 from CocoaPods/validate_before_dl
    • 99fec61 Switches where we check for invalid input, to move it inside the download fun...
    • 96679f2 [CHANGELOG] Add empty Master section
    • 3a7c54b Release 1.6.1
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump addressable from 2.7.0 to 2.8.0

    Bump addressable from 2.7.0 to 2.8.0

    Bumps addressable from 2.7.0 to 2.8.0.

    Changelog

    Sourced from addressable's changelog.

    Addressable 2.8.0

    • fixes ReDoS vulnerability in Addressable::Template#match
    • no longer replaces + with spaces in queries for non-http(s) schemes
    • fixed encoding ipv6 literals
    • the :compacted flag for normalized_query now dedupes parameters
    • fix broken escape_component alias
    • dropping support for Ruby 2.0 and 2.1
    • adding Ruby 3.0 compatibility for development tasks
    • drop support for rack-mount and remove Addressable::Template#generate
    • performance improvements
    • switch CI/CD to GitHub Actions
    Commits
    • 6469a23 Updating gemspec again
    • 2433638 Merge branch 'main' of github.com:sporkmonger/addressable into main
    • e9c76b8 Merge pull request #378 from ashmaroli/flat-map
    • 56c5cf7 Update the gemspec
    • c1fed1c Require a non-vulnerable rake
    • 0d8a312 Adding note about ReDoS vulnerability
    • 89c7613 Merge branch 'template-regexp' into main
    • cf8884f Note about alias fix
    • bb03f71 Merge pull request #371 from charleystran/add_missing_encode_component_doc_entry
    • 6d1d809 Adding note about :compacted normalization
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump kramdown from 2.1.0 to 2.3.1

    Bump kramdown from 2.1.0 to 2.3.1

    Bumps kramdown from 2.1.0 to 2.3.1.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump redcarpet from 3.5.0 to 3.5.1

    Bump redcarpet from 3.5.0 to 3.5.1

    Bumps redcarpet from 3.5.0 to 3.5.1.

    Release notes

    Sourced from redcarpet's releases.

    Redcarpet v3.5.1

    Fix a security vulnerability using :quote in combination with the :escape_html option.

    Reported by Johan Smits.

    Changelog

    Sourced from redcarpet's changelog.

    Version 3.5.1 (Security)

    • Fix a security vulnerability using :quote in combination with the :escape_html option.

      Reported by Johan Smits.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Feature: Fake Responses

    Feature: Fake Responses

    The idea is to create an environment variable or a launch argument which when set to true will use the fake responses if available.

    This will remove the dependency of server while developing modules.

    feature help wanted 
    opened by rahul0x24 6
Releases(v5.0.0)
Owner
Restofire
Restofire is a protocol oriented networking abstraction layer in swift that is built on top of Alamofire to use services in a declartive way
Restofire
A resource based, protocol oriented networking library designed for pure-SwiftUI applications.

Monarch ?? - WIP A resource based, protocol oriented networking library designed for pure-SwiftUI applications. Features: Async/Await Resource Based P

Emilio Pelaez Romero 4 Oct 17, 2022
VFNetwork is a protocol-oriented network layer that will help you assemble your requests in just a few steps.

Simple, Fast and Easy. Introduction VFNetwork is a protocol-oriented network layer that will help you assemble your requests in just a few steps. How

Victor Freitas 4 Aug 22, 2022
Advanced Networking Layer Using Alamofire with Unit Testing

Advanced Networking Layer Using Alamofire with Unit Testing

Ali Fayed 8 May 23, 2022
Simple REST Client based on RxSwift and Alamofire.

RxRestClient Example To run the example project, clone the repo, and run pod install from the Example directory first. Requirements iOS 10.0+ tvOS 10.

STDev 16 Nov 19, 2022
Simple REST Client based on RxSwift and Alamofire.

RxRestClient Example To run the example project, clone the repo, and run pod install from the Example directory first. Requirements iOS 10.0+ tvOS 10.

STDev 16 Nov 19, 2022
Language Server Protocol (LSP) client for Swift

LanguageClient This is a Swift library for abstracting and interacting with language servers that implement the Language Server Protocol. It is built

Chime 35 Jan 1, 2023
C-Xpress is a modern c-like object oriented programming language running on top of the .NET framework

C-Xpress Programming Language The cxpress programming language is a High Level object oriented programming language running on the .NET Framework C-Xp

null 2 Jan 12, 2022
Lightweight network abstraction layer, written on top of Alamofire

TRON is a lightweight network abstraction layer, built on top of Alamofire. It can be used to dramatically simplify interacting with RESTful JSON web-

MLSDev 528 Dec 26, 2022
A progressive download manager for Alamofire

ALDownloadManager A progressive download manager for Alamofire (Alamofire下载器) The default support breakpoint continues. Sequential Download(顺序下载 ) Dow

null 48 May 1, 2022
Alamofire network layer

NVNetworkRequest Alamofire network layer Installation Add this to your Package dependencies: dependencies: [ .package(url: "https://github.com/vin

Vinh Nguyen 0 Nov 19, 2021
Elegantly connect to a JSON api. (Alamofire + Promises + JSON Parsing)

⚠ Important Notice: Farewell ws... hello Networking ! Networking is the next generation of the ws project. Think of it as ws 2.0 built for iOS13. It u

Fresh 351 Oct 2, 2022
Bamboots - Extension 4 Alamofire

Bamboots is a network request framework based on Alamofire , aiming at making network request easier for business development. Protocols Features Requ

mmoaay 442 Dec 22, 2022
EasyImplementationAlamoFire - An iOS project to demonstrate the usage of Alamofire in an efficient and organised way.

EasyImplementationAlamoFire Tutorial to demonstrate an efficient way of handling the APIs structure for your iOS Applications. Prerequisites Swift 5 X

null 0 Jan 3, 2022
Alamofire extension for serialize NSData to SwiftyJSON

Alamofire-SwiftyJSON An extension to make serializing Alamofire's response with SwiftyJSON easily. ⚠️ To use with Swift 3.x please ensure you are usin

SwiftyJSON 1.4k Dec 22, 2022
An Alamofire extension which converts JSON response data into swift objects using EVReflection

AlamofireJsonToObjects ?? This is now a subspec of EVReflection and the code is maintained there. ?? You can install it as a subspec like this: use_fr

Edwin Vermeer 161 Sep 29, 2022
A frida tool that capture GET/POST HTTP requests of iOS Swift library 'Alamofire' and disable SSL Pinning.

FridaHookSwiftAlamofire A frida tool that capture GET/POST HTTP requests of iOS Swift library 'Alamofire' and disable SSL Pinning. 中文文档及过程 Features Ca

neilwu 69 Dec 16, 2022
Swift implementation of WalletConnect v.2 protocol for native iOS applications

Wallet Connect v.2 - Swift Swift implementation of WalletConnect v.2 protocol for native iOS applications. Requirements iOS 13 XCode 13 Swift 5 Usage

WalletConnect 142 Jan 4, 2023
FreeRDP is a free remote desktop protocol library and clients

FreeRDP: A Remote Desktop Protocol Implementation FreeRDP is a free implementation of the Remote Desktop Protocol (RDP), released under the Apache lic

null 7.8k Jan 8, 2023
GeminiProtocol - URLSession support for the Gemini Protocol

GeminiProtocol Network.Framework and URLSession support for the Gemini Protocol

Izzy 3 Feb 16, 2022