RxSwift wrapper around the elegant HTTP networking in Swift Alamofire

Overview

RxAlamofire

RxAlamofire is a RxSwift wrapper around the elegant HTTP networking in Swift Alamofire.

Create release Version License Platform Carthage compatible

Getting Started

Wrapping RxSwift around Alamofire makes working with network requests a smoother and nicer task. Alamofire is a very powerful framework and RxSwift add the ability to compose responses in a simple and effective way.

A basic usage is (considering a simple currency converter):

let formatter = NSNumberFormatter()
formatter.numberStyle = .currencyStyle
formatter.currencyCode = "USD"
if let fromValue = NSNumberFormatter().numberFromString(self.fromTextField.text!) {

RxAlamofire.requestJSON(.get, sourceStringURL)
                .debug()
                .subscribe(onNext: { [weak self] (r, json) in
                    if let dict = json as? [String: AnyObject] {
                        let valDict = dict["rates"] as! Dictionary<String, AnyObject>
                        if let conversionRate = valDict["USD"] as? Float {
                            self?.toTextField.text = formatter
                                .string(from: NSNumber(value: conversionRate * fromValue))
                        }
                    }
                    }, onError: { [weak self] (error) in
                        self?.displayError(error as NSError)
                })
                .disposed(by: disposeBag)

} else {
    self.toTextField.text = "Invalid Input!"
}

Example Usages

Currently, the library features the following extensions:

let stringURL = ""

// MARK: URLSession simple and fast
let session = URLSession.shared()

_ = session.rx
    .response(.get, stringURL)
    .observeOn(MainScheduler.instance)
    .subscribe { print($0) }

_ = session.rx
    .json(.get, stringURL)
    .observeOn(MainScheduler.instance)
    .subscribe { print($0) }

_ = session.rx
    .data(.get, stringURL)
    .observeOn(MainScheduler.instance)
    .subscribe { print($0) }

// MARK: With Alamofire engine

_ = json(.get, stringURL)
    .observeOn(MainScheduler.instance)
    .subscribe { print($0) }

// validation
_ = request(.get, stringURL)
    .validate(statusCode: 200..<300)
    .validate(contentType: ["application/json"])
    .responseJSON()
    .observeOn(MainScheduler.instance)
    .subscribe { print($0) }

// progress
_ = request(.get, stringURL)
    .progress()
    .observeOn(MainScheduler.instance)
    .subscribe { print($0) }

// just fire upload and display progress
_ = upload(Data(), urlRequest: try! RxAlamofire.urlRequest(.get, stringURL))
    .progress()
    .observeOn(MainScheduler.instance)
    .subscribe { print($0) }

// progress and final result
// uploading files with progress showing is processing intensive operation anyway, so
// this doesn't add much overhead
_ = request(.get, stringURL)
    .flatMap { request -> Observable<(Data?, RxProgress)> in
        let dataPart = request.rx
            .data()
            .map { d -> Data? in d }
            .startWith(nil as Data?)
        let progressPart = request.rx.progress()
        return Observable.combineLatest(dataPart, progressPart) { ($0, $1) }
    }
    .observeOn(MainScheduler.instance)
    .subscribe { print($0) }


// MARK: Alamofire Session
// same methods with any Alamofire Session

let session = Session.default

// simple case
_ = session.rx.json(.get, stringURL)
    .observeOn(MainScheduler.instance)
    .subscribe { print($0) }

// URLHTTPResponse + JSON
_ = session.rx.responseJSON(.get, stringURL)
    .observeOn(MainScheduler.instance)
    .subscribe { print($0) }

// URLHTTPResponse + String
_ = session.rx.responseString(.get, stringURL)
    .observeOn(MainScheduler.instance)
    .subscribe { print($0) }

// URLHTTPResponse + Validation + JSON
_ = session.rx.request(.get, stringURL)
    .validate(statusCode: 200 ..< 300)
    .validate(contentType: ["text/json"])
    .json()
    .observeOn(MainScheduler.instance)
    .subscribe { print($0) }

