├── .github └── workflows │ └── cross-platform-compile.yml ├── .gitignore ├── .hound.yml ├── .swiftlint.yml ├── CHANGELOG.md ├── CONTRIBUTING.md ├── Cartfile ├── Cartfile.resolved ├── LICENSE.md ├── Package.swift ├── README.md ├── ReSwift-Thunk-tvOS ├── Info.plist └── ReSwift_Thunk_tvOS.h ├── ReSwift-Thunk.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── IDEWorkspaceChecks.plist │ │ └── WorkspaceSettings.xcsettings └── xcshareddata │ └── xcschemes │ ├── ReSwift-Thunk iOS.xcscheme │ ├── ReSwift-Thunk macOS.xcscheme │ ├── ReSwift-Thunk tvOS.xcscheme │ └── ReSwift-Thunk watchOS.xcscheme ├── ReSwift-Thunk ├── Info.plist ├── ReSwift_Thunk.h ├── Thunk.swift └── createThunkMiddleware.swift ├── ReSwift-ThunkTests ├── ExpectThunk.swift ├── Info.plist └── Tests.swift ├── ReSwiftThunk.podspec └── carthage.sh /.github/workflows/cross-platform-compile.yml: -------------------------------------------------------------------------------- 1 | name: Cross-Platform Compilation and Testing 2 | 3 | on: 4 | push: 5 | branches: [ master ] 6 | pull_request: 7 | branches: [ master ] 8 | 9 | jobs: 10 | build: 11 | runs-on: macos-10.15 12 | timeout-minutes: 10 13 | strategy: 14 | matrix: 15 | include: 16 | - scheme: macOS 17 | sdk: "macosx11.1" 18 | destination: "platform=macOS" 19 | arch: x86_64 20 | swift_version: "5.3" 21 | action: test 22 | pod_lint: "YES" 23 | - scheme: iOS 24 | sdk: iphonesimulator 25 | destination: "platform=iOS Simulator,OS=14.4,name=iPhone 11" 26 | swift_version: "5.3" 27 | action: test 28 | pod_lint: "NO" 29 | - scheme: tvOS 30 | sdk: appletvsimulator 31 | destination: "platform=tvOS Simulator,OS=14.3,name=Apple TV 4K" 32 | swift_version: "5.3" 33 | action: test 34 | pod_lint: "NO" 35 | - scheme: watchOS 36 | sdk: watchsimulator 37 | destination: "platform=watchOS Simulator,name=Apple Watch Series 5 - 44mm" 38 | swift_version: "5.3" 39 | action: build 40 | pod_lint: "NO" 41 | 42 | env: 43 | LC_CTYPE: en_US.UTF-8 44 | LANG: en_US.UTF-8 45 | FRAMEWORK_NAME: "ReSwift-Thunk" 46 | 47 | steps: 48 | - name: Checkout Project 49 | uses: actions/checkout@v2 50 | - name: Select Xcode 51 | uses: devbotsxyz/xcode-select@v1.1.0 52 | with: 53 | version: "12.4.0" 54 | 55 | - name: Show Build Settings 56 | run: xcodebuild -project ${{ env.FRAMEWORK_NAME }}.xcodeproj -scheme '${{ env.FRAMEWORK_NAME }} ${{ matrix.scheme }}' -showBuildSettings 57 | - name: Show Build SDK 58 | run: xcodebuild -project ${{ env.FRAMEWORK_NAME }}.xcodeproj -scheme '${{ env.FRAMEWORK_NAME }} ${{ matrix.scheme }}' -showsdks 59 | - name: Show Available Destinations 60 | run: xcodebuild -project ${{ env.FRAMEWORK_NAME }}.xcodeproj -scheme '${{ env.FRAMEWORK_NAME }} ${{ matrix.scheme }}' -showdestinations 61 | 62 | - name: Recover Cached Carthage dependencies 63 | uses: actions/cache@v1 64 | id: carthage-cache 65 | with: 66 | path: Carthage 67 | key: ${{ matrix.scheme }}-carthage-${{ hashFiles('Cartfile.resolved') }}-cache_v3 68 | - name: Print Carthage contents after cache 69 | run: | 70 | if [[ -d Carthage ]]; then 71 | ls Carthage/**/* 72 | fi 73 | - name: Carthage Bootstrap 74 | if: steps.carthage-cache.outputs.cache-hit != 'true' 75 | run: carthage bootstrap --no-use-binaries --use-xcframeworks --cache-builds --platform ${{ matrix.scheme }} 76 | - name: Print Carthage contents after bootstrap 77 | run: ls Carthage/**/* 78 | 79 | - name: Build and Test 80 | run: | 81 | xcodebuild clean ${{ matrix.action }} \ 82 | -destination "${{ matrix.destination }}" \ 83 | -scheme "${{ env.FRAMEWORK_NAME }} ${{ matrix.scheme }}" \ 84 | -sdk "${{ matrix.sdk }}" \ 85 | -configuration Debug \ 86 | -project "${{ env.FRAMEWORK_NAME }}.xcodeproj" \ 87 | CODE_SIGN_IDENTITY="" \ 88 | CODE_SIGNING_REQUIRED=NO \ 89 | ONLY_ACTIVE_ARCH=YES \ 90 | GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES \ 91 | GCC_GENERATE_TEST_COVERAGE_FILES=YES \ 92 | SWIFT_VERSION=${{ matrix.swift_version }} 93 | 94 | - name: Lint If Needed 95 | if: matrix.pod_lint == 'YES' 96 | run: | 97 | gem install cocoapods -v '1.10.1' 98 | pod repo update 99 | pod lib lint --verbose --allow-warnings 100 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | .DS_Store 6 | 7 | ## Build generated 8 | build/ 9 | DerivedData 10 | 11 | ## Various settings 12 | *.pbxuser 13 | !default.pbxuser 14 | *.mode1v3 15 | !default.mode1v3 16 | *.mode2v3 17 | !default.mode2v3 18 | *.perspectivev3 19 | !default.perspectivev3 20 | xcuserdata 21 | 22 | ## Other 23 | *.xccheckout 24 | *.moved-aside 25 | *.xcuserstate 26 | *.xcscmblueprint 27 | 28 | ## Obj-C/Swift specific 29 | *.hmap 30 | *.ipa 31 | 32 | # Swift Package Manager 33 | # 34 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 35 | # Packages/ 36 | .build/ 37 | 38 | # While ReSwift has no dependencies we are still using CocoaPods, but only 39 | # to ensure developers use the same binary version of SwiftLint. Since 40 | # this is just a development dependency it is ok to ignore it, and rely on 41 | # developers to generate it when required. 42 | Pods/ 43 | 44 | # Carthage 45 | # 46 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 47 | # Carthage/Checkouts 48 | 49 | Carthage/Build 50 | 51 | # fastlane 52 | # 53 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 54 | # screenshots whenever they are needed. 55 | # For more information about the recommended setup visit: 56 | # https://github.com/fastlane/fastlane/blob/master/docs/Gitignore.md 57 | 58 | fastlane/report.xml 59 | fastlane/screenshots 60 | Carthage 61 | 62 | # Generated documentation 63 | Docs/tmp 64 | Docs/output 65 | -------------------------------------------------------------------------------- /.hound.yml: -------------------------------------------------------------------------------- 1 | swift: 2 | enabled: true 3 | config_file: .swiftlint.yml 4 | -------------------------------------------------------------------------------- /.swiftlint.yml: -------------------------------------------------------------------------------- 1 | excluded: # paths to ignore during linting. overridden by `included`. 2 | - Carthage 3 | - Pods 4 | 5 | disabled_rules: # rule identifiers to exclude from running 6 | - force_cast 7 | - opening_brace 8 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Upcoming 2 | 3 | **Breaking API Changes:** 4 | 5 | **API Changes:** 6 | 7 | - Remove deprecated `StateType` protocol requirement (#48) - @DivineDominion, @mjarvis 8 | 9 | **Fixes:** 10 | 11 | # 2.0.1 12 | 13 | **Fixes:** 14 | 15 | - Fixes Carthage build error (#44) - @DivineDominion, @mjarvis 16 | 17 | # 2.0.0 18 | 19 | **Breaking API Changes:** 20 | - Drop support for Swift 3.2, 4.0, and 4.1. (#45) - @shawnkoh, @mjarvis 21 | - Drop support for iOS 8 (#45) - @shawnkoh, @mjarvis 22 | 23 | **Other:** 24 | - Rename SwiftPM library to `ReSwiftThunk`, this makes naming consistent across all package manager (Cocoapods, Carthage and SwiftPM) (#42) - @jookes 25 | - `ExpectThunk`'s methods `dispatches` and `getsState` no longer have `@discardableResult` return values (#40) - @xavierLowmiller 26 | - 27 | # 1.2.0 28 | 29 | **API Changes:** 30 | - Renames `createThunksMiddleware` to `createThunkMiddleware` and adds deprecated forward for `createThunksMiddleware` (#20) - @fbernutz 31 | 32 | **Other:** 33 | 34 | - Adds `ExpectThunk` testing helper and corresponding CocoaPods subspec (#19, #37) - @jjgp, @okaverin 35 | - Adds SwiftPM support (#21) - @jayhickey 36 | - Require ReSwift 5.0 (#28) - @DivineDominion 37 | - Specify all officially supported Swift versions in podspec (#38) - @okaverin 38 | 39 | # 1.1.0 40 | 41 | *Released: 01/16/2019* 42 | 43 | **API Changes:** 44 | - Renames `ThunkAction` to `Thunk` 45 | - Renames `ThunkMiddleware()` to `createThunkMiddleware()` 46 | - Adds deprecated forwards for `ThunkAction` and `ThunkMiddleware()` 47 | 48 | **Other:** 49 | - This project has been migrated from https://github.com/mikecole20/ReSwiftThunk/ along with some backwards-compatible API changes documented above. 50 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to ReSwift-Thunk 2 | 3 | Pull requests are welcome on the [`master`](https://github.com/ReSwift/ReSwift-Thunk) branch. 4 | 5 | We know making you first pull request can be scary. If you have trouble with any of the contribution rules, **still make the Pull Request**. We are here to help. 6 | 7 | We personally think the best way to get started contributing to this library is by using it in one of your projects! 8 | 9 | ## Swift style guide 10 | 11 | We follow the [Ray Wenderlich Style Guide](https://github.com/raywenderlich/swift-style-guide) very closely with the following exception: 12 | 13 | - Use the Xcode default of 4 spaces for indentation. 14 | 15 | ## SwiftLint 16 | 17 | [SwiftLint](https://github.com/realm/SwiftLint) runs automatically on all pull requests via [houndci.com](https://houndci.com/). If you have SwiftLint installed, you will receive the same warnings in Xcode at build time, that hound will check for on pull requests. 18 | 19 | Function body lengths in tests will often cause a SwiftLint warning. These can be handled on a per case bases by prefixing the function with: 20 | 21 | ```swift 22 | // swiftlint:disable function_body_length 23 | func someFunctionThatShouldHaveAReallyLongBody() {} 24 | ``` 25 | 26 | Common violations to look out for are trailing white and valid docs. 27 | 28 | ## Tests 29 | 30 | All code going into master requires testing. We keep code coverage at 100% to ensure the best possibility that all edge cases are tested for. It's good practice to test for any variations that can cause nil to be returned. 31 | 32 | Tests are run in [Travis CI](https://travis-ci.org/ReSwift/ReSwift-Thunk) automatically on all pull requests, branches and tags. These are the same tests that run in Xcode at development time. 33 | 34 | ## Comments 35 | 36 | - **Readable code should be preferred over commented code.** 37 | 38 | Comments in code are used to document non-obvious use cases. For example, when the use of a piece of code looks unnecessary, and naming alone does not convey why it is required. 39 | 40 | - **Comments need to be updated or removed if the code changes.** 41 | 42 | If a comment is included, it is just as important as code and has the same technical debt weight. The only thing worse than a unneeded comment is a comment that is not maintained. 43 | 44 | ## Code documentation 45 | 46 | Code documentation is different from comments. Please be liberal with code docs. 47 | 48 | When writing code docs, remember they are: 49 | 50 | - Displayed to a user in Xcode quick help 51 | - Used to generate API documentation 52 | - API documentation also generates Dash docsets 53 | 54 | In particular paying attention to: 55 | 56 | - Keeping docs current 57 | - Documenting all parameters and return types (SwiftLint helps with warning when they are not valid) 58 | - Stating common issues that a user may run into 59 | 60 | See [NSHipster Swift Documentation](http://nshipster.com/swift-documentation/) for a good reference on writing documentation in Swift. 61 | 62 | ## Pull Request Technicalities 63 | 64 | You're always welcome to open Pull Requests, even if the result is not quite finished or you need feedback! 65 | 66 | Here's a checklist for you about what makes Pull Requests to ReSwift shine: 67 | 68 | * Run [SwiftLint](https://github.com/realm/SwiftLint) locally to ensure your code-style is consistent with the rest of the codebase. 69 | * Keep your Pull Requests focused. Rather be opening multiple PRs than making a dozen unrelated but discussion worthy changes in a single PR. 70 | * You can propose PRs to merge with the `master` branch directly. We don't use any complex branching strategies. 71 | 72 | As a contributor, choose the "squash & merge" strategy to merge PRs with a single commit, keeping the commit history clean. (That's an upside of focused Pull Requests: you don't lose extra information.) 73 | 74 | ## Publishing New Releases 75 | 76 | Members of the [@ReSwift/releases](https://github.com/orgs/ReSwift/teams/releases) team have the necessary permissions to publish a new version to CocoaPods. If you want a new version of ReSwift-Thunk to be published you should ping these folks. 77 | 78 | To create a new release, create a pull request targeting either `master`, or a separate release branch for hot-fixes, with the following: 79 | 80 | - [ ] Bump version number in `ReSwift-Thunk.podspec` and `Info.plist` (We follow [semver](https://semver.org/) - most importantly any breaking API change should result in a major API version bump) 81 | - [ ] Add the new version number and the release date to `CHANGELOG.md` 82 | - [ ] Create a tag off of the relevant branch (`master` for regular release) and add the relevant changelog entries to the [release list on GitHub](https://github.com/ReSwift/ReSwift-Thunk/releases) 83 | - [ ] Publish the new version to the CocoaPods trunk 84 | 85 | -------------------------------------------------------------------------------- /Cartfile: -------------------------------------------------------------------------------- 1 | # github "ReSwift/ReSwift" ~> 6.1.0 2 | # Use master until new version is ready 3 | github "ReSwift/ReSwift" "master" 4 | -------------------------------------------------------------------------------- /Cartfile.resolved: -------------------------------------------------------------------------------- 1 | github "ReSwift/ReSwift" "95b81b75f26d467bb624939a92189b1bae3e7b27" 2 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | Copyright (c) 2018 ReSwift Contributors 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 5 | 6 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 7 | 8 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:4.2 2 | 3 | import PackageDescription 4 | 5 | let package = Package( 6 | name: "ReSwiftThunk", 7 | products: [ 8 | .library(name: "ReSwiftThunk", targets: ["ReSwiftThunk"]), 9 | .library(name: "ReSwiftThunkTesting", targets: ["ReSwiftThunkTesting"]) 10 | ], 11 | dependencies: [ 12 | .package(url: "https://github.com/ReSwift/ReSwift", .upToNextMajor(from: "6.1.0")) 13 | ], 14 | targets: [ 15 | .target( 16 | name: "ReSwiftThunk", 17 | dependencies: [ 18 | "ReSwift" 19 | ], 20 | path: "ReSwift-Thunk" 21 | ), 22 | .target( 23 | name: "ReSwiftThunkTesting", 24 | path: "ReSwift-ThunkTests/", 25 | sources: ["ExpectThunk.swift"] 26 | ) 27 | ] 28 | ) 29 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ReSwift-Thunk 2 | 3 | [![Build Status](https://img.shields.io/travis/ReSwift/ReSwift-Thunk/master.svg?style=flat-square)](https://travis-ci.org/ReSwift/ReSwift-Thunk) 4 | [![Code coverage status](https://img.shields.io/codecov/c/github/ReSwift/ReSwift-Thunk.svg?style=flat-square)](http://codecov.io/github/ReSwift/ReSwift-Thunk) 5 | [![CocoaPods Compatible](https://img.shields.io/cocoapods/v/ReSwiftThunk.svg?style=flat-square)](https://cocoapods.org/pods/ReSwiftThunk) 6 | [![Platform support](https://img.shields.io/badge/platform-ios%20%7C%20osx%20%7C%20tvos%20%7C%20watchos-lightgrey.svg?style=flat-square)](https://github.com/ReSwift/ReSwift-Thunk/blob/master/LICENSE.md) 7 | [![License MIT](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square)](https://github.com/ReSwift/ReSwift-Thunk/blob/master/LICENSE.md) [![Reviewed by Hound](https://img.shields.io/badge/Reviewed_by-Hound-8E64B0.svg?style=flat-square)](https://houndci.com) 8 | 9 | **Supported Swift Versions:** Swift 4.2, Swift 5.0, Swift 5.3 10 | 11 | When [ReSwift](https://github.com/ReSwift/ReSwift/) is a [Redux](https://github.com/reactjs/redux)-like implementation of the unidirectional data flow architecture in Swift, ReSwift-Thunk is like [redux-thunk](https://github.com/reduxjs/redux-thunk). 12 | 13 | ## Why Use ReSwift-Thunk? 14 | 15 | ## Example 16 | 17 | ```swift 18 | // First, you create the middleware, which needs to know the type of your `State`. 19 | let thunkMiddleware: Middleware = createThunkMiddleware() 20 | 21 | // Note that it can perfectly live with other middleware in the chain. 22 | let store = Store(reducer: reducer, state: nil, middleware: [thunkMiddleware]) 23 | 24 | // A thunk represents an action that can perform side effects, access the current state of the store, and dispatch new actions, as if it were a ReSwift middleware. 25 | let thunk = Thunk { dispatch, getState in 26 | if getState!.loading { 27 | return 28 | } 29 | dispatch(RequestStart()) 30 | api.getSomething() { something in 31 | if something != nil { 32 | dispatch(RequestSuccess(something)) 33 | } else { 34 | dispatch(RequestError()) 35 | } 36 | } 37 | } 38 | 39 | // A thunk can also be a function if you want to pass on parameters 40 | func thunkWithParams(_ identifier: Int) -> Thunk { 41 | return Thunk { dispatch, getState in 42 | guard let state = getState() else { return } 43 | 44 | if state.loading { 45 | return 46 | } 47 | 48 | api.getSomethingWithId(identifier) { something in 49 | if something != nil { 50 | dispatch(RequestSuccess(something)) 51 | } else { 52 | dispatch(RequestError()) 53 | } 54 | } 55 | } 56 | } 57 | 58 | // As the thunk type conforms to the `Action` protocol, you can dispatch it as usual, without having to implement an overload of the `dispatch` function inside the ReSwift library. 59 | store.dispatch(thunk) 60 | 61 | // You can do the same with the Thunk that requires parameters, like so 62 | store.dispatch(thunkWithParams(10)) 63 | 64 | // Note that these actions won't reach the reducers, instead, the thunks middleware will catch it and execute its body, producing the desired side effects. 65 | ``` 66 | 67 | ## Testing 68 | 69 | The `ExpectThunk` helper, available as a CocoaPods subspec, allows for testing the order and actions of `dispatch` as well as the 70 | dependencies on `getState`. 71 | 72 | ```swift 73 | ExpectThunk(thunk) 74 | .getsState(RequestState(loading: false)) 75 | // If the action is Equatable it will be asserted for equality with `dispatches`. 76 | .dispatches(RequestStart()) 77 | .dispatches { action in 78 | XCTAssert(action.something == expectedSomething) 79 | } 80 | .wait() // or simply run() for synchronous flows 81 | ``` 82 | 83 | ## Installation 84 | 85 | ReSwift-Thunk requires the [ReSwift](https://github.com/ReSwift/ReSwift/) base module. 86 | 87 | ### CocoaPods 88 | 89 | You can install ReSwift-Thunk via CocoaPods by adding it to your `Podfile`: 90 | 91 | ``` 92 | target 'TARGET' do 93 | pod 'ReSwiftThunk' 94 | end 95 | 96 | target 'TARGET-TESTS' do 97 | pod 'ReSwiftThunk/ExpectThunk' 98 | end 99 | ``` 100 | 101 | And run `pod install`. 102 | 103 | #### A Note on Including ExpectThunk 104 | 105 | If the `ExpectThunk` subspec is used, the tests target cannot be nested in another target due to current limitations. The tests target must 106 | be a standalone target as shown in the snippet above. 107 | 108 | ### Carthage 109 | 110 | You can install ReSwift-Thunk via [Carthage](https://github.com/Carthage/Carthage) by adding the following line to your `Cartfile`: 111 | 112 | ``` 113 | github "ReSwift/ReSwift-Thunk" 114 | ``` 115 | 116 | ### Swift Package Manager 117 | 118 | You can install ReSwift-Thunk via [Swift Package Manager](https://swift.org/package-manager/) by adding the following line to your `Package.swift`: 119 | 120 | ```swift 121 | import PackageDescription 122 | 123 | let package = Package( 124 | [...] 125 | dependencies: [ 126 | .Package(url: "https://github.com/ReSwift/ReSwift-Thunk.git", majorVersion: XYZ) 127 | ] 128 | ) 129 | ``` 130 | 131 | Import testing support by importing `ReSwiftThunkTesting` 132 | 133 | ```swift 134 | import ReSwiftThunkTesting 135 | ``` 136 | 137 | ## Checking out Source Code 138 | 139 | After checking out the project run `pod install` to get the latest supported version of [SwiftLint](https://github.com/realm/SwiftLint), which we use to ensure a consistent style in the codebase. 140 | 141 | ## Example Projects 142 | 143 | - [ReduxMovieDB](https://github.com/cardoso/ReduxMovieDB): A simple App that queries the tmdb.org API to display the latest movies. Allows searching and viewing details. [Relevant file](https://github.com/cardoso/ReduxMovieDB/blob/master/ReduxMovieDB/Thunks.swift). 144 | 145 | ## Contributing 146 | 147 | You can find all the details on how to get started in the [Contributing Guide](/CONTRIBUTING.md). 148 | 149 | ## Credits 150 | 151 | ## License 152 | 153 | ReSwift-Thunk Copyright (c) 2018 ReSwift Contributors. Distributed under the MIT License (MIT). See [LICENSE.md](/CONTRIBUTING.md). 154 | -------------------------------------------------------------------------------- /ReSwift-Thunk-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 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /ReSwift-Thunk-tvOS/ReSwift_Thunk_tvOS.h: -------------------------------------------------------------------------------- 1 | // 2 | // ReSwift_Thunk_tvOS.h 3 | // ReSwift-Thunk-tvOS 4 | // 5 | // Created by Christian on 26.06.20. 6 | // Copyright © 2020 ReSwift. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for ReSwift_Thunk_tvOS. 12 | FOUNDATION_EXPORT double ReSwift_Thunk_tvOSVersionNumber; 13 | 14 | //! Project version string for ReSwift_Thunk_tvOS. 15 | FOUNDATION_EXPORT const unsigned char ReSwift_Thunk_tvOSVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /ReSwift-Thunk.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 52; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 5036622924A5D865003C65ED /* ReSwift_Thunk.h in Headers */ = {isa = PBXBuildFile; fileRef = 65A3D6D8218B89A60075CB92 /* ReSwift_Thunk.h */; settings = {ATTRIBUTES = (Public, ); }; }; 11 | 5036622A24A5D86B003C65ED /* Thunk.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65A3D6EF218B8A300075CB92 /* Thunk.swift */; }; 12 | 5036622B24A5D86B003C65ED /* createThunkMiddleware.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65A3D6F4218C92420075CB92 /* createThunkMiddleware.swift */; }; 13 | 5036622C24A5D883003C65ED /* ReSwiftThunk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5036621C24A5D7DE003C65ED /* ReSwiftThunk.framework */; }; 14 | 5036623A24A5D908003C65ED /* ReSwift_Thunk.h in Headers */ = {isa = PBXBuildFile; fileRef = 65A3D6D8218B89A60075CB92 /* ReSwift_Thunk.h */; settings = {ATTRIBUTES = (Public, ); }; }; 15 | 5036624424A5DA85003C65ED /* ReSwiftThunk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5036623224A5D8FB003C65ED /* ReSwiftThunk.framework */; }; 16 | 5036625724A5DBB8003C65ED /* ReSwift_Thunk.h in Headers */ = {isa = PBXBuildFile; fileRef = 65A3D6D8218B89A60075CB92 /* ReSwift_Thunk.h */; settings = {ATTRIBUTES = (Public, ); }; }; 17 | 5036625824A5DBBD003C65ED /* Thunk.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65A3D6EF218B8A300075CB92 /* Thunk.swift */; }; 18 | 5036625924A5DBBD003C65ED /* createThunkMiddleware.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65A3D6F4218C92420075CB92 /* createThunkMiddleware.swift */; }; 19 | 5036625A24A5DBC0003C65ED /* Thunk.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65A3D6EF218B8A300075CB92 /* Thunk.swift */; }; 20 | 5036625B24A5DBC0003C65ED /* createThunkMiddleware.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65A3D6F4218C92420075CB92 /* createThunkMiddleware.swift */; }; 21 | 5036626A24A5DC32003C65ED /* ReSwiftThunk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5036626124A5DC31003C65ED /* ReSwiftThunk.framework */; }; 22 | 5036627824A5DC76003C65ED /* ExpectThunk.swift in Sources */ = {isa = PBXBuildFile; fileRef = D28E4F552214F37100DEFA7D /* ExpectThunk.swift */; }; 23 | 5036627924A5DC76003C65ED /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65A3D6E3218B89A60075CB92 /* Tests.swift */; }; 24 | 5036627A24A5DC77003C65ED /* ExpectThunk.swift in Sources */ = {isa = PBXBuildFile; fileRef = D28E4F552214F37100DEFA7D /* ExpectThunk.swift */; }; 25 | 5036627B24A5DC77003C65ED /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65A3D6E3218B89A60075CB92 /* Tests.swift */; }; 26 | 5036627C24A5DC81003C65ED /* Thunk.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65A3D6EF218B8A300075CB92 /* Thunk.swift */; }; 27 | 5036627D24A5DC81003C65ED /* createThunkMiddleware.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65A3D6F4218C92420075CB92 /* createThunkMiddleware.swift */; }; 28 | 5036627E24A5DD1E003C65ED /* ReSwift_Thunk.h in Headers */ = {isa = PBXBuildFile; fileRef = 65A3D6D8218B89A60075CB92 /* ReSwift_Thunk.h */; settings = {ATTRIBUTES = (Public, ); }; }; 29 | 507DCA1C2695F217007A5474 /* ReSwift.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 507DCA1B2695F217007A5474 /* ReSwift.xcframework */; }; 30 | 507DCA1D2695F217007A5474 /* ReSwift.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 507DCA1B2695F217007A5474 /* ReSwift.xcframework */; }; 31 | 507DCA1E2695F217007A5474 /* ReSwift.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 507DCA1B2695F217007A5474 /* ReSwift.xcframework */; }; 32 | 507DCA1F2695F217007A5474 /* ReSwift.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 507DCA1B2695F217007A5474 /* ReSwift.xcframework */; }; 33 | 65A3D6E4218B89A60075CB92 /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65A3D6E3218B89A60075CB92 /* Tests.swift */; }; 34 | D28E4F562214F37100DEFA7D /* ExpectThunk.swift in Sources */ = {isa = PBXBuildFile; fileRef = D28E4F552214F37100DEFA7D /* ExpectThunk.swift */; }; 35 | /* End PBXBuildFile section */ 36 | 37 | /* Begin PBXContainerItemProxy section */ 38 | 5036622424A5D811003C65ED /* PBXContainerItemProxy */ = { 39 | isa = PBXContainerItemProxy; 40 | containerPortal = 65A3D6CC218B89A60075CB92 /* Project object */; 41 | proxyType = 1; 42 | remoteGlobalIDString = 5036621B24A5D7DE003C65ED; 43 | remoteInfo = "ReSwift-Thunk"; 44 | }; 45 | 5036624524A5DA85003C65ED /* PBXContainerItemProxy */ = { 46 | isa = PBXContainerItemProxy; 47 | containerPortal = 65A3D6CC218B89A60075CB92 /* Project object */; 48 | proxyType = 1; 49 | remoteGlobalIDString = 5036623124A5D8FB003C65ED; 50 | remoteInfo = "ReSwift-Thunk macOS"; 51 | }; 52 | 5036626B24A5DC32003C65ED /* PBXContainerItemProxy */ = { 53 | isa = PBXContainerItemProxy; 54 | containerPortal = 65A3D6CC218B89A60075CB92 /* Project object */; 55 | proxyType = 1; 56 | remoteGlobalIDString = 5036626024A5DC31003C65ED; 57 | remoteInfo = "ReSwift-Thunk-tvOS"; 58 | }; 59 | /* End PBXContainerItemProxy section */ 60 | 61 | /* Begin PBXFileReference section */ 62 | 5036621C24A5D7DE003C65ED /* ReSwiftThunk.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ReSwiftThunk.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 63 | 5036623224A5D8FB003C65ED /* ReSwiftThunk.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ReSwiftThunk.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 64 | 5036623F24A5DA85003C65ED /* ReSwift-Thunk-Tests macOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "ReSwift-Thunk-Tests macOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 65 | 5036624F24A5DB68003C65ED /* ReSwiftThunk.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ReSwiftThunk.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 66 | 5036626124A5DC31003C65ED /* ReSwiftThunk.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ReSwiftThunk.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 67 | 5036626924A5DC32003C65ED /* ReSwift-Thunk-Tests tvOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "ReSwift-Thunk-Tests tvOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 68 | 507DCA1B2695F217007A5474 /* ReSwift.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = ReSwift.xcframework; path = Carthage/Build/ReSwift.xcframework; sourceTree = ""; }; 69 | 65A3D6D8218B89A60075CB92 /* ReSwift_Thunk.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ReSwift_Thunk.h; sourceTree = ""; }; 70 | 65A3D6D9218B89A60075CB92 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 71 | 65A3D6DE218B89A60075CB92 /* ReSwift-Thunk-Tests iOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "ReSwift-Thunk-Tests iOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 72 | 65A3D6E3218B89A60075CB92 /* Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests.swift; sourceTree = ""; }; 73 | 65A3D6E5218B89A60075CB92 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 74 | 65A3D6EF218B8A300075CB92 /* Thunk.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Thunk.swift; sourceTree = ""; }; 75 | 65A3D6F4218C92420075CB92 /* createThunkMiddleware.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = createThunkMiddleware.swift; sourceTree = ""; }; 76 | D28E4F552214F37100DEFA7D /* ExpectThunk.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExpectThunk.swift; sourceTree = ""; }; 77 | D4286E7721EFED3F00D5749B /* CHANGELOG.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = CHANGELOG.md; sourceTree = ""; }; 78 | D4286E7821EFED4D00D5749B /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; 79 | /* End PBXFileReference section */ 80 | 81 | /* Begin PBXFrameworksBuildPhase section */ 82 | 5036621924A5D7DE003C65ED /* Frameworks */ = { 83 | isa = PBXFrameworksBuildPhase; 84 | buildActionMask = 2147483647; 85 | files = ( 86 | 507DCA1C2695F217007A5474 /* ReSwift.xcframework in Frameworks */, 87 | ); 88 | runOnlyForDeploymentPostprocessing = 0; 89 | }; 90 | 5036622F24A5D8FB003C65ED /* Frameworks */ = { 91 | isa = PBXFrameworksBuildPhase; 92 | buildActionMask = 2147483647; 93 | files = ( 94 | 507DCA1D2695F217007A5474 /* ReSwift.xcframework in Frameworks */, 95 | ); 96 | runOnlyForDeploymentPostprocessing = 0; 97 | }; 98 | 5036623C24A5DA85003C65ED /* Frameworks */ = { 99 | isa = PBXFrameworksBuildPhase; 100 | buildActionMask = 2147483647; 101 | files = ( 102 | 5036624424A5DA85003C65ED /* ReSwiftThunk.framework in Frameworks */, 103 | ); 104 | runOnlyForDeploymentPostprocessing = 0; 105 | }; 106 | 5036624C24A5DB68003C65ED /* Frameworks */ = { 107 | isa = PBXFrameworksBuildPhase; 108 | buildActionMask = 2147483647; 109 | files = ( 110 | 507DCA1E2695F217007A5474 /* ReSwift.xcframework in Frameworks */, 111 | ); 112 | runOnlyForDeploymentPostprocessing = 0; 113 | }; 114 | 5036625E24A5DC31003C65ED /* Frameworks */ = { 115 | isa = PBXFrameworksBuildPhase; 116 | buildActionMask = 2147483647; 117 | files = ( 118 | 507DCA1F2695F217007A5474 /* ReSwift.xcframework in Frameworks */, 119 | ); 120 | runOnlyForDeploymentPostprocessing = 0; 121 | }; 122 | 5036626624A5DC32003C65ED /* Frameworks */ = { 123 | isa = PBXFrameworksBuildPhase; 124 | buildActionMask = 2147483647; 125 | files = ( 126 | 5036626A24A5DC32003C65ED /* ReSwiftThunk.framework in Frameworks */, 127 | ); 128 | runOnlyForDeploymentPostprocessing = 0; 129 | }; 130 | 65A3D6DB218B89A60075CB92 /* Frameworks */ = { 131 | isa = PBXFrameworksBuildPhase; 132 | buildActionMask = 2147483647; 133 | files = ( 134 | 5036622C24A5D883003C65ED /* ReSwiftThunk.framework in Frameworks */, 135 | ); 136 | runOnlyForDeploymentPostprocessing = 0; 137 | }; 138 | /* End PBXFrameworksBuildPhase section */ 139 | 140 | /* Begin PBXGroup section */ 141 | 65A3D6CB218B89A60075CB92 = { 142 | isa = PBXGroup; 143 | children = ( 144 | D4286E7721EFED3F00D5749B /* CHANGELOG.md */, 145 | D4286E7821EFED4D00D5749B /* README.md */, 146 | 65A3D6D7218B89A60075CB92 /* ReSwift-Thunk */, 147 | 65A3D6E2218B89A60075CB92 /* ReSwift-ThunkTests */, 148 | 65A3D6D6218B89A60075CB92 /* Products */, 149 | D4142B34253A3B02009FE569 /* Frameworks */, 150 | ); 151 | sourceTree = ""; 152 | }; 153 | 65A3D6D6218B89A60075CB92 /* Products */ = { 154 | isa = PBXGroup; 155 | children = ( 156 | 65A3D6DE218B89A60075CB92 /* ReSwift-Thunk-Tests iOS.xctest */, 157 | 5036621C24A5D7DE003C65ED /* ReSwiftThunk.framework */, 158 | 5036623224A5D8FB003C65ED /* ReSwiftThunk.framework */, 159 | 5036623F24A5DA85003C65ED /* ReSwift-Thunk-Tests macOS.xctest */, 160 | 5036624F24A5DB68003C65ED /* ReSwiftThunk.framework */, 161 | 5036626124A5DC31003C65ED /* ReSwiftThunk.framework */, 162 | 5036626924A5DC32003C65ED /* ReSwift-Thunk-Tests tvOS.xctest */, 163 | ); 164 | name = Products; 165 | sourceTree = ""; 166 | }; 167 | 65A3D6D7218B89A60075CB92 /* ReSwift-Thunk */ = { 168 | isa = PBXGroup; 169 | children = ( 170 | 65A3D6D8218B89A60075CB92 /* ReSwift_Thunk.h */, 171 | 65A3D6D9218B89A60075CB92 /* Info.plist */, 172 | 65A3D6EF218B8A300075CB92 /* Thunk.swift */, 173 | 65A3D6F4218C92420075CB92 /* createThunkMiddleware.swift */, 174 | ); 175 | path = "ReSwift-Thunk"; 176 | sourceTree = ""; 177 | }; 178 | 65A3D6E2218B89A60075CB92 /* ReSwift-ThunkTests */ = { 179 | isa = PBXGroup; 180 | children = ( 181 | D28E4F552214F37100DEFA7D /* ExpectThunk.swift */, 182 | 65A3D6E3218B89A60075CB92 /* Tests.swift */, 183 | 65A3D6E5218B89A60075CB92 /* Info.plist */, 184 | ); 185 | path = "ReSwift-ThunkTests"; 186 | sourceTree = ""; 187 | }; 188 | D4142B34253A3B02009FE569 /* Frameworks */ = { 189 | isa = PBXGroup; 190 | children = ( 191 | 507DCA1B2695F217007A5474 /* ReSwift.xcframework */, 192 | ); 193 | name = Frameworks; 194 | sourceTree = ""; 195 | }; 196 | /* End PBXGroup section */ 197 | 198 | /* Begin PBXHeadersBuildPhase section */ 199 | 5036621724A5D7DE003C65ED /* Headers */ = { 200 | isa = PBXHeadersBuildPhase; 201 | buildActionMask = 2147483647; 202 | files = ( 203 | 5036622924A5D865003C65ED /* ReSwift_Thunk.h in Headers */, 204 | ); 205 | runOnlyForDeploymentPostprocessing = 0; 206 | }; 207 | 5036622D24A5D8FB003C65ED /* Headers */ = { 208 | isa = PBXHeadersBuildPhase; 209 | buildActionMask = 2147483647; 210 | files = ( 211 | 5036623A24A5D908003C65ED /* ReSwift_Thunk.h in Headers */, 212 | ); 213 | runOnlyForDeploymentPostprocessing = 0; 214 | }; 215 | 5036624A24A5DB68003C65ED /* Headers */ = { 216 | isa = PBXHeadersBuildPhase; 217 | buildActionMask = 2147483647; 218 | files = ( 219 | 5036625724A5DBB8003C65ED /* ReSwift_Thunk.h in Headers */, 220 | ); 221 | runOnlyForDeploymentPostprocessing = 0; 222 | }; 223 | 5036625C24A5DC31003C65ED /* Headers */ = { 224 | isa = PBXHeadersBuildPhase; 225 | buildActionMask = 2147483647; 226 | files = ( 227 | 5036627E24A5DD1E003C65ED /* ReSwift_Thunk.h in Headers */, 228 | ); 229 | runOnlyForDeploymentPostprocessing = 0; 230 | }; 231 | /* End PBXHeadersBuildPhase section */ 232 | 233 | /* Begin PBXNativeTarget section */ 234 | 5036621B24A5D7DE003C65ED /* ReSwift-Thunk iOS */ = { 235 | isa = PBXNativeTarget; 236 | buildConfigurationList = 5036622124A5D7DF003C65ED /* Build configuration list for PBXNativeTarget "ReSwift-Thunk iOS" */; 237 | buildPhases = ( 238 | 5036621724A5D7DE003C65ED /* Headers */, 239 | 5036621824A5D7DE003C65ED /* Sources */, 240 | 5036621924A5D7DE003C65ED /* Frameworks */, 241 | 5036621A24A5D7DE003C65ED /* Resources */, 242 | ); 243 | buildRules = ( 244 | ); 245 | dependencies = ( 246 | ); 247 | name = "ReSwift-Thunk iOS"; 248 | productName = "ReSwift-Thunk"; 249 | productReference = 5036621C24A5D7DE003C65ED /* ReSwiftThunk.framework */; 250 | productType = "com.apple.product-type.framework"; 251 | }; 252 | 5036623124A5D8FB003C65ED /* ReSwift-Thunk macOS */ = { 253 | isa = PBXNativeTarget; 254 | buildConfigurationList = 5036623724A5D8FB003C65ED /* Build configuration list for PBXNativeTarget "ReSwift-Thunk macOS" */; 255 | buildPhases = ( 256 | 5036622D24A5D8FB003C65ED /* Headers */, 257 | 5036622E24A5D8FB003C65ED /* Sources */, 258 | 5036622F24A5D8FB003C65ED /* Frameworks */, 259 | 5036623024A5D8FB003C65ED /* Resources */, 260 | ); 261 | buildRules = ( 262 | ); 263 | dependencies = ( 264 | ); 265 | name = "ReSwift-Thunk macOS"; 266 | productName = "ReSwift-Thunk-macOS"; 267 | productReference = 5036623224A5D8FB003C65ED /* ReSwiftThunk.framework */; 268 | productType = "com.apple.product-type.framework"; 269 | }; 270 | 5036623E24A5DA85003C65ED /* ReSwift-Thunk-Tests macOS */ = { 271 | isa = PBXNativeTarget; 272 | buildConfigurationList = 5036624724A5DA85003C65ED /* Build configuration list for PBXNativeTarget "ReSwift-Thunk-Tests macOS" */; 273 | buildPhases = ( 274 | 5036623B24A5DA85003C65ED /* Sources */, 275 | 5036623C24A5DA85003C65ED /* Frameworks */, 276 | 5036623D24A5DA85003C65ED /* Resources */, 277 | ); 278 | buildRules = ( 279 | ); 280 | dependencies = ( 281 | 5036624624A5DA85003C65ED /* PBXTargetDependency */, 282 | ); 283 | name = "ReSwift-Thunk-Tests macOS"; 284 | productName = "ReSwift-Thunk-Tests-macOS"; 285 | productReference = 5036623F24A5DA85003C65ED /* ReSwift-Thunk-Tests macOS.xctest */; 286 | productType = "com.apple.product-type.bundle.unit-test"; 287 | }; 288 | 5036624E24A5DB68003C65ED /* ReSwift-Thunk watchOS */ = { 289 | isa = PBXNativeTarget; 290 | buildConfigurationList = 5036625424A5DB68003C65ED /* Build configuration list for PBXNativeTarget "ReSwift-Thunk watchOS" */; 291 | buildPhases = ( 292 | 5036624A24A5DB68003C65ED /* Headers */, 293 | 5036624B24A5DB68003C65ED /* Sources */, 294 | 5036624C24A5DB68003C65ED /* Frameworks */, 295 | 5036624D24A5DB68003C65ED /* Resources */, 296 | ); 297 | buildRules = ( 298 | ); 299 | dependencies = ( 300 | ); 301 | name = "ReSwift-Thunk watchOS"; 302 | productName = "ReSwift-Thunk-watchOS"; 303 | productReference = 5036624F24A5DB68003C65ED /* ReSwiftThunk.framework */; 304 | productType = "com.apple.product-type.framework"; 305 | }; 306 | 5036626024A5DC31003C65ED /* ReSwift-Thunk tvOS */ = { 307 | isa = PBXNativeTarget; 308 | buildConfigurationList = 5036627224A5DC32003C65ED /* Build configuration list for PBXNativeTarget "ReSwift-Thunk tvOS" */; 309 | buildPhases = ( 310 | 5036625C24A5DC31003C65ED /* Headers */, 311 | 5036625D24A5DC31003C65ED /* Sources */, 312 | 5036625E24A5DC31003C65ED /* Frameworks */, 313 | 5036625F24A5DC31003C65ED /* Resources */, 314 | ); 315 | buildRules = ( 316 | ); 317 | dependencies = ( 318 | ); 319 | name = "ReSwift-Thunk tvOS"; 320 | productName = "ReSwift-Thunk-tvOS"; 321 | productReference = 5036626124A5DC31003C65ED /* ReSwiftThunk.framework */; 322 | productType = "com.apple.product-type.framework"; 323 | }; 324 | 5036626824A5DC32003C65ED /* ReSwift-Thunk-Tests tvOS */ = { 325 | isa = PBXNativeTarget; 326 | buildConfigurationList = 5036627524A5DC32003C65ED /* Build configuration list for PBXNativeTarget "ReSwift-Thunk-Tests tvOS" */; 327 | buildPhases = ( 328 | 5036626524A5DC32003C65ED /* Sources */, 329 | 5036626624A5DC32003C65ED /* Frameworks */, 330 | 5036626724A5DC32003C65ED /* Resources */, 331 | ); 332 | buildRules = ( 333 | ); 334 | dependencies = ( 335 | 5036626C24A5DC32003C65ED /* PBXTargetDependency */, 336 | ); 337 | name = "ReSwift-Thunk-Tests tvOS"; 338 | productName = "ReSwift-Thunk-tvOSTests"; 339 | productReference = 5036626924A5DC32003C65ED /* ReSwift-Thunk-Tests tvOS.xctest */; 340 | productType = "com.apple.product-type.bundle.unit-test"; 341 | }; 342 | 65A3D6DD218B89A60075CB92 /* ReSwift-Thunk-Tests iOS */ = { 343 | isa = PBXNativeTarget; 344 | buildConfigurationList = 65A3D6EC218B89A60075CB92 /* Build configuration list for PBXNativeTarget "ReSwift-Thunk-Tests iOS" */; 345 | buildPhases = ( 346 | 65A3D6DA218B89A60075CB92 /* Sources */, 347 | 65A3D6DB218B89A60075CB92 /* Frameworks */, 348 | 65A3D6DC218B89A60075CB92 /* Resources */, 349 | ); 350 | buildRules = ( 351 | ); 352 | dependencies = ( 353 | 5036622524A5D811003C65ED /* PBXTargetDependency */, 354 | ); 355 | name = "ReSwift-Thunk-Tests iOS"; 356 | productName = "ReSwift-ThunkTests"; 357 | productReference = 65A3D6DE218B89A60075CB92 /* ReSwift-Thunk-Tests iOS.xctest */; 358 | productType = "com.apple.product-type.bundle.unit-test"; 359 | }; 360 | /* End PBXNativeTarget section */ 361 | 362 | /* Begin PBXProject section */ 363 | 65A3D6CC218B89A60075CB92 /* Project object */ = { 364 | isa = PBXProject; 365 | attributes = { 366 | LastSwiftUpdateCheck = 1000; 367 | LastUpgradeCheck = 1200; 368 | ORGANIZATIONNAME = ReSwift; 369 | TargetAttributes = { 370 | 5036623124A5D8FB003C65ED = { 371 | CreatedOnToolsVersion = 11.5; 372 | }; 373 | 5036623E24A5DA85003C65ED = { 374 | CreatedOnToolsVersion = 11.5; 375 | }; 376 | 5036624E24A5DB68003C65ED = { 377 | CreatedOnToolsVersion = 11.5; 378 | }; 379 | 5036626024A5DC31003C65ED = { 380 | CreatedOnToolsVersion = 11.5; 381 | }; 382 | 5036626824A5DC32003C65ED = { 383 | CreatedOnToolsVersion = 11.5; 384 | }; 385 | 65A3D6DD218B89A60075CB92 = { 386 | CreatedOnToolsVersion = 10.0; 387 | LastSwiftMigration = 1200; 388 | }; 389 | }; 390 | }; 391 | buildConfigurationList = 65A3D6CF218B89A60075CB92 /* Build configuration list for PBXProject "ReSwift-Thunk" */; 392 | compatibilityVersion = "Xcode 9.3"; 393 | developmentRegion = en; 394 | hasScannedForEncodings = 0; 395 | knownRegions = ( 396 | en, 397 | Base, 398 | ); 399 | mainGroup = 65A3D6CB218B89A60075CB92; 400 | productRefGroup = 65A3D6D6218B89A60075CB92 /* Products */; 401 | projectDirPath = ""; 402 | projectRoot = ""; 403 | targets = ( 404 | 5036621B24A5D7DE003C65ED /* ReSwift-Thunk iOS */, 405 | 65A3D6DD218B89A60075CB92 /* ReSwift-Thunk-Tests iOS */, 406 | 5036623124A5D8FB003C65ED /* ReSwift-Thunk macOS */, 407 | 5036623E24A5DA85003C65ED /* ReSwift-Thunk-Tests macOS */, 408 | 5036624E24A5DB68003C65ED /* ReSwift-Thunk watchOS */, 409 | 5036626024A5DC31003C65ED /* ReSwift-Thunk tvOS */, 410 | 5036626824A5DC32003C65ED /* ReSwift-Thunk-Tests tvOS */, 411 | ); 412 | }; 413 | /* End PBXProject section */ 414 | 415 | /* Begin PBXResourcesBuildPhase section */ 416 | 5036621A24A5D7DE003C65ED /* Resources */ = { 417 | isa = PBXResourcesBuildPhase; 418 | buildActionMask = 2147483647; 419 | files = ( 420 | ); 421 | runOnlyForDeploymentPostprocessing = 0; 422 | }; 423 | 5036623024A5D8FB003C65ED /* Resources */ = { 424 | isa = PBXResourcesBuildPhase; 425 | buildActionMask = 2147483647; 426 | files = ( 427 | ); 428 | runOnlyForDeploymentPostprocessing = 0; 429 | }; 430 | 5036623D24A5DA85003C65ED /* Resources */ = { 431 | isa = PBXResourcesBuildPhase; 432 | buildActionMask = 2147483647; 433 | files = ( 434 | ); 435 | runOnlyForDeploymentPostprocessing = 0; 436 | }; 437 | 5036624D24A5DB68003C65ED /* Resources */ = { 438 | isa = PBXResourcesBuildPhase; 439 | buildActionMask = 2147483647; 440 | files = ( 441 | ); 442 | runOnlyForDeploymentPostprocessing = 0; 443 | }; 444 | 5036625F24A5DC31003C65ED /* Resources */ = { 445 | isa = PBXResourcesBuildPhase; 446 | buildActionMask = 2147483647; 447 | files = ( 448 | ); 449 | runOnlyForDeploymentPostprocessing = 0; 450 | }; 451 | 5036626724A5DC32003C65ED /* Resources */ = { 452 | isa = PBXResourcesBuildPhase; 453 | buildActionMask = 2147483647; 454 | files = ( 455 | ); 456 | runOnlyForDeploymentPostprocessing = 0; 457 | }; 458 | 65A3D6DC218B89A60075CB92 /* Resources */ = { 459 | isa = PBXResourcesBuildPhase; 460 | buildActionMask = 2147483647; 461 | files = ( 462 | ); 463 | runOnlyForDeploymentPostprocessing = 0; 464 | }; 465 | /* End PBXResourcesBuildPhase section */ 466 | 467 | /* Begin PBXSourcesBuildPhase section */ 468 | 5036621824A5D7DE003C65ED /* Sources */ = { 469 | isa = PBXSourcesBuildPhase; 470 | buildActionMask = 2147483647; 471 | files = ( 472 | 5036622B24A5D86B003C65ED /* createThunkMiddleware.swift in Sources */, 473 | 5036622A24A5D86B003C65ED /* Thunk.swift in Sources */, 474 | ); 475 | runOnlyForDeploymentPostprocessing = 0; 476 | }; 477 | 5036622E24A5D8FB003C65ED /* Sources */ = { 478 | isa = PBXSourcesBuildPhase; 479 | buildActionMask = 2147483647; 480 | files = ( 481 | 5036625924A5DBBD003C65ED /* createThunkMiddleware.swift in Sources */, 482 | 5036625824A5DBBD003C65ED /* Thunk.swift in Sources */, 483 | ); 484 | runOnlyForDeploymentPostprocessing = 0; 485 | }; 486 | 5036623B24A5DA85003C65ED /* Sources */ = { 487 | isa = PBXSourcesBuildPhase; 488 | buildActionMask = 2147483647; 489 | files = ( 490 | 5036627824A5DC76003C65ED /* ExpectThunk.swift in Sources */, 491 | 5036627924A5DC76003C65ED /* Tests.swift in Sources */, 492 | ); 493 | runOnlyForDeploymentPostprocessing = 0; 494 | }; 495 | 5036624B24A5DB68003C65ED /* Sources */ = { 496 | isa = PBXSourcesBuildPhase; 497 | buildActionMask = 2147483647; 498 | files = ( 499 | 5036625B24A5DBC0003C65ED /* createThunkMiddleware.swift in Sources */, 500 | 5036625A24A5DBC0003C65ED /* Thunk.swift in Sources */, 501 | ); 502 | runOnlyForDeploymentPostprocessing = 0; 503 | }; 504 | 5036625D24A5DC31003C65ED /* Sources */ = { 505 | isa = PBXSourcesBuildPhase; 506 | buildActionMask = 2147483647; 507 | files = ( 508 | 5036627D24A5DC81003C65ED /* createThunkMiddleware.swift in Sources */, 509 | 5036627C24A5DC81003C65ED /* Thunk.swift in Sources */, 510 | ); 511 | runOnlyForDeploymentPostprocessing = 0; 512 | }; 513 | 5036626524A5DC32003C65ED /* Sources */ = { 514 | isa = PBXSourcesBuildPhase; 515 | buildActionMask = 2147483647; 516 | files = ( 517 | 5036627A24A5DC77003C65ED /* ExpectThunk.swift in Sources */, 518 | 5036627B24A5DC77003C65ED /* Tests.swift in Sources */, 519 | ); 520 | runOnlyForDeploymentPostprocessing = 0; 521 | }; 522 | 65A3D6DA218B89A60075CB92 /* Sources */ = { 523 | isa = PBXSourcesBuildPhase; 524 | buildActionMask = 2147483647; 525 | files = ( 526 | 65A3D6E4218B89A60075CB92 /* Tests.swift in Sources */, 527 | D28E4F562214F37100DEFA7D /* ExpectThunk.swift in Sources */, 528 | ); 529 | runOnlyForDeploymentPostprocessing = 0; 530 | }; 531 | /* End PBXSourcesBuildPhase section */ 532 | 533 | /* Begin PBXTargetDependency section */ 534 | 5036622524A5D811003C65ED /* PBXTargetDependency */ = { 535 | isa = PBXTargetDependency; 536 | target = 5036621B24A5D7DE003C65ED /* ReSwift-Thunk iOS */; 537 | targetProxy = 5036622424A5D811003C65ED /* PBXContainerItemProxy */; 538 | }; 539 | 5036624624A5DA85003C65ED /* PBXTargetDependency */ = { 540 | isa = PBXTargetDependency; 541 | target = 5036623124A5D8FB003C65ED /* ReSwift-Thunk macOS */; 542 | targetProxy = 5036624524A5DA85003C65ED /* PBXContainerItemProxy */; 543 | }; 544 | 5036626C24A5DC32003C65ED /* PBXTargetDependency */ = { 545 | isa = PBXTargetDependency; 546 | target = 5036626024A5DC31003C65ED /* ReSwift-Thunk tvOS */; 547 | targetProxy = 5036626B24A5DC32003C65ED /* PBXContainerItemProxy */; 548 | }; 549 | /* End PBXTargetDependency section */ 550 | 551 | /* Begin XCBuildConfiguration section */ 552 | 5036622224A5D7DF003C65ED /* Debug */ = { 553 | isa = XCBuildConfiguration; 554 | buildSettings = { 555 | CODE_SIGN_STYLE = Automatic; 556 | DEFINES_MODULE = YES; 557 | DEVELOPMENT_TEAM = FRMDA3XRGC; 558 | DYLIB_COMPATIBILITY_VERSION = 1; 559 | DYLIB_CURRENT_VERSION = 1; 560 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 561 | FRAMEWORK_SEARCH_PATHS = ( 562 | "$(inherited)", 563 | "$(PROJECT_DIR)/Carthage/Build/iOS", 564 | ); 565 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 566 | LD_RUNPATH_SEARCH_PATHS = ( 567 | "$(inherited)", 568 | "@executable_path/Frameworks", 569 | "@loader_path/Frameworks", 570 | ); 571 | PRODUCT_BUNDLE_IDENTIFIER = "reswift.github.io..ReSwift-Thunk"; 572 | SDKROOT = iphoneos; 573 | SKIP_INSTALL = YES; 574 | SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; 575 | SUPPORTS_MACCATALYST = NO; 576 | SWIFT_VERSION = 5.0; 577 | TARGETED_DEVICE_FAMILY = "1,2"; 578 | }; 579 | name = Debug; 580 | }; 581 | 5036622324A5D7DF003C65ED /* Release */ = { 582 | isa = XCBuildConfiguration; 583 | buildSettings = { 584 | CODE_SIGN_STYLE = Automatic; 585 | DEFINES_MODULE = YES; 586 | DEVELOPMENT_TEAM = FRMDA3XRGC; 587 | DYLIB_COMPATIBILITY_VERSION = 1; 588 | DYLIB_CURRENT_VERSION = 1; 589 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 590 | FRAMEWORK_SEARCH_PATHS = ( 591 | "$(inherited)", 592 | "$(PROJECT_DIR)/Carthage/Build/iOS", 593 | ); 594 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 595 | LD_RUNPATH_SEARCH_PATHS = ( 596 | "$(inherited)", 597 | "@executable_path/Frameworks", 598 | "@loader_path/Frameworks", 599 | ); 600 | PRODUCT_BUNDLE_IDENTIFIER = "reswift.github.io..ReSwift-Thunk"; 601 | SDKROOT = iphoneos; 602 | SKIP_INSTALL = YES; 603 | SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; 604 | SUPPORTS_MACCATALYST = NO; 605 | SWIFT_VERSION = 5.0; 606 | TARGETED_DEVICE_FAMILY = "1,2"; 607 | }; 608 | name = Release; 609 | }; 610 | 5036623824A5D8FB003C65ED /* Debug */ = { 611 | isa = XCBuildConfiguration; 612 | buildSettings = { 613 | CODE_SIGN_STYLE = Manual; 614 | COMBINE_HIDPI_IMAGES = YES; 615 | DEFINES_MODULE = YES; 616 | DEVELOPMENT_TEAM = ""; 617 | DYLIB_COMPATIBILITY_VERSION = 1; 618 | DYLIB_CURRENT_VERSION = 1; 619 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 620 | FRAMEWORK_SEARCH_PATHS = ( 621 | "$(inherited)", 622 | "$(PROJECT_DIR)/Carthage/Build/Mac", 623 | ); 624 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 625 | LD_RUNPATH_SEARCH_PATHS = ( 626 | "$(inherited)", 627 | "@executable_path/../Frameworks", 628 | "@loader_path/Frameworks", 629 | ); 630 | PRODUCT_BUNDLE_IDENTIFIER = "reswift.github.io..ReSwift-Thunk"; 631 | PROVISIONING_PROFILE_SPECIFIER = ""; 632 | SDKROOT = macosx; 633 | SKIP_INSTALL = YES; 634 | SUPPORTED_PLATFORMS = macosx; 635 | SWIFT_VERSION = 5.0; 636 | }; 637 | name = Debug; 638 | }; 639 | 5036623924A5D8FB003C65ED /* Release */ = { 640 | isa = XCBuildConfiguration; 641 | buildSettings = { 642 | CODE_SIGN_STYLE = Manual; 643 | COMBINE_HIDPI_IMAGES = YES; 644 | DEFINES_MODULE = YES; 645 | DEVELOPMENT_TEAM = ""; 646 | DYLIB_COMPATIBILITY_VERSION = 1; 647 | DYLIB_CURRENT_VERSION = 1; 648 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 649 | FRAMEWORK_SEARCH_PATHS = ( 650 | "$(inherited)", 651 | "$(PROJECT_DIR)/Carthage/Build/Mac", 652 | ); 653 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 654 | LD_RUNPATH_SEARCH_PATHS = ( 655 | "$(inherited)", 656 | "@executable_path/../Frameworks", 657 | "@loader_path/Frameworks", 658 | ); 659 | PRODUCT_BUNDLE_IDENTIFIER = "reswift.github.io..ReSwift-Thunk"; 660 | PROVISIONING_PROFILE_SPECIFIER = ""; 661 | SDKROOT = macosx; 662 | SKIP_INSTALL = YES; 663 | SUPPORTED_PLATFORMS = macosx; 664 | SWIFT_VERSION = 5.0; 665 | }; 666 | name = Release; 667 | }; 668 | 5036624824A5DA85003C65ED /* Debug */ = { 669 | isa = XCBuildConfiguration; 670 | buildSettings = { 671 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 672 | CODE_SIGN_STYLE = Manual; 673 | DEVELOPMENT_TEAM = ""; 674 | INFOPLIST_FILE = "ReSwift-ThunkTests/Info.plist"; 675 | LD_RUNPATH_SEARCH_PATHS = ( 676 | "$(inherited)", 677 | "@executable_path/Frameworks", 678 | "@loader_path/Frameworks", 679 | "$(FRAMEWORK_SEARCH_PATHS)", 680 | ); 681 | PRODUCT_BUNDLE_IDENTIFIER = "reswift.github.io.ReSwift-ThunkTests"; 682 | PRODUCT_NAME = "$(TARGET_NAME)"; 683 | PROVISIONING_PROFILE_SPECIFIER = ""; 684 | SDKROOT = macosx; 685 | SUPPORTED_PLATFORMS = macosx; 686 | SWIFT_VERSION = 5.0; 687 | }; 688 | name = Debug; 689 | }; 690 | 5036624924A5DA85003C65ED /* Release */ = { 691 | isa = XCBuildConfiguration; 692 | buildSettings = { 693 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 694 | CODE_SIGN_STYLE = Manual; 695 | DEVELOPMENT_TEAM = ""; 696 | INFOPLIST_FILE = "ReSwift-ThunkTests/Info.plist"; 697 | LD_RUNPATH_SEARCH_PATHS = ( 698 | "$(inherited)", 699 | "@executable_path/Frameworks", 700 | "@loader_path/Frameworks", 701 | "$(FRAMEWORK_SEARCH_PATHS)", 702 | ); 703 | PRODUCT_BUNDLE_IDENTIFIER = "reswift.github.io.ReSwift-ThunkTests"; 704 | PRODUCT_NAME = "$(TARGET_NAME)"; 705 | PROVISIONING_PROFILE_SPECIFIER = ""; 706 | SDKROOT = macosx; 707 | SUPPORTED_PLATFORMS = macosx; 708 | SWIFT_VERSION = 5.0; 709 | }; 710 | name = Release; 711 | }; 712 | 5036625524A5DB68003C65ED /* Debug */ = { 713 | isa = XCBuildConfiguration; 714 | buildSettings = { 715 | APPLICATION_EXTENSION_API_ONLY = YES; 716 | CODE_SIGN_STYLE = Automatic; 717 | DEFINES_MODULE = YES; 718 | DEVELOPMENT_TEAM = FRMDA3XRGC; 719 | DYLIB_COMPATIBILITY_VERSION = 1; 720 | DYLIB_CURRENT_VERSION = 1; 721 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 722 | FRAMEWORK_SEARCH_PATHS = ( 723 | "$(inherited)", 724 | "$(PROJECT_DIR)/Carthage/Build/watchOS", 725 | ); 726 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 727 | LD_RUNPATH_SEARCH_PATHS = ( 728 | "$(inherited)", 729 | "@executable_path/Frameworks", 730 | "@loader_path/Frameworks", 731 | ); 732 | PRODUCT_BUNDLE_IDENTIFIER = "reswift.github.io..ReSwift-Thunk"; 733 | SDKROOT = watchos; 734 | SKIP_INSTALL = YES; 735 | SUPPORTED_PLATFORMS = "watchsimulator watchos"; 736 | SWIFT_VERSION = 5.0; 737 | TARGETED_DEVICE_FAMILY = 4; 738 | }; 739 | name = Debug; 740 | }; 741 | 5036625624A5DB68003C65ED /* Release */ = { 742 | isa = XCBuildConfiguration; 743 | buildSettings = { 744 | APPLICATION_EXTENSION_API_ONLY = YES; 745 | CODE_SIGN_STYLE = Automatic; 746 | DEFINES_MODULE = YES; 747 | DEVELOPMENT_TEAM = FRMDA3XRGC; 748 | DYLIB_COMPATIBILITY_VERSION = 1; 749 | DYLIB_CURRENT_VERSION = 1; 750 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 751 | FRAMEWORK_SEARCH_PATHS = ( 752 | "$(inherited)", 753 | "$(PROJECT_DIR)/Carthage/Build/watchOS", 754 | ); 755 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 756 | LD_RUNPATH_SEARCH_PATHS = ( 757 | "$(inherited)", 758 | "@executable_path/Frameworks", 759 | "@loader_path/Frameworks", 760 | ); 761 | PRODUCT_BUNDLE_IDENTIFIER = "reswift.github.io..ReSwift-Thunk"; 762 | SDKROOT = watchos; 763 | SKIP_INSTALL = YES; 764 | SUPPORTED_PLATFORMS = "watchsimulator watchos"; 765 | SWIFT_VERSION = 5.0; 766 | TARGETED_DEVICE_FAMILY = 4; 767 | }; 768 | name = Release; 769 | }; 770 | 5036627324A5DC32003C65ED /* Debug */ = { 771 | isa = XCBuildConfiguration; 772 | buildSettings = { 773 | CODE_SIGN_STYLE = Manual; 774 | DEFINES_MODULE = YES; 775 | DEVELOPMENT_TEAM = ""; 776 | DYLIB_COMPATIBILITY_VERSION = 1; 777 | DYLIB_CURRENT_VERSION = 1; 778 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 779 | FRAMEWORK_SEARCH_PATHS = ( 780 | "$(inherited)", 781 | "$(PROJECT_DIR)/Carthage/Build/tvOS", 782 | ); 783 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 784 | LD_RUNPATH_SEARCH_PATHS = ( 785 | "$(inherited)", 786 | "@executable_path/Frameworks", 787 | "@loader_path/Frameworks", 788 | ); 789 | PRODUCT_BUNDLE_IDENTIFIER = "reswift.github.io..ReSwift-Thunk"; 790 | PROVISIONING_PROFILE_SPECIFIER = ""; 791 | SDKROOT = appletvos; 792 | SKIP_INSTALL = YES; 793 | SUPPORTED_PLATFORMS = "appletvsimulator appletvos"; 794 | SWIFT_VERSION = 5.0; 795 | TARGETED_DEVICE_FAMILY = 3; 796 | }; 797 | name = Debug; 798 | }; 799 | 5036627424A5DC32003C65ED /* Release */ = { 800 | isa = XCBuildConfiguration; 801 | buildSettings = { 802 | CODE_SIGN_STYLE = Manual; 803 | DEFINES_MODULE = YES; 804 | DEVELOPMENT_TEAM = ""; 805 | DYLIB_COMPATIBILITY_VERSION = 1; 806 | DYLIB_CURRENT_VERSION = 1; 807 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 808 | FRAMEWORK_SEARCH_PATHS = ( 809 | "$(inherited)", 810 | "$(PROJECT_DIR)/Carthage/Build/tvOS", 811 | ); 812 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 813 | LD_RUNPATH_SEARCH_PATHS = ( 814 | "$(inherited)", 815 | "@executable_path/Frameworks", 816 | "@loader_path/Frameworks", 817 | ); 818 | PRODUCT_BUNDLE_IDENTIFIER = "reswift.github.io..ReSwift-Thunk"; 819 | PROVISIONING_PROFILE_SPECIFIER = ""; 820 | SDKROOT = appletvos; 821 | SKIP_INSTALL = YES; 822 | SUPPORTED_PLATFORMS = "appletvsimulator appletvos"; 823 | SWIFT_VERSION = 5.0; 824 | TARGETED_DEVICE_FAMILY = 3; 825 | }; 826 | name = Release; 827 | }; 828 | 5036627624A5DC32003C65ED /* Debug */ = { 829 | isa = XCBuildConfiguration; 830 | buildSettings = { 831 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 832 | CODE_SIGN_IDENTITY = "iPhone Developer"; 833 | CODE_SIGN_STYLE = Manual; 834 | DEVELOPMENT_TEAM = ""; 835 | INFOPLIST_FILE = "ReSwift-ThunkTests/Info.plist"; 836 | LD_RUNPATH_SEARCH_PATHS = ( 837 | "$(inherited)", 838 | "@executable_path/Frameworks", 839 | "@loader_path/Frameworks", 840 | "$(FRAMEWORK_SEARCH_PATHS)", 841 | ); 842 | PRODUCT_BUNDLE_IDENTIFIER = "reswift.github.io..ReSwift-Thunk-tvOSTests"; 843 | PRODUCT_NAME = "$(TARGET_NAME)"; 844 | PROVISIONING_PROFILE_SPECIFIER = ""; 845 | SDKROOT = appletvos; 846 | SWIFT_VERSION = 5.0; 847 | TARGETED_DEVICE_FAMILY = 3; 848 | }; 849 | name = Debug; 850 | }; 851 | 5036627724A5DC32003C65ED /* Release */ = { 852 | isa = XCBuildConfiguration; 853 | buildSettings = { 854 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 855 | CODE_SIGN_IDENTITY = "iPhone Developer"; 856 | CODE_SIGN_STYLE = Manual; 857 | DEVELOPMENT_TEAM = ""; 858 | INFOPLIST_FILE = "ReSwift-ThunkTests/Info.plist"; 859 | LD_RUNPATH_SEARCH_PATHS = ( 860 | "$(inherited)", 861 | "@executable_path/Frameworks", 862 | "@loader_path/Frameworks", 863 | "$(FRAMEWORK_SEARCH_PATHS)", 864 | ); 865 | PRODUCT_BUNDLE_IDENTIFIER = "reswift.github.io..ReSwift-Thunk-tvOSTests"; 866 | PRODUCT_NAME = "$(TARGET_NAME)"; 867 | PROVISIONING_PROFILE_SPECIFIER = ""; 868 | SDKROOT = appletvos; 869 | SWIFT_VERSION = 5.0; 870 | TARGETED_DEVICE_FAMILY = 3; 871 | }; 872 | name = Release; 873 | }; 874 | 65A3D6E7218B89A60075CB92 /* Debug */ = { 875 | isa = XCBuildConfiguration; 876 | buildSettings = { 877 | ALWAYS_SEARCH_USER_PATHS = NO; 878 | CLANG_ANALYZER_NONNULL = YES; 879 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 880 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 881 | CLANG_CXX_LIBRARY = "libc++"; 882 | CLANG_ENABLE_MODULES = YES; 883 | CLANG_ENABLE_OBJC_ARC = YES; 884 | CLANG_ENABLE_OBJC_WEAK = YES; 885 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 886 | CLANG_WARN_BOOL_CONVERSION = YES; 887 | CLANG_WARN_COMMA = YES; 888 | CLANG_WARN_CONSTANT_CONVERSION = YES; 889 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 890 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 891 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 892 | CLANG_WARN_EMPTY_BODY = YES; 893 | CLANG_WARN_ENUM_CONVERSION = YES; 894 | CLANG_WARN_INFINITE_RECURSION = YES; 895 | CLANG_WARN_INT_CONVERSION = YES; 896 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 897 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 898 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 899 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 900 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 901 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 902 | CLANG_WARN_STRICT_PROTOTYPES = YES; 903 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 904 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 905 | CLANG_WARN_UNREACHABLE_CODE = YES; 906 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 907 | COPY_PHASE_STRIP = NO; 908 | CURRENT_PROJECT_VERSION = 1; 909 | DEBUG_INFORMATION_FORMAT = dwarf; 910 | ENABLE_STRICT_OBJC_MSGSEND = YES; 911 | ENABLE_TESTABILITY = YES; 912 | "FRAMEWORK_SEARCH_PATHS[sdk=appletvos*]" = "$(SRCROOT)/Carthage/Build/tvOS"; 913 | "FRAMEWORK_SEARCH_PATHS[sdk=appletvsimulator*]" = "$(SRCROOT)/Carthage/Build/tvOS"; 914 | "FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]" = "$(SRCROOT)/Carthage/Build/iOS"; 915 | "FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]" = "$(SRCROOT)/Carthage/Build/iOS"; 916 | "FRAMEWORK_SEARCH_PATHS[sdk=macosx*]" = "$(SRCROOT)/Carthage/Build/Mac"; 917 | "FRAMEWORK_SEARCH_PATHS[sdk=watchos*]" = "$(SRCROOT)/Carthage/Build/watchOS"; 918 | "FRAMEWORK_SEARCH_PATHS[sdk=watchsimulator*]" = "$(SRCROOT)/Carthage/Build/watchOS"; 919 | GCC_C_LANGUAGE_STANDARD = gnu11; 920 | GCC_DYNAMIC_NO_PIC = NO; 921 | GCC_NO_COMMON_BLOCKS = YES; 922 | GCC_OPTIMIZATION_LEVEL = 0; 923 | GCC_PREPROCESSOR_DEFINITIONS = ( 924 | "DEBUG=1", 925 | "$(inherited)", 926 | ); 927 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 928 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 929 | GCC_WARN_UNDECLARED_SELECTOR = YES; 930 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 931 | GCC_WARN_UNUSED_FUNCTION = YES; 932 | GCC_WARN_UNUSED_VARIABLE = YES; 933 | INFOPLIST_FILE = "ReSwift-Thunk/Info.plist"; 934 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 935 | MACOSX_DEPLOYMENT_TARGET = 10.10; 936 | MARKETING_VERSION = 2.0.1; 937 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 938 | MTL_FAST_MATH = YES; 939 | ONLY_ACTIVE_ARCH = YES; 940 | PRODUCT_NAME = ReSwiftThunk; 941 | RESOURCES_TARGETED_DEVICE_FAMILY = ""; 942 | SUPPORTED_PLATFORMS = "iphonesimulator iphoneos watchsimulator watchos appletvsimulator appletvos macosx"; 943 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 944 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 945 | TARGETED_DEVICE_FAMILY = "1,2,3,4"; 946 | TVOS_DEPLOYMENT_TARGET = 9.0; 947 | VERSIONING_SYSTEM = "apple-generic"; 948 | VERSION_INFO_PREFIX = ""; 949 | WATCHOS_DEPLOYMENT_TARGET = 2.0; 950 | }; 951 | name = Debug; 952 | }; 953 | 65A3D6E8218B89A60075CB92 /* Release */ = { 954 | isa = XCBuildConfiguration; 955 | buildSettings = { 956 | ALWAYS_SEARCH_USER_PATHS = NO; 957 | CLANG_ANALYZER_NONNULL = YES; 958 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 959 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 960 | CLANG_CXX_LIBRARY = "libc++"; 961 | CLANG_ENABLE_MODULES = YES; 962 | CLANG_ENABLE_OBJC_ARC = YES; 963 | CLANG_ENABLE_OBJC_WEAK = YES; 964 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 965 | CLANG_WARN_BOOL_CONVERSION = YES; 966 | CLANG_WARN_COMMA = YES; 967 | CLANG_WARN_CONSTANT_CONVERSION = YES; 968 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 969 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 970 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 971 | CLANG_WARN_EMPTY_BODY = YES; 972 | CLANG_WARN_ENUM_CONVERSION = YES; 973 | CLANG_WARN_INFINITE_RECURSION = YES; 974 | CLANG_WARN_INT_CONVERSION = YES; 975 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 976 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 977 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 978 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 979 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 980 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 981 | CLANG_WARN_STRICT_PROTOTYPES = YES; 982 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 983 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 984 | CLANG_WARN_UNREACHABLE_CODE = YES; 985 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 986 | COPY_PHASE_STRIP = NO; 987 | CURRENT_PROJECT_VERSION = 1; 988 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 989 | ENABLE_NS_ASSERTIONS = NO; 990 | ENABLE_STRICT_OBJC_MSGSEND = YES; 991 | "FRAMEWORK_SEARCH_PATHS[sdk=appletvos*]" = "$(SRCROOT)/Carthage/Build/tvOS"; 992 | "FRAMEWORK_SEARCH_PATHS[sdk=appletvsimulator*]" = "$(SRCROOT)/Carthage/Build/tvOS"; 993 | "FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]" = "$(SRCROOT)/Carthage/Build/iOS"; 994 | "FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]" = "$(SRCROOT)/Carthage/Build/iOS"; 995 | "FRAMEWORK_SEARCH_PATHS[sdk=macosx*]" = "$(SRCROOT)/Carthage/Build/Mac"; 996 | "FRAMEWORK_SEARCH_PATHS[sdk=watchos*]" = "$(SRCROOT)/Carthage/Build/watchOS"; 997 | "FRAMEWORK_SEARCH_PATHS[sdk=watchsimulator*]" = "$(SRCROOT)/Carthage/Build/watchOS"; 998 | GCC_C_LANGUAGE_STANDARD = gnu11; 999 | GCC_NO_COMMON_BLOCKS = YES; 1000 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 1001 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 1002 | GCC_WARN_UNDECLARED_SELECTOR = YES; 1003 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 1004 | GCC_WARN_UNUSED_FUNCTION = YES; 1005 | GCC_WARN_UNUSED_VARIABLE = YES; 1006 | INFOPLIST_FILE = "ReSwift-Thunk/Info.plist"; 1007 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 1008 | MACOSX_DEPLOYMENT_TARGET = 10.10; 1009 | MARKETING_VERSION = 2.0.1; 1010 | MTL_ENABLE_DEBUG_INFO = NO; 1011 | MTL_FAST_MATH = YES; 1012 | PRODUCT_NAME = ReSwiftThunk; 1013 | RESOURCES_TARGETED_DEVICE_FAMILY = ""; 1014 | SUPPORTED_PLATFORMS = "iphonesimulator iphoneos watchsimulator watchos appletvsimulator appletvos macosx"; 1015 | SWIFT_COMPILATION_MODE = wholemodule; 1016 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 1017 | TARGETED_DEVICE_FAMILY = "1,2,3,4"; 1018 | TVOS_DEPLOYMENT_TARGET = 9.0; 1019 | VALIDATE_PRODUCT = YES; 1020 | VERSIONING_SYSTEM = "apple-generic"; 1021 | VERSION_INFO_PREFIX = ""; 1022 | WATCHOS_DEPLOYMENT_TARGET = 2.0; 1023 | }; 1024 | name = Release; 1025 | }; 1026 | 65A3D6ED218B89A60075CB92 /* Debug */ = { 1027 | isa = XCBuildConfiguration; 1028 | buildSettings = { 1029 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 1030 | INFOPLIST_FILE = "ReSwift-ThunkTests/Info.plist"; 1031 | LD_RUNPATH_SEARCH_PATHS = ( 1032 | "$(inherited)", 1033 | "@executable_path/Frameworks", 1034 | "@loader_path/Frameworks", 1035 | "$(FRAMEWORK_SEARCH_PATHS)", 1036 | ); 1037 | "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = ( 1038 | "@executable_path/../Frameworks", 1039 | "@loader_path/../Frameworks", 1040 | "$(FRAMEWORK_SEARCH_PATHS)", 1041 | ); 1042 | PRODUCT_BUNDLE_IDENTIFIER = "reswift.github.io.ReSwift-ThunkTests"; 1043 | PRODUCT_NAME = "$(TARGET_NAME)"; 1044 | SDKROOT = iphoneos; 1045 | SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; 1046 | SWIFT_VERSION = 5.0; 1047 | }; 1048 | name = Debug; 1049 | }; 1050 | 65A3D6EE218B89A60075CB92 /* Release */ = { 1051 | isa = XCBuildConfiguration; 1052 | buildSettings = { 1053 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 1054 | INFOPLIST_FILE = "ReSwift-ThunkTests/Info.plist"; 1055 | LD_RUNPATH_SEARCH_PATHS = ( 1056 | "$(inherited)", 1057 | "@executable_path/Frameworks", 1058 | "@loader_path/Frameworks", 1059 | "$(FRAMEWORK_SEARCH_PATHS)", 1060 | ); 1061 | "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = ( 1062 | "@executable_path/../Frameworks", 1063 | "@loader_path/../Frameworks", 1064 | "$(FRAMEWORK_SEARCH_PATHS)", 1065 | ); 1066 | PRODUCT_BUNDLE_IDENTIFIER = "reswift.github.io.ReSwift-ThunkTests"; 1067 | PRODUCT_NAME = "$(TARGET_NAME)"; 1068 | SDKROOT = iphoneos; 1069 | SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; 1070 | SWIFT_VERSION = 5.0; 1071 | }; 1072 | name = Release; 1073 | }; 1074 | /* End XCBuildConfiguration section */ 1075 | 1076 | /* Begin XCConfigurationList section */ 1077 | 5036622124A5D7DF003C65ED /* Build configuration list for PBXNativeTarget "ReSwift-Thunk iOS" */ = { 1078 | isa = XCConfigurationList; 1079 | buildConfigurations = ( 1080 | 5036622224A5D7DF003C65ED /* Debug */, 1081 | 5036622324A5D7DF003C65ED /* Release */, 1082 | ); 1083 | defaultConfigurationIsVisible = 0; 1084 | defaultConfigurationName = Release; 1085 | }; 1086 | 5036623724A5D8FB003C65ED /* Build configuration list for PBXNativeTarget "ReSwift-Thunk macOS" */ = { 1087 | isa = XCConfigurationList; 1088 | buildConfigurations = ( 1089 | 5036623824A5D8FB003C65ED /* Debug */, 1090 | 5036623924A5D8FB003C65ED /* Release */, 1091 | ); 1092 | defaultConfigurationIsVisible = 0; 1093 | defaultConfigurationName = Release; 1094 | }; 1095 | 5036624724A5DA85003C65ED /* Build configuration list for PBXNativeTarget "ReSwift-Thunk-Tests macOS" */ = { 1096 | isa = XCConfigurationList; 1097 | buildConfigurations = ( 1098 | 5036624824A5DA85003C65ED /* Debug */, 1099 | 5036624924A5DA85003C65ED /* Release */, 1100 | ); 1101 | defaultConfigurationIsVisible = 0; 1102 | defaultConfigurationName = Release; 1103 | }; 1104 | 5036625424A5DB68003C65ED /* Build configuration list for PBXNativeTarget "ReSwift-Thunk watchOS" */ = { 1105 | isa = XCConfigurationList; 1106 | buildConfigurations = ( 1107 | 5036625524A5DB68003C65ED /* Debug */, 1108 | 5036625624A5DB68003C65ED /* Release */, 1109 | ); 1110 | defaultConfigurationIsVisible = 0; 1111 | defaultConfigurationName = Release; 1112 | }; 1113 | 5036627224A5DC32003C65ED /* Build configuration list for PBXNativeTarget "ReSwift-Thunk tvOS" */ = { 1114 | isa = XCConfigurationList; 1115 | buildConfigurations = ( 1116 | 5036627324A5DC32003C65ED /* Debug */, 1117 | 5036627424A5DC32003C65ED /* Release */, 1118 | ); 1119 | defaultConfigurationIsVisible = 0; 1120 | defaultConfigurationName = Release; 1121 | }; 1122 | 5036627524A5DC32003C65ED /* Build configuration list for PBXNativeTarget "ReSwift-Thunk-Tests tvOS" */ = { 1123 | isa = XCConfigurationList; 1124 | buildConfigurations = ( 1125 | 5036627624A5DC32003C65ED /* Debug */, 1126 | 5036627724A5DC32003C65ED /* Release */, 1127 | ); 1128 | defaultConfigurationIsVisible = 0; 1129 | defaultConfigurationName = Release; 1130 | }; 1131 | 65A3D6CF218B89A60075CB92 /* Build configuration list for PBXProject "ReSwift-Thunk" */ = { 1132 | isa = XCConfigurationList; 1133 | buildConfigurations = ( 1134 | 65A3D6E7218B89A60075CB92 /* Debug */, 1135 | 65A3D6E8218B89A60075CB92 /* Release */, 1136 | ); 1137 | defaultConfigurationIsVisible = 0; 1138 | defaultConfigurationName = Release; 1139 | }; 1140 | 65A3D6EC218B89A60075CB92 /* Build configuration list for PBXNativeTarget "ReSwift-Thunk-Tests iOS" */ = { 1141 | isa = XCConfigurationList; 1142 | buildConfigurations = ( 1143 | 65A3D6ED218B89A60075CB92 /* Debug */, 1144 | 65A3D6EE218B89A60075CB92 /* Release */, 1145 | ); 1146 | defaultConfigurationIsVisible = 0; 1147 | defaultConfigurationName = Release; 1148 | }; 1149 | /* End XCConfigurationList section */ 1150 | }; 1151 | rootObject = 65A3D6CC218B89A60075CB92 /* Project object */; 1152 | } 1153 | -------------------------------------------------------------------------------- /ReSwift-Thunk.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ReSwift-Thunk.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ReSwift-Thunk.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /ReSwift-Thunk.xcodeproj/xcshareddata/xcschemes/ReSwift-Thunk iOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 37 | 38 | 39 | 40 | 42 | 48 | 49 | 50 | 51 | 52 | 62 | 63 | 69 | 70 | 71 | 72 | 78 | 79 | 85 | 86 | 87 | 88 | 90 | 91 | 94 | 95 | 96 | -------------------------------------------------------------------------------- /ReSwift-Thunk.xcodeproj/xcshareddata/xcschemes/ReSwift-Thunk macOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 55 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 74 | 80 | 81 | 82 | 83 | 85 | 86 | 89 | 90 | 91 | -------------------------------------------------------------------------------- /ReSwift-Thunk.xcodeproj/xcshareddata/xcschemes/ReSwift-Thunk tvOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 53 | 54 | 60 | 61 | 67 | 68 | 69 | 70 | 72 | 73 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /ReSwift-Thunk.xcodeproj/xcshareddata/xcschemes/ReSwift-Thunk watchOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 50 | 51 | 57 | 58 | 59 | 60 | 62 | 63 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /ReSwift-Thunk/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 | $(MARKETING_VERSION) 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /ReSwift-Thunk/ReSwift_Thunk.h: -------------------------------------------------------------------------------- 1 | // 2 | // ReSwift_Thunk.h 3 | // ReSwift-Thunk 4 | // 5 | // Created by Daniel Martín Prieto on 01/11/2018. 6 | // Copyright © 2018 ReSwift. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for ReSwift_Thunk. 12 | FOUNDATION_EXPORT double ReSwift_ThunkVersionNumber; 13 | 14 | //! Project version string for ReSwift_Thunk. 15 | FOUNDATION_EXPORT const unsigned char ReSwift_ThunkVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /ReSwift-Thunk/Thunk.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Thunk.swift 3 | // ReSwift-Thunk 4 | // 5 | // Created by Daniel Martín Prieto on 01/11/2018. 6 | // Copyright © 2018 ReSwift. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import ReSwift 11 | 12 | public struct Thunk: Action { 13 | let body: (_ dispatch: @escaping DispatchFunction, _ getState: @escaping () -> State?) -> Void 14 | public init(body: @escaping ( 15 | _ dispatch: @escaping DispatchFunction, 16 | _ getState: @escaping () -> State?) -> Void) { 17 | self.body = body 18 | } 19 | } 20 | 21 | @available(*, deprecated, renamed: "Thunk") 22 | typealias ThunkAction = Thunk 23 | -------------------------------------------------------------------------------- /ReSwift-Thunk/createThunkMiddleware.swift: -------------------------------------------------------------------------------- 1 | // 2 | // createThunkMiddleware.swift 3 | // ReSwift-Thunk 4 | // 5 | // Created by Daniel Martín Prieto on 02/11/2018. 6 | // Copyright © 2018 ReSwift. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import ReSwift 11 | 12 | public func createThunkMiddleware() -> Middleware { 13 | return { dispatch, getState in 14 | return { next in 15 | return { action in 16 | switch action { 17 | case let thunk as Thunk: 18 | thunk.body(dispatch, getState) 19 | default: 20 | next(action) 21 | } 22 | } 23 | } 24 | } 25 | } 26 | 27 | // swiftlint:disable identifier_name 28 | @available(*, deprecated, renamed: "createThunkMiddleware") 29 | func ThunkMiddleware() -> Middleware { 30 | return createThunkMiddleware() 31 | } 32 | // swiftlint:enable identifier_name 33 | 34 | @available(*, deprecated, renamed: "createThunkMiddleware") 35 | func createThunksMiddleware() -> Middleware { 36 | return createThunkMiddleware() 37 | } 38 | -------------------------------------------------------------------------------- /ReSwift-ThunkTests/ExpectThunk.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ExpectThunk.swift 3 | // ReSwift-Thunk-Tests 4 | // 5 | // Created by Jason Prasad on 2/13/19. 6 | // Copyright © 2019 ReSwift. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | import ReSwift 11 | import ReSwiftThunk 12 | 13 | private struct ExpectThunkAssertion { 14 | fileprivate let associated: T 15 | private let description: String 16 | private let file: StaticString 17 | private let line: UInt 18 | 19 | init(description: String, file: StaticString, line: UInt, associated: T) { 20 | self.associated = associated 21 | self.description = description 22 | self.file = file 23 | self.line = line 24 | } 25 | 26 | fileprivate func failed() { 27 | XCTFail(description, file: file, line: line) 28 | } 29 | } 30 | 31 | public class ExpectThunk { 32 | private var dispatch: DispatchFunction { 33 | return { action in 34 | self.dispatched.append(action) 35 | guard self.dispatchAssertions.isEmpty == false else { 36 | return 37 | } 38 | self.dispatchAssertions.remove(at: 0).associated(action) 39 | } 40 | } 41 | private var dispatchAssertions = [ExpectThunkAssertion]() 42 | public var dispatched = [Action]() 43 | private var getState: () -> State? { 44 | return { 45 | return self.getStateAssertions.isEmpty ? nil : self.getStateAssertions.removeFirst().associated 46 | } 47 | } 48 | private var getStateAssertions = [ExpectThunkAssertion]() 49 | private let thunk: Thunk 50 | 51 | public init(_ thunk: Thunk) { 52 | self.thunk = thunk 53 | } 54 | } 55 | 56 | extension ExpectThunk { 57 | public func dispatches(_ expected: A, 58 | file: StaticString = #file, 59 | line: UInt = #line) -> Self { 60 | dispatchAssertions.append( 61 | ExpectThunkAssertion( 62 | description: "Unfulfilled dispatches: \(expected)", 63 | file: file, 64 | line: line 65 | ) { received in 66 | XCTAssert( 67 | received as? A == expected, 68 | "Dispatched action does not equal expected: \(received) \(expected)", 69 | file: file, 70 | line: line 71 | ) 72 | } 73 | ) 74 | return self 75 | } 76 | 77 | public func dispatches(file: StaticString = #file, 78 | line: UInt = #line, 79 | dispatch assertion: @escaping DispatchFunction) -> Self { 80 | dispatchAssertions.append( 81 | ExpectThunkAssertion( 82 | description: "Unfulfilled dispatches: dispatch assertion", 83 | file: file, 84 | line: line, 85 | associated: assertion 86 | ) 87 | ) 88 | return self 89 | } 90 | } 91 | 92 | extension ExpectThunk { 93 | public func getsState(_ state: State, 94 | file: StaticString = #file, 95 | line: UInt = #line) -> Self { 96 | getStateAssertions.append( 97 | ExpectThunkAssertion( 98 | description: "Unfulfilled getsState: \(state)", 99 | file: file, 100 | line: line, 101 | associated: state 102 | ) 103 | ) 104 | return self 105 | } 106 | } 107 | 108 | extension ExpectThunk { 109 | @discardableResult 110 | public func run(file: StaticString = #file, line: UInt = #line) -> Self { 111 | createThunkMiddleware()(dispatch, getState)({ _ in })(thunk) 112 | failLeftovers() 113 | return self 114 | } 115 | 116 | @discardableResult 117 | public func wait(timeout seconds: TimeInterval = 1, 118 | file: StaticString = #file, 119 | line: UInt = #line, 120 | description: String = "\(ExpectThunk.self)") -> Self { 121 | let expectation = XCTestExpectation(description: description) 122 | defer { 123 | if XCTWaiter().wait(for: [expectation], timeout: seconds) != .completed { 124 | XCTFail("Asynchronous wait failed: unfulfilled dispatches", file: file, line: line) 125 | } 126 | failLeftovers() 127 | } 128 | let dispatch: DispatchFunction = { 129 | self.dispatch($0) 130 | if self.dispatchAssertions.isEmpty == true { 131 | expectation.fulfill() 132 | } 133 | } 134 | createThunkMiddleware()(dispatch, getState)({ _ in })(thunk) 135 | return self 136 | } 137 | 138 | private func failLeftovers() { 139 | dispatchAssertions.forEach { $0.failed() } 140 | getStateAssertions.forEach { $0.failed() } 141 | } 142 | } 143 | -------------------------------------------------------------------------------- /ReSwift-ThunkTests/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 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /ReSwift-ThunkTests/Tests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ReSwift_ThunkTests.swift 3 | // ReSwift-ThunkTests 4 | // 5 | // Created by Daniel Martín Prieto on 01/11/2018. 6 | // Copyright © 2018 ReSwift. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import ReSwiftThunk 11 | 12 | import ReSwift 13 | 14 | private struct FakeState {} 15 | private struct FakeAction: Action {} 16 | private struct AnotherFakeAction: Action, Equatable {} 17 | private func fakeReducer(action: Action, state: FakeState?) -> FakeState { 18 | return state ?? FakeState() 19 | } 20 | 21 | class Tests: XCTestCase { 22 | 23 | func testAction() { 24 | let middleware: Middleware = createThunkMiddleware() 25 | let dispatch: DispatchFunction = { _ in } 26 | let getState: () -> FakeState? = { nil } 27 | var nextCalled = false 28 | let next: DispatchFunction = { _ in nextCalled = true } 29 | let action = FakeAction() 30 | middleware(dispatch, getState)(next)(action) 31 | XCTAssert(nextCalled) 32 | } 33 | 34 | func testThunk() { 35 | let middleware: Middleware = createThunkMiddleware() 36 | let dispatch: DispatchFunction = { _ in } 37 | let getState: () -> FakeState? = { nil } 38 | var nextCalled = false 39 | let next: DispatchFunction = { _ in nextCalled = true } 40 | var thunkBodyCalled = false 41 | let thunk = Thunk { _, _ in 42 | thunkBodyCalled = true 43 | } 44 | middleware(dispatch, getState)(next)(thunk) 45 | XCTAssertFalse(nextCalled) 46 | XCTAssert(thunkBodyCalled) 47 | } 48 | 49 | func testMiddlewareInsertion() { 50 | let store = Store( 51 | reducer: fakeReducer, 52 | state: nil, 53 | middleware: [createThunkMiddleware()] 54 | ) 55 | var thunkBodyCalled = false 56 | let thunk = Thunk { _, _ in 57 | thunkBodyCalled = true 58 | } 59 | store.dispatch(thunk) 60 | XCTAssertTrue(thunkBodyCalled) 61 | } 62 | 63 | func testExpectThunkRuns() { 64 | let thunk = Thunk { dispatch, getState in 65 | dispatch(FakeAction()) 66 | XCTAssertNotNil(getState()) 67 | dispatch(FakeAction()) 68 | } 69 | let expectThunk = ExpectThunk(thunk) 70 | .dispatches { 71 | XCTAssert($0 is FakeAction) 72 | } 73 | .getsState(FakeState()) 74 | .dispatches { 75 | XCTAssert($0 is FakeAction) 76 | } 77 | .run() 78 | XCTAssertEqual(expectThunk.dispatched.count, 2) 79 | } 80 | 81 | func testExpectThunkWaits() { 82 | let thunk = Thunk { dispatch, getState in 83 | dispatch(FakeAction()) 84 | XCTAssertNotNil(getState()) 85 | DispatchQueue.global().asyncAfter(deadline: DispatchTime.now() + 0.5) { 86 | dispatch(AnotherFakeAction()) 87 | XCTAssertNotNil(getState()) 88 | } 89 | dispatch(FakeAction()) 90 | } 91 | let expectThunk = ExpectThunk(thunk) 92 | .dispatches { 93 | XCTAssert($0 is FakeAction) 94 | } 95 | .getsState(FakeState()) 96 | .dispatches { 97 | XCTAssert($0 is FakeAction) 98 | } 99 | .dispatches(AnotherFakeAction()) 100 | .getsState(FakeState()) 101 | .wait() 102 | XCTAssertEqual(expectThunk.dispatched.count, 3) 103 | } 104 | } 105 | -------------------------------------------------------------------------------- /ReSwiftThunk.podspec: -------------------------------------------------------------------------------- 1 | 2 | Pod::Spec.new do |spec| 3 | spec.name = "ReSwiftThunk" 4 | spec.version = "2.1.0" 5 | spec.summary = "Thunk middleware for ReSwift." 6 | spec.description = <<-DESC 7 | ReSwift-Thunk allows you to write action creators that return a function instead of an action. Instead of dispatching an `Action` directly, you can dispatch a `Thunk` that creates an action at a later time, for example after a network request finishes. 8 | DESC 9 | 10 | spec.homepage = "https://github.com/ReSwift/ReSwift-Thunk" 11 | spec.license = { :type => "MIT", :file => "LICENSE.md" } 12 | spec.authors = "ReSwift" 13 | 14 | spec.ios.deployment_target = "9.0" 15 | spec.osx.deployment_target = "10.10" 16 | spec.watchos.deployment_target = "2.0" 17 | spec.tvos.deployment_target = "9.0" 18 | 19 | spec.module_name = "ReSwiftThunk" 20 | spec.swift_versions = ["5.2", "5.0", "4.2"] 21 | spec.source = { 22 | :git => "https://github.com/ReSwift/ReSwift-Thunk.git", 23 | :tag => spec.version.to_s } 24 | 25 | spec.subspec "Core" do |sp| 26 | sp.source_files = "ReSwift-Thunk" 27 | end 28 | 29 | spec.subspec "ExpectThunk" do |sp| 30 | sp.ios.deployment_target = "9.0" 31 | sp.osx.deployment_target = "10.10" 32 | sp.tvos.deployment_target = "9.0" 33 | sp.dependency "ReSwiftThunk/Core" 34 | sp.pod_target_xcconfig = { "ENABLE_BITCODE" => "NO" } 35 | sp.framework = "XCTest" 36 | sp.source_files = "ReSwift-ThunkTests/ExpectThunk.swift" 37 | end 38 | 39 | spec.default_subspec = "Core" 40 | 41 | spec.dependency "ReSwift", "~> 6.1" 42 | end 43 | -------------------------------------------------------------------------------- /carthage.sh: -------------------------------------------------------------------------------- 1 | # carthage.sh 2 | # Usage example: ./carthage.sh build --platform iOS 3 | 4 | set -euo pipefail 5 | 6 | xcconfig=$(mktemp /tmp/static.xcconfig.XXXXXX) 7 | trap 'rm -f "$xcconfig"' INT TERM HUP EXIT 8 | 9 | # For Xcode 12 make sure EXCLUDED_ARCHS is set to arm architectures otherwise 10 | # the build will fail on lipo due to duplicate architectures. 11 | 12 | CURRENT_XCODE_VERSION=$(xcodebuild -version | grep "Build version" | cut -d' ' -f3) 13 | 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 14 | 15 | 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 16 | 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 17 | 18 | export XCODE_XCCONFIG_FILE="$xcconfig" 19 | carthage "$@" 20 | --------------------------------------------------------------------------------