├── .github └── workflows │ ├── create-release.yml │ └── pull_request.yml ├── .gitignore ├── .jazzy.yaml ├── .swiftformat ├── .swiftlint.yml ├── .swiftpm └── xcode │ └── package.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ └── IDEWorkspaceChecks.plist ├── .versionrc ├── Brewfile ├── CHANGELOG.md ├── Cartfile ├── Cartfile.private ├── Cartfile.resolved ├── Dangerfile ├── Examples ├── Podfile ├── Podfile.lock ├── RxAlamofireDemo-iOS │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── Info.plist │ └── MasterViewController.swift ├── RxAlamofireDemo-tvOS │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ ├── App Icon & Top Shelf Image.brandassets │ │ │ ├── App Icon - App Store.imagestack │ │ │ │ ├── Back.imagestacklayer │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ └── Contents.json │ │ │ │ │ └── Contents.json │ │ │ │ ├── Contents.json │ │ │ │ ├── Front.imagestacklayer │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ └── Contents.json │ │ │ │ │ └── Contents.json │ │ │ │ └── Middle.imagestacklayer │ │ │ │ │ ├── Content.imageset │ │ │ │ │ └── Contents.json │ │ │ │ │ └── Contents.json │ │ │ ├── App Icon.imagestack │ │ │ │ ├── Back.imagestacklayer │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ └── Contents.json │ │ │ │ │ └── Contents.json │ │ │ │ ├── Contents.json │ │ │ │ ├── Front.imagestacklayer │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ └── Contents.json │ │ │ │ │ └── Contents.json │ │ │ │ └── Middle.imagestacklayer │ │ │ │ │ ├── Content.imageset │ │ │ │ │ └── Contents.json │ │ │ │ │ └── Contents.json │ │ │ ├── Contents.json │ │ │ ├── Top Shelf Image Wide.imageset │ │ │ │ └── Contents.json │ │ │ └── Top Shelf Image.imageset │ │ │ │ └── Contents.json │ │ └── Contents.json │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── Info.plist │ └── ViewController.swift ├── RxAlamofireDemo.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ └── xcschemes │ │ ├── RxAlamofireDemo-iOS.xcscheme │ │ └── RxAlamofireDemo-tvOS.xcscheme ├── RxAlamofireDemo.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── pod_install.sh └── project.yml ├── Gemfile ├── Gemfile.lock ├── LICENSE.md ├── Package.swift ├── README.md ├── RxAlamofire.podspec ├── RxAlamofire.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── xcshareddata │ └── xcschemes │ ├── RxAlamofire iOS.xcscheme │ ├── RxAlamofire macOS.xcscheme │ ├── RxAlamofire tvOS.xcscheme │ └── RxAlamofire watchOS.xcscheme ├── Sources └── RxAlamofire │ ├── Cocoa │ └── URLSession+RxAlamofire.swift │ ├── Info.plist │ └── RxAlamofire.swift ├── Tests ├── LinuxMain.swift └── RxAlamofireTests │ ├── RxAlamofireTests.swift │ └── XCTestManifests.swift ├── cleanup.sh ├── pods.sh ├── project-carthage.yml ├── project-spm.yml └── scripts ├── bump-version.sh ├── carthage.sh └── xcframeworks.sh /.github/workflows/create-release.yml: -------------------------------------------------------------------------------- 1 | name: Create release 2 | 3 | on: 4 | push: 5 | branches: [main] 6 | 7 | jobs: 8 | build: 9 | if: "!contains(github.event.head_commit.message, 'skip ci')" 10 | runs-on: macos-11.0 11 | 12 | steps: 13 | - uses: actions/checkout@v2 14 | with: 15 | fetch-depth: 0 16 | 17 | - name: Fetch all tags 18 | run: git fetch --depth=1 origin +refs/tags/*:refs/tags/* 19 | 20 | - name: Bump version 21 | run: | 22 | chmod +x ./scripts/bump-version.sh 23 | ./scripts/bump-version.sh 24 | 25 | # - name: Changelog 26 | # uses: scottbrenner/generate-changelog-action@master 27 | # id: Changelog 28 | # env: 29 | # REPO: ${{ github.repository }} 30 | 31 | - name: Push changes 32 | uses: ad-m/github-push-action@master 33 | with: 34 | github_token: ${{ secrets.GITHUB_TOKEN }} 35 | branch: ${{ github.ref }} 36 | 37 | - name: Restore SPM Cache 38 | uses: actions/cache@v1 39 | with: 40 | path: .build 41 | key: ${{ runner.os }}-spm-${{ hashFiles('**/Package.resolved') }} 42 | restore-keys: | 43 | ${{ runner.os }}-spm- 44 | 45 | - name: Release XCFrameworks 46 | run: | 47 | chmod +x ./scripts/xcframeworks.sh 48 | ./scripts/xcframeworks.sh 49 | 50 | - name: Create Release 51 | id: create_release 52 | uses: actions/create-release@v1 53 | env: 54 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 55 | with: 56 | tag_name: ${{ env.RELEASE_VERSION }} 57 | release_name: RxAlamofire ${{ env.RELEASE_VERSION }} 58 | # body: | 59 | # ${{ steps.Changelog.outputs.changelog }} 60 | draft: false 61 | prerelease: false 62 | 63 | - name: Upload XCFramework 64 | uses: actions/upload-release-asset@v1 65 | env: 66 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 67 | with: 68 | upload_url: ${{ steps.create_release.outputs.upload_url }} 69 | asset_path: ./RxAlamofire.xcframework.zip 70 | asset_name: RxAlamofire.xcframework.zip 71 | asset_content_type: application/zip 72 | 73 | - name: Deploy to Cocoapods 74 | run: | 75 | set -eo pipefail 76 | export RELEASE_VERSION="$(git describe --abbrev=0 | tr -d '\n')" 77 | RELEASE_VERSION=${RELEASE_VERSION:1} 78 | pod lib lint --allow-warnings 79 | pod trunk push --allow-warnings 80 | env: 81 | COCOAPODS_TRUNK_TOKEN: ${{ secrets.COCOAPODS_TRUNK_TOKEN }} 82 | -------------------------------------------------------------------------------- /.github/workflows/pull_request.yml: -------------------------------------------------------------------------------- 1 | name: Lint, build and test 2 | 3 | on: 4 | pull_request: 5 | branches: [main] 6 | 7 | jobs: 8 | build: 9 | runs-on: macos-11.0 10 | 11 | steps: 12 | - uses: actions/checkout@v2 13 | with: 14 | fetch-depth: 0 15 | 16 | - name: Fetch all tags 17 | run: git fetch --depth=1 origin +refs/tags/*:refs/tags/* 18 | 19 | - name: Resolve dependencies 20 | run: | 21 | brew bundle 22 | bundle 23 | 24 | - name: Danger 25 | run: | 26 | bundle exec danger 27 | env: 28 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 29 | 30 | - name: Restore SPM Cache 31 | uses: actions/cache@v1 32 | with: 33 | path: .build 34 | key: ${{ runner.os }}-spm-${{ hashFiles('**/Package.resolved') }} 35 | restore-keys: | 36 | ${{ runner.os }}-spm- 37 | 38 | - name: Build and test (SPM) 39 | run: | 40 | swift build 41 | swift test 42 | 43 | - name: Build Cocoapods iOS Demo 44 | run: | 45 | set -eo pipefail 46 | cd Examples 47 | xcodegen 48 | pod install --repo-update 49 | xcodebuild build -scheme 'RxAlamofireDemo-iOS' -workspace 'RxAlamofireDemo.xcworkspace' -sdk iphonesimulator -destination "platform=iOS simulator,name=iPhone 11" 50 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata 19 | *.swp 20 | 21 | ## Other 22 | *.xccheckout 23 | *.moved-aside 24 | *.xcuserstate 25 | *.xcscmblueprint 26 | 27 | ## Obj-C/Swift specific 28 | *.hmap 29 | *.ipa 30 | 31 | # CocoaPods 32 | # 33 | # We recommend against adding the Pods directory to your .gitignore. However 34 | # you should judge for yourself, the pros and cons are mentioned at: 35 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 36 | # 37 | Pods/ 38 | 39 | # Carthage 40 | # 41 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 42 | Carthage/Checkouts 43 | Carthage/Build 44 | 45 | # Swift Package Manager 46 | .build 47 | Package.resolved 48 | 49 | .DS_Store 50 | **/.idea/** 51 | 52 | RxAlamofire-SPM.xcodeproj -------------------------------------------------------------------------------- /.jazzy.yaml: -------------------------------------------------------------------------------- 1 | output: ../docs/RxAlamofire 2 | module: RxAlamofire 3 | xcodebuild_arguments: 4 | - -scheme 5 | - RxAlamofire iOS -------------------------------------------------------------------------------- /.swiftformat: -------------------------------------------------------------------------------- 1 | --allman false 2 | --binarygrouping none 3 | --commas inline 4 | --comments ignore 5 | --decimalgrouping 3,6 6 | --elseposition same-line 7 | --empty void 8 | --exponentcase lowercase 9 | --exponentgrouping disabled 10 | --fractiongrouping disabled 11 | --disable blankLinesAroundMark 12 | --header ignore 13 | --hexgrouping 4,8 14 | --hexliteralcase uppercase 15 | --patternlet hoist 16 | --ifdef indent 17 | --indent 2 18 | --indentcase false 19 | --linebreaks lf 20 | --octalgrouping none 21 | --operatorfunc nospace 22 | --patternlet hoist 23 | --ranges nospace 24 | --self remove 25 | --semicolons inline 26 | --stripunusedargs closure-only 27 | --trimwhitespace always 28 | --wraparguments after-first 29 | --wrapcollections before-first 30 | --enable blankLinesBetweenScopes 31 | --enable redundantVoidReturnType 32 | --enable strongifiedSelf 33 | --enable trailingClosures 34 | --enable trailingSpace 35 | --enable typeSugar 36 | --enable spaceInsideParens 37 | --enable spaceInsideBrackets 38 | --enable spaceInsideBraces 39 | --enable spaceAroundOperators 40 | --enable spaceAroundBraces 41 | --enable redundantParens 42 | --enable redundantNilInit 43 | --enable consecutiveSpaces 44 | --enable anyObjectProtocol 45 | --disable isEmpty -------------------------------------------------------------------------------- /.swiftlint.yml: -------------------------------------------------------------------------------- 1 | disabled_rules: 2 | - trailing_whitespace 3 | - trailing_comma 4 | - large_tuple 5 | - nesting 6 | - todo 7 | - operator_whitespace 8 | - colon 9 | - identifier_name 10 | 11 | opt_in_rules: # some rules are only opt-in 12 | - empty_count 13 | - yoda_condition 14 | # Find all the available rules by running: 15 | # swiftlint rules 16 | 17 | included: 18 | - Sources 19 | - Tests 20 | - Examples/RxAlamofireDemo-iOS 21 | - Examples/RxAlamofireDemo-tvOS 22 | 23 | # excluded: # paths to ignore during linting. Takes precedence over `included`. 24 | 25 | # configurable rules can be customized from this configuration file 26 | # binary rules can set their severity level 27 | force_cast: warning # implicitly 28 | force_try: 29 | severity: warning # explicitly 30 | # rules that have both warning and error levels, can set just the warning level 31 | # implicitly 32 | line_length: 180 33 | # they can set both implicitly with an array 34 | function_body_length: 120 35 | type_body_length: 36 | - 400 # warning 37 | - 500 # error 38 | # or they can set both explicitly 39 | file_length: 40 | warning: 500 41 | error: 1200 42 | # naming rules can set warnings/errors for min_length and max_length 43 | # additionally they can set excluded names 44 | generic_type_name: 45 | min_length: 1 # only warning 46 | max_length: 30 47 | 48 | type_name: 49 | min_length: 2 # only warning 50 | max_length: # warning and error 51 | warning: 100 52 | error: 120 53 | excluded: iPhone # excluded via string 54 | identifier_name: 55 | min_length: 56 | warning: 1 57 | reporter: "xcode" 58 | -------------------------------------------------------------------------------- /.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.versionrc: -------------------------------------------------------------------------------- 1 | { 2 | "releaseCommitMessageFormat": "chore(release): {{currentTag}} [skip ci]", 3 | "compareUrlFormat": "{{host}}/{{owner}}/{{repository}}/branches/compare/{{currentTag}}%0D{{previousTag}}", 4 | "commitUrlFormat": "{{host}}/{{owner}}/{{repository}}/commits/{{hash}}" 5 | } 6 | -------------------------------------------------------------------------------- /Brewfile: -------------------------------------------------------------------------------- 1 | brew "xcodegen" -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. 4 | 5 | ### [6.1.2](https://github.com/RxSwiftCommunity/RxAlamofire/branches/compare/v6.1.2%0Dv6.1.1) (2021-06-07) 6 | 7 | 8 | ### Bug Fixes 9 | 10 | * Bump version script fix ([e3f47f4](https://github.com/RxSwiftCommunity/RxAlamofire/commits/e3f47f480432f305403cc9cefcd65bb346268377)) 11 | * Carthage project files ([85249da](https://github.com/RxSwiftCommunity/RxAlamofire/commits/85249da4129c28fadcbc64d111469a0493f608f8)) 12 | * remove unused step ([b233d56](https://github.com/RxSwiftCommunity/RxAlamofire/commits/b233d56929c9166835dd4b0f8b84c8c13e881cd9)) 13 | * support RxSwift 6.2 for Carthage ([6c6508e](https://github.com/RxSwiftCommunity/RxAlamofire/commits/6c6508e0e389ac91718ebfe0c72eb469533c5d08)) 14 | 15 | ### [6.1.2](https://github.com/RxSwiftCommunity/RxAlamofire/branches/compare/v6.1.2%0Dv6.1.1) (2021-06-07) 16 | 17 | 18 | ### Bug Fixes 19 | 20 | * Bump version script fix ([e3f47f4](https://github.com/RxSwiftCommunity/RxAlamofire/commits/e3f47f480432f305403cc9cefcd65bb346268377)) 21 | * Carthage project files ([85249da](https://github.com/RxSwiftCommunity/RxAlamofire/commits/85249da4129c28fadcbc64d111469a0493f608f8)) 22 | * remove unused step ([b233d56](https://github.com/RxSwiftCommunity/RxAlamofire/commits/b233d56929c9166835dd4b0f8b84c8c13e881cd9)) 23 | * support RxSwift 6.2 for Carthage ([6c6508e](https://github.com/RxSwiftCommunity/RxAlamofire/commits/6c6508e0e389ac91718ebfe0c72eb469533c5d08)) 24 | 25 | ### [6.1.2](https://github.com/RxSwiftCommunity/RxAlamofire/branches/compare/v6.1.2%0Dv6.1.1) (2021-01-05) 26 | 27 | 28 | ### Bug Fixes 29 | 30 | * Bump version script fix ([e3f47f4](https://github.com/RxSwiftCommunity/RxAlamofire/commits/e3f47f480432f305403cc9cefcd65bb346268377)) 31 | * remove unused step ([b233d56](https://github.com/RxSwiftCommunity/RxAlamofire/commits/b233d56929c9166835dd4b0f8b84c8c13e881cd9)) 32 | 33 | ### [6.1.1](https://github.com/RxSwiftCommunity/RxAlamofire/branches/compare/v6.1.1%0Dv6.1.0) (2021-01-03) 34 | 35 | ## [6.1.0](https://github.com/RxSwiftCommunity/RxAlamofire/branches/compare/v6.1.0%0Dv6.0.0) (2021-01-03) 36 | 37 | 38 | ### Features 39 | 40 | * Enable XCFramework ([cbb899c](https://github.com/RxSwiftCommunity/RxAlamofire/commits/cbb899ca8712ea50d60110484ce0b12de99ab8da)) 41 | 42 | ## [6.0.0](https://github.com/RxSwiftCommunity/RxAlamofire/branches/compare/v6.0.0%0Dv5.7.1) (2021-01-02) 43 | 44 | 45 | ### ⚠ BREAKING CHANGES 46 | 47 | * RxSwift 6 48 | 49 | * RxSwift 6 ready ([a193df7](https://github.com/RxSwiftCommunity/RxAlamofire/commits/a193df78808b9c61bfccf5a1530c5614dbe7ff18)) 50 | 51 | ### [5.7.1](https://github.com/RxSwiftCommunity/RxAlamofire/branches/compare/v5.7.1%0Dv5.7.0) (2020-12-05) 52 | 53 | ## [5.7.0](https://github.com/RxSwiftCommunity/RxAlamofire/branches/compare/v5.7.0%0Dv5.6.2) (2020-12-05) 54 | 55 | 56 | ### Features 57 | 58 | * Validate successful response made non-default behavior on request ([6ec9800](https://github.com/RxSwiftCommunity/RxAlamofire/commits/6ec9800b3c5f24cb52f1b1eacefbdd7633cc67e5)) 59 | 60 | 61 | ### Bug Fixes 62 | 63 | * Carthage Xcode 12 Workaround ([f15b911](https://github.com/RxSwiftCommunity/RxAlamofire/commits/f15b9119b4a052faeb808f5c803b3e4280becea0)) 64 | * Deprecated set-env command in GA ([e3761f3](https://github.com/RxSwiftCommunity/RxAlamofire/commits/e3761f3a4f5c450f2ec28287d54a857638b8a25f)) 65 | 66 | ### [5.6.2](https://github.com/RxSwiftCommunity/RxAlamofire/branches/compare/v5.6.2%0Dv5.6.1) (2020-09-28) 67 | 68 | 69 | ### Bug Fixes 70 | 71 | * yaml typo ([cfb433e](https://github.com/RxSwiftCommunity/RxAlamofire/commits/cfb433ee562bebe7c40d81efbc9a21e8ddb72273)) 72 | 73 | ### [5.6.1](https://github.com/RxSwiftCommunity/RxAlamofire/branches/compare/v5.6.1%0Dv5.6.0) (2020-09-03) 74 | 75 | ## [5.6.0](https://github.com/RxSwiftCommunity/RxAlamofire/branches/compare/v5.6.0%0Dv5.5.0) (2020-07-07) 76 | 77 | 78 | ### Features 79 | 80 | * **#186:** Create Rx extensions mapping to Alamofire response method ([c04ea5b](https://github.com/RxSwiftCommunity/RxAlamofire/commits/c04ea5bfb0f0f7306742f266e24c5f09a12d0f9e)), closes [#186](https://github.com/RxSwiftCommunity/RxAlamofire/issues/186) 81 | 82 | ## [5.5.0](https://github.com/RxSwiftCommunity/RxAlamofire/branches/compare/v5.5.0%0Dv5.4.0) (2020-06-22) 83 | 84 | 85 | ### Features 86 | 87 | * **#183:** Upload extensions ([4db992c](https://github.com/RxSwiftCommunity/RxAlamofire/commits/4db992c6ff1179d957075687f407fcf9e8a28845)), closes [#183](https://github.com/RxSwiftCommunity/RxAlamofire/issues/183) 88 | 89 | ## [5.4.0](https://github.com/RxSwiftCommunity/RxAlamofire/branches/compare/v5.4.0%0Dv5.3.2) (2020-06-21) 90 | 91 | 92 | ### Features 93 | 94 | * **#185:** Support Alamofire Interceptor ([f059d88](https://github.com/RxSwiftCommunity/RxAlamofire/commits/f059d88212e4191ef16567211fdcd3632215c819)), closes [#185](https://github.com/RxSwiftCommunity/RxAlamofire/issues/185) 95 | 96 | ### [5.3.2](https://github.com/RxSwiftCommunity/RxAlamofire/branches/compare/v5.3.2%0Dv5.3.1) (2020-06-10) 97 | 98 | 99 | ### Bug Fixes 100 | 101 | * indentation ([e475215](https://github.com/RxSwiftCommunity/RxAlamofire/commits/e47521554cb501e4a935459da70b63af28f51200)) 102 | * To include tag version in buildflow ([de1058d](https://github.com/RxSwiftCommunity/RxAlamofire/commits/de1058d827b131273505d115b3d4404a33887c78)) 103 | 104 | ### [5.3.1](https://github.com/RxSwiftCommunity/RxAlamofire/branches/compare/v5.3.1%0Dv5.3.0) (2020-05-25) 105 | 106 | ## 5.3.0 (2020-05-25) 107 | 108 | 109 | ### Features 110 | 111 | * **#173:** Implement danger and improve PR pipeline ([c75b0ef](https://github.com/RxSwiftCommunity/RxAlamofire/commits/c75b0efd37cd0ae90b465d4f7772ff4ee276b5b3)), closes [#173](https://github.com/RxSwiftCommunity/RxAlamofire/issues/173) 112 | * **#173:** Regenerate project ([ebbfdbe](https://github.com/RxSwiftCommunity/RxAlamofire/commits/ebbfdbe588aa26a1a4b0623e4e68a41c4857d5d5)), closes [#173](https://github.com/RxSwiftCommunity/RxAlamofire/issues/173) 113 | * **#174:** Build pipeline to run on feature and PR ([78115aa](https://github.com/RxSwiftCommunity/RxAlamofire/commits/78115aac1941852ab1f4b8a3d369782948acaf68)), closes [#174](https://github.com/RxSwiftCommunity/RxAlamofire/issues/174) 114 | 115 | ### 1.0.1 (2020-05-25) 116 | 117 | ## 5.2.0 (2020-04-18) 118 | 119 | #### Updated 120 | * Uses Alamafire 5.1.0 121 | * Uses RxSwift 5.1.0 122 | * Upgrade project to Swift 5.1 123 | 124 | ## 5.1.0 125 | 126 | #### Updated 127 | 128 | * Add response methods for `Observable`. 129 | 130 | #### Fixed 131 | 132 | * Fixed exchange rate api error in example project 133 | 134 | ## 5.0.0 135 | 136 | #### Updated 137 | * Support macOS and watchOS through Carthage 138 | * Added Example projects for macOS and watchOS 139 | * Uses RxSwift 5.0.0 140 | * Upgrade project to Swift 5.0 141 | 142 | ## 4.5.0 143 | 144 | #### Fixed 145 | * Minimum Swift version is 4.2 (More details in #144) 146 | 147 | ## 4.4.1 148 | 149 | #### Updated 150 | * RxSwift updated to 4.5.0 to officially support Xcode 10.2. 151 | 152 | ## 4.4.0 153 | 154 | #### Updated 155 | * Example project now compatible with Swift 5.0. 156 | 157 | ## 4.3.0 158 | 159 | #### Updated 160 | * Project updated to Xcode 10.0. 161 | * Example project now compatible with Swift 4.2. 162 | 163 | #### Fixed 164 | 165 | ## 4.2.0 166 | 167 | #### Updated 168 | * Project updated to Xcode 9.3. 169 | 170 | #### Fixed 171 | * Fix progress() to correctly support all request types. 172 | 173 | ## 4.1.0 174 | 175 | #### Updated 176 | 177 | * Rename `RxProgress.totalBytesWritten` to `RxProgress.bytesRemaining`. 178 | * Rename `RxProgress.totalBytesExpectedToWrite` to `RxProgress.totalBytes`. 179 | * Convert `RxProgress.bytesRemaining` from a stored- to a computed-property. 180 | * Convert `RxProgress.floatValue` from a function to a computed-property. 181 | * Add `Equatable` conformation to `RxProgress`. 182 | * Add Swift Package Manager support. 183 | * Add helper methods for validation to `Observable`. 184 | * Add helper methods for common response types to `Observable`. 185 | 186 | #### Fixed 187 | 188 | * Fix SPM Support 189 | * Unify download and upload progress handling. 190 | * Fix `Reactive.progress` logic so it actually completes. 191 | -------------------------------------------------------------------------------- /Cartfile: -------------------------------------------------------------------------------- 1 | github "ReactiveX/RxSwift" ~> 6.0.0 2 | github "Alamofire/Alamofire" ~> 5.4 3 | -------------------------------------------------------------------------------- /Cartfile.private: -------------------------------------------------------------------------------- 1 | github "AliSoftware/OHHTTPStubs" ~> 9.1 2 | -------------------------------------------------------------------------------- /Cartfile.resolved: -------------------------------------------------------------------------------- 1 | github "Alamofire/Alamofire" "5.4.3" 2 | github "AliSoftware/OHHTTPStubs" "9.1.0" 3 | github "ReactiveX/RxSwift" "6.2.0" 4 | -------------------------------------------------------------------------------- /Dangerfile: -------------------------------------------------------------------------------- 1 | # Sometimes it's a README fix, or something like that - which isn't relevant for 2 | # including in a project's CHANGELOG for example 3 | declared_trivial = (github.pr_title + github.pr_body).include?("#trivial") 4 | 5 | # Make it more obvious that a PR is a work in progress and shouldn't be merged yet 6 | warn("PR is classed as Work in Progress") if github.pr_title.include? "[WIP]" 7 | 8 | # Warn summary on pull request 9 | if github.pr_body.length < 5 10 | warn "Please provide a summary in the Pull Request description" 11 | end 12 | 13 | # If these are all empty something has gone wrong, better to raise it in a comment 14 | if git.modified_files.empty? && git.added_files.empty? && git.deleted_files.empty? 15 | fail "This PR has no changes at all, this is likely a developer issue." 16 | end 17 | 18 | # Warn when there is a big PR 19 | message("Big PR") if git.lines_of_code > 500 20 | warn("Huge PR") if git.lines_of_code > 1000 21 | fail("Enormous PR. Please split this pull request.") if git.lines_of_code > 3000 22 | 23 | # Warn Cartfile changes 24 | message("Cartfile changed") if git.modified_files.include?("Cartfile") 25 | message("Cartfile.resolved changed") if git.modified_files.include?("Cartfile.resolved") 26 | 27 | # Lint 28 | swiftlint.lint_all_files = true 29 | swiftlint.max_num_violations = 20 30 | swiftlint.config_file = ".swiftlint.yml" 31 | swiftlint.lint_files fail_on_error: true 32 | 33 | # xcov.report( 34 | # scheme: "RxAlamofire iOS", 35 | # project: "RxAlamofire.xcodeproj", 36 | # include_targets: "RxAlamofire.framework", 37 | # minimum_coverage_percentage: 20.0, 38 | # derived_data_path: "Build/", 39 | # ) 40 | -------------------------------------------------------------------------------- /Examples/Podfile: -------------------------------------------------------------------------------- 1 | source "https://cdn.cocoapods.org/" 2 | project "RxAlamofireDemo.xcodeproj" 3 | use_frameworks! 4 | 5 | def common 6 | pod "RxAlamofire/RxCocoa", :path => "../" 7 | end 8 | 9 | def common_tests 10 | pod "OHHTTPStubs", "~> 9.1" 11 | pod "OHHTTPStubs/Swift", "~> 9.1" 12 | pod "RxBlocking", "~> 6.0" 13 | end 14 | 15 | target "RxAlamofireDemo-iOS" do 16 | platform :ios, "10.0" 17 | common 18 | end 19 | 20 | # target "RxAlamofireDemo-macOS" do 21 | # platform :osx, "10.12" 22 | # common 23 | # end 24 | 25 | target "RxAlamofireDemo-tvOS" do 26 | platform :tvos, "10.0" 27 | common 28 | end 29 | -------------------------------------------------------------------------------- /Examples/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Alamofire (5.4.1) 3 | - RxAlamofire/Core (5.7.1): 4 | - Alamofire (~> 5.4) 5 | - RxSwift (~> 6.0) 6 | - RxAlamofire/RxCocoa (5.7.1): 7 | - RxAlamofire/Core 8 | - RxCocoa (~> 6.0) 9 | - RxCocoa (6.0.0): 10 | - RxRelay (= 6.0.0) 11 | - RxSwift (= 6.0.0) 12 | - RxRelay (6.0.0): 13 | - RxSwift (= 6.0.0) 14 | - RxSwift (6.0.0) 15 | 16 | DEPENDENCIES: 17 | - RxAlamofire/RxCocoa (from `../`) 18 | 19 | SPEC REPOS: 20 | trunk: 21 | - Alamofire 22 | - RxCocoa 23 | - RxRelay 24 | - RxSwift 25 | 26 | EXTERNAL SOURCES: 27 | RxAlamofire: 28 | :path: "../" 29 | 30 | SPEC CHECKSUMS: 31 | Alamofire: 2291f7d21ca607c491dd17642e5d40fdcda0e65c 32 | RxAlamofire: 2dbdd68051f7e7779fdd2b7bda9b93ac1e533a19 33 | RxCocoa: 3f79328fafa3645b34600f37c31e64c73ae3a80e 34 | RxRelay: 8d593be109c06ea850df027351beba614b012ffb 35 | RxSwift: c14e798c59b9f6e9a2df8fd235602e85cc044295 36 | 37 | PODFILE CHECKSUM: a7610a5168228508e279f8c77f56aa8c67f26640 38 | 39 | COCOAPODS: 1.10.0 40 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo-iOS/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | @UIApplicationMain 4 | class AppDelegate: UIResponder, UIApplicationDelegate, UISplitViewControllerDelegate { 5 | var window: UIWindow? 6 | 7 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 8 | // Override point for customization after application launch. 9 | return true 10 | } 11 | 12 | func applicationWillResignActive(_ application: UIApplication) { 13 | // Sent when the application is about to move from active to inactive state. This can occur for 14 | // certain types of temporary interruptions (such as an incoming phone call or SMS message) or when 15 | // the user quits the application and it begins the transition to the background state. 16 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame 17 | // rates. Games should use this method to pause the game. 18 | } 19 | 20 | func applicationDidEnterBackground(_ application: UIApplication) { 21 | // Use this method to release shared resources, save user data, invalidate timers, and store enough 22 | // application state information to restore your application to its current state in case it is 23 | // terminated later. 24 | // If your application supports background execution, this method is called instead of 25 | // applicationWillTerminate: when the user quits. 26 | } 27 | 28 | func applicationWillEnterForeground(_ application: UIApplication) { 29 | // Called as part of the transition from the background to the inactive state; here you can 30 | // undo many of the changes made on entering the background. 31 | } 32 | 33 | func applicationDidBecomeActive(_ application: UIApplication) { 34 | // Restart any tasks that were paused (or not yet started) while the application was inactive. 35 | // If the application was previously in the background, optionally refresh the user interface. 36 | } 37 | 38 | func applicationWillTerminate(_ application: UIApplication) { 39 | // Called when the application is about to terminate. Save data if appropriate. 40 | // See also applicationDidEnterBackground:. 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo-iOS/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "idiom" : "ios-marketing", 45 | "size" : "1024x1024", 46 | "scale" : "1x" 47 | } 48 | ], 49 | "info" : { 50 | "version" : 1, 51 | "author" : "xcode" 52 | } 53 | } -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo-iOS/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo-iOS/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 55 | 69 | 75 | 76 | 77 | 78 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo-iOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | NSAppTransportSecurity 26 | 27 | NSAllowsArbitraryLoads 28 | 29 | 30 | UILaunchStoryboardName 31 | LaunchScreen 32 | UIMainStoryboardFile 33 | Main 34 | UIRequiredDeviceCapabilities 35 | 36 | armv7 37 | 38 | UIStatusBarTintParameters 39 | 40 | UINavigationBar 41 | 42 | Style 43 | UIBarStyleDefault 44 | Translucent 45 | 46 | 47 | 48 | UISupportedInterfaceOrientations 49 | 50 | UIInterfaceOrientationPortrait 51 | UIInterfaceOrientationLandscapeLeft 52 | UIInterfaceOrientationLandscapeRight 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo-iOS/MasterViewController.swift: -------------------------------------------------------------------------------- 1 | import Alamofire 2 | import RxAlamofire 3 | import RxSwift 4 | import UIKit 5 | 6 | enum APIError: Error { 7 | case invalidInput 8 | case badResponse 9 | 10 | func toNSError() -> NSError { 11 | let domain = "com.github.rxswiftcommunity.rxalamofire" 12 | switch self { 13 | case .invalidInput: 14 | return NSError(domain: domain, code: -1, userInfo: [NSLocalizedDescriptionKey: "Input should be a valid number"]) 15 | case .badResponse: 16 | return NSError(domain: domain, code: -2, userInfo: [NSLocalizedDescriptionKey: "Bad response"]) 17 | } 18 | } 19 | } 20 | 21 | class MasterViewController: UIViewController, UITextFieldDelegate { 22 | let disposeBag = DisposeBag() 23 | let exchangeRateEndpoint = "https://api.exchangeratesapi.io/latest?base=EUR&symbols=USD" 24 | 25 | @IBOutlet var fromTextField: UITextField! 26 | @IBOutlet var toTextField: UITextField! 27 | @IBOutlet var convertBtn: UIButton! 28 | @IBOutlet var dummyDataBtn: UIButton! 29 | @IBOutlet var dummyDataTextView: UITextView! 30 | 31 | override func viewDidLoad() { 32 | super.viewDidLoad() 33 | } 34 | 35 | // MARK: - UI Actions 36 | 37 | @IBAction func convertPressed(_ sender: UIButton) { 38 | fromTextField.resignFirstResponder() 39 | 40 | guard let fromText = fromTextField.text, let fromValue = Double(fromText) else { 41 | displayError(APIError.invalidInput.toNSError()) 42 | return 43 | } 44 | 45 | requestJSON(.get, exchangeRateEndpoint) 46 | .debug() 47 | .flatMap { (_, json) -> Observable in 48 | guard 49 | let body = json as? [String: Any], 50 | let rates = body["rates"] as? [String: Any], 51 | let rate = rates["USD"] as? Double 52 | else { 53 | return .error(APIError.badResponse.toNSError()) 54 | } 55 | return .just(rate) 56 | } 57 | .subscribe(onNext: { [weak self] rate in 58 | self?.toTextField.text = "\(rate * fromValue)" 59 | }, onError: { [weak self] e in 60 | self?.displayError(e as NSError) 61 | }) 62 | .disposed(by: disposeBag) 63 | } 64 | 65 | func exampleUsages() { 66 | let stringURL = "" 67 | // MARK: NSURLSession simple and fast 68 | let session = URLSession.shared 69 | _ = session.rx 70 | .json(.get, stringURL) 71 | .observeOn(MainScheduler.instance) 72 | .subscribe { print($0) } 73 | 74 | _ = session 75 | .rx.json(.get, stringURL) 76 | .observeOn(MainScheduler.instance) 77 | .subscribe { print($0) } 78 | 79 | _ = session 80 | .rx.data(.get, stringURL) 81 | .observeOn(MainScheduler.instance) 82 | .subscribe { print($0) } 83 | 84 | // MARK: With Alamofire engine 85 | 86 | _ = json(.get, stringURL) 87 | .observeOn(MainScheduler.instance) 88 | .subscribe { print($0) } 89 | 90 | _ = request(.get, stringURL) 91 | .flatMap { request in 92 | request.validate(statusCode: 200..<300) 93 | .validate(contentType: ["text/json"]) 94 | .rx.json() 95 | } 96 | .observeOn(MainScheduler.instance) 97 | .subscribe { print($0) } 98 | 99 | // progress 100 | _ = request(.get, stringURL) 101 | .flatMap { 102 | $0 103 | .validate(statusCode: 200..<300) 104 | .validate(contentType: ["text/json"]) 105 | .rx.progress() 106 | } 107 | .observeOn(MainScheduler.instance) 108 | .subscribe { print($0) } 109 | 110 | // just fire upload and display progress 111 | if let urlRequest = try? urlRequest(.get, stringURL) { 112 | _ = upload(Data(), urlRequest: urlRequest) 113 | .flatMap { 114 | $0 115 | .validate(statusCode: 200..<300) 116 | .validate(contentType: ["text/json"]) 117 | .rx.progress() 118 | } 119 | .observeOn(MainScheduler.instance) 120 | .subscribe { print($0) } 121 | } 122 | 123 | // progress and final result 124 | // uploading files with progress showing is processing intensive operation anyway, so 125 | // this doesn't add much overhead 126 | _ = request(.get, stringURL) 127 | .flatMap { request -> Observable<(Data?, RxProgress)> in 128 | let validatedRequest = request 129 | .validate(statusCode: 200..<300) 130 | .validate(contentType: ["text/json"]) 131 | 132 | let dataPart = validatedRequest 133 | .rx.data() 134 | .map { d -> Data? in d } 135 | .startWith(nil as Data?) 136 | let progressPart = validatedRequest.rx.progress() 137 | return Observable.combineLatest(dataPart, progressPart) { ($0, $1) } 138 | } 139 | .observeOn(MainScheduler.instance) 140 | .subscribe { print($0) } 141 | 142 | // MARK: Alamofire manager 143 | // same methods with any alamofire manager 144 | let manager = Session.default 145 | 146 | // simple case 147 | _ = manager.rx.json(.get, stringURL) 148 | .observeOn(MainScheduler.instance) 149 | .subscribe { print($0) } 150 | 151 | // NSURLHTTPResponse + JSON 152 | _ = manager.rx.responseJSON(.get, stringURL) 153 | .observeOn(MainScheduler.instance) 154 | .subscribe { print($0) } 155 | 156 | // NSURLHTTPResponse + String 157 | _ = manager.rx.responseString(.get, stringURL) 158 | .observeOn(MainScheduler.instance) 159 | .subscribe { print($0) } 160 | 161 | // NSURLHTTPResponse + Validation + String 162 | _ = manager.rx.request(.get, stringURL) 163 | .flatMap { 164 | $0 165 | .validate(statusCode: 200..<300) 166 | .validate(contentType: ["text/json"]) 167 | .rx.string() 168 | } 169 | .observeOn(MainScheduler.instance) 170 | .subscribe { print($0) } 171 | 172 | // NSURLHTTPResponse + Validation + NSURLHTTPResponse + String 173 | _ = manager.rx.request(.get, stringURL) 174 | .flatMap { 175 | $0 176 | .validate(statusCode: 200..<300) 177 | .validate(contentType: ["text/json"]) 178 | .rx.responseString() 179 | } 180 | .observeOn(MainScheduler.instance) 181 | .subscribe { print($0) } 182 | 183 | // NSURLHTTPResponse + Validation + NSURLHTTPResponse + String + Progress 184 | _ = manager.rx.request(.get, stringURL) 185 | .flatMap { request -> Observable<(String?, RxProgress)> in 186 | let validatedRequest = request 187 | .validate(statusCode: 200..<300) 188 | .validate(contentType: ["text/something"]) 189 | 190 | let stringPart = validatedRequest 191 | .rx.string() 192 | .map { d -> String? in d } 193 | .startWith(nil as String?) 194 | let progressPart = validatedRequest.rx.progress() 195 | return Observable.combineLatest(stringPart, progressPart) { ($0, $1) } 196 | } 197 | .observeOn(MainScheduler.instance) 198 | .subscribe { print($0) } 199 | } 200 | 201 | @IBAction func getDummyDataPressed(_ sender: UIButton) { 202 | let dummyPostURLString = "http://jsonplaceholder.typicode.com/posts/1" 203 | let dummyCommentsURLString = "http://jsonplaceholder.typicode.com/posts/1/comments" 204 | 205 | let postObservable = json(.get, dummyPostURLString) 206 | let commentsObservable = json(.get, dummyCommentsURLString) 207 | dummyDataTextView.text = "Loading..." 208 | Observable.zip(postObservable, commentsObservable) { postJSON, commentsJSON in 209 | (postJSON, commentsJSON) 210 | } 211 | .observeOn(MainScheduler.instance) 212 | .subscribe(onNext: { postJSON, commentsJSON in 213 | 214 | let postInfo = NSMutableString() 215 | if let postDict = postJSON as? [String: AnyObject], 216 | let commentsArray = commentsJSON as? [[String: AnyObject]], 217 | let postTitle = postDict["title"] as? String, 218 | let postBody = postDict["body"] as? String { 219 | postInfo.append("Title: ") 220 | postInfo.append(postTitle) 221 | postInfo.append("\n\n") 222 | postInfo.append(postBody) 223 | postInfo.append("\n\n\nComments:\n") 224 | for comment in commentsArray { 225 | if let email = comment["email"] as? String, 226 | let body = comment["body"] as? String { 227 | postInfo.append(email) 228 | postInfo.append(": ") 229 | postInfo.append(body) 230 | postInfo.append("\n\n") 231 | } 232 | } 233 | } 234 | 235 | self.dummyDataTextView.text = String(postInfo) 236 | }, onError: { e in 237 | self.dummyDataTextView.text = "An Error Occurred" 238 | self.displayError(e as NSError) 239 | }).disposed(by: disposeBag) 240 | } 241 | 242 | // MARK: - Utils 243 | 244 | func displayError(_ error: NSError?) { 245 | if let e = error { 246 | let alertController = UIAlertController(title: "Error", message: e.localizedDescription, preferredStyle: .alert) 247 | let okAction = UIAlertAction(title: "OK", style: .default) { _ in 248 | // do nothing... 249 | } 250 | alertController.addAction(okAction) 251 | present(alertController, animated: true, completion: nil) 252 | } 253 | } 254 | } 255 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo-tvOS/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | @UIApplicationMain 4 | class AppDelegate: UIResponder, UIApplicationDelegate { 5 | var window: UIWindow? 6 | 7 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 8 | // Override point for customization after application launch. 9 | return true 10 | } 11 | 12 | func applicationWillResignActive(_ application: UIApplication) { 13 | // Sent when the application is about to move from active to inactive state. This can occur for 14 | // certain types of temporary interruptions (such as an incoming phone call or SMS message) or when 15 | // the user quits the application and it begins the transition to the background state. 16 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame 17 | // rates. Games should use this method to pause the game. 18 | } 19 | 20 | func applicationDidEnterBackground(_ application: UIApplication) { 21 | // Use this method to release shared resources, save user data, invalidate timers, and store enough 22 | // application state information to restore your application to its current state in case it is 23 | // terminated later. 24 | // If your application supports background execution, this method is called instead of 25 | // applicationWillTerminate: when the user quits. 26 | } 27 | 28 | func applicationWillEnterForeground(_ application: UIApplication) { 29 | // Called as part of the transition from the background to the inactive state; here you can 30 | // undo many of the changes made on entering the background. 31 | } 32 | 33 | func applicationDidBecomeActive(_ application: UIApplication) { 34 | // Restart any tasks that were paused (or not yet started) while the application was inactive. 35 | // If the application was previously in the background, optionally refresh the user interface. 36 | } 37 | 38 | func applicationWillTerminate(_ application: UIApplication) { 39 | // Called when the application is about to terminate. Save data if appropriate. 40 | // See also applicationDidEnterBackground:. 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo-tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo-tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo-tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | }, 6 | "layers" : [ 7 | { 8 | "filename" : "Front.imagestacklayer" 9 | }, 10 | { 11 | "filename" : "Middle.imagestacklayer" 12 | }, 13 | { 14 | "filename" : "Back.imagestacklayer" 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo-tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo-tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo-tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo-tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Middle.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo-tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "tv", 9 | "scale" : "2x" 10 | } 11 | ], 12 | "info" : { 13 | "author" : "xcode", 14 | "version" : 1 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo-tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo-tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | }, 6 | "layers" : [ 7 | { 8 | "filename" : "Front.imagestacklayer" 9 | }, 10 | { 11 | "filename" : "Middle.imagestacklayer" 12 | }, 13 | { 14 | "filename" : "Back.imagestacklayer" 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo-tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "tv", 9 | "scale" : "2x" 10 | } 11 | ], 12 | "info" : { 13 | "author" : "xcode", 14 | "version" : 1 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo-tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo-tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "tv", 9 | "scale" : "2x" 10 | } 11 | ], 12 | "info" : { 13 | "author" : "xcode", 14 | "version" : 1 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo-tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo-tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "assets" : [ 3 | { 4 | "filename" : "App Icon - App Store.imagestack", 5 | "idiom" : "tv", 6 | "role" : "primary-app-icon", 7 | "size" : "1280x768" 8 | }, 9 | { 10 | "filename" : "App Icon.imagestack", 11 | "idiom" : "tv", 12 | "role" : "primary-app-icon", 13 | "size" : "400x240" 14 | }, 15 | { 16 | "filename" : "Top Shelf Image Wide.imageset", 17 | "idiom" : "tv", 18 | "role" : "top-shelf-image-wide", 19 | "size" : "2320x720" 20 | }, 21 | { 22 | "filename" : "Top Shelf Image.imageset", 23 | "idiom" : "tv", 24 | "role" : "top-shelf-image", 25 | "size" : "1920x720" 26 | } 27 | ], 28 | "info" : { 29 | "author" : "xcode", 30 | "version" : 1 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo-tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "tv", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "idiom" : "tv-marketing", 13 | "scale" : "1x" 14 | }, 15 | { 16 | "idiom" : "tv-marketing", 17 | "scale" : "2x" 18 | } 19 | ], 20 | "info" : { 21 | "author" : "xcode", 22 | "version" : 1 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo-tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "tv", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "idiom" : "tv-marketing", 13 | "scale" : "1x" 14 | }, 15 | { 16 | "idiom" : "tv-marketing", 17 | "scale" : "2x" 18 | } 19 | ], 20 | "info" : { 21 | "author" : "xcode", 22 | "version" : 1 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo-tvOS/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo-tvOS/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo-tvOS/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo-tvOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIMainStoryboardFile 26 | Main 27 | UIRequiredDeviceCapabilities 28 | 29 | arm64 30 | 31 | UIUserInterfaceStyle 32 | Automatic 33 | 34 | 35 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo-tvOS/ViewController.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | class ViewController: UIViewController { 4 | override func viewDidLoad() { 5 | super.viewDidLoad() 6 | // Do any additional setup after loading the view. 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 51; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 3460F8DAD7982D3245EB9D3E /* Pods_RxAlamofireDemo_tvOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7CAA17105F512DF2C550970 /* Pods_RxAlamofireDemo_tvOS.framework */; }; 11 | 3F29C1D238D7440D6E0C8BCE /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F7271A4F80C948F936313DBE /* Assets.xcassets */; }; 12 | 5984886F7C56B240AED03C2C /* Pods_RxAlamofireDemo_iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FE2161AB4378B4B1CA41AA54 /* Pods_RxAlamofireDemo_iOS.framework */; }; 13 | 64DA349C9D9674EE13A63AC7 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DE9DC7445276BFFE3FB7CE3A /* LaunchScreen.storyboard */; }; 14 | 73F2E935F51EDE70A109B9AC /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7FA475134236412946FFBA69 /* Main.storyboard */; }; 15 | 9A25F858A46BD64153B1F306 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3877B88F53D476595CB50DFA /* LaunchScreen.storyboard */; }; 16 | A14200E42DB3E318983D2229 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD4E7F4114A7052FFD8A2A9F /* AppDelegate.swift */; }; 17 | A27C12EFDC6101039332DF18 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FFCA4FD6D17BA390A457D5BF /* Assets.xcassets */; }; 18 | AB379D985FDEA4918C2D5775 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E6C90E12C4D1ABA5ADDB027E /* Main.storyboard */; }; 19 | AE9A737EC3B3616AC8619D05 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8915C664E1FB811EDB084220 /* AppDelegate.swift */; }; 20 | D3C37A8C5995404D21F836BE /* MasterViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50DE7FEAF2E41466297683B1 /* MasterViewController.swift */; }; 21 | ED85E8F8234D9445CEA660A1 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF3DDF93C31550723B3770EC /* ViewController.swift */; }; 22 | /* End PBXBuildFile section */ 23 | 24 | /* Begin PBXFileReference section */ 25 | 0A2A2D9FA25B2A97196125B1 /* Pods-RxAlamofireDemo-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RxAlamofireDemo-iOS.debug.xcconfig"; path = "Target Support Files/Pods-RxAlamofireDemo-iOS/Pods-RxAlamofireDemo-iOS.debug.xcconfig"; sourceTree = ""; }; 26 | 1F1A0AAE3B789DB38B483CCD /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 27 | 3745E1AB21E401142C5AEBE8 /* RxAlamofireDemo-iOS.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = "RxAlamofireDemo-iOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 28 | 50DE7FEAF2E41466297683B1 /* MasterViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MasterViewController.swift; sourceTree = ""; }; 29 | 575397FA1B61CDE8AF29E3F6 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 30 | 747F06E9DCFB616D5F0AF9C7 /* Pods-RxAlamofireDemo-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RxAlamofireDemo-iOS.release.xcconfig"; path = "Target Support Files/Pods-RxAlamofireDemo-iOS/Pods-RxAlamofireDemo-iOS.release.xcconfig"; sourceTree = ""; }; 31 | 7F8CFA6BD5CB48EA9D147CC4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 32 | 8915C664E1FB811EDB084220 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33 | A76B7B529DFFA371EC2B66CC /* RxAlamofireDemo-tvOS.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = "RxAlamofireDemo-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 34 | B5C3AAD32AF4EDA297F1E750 /* Pods-RxAlamofireDemo-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RxAlamofireDemo-tvOS.release.xcconfig"; path = "Target Support Files/Pods-RxAlamofireDemo-tvOS/Pods-RxAlamofireDemo-tvOS.release.xcconfig"; sourceTree = ""; }; 35 | B92CF7C6121B35EBF20E5647 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 36 | BD4E7F4114A7052FFD8A2A9F /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 37 | C1694F27957F7BF4A7F515F7 /* Pods-RxAlamofireDemo-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RxAlamofireDemo-tvOS.debug.xcconfig"; path = "Target Support Files/Pods-RxAlamofireDemo-tvOS/Pods-RxAlamofireDemo-tvOS.debug.xcconfig"; sourceTree = ""; }; 38 | C88A13BAA77B9E31B2EF0A5C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 39 | DF3DDF93C31550723B3770EC /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 40 | F7271A4F80C948F936313DBE /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 41 | F7CAA17105F512DF2C550970 /* Pods_RxAlamofireDemo_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RxAlamofireDemo_tvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 42 | FC2BE5FB8EE4BCEAB84AB1D1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 43 | FE2161AB4378B4B1CA41AA54 /* Pods_RxAlamofireDemo_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RxAlamofireDemo_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 44 | FFCA4FD6D17BA390A457D5BF /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 45 | /* End PBXFileReference section */ 46 | 47 | /* Begin PBXFrameworksBuildPhase section */ 48 | 8992C23ADE5B3BB5D1C6BB0F /* Frameworks */ = { 49 | isa = PBXFrameworksBuildPhase; 50 | buildActionMask = 2147483647; 51 | files = ( 52 | 5984886F7C56B240AED03C2C /* Pods_RxAlamofireDemo_iOS.framework in Frameworks */, 53 | ); 54 | runOnlyForDeploymentPostprocessing = 0; 55 | }; 56 | BFD6F5C88D7FB23B942792EE /* Frameworks */ = { 57 | isa = PBXFrameworksBuildPhase; 58 | buildActionMask = 2147483647; 59 | files = ( 60 | 3460F8DAD7982D3245EB9D3E /* Pods_RxAlamofireDemo_tvOS.framework in Frameworks */, 61 | ); 62 | runOnlyForDeploymentPostprocessing = 0; 63 | }; 64 | /* End PBXFrameworksBuildPhase section */ 65 | 66 | /* Begin PBXGroup section */ 67 | 0A6E32C10D235946CC53C953 /* Pods */ = { 68 | isa = PBXGroup; 69 | children = ( 70 | 0A2A2D9FA25B2A97196125B1 /* Pods-RxAlamofireDemo-iOS.debug.xcconfig */, 71 | 747F06E9DCFB616D5F0AF9C7 /* Pods-RxAlamofireDemo-iOS.release.xcconfig */, 72 | C1694F27957F7BF4A7F515F7 /* Pods-RxAlamofireDemo-tvOS.debug.xcconfig */, 73 | B5C3AAD32AF4EDA297F1E750 /* Pods-RxAlamofireDemo-tvOS.release.xcconfig */, 74 | ); 75 | name = Pods; 76 | path = Pods; 77 | sourceTree = ""; 78 | }; 79 | 46214C933C431B9650A43422 = { 80 | isa = PBXGroup; 81 | children = ( 82 | B073605EBCAB374097F4EEEE /* RxAlamofireDemo-iOS */, 83 | A83B3E7D5AE013777F3FA15E /* RxAlamofireDemo-tvOS */, 84 | AF4F1B3199D5B36C7FDE5A7D /* Products */, 85 | 0A6E32C10D235946CC53C953 /* Pods */, 86 | BEA41D23354996401EA602BD /* Frameworks */, 87 | ); 88 | indentWidth = 2; 89 | sourceTree = ""; 90 | tabWidth = 2; 91 | usesTabs = 0; 92 | }; 93 | A83B3E7D5AE013777F3FA15E /* RxAlamofireDemo-tvOS */ = { 94 | isa = PBXGroup; 95 | children = ( 96 | BD4E7F4114A7052FFD8A2A9F /* AppDelegate.swift */, 97 | FFCA4FD6D17BA390A457D5BF /* Assets.xcassets */, 98 | C88A13BAA77B9E31B2EF0A5C /* Info.plist */, 99 | DE9DC7445276BFFE3FB7CE3A /* LaunchScreen.storyboard */, 100 | E6C90E12C4D1ABA5ADDB027E /* Main.storyboard */, 101 | DF3DDF93C31550723B3770EC /* ViewController.swift */, 102 | ); 103 | path = "RxAlamofireDemo-tvOS"; 104 | sourceTree = ""; 105 | }; 106 | AF4F1B3199D5B36C7FDE5A7D /* Products */ = { 107 | isa = PBXGroup; 108 | children = ( 109 | 3745E1AB21E401142C5AEBE8 /* RxAlamofireDemo-iOS.app */, 110 | A76B7B529DFFA371EC2B66CC /* RxAlamofireDemo-tvOS.app */, 111 | ); 112 | name = Products; 113 | sourceTree = ""; 114 | }; 115 | B073605EBCAB374097F4EEEE /* RxAlamofireDemo-iOS */ = { 116 | isa = PBXGroup; 117 | children = ( 118 | 8915C664E1FB811EDB084220 /* AppDelegate.swift */, 119 | F7271A4F80C948F936313DBE /* Assets.xcassets */, 120 | B92CF7C6121B35EBF20E5647 /* Info.plist */, 121 | 3877B88F53D476595CB50DFA /* LaunchScreen.storyboard */, 122 | 7FA475134236412946FFBA69 /* Main.storyboard */, 123 | 50DE7FEAF2E41466297683B1 /* MasterViewController.swift */, 124 | ); 125 | path = "RxAlamofireDemo-iOS"; 126 | sourceTree = ""; 127 | }; 128 | BEA41D23354996401EA602BD /* Frameworks */ = { 129 | isa = PBXGroup; 130 | children = ( 131 | FE2161AB4378B4B1CA41AA54 /* Pods_RxAlamofireDemo_iOS.framework */, 132 | F7CAA17105F512DF2C550970 /* Pods_RxAlamofireDemo_tvOS.framework */, 133 | ); 134 | name = Frameworks; 135 | sourceTree = ""; 136 | }; 137 | /* End PBXGroup section */ 138 | 139 | /* Begin PBXNativeTarget section */ 140 | 43F2A9EEB1528D3A39E60222 /* RxAlamofireDemo-tvOS */ = { 141 | isa = PBXNativeTarget; 142 | buildConfigurationList = 424A81A30577F4B87602EEE2 /* Build configuration list for PBXNativeTarget "RxAlamofireDemo-tvOS" */; 143 | buildPhases = ( 144 | 63DF1C1537F6781DE65C2998 /* [CP] Check Pods Manifest.lock */, 145 | 59E4F1333C1BDED174EFEDE4 /* Sources */, 146 | 8B84663C33E52BAADAEC7708 /* Resources */, 147 | BFD6F5C88D7FB23B942792EE /* Frameworks */, 148 | FF9229FFD62C0233F3F402FA /* [CP] Embed Pods Frameworks */, 149 | ); 150 | buildRules = ( 151 | ); 152 | dependencies = ( 153 | ); 154 | name = "RxAlamofireDemo-tvOS"; 155 | productName = "RxAlamofireDemo-tvOS"; 156 | productReference = A76B7B529DFFA371EC2B66CC /* RxAlamofireDemo-tvOS.app */; 157 | productType = "com.apple.product-type.application"; 158 | }; 159 | 6F0AE579261CA64B8B140F9C /* RxAlamofireDemo-iOS */ = { 160 | isa = PBXNativeTarget; 161 | buildConfigurationList = 0DC9C8FA99500E79BF744747 /* Build configuration list for PBXNativeTarget "RxAlamofireDemo-iOS" */; 162 | buildPhases = ( 163 | 56D3DAD7EEAE1DA5AF0C5082 /* [CP] Check Pods Manifest.lock */, 164 | 632B9F06FAB36677B4F42678 /* Sources */, 165 | EFC235935020AB88C22A5865 /* Resources */, 166 | 8992C23ADE5B3BB5D1C6BB0F /* Frameworks */, 167 | E3732E7E561251C11457C5A3 /* [CP] Embed Pods Frameworks */, 168 | ); 169 | buildRules = ( 170 | ); 171 | dependencies = ( 172 | ); 173 | name = "RxAlamofireDemo-iOS"; 174 | productName = "RxAlamofireDemo-iOS"; 175 | productReference = 3745E1AB21E401142C5AEBE8 /* RxAlamofireDemo-iOS.app */; 176 | productType = "com.apple.product-type.application"; 177 | }; 178 | /* End PBXNativeTarget section */ 179 | 180 | /* Begin PBXProject section */ 181 | ECB84811D5C45696FC6ACAC1 /* Project object */ = { 182 | isa = PBXProject; 183 | attributes = { 184 | LastUpgradeCheck = 1140; 185 | ORGANIZATIONNAME = RxSwiftCommunity; 186 | TargetAttributes = { 187 | }; 188 | }; 189 | buildConfigurationList = 910FD569A572566BA711E9E4 /* Build configuration list for PBXProject "RxAlamofireDemo" */; 190 | compatibilityVersion = "Xcode 10.0"; 191 | developmentRegion = en; 192 | hasScannedForEncodings = 0; 193 | knownRegions = ( 194 | Base, 195 | en, 196 | ); 197 | mainGroup = 46214C933C431B9650A43422; 198 | productRefGroup = AF4F1B3199D5B36C7FDE5A7D /* Products */; 199 | projectDirPath = ""; 200 | projectRoot = ""; 201 | targets = ( 202 | 6F0AE579261CA64B8B140F9C /* RxAlamofireDemo-iOS */, 203 | 43F2A9EEB1528D3A39E60222 /* RxAlamofireDemo-tvOS */, 204 | ); 205 | }; 206 | /* End PBXProject section */ 207 | 208 | /* Begin PBXResourcesBuildPhase section */ 209 | 8B84663C33E52BAADAEC7708 /* Resources */ = { 210 | isa = PBXResourcesBuildPhase; 211 | buildActionMask = 2147483647; 212 | files = ( 213 | A27C12EFDC6101039332DF18 /* Assets.xcassets in Resources */, 214 | 64DA349C9D9674EE13A63AC7 /* LaunchScreen.storyboard in Resources */, 215 | AB379D985FDEA4918C2D5775 /* Main.storyboard in Resources */, 216 | ); 217 | runOnlyForDeploymentPostprocessing = 0; 218 | }; 219 | EFC235935020AB88C22A5865 /* Resources */ = { 220 | isa = PBXResourcesBuildPhase; 221 | buildActionMask = 2147483647; 222 | files = ( 223 | 3F29C1D238D7440D6E0C8BCE /* Assets.xcassets in Resources */, 224 | 9A25F858A46BD64153B1F306 /* LaunchScreen.storyboard in Resources */, 225 | 73F2E935F51EDE70A109B9AC /* Main.storyboard in Resources */, 226 | ); 227 | runOnlyForDeploymentPostprocessing = 0; 228 | }; 229 | /* End PBXResourcesBuildPhase section */ 230 | 231 | /* Begin PBXShellScriptBuildPhase section */ 232 | 56D3DAD7EEAE1DA5AF0C5082 /* [CP] Check Pods Manifest.lock */ = { 233 | isa = PBXShellScriptBuildPhase; 234 | buildActionMask = 2147483647; 235 | files = ( 236 | ); 237 | inputFileListPaths = ( 238 | ); 239 | inputPaths = ( 240 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 241 | "${PODS_ROOT}/Manifest.lock", 242 | ); 243 | name = "[CP] Check Pods Manifest.lock"; 244 | outputFileListPaths = ( 245 | ); 246 | outputPaths = ( 247 | "$(DERIVED_FILE_DIR)/Pods-RxAlamofireDemo-iOS-checkManifestLockResult.txt", 248 | ); 249 | runOnlyForDeploymentPostprocessing = 0; 250 | shellPath = /bin/sh; 251 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 252 | showEnvVarsInLog = 0; 253 | }; 254 | 63DF1C1537F6781DE65C2998 /* [CP] Check Pods Manifest.lock */ = { 255 | isa = PBXShellScriptBuildPhase; 256 | buildActionMask = 2147483647; 257 | files = ( 258 | ); 259 | inputFileListPaths = ( 260 | ); 261 | inputPaths = ( 262 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 263 | "${PODS_ROOT}/Manifest.lock", 264 | ); 265 | name = "[CP] Check Pods Manifest.lock"; 266 | outputFileListPaths = ( 267 | ); 268 | outputPaths = ( 269 | "$(DERIVED_FILE_DIR)/Pods-RxAlamofireDemo-tvOS-checkManifestLockResult.txt", 270 | ); 271 | runOnlyForDeploymentPostprocessing = 0; 272 | shellPath = /bin/sh; 273 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 274 | showEnvVarsInLog = 0; 275 | }; 276 | E3732E7E561251C11457C5A3 /* [CP] Embed Pods Frameworks */ = { 277 | isa = PBXShellScriptBuildPhase; 278 | buildActionMask = 2147483647; 279 | files = ( 280 | ); 281 | inputFileListPaths = ( 282 | "${PODS_ROOT}/Target Support Files/Pods-RxAlamofireDemo-iOS/Pods-RxAlamofireDemo-iOS-frameworks-${CONFIGURATION}-input-files.xcfilelist", 283 | ); 284 | name = "[CP] Embed Pods Frameworks"; 285 | outputFileListPaths = ( 286 | "${PODS_ROOT}/Target Support Files/Pods-RxAlamofireDemo-iOS/Pods-RxAlamofireDemo-iOS-frameworks-${CONFIGURATION}-output-files.xcfilelist", 287 | ); 288 | runOnlyForDeploymentPostprocessing = 0; 289 | shellPath = /bin/sh; 290 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-RxAlamofireDemo-iOS/Pods-RxAlamofireDemo-iOS-frameworks.sh\"\n"; 291 | showEnvVarsInLog = 0; 292 | }; 293 | FF9229FFD62C0233F3F402FA /* [CP] Embed Pods Frameworks */ = { 294 | isa = PBXShellScriptBuildPhase; 295 | buildActionMask = 2147483647; 296 | files = ( 297 | ); 298 | inputFileListPaths = ( 299 | "${PODS_ROOT}/Target Support Files/Pods-RxAlamofireDemo-tvOS/Pods-RxAlamofireDemo-tvOS-frameworks-${CONFIGURATION}-input-files.xcfilelist", 300 | ); 301 | name = "[CP] Embed Pods Frameworks"; 302 | outputFileListPaths = ( 303 | "${PODS_ROOT}/Target Support Files/Pods-RxAlamofireDemo-tvOS/Pods-RxAlamofireDemo-tvOS-frameworks-${CONFIGURATION}-output-files.xcfilelist", 304 | ); 305 | runOnlyForDeploymentPostprocessing = 0; 306 | shellPath = /bin/sh; 307 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-RxAlamofireDemo-tvOS/Pods-RxAlamofireDemo-tvOS-frameworks.sh\"\n"; 308 | showEnvVarsInLog = 0; 309 | }; 310 | /* End PBXShellScriptBuildPhase section */ 311 | 312 | /* Begin PBXSourcesBuildPhase section */ 313 | 59E4F1333C1BDED174EFEDE4 /* Sources */ = { 314 | isa = PBXSourcesBuildPhase; 315 | buildActionMask = 2147483647; 316 | files = ( 317 | A14200E42DB3E318983D2229 /* AppDelegate.swift in Sources */, 318 | ED85E8F8234D9445CEA660A1 /* ViewController.swift in Sources */, 319 | ); 320 | runOnlyForDeploymentPostprocessing = 0; 321 | }; 322 | 632B9F06FAB36677B4F42678 /* Sources */ = { 323 | isa = PBXSourcesBuildPhase; 324 | buildActionMask = 2147483647; 325 | files = ( 326 | AE9A737EC3B3616AC8619D05 /* AppDelegate.swift in Sources */, 327 | D3C37A8C5995404D21F836BE /* MasterViewController.swift in Sources */, 328 | ); 329 | runOnlyForDeploymentPostprocessing = 0; 330 | }; 331 | /* End PBXSourcesBuildPhase section */ 332 | 333 | /* Begin PBXVariantGroup section */ 334 | 3877B88F53D476595CB50DFA /* LaunchScreen.storyboard */ = { 335 | isa = PBXVariantGroup; 336 | children = ( 337 | 575397FA1B61CDE8AF29E3F6 /* Base */, 338 | ); 339 | name = LaunchScreen.storyboard; 340 | sourceTree = ""; 341 | }; 342 | 7FA475134236412946FFBA69 /* Main.storyboard */ = { 343 | isa = PBXVariantGroup; 344 | children = ( 345 | FC2BE5FB8EE4BCEAB84AB1D1 /* Base */, 346 | ); 347 | name = Main.storyboard; 348 | sourceTree = ""; 349 | }; 350 | DE9DC7445276BFFE3FB7CE3A /* LaunchScreen.storyboard */ = { 351 | isa = PBXVariantGroup; 352 | children = ( 353 | 7F8CFA6BD5CB48EA9D147CC4 /* Base */, 354 | ); 355 | name = LaunchScreen.storyboard; 356 | sourceTree = ""; 357 | }; 358 | E6C90E12C4D1ABA5ADDB027E /* Main.storyboard */ = { 359 | isa = PBXVariantGroup; 360 | children = ( 361 | 1F1A0AAE3B789DB38B483CCD /* Base */, 362 | ); 363 | name = Main.storyboard; 364 | sourceTree = ""; 365 | }; 366 | /* End PBXVariantGroup section */ 367 | 368 | /* Begin XCBuildConfiguration section */ 369 | 1624C07873A55B02A4CC0A58 /* Debug */ = { 370 | isa = XCBuildConfiguration; 371 | baseConfigurationReference = 0A2A2D9FA25B2A97196125B1 /* Pods-RxAlamofireDemo-iOS.debug.xcconfig */; 372 | buildSettings = { 373 | ASSETCATALOG_COMPILER_APPICON_NAME = "$(APP_ICON_NAME)"; 374 | CODE_SIGN_IDENTITY = "iPhone Developer"; 375 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 376 | INFOPLIST_FILE = "RxAlamofireDemo-iOS/Info.plist"; 377 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 378 | LD_RUNPATH_SEARCH_PATHS = ( 379 | "$(inherited)", 380 | "@executable_path/Frameworks", 381 | ); 382 | OTHER_LDFLAGS = "-ObjC"; 383 | PRODUCT_BUNDLE_IDENTIFIER = RxSwiftCommunity.RxAlamofire.iOSDemo; 384 | PRODUCT_NAME = "RxAlamofireDemo-iOS"; 385 | SDKROOT = iphoneos; 386 | TARGETED_DEVICE_FAMILY = "1,2"; 387 | }; 388 | name = Debug; 389 | }; 390 | 590629F869A7B154C408CBCE /* Debug */ = { 391 | isa = XCBuildConfiguration; 392 | buildSettings = { 393 | ALWAYS_SEARCH_USER_PATHS = NO; 394 | CLANG_ANALYZER_NONNULL = YES; 395 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 396 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 397 | CLANG_CXX_LIBRARY = "libc++"; 398 | CLANG_ENABLE_MODULES = YES; 399 | CLANG_ENABLE_OBJC_ARC = YES; 400 | CLANG_ENABLE_OBJC_WEAK = YES; 401 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 402 | CLANG_WARN_BOOL_CONVERSION = YES; 403 | CLANG_WARN_COMMA = YES; 404 | CLANG_WARN_CONSTANT_CONVERSION = YES; 405 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 406 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 407 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 408 | CLANG_WARN_EMPTY_BODY = YES; 409 | CLANG_WARN_ENUM_CONVERSION = YES; 410 | CLANG_WARN_INFINITE_RECURSION = YES; 411 | CLANG_WARN_INT_CONVERSION = YES; 412 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 413 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 414 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 415 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 416 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 417 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 418 | CLANG_WARN_STRICT_PROTOTYPES = YES; 419 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 420 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 421 | CLANG_WARN_UNREACHABLE_CODE = YES; 422 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 423 | COPY_PHASE_STRIP = NO; 424 | DEBUG_INFORMATION_FORMAT = dwarf; 425 | ENABLE_STRICT_OBJC_MSGSEND = YES; 426 | ENABLE_TESTABILITY = YES; 427 | GCC_C_LANGUAGE_STANDARD = gnu11; 428 | GCC_DYNAMIC_NO_PIC = NO; 429 | GCC_NO_COMMON_BLOCKS = YES; 430 | GCC_OPTIMIZATION_LEVEL = 0; 431 | GCC_PREPROCESSOR_DEFINITIONS = ( 432 | "$(inherited)", 433 | "DEBUG=1", 434 | ); 435 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 436 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 437 | GCC_WARN_UNDECLARED_SELECTOR = YES; 438 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 439 | GCC_WARN_UNUSED_FUNCTION = YES; 440 | GCC_WARN_UNUSED_VARIABLE = YES; 441 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 442 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 443 | MTL_FAST_MATH = YES; 444 | ONLY_ACTIVE_ARCH = YES; 445 | PRODUCT_NAME = "$(TARGET_NAME)"; 446 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 447 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 448 | SWIFT_VERSION = 5.0; 449 | }; 450 | name = Debug; 451 | }; 452 | 5E07E1993F6546162BE4CA6F /* Release */ = { 453 | isa = XCBuildConfiguration; 454 | buildSettings = { 455 | ALWAYS_SEARCH_USER_PATHS = NO; 456 | CLANG_ANALYZER_NONNULL = YES; 457 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 458 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 459 | CLANG_CXX_LIBRARY = "libc++"; 460 | CLANG_ENABLE_MODULES = YES; 461 | CLANG_ENABLE_OBJC_ARC = YES; 462 | CLANG_ENABLE_OBJC_WEAK = YES; 463 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 464 | CLANG_WARN_BOOL_CONVERSION = YES; 465 | CLANG_WARN_COMMA = YES; 466 | CLANG_WARN_CONSTANT_CONVERSION = YES; 467 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 468 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 469 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 470 | CLANG_WARN_EMPTY_BODY = YES; 471 | CLANG_WARN_ENUM_CONVERSION = YES; 472 | CLANG_WARN_INFINITE_RECURSION = YES; 473 | CLANG_WARN_INT_CONVERSION = YES; 474 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 475 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 476 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 477 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 478 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 479 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 480 | CLANG_WARN_STRICT_PROTOTYPES = YES; 481 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 482 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 483 | CLANG_WARN_UNREACHABLE_CODE = YES; 484 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 485 | COPY_PHASE_STRIP = NO; 486 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 487 | ENABLE_NS_ASSERTIONS = NO; 488 | ENABLE_STRICT_OBJC_MSGSEND = YES; 489 | GCC_C_LANGUAGE_STANDARD = gnu11; 490 | GCC_NO_COMMON_BLOCKS = YES; 491 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 492 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 493 | GCC_WARN_UNDECLARED_SELECTOR = YES; 494 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 495 | GCC_WARN_UNUSED_FUNCTION = YES; 496 | GCC_WARN_UNUSED_VARIABLE = YES; 497 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 498 | MTL_ENABLE_DEBUG_INFO = NO; 499 | MTL_FAST_MATH = YES; 500 | PRODUCT_NAME = "$(TARGET_NAME)"; 501 | SWIFT_COMPILATION_MODE = wholemodule; 502 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 503 | SWIFT_VERSION = 5.0; 504 | }; 505 | name = Release; 506 | }; 507 | 5E58EA97C86DBE5438EE92C7 /* Release */ = { 508 | isa = XCBuildConfiguration; 509 | baseConfigurationReference = 747F06E9DCFB616D5F0AF9C7 /* Pods-RxAlamofireDemo-iOS.release.xcconfig */; 510 | buildSettings = { 511 | ASSETCATALOG_COMPILER_APPICON_NAME = "$(APP_ICON_NAME)"; 512 | CODE_SIGN_IDENTITY = "iPhone Developer"; 513 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 514 | INFOPLIST_FILE = "RxAlamofireDemo-iOS/Info.plist"; 515 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 516 | LD_RUNPATH_SEARCH_PATHS = ( 517 | "$(inherited)", 518 | "@executable_path/Frameworks", 519 | ); 520 | OTHER_LDFLAGS = "-ObjC"; 521 | PRODUCT_BUNDLE_IDENTIFIER = RxSwiftCommunity.RxAlamofire.iOSDemo; 522 | PRODUCT_NAME = "RxAlamofireDemo-iOS"; 523 | SDKROOT = iphoneos; 524 | TARGETED_DEVICE_FAMILY = "1,2"; 525 | }; 526 | name = Release; 527 | }; 528 | 6263A63E8232F10F3800C3B3 /* Release */ = { 529 | isa = XCBuildConfiguration; 530 | baseConfigurationReference = B5C3AAD32AF4EDA297F1E750 /* Pods-RxAlamofireDemo-tvOS.release.xcconfig */; 531 | buildSettings = { 532 | ASSETCATALOG_COMPILER_APPICON_NAME = "$(APP_ICON_NAME)"; 533 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 534 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 535 | INFOPLIST_FILE = "RxAlamofireDemo-tvOS/Info.plist"; 536 | LD_RUNPATH_SEARCH_PATHS = ( 537 | "$(inherited)", 538 | "@executable_path/Frameworks", 539 | ); 540 | OTHER_LDFLAGS = "-ObjC"; 541 | PRODUCT_BUNDLE_IDENTIFIER = RxSwiftCommunity.RxAlamofire.tvOSDemo; 542 | PRODUCT_NAME = "RxAlamofireDemo-tvOS"; 543 | SDKROOT = appletvos; 544 | TARGETED_DEVICE_FAMILY = 3; 545 | TVOS_DEPLOYMENT_TARGET = 10.0; 546 | }; 547 | name = Release; 548 | }; 549 | 94CD077ECEDD6660F048EB3A /* Debug */ = { 550 | isa = XCBuildConfiguration; 551 | baseConfigurationReference = C1694F27957F7BF4A7F515F7 /* Pods-RxAlamofireDemo-tvOS.debug.xcconfig */; 552 | buildSettings = { 553 | ASSETCATALOG_COMPILER_APPICON_NAME = "$(APP_ICON_NAME)"; 554 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 555 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 556 | INFOPLIST_FILE = "RxAlamofireDemo-tvOS/Info.plist"; 557 | LD_RUNPATH_SEARCH_PATHS = ( 558 | "$(inherited)", 559 | "@executable_path/Frameworks", 560 | ); 561 | OTHER_LDFLAGS = "-ObjC"; 562 | PRODUCT_BUNDLE_IDENTIFIER = RxSwiftCommunity.RxAlamofire.tvOSDemo; 563 | PRODUCT_NAME = "RxAlamofireDemo-tvOS"; 564 | SDKROOT = appletvos; 565 | TARGETED_DEVICE_FAMILY = 3; 566 | TVOS_DEPLOYMENT_TARGET = 10.0; 567 | }; 568 | name = Debug; 569 | }; 570 | /* End XCBuildConfiguration section */ 571 | 572 | /* Begin XCConfigurationList section */ 573 | 0DC9C8FA99500E79BF744747 /* Build configuration list for PBXNativeTarget "RxAlamofireDemo-iOS" */ = { 574 | isa = XCConfigurationList; 575 | buildConfigurations = ( 576 | 1624C07873A55B02A4CC0A58 /* Debug */, 577 | 5E58EA97C86DBE5438EE92C7 /* Release */, 578 | ); 579 | defaultConfigurationIsVisible = 0; 580 | defaultConfigurationName = Release; 581 | }; 582 | 424A81A30577F4B87602EEE2 /* Build configuration list for PBXNativeTarget "RxAlamofireDemo-tvOS" */ = { 583 | isa = XCConfigurationList; 584 | buildConfigurations = ( 585 | 94CD077ECEDD6660F048EB3A /* Debug */, 586 | 6263A63E8232F10F3800C3B3 /* Release */, 587 | ); 588 | defaultConfigurationIsVisible = 0; 589 | defaultConfigurationName = Release; 590 | }; 591 | 910FD569A572566BA711E9E4 /* Build configuration list for PBXProject "RxAlamofireDemo" */ = { 592 | isa = XCConfigurationList; 593 | buildConfigurations = ( 594 | 590629F869A7B154C408CBCE /* Debug */, 595 | 5E07E1993F6546162BE4CA6F /* Release */, 596 | ); 597 | defaultConfigurationIsVisible = 0; 598 | defaultConfigurationName = Release; 599 | }; 600 | /* End XCConfigurationList section */ 601 | }; 602 | rootObject = ECB84811D5C45696FC6ACAC1 /* Project object */; 603 | } 604 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo.xcodeproj/xcshareddata/xcschemes/RxAlamofireDemo-iOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 33 | 34 | 40 | 41 | 42 | 43 | 53 | 55 | 61 | 62 | 63 | 64 | 65 | 66 | 72 | 74 | 80 | 81 | 82 | 83 | 84 | 85 | 87 | 88 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo.xcodeproj/xcshareddata/xcschemes/RxAlamofireDemo-tvOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 33 | 34 | 40 | 41 | 42 | 43 | 53 | 55 | 61 | 62 | 63 | 64 | 65 | 66 | 72 | 74 | 80 | 81 | 82 | 83 | 84 | 85 | 87 | 88 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Examples/RxAlamofireDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Examples/pod_install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -eo pipefail 4 | export RELEASE_VERSION="$(git describe --abbrev=0 | tr -d '\n')" 5 | RELEASE_VERSION=${RELEASE_VERSION:1} 6 | xcodegen 7 | pod install --repo-update 8 | open RxAlamofireDemo.xcworkspace -------------------------------------------------------------------------------- /Examples/project.yml: -------------------------------------------------------------------------------- 1 | name: RxAlamofireDemo 2 | options: 3 | minimumXcodeGenVersion: "2.15.1" 4 | developmentLanguage: en 5 | usesTabs: false 6 | indentWidth: 2 7 | tabWidth: 2 8 | xcodeVersion: "1140" 9 | deploymentTarget: 10 | iOS: "10.0" 11 | defaultConfig: "Release" 12 | configs: 13 | Debug: debug 14 | Release: release 15 | attributes: 16 | ORGANIZATIONNAME: RxSwiftCommunity 17 | schemes: 18 | RxAlamofireDemo-iOS: 19 | scheme: {} 20 | build: 21 | parallelizeBuild: true 22 | buildImplicitDependencies: true 23 | targets: 24 | RxAlamofireDemo-iOS: all 25 | run: 26 | config: Debug 27 | profile: 28 | config: Release 29 | analyze: 30 | config: Debug 31 | archive: 32 | config: Release 33 | revealArchiveInOrganizer: true 34 | RxAlamofireDemo-tvOS: 35 | scheme: {} 36 | build: 37 | parallelizeBuild: true 38 | buildImplicitDependencies: true 39 | targets: 40 | RxAlamofireDemo-tvOS: all 41 | run: 42 | config: Debug 43 | profile: 44 | config: Release 45 | analyze: 46 | config: Debug 47 | archive: 48 | config: Release 49 | revealArchiveInOrganizer: true 50 | targets: 51 | RxAlamofireDemo-iOS: 52 | type: application 53 | platform: iOS 54 | deploymentTarget: "10.0" 55 | sources: [RxAlamofireDemo-iOS] 56 | settings: 57 | INFOPLIST_FILE: RxAlamofireDemo-iOS/Info.plist 58 | PRODUCT_NAME: RxAlamofireDemo-iOS 59 | OTHER_LDFLAGS: -ObjC 60 | PRODUCT_BUNDLE_IDENTIFIER: RxSwiftCommunity.RxAlamofire.iOSDemo 61 | ASSETCATALOG_COMPILER_APPICON_NAME: $(APP_ICON_NAME) 62 | DEBUG_INFORMATION_FORMAT: dwarf-with-dsym 63 | RxAlamofireDemo-tvOS: 64 | type: application 65 | platform: tvOS 66 | deploymentTarget: "10.0" 67 | sources: [RxAlamofireDemo-tvOS] 68 | settings: 69 | INFOPLIST_FILE: RxAlamofireDemo-tvOS/Info.plist 70 | PRODUCT_NAME: RxAlamofireDemo-tvOS 71 | OTHER_LDFLAGS: -ObjC 72 | PRODUCT_BUNDLE_IDENTIFIER: RxSwiftCommunity.RxAlamofire.tvOSDemo 73 | ASSETCATALOG_COMPILER_APPICON_NAME: $(APP_ICON_NAME) 74 | DEBUG_INFORMATION_FORMAT: dwarf-with-dsym -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | gem 'cocoapods', '~> 1.10' 4 | gem 'danger', '~> 8.0' 5 | gem 'danger-swiftlint', '~> 0.20' 6 | gem 'jazzy', '~> 0.13' -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | CFPropertyList (3.0.3) 5 | activesupport (5.2.4.4) 6 | concurrent-ruby (~> 1.0, >= 1.0.2) 7 | i18n (>= 0.7, < 2) 8 | minitest (~> 5.1) 9 | tzinfo (~> 1.1) 10 | addressable (2.7.0) 11 | public_suffix (>= 2.0.2, < 5.0) 12 | algoliasearch (1.27.5) 13 | httpclient (~> 2.8, >= 2.8.3) 14 | json (>= 1.5.1) 15 | atomos (0.1.3) 16 | claide (1.0.3) 17 | claide-plugins (0.9.2) 18 | cork 19 | nap 20 | open4 (~> 1.3) 21 | cocoapods (1.10.0) 22 | addressable (~> 2.6) 23 | claide (>= 1.0.2, < 2.0) 24 | cocoapods-core (= 1.10.0) 25 | cocoapods-deintegrate (>= 1.0.3, < 2.0) 26 | cocoapods-downloader (>= 1.4.0, < 2.0) 27 | cocoapods-plugins (>= 1.0.0, < 2.0) 28 | cocoapods-search (>= 1.0.0, < 2.0) 29 | cocoapods-trunk (>= 1.4.0, < 2.0) 30 | cocoapods-try (>= 1.1.0, < 2.0) 31 | colored2 (~> 3.1) 32 | escape (~> 0.0.4) 33 | fourflusher (>= 2.3.0, < 3.0) 34 | gh_inspector (~> 1.0) 35 | molinillo (~> 0.6.6) 36 | nap (~> 1.0) 37 | ruby-macho (~> 1.4) 38 | xcodeproj (>= 1.19.0, < 2.0) 39 | cocoapods-core (1.10.0) 40 | activesupport (> 5.0, < 6) 41 | addressable (~> 2.6) 42 | algoliasearch (~> 1.0) 43 | concurrent-ruby (~> 1.1) 44 | fuzzy_match (~> 2.0.4) 45 | nap (~> 1.0) 46 | netrc (~> 0.11) 47 | public_suffix 48 | typhoeus (~> 1.0) 49 | cocoapods-deintegrate (1.0.4) 50 | cocoapods-downloader (1.4.0) 51 | cocoapods-plugins (1.0.0) 52 | nap 53 | cocoapods-search (1.0.0) 54 | cocoapods-trunk (1.5.0) 55 | nap (>= 0.8, < 2.0) 56 | netrc (~> 0.11) 57 | cocoapods-try (1.2.0) 58 | colored2 (3.1.2) 59 | concurrent-ruby (1.1.7) 60 | cork (0.3.0) 61 | colored2 (~> 3.1) 62 | danger (8.2.1) 63 | claide (~> 1.0) 64 | claide-plugins (>= 0.9.2) 65 | colored2 (~> 3.1) 66 | cork (~> 0.1) 67 | faraday (>= 0.9.0, < 2.0) 68 | faraday-http-cache (~> 2.0) 69 | git (~> 1.7) 70 | kramdown (~> 2.3) 71 | kramdown-parser-gfm (~> 1.0) 72 | no_proxy_fix 73 | octokit (~> 4.7) 74 | terminal-table (~> 1) 75 | danger-swiftlint (0.24.5) 76 | danger 77 | rake (> 10) 78 | thor (~> 0.19) 79 | escape (0.0.4) 80 | ethon (0.12.0) 81 | ffi (>= 1.3.0) 82 | faraday (1.3.0) 83 | faraday-net_http (~> 1.0) 84 | multipart-post (>= 1.2, < 3) 85 | ruby2_keywords 86 | faraday-http-cache (2.2.0) 87 | faraday (>= 0.8) 88 | faraday-net_http (1.0.0) 89 | ffi (1.14.2) 90 | fourflusher (2.3.1) 91 | fuzzy_match (2.0.4) 92 | gh_inspector (1.1.3) 93 | git (1.8.1) 94 | rchardet (~> 1.8) 95 | httpclient (2.8.3) 96 | i18n (1.8.6) 97 | concurrent-ruby (~> 1.0) 98 | jazzy (0.13.6) 99 | cocoapods (~> 1.5) 100 | mustache (~> 1.1) 101 | open4 102 | redcarpet (~> 3.4) 103 | rouge (>= 2.0.6, < 4.0) 104 | sassc (~> 2.1) 105 | sqlite3 (~> 1.3) 106 | xcinvoke (~> 0.3.0) 107 | json (2.5.1) 108 | kramdown (2.3.0) 109 | rexml 110 | kramdown-parser-gfm (1.1.0) 111 | kramdown (~> 2.0) 112 | liferaft (0.0.6) 113 | minitest (5.14.2) 114 | molinillo (0.6.6) 115 | multipart-post (2.1.1) 116 | mustache (1.1.1) 117 | nanaimo (0.3.0) 118 | nap (1.1.0) 119 | netrc (0.11.0) 120 | no_proxy_fix (0.1.2) 121 | octokit (4.20.0) 122 | faraday (>= 0.9) 123 | sawyer (~> 0.8.0, >= 0.5.3) 124 | open4 (1.3.4) 125 | public_suffix (4.0.6) 126 | rake (13.0.3) 127 | rchardet (1.8.0) 128 | redcarpet (3.5.1) 129 | rexml (3.2.4) 130 | rouge (3.26.0) 131 | ruby-macho (1.4.0) 132 | ruby2_keywords (0.0.2) 133 | sassc (2.4.0) 134 | ffi (~> 1.9) 135 | sawyer (0.8.2) 136 | addressable (>= 2.3.5) 137 | faraday (> 0.8, < 2.0) 138 | sqlite3 (1.4.2) 139 | terminal-table (1.8.0) 140 | unicode-display_width (~> 1.1, >= 1.1.1) 141 | thor (0.20.3) 142 | thread_safe (0.3.6) 143 | typhoeus (1.4.0) 144 | ethon (>= 0.9.0) 145 | tzinfo (1.2.9) 146 | thread_safe (~> 0.1) 147 | unicode-display_width (1.7.0) 148 | xcinvoke (0.3.0) 149 | liferaft (~> 0.0.6) 150 | xcodeproj (1.19.0) 151 | CFPropertyList (>= 2.3.3, < 4.0) 152 | atomos (~> 0.1.3) 153 | claide (>= 1.0.2, < 2.0) 154 | colored2 (~> 3.1) 155 | nanaimo (~> 0.3.0) 156 | 157 | PLATFORMS 158 | x86_64-darwin-20 159 | 160 | DEPENDENCIES 161 | cocoapods (~> 1.10) 162 | danger (~> 8.0) 163 | danger-swiftlint (~> 0.20) 164 | jazzy (~> 0.13) 165 | 166 | BUNDLED WITH 167 | 2.2.4 168 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Junior B. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:5.0 2 | // The swift-tools-version declares the minimum version of Swift required to build this package. 3 | 4 | import PackageDescription 5 | 6 | let package = Package(name: "RxAlamofire", 7 | platforms: [ 8 | .macOS(.v10_12), .iOS(.v10), .tvOS(.v10), .watchOS(.v3) 9 | ], 10 | products: [ 11 | // Products define the executables and libraries produced by a package, and make them visible to other packages. 12 | .library(name: "RxAlamofire", 13 | targets: ["RxAlamofire"]) 14 | ], 15 | 16 | dependencies: [ 17 | // Dependencies declare other packages that this package depends on. 18 | .package(url: "https://github.com/Alamofire/Alamofire.git", .upToNextMajor(from: "5.4.1")), 19 | .package(url: "https://github.com/ReactiveX/RxSwift.git", .upToNextMajor(from: "6.0.0")), 20 | .package(url: "https://github.com/AliSoftware/OHHTTPStubs.git", .upToNextMajor(from: "9.1.0")) 21 | ], 22 | 23 | targets: [ 24 | // Targets are the basic building blocks of a package. A target can define a module or a test suite. 25 | // Targets can depend on other targets in this package, and on products in packages which this package depends on. 26 | .target(name: "RxAlamofire", 27 | dependencies: [ 28 | .product(name: "RxSwift", package: "RxSwift"), 29 | .product(name: "Alamofire", package: "Alamofire"), 30 | .product(name: "RxCocoa", package: "RxSwift") 31 | ], 32 | path: "Sources"), 33 | .testTarget(name: "RxAlamofireTests", 34 | dependencies: [ 35 | .byName(name: "RxAlamofire"), 36 | .product(name: "RxBlocking", package: "RxSwift"), 37 | .product(name: "OHHTTPStubs", package: "OHHTTPStubs"), 38 | .product(name: "OHHTTPStubsSwift", package: "OHHTTPStubs") 39 | ]) 40 | ], 41 | swiftLanguageVersions: [.v5]) 42 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | RxAlamofire 2 | === 3 | 4 | RxAlamofire is a [RxSwift](https://github.com/ReactiveX/RxSwift) wrapper around the elegant HTTP networking in Swift [Alamofire](https://github.com/Alamofire/Alamofire). 5 | 6 | ![Create release](https://github.com/RxSwiftCommunity/RxAlamofire/workflows/Create%20release/badge.svg) 7 | [![Version](https://img.shields.io/cocoapods/v/RxAlamofire.svg?style=flat)](http://cocoapods.org/pods/RxAlamofire) 8 | [![License](https://img.shields.io/cocoapods/l/RxAlamofire.svg?style=flat)](http://cocoapods.org/pods/RxAlamofire) 9 | [![Platform](https://img.shields.io/cocoapods/p/RxAlamofire.svg?style=flat)](http://cocoapods.org/pods/RxAlamofire) 10 | [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) 11 | 12 | ## Getting Started 13 | 14 | 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. 15 | 16 | A basic usage is (considering a simple currency converter): 17 | 18 | ```swift 19 | let formatter = NSNumberFormatter() 20 | formatter.numberStyle = .currencyStyle 21 | formatter.currencyCode = "USD" 22 | if let fromValue = NSNumberFormatter().numberFromString(self.fromTextField.text!) { 23 | 24 | RxAlamofire.requestJSON(.get, sourceStringURL) 25 | .debug() 26 | .subscribe(onNext: { [weak self] (r, json) in 27 | if let dict = json as? [String: AnyObject] { 28 | let valDict = dict["rates"] as! Dictionary 29 | if let conversionRate = valDict["USD"] as? Float { 30 | self?.toTextField.text = formatter 31 | .string(from: NSNumber(value: conversionRate * fromValue)) 32 | } 33 | } 34 | }, onError: { [weak self] (error) in 35 | self?.displayError(error as NSError) 36 | }) 37 | .disposed(by: disposeBag) 38 | 39 | } else { 40 | self.toTextField.text = "Invalid Input!" 41 | } 42 | ``` 43 | 44 | ## Example Usages 45 | 46 | Currently, the library features the following extensions: 47 | 48 | ```swift 49 | let stringURL = "" 50 | 51 | // MARK: URLSession simple and fast 52 | let session = URLSession.shared() 53 | 54 | _ = session.rx 55 | .response(.get, stringURL) 56 | .observeOn(MainScheduler.instance) 57 | .subscribe { print($0) } 58 | 59 | _ = session.rx 60 | .json(.get, stringURL) 61 | .observeOn(MainScheduler.instance) 62 | .subscribe { print($0) } 63 | 64 | _ = session.rx 65 | .data(.get, stringURL) 66 | .observeOn(MainScheduler.instance) 67 | .subscribe { print($0) } 68 | 69 | // MARK: With Alamofire engine 70 | 71 | _ = json(.get, stringURL) 72 | .observeOn(MainScheduler.instance) 73 | .subscribe { print($0) } 74 | 75 | // validation 76 | _ = request(.get, stringURL) 77 | .validate(statusCode: 200..<300) 78 | .validate(contentType: ["application/json"]) 79 | .responseJSON() 80 | .observeOn(MainScheduler.instance) 81 | .subscribe { print($0) } 82 | 83 | // progress 84 | _ = request(.get, stringURL) 85 | .progress() 86 | .observeOn(MainScheduler.instance) 87 | .subscribe { print($0) } 88 | 89 | // just fire upload and display progress 90 | _ = upload(Data(), urlRequest: try! RxAlamofire.urlRequest(.get, stringURL)) 91 | .progress() 92 | .observeOn(MainScheduler.instance) 93 | .subscribe { print($0) } 94 | 95 | // progress and final result 96 | // uploading files with progress showing is processing intensive operation anyway, so 97 | // this doesn't add much overhead 98 | _ = request(.get, stringURL) 99 | .flatMap { request -> Observable<(Data?, RxProgress)> in 100 | let dataPart = request.rx 101 | .data() 102 | .map { d -> Data? in d } 103 | .startWith(nil as Data?) 104 | let progressPart = request.rx.progress() 105 | return Observable.combineLatest(dataPart, progressPart) { ($0, $1) } 106 | } 107 | .observeOn(MainScheduler.instance) 108 | .subscribe { print($0) } 109 | 110 | 111 | // MARK: Alamofire Session 112 | // same methods with any Alamofire Session 113 | 114 | let session = Session.default 115 | 116 | // simple case 117 | _ = session.rx.json(.get, stringURL) 118 | .observeOn(MainScheduler.instance) 119 | .subscribe { print($0) } 120 | 121 | // URLHTTPResponse + JSON 122 | _ = session.rx.responseJSON(.get, stringURL) 123 | .observeOn(MainScheduler.instance) 124 | .subscribe { print($0) } 125 | 126 | // URLHTTPResponse + String 127 | _ = session.rx.responseString(.get, stringURL) 128 | .observeOn(MainScheduler.instance) 129 | .subscribe { print($0) } 130 | 131 | // URLHTTPResponse + Validation + JSON 132 | _ = session.rx.request(.get, stringURL) 133 | .validate(statusCode: 200 ..< 300) 134 | .validate(contentType: ["text/json"]) 135 | .json() 136 | .observeOn(MainScheduler.instance) 137 | .subscribe { print($0) } 138 | 139 | // URLHTTPResponse + Validation + URLHTTPResponse + JSON 140 | _ = session.rx.request(.get, stringURL) 141 | .validate(statusCode: 200 ..< 300) 142 | .validate(contentType: ["text/json"]) 143 | .responseJSON() 144 | .observeOn(MainScheduler.instance) 145 | .subscribe { print($0) } 146 | 147 | // URLHTTPResponse + Validation + URLHTTPResponse + String + Progress 148 | _ = session.rx.request(.get, stringURL) 149 | .validate(statusCode: 200 ..< 300) 150 | .validate(contentType: ["text/something"]) 151 | .flatMap { request -> Observable<(String?, RxProgress)> in 152 | let stringPart = request.rx 153 | .string() 154 | .map { d -> String? in d } 155 | .startWith(nil as String?) 156 | let progressPart = request.rx.progress() 157 | return Observable.combineLatest(stringPart, progressPart) { ($0, $1) } 158 | } 159 | .observeOn(MainScheduler.instance) 160 | .subscribe { print($0) } 161 | 162 | // Interceptor + URLHTTPResponse + Validation + JSON 163 | let adapter = // Some RequestAdapter 164 | let retrier = // Some RequestRetrier 165 | let interceptor = Interceptor(adapter: adapter, retrier: retrier) 166 | _ = session.rx.request(.get, stringURL) 167 | .validate() 168 | .validate(contentType: ["text/json"]) 169 | .responseJSON() 170 | .observeOn(MainScheduler.instance) 171 | .subscribe { print($0) } 172 | ``` 173 | 174 | ## Installation 175 | 176 | There are three ways to install RxAlamofire 177 | 178 | ### CocoaPods 179 | 180 | Just add to your project's `Podfile`: 181 | 182 | ``` 183 | pod 'RxAlamofire' 184 | ``` 185 | 186 | ### Carthage 187 | 188 | Add following to `Cartfile`: 189 | 190 | ``` 191 | github "RxSwiftCommunity/RxAlamofire" ~> 6.1 192 | ``` 193 | 194 | ### Swift Package manager 195 | 196 | Create a `Package.swift` file 197 | 198 | ``` 199 | // swift-tools-version:5.0 200 | 201 | import PackageDescription 202 | 203 | let package = Package( 204 | name: "TestRxAlamofire", 205 | 206 | dependencies: [ 207 | .package(url: "https://github.com/RxSwiftCommunity/RxAlamofire.git", 208 | from: "6.1.0"), 209 | ], 210 | 211 | targets: [ 212 | .target( 213 | name: "TestRxAlamofire", 214 | dependencies: ["RxAlamofire"]) 215 | ] 216 | ) 217 | 218 | ``` 219 | 220 | ### Manually 221 | 222 | To manual install this extension you should get the `RxAlamofire/Source/RxAlamofire.swift` imported into your project, alongside RxSwift and Alamofire. 223 | 224 | ## Requirements 225 | 226 | RxAlamofire requires Swift 5.1 and dedicated versions of Alamofire (5.4.1) and RxSwift (6.0.0). 227 | 228 | For the last RxSwift 5.1 support, please use RxAlamofire 5.7.1. 229 | 230 | For the last Swift 5.0 support, please use RxAlamofire 5.1.0. 231 | 232 | For the last Swift 4.2 support, please use RxAlamofire 4.5.0. 233 | -------------------------------------------------------------------------------- /RxAlamofire.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = "RxAlamofire" 3 | # Version to always follow latest tag, with fallback to major 4 | s.version = "6.1.2" 5 | s.license = "MIT" 6 | s.summary = "RxSwift wrapper around the elegant HTTP networking in Swift Alamofire" 7 | s.homepage = "https://github.com/RxSwiftCommunity/RxAlamofire" 8 | s.authors = { "RxSwift Community" => "community@rxswift.org" } 9 | s.source = { :git => "https://github.com/RxSwiftCommunity/RxAlamofire.git", :tag => "v" + s.version.to_s } 10 | s.swift_version = "5.1" 11 | 12 | s.ios.deployment_target = "10.0" 13 | s.osx.deployment_target = "10.12" 14 | s.tvos.deployment_target = "10.0" 15 | s.watchos.deployment_target = "3.0" 16 | 17 | s.requires_arc = true 18 | 19 | s.default_subspec = "Core" 20 | 21 | s.subspec "Core" do |ss| 22 | ss.source_files = "Sources/RxAlamofire/*.swift" 23 | ss.dependency "RxSwift", "~> 6.0" 24 | ss.dependency "Alamofire", "~> 5.4" 25 | ss.framework = "Foundation" 26 | end 27 | 28 | s.subspec "RxCocoa" do |ss| 29 | ss.source_files = "Sources/RxAlamofire/Cocoa/*.swift" 30 | ss.dependency "RxCocoa", "~> 6.0" 31 | ss.dependency "RxAlamofire/Core" 32 | end 33 | end 34 | -------------------------------------------------------------------------------- /RxAlamofire.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 51; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 00DF98C0D4CBA60B141FF8C4 /* RxRelay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC59D347F5CBCF36203E9367 /* RxRelay.framework */; }; 11 | 2CE896CED6E5BC0DBA1481B6 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 931E1AD90E72F0C52CC19CF5 /* Alamofire.framework */; }; 12 | 2DAB45BE50D0B7605C82DF6A /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D138B2D5F6DC2191AE48CE45 /* RxSwift.framework */; }; 13 | 4A34158ECC511B960D2F96A1 /* RxRelay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5D0E682AEE25C42DECAE35B /* RxRelay.framework */; }; 14 | 4BAFB0147A4F68B560720CFC /* RxRelay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A667FFDF5C13F30D164EB313 /* RxRelay.framework */; }; 15 | 7D621525A60233EB51C9F894 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FE07489457BEA1242D97848 /* Alamofire.framework */; }; 16 | 8213B0BD6E8DC445E3911950 /* RxRelay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 82EA652B6CB44E1E382BEFCB /* RxRelay.framework */; }; 17 | 88F830924B46A5FC8BA5F49E /* URLSession+RxAlamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EC1B4133A55A47C529A248E /* URLSession+RxAlamofire.swift */; }; 18 | 9FD976EDA7A88396AD5D1B59 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F8EB0AB497650CFFB48E78 /* RxSwift.framework */; }; 19 | AB13E710B077474DA7F0E87D /* RxAlamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3135F48C8341D861BB741107 /* RxAlamofire.swift */; }; 20 | AC602334E96E22D8C0CB840C /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3BDE5499DC3081B58EAE4C40 /* RxSwift.framework */; }; 21 | AE1AAE1AC3C41E0E3EDF0B2B /* RxCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DE459EC5874DC8FE73207BE /* RxCocoa.framework */; }; 22 | B363AE468B3D819F0768BC34 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0384DB51B432FCE57ECEEBB8 /* Alamofire.framework */; }; 23 | B8261A5B587D10BE9D57B402 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7344131D11B109658CC96ACE /* Alamofire.framework */; }; 24 | B9D98B0B75A04ACEF73E3CB7 /* RxCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 760CB2E21D7F43071D30AB4E /* RxCocoa.framework */; }; 25 | C0AD0BFFE6512531A91D5835 /* RxCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 33B7A786B80FB8C562B7EE5E /* RxCocoa.framework */; }; 26 | CB79F1BE459467ADE1D03A23 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D24B3AB7F2678326B1319873 /* RxSwift.framework */; }; 27 | CFECCEFADDF0C2DF2F716D02 /* RxCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D73106E0BAB91899D303C43 /* RxCocoa.framework */; }; 28 | D085A39F3AA5E73EA3040FD7 /* URLSession+RxAlamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EC1B4133A55A47C529A248E /* URLSession+RxAlamofire.swift */; }; 29 | D9EC6C5C0EA4F965F39C9441 /* RxAlamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3135F48C8341D861BB741107 /* RxAlamofire.swift */; }; 30 | DA230BED4459CEA6CE50AE7D /* RxAlamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3135F48C8341D861BB741107 /* RxAlamofire.swift */; }; 31 | DA31CEC2113A1063F1A8DCBA /* URLSession+RxAlamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EC1B4133A55A47C529A248E /* URLSession+RxAlamofire.swift */; }; 32 | E821D4A139E5030311C95C48 /* RxAlamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3135F48C8341D861BB741107 /* RxAlamofire.swift */; }; 33 | EAAA66DCB09ED386F1E93873 /* URLSession+RxAlamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EC1B4133A55A47C529A248E /* URLSession+RxAlamofire.swift */; }; 34 | /* End PBXBuildFile section */ 35 | 36 | /* Begin PBXFileReference section */ 37 | 0384DB51B432FCE57ECEEBB8 /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Alamofire.framework; sourceTree = ""; }; 38 | 0D73106E0BAB91899D303C43 /* RxCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxCocoa.framework; sourceTree = ""; }; 39 | 0EC1B4133A55A47C529A248E /* URLSession+RxAlamofire.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "URLSession+RxAlamofire.swift"; sourceTree = ""; }; 40 | 1FE07489457BEA1242D97848 /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Alamofire.framework; sourceTree = ""; }; 41 | 21B247CF1664B5268790D3A6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 42 | 3135F48C8341D861BB741107 /* RxAlamofire.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RxAlamofire.swift; sourceTree = ""; }; 43 | 33B7A786B80FB8C562B7EE5E /* RxCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxCocoa.framework; sourceTree = ""; }; 44 | 3BDE5499DC3081B58EAE4C40 /* RxSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxSwift.framework; sourceTree = ""; }; 45 | 6B365935DDEE06324FC39C7D /* RxAlamofire watchOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = "RxAlamofire watchOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 46 | 7344131D11B109658CC96ACE /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Alamofire.framework; sourceTree = ""; }; 47 | 760CB2E21D7F43071D30AB4E /* RxCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxCocoa.framework; sourceTree = ""; }; 48 | 82EA652B6CB44E1E382BEFCB /* RxRelay.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxRelay.framework; sourceTree = ""; }; 49 | 8DE459EC5874DC8FE73207BE /* RxCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxCocoa.framework; sourceTree = ""; }; 50 | 8FF0E111A2AA444531BBEF4E /* RxAlamofire iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = "RxAlamofire iOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 51 | 931E1AD90E72F0C52CC19CF5 /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Alamofire.framework; sourceTree = ""; }; 52 | 9E0A5D782C3C6C8F03FFF815 /* RxAlamofire tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = "RxAlamofire tvOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 53 | A1F8EB0AB497650CFFB48E78 /* RxSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxSwift.framework; sourceTree = ""; }; 54 | A667FFDF5C13F30D164EB313 /* RxRelay.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxRelay.framework; sourceTree = ""; }; 55 | A959128E6F8E1C6D5C3C6F1D /* RxAlamofire macOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = "RxAlamofire macOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 56 | D138B2D5F6DC2191AE48CE45 /* RxSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxSwift.framework; sourceTree = ""; }; 57 | D24B3AB7F2678326B1319873 /* RxSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxSwift.framework; sourceTree = ""; }; 58 | E5D0E682AEE25C42DECAE35B /* RxRelay.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxRelay.framework; sourceTree = ""; }; 59 | EC59D347F5CBCF36203E9367 /* RxRelay.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxRelay.framework; sourceTree = ""; }; 60 | /* End PBXFileReference section */ 61 | 62 | /* Begin PBXFrameworksBuildPhase section */ 63 | 2F9C629EA03BCF7DDD1AA41B /* Frameworks */ = { 64 | isa = PBXFrameworksBuildPhase; 65 | buildActionMask = 2147483647; 66 | files = ( 67 | B8261A5B587D10BE9D57B402 /* Alamofire.framework in Frameworks */, 68 | CB79F1BE459467ADE1D03A23 /* RxSwift.framework in Frameworks */, 69 | C0AD0BFFE6512531A91D5835 /* RxCocoa.framework in Frameworks */, 70 | 4BAFB0147A4F68B560720CFC /* RxRelay.framework in Frameworks */, 71 | ); 72 | runOnlyForDeploymentPostprocessing = 0; 73 | }; 74 | 6608CC655EA915135D1AE003 /* Frameworks */ = { 75 | isa = PBXFrameworksBuildPhase; 76 | buildActionMask = 2147483647; 77 | files = ( 78 | 2CE896CED6E5BC0DBA1481B6 /* Alamofire.framework in Frameworks */, 79 | 9FD976EDA7A88396AD5D1B59 /* RxSwift.framework in Frameworks */, 80 | AE1AAE1AC3C41E0E3EDF0B2B /* RxCocoa.framework in Frameworks */, 81 | 4A34158ECC511B960D2F96A1 /* RxRelay.framework in Frameworks */, 82 | ); 83 | runOnlyForDeploymentPostprocessing = 0; 84 | }; 85 | D1523943EC4332DF0E2052FC /* Frameworks */ = { 86 | isa = PBXFrameworksBuildPhase; 87 | buildActionMask = 2147483647; 88 | files = ( 89 | 7D621525A60233EB51C9F894 /* Alamofire.framework in Frameworks */, 90 | AC602334E96E22D8C0CB840C /* RxSwift.framework in Frameworks */, 91 | CFECCEFADDF0C2DF2F716D02 /* RxCocoa.framework in Frameworks */, 92 | 8213B0BD6E8DC445E3911950 /* RxRelay.framework in Frameworks */, 93 | ); 94 | runOnlyForDeploymentPostprocessing = 0; 95 | }; 96 | D3792261E944C94152AC0097 /* Frameworks */ = { 97 | isa = PBXFrameworksBuildPhase; 98 | buildActionMask = 2147483647; 99 | files = ( 100 | B363AE468B3D819F0768BC34 /* Alamofire.framework in Frameworks */, 101 | 2DAB45BE50D0B7605C82DF6A /* RxSwift.framework in Frameworks */, 102 | B9D98B0B75A04ACEF73E3CB7 /* RxCocoa.framework in Frameworks */, 103 | 00DF98C0D4CBA60B141FF8C4 /* RxRelay.framework in Frameworks */, 104 | ); 105 | runOnlyForDeploymentPostprocessing = 0; 106 | }; 107 | /* End PBXFrameworksBuildPhase section */ 108 | 109 | /* Begin PBXGroup section */ 110 | 08CA660D2122B2A9FBB18F38 /* Frameworks */ = { 111 | isa = PBXGroup; 112 | children = ( 113 | 6042CCFAA359DB21409294E8 /* Carthage */, 114 | ); 115 | name = Frameworks; 116 | sourceTree = ""; 117 | }; 118 | 152C4813CBF5E762077FF7CB /* watchOS */ = { 119 | isa = PBXGroup; 120 | children = ( 121 | 7344131D11B109658CC96ACE /* Alamofire.framework */, 122 | 33B7A786B80FB8C562B7EE5E /* RxCocoa.framework */, 123 | A667FFDF5C13F30D164EB313 /* RxRelay.framework */, 124 | D24B3AB7F2678326B1319873 /* RxSwift.framework */, 125 | ); 126 | path = watchOS; 127 | sourceTree = ""; 128 | }; 129 | 1BEC4E621B883F837B2BD913 /* Products */ = { 130 | isa = PBXGroup; 131 | children = ( 132 | 8FF0E111A2AA444531BBEF4E /* RxAlamofire iOS.framework */, 133 | A959128E6F8E1C6D5C3C6F1D /* RxAlamofire macOS.framework */, 134 | 9E0A5D782C3C6C8F03FFF815 /* RxAlamofire tvOS.framework */, 135 | 6B365935DDEE06324FC39C7D /* RxAlamofire watchOS.framework */, 136 | ); 137 | name = Products; 138 | sourceTree = ""; 139 | }; 140 | 217A3F0EDA9EF78E90C5278B /* Cocoa */ = { 141 | isa = PBXGroup; 142 | children = ( 143 | 0EC1B4133A55A47C529A248E /* URLSession+RxAlamofire.swift */, 144 | ); 145 | path = Cocoa; 146 | sourceTree = ""; 147 | }; 148 | 6042CCFAA359DB21409294E8 /* Carthage */ = { 149 | isa = PBXGroup; 150 | children = ( 151 | DD0CAD1621F0934E688774CC /* iOS */, 152 | 949054E8D06BEB34E34F667C /* Mac */, 153 | DB8AAD0D7D9AB47BA825F4CB /* tvOS */, 154 | 152C4813CBF5E762077FF7CB /* watchOS */, 155 | ); 156 | name = Carthage; 157 | path = Carthage/Build; 158 | sourceTree = ""; 159 | }; 160 | 949054E8D06BEB34E34F667C /* Mac */ = { 161 | isa = PBXGroup; 162 | children = ( 163 | 1FE07489457BEA1242D97848 /* Alamofire.framework */, 164 | 0D73106E0BAB91899D303C43 /* RxCocoa.framework */, 165 | 82EA652B6CB44E1E382BEFCB /* RxRelay.framework */, 166 | 3BDE5499DC3081B58EAE4C40 /* RxSwift.framework */, 167 | ); 168 | path = Mac; 169 | sourceTree = ""; 170 | }; 171 | A69D268E0F848FD62C75A15C = { 172 | isa = PBXGroup; 173 | children = ( 174 | CEB3E900EFCAB3BD5EE63B8B /* RxAlamofire */, 175 | 08CA660D2122B2A9FBB18F38 /* Frameworks */, 176 | 1BEC4E621B883F837B2BD913 /* Products */, 177 | ); 178 | indentWidth = 2; 179 | sourceTree = ""; 180 | tabWidth = 2; 181 | usesTabs = 0; 182 | }; 183 | CEB3E900EFCAB3BD5EE63B8B /* RxAlamofire */ = { 184 | isa = PBXGroup; 185 | children = ( 186 | 21B247CF1664B5268790D3A6 /* Info.plist */, 187 | 3135F48C8341D861BB741107 /* RxAlamofire.swift */, 188 | 217A3F0EDA9EF78E90C5278B /* Cocoa */, 189 | ); 190 | name = RxAlamofire; 191 | path = Sources/RxAlamofire; 192 | sourceTree = ""; 193 | }; 194 | DB8AAD0D7D9AB47BA825F4CB /* tvOS */ = { 195 | isa = PBXGroup; 196 | children = ( 197 | 931E1AD90E72F0C52CC19CF5 /* Alamofire.framework */, 198 | 8DE459EC5874DC8FE73207BE /* RxCocoa.framework */, 199 | E5D0E682AEE25C42DECAE35B /* RxRelay.framework */, 200 | A1F8EB0AB497650CFFB48E78 /* RxSwift.framework */, 201 | ); 202 | path = tvOS; 203 | sourceTree = ""; 204 | }; 205 | DD0CAD1621F0934E688774CC /* iOS */ = { 206 | isa = PBXGroup; 207 | children = ( 208 | 0384DB51B432FCE57ECEEBB8 /* Alamofire.framework */, 209 | 760CB2E21D7F43071D30AB4E /* RxCocoa.framework */, 210 | EC59D347F5CBCF36203E9367 /* RxRelay.framework */, 211 | D138B2D5F6DC2191AE48CE45 /* RxSwift.framework */, 212 | ); 213 | path = iOS; 214 | sourceTree = ""; 215 | }; 216 | /* End PBXGroup section */ 217 | 218 | /* Begin PBXNativeTarget section */ 219 | 73D12D3780EBC65D207E1F16 /* RxAlamofire iOS */ = { 220 | isa = PBXNativeTarget; 221 | buildConfigurationList = 8AC30854BE8A7F7F123AC733 /* Build configuration list for PBXNativeTarget "RxAlamofire iOS" */; 222 | buildPhases = ( 223 | 454335A048E2BFFACEAAB20A /* Sources */, 224 | D3792261E944C94152AC0097 /* Frameworks */, 225 | ); 226 | buildRules = ( 227 | ); 228 | dependencies = ( 229 | ); 230 | name = "RxAlamofire iOS"; 231 | productName = "RxAlamofire iOS"; 232 | productReference = 8FF0E111A2AA444531BBEF4E /* RxAlamofire iOS.framework */; 233 | productType = "com.apple.product-type.framework"; 234 | }; 235 | A776096A786BE57F11C5B9FA /* RxAlamofire tvOS */ = { 236 | isa = PBXNativeTarget; 237 | buildConfigurationList = 8728AF49150E382895170A83 /* Build configuration list for PBXNativeTarget "RxAlamofire tvOS" */; 238 | buildPhases = ( 239 | 6CF49E70D65F08DC8027B280 /* Sources */, 240 | 6608CC655EA915135D1AE003 /* Frameworks */, 241 | ); 242 | buildRules = ( 243 | ); 244 | dependencies = ( 245 | ); 246 | name = "RxAlamofire tvOS"; 247 | productName = "RxAlamofire tvOS"; 248 | productReference = 9E0A5D782C3C6C8F03FFF815 /* RxAlamofire tvOS.framework */; 249 | productType = "com.apple.product-type.framework"; 250 | }; 251 | FB3DDC45C3FBCB3CA0480999 /* RxAlamofire watchOS */ = { 252 | isa = PBXNativeTarget; 253 | buildConfigurationList = 45BDAC6C68D85F6F26580D96 /* Build configuration list for PBXNativeTarget "RxAlamofire watchOS" */; 254 | buildPhases = ( 255 | 14A0427A21215DCCE43A2EA2 /* Sources */, 256 | 2F9C629EA03BCF7DDD1AA41B /* Frameworks */, 257 | ); 258 | buildRules = ( 259 | ); 260 | dependencies = ( 261 | ); 262 | name = "RxAlamofire watchOS"; 263 | productName = "RxAlamofire watchOS"; 264 | productReference = 6B365935DDEE06324FC39C7D /* RxAlamofire watchOS.framework */; 265 | productType = "com.apple.product-type.framework"; 266 | }; 267 | FBF9C9788697890E5FADA871 /* RxAlamofire macOS */ = { 268 | isa = PBXNativeTarget; 269 | buildConfigurationList = 55B231F67223EC5BCB3275A6 /* Build configuration list for PBXNativeTarget "RxAlamofire macOS" */; 270 | buildPhases = ( 271 | EE026B07F02531575B90AC07 /* Sources */, 272 | D1523943EC4332DF0E2052FC /* Frameworks */, 273 | ); 274 | buildRules = ( 275 | ); 276 | dependencies = ( 277 | ); 278 | name = "RxAlamofire macOS"; 279 | productName = "RxAlamofire macOS"; 280 | productReference = A959128E6F8E1C6D5C3C6F1D /* RxAlamofire macOS.framework */; 281 | productType = "com.apple.product-type.framework"; 282 | }; 283 | /* End PBXNativeTarget section */ 284 | 285 | /* Begin PBXProject section */ 286 | 26A56EE735A9C247341EBA45 /* Project object */ = { 287 | isa = PBXProject; 288 | attributes = { 289 | LastUpgradeCheck = 1140; 290 | ORGANIZATIONNAME = RxSwiftCommunity; 291 | TargetAttributes = { 292 | }; 293 | }; 294 | buildConfigurationList = FE3A4B4109842298484A21D5 /* Build configuration list for PBXProject "RxAlamofire" */; 295 | compatibilityVersion = "Xcode 10.0"; 296 | developmentRegion = en; 297 | hasScannedForEncodings = 0; 298 | knownRegions = ( 299 | Base, 300 | en, 301 | ); 302 | mainGroup = A69D268E0F848FD62C75A15C; 303 | projectDirPath = ""; 304 | projectRoot = ""; 305 | targets = ( 306 | 73D12D3780EBC65D207E1F16 /* RxAlamofire iOS */, 307 | FBF9C9788697890E5FADA871 /* RxAlamofire macOS */, 308 | A776096A786BE57F11C5B9FA /* RxAlamofire tvOS */, 309 | FB3DDC45C3FBCB3CA0480999 /* RxAlamofire watchOS */, 310 | ); 311 | }; 312 | /* End PBXProject section */ 313 | 314 | /* Begin PBXSourcesBuildPhase section */ 315 | 14A0427A21215DCCE43A2EA2 /* Sources */ = { 316 | isa = PBXSourcesBuildPhase; 317 | buildActionMask = 2147483647; 318 | files = ( 319 | DA230BED4459CEA6CE50AE7D /* RxAlamofire.swift in Sources */, 320 | DA31CEC2113A1063F1A8DCBA /* URLSession+RxAlamofire.swift in Sources */, 321 | ); 322 | runOnlyForDeploymentPostprocessing = 0; 323 | }; 324 | 454335A048E2BFFACEAAB20A /* Sources */ = { 325 | isa = PBXSourcesBuildPhase; 326 | buildActionMask = 2147483647; 327 | files = ( 328 | AB13E710B077474DA7F0E87D /* RxAlamofire.swift in Sources */, 329 | EAAA66DCB09ED386F1E93873 /* URLSession+RxAlamofire.swift in Sources */, 330 | ); 331 | runOnlyForDeploymentPostprocessing = 0; 332 | }; 333 | 6CF49E70D65F08DC8027B280 /* Sources */ = { 334 | isa = PBXSourcesBuildPhase; 335 | buildActionMask = 2147483647; 336 | files = ( 337 | E821D4A139E5030311C95C48 /* RxAlamofire.swift in Sources */, 338 | 88F830924B46A5FC8BA5F49E /* URLSession+RxAlamofire.swift in Sources */, 339 | ); 340 | runOnlyForDeploymentPostprocessing = 0; 341 | }; 342 | EE026B07F02531575B90AC07 /* Sources */ = { 343 | isa = PBXSourcesBuildPhase; 344 | buildActionMask = 2147483647; 345 | files = ( 346 | D9EC6C5C0EA4F965F39C9441 /* RxAlamofire.swift in Sources */, 347 | D085A39F3AA5E73EA3040FD7 /* URLSession+RxAlamofire.swift in Sources */, 348 | ); 349 | runOnlyForDeploymentPostprocessing = 0; 350 | }; 351 | /* End PBXSourcesBuildPhase section */ 352 | 353 | /* Begin XCBuildConfiguration section */ 354 | 09E9D5CB0C0AA8D801E7ED87 /* Debug */ = { 355 | isa = XCBuildConfiguration; 356 | buildSettings = { 357 | BUILD_LIBRARY_FOR_DISTRIBUTION = YES; 358 | CODE_SIGN_IDENTITY = ""; 359 | CURRENT_PROJECT_VERSION = 1; 360 | DEFINES_MODULE = YES; 361 | DYLIB_COMPATIBILITY_VERSION = 1; 362 | DYLIB_CURRENT_VERSION = 1; 363 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 364 | FRAMEWORK_SEARCH_PATHS = ( 365 | "$(inherited)", 366 | "$(PROJECT_DIR)/Carthage/Build/tvOS", 367 | ); 368 | INFOPLIST_FILE = Sources/RxAlamofire/Info.plist; 369 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 370 | LD_RUNPATH_SEARCH_PATHS = ( 371 | "$(inherited)", 372 | "@executable_path/Frameworks", 373 | ); 374 | PRODUCT_BUNDLE_IDENTIFIER = "RxSwiftCommunity.RxAlamofire.RxAlamofire-tvOS"; 375 | PRODUCT_NAME = RxAlamofire; 376 | SDKROOT = appletvos; 377 | SKIP_INSTALL = NO; 378 | TARGETED_DEVICE_FAMILY = 3; 379 | VERSIONING_SYSTEM = "apple-generic"; 380 | }; 381 | name = Debug; 382 | }; 383 | 240A13B96272DD86C40BB0A6 /* Debug */ = { 384 | isa = XCBuildConfiguration; 385 | buildSettings = { 386 | BUILD_LIBRARY_FOR_DISTRIBUTION = YES; 387 | CODE_SIGN_IDENTITY = ""; 388 | CURRENT_PROJECT_VERSION = 1; 389 | DEFINES_MODULE = YES; 390 | DYLIB_COMPATIBILITY_VERSION = 1; 391 | DYLIB_CURRENT_VERSION = 1; 392 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 393 | FRAMEWORK_SEARCH_PATHS = ( 394 | "$(inherited)", 395 | "$(PROJECT_DIR)/Carthage/Build/watchOS", 396 | ); 397 | INFOPLIST_FILE = Sources/RxAlamofire/Info.plist; 398 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 399 | PRODUCT_BUNDLE_IDENTIFIER = "RxSwiftCommunity.RxAlamofire.RxAlamofire-watchOS"; 400 | PRODUCT_NAME = RxAlamofire; 401 | SDKROOT = watchos; 402 | SKIP_INSTALL = NO; 403 | TARGETED_DEVICE_FAMILY = 4; 404 | VERSIONING_SYSTEM = "apple-generic"; 405 | }; 406 | name = Debug; 407 | }; 408 | 3026FD9AF091FC2EF5C8A480 /* Debug */ = { 409 | isa = XCBuildConfiguration; 410 | buildSettings = { 411 | BUILD_LIBRARY_FOR_DISTRIBUTION = YES; 412 | CODE_SIGN_IDENTITY = ""; 413 | COMBINE_HIDPI_IMAGES = YES; 414 | CURRENT_PROJECT_VERSION = 1; 415 | DEFINES_MODULE = YES; 416 | DYLIB_COMPATIBILITY_VERSION = 1; 417 | DYLIB_CURRENT_VERSION = 1; 418 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 419 | FRAMEWORK_SEARCH_PATHS = ( 420 | "$(inherited)", 421 | "$(PROJECT_DIR)/Carthage/Build/Mac", 422 | ); 423 | INFOPLIST_FILE = Sources/RxAlamofire/Info.plist; 424 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 425 | LD_RUNPATH_SEARCH_PATHS = ( 426 | "$(inherited)", 427 | "@executable_path/../Frameworks", 428 | ); 429 | PRODUCT_BUNDLE_IDENTIFIER = "RxSwiftCommunity.RxAlamofire.RxAlamofire-macOS"; 430 | PRODUCT_NAME = RxAlamofire; 431 | SDKROOT = macosx; 432 | SKIP_INSTALL = NO; 433 | VERSIONING_SYSTEM = "apple-generic"; 434 | }; 435 | name = Debug; 436 | }; 437 | 39072B322A71963487E93F92 /* Release */ = { 438 | isa = XCBuildConfiguration; 439 | buildSettings = { 440 | BUILD_LIBRARY_FOR_DISTRIBUTION = YES; 441 | CODE_SIGN_IDENTITY = ""; 442 | CURRENT_PROJECT_VERSION = 1; 443 | DEFINES_MODULE = YES; 444 | DYLIB_COMPATIBILITY_VERSION = 1; 445 | DYLIB_CURRENT_VERSION = 1; 446 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 447 | FRAMEWORK_SEARCH_PATHS = ( 448 | "$(inherited)", 449 | "$(PROJECT_DIR)/Carthage/Build/watchOS", 450 | ); 451 | INFOPLIST_FILE = Sources/RxAlamofire/Info.plist; 452 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 453 | PRODUCT_BUNDLE_IDENTIFIER = "RxSwiftCommunity.RxAlamofire.RxAlamofire-watchOS"; 454 | PRODUCT_NAME = RxAlamofire; 455 | SDKROOT = watchos; 456 | SKIP_INSTALL = NO; 457 | TARGETED_DEVICE_FAMILY = 4; 458 | VERSIONING_SYSTEM = "apple-generic"; 459 | }; 460 | name = Release; 461 | }; 462 | 3CF1EEA2912CE0124C7965C1 /* Release */ = { 463 | isa = XCBuildConfiguration; 464 | buildSettings = { 465 | BUILD_LIBRARY_FOR_DISTRIBUTION = YES; 466 | CODE_SIGN_IDENTITY = ""; 467 | CURRENT_PROJECT_VERSION = 1; 468 | DEFINES_MODULE = YES; 469 | DYLIB_COMPATIBILITY_VERSION = 1; 470 | DYLIB_CURRENT_VERSION = 1; 471 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 472 | FRAMEWORK_SEARCH_PATHS = ( 473 | "$(inherited)", 474 | "$(PROJECT_DIR)/Carthage/Build/tvOS", 475 | ); 476 | INFOPLIST_FILE = Sources/RxAlamofire/Info.plist; 477 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 478 | LD_RUNPATH_SEARCH_PATHS = ( 479 | "$(inherited)", 480 | "@executable_path/Frameworks", 481 | ); 482 | PRODUCT_BUNDLE_IDENTIFIER = "RxSwiftCommunity.RxAlamofire.RxAlamofire-tvOS"; 483 | PRODUCT_NAME = RxAlamofire; 484 | SDKROOT = appletvos; 485 | SKIP_INSTALL = NO; 486 | TARGETED_DEVICE_FAMILY = 3; 487 | VERSIONING_SYSTEM = "apple-generic"; 488 | }; 489 | name = Release; 490 | }; 491 | 52AE2FBA3667D1D9A67F1020 /* Debug */ = { 492 | isa = XCBuildConfiguration; 493 | buildSettings = { 494 | ALWAYS_SEARCH_USER_PATHS = NO; 495 | CLANG_ANALYZER_NONNULL = YES; 496 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 497 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 498 | CLANG_CXX_LIBRARY = "libc++"; 499 | CLANG_ENABLE_MODULES = YES; 500 | CLANG_ENABLE_OBJC_ARC = YES; 501 | CLANG_ENABLE_OBJC_WEAK = YES; 502 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 503 | CLANG_WARN_BOOL_CONVERSION = YES; 504 | CLANG_WARN_COMMA = YES; 505 | CLANG_WARN_CONSTANT_CONVERSION = YES; 506 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 507 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 508 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 509 | CLANG_WARN_EMPTY_BODY = YES; 510 | CLANG_WARN_ENUM_CONVERSION = YES; 511 | CLANG_WARN_INFINITE_RECURSION = YES; 512 | CLANG_WARN_INT_CONVERSION = YES; 513 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 514 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 515 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 516 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 517 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 518 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 519 | CLANG_WARN_STRICT_PROTOTYPES = YES; 520 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 521 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 522 | CLANG_WARN_UNREACHABLE_CODE = YES; 523 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 524 | COPY_PHASE_STRIP = NO; 525 | DEBUG_INFORMATION_FORMAT = dwarf; 526 | ENABLE_STRICT_OBJC_MSGSEND = YES; 527 | ENABLE_TESTABILITY = YES; 528 | GCC_C_LANGUAGE_STANDARD = gnu11; 529 | GCC_DYNAMIC_NO_PIC = NO; 530 | GCC_NO_COMMON_BLOCKS = YES; 531 | GCC_OPTIMIZATION_LEVEL = 0; 532 | GCC_PREPROCESSOR_DEFINITIONS = ( 533 | "$(inherited)", 534 | "DEBUG=1", 535 | ); 536 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 537 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 538 | GCC_WARN_UNDECLARED_SELECTOR = YES; 539 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 540 | GCC_WARN_UNUSED_FUNCTION = YES; 541 | GCC_WARN_UNUSED_VARIABLE = YES; 542 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 543 | MACOSX_DEPLOYMENT_TARGET = 10.12; 544 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 545 | MTL_FAST_MATH = YES; 546 | ONLY_ACTIVE_ARCH = YES; 547 | PRODUCT_NAME = "$(TARGET_NAME)"; 548 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 549 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 550 | SWIFT_VERSION = 5.0; 551 | TVOS_DEPLOYMENT_TARGET = 10.0; 552 | WATCHOS_DEPLOYMENT_TARGET = 3.0; 553 | }; 554 | name = Debug; 555 | }; 556 | 5696B824894E06850090A14A /* Release */ = { 557 | isa = XCBuildConfiguration; 558 | buildSettings = { 559 | BUILD_LIBRARY_FOR_DISTRIBUTION = YES; 560 | CODE_SIGN_IDENTITY = ""; 561 | CURRENT_PROJECT_VERSION = 1; 562 | DEFINES_MODULE = YES; 563 | DYLIB_COMPATIBILITY_VERSION = 1; 564 | DYLIB_CURRENT_VERSION = 1; 565 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 566 | FRAMEWORK_SEARCH_PATHS = ( 567 | "$(inherited)", 568 | "$(PROJECT_DIR)/Carthage/Build/iOS", 569 | ); 570 | INFOPLIST_FILE = Sources/RxAlamofire/Info.plist; 571 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 572 | LD_RUNPATH_SEARCH_PATHS = ( 573 | "$(inherited)", 574 | "@executable_path/Frameworks", 575 | ); 576 | PRODUCT_BUNDLE_IDENTIFIER = "RxSwiftCommunity.RxAlamofire.RxAlamofire-iOS"; 577 | PRODUCT_NAME = RxAlamofire; 578 | SDKROOT = iphoneos; 579 | SKIP_INSTALL = NO; 580 | SUPPORTS_MACCATALYST = NO; 581 | TARGETED_DEVICE_FAMILY = "1,2"; 582 | VERSIONING_SYSTEM = "apple-generic"; 583 | }; 584 | name = Release; 585 | }; 586 | 7935FE1A966F3A03CCA0B2C0 /* Release */ = { 587 | isa = XCBuildConfiguration; 588 | buildSettings = { 589 | BUILD_LIBRARY_FOR_DISTRIBUTION = YES; 590 | CODE_SIGN_IDENTITY = ""; 591 | COMBINE_HIDPI_IMAGES = YES; 592 | CURRENT_PROJECT_VERSION = 1; 593 | DEFINES_MODULE = YES; 594 | DYLIB_COMPATIBILITY_VERSION = 1; 595 | DYLIB_CURRENT_VERSION = 1; 596 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 597 | FRAMEWORK_SEARCH_PATHS = ( 598 | "$(inherited)", 599 | "$(PROJECT_DIR)/Carthage/Build/Mac", 600 | ); 601 | INFOPLIST_FILE = Sources/RxAlamofire/Info.plist; 602 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 603 | LD_RUNPATH_SEARCH_PATHS = ( 604 | "$(inherited)", 605 | "@executable_path/../Frameworks", 606 | ); 607 | PRODUCT_BUNDLE_IDENTIFIER = "RxSwiftCommunity.RxAlamofire.RxAlamofire-macOS"; 608 | PRODUCT_NAME = RxAlamofire; 609 | SDKROOT = macosx; 610 | SKIP_INSTALL = NO; 611 | VERSIONING_SYSTEM = "apple-generic"; 612 | }; 613 | name = Release; 614 | }; 615 | 8B25F905EA75E4D468B5866A /* Debug */ = { 616 | isa = XCBuildConfiguration; 617 | buildSettings = { 618 | BUILD_LIBRARY_FOR_DISTRIBUTION = YES; 619 | CODE_SIGN_IDENTITY = ""; 620 | CURRENT_PROJECT_VERSION = 1; 621 | DEFINES_MODULE = YES; 622 | DYLIB_COMPATIBILITY_VERSION = 1; 623 | DYLIB_CURRENT_VERSION = 1; 624 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 625 | FRAMEWORK_SEARCH_PATHS = ( 626 | "$(inherited)", 627 | "$(PROJECT_DIR)/Carthage/Build/iOS", 628 | ); 629 | INFOPLIST_FILE = Sources/RxAlamofire/Info.plist; 630 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 631 | LD_RUNPATH_SEARCH_PATHS = ( 632 | "$(inherited)", 633 | "@executable_path/Frameworks", 634 | ); 635 | PRODUCT_BUNDLE_IDENTIFIER = "RxSwiftCommunity.RxAlamofire.RxAlamofire-iOS"; 636 | PRODUCT_NAME = RxAlamofire; 637 | SDKROOT = iphoneos; 638 | SKIP_INSTALL = NO; 639 | SUPPORTS_MACCATALYST = NO; 640 | TARGETED_DEVICE_FAMILY = "1,2"; 641 | VERSIONING_SYSTEM = "apple-generic"; 642 | }; 643 | name = Debug; 644 | }; 645 | 9B45762F5ACF785A959B630A /* Release */ = { 646 | isa = XCBuildConfiguration; 647 | buildSettings = { 648 | ALWAYS_SEARCH_USER_PATHS = NO; 649 | CLANG_ANALYZER_NONNULL = YES; 650 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 651 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 652 | CLANG_CXX_LIBRARY = "libc++"; 653 | CLANG_ENABLE_MODULES = YES; 654 | CLANG_ENABLE_OBJC_ARC = YES; 655 | CLANG_ENABLE_OBJC_WEAK = YES; 656 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 657 | CLANG_WARN_BOOL_CONVERSION = YES; 658 | CLANG_WARN_COMMA = YES; 659 | CLANG_WARN_CONSTANT_CONVERSION = YES; 660 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 661 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 662 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 663 | CLANG_WARN_EMPTY_BODY = YES; 664 | CLANG_WARN_ENUM_CONVERSION = YES; 665 | CLANG_WARN_INFINITE_RECURSION = YES; 666 | CLANG_WARN_INT_CONVERSION = YES; 667 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 668 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 669 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 670 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 671 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 672 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 673 | CLANG_WARN_STRICT_PROTOTYPES = YES; 674 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 675 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 676 | CLANG_WARN_UNREACHABLE_CODE = YES; 677 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 678 | COPY_PHASE_STRIP = NO; 679 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 680 | ENABLE_NS_ASSERTIONS = NO; 681 | ENABLE_STRICT_OBJC_MSGSEND = YES; 682 | GCC_C_LANGUAGE_STANDARD = gnu11; 683 | GCC_NO_COMMON_BLOCKS = YES; 684 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 685 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 686 | GCC_WARN_UNDECLARED_SELECTOR = YES; 687 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 688 | GCC_WARN_UNUSED_FUNCTION = YES; 689 | GCC_WARN_UNUSED_VARIABLE = YES; 690 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 691 | MACOSX_DEPLOYMENT_TARGET = 10.12; 692 | MTL_ENABLE_DEBUG_INFO = NO; 693 | MTL_FAST_MATH = YES; 694 | PRODUCT_NAME = "$(TARGET_NAME)"; 695 | SWIFT_COMPILATION_MODE = wholemodule; 696 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 697 | SWIFT_VERSION = 5.0; 698 | TVOS_DEPLOYMENT_TARGET = 10.0; 699 | WATCHOS_DEPLOYMENT_TARGET = 3.0; 700 | }; 701 | name = Release; 702 | }; 703 | /* End XCBuildConfiguration section */ 704 | 705 | /* Begin XCConfigurationList section */ 706 | 45BDAC6C68D85F6F26580D96 /* Build configuration list for PBXNativeTarget "RxAlamofire watchOS" */ = { 707 | isa = XCConfigurationList; 708 | buildConfigurations = ( 709 | 240A13B96272DD86C40BB0A6 /* Debug */, 710 | 39072B322A71963487E93F92 /* Release */, 711 | ); 712 | defaultConfigurationIsVisible = 0; 713 | defaultConfigurationName = Release; 714 | }; 715 | 55B231F67223EC5BCB3275A6 /* Build configuration list for PBXNativeTarget "RxAlamofire macOS" */ = { 716 | isa = XCConfigurationList; 717 | buildConfigurations = ( 718 | 3026FD9AF091FC2EF5C8A480 /* Debug */, 719 | 7935FE1A966F3A03CCA0B2C0 /* Release */, 720 | ); 721 | defaultConfigurationIsVisible = 0; 722 | defaultConfigurationName = Release; 723 | }; 724 | 8728AF49150E382895170A83 /* Build configuration list for PBXNativeTarget "RxAlamofire tvOS" */ = { 725 | isa = XCConfigurationList; 726 | buildConfigurations = ( 727 | 09E9D5CB0C0AA8D801E7ED87 /* Debug */, 728 | 3CF1EEA2912CE0124C7965C1 /* Release */, 729 | ); 730 | defaultConfigurationIsVisible = 0; 731 | defaultConfigurationName = Release; 732 | }; 733 | 8AC30854BE8A7F7F123AC733 /* Build configuration list for PBXNativeTarget "RxAlamofire iOS" */ = { 734 | isa = XCConfigurationList; 735 | buildConfigurations = ( 736 | 8B25F905EA75E4D468B5866A /* Debug */, 737 | 5696B824894E06850090A14A /* Release */, 738 | ); 739 | defaultConfigurationIsVisible = 0; 740 | defaultConfigurationName = Release; 741 | }; 742 | FE3A4B4109842298484A21D5 /* Build configuration list for PBXProject "RxAlamofire" */ = { 743 | isa = XCConfigurationList; 744 | buildConfigurations = ( 745 | 52AE2FBA3667D1D9A67F1020 /* Debug */, 746 | 9B45762F5ACF785A959B630A /* Release */, 747 | ); 748 | defaultConfigurationIsVisible = 0; 749 | defaultConfigurationName = Release; 750 | }; 751 | /* End XCConfigurationList section */ 752 | }; 753 | rootObject = 26A56EE735A9C247341EBA45 /* Project object */; 754 | } 755 | -------------------------------------------------------------------------------- /RxAlamofire.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /RxAlamofire.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /RxAlamofire.xcodeproj/xcshareddata/xcschemes/RxAlamofire iOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 38 | 39 | 40 | 41 | 42 | 43 | 53 | 54 | 60 | 61 | 62 | 63 | 69 | 71 | 77 | 78 | 79 | 80 | 82 | 83 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /RxAlamofire.xcodeproj/xcshareddata/xcschemes/RxAlamofire macOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 38 | 39 | 40 | 41 | 42 | 43 | 53 | 54 | 60 | 61 | 62 | 63 | 69 | 71 | 77 | 78 | 79 | 80 | 82 | 83 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /RxAlamofire.xcodeproj/xcshareddata/xcschemes/RxAlamofire tvOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 38 | 39 | 40 | 41 | 42 | 43 | 53 | 54 | 60 | 61 | 62 | 63 | 69 | 71 | 77 | 78 | 79 | 80 | 82 | 83 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /RxAlamofire.xcodeproj/xcshareddata/xcschemes/RxAlamofire watchOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 37 | 38 | 39 | 40 | 41 | 42 | 52 | 53 | 59 | 60 | 61 | 62 | 68 | 70 | 76 | 77 | 78 | 79 | 81 | 82 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /Sources/RxAlamofire/Cocoa/URLSession+RxAlamofire.swift: -------------------------------------------------------------------------------- 1 | #if os(iOS) || os(tvOS) || os(macOS) || os(watchOS) 2 | import Foundation 3 | 4 | import Alamofire 5 | import RxCocoa 6 | import RxSwift 7 | 8 | // MARK: NSURLSession extensions 9 | 10 | public extension Reactive where Base: URLSession { 11 | /** 12 | Creates an observable returning a decoded JSON object as `AnyObject`. 13 | 14 | - parameter method: Alamofire method object 15 | - parameter url: An object adopting `URLConvertible` 16 | - parameter parameters: A dictionary containing all necessary options 17 | - parameter encoding: The kind of encoding used to process parameters 18 | - parameter header: A dictionary containing all the additional headers 19 | 20 | - returns: An observable of a decoded JSON object as `AnyObject` 21 | */ 22 | func json(_ method: Alamofire.HTTPMethod, 23 | _ url: URLConvertible, 24 | parameters: [String: Any]? = nil, 25 | encoding: ParameterEncoding = URLEncoding.default, 26 | headers: HTTPHeaders? = nil) -> Observable { 27 | do { 28 | let request = try urlRequest(method, 29 | url, 30 | parameters: parameters, 31 | encoding: encoding, 32 | headers: headers) 33 | return json(request: request) 34 | } catch { 35 | return Observable.error(error) 36 | } 37 | } 38 | 39 | /** 40 | Creates an observable returning a tuple of `(NSData!, NSURLResponse)`. 41 | 42 | - parameter method: Alamofire method object 43 | - parameter url: An object adopting `URLConvertible` 44 | - parameter parameters: A dictionary containing all necessary options 45 | - parameter encoding: The kind of encoding used to process parameters 46 | - parameter header: A dictionary containing all the additional headers 47 | 48 | - returns: An observable of a tuple containing data and the request 49 | */ 50 | func response(method: Alamofire.HTTPMethod, 51 | _ url: URLConvertible, 52 | parameters: [String: Any]? = nil, 53 | encoding: ParameterEncoding = URLEncoding.default, 54 | headers: HTTPHeaders? = nil) -> Observable<(response: HTTPURLResponse, data: Data)> { 55 | do { 56 | let request = try urlRequest(method, 57 | url, 58 | parameters: parameters, 59 | encoding: encoding, 60 | headers: headers) 61 | return response(request: request) 62 | } catch { 63 | return Observable.error(error) 64 | } 65 | } 66 | 67 | /** 68 | Creates an observable of response's content as `NSData`. 69 | 70 | - parameter method: Alamofire method object 71 | - parameter url: An object adopting `URLConvertible` 72 | - parameter parameters: A dictionary containing all necessary options 73 | - parameter encoding: The kind of encoding used to process parameters 74 | - parameter header: A dictionary containing all the additional headers 75 | 76 | - returns: An observable of a data 77 | */ 78 | func data(_ method: Alamofire.HTTPMethod, 79 | _ url: URLConvertible, 80 | parameters: [String: AnyObject]? = nil, 81 | encoding: ParameterEncoding = URLEncoding.default, 82 | headers: HTTPHeaders? = nil) -> Observable { 83 | do { 84 | let request = try urlRequest(method, 85 | url, 86 | parameters: parameters, 87 | encoding: encoding, 88 | headers: headers) 89 | return data(request: request) 90 | } catch { 91 | return Observable.error(error) 92 | } 93 | } 94 | } 95 | #endif 96 | -------------------------------------------------------------------------------- /Sources/RxAlamofire/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /Tests/LinuxMain.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | 3 | import RxAlamofireTests 4 | 5 | var tests = [XCTestCaseEntry]() 6 | tests += RxAlamofireTests.__allTests() 7 | 8 | XCTMain(tests) 9 | -------------------------------------------------------------------------------- /Tests/RxAlamofireTests/RxAlamofireTests.swift: -------------------------------------------------------------------------------- 1 | import Alamofire 2 | import OHHTTPStubs 3 | import RxAlamofire 4 | import RxBlocking 5 | import RxCocoa 6 | import RxSwift 7 | import XCTest 8 | 9 | private enum Dummy { 10 | static let DataStringContent = "Hello World" 11 | static let DataStringData = DataStringContent.data(using: String.Encoding.utf8)! 12 | static let DataJSONContent = "{\"hello\":\"world\", \"foo\":\"bar\", \"zero\": 0}" 13 | static let DataJSON = DataJSONContent.data(using: String.Encoding.utf8)! 14 | static let GithubURL = "http://github.com/RxSwiftCommunity" 15 | 16 | struct DecodableJSON: Decodable { 17 | let hello: String 18 | let foo: String 19 | let zero: Int 20 | } 21 | } 22 | 23 | class RxAlamofireSpec: XCTestCase { 24 | private func isHost(_ host: String) -> HTTPStubsTestBlock { 25 | return { req in req.url?.host == host } 26 | } 27 | 28 | var manager: Session! 29 | 30 | let testError = NSError(domain: "RxAlamofire Test Error", code: -1, userInfo: nil) 31 | let disposeBag = DisposeBag() 32 | 33 | // MARK: Configuration 34 | override func setUp() { 35 | super.setUp() 36 | manager = Session() 37 | 38 | _ = HTTPStubs.stubRequests(passingTest: isHost("mywebservice.com"), withStubResponse: { _ in 39 | HTTPStubsResponse(data: Dummy.DataStringData, statusCode: 200, headers: nil) 40 | }) 41 | 42 | _ = HTTPStubs.stubRequests(passingTest: isHost("myjsondata.com"), withStubResponse: { _ in 43 | HTTPStubsResponse(data: Dummy.DataJSON, statusCode: 200, headers: ["Content-Type": "application/json"]) 44 | }) 45 | 46 | _ = HTTPStubs.stubRequests(passingTest: isHost("interceptor.com"), withStubResponse: { request in 47 | guard request.url?.path != "/retry" else { 48 | return HTTPStubsResponse(data: Dummy.DataJSON, statusCode: 401, headers: ["Content-Type": "application/json"]) 49 | } 50 | 51 | return HTTPStubsResponse(data: Dummy.DataJSON, statusCode: 200, headers: ["Content-Type": "application/json"]) 52 | }) 53 | } 54 | 55 | override func tearDown() { 56 | super.tearDown() 57 | HTTPStubs.removeAllStubs() 58 | } 59 | 60 | // MARK: Tests 61 | func testBasicRequest() { 62 | do { 63 | let result = try requestResponse(HTTPMethod.get, "http://mywebservice.com").toBlocking().first()! 64 | XCTAssertEqual(result.statusCode, 200) 65 | } catch { 66 | XCTFail("\(error)") 67 | } 68 | } 69 | 70 | func testStringRequest() { 71 | do { 72 | let (result, string) = try requestString(HTTPMethod.get, "http://mywebservice.com").toBlocking().first()! 73 | XCTAssertEqual(result.statusCode, 200) 74 | XCTAssertEqual(string, Dummy.DataStringContent) 75 | } catch { 76 | XCTFail("\(error)") 77 | } 78 | } 79 | 80 | func testJSONRequest() { 81 | do { 82 | guard let (result, obj) = try requestJSON(HTTPMethod.get, "http://myjsondata.com").toBlocking().first(), 83 | let json = obj as? [String: Any], 84 | let res = json["hello"] as? String 85 | else { 86 | XCTFail("errored out") 87 | return 88 | } 89 | XCTAssertEqual(result.statusCode, 200) 90 | XCTAssertEqual(res, "world") 91 | } catch { 92 | XCTFail("\(error)") 93 | } 94 | } 95 | 96 | // TODO: In Alamofire 5 progress became immutable. Test logic should be completely changed. 97 | // func testProgress() { 98 | // do { 99 | // let dataRequest = try request(HTTPMethod.get, "http://myjsondata.com").toBlocking().first()! 100 | // let progressObservable = dataRequest.rx.progress().share(replay: 100, scope: .forever) 101 | // let _ = progressObservable.subscribe { } 102 | // let delegate = dataRequest.delegate as! DataTaskDelegate 103 | // let progressHandler = delegate.progressHandler! 104 | // [(1000, 4000), (4000, 4000)].forEach { completed, total in 105 | // let progress = Alamofire.Progress() 106 | // progress.completedUnitCount = Int64(completed) 107 | // progress.totalUnitCount = Int64(total) 108 | // progressHandler.closure(progress) 109 | // } 110 | // let actualEvents = try progressObservable.toBlocking().toArray() 111 | // let expectedEvents = [ 112 | // RxProgress(bytesWritten: 0, totalBytes: 0), 113 | // RxProgress(bytesWritten: 1000, totalBytes: 4000), 114 | // RxProgress(bytesWritten: 4000, totalBytes: 4000), 115 | // ] 116 | // XCTAssertEqual(actualEvents.count, expectedEvents.count) 117 | // for i in 0..) -> Void) { 273 | if hasRetried { 274 | var request = URLRequest(url: URL(string: "http://interceptor.com")!) 275 | request.method = urlRequest.method 276 | request.headers = urlRequest.headers 277 | completion(.success(request)) 278 | } else { 279 | completion(.success(urlRequest)) 280 | } 281 | 282 | adapt += 1 283 | } 284 | 285 | func retry(_ request: Request, for session: Session, dueTo error: Error, completion: @escaping (RetryResult) -> Void) { 286 | completion(hasRetried ? .doNotRetry : .retry) 287 | hasRetried = true 288 | retry += 1 289 | } 290 | } 291 | -------------------------------------------------------------------------------- /Tests/RxAlamofireTests/XCTestManifests.swift: -------------------------------------------------------------------------------- 1 | #if !canImport(ObjectiveC) 2 | import XCTest 3 | 4 | extension RxAlamofireSpec { 5 | // DO NOT MODIFY: This is autogenerated, use: 6 | // `swift test --generate-linuxmain` 7 | // to regenerate. 8 | static let __allTests__RxAlamofireSpec = [ 9 | ("testBasicRequest", testBasicRequest), 10 | ("testDecodable", testDecodable), 11 | ("testDownloadResponse", testDownloadResponse), 12 | ("testDownloadResponseSerialized", testDownloadResponseSerialized), 13 | ("testInterceptorAdapt", testInterceptorAdapt), 14 | ("testInterceptorRetry", testInterceptorRetry), 15 | ("testJSONRequest", testJSONRequest), 16 | ("testRequestDecodable", testRequestDecodable), 17 | ("testRequestDecodableURLRequest", testRequestDecodableURLRequest), 18 | ("testRxProgress", testRxProgress), 19 | ("testStringRequest", testStringRequest) 20 | ] 21 | } 22 | 23 | public func __allTests() -> [XCTestCaseEntry] { 24 | return [ 25 | testCase(RxAlamofireSpec.__allTests__RxAlamofireSpec) 26 | ] 27 | } 28 | #endif 29 | -------------------------------------------------------------------------------- /cleanup.sh: -------------------------------------------------------------------------------- 1 | if which swiftformat >/dev/null; then 2 | `which swiftformat` "Sources" --config .swiftformat --quiet 3 | `which swiftformat` "Tests" --config .swiftformat --quiet 4 | `which swiftformat` "Examples/RxAlamofireDemo-tvOS" --config .swiftformat --quiet 5 | `which swiftformat` "Examples/RxAlamofireDemo-iOS" --config .swiftformat --quiet 6 | `which swiftformat` "Package.swift" --config .swiftformat --quiet 7 | else 8 | echo "error: swiftformat not installed, do `sh setup.sh` to install swiftformat." 9 | exit 1 10 | fi 11 | 12 | if which swiftlint >/dev/null; then 13 | `which swiftlint` autocorrect --quiet 14 | else 15 | echo "error: SwiftLint not installed, do `sh setup.sh` to install SwiftLint." 16 | exit 1 17 | fi 18 | 19 | if which xcodegen >/dev/null; then 20 | `which xcodegen` --spec project-carthage.yml 21 | else 22 | echo "error: XcodeGen not installed, do `sh setup.sh` to install XcodeGen." 23 | exit 1 24 | fi -------------------------------------------------------------------------------- /pods.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | export RELEASE_VERSION="$(git describe --abbrev=0 | tr -d '\n')" 4 | RELEASE_VERSION=${RELEASE_VERSION:1} 5 | pod lib lint --allow-warnings 6 | pod trunk push --allow-warnings -------------------------------------------------------------------------------- /project-carthage.yml: -------------------------------------------------------------------------------- 1 | name: RxAlamofire 2 | options: 3 | minimumXcodeGenVersion: "2.15.1" 4 | developmentLanguage: en 5 | usesTabs: false 6 | indentWidth: 2 7 | tabWidth: 2 8 | xcodeVersion: "1140" 9 | deploymentTarget: 10 | iOS: "10.0" 11 | macOS: "10.12" 12 | tvOS: "10.0" 13 | watchOS: "3.0" 14 | carthageExecutablePath: "`which carthage`" 15 | defaultConfig: "Release" 16 | configs: 17 | Debug: debug 18 | Release: release 19 | attributes: 20 | ORGANIZATIONNAME: RxSwiftCommunity 21 | schemes: 22 | RxAlamofire iOS: 23 | scheme: {} 24 | build: 25 | parallelizeBuild: true 26 | buildImplicitDependencies: true 27 | targets: 28 | RxAlamofire iOS: all 29 | run: 30 | config: Debug 31 | test: 32 | config: Debug 33 | gatherCoverageData: true 34 | profile: 35 | config: Release 36 | analyze: 37 | config: Debug 38 | archive: 39 | config: Release 40 | revealArchiveInOrganizer: true 41 | RxAlamofire macOS: 42 | scheme: {} 43 | build: 44 | parallelizeBuild: true 45 | buildImplicitDependencies: true 46 | targets: 47 | RxAlamofire macOS: all 48 | run: 49 | config: Debug 50 | test: 51 | config: Debug 52 | gatherCoverageData: true 53 | profile: 54 | config: Release 55 | analyze: 56 | config: Debug 57 | archive: 58 | config: Release 59 | revealArchiveInOrganizer: true 60 | RxAlamofire watchOS: 61 | scheme: {} 62 | build: 63 | parallelizeBuild: true 64 | buildImplicitDependencies: true 65 | targets: 66 | RxAlamofire watchOS: all 67 | run: 68 | config: Debug 69 | profile: 70 | config: Release 71 | analyze: 72 | config: Debug 73 | archive: 74 | config: Release 75 | revealArchiveInOrganizer: true 76 | RxAlamofire tvOS: 77 | scheme: {} 78 | build: 79 | parallelizeBuild: true 80 | buildImplicitDependencies: true 81 | targets: 82 | RxAlamofire tvOS: all 83 | run: 84 | config: Debug 85 | test: 86 | config: Debug 87 | gatherCoverageData: true 88 | profile: 89 | config: Release 90 | analyze: 91 | config: Debug 92 | archive: 93 | config: Release 94 | revealArchiveInOrganizer: true 95 | targets: 96 | RxAlamofire iOS: 97 | settings: 98 | PRODUCT_NAME: RxAlamofire 99 | PRODUCT_BUNDLE_IDENTIFIER: RxSwiftCommunity.RxAlamofire.RxAlamofire-iOS 100 | BUILD_LIBRARY_FOR_DISTRIBUTION: YES 101 | SKIP_INSTALL: NO 102 | SUPPORTS_MACCATALYST: NO 103 | platform: iOS 104 | type: framework 105 | sources: 106 | - Sources/RxAlamofire 107 | dependencies: 108 | - carthage: Alamofire 109 | - carthage: RxSwift 110 | - carthage: RxCocoa 111 | - carthage: RxRelay 112 | RxAlamofire macOS: 113 | settings: 114 | PRODUCT_NAME: RxAlamofire 115 | PRODUCT_BUNDLE_IDENTIFIER: RxSwiftCommunity.RxAlamofire.RxAlamofire-macOS 116 | BUILD_LIBRARY_FOR_DISTRIBUTION: YES 117 | SKIP_INSTALL: NO 118 | platform: macOS 119 | type: framework 120 | sources: 121 | - Sources/RxAlamofire 122 | dependencies: 123 | - carthage: Alamofire 124 | - carthage: RxSwift 125 | - carthage: RxCocoa 126 | - carthage: RxRelay 127 | RxAlamofire tvOS: 128 | settings: 129 | PRODUCT_NAME: RxAlamofire 130 | PRODUCT_BUNDLE_IDENTIFIER: RxSwiftCommunity.RxAlamofire.RxAlamofire-tvOS 131 | BUILD_LIBRARY_FOR_DISTRIBUTION: YES 132 | SKIP_INSTALL: NO 133 | platform: tvOS 134 | type: framework 135 | sources: 136 | - Sources/RxAlamofire 137 | dependencies: 138 | - carthage: Alamofire 139 | - carthage: RxSwift 140 | - carthage: RxCocoa 141 | - carthage: RxRelay 142 | RxAlamofire watchOS: 143 | settings: 144 | PRODUCT_NAME: RxAlamofire 145 | PRODUCT_BUNDLE_IDENTIFIER: RxSwiftCommunity.RxAlamofire.RxAlamofire-watchOS 146 | BUILD_LIBRARY_FOR_DISTRIBUTION: YES 147 | SKIP_INSTALL: NO 148 | platform: watchOS 149 | type: framework 150 | sources: 151 | - Sources/RxAlamofire 152 | dependencies: 153 | - carthage: Alamofire 154 | - carthage: RxSwift 155 | - carthage: RxCocoa 156 | - carthage: RxRelay 157 | -------------------------------------------------------------------------------- /project-spm.yml: -------------------------------------------------------------------------------- 1 | name: RxAlamofire-SPM 2 | options: 3 | minimumXcodeGenVersion: "2.15.1" 4 | developmentLanguage: en 5 | usesTabs: false 6 | indentWidth: 2 7 | tabWidth: 2 8 | xcodeVersion: "1140" 9 | deploymentTarget: 10 | iOS: "10.0" 11 | macOS: "10.12" 12 | tvOS: "10.0" 13 | watchOS: "3.0" 14 | carthageExecutablePath: "`which carthage`" 15 | defaultConfig: "Release" 16 | configs: 17 | Debug: debug 18 | Release: release 19 | attributes: 20 | ORGANIZATIONNAME: RxSwiftCommunity 21 | schemes: 22 | RxAlamofire iOS: 23 | scheme: {} 24 | build: 25 | parallelizeBuild: true 26 | buildImplicitDependencies: true 27 | targets: 28 | RxAlamofire iOS: all 29 | run: 30 | config: Debug 31 | test: 32 | config: Debug 33 | gatherCoverageData: true 34 | profile: 35 | config: Release 36 | analyze: 37 | config: Debug 38 | archive: 39 | config: Release 40 | revealArchiveInOrganizer: true 41 | RxAlamofire macOS: 42 | scheme: {} 43 | build: 44 | parallelizeBuild: true 45 | buildImplicitDependencies: true 46 | targets: 47 | RxAlamofire macOS: all 48 | run: 49 | config: Debug 50 | test: 51 | config: Debug 52 | gatherCoverageData: true 53 | profile: 54 | config: Release 55 | analyze: 56 | config: Debug 57 | archive: 58 | config: Release 59 | revealArchiveInOrganizer: true 60 | RxAlamofire watchOS: 61 | scheme: {} 62 | build: 63 | parallelizeBuild: true 64 | buildImplicitDependencies: true 65 | targets: 66 | RxAlamofire watchOS: all 67 | run: 68 | config: Debug 69 | profile: 70 | config: Release 71 | analyze: 72 | config: Debug 73 | archive: 74 | config: Release 75 | revealArchiveInOrganizer: true 76 | RxAlamofire tvOS: 77 | scheme: {} 78 | build: 79 | parallelizeBuild: true 80 | buildImplicitDependencies: true 81 | targets: 82 | RxAlamofire tvOS: all 83 | run: 84 | config: Debug 85 | test: 86 | config: Debug 87 | gatherCoverageData: true 88 | profile: 89 | config: Release 90 | analyze: 91 | config: Debug 92 | archive: 93 | config: Release 94 | revealArchiveInOrganizer: true 95 | packages: 96 | RxSwift: 97 | url: https://github.com/ReactiveX/RxSwift.git 98 | from: 6.0.0 99 | Alamofire: 100 | url: https://github.com/Alamofire/Alamofire.git 101 | from: 5.4.1 102 | targets: 103 | RxAlamofire iOS: 104 | settings: 105 | PRODUCT_NAME: RxAlamofire 106 | PRODUCT_BUNDLE_IDENTIFIER: RxSwiftCommunity.RxAlamofire.RxAlamofire-iOS 107 | BUILD_LIBRARY_FOR_DISTRIBUTION: YES 108 | SKIP_INSTALL: NO 109 | SUPPORTS_MACCATALYST: NO 110 | platform: iOS 111 | type: framework 112 | sources: 113 | - Sources/RxAlamofire 114 | dependencies: 115 | - package: Alamofire 116 | - package: RxSwift 117 | product: RxSwift 118 | - package: RxSwift 119 | product: RxCocoa 120 | - package: RxSwift 121 | product: RxRelay 122 | RxAlamofire macOS: 123 | settings: 124 | PRODUCT_NAME: RxAlamofire 125 | PRODUCT_BUNDLE_IDENTIFIER: RxSwiftCommunity.RxAlamofire.RxAlamofire-macOS 126 | BUILD_LIBRARY_FOR_DISTRIBUTION: YES 127 | SKIP_INSTALL: NO 128 | platform: macOS 129 | type: framework 130 | sources: 131 | - Sources/RxAlamofire 132 | dependencies: 133 | - package: Alamofire 134 | - package: RxSwift 135 | product: RxSwift 136 | - package: RxSwift 137 | product: RxCocoa 138 | - package: RxSwift 139 | product: RxRelay 140 | RxAlamofire tvOS: 141 | settings: 142 | PRODUCT_NAME: RxAlamofire 143 | PRODUCT_BUNDLE_IDENTIFIER: RxSwiftCommunity.RxAlamofire.RxAlamofire-tvOS 144 | BUILD_LIBRARY_FOR_DISTRIBUTION: YES 145 | SKIP_INSTALL: NO 146 | platform: tvOS 147 | type: framework 148 | sources: 149 | - Sources/RxAlamofire 150 | dependencies: 151 | - package: Alamofire 152 | - package: RxSwift 153 | product: RxSwift 154 | - package: RxSwift 155 | product: RxCocoa 156 | - package: RxSwift 157 | product: RxRelay 158 | RxAlamofire watchOS: 159 | settings: 160 | PRODUCT_NAME: RxAlamofire 161 | PRODUCT_BUNDLE_IDENTIFIER: RxSwiftCommunity.RxAlamofire.RxAlamofire-watchOS 162 | BUILD_LIBRARY_FOR_DISTRIBUTION: YES 163 | SKIP_INSTALL: NO 164 | platform: watchOS 165 | type: framework 166 | sources: 167 | - Sources/RxAlamofire 168 | dependencies: 169 | - package: Alamofire 170 | - package: RxSwift 171 | product: RxSwift 172 | - package: RxSwift 173 | product: RxCocoa 174 | - package: RxSwift 175 | product: RxRelay 176 | -------------------------------------------------------------------------------- /scripts/bump-version.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -euo pipefail 4 | git config --global user.name "RxAlamofire Maintainers" 5 | git config --global user.email "rxalamofire@rxswift.org" 6 | npx standard-version 7 | echo "RELEASE_VERSION=$(git describe --abbrev=0 | tr -d '\n')" >> $GITHUB_ENV 8 | export VERSION="$(git describe --abbrev=0 | tr -d '\n')" 9 | VERSION=${VERSION:1} 10 | echo $VERSION 11 | npx podspec-bump -w -i "$VERSION" 12 | git add -A 13 | git commit --amend --no-edit -------------------------------------------------------------------------------- /scripts/carthage.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # carthage.sh 4 | # Usage example: ./carthage.sh build --platform iOS 5 | 6 | set -euo pipefail 7 | 8 | xcconfig=$(mktemp /tmp/static.xcconfig.XXXXXX) 9 | trap 'rm -f "$xcconfig"' INT TERM HUP EXIT 10 | 11 | # For Xcode 12 make sure EXCLUDED_ARCHS is set to arm architectures otherwise 12 | # the build will fail on lipo due to duplicate architectures. 13 | 14 | CURRENT_XCODE_VERSION=$(xcodebuild -version | grep "Build version" | cut -d' ' -f3) 15 | echo "EXCLUDED_ARCHS__EFFECTIVE_PLATFORM_SUFFIX_simulator__NATIVE_ARCH_64_BIT_x86_64__XCODE_1200__BUILD_$CURRENT_XCODE_VERSION = arm64 arm64e armv7 armv7s armv6 armv8" >> $xcconfig 16 | 17 | echo 'EXCLUDED_ARCHS__EFFECTIVE_PLATFORM_SUFFIX_simulator__NATIVE_ARCH_64_BIT_x86_64__XCODE_1200 = $(EXCLUDED_ARCHS__EFFECTIVE_PLATFORM_SUFFIX_simulator__NATIVE_ARCH_64_BIT_x86_64__XCODE_1200__BUILD_$(XCODE_PRODUCT_BUILD_VERSION))' >> $xcconfig 18 | echo 'EXCLUDED_ARCHS = $(inherited) $(EXCLUDED_ARCHS__EFFECTIVE_PLATFORM_SUFFIX_$(EFFECTIVE_PLATFORM_SUFFIX)__NATIVE_ARCH_64_BIT_$(NATIVE_ARCH_64_BIT)__XCODE_$(XCODE_VERSION_MAJOR))' >> $xcconfig 19 | 20 | export XCODE_XCCONFIG_FILE="$xcconfig" 21 | carthage build "$@" -------------------------------------------------------------------------------- /scripts/xcframeworks.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -euo pipefail 4 | rm -rf RxAlamofire-SPM.xcodeproj 5 | rm -rf xcarchives/* 6 | rm -rf RxAlamofire.xcframework.zip 7 | rm -rf RxAlamofire.xcframework 8 | 9 | brew bundle 10 | 11 | xcodegen --spec project-spm.yml 12 | 13 | xcodebuild archive -quiet -project RxAlamofire-SPM.xcodeproj -configuration Release -scheme "RxAlamofire iOS" -destination "generic/platform=iOS" -archivePath "xcarchives/RxAlamofire-iOS" SKIP_INSTALL=NO SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES OTHER_CFLAGS="-fembed-bitcode" BITCODE_GENERATION_MODE="bitcode" ENABLE_BITCODE=YES | xcpretty --color --simple 14 | xcodebuild archive -quiet -project RxAlamofire-SPM.xcodeproj -configuration Release -scheme "RxAlamofire iOS" -destination "generic/platform=iOS Simulator" -archivePath "xcarchives/RxAlamofire-iOS-Simulator" SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES OTHER_CFLAGS="-fembed-bitcode" BITCODE_GENERATION_MODE="bitcode" ENABLE_BITCODE=YES | xcpretty --color --simple 15 | xcodebuild archive -quiet -project RxAlamofire-SPM.xcodeproj -configuration Release -scheme "RxAlamofire tvOS" -destination "generic/platform=tvOS" -archivePath "xcarchives/RxAlamofire-tvOS" SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES OTHER_CFLAGS="-fembed-bitcode" BITCODE_GENERATION_MODE="bitcode" ENABLE_BITCODE=YES | xcpretty --color --simple 16 | xcodebuild archive -quiet -project RxAlamofire-SPM.xcodeproj -configuration Release -scheme "RxAlamofire tvOS" -destination "generic/platform=tvOS Simulator" -archivePath "xcarchives/RxAlamofire-tvOS-Simulator" SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES OTHER_CFLAGS="-fembed-bitcode" BITCODE_GENERATION_MODE="bitcode" ENABLE_BITCODE=YES | xcpretty --color --simple 17 | xcodebuild archive -quiet -project RxAlamofire-SPM.xcodeproj -configuration Release -scheme "RxAlamofire macOS" -destination "generic/platform=macOS" -archivePath "xcarchives/RxAlamofire-macOS" SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES OTHER_CFLAGS="-fembed-bitcode" BITCODE_GENERATION_MODE="bitcode" ENABLE_BITCODE=YES | xcpretty --color --simple 18 | xcodebuild archive -quiet -project RxAlamofire-SPM.xcodeproj -configuration Release -scheme "RxAlamofire watchOS" -destination "generic/platform=watchOS" -archivePath "xcarchives/RxAlamofire-watchOS" SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES OTHER_CFLAGS="-fembed-bitcode" BITCODE_GENERATION_MODE="bitcode" ENABLE_BITCODE=YES | xcpretty --color --simple 19 | xcodebuild archive -quiet -project RxAlamofire-SPM.xcodeproj -configuration Release -scheme "RxAlamofire watchOS" -destination "generic/platform=watchOS Simulator" -archivePath "xcarchives/RxAlamofire-watchOS-Simulator" SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES OTHER_CFLAGS="-fembed-bitcode" BITCODE_GENERATION_MODE="bitcode" ENABLE_BITCODE=YES | xcpretty --color --simple 20 | 21 | xcodebuild -create-xcframework \ 22 | -framework "xcarchives/RxAlamofire-iOS-Simulator.xcarchive/Products/Library/Frameworks/RxAlamofire.framework" \ 23 | -debug-symbols ""$(pwd)"/xcarchives/RxAlamofire-iOS-Simulator.xcarchive/dSYMs/RxAlamofire.framework.dSYM" \ 24 | -framework "xcarchives/RxAlamofire-iOS.xcarchive/Products/Library/Frameworks/RxAlamofire.framework" \ 25 | -debug-symbols ""$(pwd)"/xcarchives/RxAlamofire-iOS.xcarchive/dSYMs/RxAlamofire.framework.dSYM" \ 26 | -framework "xcarchives/RxAlamofire-tvOS-Simulator.xcarchive/Products/Library/Frameworks/RxAlamofire.framework" \ 27 | -debug-symbols ""$(pwd)"/xcarchives/RxAlamofire-tvOS-Simulator.xcarchive/dSYMs/RxAlamofire.framework.dSYM" \ 28 | -framework "xcarchives/RxAlamofire-tvOS.xcarchive/Products/Library/Frameworks/RxAlamofire.framework" \ 29 | -debug-symbols ""$(pwd)"/xcarchives/RxAlamofire-tvOS.xcarchive/dSYMs/RxAlamofire.framework.dSYM" \ 30 | -framework "xcarchives/RxAlamofire-macOS.xcarchive/Products/Library/Frameworks/RxAlamofire.framework" \ 31 | -debug-symbols ""$(pwd)"/xcarchives/RxAlamofire-macOS.xcarchive/dSYMs/RxAlamofire.framework.dSYM" \ 32 | -framework "xcarchives/RxAlamofire-watchOS-Simulator.xcarchive/Products/Library/Frameworks/RxAlamofire.framework" \ 33 | -debug-symbols ""$(pwd)"/xcarchives/RxAlamofire-watchOS-Simulator.xcarchive/dSYMs/RxAlamofire.framework.dSYM" \ 34 | -framework "xcarchives/RxAlamofire-watchOS.xcarchive/Products/Library/Frameworks/RxAlamofire.framework" \ 35 | -debug-symbols ""$(pwd)"/xcarchives/RxAlamofire-watchOS.xcarchive/dSYMs/RxAlamofire.framework.dSYM" \ 36 | -output "RxAlamofire.xcframework" 37 | 38 | zip -r RxAlamofire.xcframework.zip RxAlamofire.xcframework 39 | rm -rf xcarchives/* 40 | rm -rf RxAlamofire.xcframework 41 | rm -rf RxAlamofire-SPM.xcodeproj 42 | --------------------------------------------------------------------------------