// URLHTTPResponse + Validation + URLHTTPResponse + JSON
_ = session.rx.request(.get, stringURL)
    .validate(statusCode: 200 ..< 300)
    .validate(contentType: ["text/json"])
    .responseJSON()
    .observeOn(MainScheduler.instance)
    .subscribe { print($0) }

// URLHTTPResponse + Validation + URLHTTPResponse + String + Progress
_ = session.rx.request(.get, stringURL)
    .validate(statusCode: 200 ..< 300)
    .validate(contentType: ["text/something"])
    .flatMap { request -> Observable<(String?, RxProgress)> in
        let stringPart = request.rx
            .string()
            .map { d -> String? in d }
            .startWith(nil as String?)
        let progressPart = request.rx.progress()
        return Observable.combineLatest(stringPart, progressPart) { ($0, $1) }
    }
    .observeOn(MainScheduler.instance)
    .subscribe { print($0) }

// Interceptor + URLHTTPResponse + Validation + JSON
let adapter = // Some RequestAdapter
let retrier = // Some RequestRetrier
let interceptor = Interceptor(adapter: adapter, retrier: retrier)
_ = session.rx.request(.get, stringURL)
    .validate()
    .validate(contentType: ["text/json"])
    .responseJSON()
    .observeOn(MainScheduler.instance)
    .subscribe { print($0) }

Installation

There are three ways to install RxAlamofire

CocoaPods

Just add to your project's Podfile:

pod 'RxAlamofire'

Carthage

Add following to Cartfile:

github "RxSwiftCommunity/RxAlamofire" ~> 6.1

Swift Package manager

Create a Package.swift file

// swift-tools-version:5.0

import PackageDescription

let package = Package(
        name: "TestRxAlamofire",

        dependencies: [
            .package(url: "https://github.com/RxSwiftCommunity/RxAlamofire.git",
                     from: "6.1.0"),
        ],

        targets: [
            .target(
                    name: "TestRxAlamofire",
                    dependencies: ["RxAlamofire"])
        ]
)

Manually

To manual install this extension you should get the RxAlamofire/Source/RxAlamofire.swift imported into your project, alongside RxSwift and Alamofire.

Requirements

RxAlamofire requires Swift 5.1 and dedicated versions of Alamofire (5.4.1) and RxSwift (6.0.0).

For the last RxSwift 5.1 support, please use RxAlamofire 5.7.1.

For the last Swift 5.0 support, please use RxAlamofire 5.1.0.

For the last Swift 4.2 support, please use RxAlamofire 4.5.0.

Comments
  • Support for Alamofire Statistical Metrics?

    Support for Alamofire Statistical Metrics?

    From Alamofire documentation, DataResponse provided a lot of useful information.

    Statistical Metrics

    Timeline

    Alamofire collects timings throughout the lifecycle of a Request and creates a Timeline object exposed as a property on all response types.

    Alamofire.request("https://httpbin.org/get").responseJSON { response in
        print(response.timeline)
    }
    

    The above reports the following Timeline info:

    • Latency: 0.428 seconds
    • Request Duration: 0.428 seconds
    • Serialization Duration: 0.001 seconds
    • Total Duration: 0.429 seconds

    Does RxAlamofire currently provides such API?

    enhancement 
    opened by gaplo917 18
  • How to use this with alamofireobjectmapper?

    How to use this with alamofireobjectmapper?

    How to use this with alamofireobjectmapper?

    Please provide short example

    I'm trying to nest several alamofire requests. Is it possible that you provide an example with the documentation? Thanks!

    opened by rlam3 16
  • Support Alamofire 5.0.0

    Support Alamofire 5.0.0

    It may be too early to make this issue, but Alamofire 5 B1 is fully functional and has very good qualities. It seems it's new API is practically defined as announced on Swift's blog.

    There is a new branch with the beta 1 changes, whose tests pass, as the start of the migration process and it is fully usable.

    If you think well, any future change you can do on that new branch

    feature request 
    opened by carlosypunto 15
  • Xcode 10.2 carthage build fails

    Xcode 10.2 carthage build fails

    Cartfile

    github "Alamofire/Alamofire" ~> 4.8
    github "ReactiveX/RxSwift" ~> 5.0
    github "RxSwiftCommunity/RxAlamofire" ~> 5.0
    

    carthage version 0.33

    swift --version Apple Swift version 5.0.1 (swiftlang-1001.0.82.4 clang-1001.0.46.5) Target: x86_64-apple-darwin18.6.0

    carthage update --platform ios --no-use-binaries
    *** Fetching Alamofire
    *** Fetching RxSwift
    *** Fetching RxAlamofire
    *** Checking out RxAlamofire at "5.0.0"
    *** Checking out RxSwift at "5.0.1"
    *** Checking out Alamofire at "4.8.2"
    *** xcodebuild output can be found in /var/folders/1r/t4dmzfv130d976z8lq6fjy3m0000gp/T/carthage-xcodebuild.tr5phY.log
    *** Building scheme "Alamofire iOS" in Alamofire.xcworkspace
    *** Building scheme "RxBlocking" in Rx.xcworkspace
    *** Building scheme "RxRelay" in Rx.xcworkspace
    *** Building scheme "RxSwift" in Rx.xcworkspace
    *** Building scheme "RxCocoa" in Rx.xcworkspace
    *** Building scheme "RxTest" in Rx.xcworkspace
    *** Building scheme "RxAlamofire iOS" in _.xcodeproj
    *** Building scheme "RxAlamofire-iOS" in RxAlamofire.xcworkspace
    Build Failed
    	Task failed with exit code 65:
      ...
    

    From log:

    Build system information
    warning: duplicate output file '' on task: MkDir /Users/ivan/Library/Caches/org.carthage.CarthageKit/DerivedData/10.2.1_10E1001/RxAlamofire/5.0.0/Build/Intermediates.noindex/ArchiveIntermediates/RxAlamofire-iOS/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/RxSwift.framework (in target 'RxSwift-watchOS')
    
    Build system information
    warning: duplicate output file '/Users/ivan/Library/Caches/org.carthage.CarthageKit/DerivedData/10.2.1_10E1001/RxAlamofire/5.0.0/Build/Intermediates.noindex/ArchiveIntermediates/RxAlamofire-iOS/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/RxSwift.framework/Headers' on task: MkDir /Users/ivan/Library/Caches/org.carthage.CarthageKit/DerivedData/10.2.1_10E1001/RxAlamofire/5.0.0/Build/Intermediates.noindex/ArchiveIntermediates/RxAlamofire-iOS/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/RxSwift.framework/Headers (in target 'RxSwift-watchOS')
    
    Build system information
    warning: duplicate output file '' on task: MkDir /Users/ivan/Library/Caches/org.carthage.CarthageKit/DerivedData/10.2.1_10E1001/RxAlamofire/5.0.0/Build/Intermediates.noindex/ArchiveIntermediates/RxAlamofire-iOS/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/RxSwift.framework/Headers (in target 'RxSwift-watchOS')
    
    Build system information
    warning: duplicate output file '/Users/ivan/Library/Caches/org.carthage.CarthageKit/DerivedData/10.2.1_10E1001/RxAlamofire/5.0.0/Build/Intermediates.noindex/ArchiveIntermediates/RxAlamofire-iOS/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/RxSwift.framework/Info.plist' on task: ProcessInfoPlistFile /Users/ivan/Library/Caches/org.carthage.CarthageKit/DerivedData/10.2.1_10E1001/RxAlamofire/5.0.0/Build/Intermediates.noindex/ArchiveIntermediates/RxAlamofire-iOS/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/RxSwift.framework/Info.plist /Users/ivan/Developer/rxalamofire5/Carthage/Checkouts/RxAlamofire/RxAlamofire/Pods/Target Support Files/RxSwift-watchOS/RxSwift-watchOS-Info.plist (in target 'RxSwift-watchOS')
    
    Build system information
    warning: duplicate output file '' on task: SetMode u+w,go-w,a+rX /Users/ivan/Library/Caches/org.carthage.CarthageKit/DerivedData/10.2.1_10E1001/RxAlamofire/5.0.0/Build/Intermediates.noindex/ArchiveIntermediates/RxAlamofire-iOS/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/RxSwift.framework (in target 'RxSwift-watchOS')
    
    Build system information
    warning: duplicate output file '' on task: SetOwnerAndGroup ivan:staff /Users/ivan/Library/Caches/org.carthage.CarthageKit/DerivedData/10.2.1_10E1001/RxAlamofire/5.0.0/Build/Intermediates.noindex/ArchiveIntermediates/RxAlamofire-iOS/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/RxSwift.framework (in target 'RxSwift-watchOS')
    
    Build system information
    warning: duplicate output file '' on task: SetOwnerAndGroup ivan:staff /Users/ivan/Library/Caches/org.carthage.CarthageKit/DerivedData/10.2.1_10E1001/RxAlamofire/5.0.0/Build/Intermediates.noindex/ArchiveIntermediates/RxAlamofire-iOS/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/RxSwift.framework (in target 'RxSwift-watchOS')
    
    Build system information
    warning: duplicate output file '/Users/ivan/Library/Caches/org.carthage.CarthageKit/DerivedData/10.2.1_10E1001/RxAlamofire/5.0.0/Build/Intermediates.noindex/ArchiveIntermediates/RxAlamofire-iOS/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/RxSwift.framework/Headers/RxSwift-Swift.h' on task: SwiftMergeGeneratedHeaders /Users/ivan/Library/Caches/org.carthage.CarthageKit/DerivedData/10.2.1_10E1001/RxAlamofire/5.0.0/Build/Intermediates.noindex/ArchiveIntermediates/RxAlamofire-iOS/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/RxSwift.framework/Headers/RxSwift-Swift.h /Users/ivan/Library/Caches/org.carthage.CarthageKit/DerivedData/10.2.1_10E1001/RxAlamofire/5.0.0/Build/Intermediates.noindex/ArchiveIntermediates/RxAlamofire-iOS/IntermediateBuildFilesPath/Pods.build/Release-iphoneos/RxSwift-watchOS.build/Objects-normal/arm64/RxSwift-Swift.h /Users/ivan/Library/Caches/org.carthage.CarthageKit/DerivedData/10.2.1_10E1001/RxAlamofire/5.0.0/Build/Intermediates.noindex/ArchiveIntermediates/RxAlamofire-iOS/IntermediateBuildFilesPath/Pods.build/Release-iphoneos/RxSwift-watchOS.build/Objects-normal/armv7/RxSwift-Swift.h (in target 'RxSwift-watchOS')
    
    Build system information
    warning: duplicate output file '' on task: Touch /Users/ivan/Library/Caches/org.carthage.CarthageKit/DerivedData/10.2.1_10E1001/RxAlamofire/5.0.0/Build/Intermediates.noindex/ArchiveIntermediates/RxAlamofire-iOS/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/RxSwift.framework (in target 'RxSwift-watchOS')
    
    ** ARCHIVE FAILED **
    

    I can reproduce this in a new folder containing just the Cartfile listed above.

    opened by ifabijanovic 13
  • Add a method to return DataResponse from DataRequest.responseString()

    Add a method to return DataResponse from DataRequest.responseString()

    This is similar to PR #79 except for responseString() instead of responseJSON(). I wrote it to work identically to the code in that pull request.

    It allows access to metrics (NSURLSessionTaskMetrics mentioned in issue #76 ) for those who need the response as a string, not JSON.

    opened by philippelatulippe 13
  • Cannot get response data when error occurred

    Cannot get response data when error occurred

    In case I'd like to get error status, I have to do a hack:

    .asDriver(onErrorRecover: { (error) -> Driver<AnyObject> in
        let e:NSObject = error as! NSObject;
        if let userInfo = e.valueForKey("_userInfo") as? NSDictionary {
            if let statusCode = userInfo["StatusCode"] as? Int {
                return Driver.just(PKApiError.error(statusCode));
            }
        }
        return Driver.just(PKApiError.defaultError())
    })
    

    I dunno if we have a better solution. Anyway, I find no way to get response data, e.g:

    {
      "error" : {
        "status" : 400,
        "message" : "Fail to authenticate with Facebook"
      }
    }
    

    After digging in code, I see:

    case .Failure(let error):
        observer.on(.Error(error as ErrorType))
    

    I think that is the reason why. IMO it'd better if we embed explicitly status code and data (packedResponse .data) here

    opened by rickyngk 13
  • Provide helper methods for validations and common response types

    Provide helper methods for validations and common response types

    I just tried to validate responses and I found it hard to use flatMap.

    Here is what it looked like in the doc :

    _ = request(.get, stringURL)
        .flatMap { request in
            return request.validate(statusCode: 200..<300)
            .validate(contentType: ["text/json"])
                .rx.json()
        }
        .observeOn(MainScheduler.instance)
        .subscribe { print($0) }
    

    And with the improvement :

    _ = request(.get, stringURL)
        .validate(statusCode: 200..<300)
        .validate(contentType: ["application/json"])
        .responseJSON()
        .observeOn(MainScheduler.instance)
        .subscribe { print($0) }
    

    Moreover, I find it easier to discover how to do validation this way using autocompletion.

    So I created some nice wrappers around DataRequest.validate by extending Observable<DataRequest>.

    Let me know what you think. 😉

    opened by nverinaud 12
  • carthage update --platform ios . error

    carthage update --platform ios . error

    Building scheme "RxAlamofire iOS" in .xcodeproj Build Failed Task failed with exit code 65: /usr/bin/xcrun xcodebuild -project /Users/chenxufeng/Documents/work/apub-companion-ios/Carthage/Checkouts/RxAlamofire/.xcodeproj -scheme RxAlamofire\ iOS -configuration Release -derivedDataPath /Users/chenxufeng/Library/Caches/org.carthage.CarthageKit/DerivedData/10.1_10B61/RxAlamofire/4.4.1 -sdk iphoneos ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY= CARTHAGE=YES archive -archivePath /var/folders/q3/6zscgh7134d_b15cxfkrqpfw0000gn/T/RxAlamofire SKIP_INSTALL=YES GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=NO CLANG_ENABLE_CODE_COVERAGE=NO STRIP_INSTALLED_PRODUCT=NO (launched in /Users/chenxufeng/Documents/work/apub-companion-ios/Carthage/Checkouts/RxAlamofire)

    opened by afeng159 11
  • How do I use RxAlamofire with URLRequestConvertible?

    How do I use RxAlamofire with URLRequestConvertible?

    I am trying to use RxAlamofire with a URLRequestConvertible router enum. I can see that this feature was added in #69 but for some reason, the methods are not available for me to use, the ones I have all take a URLConvertible so I have to cast my URLRequestConvertible as URLConvertible. Is this the right way to do this?

    Edit: I'm also facing issue #78 the method in RxAlamofire which should take a URLRequestConvertible as the only parameter keeps saying it's missing argument for second parameter.

    help wanted 
    opened by kizitonwose 11
  • Fix SPM paths

    Fix SPM paths

    Trying to depend on RxAlamofire was failing because paths are funky this specifies the right directory so that other packages can depend on this library

    opened by kdawgwilk 10
  • Use new `Single` unit from RxSwift 3.3

    Use new `Single` unit from RxSwift 3.3

    RxSwift 3.3 added a new Single trait (formerly called "unit"):

    A Single is a variation of Observable that, instead of emitting a series of elements, is always guaranteed to emit either a single element or an error.

    Docs

    As mentioned in RxSwift docs, HTTP requests fit this model extremely well.

    enhancement 
    opened by joshfriend 10
  • chore(deps): bump addressable from 2.7.0 to 2.8.1

    chore(deps): bump addressable from 2.7.0 to 2.8.1

    Bumps addressable from 2.7.0 to 2.8.1.

    Changelog

    Sourced from addressable's changelog.

    Addressable 2.8.1

    • refactor Addressable::URI.normalize_path to address linter offenses (#430)
    • remove redundant colon in Addressable::URI::CharacterClasses::AUTHORITY regex (#438)
    • update gemspec to reflect supported Ruby versions (#466, #464, #463)
    • compatibility w/ public_suffix 5.x (#466, #465, #460)
    • fixes "invalid byte sequence in UTF-8" exception when unencoding URLs containing non UTF-8 characters (#459)
    • Ractor compatibility (#449)
    • use the whole string instead of a single line for template match (#431)
    • force UTF-8 encoding only if needed (#341)

    #460: sporkmonger/addressable#460 #463: sporkmonger/addressable#463 #464: sporkmonger/addressable#464 #465: sporkmonger/addressable#465 #466: sporkmonger/addressable#466

    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
    • 8657465 Update version, gemspec, and CHANGELOG for 2.8.1 (#474)
    • 4fc5bb6 CI: remove Ubuntu 18.04 job (#473)
    • 860fede Force UTF-8 encoding only if needed (#341)
    • 99810af Merge pull request #431 from ojab/ct-_do_not_parse_multiline_strings
    • 7ce0f48 Merge branch 'main' into ct-_do_not_parse_multiline_strings
    • 7ecf751 Merge pull request #449 from okeeblow/freeze_concatenated_strings
    • 41f12dd Merge branch 'main' into freeze_concatenated_strings
    • 068f673 Merge pull request #459 from jarthod/iso-encoding-problem
    • b4c9882 Merge branch 'main' into iso-encoding-problem
    • 08d27e8 Merge pull request #471 from sporkmonger/sporkmonger-enable-codeql
    • 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
  • chore(deps): bump tzinfo from 1.2.9 to 1.2.10

    chore(deps): bump tzinfo from 1.2.9 to 1.2.10

    Bumps tzinfo from 1.2.9 to 1.2.10.

    Release notes

    Sourced from tzinfo's releases.

    v1.2.10

    TZInfo v1.2.10 on RubyGems.org

    Changelog

    Sourced from tzinfo's changelog.

    Version 1.2.10 - 19-Jul-2022

    Commits
    • 0814dcd Fix the release date.
    • fd05e2a Preparing v1.2.10.
    • b98c32e Merge branch 'fix-directory-traversal-1.2' into 1.2
    • ac3ee68 Remove unnecessary escaping of + within regex character classes.
    • 9d49bf9 Fix relative path loading tests.
    • 394c381 Remove private_constant for consistency and compatibility.
    • 5e9f990 Exclude Arch Linux's SECURITY file from the time zone index.
    • 17fc9e1 Workaround for 'Permission denied - NUL' errors with JRuby on Windows.
    • 6bd7a51 Update copyright years.
    • 9905ca9 Fix directory traversal in Timezone.get when using Ruby data source
    • 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
  • chore(deps): bump git from 1.8.1 to 1.11.0

    chore(deps): bump git from 1.8.1 to 1.11.0

    Bumps git from 1.8.1 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

    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
  • chore(deps): bump cocoapods-downloader from 1.4.0 to 1.6.3

    chore(deps): bump cocoapods-downloader from 1.4.0 to 1.6.3

    Bumps cocoapods-downloader from 1.4.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
  • RxAlamofire checks body if response code is 202

    RxAlamofire checks body if response code is 202

    If the response code from server is 202, rxalamofire checks for a body and if it is empty throws a inputDataNilOrZeroLength error which should not be the same as the request was still a success.

    opened by harshvardhanarora 1
Releases(v6.1.2)
Owner
RxSwift Community
RxSwift ecosystem projects
RxSwift Community
Realm RxSwift - This application was written in order to use Realm, RxSwift frameworks in real example

Realm_RxSwift This simple app was written to introduce basic operations of some

Elbek Khasanov 3 Apr 7, 2022
RxAlamoRecord combines the power of the AlamoRecord and RxSwift libraries to create a networking layer that makes interacting with API's easier than ever reactively.

Written in Swift 5 RxAlamoRecord combines the power of the AlamoRecord and RxSwift libraries to create a networking layer that makes interacting with

Dalton Hinterscher 9 Aug 7, 2020
RxSwift reactive wrapper for view gestures

RxGesture Usage To run the example project, clone the repo, in the Example folder open RxGesture.xcworkspace. You might need to run pod install from t

RxSwift Community 1.3k Dec 30, 2022
A reactive wrapper built around UIImagePickerController.

RxMediaPicker RxMediaPicker is a RxSwift wrapper built around UIImagePickerController consisting in a simple interface for common actions like picking

RxSwift Community 180 Apr 24, 2022
RxSwift extentions for Swift optionals and "Occupiable" types

RxOptional RxSwift extentions for Swift optionals and "Occupiable" types. Usage All operators are available on Driver as well unless otherwise marked.

Thane Gill 8 Jun 28, 2020
Super Simple Pager with RxSwift extension

SSPager Super Simple Pager Example To run the example project, clone the repo, and run pod install from the SSPagerExample directory first. Installati

9oya 4 Jul 10, 2022
RxSwift bindings for Permissions API in iOS.

RxPermission RxSwift bindings for Permission API that helps you with Permissions in iOS. Installation RxPermission is available through CocoaPods. I c

Luke 230 Dec 27, 2022
RxSwift extension for RealmSwift's types

RxRealm This library is a thin wrapper around RealmSwift ( Realm Docs ). Table of contents: Observing object collections Observing a single object Wri

RxSwift Community 1.1k Jan 6, 2023
iOS & OSX Bluetooth library for RxSwift

RxBluetoothKit is a Bluetooth library that makes interaction with BLE devices much more pleasant. It's backed by RxSwift and CoreBluetooth and it prov

Polidea 1.3k Dec 16, 2022
Handy RxSwift extensions on NSObject, including rx.disposeBag.

NSObject+Rx If you're using RxSwift, you've probably encountered the following code more than a few times. class MyObject: Whatever { let disposeBag

RxSwift Community 625 Dec 12, 2022
RxSwift extensions for Core Data

RxCoreData Example To run the example project, clone the repo, and run pod install from the Example directory first. Requirements Xcode 9.0 Swift 4.0

RxSwift Community 164 Oct 14, 2022
🤖 RxSwift + State Machine, inspired by Redux and Elm.

RxAutomaton RxSwift port of ReactiveAutomaton (State Machine). Terminology Whenever the word "signal" or "(signal) producer" appears (derived from Rea

Yasuhiro Inami 719 Nov 19, 2022
STDevRxExt contains some extension functions for RxSwift and RxCocoa which makes our live easy.

STDevRxExt Example To run the Example.playground, clone the repo, and run pod install from the Example directory first. Requirements iOS 9.0+ tvOS 9.0

STDev 6 Mar 26, 2021
Support Combine Assign subscriber in RxSwift.

RxAssign Support Combine Assign subscriber in RxSwift. Assign uses a KeyPath which is really nice and useful. ** RxAssign extends Driver and Signal in

Won Heo 3 Dec 7, 2021
This is the demo of MVVM-C structure with dependency injection using RxSwift.

MVVMC-Demo Demo defination This is the demo project, I have integrated two APIs for MovieDB APIS (https://www.themoviedb.org/). One for the listing of

Anshul Shah 61 Dec 6, 2022
Elegant state machine for Swift.

SwiftState Elegant state machine for Swift. Example enum MyState: StateType { case state0, state1, state2 } // setup state machine let machine = S

ReactKit 885 Dec 16, 2022
ReactiveCocoa wrapper for CLLocationManager.

ReactiveSwift wrapper to observe location Our wrapper automatically asks for permission. It determines what kind of permission your app requires by ch

Ackee 24 Sep 6, 2022
Redux for Swift - a predictable state container for Swift apps

Merge / deprecation announcement: ReduxKit and Swift-Flow have joined forces! The result is ReSwift. The nitty gritty: We decided to deprecate ReduxKi

null 613 Jan 3, 2023
Unidirectional flow implemented using the latest Swift Generics and Swift Concurrency features.

swift-unidirectional-flow Unidirectional flow implemented using the latest Swift Generics and Swift Concurrency features. struct SearchState: Equatabl

Majid Jabrayilov 104 Dec 26, 2022