diff --git a/.travis.yml b/.travis.yml index 85e315aaed..0acd878ec0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,7 +11,7 @@ script: xcode_workspace: ReactiveCocoa.xcworkspace matrix: include: - - xcode_scheme: ReactiveCocoa-Mac + - xcode_scheme: ReactiveCocoa-macOS env: - XCODE_SDK=macosx - XCODE_ACTION="build test" @@ -32,12 +32,51 @@ matrix: - XCODE_SDK=watchsimulator - XCODE_ACTION=build - XCODE_DESTINATION="platform=watchOS Simulator,name=Apple Watch - 38mm" + - xcode_scheme: ReactiveSwift-macOS + env: + - XCODE_SDK=macosx + - XCODE_ACTION="build test" + - XCODE_DESTINATION="arch=x86_64" + - XCODE_PLAYGROUND_TARGET="x86_64-apple-macosx10.10" + - xcode_scheme: ReactiveSwift-iOS + env: + - XCODE_SDK=iphonesimulator + - XCODE_ACTION="build-for-testing test-without-building" + - XCODE_DESTINATION="platform=iOS Simulator,name=iPhone 6s" + - xcode_scheme: ReactiveSwift-tvOS + env: + - XCODE_SDK=appletvsimulator + - XCODE_ACTION="build-for-testing test-without-building" + - XCODE_DESTINATION="platform=tvOS Simulator,name=Apple TV 1080p" + - xcode_scheme: ReactiveSwift-watchOS + env: + - XCODE_SDK=watchsimulator + - XCODE_ACTION=build + - XCODE_DESTINATION="platform=watchOS Simulator,name=Apple Watch - 38mm" + - script: + - brew update + - brew outdated carthage || brew upgrade carthage + - carthage build --no-skip-current --platform mac + env: + - JOB=CARTHAGE-macOS + - script: + - brew update + - brew outdated carthage || brew upgrade carthage + - carthage build --no-skip-current --platform iOS + env: + - JOB=CARTHAGE-iOS + - script: + - brew update + - brew outdated carthage || brew upgrade carthage + - carthage build --no-skip-current --platform tvOS + env: + - JOB=CARTHAGE-tvOS - script: - brew update - brew outdated carthage || brew upgrade carthage - - carthage build --no-skip-current + - carthage build --no-skip-current --platform watchOS env: - - JOB=CARTHAGE + - JOB=CARTHAGE-watchOS - os: osx language: generic script: swift build diff --git a/Carthage/Checkouts/Result b/Carthage/Checkouts/Result index cc1699dbd8..d78cac3865 160000 --- a/Carthage/Checkouts/Result +++ b/Carthage/Checkouts/Result @@ -1 +1 @@ -Subproject commit cc1699dbd812c71bee7c44c8cbd75497713bc279 +Subproject commit d78cac38657de99d85f8f1770b290d039721ef27 diff --git a/Package.swift b/Package.swift index 814e59be46..4b15638cbe 100644 --- a/Package.swift +++ b/Package.swift @@ -1,24 +1,11 @@ import PackageDescription -let excludes: [String] -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) - excludes = [ - "Sources/Deprecations+Removals.swift", - "Sources/ObjectiveCBridging.swift" - ] -#else - excludes = [ - "Sources/Deprecations+Removals.swift", - "Sources/DynamicProperty.swift", - "Sources/NSObject+KeyValueObserving.swift", - "Sources/ObjectiveCBridging.swift" - ] -#endif - let package = Package( - name: "ReactiveCocoa", + name: "ReactiveSwift", dependencies: [ - .Package(url: "https://github.com/antitypical/Result.git", "3.0.0-alpha.2") + .Package(url: "https://github.com/antitypical/Result.git", "3.0.0-alpha.3") ], - exclude: excludes + exclude: [ + "Sources/Deprecations+Removals.swift", + ] ) diff --git a/README-ReactiveSwift.md b/README-ReactiveSwift.md new file mode 100644 index 0000000000..c4111f8dd6 --- /dev/null +++ b/README-ReactiveSwift.md @@ -0,0 +1,355 @@ +# ReactiveSwift + +[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) [![GitHub release](https://img.shields.io/github/release/ReactiveCocoa/ReactiveCocoa.svg)](https://github.com/ReactiveCocoa/ReactiveCocoa/releases) ![Swift 3.0.x](https://img.shields.io/badge/Swift-3.0.x-orange.svg) ![platforms](https://img.shields.io/badge/platforms-iOS%20%7C%20OS%20X%20%7C%20watchOS%20%7C%20tvOS%20-lightgrey.svg) + +ReactiveSwift is a Swift framework inspired by [Functional Reactive Programming](https://en.wikipedia.org/wiki/Functional_reactive_programming). It provides APIs for composing and transforming **streams of values over time**. + + 1. [Introduction](#introduction) + 1. [Example: online search](#example-online-search) + 1. [How does ReactiveSwift relate to Rx?](#how-does-reactivecocoa-relate-to-rx) + 1. [Getting started](#getting-started) + 1. [Playground](#playground) + +If you’re already familiar with functional reactive programming or what +ReactiveSwift is about, check out the [Documentation][] folder for more in-depth +information about how it all works. Then, dive straight into our [documentation +comments][Code] for learning more about individual APIs. + +If you'd like to use ReactiveSwift with Apple's Cocoa frameworks, +[ReactiveCocoa](https://github.com/ReactiveCocoa/ReactiveCocoa) provides +extensions that work with ReactiveSwift. + +If you have a question, please see if any discussions in our [GitHub +issues](https://github.com/ReactiveCocoa/ReactiveSwift/issues?q=is%3Aissue+label%3Aquestion+) or [Stack +Overflow](http://stackoverflow.com/questions/tagged/reactive-cocoa) have already +answered it. If not, please feel free to [file your +own](https://github.com/ReactiveCocoa/ReactiveSwift/issues/new)! + +#### Compatibility + +This documents ReactiveSwift 3.x which targets `Swift 3.0.x`. For `Swift 2.x` support see [ReactiveCocoa +4](https://github.com/ReactiveCocoa/ReactiveCocoa/tree/v4.0.0). + +## Introduction + +ReactiveSwift is inspired by [functional reactive +programming](https://joshaber.github.io/2013/02/11/input-and-output/). +Rather than using mutable variables which are replaced and modified in-place, +RAC offers “event streams,” represented by the [`Signal`][Signals] and +[`SignalProducer`][Signal producers] types, that send values over time. + +Event streams unify common patterns for asynchrony and event +handling, including: + + * Delegate methods + * Callback blocks + * Notifications + * Control actions and responder chain events + * [Futures and promises](https://en.wikipedia.org/wiki/Futures_and_promises) + * [Key-value observing](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html) (KVO) + +Because all of these different mechanisms can be represented in the _same_ way, +it’s easy to declaratively chain and combine them together, with less spaghetti +code and state to bridge the gap. + +For more information about the concepts in ReactiveSwift, see the [Framework +Overview][]. + +## Example: online search + +Let’s say you have a text field, and whenever the user types something into it, +you want to make a network request which searches for that query. + +#### Observing text edits + +The first step is to observe edits to the text field, using a RAC extension to +`UITextField` specifically for this purpose: + +```swift +let searchStrings = textField.rac_textSignal() + .toSignalProducer() + .map { text in text as! String } +``` + +This gives us a [signal producer][Signal producers] which sends +values of type `String`. _(The cast is [currently +necessary](https://github.com/ReactiveCocoa/ReactiveCocoa/issues/2182) to bridge +this extension method from Objective-C.)_ + +#### Making network requests + +With each string, we want to execute a network request. Luckily, RAC offers an +`NSURLSession` extension for doing exactly that: + +```swift +let searchResults = searchStrings + .flatMap(.Latest) { (query: String) -> SignalProducer<(NSData, NSURLResponse), NSError> in + let URLRequest = self.searchRequestWithEscapedQuery(query) + return NSURLSession.sharedSession().rac_dataWithRequest(URLRequest) + } + .map { (data, URLResponse) -> String in + let string = String(data: data, encoding: NSUTF8StringEncoding)! + return self.parseJSONResultsFromString(string) + } + .observeOn(UIScheduler()) +``` + +This has transformed our producer of `String`s into a producer of `Array`s +containing the search results, which will be forwarded on the main thread +(thanks to the [`UIScheduler`][Schedulers]). + +Additionally, [`flatMap(.Latest)`][flatMapLatest] here ensures that _only one search_—the +latest—is allowed to be running. If the user types another character while the +network request is still in flight, it will be cancelled before starting a new +one. Just think of how much code that would take to do by hand! + +#### Receiving the results + +This won’t actually execute yet, because producers must be _started_ in order to +receive the results (which prevents doing work when the results are never used). +That’s easy enough: + +```swift +searchResults.startWithNext { results in + print("Search results: \(results)") +} +``` + +Here, we watch for the `Next` [event][Events], which contains our results, and +just log them to the console. This could easily do something else instead, like +update a table view or a label on screen. + +#### Handling failures + +In this example so far, any network error will generate a `Failed` +[event][Events], which will terminate the event stream. Unfortunately, this +means that future queries won’t even be attempted. + +To remedy this, we need to decide what to do with failures that occur. The +quickest solution would be to log them, then ignore them: + +```swift + .flatMap(.Latest) { (query: String) -> SignalProducer<(NSData, NSURLResponse), NSError> in + let URLRequest = self.searchRequestWithEscapedQuery(query) + + return NSURLSession.sharedSession() + .rac_dataWithRequest(URLRequest) + .flatMapError { error in + print("Network error occurred: \(error)") + return SignalProducer.empty + } + } +``` + +By replacing failures with the `empty` event stream, we’re able to effectively +ignore them. + +However, it’s probably more appropriate to retry at least a couple of times +before giving up. Conveniently, there’s a [`retry`][retry] operator to do exactly that! + +Our improved `searchResults` producer might look like this: + +```swift +let searchResults = searchStrings + .flatMap(.Latest) { (query: String) -> SignalProducer<(NSData, NSURLResponse), NSError> in + let URLRequest = self.searchRequestWithEscapedQuery(query) + + return NSURLSession.sharedSession() + .rac_dataWithRequest(URLRequest) + .retry(2) + .flatMapError { error in + print("Network error occurred: \(error)") + return SignalProducer.empty + } + } + .map { (data, URLResponse) -> String in + let string = String(data: data, encoding: NSUTF8StringEncoding)! + return self.parseJSONResultsFromString(string) + } + .observeOn(UIScheduler()) +``` + +#### Throttling requests + +Now, let’s say you only want to actually perform the search periodically, +to minimize traffic. + +ReactiveCocoa has a declarative `throttle` operator that we can apply to our +search strings: + +```swift +let searchStrings = textField.rac_textSignal() + .toSignalProducer() + .map { text in text as! String } + .throttle(0.5, onScheduler: QueueScheduler.mainQueueScheduler) +``` + +This prevents values from being sent less than 0.5 seconds apart. + +To do this manually would require significant state, and end up much harder to +read! With ReactiveCocoa, we can use just one operator to incorporate _time_ into +our event stream. + +#### Debugging event streams + +Due to its nature, a stream's stack trace might have dozens of frames, which, more often than not, can make debugging a very frustrating activity. +A naive way of debugging, is by injecting side effects into the stream, like so: + +```swift +let searchString = textField.rac_textSignal() + .toSignalProducer() + .map { text in text as! String } + .throttle(0.5, onScheduler: QueueScheduler.mainQueueScheduler) + .on(event: { print ($0) }) // the side effect +``` + +This will print the stream's [events][Events], while preserving the original stream behaviour. Both [`SignalProducer`][Signal producers] +and [`Signal`][Signals] provide the `logEvents` operator, that will do this automatically for you: + +```swift +let searchString = textField.rac_textSignal() + .toSignalProducer() + .map { text in text as! String } + .throttle(0.5, onScheduler: QueueScheduler.mainQueueScheduler) + .logEvents() +``` + +For more information and advance usage, check the [Debugging Techniques](Documentation/DebuggingTechniques.md) document. + +## How does ReactiveSwift relate to Rx? + +ReactiveCocoa was originally inspired, and therefore heavily influenced, by +Microsoft’s [Reactive +Extensions](https://msdn.microsoft.com/en-us/data/gg577609.aspx) (Rx) library. There are many ports of Rx, including [RxSwift](https://github.com/ReactiveX/RxSwift), but ReactiveCocoa is _intentionally_ not a direct port. + +**Where ReactiveSwift differs from Rx**, it is usually to: + + * Create a simpler API + * Address common sources of confusion + * More closely match Cocoa conventions + +The following are some of the concrete differences, along with their rationales. + +### Naming + +In most versions of Rx, Streams over time are known as `Observable`s, which +parallels the `Enumerable` type in .NET. Additionally, most operations in Rx.NET +borrow names from [LINQ](https://msdn.microsoft.com/en-us/library/bb397926.aspx), +which uses terms reminiscent of relational databases, like `Select` and `Where`. + +**RAC is focused on matching Swift naming first and foremost**, with terms like +`map` and `filter` instead. Other naming differences are typically inspired by +significantly better alternatives from [Haskell](https://www.haskell.org) or +[Elm](http://elm-lang.org) (which is the primary source for the “signal” +terminology). + +### Signals and Signal Producers (“hot” and “cold” observables) + +One of the most confusing aspects of Rx is that of [“hot”, “cold”, and “warm” +observables](http://www.introtorx.com/content/v1.0.10621.0/14_HotAndColdObservables.html) (event streams). + +In short, given just a method or function declaration like this, in C#: + +```csharp +IObservable Search(string query) +``` + +… it is **impossible to tell** whether subscribing to (observing) that +`IObservable` will involve side effects. If it _does_ involve side effects, it’s +also impossible to tell whether _each subscription_ has a side effect, or if only +the first one does. + +This example is contrived, but it demonstrates **a real, pervasive problem** +that makes it extremely hard to understand Rx code (and pre-3.0 ReactiveCocoa +code) at a glance. + +[ReactiveCocoa 3.0][https://github.com/ReactiveCocoa/ReactiveCocoa/blob/master/CHANGELOG.md] has solved this problem by distinguishing side +effects with the separate [`Signal`][Signals] and [`SignalProducer`][Signal producers] types. Although this +means there’s another type to learn about, it improves code clarity and helps +communicates intent much better. + +In other words, **ReactiveSwift’s changes here are [simple, not +easy](http://www.infoq.com/presentations/Simple-Made-Easy)**. + +### Typed errors + +When [signals][] and [signal producers][] are allowed to [fail][Events] in ReactiveSwift, +the kind of error must be specified in the type system. For example, +`Signal` is a signal of integer values that may fail with an error +of type `NSError`. + +More importantly, RAC allows the special type `NoError` to be used instead, +which _statically guarantees_ that an event stream is not allowed to send a +failure. **This eliminates many bugs caused by unexpected failure events.** + +In Rx systems with types, event streams only specify the type of their +values—not the type of their errors—so this sort of guarantee is impossible. + +### UI programming + +Rx is basically agnostic as to how it’s used. Although UI programming with Rx is +very common, it has few features tailored to that particular case. + +ReactiveSwift takes a lot of inspiration from [ReactiveUI](http://reactiveui.net/), +including the basis for [Actions][]. + +Unlike ReactiveUI, which unfortunately cannot directly change Rx to make it more +friendly for UI programming, **ReactiveSwift has been improved many times +specifically for this purpose**—even when it means diverging further from Rx. + +## Getting started + +ReactiveSwift supports `OS X 10.9+`, `iOS 8.0+`, `watchOS 2.0`, and `tvOS 9.0`. + +To add RAC to your application: + + 1. Add the ReactiveSwift repository as a + [submodule](https://git-scm.com/book/en/v2/Git-Tools-Submodules) of your + application’s repository. + 1. Run `git submodule update --init --recursive` from within the ReactiveSwift folder. + 1. Drag and drop `ReactiveSwift.xcodeproj` and `Carthage/Checkouts/Result/Result.xcodeproj` + into your application’s Xcode project or workspace. + 1. On the “General” tab of your application target’s settings, add + `ReactiveSwift.framework` and `Result.framework` to the “Embedded Binaries” section. + 1. If your application target does not contain Swift code at all, you should also + set the `EMBEDDED_CONTENT_CONTAINS_SWIFT` build setting to “Yes”. + +Or, if you’re using [Carthage](https://github.com/Carthage/Carthage), simply add +ReactiveSwift to your `Cartfile`: + +``` +github "ReactiveCocoa/ReactiveSwift" +``` +Make sure to add both `ReactiveSwift.framework` and `Result.framework` to "Linked Frameworks and Libraries" and "copy-frameworks" Build Phases. + +Once you’ve set up your project, check out the [Framework Overview][] for +a tour of ReactiveSwift’s concepts, and the [Basic Operators][] for some +introductory examples of using it. + +## Playground + +We also provide a great Playground, so you can get used to ReactiveCocoa's operators. In order to start using it: + + 1. Clone the ReactiveSwift repository. + 1. Retrieve the project dependencies using one of the following terminal commands from the ReactiveSwift project root directory: + - `git submodule update --init --recursive` **OR**, if you have [Carthage](https://github.com/Carthage/Carthage) installed + - `carthage checkout` + 1. Open `ReactiveSwift.xcworkspace` + 1. Build `Result-Mac` scheme + 1. Build `ReactiveSwift-macOS` scheme + 1. Finally open the `ReactiveSwift.playground` + 1. Choose `View > Show Debug Area` + +[Actions]: Documentation/FrameworkOverview.md#actions +[Basic Operators]: Documentation/BasicOperators.md +[CHANGELOG]: CHANGELOG.md +[Code]: ReactiveCocoa +[Documentation]: Documentation +[Events]: Documentation/FrameworkOverview.md#events +[Framework Overview]: Documentation/FrameworkOverview.md +[Schedulers]: Documentation/FrameworkOverview.md#schedulers +[Signal producers]: Documentation/FrameworkOverview.md#signal-producers +[Signals]: Documentation/FrameworkOverview.md#signals +[Swift API]: ReactiveCocoa/Swift +[flatMapLatest]: Documentation/BasicOperators.md#switching-to-the-latest +[retry]: Documentation/BasicOperators.md#retrying diff --git a/README.md b/README.md index 578cc7b88f..b8dc9c0490 100644 --- a/README.md +++ b/README.md @@ -2,14 +2,14 @@ [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) [![GitHub release](https://img.shields.io/github/release/ReactiveCocoa/ReactiveCocoa.svg)](https://github.com/ReactiveCocoa/ReactiveCocoa/releases) ![Swift 3.0.x](https://img.shields.io/badge/Swift-3.0.x-orange.svg) ![platforms](https://img.shields.io/badge/platforms-iOS%20%7C%20OS%20X%20%7C%20watchOS%20%7C%20tvOS%20-lightgrey.svg) -ReactiveCocoa (RAC) is a Cocoa framework inspired by [Functional Reactive Programming](https://en.wikipedia.org/wiki/Functional_reactive_programming). It provides APIs for composing and transforming **streams of values over time**. +ReactiveCocoa (RAC) is a Cocoa framework built on top of [ReactiveSwift][]. It +provides APIs for using ReactiveSwift with Apple's Cocoa frameworks. 1. [Introduction](#introduction) 1. [Example: online search](#example-online-search) 1. [Objective-C and Swift](#objective-c-and-swift) 1. [How does ReactiveCocoa relate to Rx?](#how-does-reactivecocoa-relate-to-rx) 1. [Getting started](#getting-started) - 1. [Playground](#playground) If you’re already familiar with functional reactive programming or what ReactiveCocoa is about, check out the [Documentation][] folder for more in-depth @@ -49,170 +49,7 @@ Because all of these different mechanisms can be represented in the _same_ way, it’s easy to declaratively chain and combine them together, with less spaghetti code and state to bridge the gap. -For more information about the concepts in ReactiveCocoa, see the [Framework -Overview][]. - -## Example: online search - -Let’s say you have a text field, and whenever the user types something into it, -you want to make a network request which searches for that query. - -#### Observing text edits - -The first step is to observe edits to the text field, using a RAC extension to -`UITextField` specifically for this purpose: - -```swift -let searchStrings = textField.rac_textSignal() - .toSignalProducer() - .map { text in text as! String } -``` - -This gives us a [signal producer][Signal producers] which sends -values of type `String`. _(The cast is [currently -necessary](https://github.com/ReactiveCocoa/ReactiveCocoa/issues/2182) to bridge -this extension method from Objective-C.)_ - -#### Making network requests - -With each string, we want to execute a network request. Luckily, RAC offers an -`NSURLSession` extension for doing exactly that: - -```swift -let searchResults = searchStrings - .flatMap(.Latest) { (query: String) -> SignalProducer<(NSData, NSURLResponse), NSError> in - let URLRequest = self.searchRequestWithEscapedQuery(query) - return NSURLSession.sharedSession().rac_dataWithRequest(URLRequest) - } - .map { (data, URLResponse) -> String in - let string = String(data: data, encoding: NSUTF8StringEncoding)! - return self.parseJSONResultsFromString(string) - } - .observeOn(UIScheduler()) -``` - -This has transformed our producer of `String`s into a producer of `Array`s -containing the search results, which will be forwarded on the main thread -(thanks to the [`UIScheduler`][Schedulers]). - -Additionally, [`flatMap(.Latest)`][flatMapLatest] here ensures that _only one search_—the -latest—is allowed to be running. If the user types another character while the -network request is still in flight, it will be cancelled before starting a new -one. Just think of how much code that would take to do by hand! - -#### Receiving the results - -This won’t actually execute yet, because producers must be _started_ in order to -receive the results (which prevents doing work when the results are never used). -That’s easy enough: - -```swift -searchResults.startWithNext { results in - print("Search results: \(results)") -} -``` - -Here, we watch for the `Next` [event][Events], which contains our results, and -just log them to the console. This could easily do something else instead, like -update a table view or a label on screen. - -#### Handling failures - -In this example so far, any network error will generate a `Failed` -[event][Events], which will terminate the event stream. Unfortunately, this -means that future queries won’t even be attempted. - -To remedy this, we need to decide what to do with failures that occur. The -quickest solution would be to log them, then ignore them: - -```swift - .flatMap(.Latest) { (query: String) -> SignalProducer<(NSData, NSURLResponse), NSError> in - let URLRequest = self.searchRequestWithEscapedQuery(query) - - return NSURLSession.sharedSession() - .rac_dataWithRequest(URLRequest) - .flatMapError { error in - print("Network error occurred: \(error)") - return SignalProducer.empty - } - } -``` - -By replacing failures with the `empty` event stream, we’re able to effectively -ignore them. - -However, it’s probably more appropriate to retry at least a couple of times -before giving up. Conveniently, there’s a [`retry`][retry] operator to do exactly that! - -Our improved `searchResults` producer might look like this: - -```swift -let searchResults = searchStrings - .flatMap(.Latest) { (query: String) -> SignalProducer<(NSData, NSURLResponse), NSError> in - let URLRequest = self.searchRequestWithEscapedQuery(query) - - return NSURLSession.sharedSession() - .rac_dataWithRequest(URLRequest) - .retry(2) - .flatMapError { error in - print("Network error occurred: \(error)") - return SignalProducer.empty - } - } - .map { (data, URLResponse) -> String in - let string = String(data: data, encoding: NSUTF8StringEncoding)! - return self.parseJSONResultsFromString(string) - } - .observeOn(UIScheduler()) -``` - -#### Throttling requests - -Now, let’s say you only want to actually perform the search periodically, -to minimize traffic. - -ReactiveCocoa has a declarative `throttle` operator that we can apply to our -search strings: - -```swift -let searchStrings = textField.rac_textSignal() - .toSignalProducer() - .map { text in text as! String } - .throttle(0.5, onScheduler: QueueScheduler.mainQueueScheduler) -``` - -This prevents values from being sent less than 0.5 seconds apart. - -To do this manually would require significant state, and end up much harder to -read! With ReactiveCocoa, we can use just one operator to incorporate _time_ into -our event stream. - -#### Debugging event streams - -Due to its nature, a stream's stack trace might have dozens of frames, which, more often than not, can make debugging a very frustrating activity. -A naive way of debugging, is by injecting side effects into the stream, like so: - -```swift -let searchString = textField.rac_textSignal() - .toSignalProducer() - .map { text in text as! String } - .throttle(0.5, onScheduler: QueueScheduler.mainQueueScheduler) - .on(event: { print ($0) }) // the side effect -``` - -This will print the stream's [events][Events], while preserving the original stream behaviour. Both [`SignalProducer`][Signal producers] -and [`Signal`][Signals] provide the `logEvents` operator, that will do this automatically for you: - -```swift -let searchString = textField.rac_textSignal() - .toSignalProducer() - .map { text in text as! String } - .throttle(0.5, onScheduler: QueueScheduler.mainQueueScheduler) - .logEvents() -``` - -For more information and advance usage, check the [Debugging Techniques](Documentation/DebuggingTechniques.md) document. - +For more information about the concepts in ReactiveCocoa, see [ReactiveSwift][]. ## Objective-C and Swift @@ -230,87 +67,6 @@ this API, please consult our [legacy documentation][]. **We highly recommend that all new projects use the Swift API.** -## How does ReactiveCocoa relate to Rx? - -ReactiveCocoa was originally inspired, and therefore heavily influenced, by -Microsoft’s [Reactive -Extensions](https://msdn.microsoft.com/en-us/data/gg577609.aspx) (Rx) library. There are many ports of Rx, including [RxSwift](https://github.com/ReactiveX/RxSwift), but ReactiveCocoa is _intentionally_ not a direct port. - -**Where RAC differs from Rx**, it is usually to: - - * Create a simpler API - * Address common sources of confusion - * More closely match Cocoa conventions - -The following are some of the concrete differences, along with their rationales. - -### Naming - -In most versions of Rx, Streams over time are known as `Observable`s, which -parallels the `Enumerable` type in .NET. Additionally, most operations in Rx.NET -borrow names from [LINQ](https://msdn.microsoft.com/en-us/library/bb397926.aspx), -which uses terms reminiscent of relational databases, like `Select` and `Where`. - -**RAC is focused on matching Swift naming first and foremost**, with terms like -`map` and `filter` instead. Other naming differences are typically inspired by -significantly better alternatives from [Haskell](https://www.haskell.org) or -[Elm](http://elm-lang.org) (which is the primary source for the “signal” -terminology). - -### Signals and Signal Producers (“hot” and “cold” observables) - -One of the most confusing aspects of Rx is that of [“hot”, “cold”, and “warm” -observables](http://www.introtorx.com/content/v1.0.10621.0/14_HotAndColdObservables.html) (event streams). - -In short, given just a method or function declaration like this, in C#: - -```csharp -IObservable Search(string query) -``` - -… it is **impossible to tell** whether subscribing to (observing) that -`IObservable` will involve side effects. If it _does_ involve side effects, it’s -also impossible to tell whether _each subscription_ has a side effect, or if only -the first one does. - -This example is contrived, but it demonstrates **a real, pervasive problem** -that makes it extremely hard to understand Rx code (and pre-3.0 ReactiveCocoa -code) at a glance. - -[ReactiveCocoa 3.0][CHANGELOG] has solved this problem by distinguishing side -effects with the separate [`Signal`][Signals] and [`SignalProducer`][Signal producers] types. Although this -means there’s another type to learn about, it improves code clarity and helps -communicates intent much better. - -In other words, **ReactiveCocoa’s changes here are [simple, not -easy](http://www.infoq.com/presentations/Simple-Made-Easy)**. - -### Typed errors - -When [signals][] and [signal producers][] are allowed to [fail][Events] in ReactiveCocoa, -the kind of error must be specified in the type system. For example, -`Signal` is a signal of integer values that may fail with an error -of type `NSError`. - -More importantly, RAC allows the special type `NoError` to be used instead, -which _statically guarantees_ that an event stream is not allowed to send a -failure. **This eliminates many bugs caused by unexpected failure events.** - -In Rx systems with types, event streams only specify the type of their -values—not the type of their errors—so this sort of guarantee is impossible. - -### UI programming - -Rx is basically agnostic as to how it’s used. Although UI programming with Rx is -very common, it has few features tailored to that particular case. - -RAC takes a lot of inspiration from [ReactiveUI](http://reactiveui.net/), -including the basis for [Actions][]. - -Unlike ReactiveUI, which unfortunately cannot directly change Rx to make it more -friendly for UI programming, **ReactiveCocoa has been improved many times -specifically for this purpose**—even when it means diverging further from Rx. - ## Getting started ReactiveCocoa supports `OS X 10.9+`, `iOS 8.0+`, `watchOS 2.0`, and `tvOS 9.0`. @@ -321,10 +77,13 @@ To add RAC to your application: [submodule](https://git-scm.com/book/en/v2/Git-Tools-Submodules) of your application’s repository. 1. Run `git submodule update --init --recursive` from within the ReactiveCocoa folder. - 1. Drag and drop `ReactiveCocoa.xcodeproj` and `Carthage/Checkouts/Result/Result.xcodeproj` - into your application’s Xcode project or workspace. + 1. Drag and drop `ReactiveCocoa.xcodeproj`, + `Carthage/Checkouts/ReactiveSwift/ReactiveSwift.xcodeproj`, and + `Carthage/Checkouts/Result/Result.xcodeproj` into your application’s Xcode + project or workspace. 1. On the “General” tab of your application target’s settings, add - `ReactiveCocoa.framework` and `Result.framework` to the “Embedded Binaries” section. + `ReactiveCocoa.framework`, `ReactiveSwift.framework`, and `Result.framework` + to the “Embedded Binaries” section. 1. If your application target does not contain Swift code at all, you should also set the `EMBEDDED_CONTENT_CONTAINS_SWIFT` build setting to “Yes”. @@ -334,7 +93,7 @@ ReactiveCocoa to your `Cartfile`: ``` github "ReactiveCocoa/ReactiveCocoa" ``` -Make sure to add both `ReactiveCocoa.framework` and `Result.framework` to "Linked Frameworks and Libraries" and "copy-frameworks" Build Phases. +Make sure to add `ReactiveCocoa.framework`, `ReactiveSwift`, and `Result.framework` to "Linked Frameworks and Libraries" and "copy-frameworks" Build Phases. If you would prefer to use [CocoaPods](https://cocoapods.org), there are some [unofficial podspecs](https://github.com/CocoaPods/Specs/tree/master/Specs/ReactiveCocoa) @@ -344,33 +103,16 @@ Once you’ve set up your project, check out the [Framework Overview][] for a tour of ReactiveCocoa’s concepts, and the [Basic Operators][] for some introductory examples of using it. -## Playground - -We also provide a great Playground, so you can get used to ReactiveCocoa's operators. In order to start using it: - - 1. Clone the ReactiveCocoa repository. - 1. Retrieve the project dependencies using one of the following terminal commands from the ReactiveCocoa project root directory: - - `git submodule update --init --recursive` **OR**, if you have [Carthage](https://github.com/Carthage/Carthage) installed - - `carthage checkout` - 1. Open `ReactiveCocoa.xcworkspace` - 1. Build `Result-Mac` scheme - 1. Build `ReactiveCocoa-Mac` scheme - 1. Finally open the `ReactiveCocoa.playground` - 1. Choose `View > Show Debug Area` - +[ReactiveSwift]: https://github.com/ReactiveCocoa/ReactiveSwift [Actions]: Documentation/FrameworkOverview.md#actions [Basic Operators]: Documentation/BasicOperators.md [CHANGELOG]: CHANGELOG.md [Code]: ReactiveCocoa [Documentation]: Documentation -[Events]: Documentation/FrameworkOverview.md#events [Framework Overview]: Documentation/FrameworkOverview.md [Legacy Documentation]: Documentation/Legacy [Objective-C API]: ReactiveCocoa/Objective-C [Objective-C Bridging]: Documentation/ObjectiveCBridging.md -[Schedulers]: Documentation/FrameworkOverview.md#schedulers [Signal producers]: Documentation/FrameworkOverview.md#signal-producers [Signals]: Documentation/FrameworkOverview.md#signals [Swift API]: ReactiveCocoa/Swift -[flatMapLatest]: Documentation/BasicOperators.md#switching-to-the-latest -[retry]: Documentation/BasicOperators.md#retrying diff --git a/ReactiveCocoa.xcodeproj/project.pbxproj b/ReactiveCocoa.xcodeproj/project.pbxproj index 1ba48fa6fb..2521e58730 100644 --- a/ReactiveCocoa.xcodeproj/project.pbxproj +++ b/ReactiveCocoa.xcodeproj/project.pbxproj @@ -7,34 +7,15 @@ objects = { /* Begin PBXBuildFile section */ - 02D2602A1C1D6DAF003ACC61 /* SignalLifetimeSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02D260291C1D6DAF003ACC61 /* SignalLifetimeSpec.swift */; }; - 02D2602B1C1D6DB8003ACC61 /* SignalLifetimeSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02D260291C1D6DAF003ACC61 /* SignalLifetimeSpec.swift */; }; 314304171ACA8B1E00595017 /* MKAnnotationView+RACSignalSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = 314304151ACA8B1E00595017 /* MKAnnotationView+RACSignalSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; 314304181ACA8B1E00595017 /* MKAnnotationView+RACSignalSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 314304161ACA8B1E00595017 /* MKAnnotationView+RACSignalSupport.m */; }; - 4A0E10FF1D2A92720065D310 /* Lifetime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A0E10FE1D2A92720065D310 /* Lifetime.swift */; }; - 4A0E11001D2A92720065D310 /* Lifetime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A0E10FE1D2A92720065D310 /* Lifetime.swift */; }; - 4A0E11011D2A92720065D310 /* Lifetime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A0E10FE1D2A92720065D310 /* Lifetime.swift */; }; - 4A0E11021D2A92720065D310 /* Lifetime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A0E10FE1D2A92720065D310 /* Lifetime.swift */; }; - 4A0E11041D2A95200065D310 /* LifetimeSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A0E11031D2A95200065D310 /* LifetimeSpec.swift */; }; - 4A0E11051D2A95200065D310 /* LifetimeSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A0E11031D2A95200065D310 /* LifetimeSpec.swift */; }; - 4A0E11061D2A95200065D310 /* LifetimeSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A0E11031D2A95200065D310 /* LifetimeSpec.swift */; }; - 579504331BB8A34200A5E482 /* BagSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312EF19EF2A7700984962 /* BagSpec.swift */; }; - 579504341BB8A34300A5E482 /* BagSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312EF19EF2A7700984962 /* BagSpec.swift */; }; - 57A4D1B11BA13D7A00F7D4B1 /* Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = D871D69E1B3B29A40070F16C /* Optional.swift */; }; + 4A0E10FF1D2A92720065D310 /* NSObject+Lifetime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A0E10FE1D2A92720065D310 /* NSObject+Lifetime.swift */; }; + 4A0E11001D2A92720065D310 /* NSObject+Lifetime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A0E10FE1D2A92720065D310 /* NSObject+Lifetime.swift */; }; + 4A0E11011D2A92720065D310 /* NSObject+Lifetime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A0E10FE1D2A92720065D310 /* NSObject+Lifetime.swift */; }; + 4A0E11021D2A92720065D310 /* NSObject+Lifetime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A0E10FE1D2A92720065D310 /* NSObject+Lifetime.swift */; }; 57A4D1B21BA13D7A00F7D4B1 /* RACCompoundDisposableProvider.d in Sources */ = {isa = PBXBuildFile; fileRef = D037646A19EDA41200A782A9 /* RACCompoundDisposableProvider.d */; }; 57A4D1B31BA13D7A00F7D4B1 /* RACSignalProvider.d in Sources */ = {isa = PBXBuildFile; fileRef = D03764A319EDA41200A782A9 /* RACSignalProvider.d */; }; - 57A4D1B41BA13D7A00F7D4B1 /* Disposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BE19EF2A5800984962 /* Disposable.swift */; }; - 57A4D1B61BA13D7A00F7D4B1 /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B51A69A3DB00AD8286 /* Event.swift */; }; 57A4D1B71BA13D7A00F7D4B1 /* ObjectiveCBridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312C419EF2A5800984962 /* ObjectiveCBridging.swift */; }; - 57A4D1B81BA13D7A00F7D4B1 /* Scheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312C819EF2A5800984962 /* Scheduler.swift */; }; - 57A4D1B91BA13D7A00F7D4B1 /* Action.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54AF1A69A2AC00AD8286 /* Action.swift */; }; - 57A4D1BA1BA13D7A00F7D4B1 /* Property.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B01A69A2AC00AD8286 /* Property.swift */; }; - 57A4D1BB1BA13D7A00F7D4B1 /* Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B11A69A2AC00AD8286 /* Signal.swift */; }; - 57A4D1BC1BA13D7A00F7D4B1 /* SignalProducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B21A69A2AC00AD8286 /* SignalProducer.swift */; }; - 57A4D1BD1BA13D7A00F7D4B1 /* Atomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BB19EF2A5800984962 /* Atomic.swift */; }; - 57A4D1BE1BA13D7A00F7D4B1 /* Bag.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BC19EF2A5800984962 /* Bag.swift */; }; - 57A4D1BF1BA13D7A00F7D4B1 /* TupleExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00004081A46864E000E7D41 /* TupleExtensions.swift */; }; - 57A4D1C01BA13D7A00F7D4B1 /* FoundationExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B4A3C19F4C39A009E02AC /* FoundationExtensions.swift */; }; 57A4D1C11BA13D7A00F7D4B1 /* EXTRuntimeExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037666819EDA57100A782A9 /* EXTRuntimeExtensions.m */; }; 57A4D1C21BA13D7A00F7D4B1 /* NSArray+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037642B19EDA41200A782A9 /* NSArray+RACSequenceAdditions.m */; }; 57A4D1C31BA13D7A00F7D4B1 /* NSData+RACSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = D037643119EDA41200A782A9 /* NSData+RACSupport.m */; }; @@ -179,21 +160,8 @@ 7DFBED1F1CDB8D7800EE435B /* Quick.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = D037672B19EDA75D00A782A9 /* Quick.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 7DFBED201CDB8D7D00EE435B /* Nimble.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = D05E662419EDD82000904ACA /* Nimble.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 7DFBED211CDB8D8300EE435B /* Result.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = CDC42E2E1AE7AB8B00965373 /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 7DFBED221CDB8DE300EE435B /* ActionSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D021671C1A6CD50500987861 /* ActionSpec.swift */; }; - 7DFBED231CDB8DE300EE435B /* AtomicSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312EE19EF2A7700984962 /* AtomicSpec.swift */; }; - 7DFBED241CDB8DE300EE435B /* BagSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312EF19EF2A7700984962 /* BagSpec.swift */; }; - 7DFBED251CDB8DE300EE435B /* DisposableSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312F019EF2A7700984962 /* DisposableSpec.swift */; }; - 7DFBED261CDB8DE300EE435B /* FoundationExtensionsSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8170FC01B100EBC004192AD /* FoundationExtensionsSpec.swift */; }; 7DFBED271CDB8DE300EE435B /* ObjectiveCBridgingSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A226101A72F30B00D33B74 /* ObjectiveCBridgingSpec.swift */; }; - 7DFBED281CDB8DE300EE435B /* PropertySpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A2260D1A72F16D00D33B74 /* PropertySpec.swift */; }; - 7DFBED291CDB8DE300EE435B /* SchedulerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312F219EF2A7700984962 /* SchedulerSpec.swift */; }; - 7DFBED2A1CDB8DE300EE435B /* SignalLifetimeSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02D260291C1D6DAF003ACC61 /* SignalLifetimeSpec.swift */; }; - 7DFBED2B1CDB8DE300EE435B /* SignalProducerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A2260A1A72E6C500D33B74 /* SignalProducerSpec.swift */; }; - 7DFBED2C1CDB8DE300EE435B /* SignalProducerLiftingSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8024DB11B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift */; }; - 7DFBED2D1CDB8DE300EE435B /* SignalSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A226071A72E0E900D33B74 /* SignalSpec.swift */; }; - 7DFBED2E1CDB8DE300EE435B /* FlattenSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA6F284F1C52626B001879D2 /* FlattenSpec.swift */; }; - 7DFBED2F1CDB8DE300EE435B /* TestError.swift in Sources */ = {isa = PBXBuildFile; fileRef = B696FB801A7640C00075236D /* TestError.swift */; }; - 7DFBED301CDB8DE300EE435B /* TestLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C79B64731CD38B2B003F2376 /* TestLogger.swift */; }; + 7DFBED281CDB8DE300EE435B /* DynamicPropertySpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A2260D1A72F16D00D33B74 /* DynamicPropertySpec.swift */; }; 7DFBED321CDB8DE300EE435B /* NSEnumeratorRACSequenceAdditionsSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667819EDA60000A782A9 /* NSEnumeratorRACSequenceAdditionsSpec.m */; }; 7DFBED331CDB8DE300EE435B /* NSNotificationCenterRACSupportSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667919EDA60000A782A9 /* NSNotificationCenterRACSupportSpec.m */; }; 7DFBED351CDB8DE300EE435B /* NSObjectRACDeallocatingSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D037667B19EDA60000A782A9 /* NSObjectRACDeallocatingSpec.m */; }; @@ -243,14 +211,6 @@ 9A1E72BA1D4DE96500CC20C3 /* KeyValueObservingSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A1E72B91D4DE96500CC20C3 /* KeyValueObservingSpec.swift */; }; 9A1E72BB1D4DE96500CC20C3 /* KeyValueObservingSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A1E72B91D4DE96500CC20C3 /* KeyValueObservingSpec.swift */; }; 9A1E72BC1D4DE96500CC20C3 /* KeyValueObservingSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A1E72B91D4DE96500CC20C3 /* KeyValueObservingSpec.swift */; }; - 9A694EF31D5CE02E009B05BD /* UnidirectionalBinding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A694EF21D5CE02E009B05BD /* UnidirectionalBinding.swift */; }; - 9A694EF41D5CE02E009B05BD /* UnidirectionalBinding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A694EF21D5CE02E009B05BD /* UnidirectionalBinding.swift */; }; - 9A694EF51D5CE02E009B05BD /* UnidirectionalBinding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A694EF21D5CE02E009B05BD /* UnidirectionalBinding.swift */; }; - 9A694EF61D5CE02E009B05BD /* UnidirectionalBinding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A694EF21D5CE02E009B05BD /* UnidirectionalBinding.swift */; }; - 9ABCB1851D2A5B5A00BCA243 /* Deprecations+Removals.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9ABCB1841D2A5B5A00BCA243 /* Deprecations+Removals.swift */; }; - 9ABCB1861D2A5B5A00BCA243 /* Deprecations+Removals.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9ABCB1841D2A5B5A00BCA243 /* Deprecations+Removals.swift */; }; - 9ABCB1871D2A5B5A00BCA243 /* Deprecations+Removals.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9ABCB1841D2A5B5A00BCA243 /* Deprecations+Removals.swift */; }; - 9ABCB1881D2A5B5A00BCA243 /* Deprecations+Removals.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9ABCB1841D2A5B5A00BCA243 /* Deprecations+Removals.swift */; }; 9AD0F06A1D48BA4800ADFAB7 /* NSObject+KeyValueObserving.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AD0F0691D48BA4800ADFAB7 /* NSObject+KeyValueObserving.swift */; }; 9AD0F06B1D48BA4800ADFAB7 /* NSObject+KeyValueObserving.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AD0F0691D48BA4800ADFAB7 /* NSObject+KeyValueObserving.swift */; }; 9AD0F06C1D48BA4800ADFAB7 /* NSObject+KeyValueObserving.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AD0F0691D48BA4800ADFAB7 /* NSObject+KeyValueObserving.swift */; }; @@ -326,18 +286,7 @@ A9B315A51B3940750001CB9C /* RACUnarySequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764BD19EDA41200A782A9 /* RACUnarySequence.m */; }; A9B315A61B3940750001CB9C /* RACUnit.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764BF19EDA41200A782A9 /* RACUnit.m */; }; A9B315A71B3940750001CB9C /* RACValueTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = D03764C119EDA41200A782A9 /* RACValueTransformer.m */; }; - A9B315BC1B3940810001CB9C /* Disposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BE19EF2A5800984962 /* Disposable.swift */; }; - A9B315BE1B3940810001CB9C /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B51A69A3DB00AD8286 /* Event.swift */; }; A9B315BF1B3940810001CB9C /* ObjectiveCBridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312C419EF2A5800984962 /* ObjectiveCBridging.swift */; }; - A9B315C01B3940810001CB9C /* Scheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312C819EF2A5800984962 /* Scheduler.swift */; }; - A9B315C11B3940810001CB9C /* Action.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54AF1A69A2AC00AD8286 /* Action.swift */; }; - A9B315C21B3940810001CB9C /* Property.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B01A69A2AC00AD8286 /* Property.swift */; }; - A9B315C31B3940810001CB9C /* Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B11A69A2AC00AD8286 /* Signal.swift */; }; - A9B315C41B3940810001CB9C /* SignalProducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B21A69A2AC00AD8286 /* SignalProducer.swift */; }; - A9B315C51B3940810001CB9C /* Atomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BB19EF2A5800984962 /* Atomic.swift */; }; - A9B315C61B3940810001CB9C /* Bag.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BC19EF2A5800984962 /* Bag.swift */; }; - A9B315C71B3940810001CB9C /* TupleExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00004081A46864E000E7D41 /* TupleExtensions.swift */; }; - A9B315C81B3940810001CB9C /* FoundationExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B4A3C19F4C39A009E02AC /* FoundationExtensions.swift */; }; A9B315C91B3940980001CB9C /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDC42E2E1AE7AB8B00965373 /* Result.framework */; }; A9B315CA1B3940AB0001CB9C /* ReactiveCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = D04725EF19E49ED7006002AA /* ReactiveCocoa.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B315CB1B3940AB0001CB9C /* EXTKeyPathCoding.h in Headers */ = {isa = PBXBuildFile; fileRef = D037666619EDA57100A782A9 /* EXTKeyPathCoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -388,27 +337,26 @@ A9B3161C1B3940AF0001CB9C /* RACUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = D03764BE19EDA41200A782A9 /* RACUnit.h */; settings = {ATTRIBUTES = (Public, ); }; }; A9B316341B394C7F0001CB9C /* RACCompoundDisposableProvider.d in Sources */ = {isa = PBXBuildFile; fileRef = D037646A19EDA41200A782A9 /* RACCompoundDisposableProvider.d */; }; A9B316351B394C7F0001CB9C /* RACSignalProvider.d in Sources */ = {isa = PBXBuildFile; fileRef = D03764A319EDA41200A782A9 /* RACSignalProvider.d */; }; - A9F793341B60D0140026BCBA /* Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = D871D69E1B3B29A40070F16C /* Optional.swift */; }; B696FB811A7640C00075236D /* TestError.swift in Sources */ = {isa = PBXBuildFile; fileRef = B696FB801A7640C00075236D /* TestError.swift */; }; B696FB821A7640C00075236D /* TestError.swift in Sources */ = {isa = PBXBuildFile; fileRef = B696FB801A7640C00075236D /* TestError.swift */; }; + BE330A0F1D634F1E00806963 /* ReactiveSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BE330A0E1D634F1E00806963 /* ReactiveSwift.framework */; }; + BE330A111D634F2900806963 /* ReactiveSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BE330A101D634F2900806963 /* ReactiveSwift.framework */; }; + BE330A131D634F2E00806963 /* ReactiveSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BE330A121D634F2E00806963 /* ReactiveSwift.framework */; }; + BE330A151D634F4000806963 /* ReactiveSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BE330A141D634F4000806963 /* ReactiveSwift.framework */; }; + BE330A171D634F4E00806963 /* ReactiveSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BE330A161D634F4E00806963 /* ReactiveSwift.framework */; }; + BE330A191D634F5900806963 /* ReactiveSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BE330A181D634F5900806963 /* ReactiveSwift.framework */; }; + BE330A1B1D634F5F00806963 /* ReactiveSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BE330A1A1D634F5F00806963 /* ReactiveSwift.framework */; }; BEBDD6E51CDC292D009A75A9 /* RACDelegateProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646B19EDA41200A782A9 /* RACDelegateProxy.h */; settings = {ATTRIBUTES = (Public, ); }; }; BEBDD6E61CDC292D009A75A9 /* RACDelegateProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646B19EDA41200A782A9 /* RACDelegateProxy.h */; settings = {ATTRIBUTES = (Public, ); }; }; BEBDD6E71CDC292E009A75A9 /* RACDelegateProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646B19EDA41200A782A9 /* RACDelegateProxy.h */; settings = {ATTRIBUTES = (Public, ); }; }; BEBDD6E81CDC292F009A75A9 /* RACDelegateProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646B19EDA41200A782A9 /* RACDelegateProxy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BEE020661D637B0000DF261F /* TestError.swift in Sources */ = {isa = PBXBuildFile; fileRef = B696FB801A7640C00075236D /* TestError.swift */; }; BFA6B94D1A7604D400C846D1 /* SignalProducerNimbleMatchers.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFA6B94A1A76044800C846D1 /* SignalProducerNimbleMatchers.swift */; }; BFA6B94E1A7604D500C846D1 /* SignalProducerNimbleMatchers.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFA6B94A1A76044800C846D1 /* SignalProducerNimbleMatchers.swift */; }; C7142DBC1CDEA167009F402D /* CocoaAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7142DBB1CDEA167009F402D /* CocoaAction.swift */; }; C7142DBD1CDEA194009F402D /* CocoaAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7142DBB1CDEA167009F402D /* CocoaAction.swift */; }; C7142DBE1CDEA194009F402D /* CocoaAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7142DBB1CDEA167009F402D /* CocoaAction.swift */; }; C7142DBF1CDEA195009F402D /* CocoaAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7142DBB1CDEA167009F402D /* CocoaAction.swift */; }; - C79B64741CD38B2B003F2376 /* TestLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C79B64731CD38B2B003F2376 /* TestLogger.swift */; }; - C79B64751CD38B2B003F2376 /* TestLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C79B64731CD38B2B003F2376 /* TestLogger.swift */; }; - C79B647C1CD52E23003F2376 /* EventLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C79B647B1CD52E23003F2376 /* EventLogger.swift */; }; - C79B647D1CD52E4A003F2376 /* EventLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C79B647B1CD52E23003F2376 /* EventLogger.swift */; }; - C79B647F1CD52E4D003F2376 /* EventLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C79B647B1CD52E23003F2376 /* EventLogger.swift */; }; - C79B64801CD52E4E003F2376 /* EventLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C79B647B1CD52E23003F2376 /* EventLogger.swift */; }; - CA6F28501C52626B001879D2 /* FlattenSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA6F284F1C52626B001879D2 /* FlattenSpec.swift */; }; - CA6F28511C52626B001879D2 /* FlattenSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA6F284F1C52626B001879D2 /* FlattenSpec.swift */; }; CD0C45DE1CC9A288009F5BF0 /* DynamicProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD0C45DD1CC9A288009F5BF0 /* DynamicProperty.swift */; }; CD0C45DF1CC9A288009F5BF0 /* DynamicProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD0C45DD1CC9A288009F5BF0 /* DynamicProperty.swift */; }; CD0C45E01CC9A288009F5BF0 /* DynamicProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD0C45DD1CC9A288009F5BF0 /* DynamicProperty.swift */; }; @@ -420,17 +368,11 @@ CDC42E301AE7AB8B00965373 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDC42E2E1AE7AB8B00965373 /* Result.framework */; }; CDC42E311AE7AB8B00965373 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDC42E2E1AE7AB8B00965373 /* Result.framework */; }; CDC42E331AE7AC6D00965373 /* Result.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = CDC42E2E1AE7AB8B00965373 /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - CDCD247A1C277EEC00710AEE /* AtomicSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312EE19EF2A7700984962 /* AtomicSpec.swift */; }; - CDCD247B1C277EED00710AEE /* AtomicSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312EE19EF2A7700984962 /* AtomicSpec.swift */; }; CDF066CA1CDC1CA200199626 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D05E662419EDD82000904ACA /* Nimble.framework */; }; CDF066CB1CDC1CA200199626 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D037672B19EDA75D00A782A9 /* Quick.framework */; }; - D00004091A46864E000E7D41 /* TupleExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00004081A46864E000E7D41 /* TupleExtensions.swift */; }; - D000040A1A46864E000E7D41 /* TupleExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00004081A46864E000E7D41 /* TupleExtensions.swift */; }; D01B7B6219EDD8FE00D26E01 /* Nimble.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = D05E662419EDD82000904ACA /* Nimble.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; D01B7B6319EDD8FE00D26E01 /* Quick.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = D037672B19EDA75D00A782A9 /* Quick.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; D01B7B6419EDD94B00D26E01 /* ReactiveCocoa.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = D047260C19E49F82006002AA /* ReactiveCocoa.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - D021671D1A6CD50500987861 /* ActionSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D021671C1A6CD50500987861 /* ActionSpec.swift */; }; - D021671E1A6CD50500987861 /* ActionSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D021671C1A6CD50500987861 /* ActionSpec.swift */; }; D03764E819EDA41200A782A9 /* NSArray+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037642A19EDA41200A782A9 /* NSArray+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03764E919EDA41200A782A9 /* NSArray+RACSequenceAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D037642A19EDA41200A782A9 /* NSArray+RACSequenceAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; D03764EA19EDA41200A782A9 /* NSArray+RACSequenceAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D037642B19EDA41200A782A9 /* NSArray+RACSequenceAdditions.m */; }; @@ -794,43 +736,17 @@ D037672819EDA63500A782A9 /* RACBehaviorSubject.h in Headers */ = {isa = PBXBuildFile; fileRef = D037646019EDA41200A782A9 /* RACBehaviorSubject.h */; settings = {ATTRIBUTES = (Public, ); }; }; D037672D19EDA75D00A782A9 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D037672B19EDA75D00A782A9 /* Quick.framework */; }; D037672F19EDA78B00A782A9 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D037672B19EDA75D00A782A9 /* Quick.framework */; }; - D03B4A3D19F4C39A009E02AC /* FoundationExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B4A3C19F4C39A009E02AC /* FoundationExtensions.swift */; }; - D03B4A3E19F4C39A009E02AC /* FoundationExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B4A3C19F4C39A009E02AC /* FoundationExtensions.swift */; }; D04725F019E49ED7006002AA /* ReactiveCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = D04725EF19E49ED7006002AA /* ReactiveCocoa.h */; settings = {ATTRIBUTES = (Public, ); }; }; D04725F619E49ED7006002AA /* ReactiveCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D04725EA19E49ED7006002AA /* ReactiveCocoa.framework */; }; D047261719E49F82006002AA /* ReactiveCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D047260C19E49F82006002AA /* ReactiveCocoa.framework */; }; D05E662519EDD82000904ACA /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D05E662419EDD82000904ACA /* Nimble.framework */; }; D05E662619EDD83000904ACA /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D05E662419EDD82000904ACA /* Nimble.framework */; }; - D08C54B31A69A2AE00AD8286 /* Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B11A69A2AC00AD8286 /* Signal.swift */; }; - D08C54B41A69A2AF00AD8286 /* Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B11A69A2AC00AD8286 /* Signal.swift */; }; - D08C54B61A69A3DB00AD8286 /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B51A69A3DB00AD8286 /* Event.swift */; }; - D08C54B71A69A3DB00AD8286 /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B51A69A3DB00AD8286 /* Event.swift */; }; - D08C54B81A69A9D000AD8286 /* SignalProducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B21A69A2AC00AD8286 /* SignalProducer.swift */; }; - D08C54B91A69A9D100AD8286 /* SignalProducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B21A69A2AC00AD8286 /* SignalProducer.swift */; }; - D08C54BA1A69C54300AD8286 /* Property.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B01A69A2AC00AD8286 /* Property.swift */; }; - D08C54BB1A69C54400AD8286 /* Property.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B01A69A2AC00AD8286 /* Property.swift */; }; - D0A226081A72E0E900D33B74 /* SignalSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A226071A72E0E900D33B74 /* SignalSpec.swift */; }; - D0A226091A72E0E900D33B74 /* SignalSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A226071A72E0E900D33B74 /* SignalSpec.swift */; }; - D0A2260B1A72E6C500D33B74 /* SignalProducerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A2260A1A72E6C500D33B74 /* SignalProducerSpec.swift */; }; - D0A2260C1A72E6C500D33B74 /* SignalProducerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A2260A1A72E6C500D33B74 /* SignalProducerSpec.swift */; }; - D0A2260E1A72F16D00D33B74 /* PropertySpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A2260D1A72F16D00D33B74 /* PropertySpec.swift */; }; - D0A2260F1A72F16D00D33B74 /* PropertySpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A2260D1A72F16D00D33B74 /* PropertySpec.swift */; }; + D0A2260E1A72F16D00D33B74 /* DynamicPropertySpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A2260D1A72F16D00D33B74 /* DynamicPropertySpec.swift */; }; + D0A2260F1A72F16D00D33B74 /* DynamicPropertySpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A2260D1A72F16D00D33B74 /* DynamicPropertySpec.swift */; }; D0A226111A72F30B00D33B74 /* ObjectiveCBridgingSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A226101A72F30B00D33B74 /* ObjectiveCBridgingSpec.swift */; }; D0A226121A72F30B00D33B74 /* ObjectiveCBridgingSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A226101A72F30B00D33B74 /* ObjectiveCBridgingSpec.swift */; }; - D0C312CD19EF2A5800984962 /* Atomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BB19EF2A5800984962 /* Atomic.swift */; }; - D0C312CE19EF2A5800984962 /* Atomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BB19EF2A5800984962 /* Atomic.swift */; }; - D0C312CF19EF2A5800984962 /* Bag.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BC19EF2A5800984962 /* Bag.swift */; }; - D0C312D019EF2A5800984962 /* Bag.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BC19EF2A5800984962 /* Bag.swift */; }; - D0C312D319EF2A5800984962 /* Disposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BE19EF2A5800984962 /* Disposable.swift */; }; - D0C312D419EF2A5800984962 /* Disposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BE19EF2A5800984962 /* Disposable.swift */; }; D0C312DF19EF2A5800984962 /* ObjectiveCBridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312C419EF2A5800984962 /* ObjectiveCBridging.swift */; }; D0C312E019EF2A5800984962 /* ObjectiveCBridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312C419EF2A5800984962 /* ObjectiveCBridging.swift */; }; - D0C312E719EF2A5800984962 /* Scheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312C819EF2A5800984962 /* Scheduler.swift */; }; - D0C312E819EF2A5800984962 /* Scheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312C819EF2A5800984962 /* Scheduler.swift */; }; - D0C3130C19EF2B1F00984962 /* DisposableSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312F019EF2A7700984962 /* DisposableSpec.swift */; }; - D0C3130E19EF2B1F00984962 /* SchedulerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312F219EF2A7700984962 /* SchedulerSpec.swift */; }; - D0C3131219EF2B2000984962 /* DisposableSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312F019EF2A7700984962 /* DisposableSpec.swift */; }; - D0C3131419EF2B2000984962 /* SchedulerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312F219EF2A7700984962 /* SchedulerSpec.swift */; }; D0C3131E19EF2D9700984962 /* RACTestExampleScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C3131819EF2D9700984962 /* RACTestExampleScheduler.m */; }; D0C3131F19EF2D9700984962 /* RACTestExampleScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C3131819EF2D9700984962 /* RACTestExampleScheduler.m */; }; D0C3132019EF2D9700984962 /* RACTestObject.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C3131A19EF2D9700984962 /* RACTestObject.m */; }; @@ -838,22 +754,6 @@ D0C3132219EF2D9700984962 /* RACTestSchedulerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C3131B19EF2D9700984962 /* RACTestSchedulerSpec.m */; }; D0C3132319EF2D9700984962 /* RACTestSchedulerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C3131B19EF2D9700984962 /* RACTestSchedulerSpec.m */; }; D0C3132519EF2D9700984962 /* RACTestUIButton.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C3131D19EF2D9700984962 /* RACTestUIButton.m */; }; - D0D11AB91A6AE87700C1F8B1 /* Action.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54AF1A69A2AC00AD8286 /* Action.swift */; }; - D0D11ABA1A6AE87700C1F8B1 /* Action.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54AF1A69A2AC00AD8286 /* Action.swift */; }; - D8024DB21B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8024DB11B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift */; }; - D8024DB31B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8024DB11B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift */; }; - D8170FC11B100EBC004192AD /* FoundationExtensionsSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8170FC01B100EBC004192AD /* FoundationExtensionsSpec.swift */; }; - D8170FC21B100EBC004192AD /* FoundationExtensionsSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8170FC01B100EBC004192AD /* FoundationExtensionsSpec.swift */; }; - D85C652A1C0D84C7005A77AD /* Flatten.swift in Sources */ = {isa = PBXBuildFile; fileRef = D85C65291C0D84C7005A77AD /* Flatten.swift */; }; - D85C652B1C0E70E3005A77AD /* Flatten.swift in Sources */ = {isa = PBXBuildFile; fileRef = D85C65291C0D84C7005A77AD /* Flatten.swift */; }; - D85C652C1C0E70E4005A77AD /* Flatten.swift in Sources */ = {isa = PBXBuildFile; fileRef = D85C65291C0D84C7005A77AD /* Flatten.swift */; }; - D85C652D1C0E70E5005A77AD /* Flatten.swift in Sources */ = {isa = PBXBuildFile; fileRef = D85C65291C0D84C7005A77AD /* Flatten.swift */; }; - D871D69F1B3B29A40070F16C /* Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = D871D69E1B3B29A40070F16C /* Optional.swift */; }; - D8E84A671B3B32FB00C3E831 /* Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = D871D69E1B3B29A40070F16C /* Optional.swift */; }; - EBCC7DBC1BBF010C00A2AE92 /* Observer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBCC7DBB1BBF010C00A2AE92 /* Observer.swift */; }; - EBCC7DBD1BBF01E100A2AE92 /* Observer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBCC7DBB1BBF010C00A2AE92 /* Observer.swift */; }; - EBCC7DBE1BBF01E200A2AE92 /* Observer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBCC7DBB1BBF010C00A2AE92 /* Observer.swift */; }; - EBCC7DBF1BBF01E200A2AE92 /* Observer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBCC7DBB1BBF010C00A2AE92 /* Observer.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -912,11 +812,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 02D260291C1D6DAF003ACC61 /* SignalLifetimeSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SignalLifetimeSpec.swift; sourceTree = ""; }; 314304151ACA8B1E00595017 /* MKAnnotationView+RACSignalSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MKAnnotationView+RACSignalSupport.h"; sourceTree = ""; }; 314304161ACA8B1E00595017 /* MKAnnotationView+RACSignalSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MKAnnotationView+RACSignalSupport.m"; sourceTree = ""; }; - 4A0E10FE1D2A92720065D310 /* Lifetime.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Lifetime.swift; sourceTree = ""; }; - 4A0E11031D2A95200065D310 /* LifetimeSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LifetimeSpec.swift; sourceTree = ""; }; + 4A0E10FE1D2A92720065D310 /* NSObject+Lifetime.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSObject+Lifetime.swift"; sourceTree = ""; }; 57A4D2411BA13D7A00F7D4B1 /* ReactiveCocoa.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ReactiveCocoa.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 57A4D2441BA13F9700F7D4B1 /* tvOS-Application.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "tvOS-Application.xcconfig"; sourceTree = ""; }; 57A4D2451BA13F9700F7D4B1 /* tvOS-Base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "tvOS-Base.xcconfig"; sourceTree = ""; }; @@ -927,8 +825,6 @@ 7A7065831A3F8967001E8354 /* RACKVOProxySpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACKVOProxySpec.m; sourceTree = ""; }; 7DFBED031CDB8C9500EE435B /* ReactiveCocoaTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ReactiveCocoaTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 9A1E72B91D4DE96500CC20C3 /* KeyValueObservingSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyValueObservingSpec.swift; sourceTree = ""; }; - 9A694EF21D5CE02E009B05BD /* UnidirectionalBinding.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UnidirectionalBinding.swift; sourceTree = ""; }; - 9ABCB1841D2A5B5A00BCA243 /* Deprecations+Removals.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Deprecations+Removals.swift"; sourceTree = ""; }; 9AD0F0691D48BA4800ADFAB7 /* NSObject+KeyValueObserving.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSObject+KeyValueObserving.swift"; sourceTree = ""; }; A97451331B3A935E00F48E55 /* watchOS-Application.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "watchOS-Application.xcconfig"; sourceTree = ""; }; A97451341B3A935E00F48E55 /* watchOS-Base.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "watchOS-Base.xcconfig"; sourceTree = ""; }; @@ -936,16 +832,18 @@ A97451361B3A935E00F48E55 /* watchOS-StaticLibrary.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "watchOS-StaticLibrary.xcconfig"; sourceTree = ""; }; A9B315541B3940610001CB9C /* ReactiveCocoa.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ReactiveCocoa.framework; sourceTree = BUILT_PRODUCTS_DIR; }; B696FB801A7640C00075236D /* TestError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestError.swift; sourceTree = ""; }; + BE330A0E1D634F1E00806963 /* ReactiveSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ReactiveSwift.framework; path = build/Debug/ReactiveSwift.framework; sourceTree = ""; }; + BE330A101D634F2900806963 /* ReactiveSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ReactiveSwift.framework; path = build/Debug/ReactiveSwift.framework; sourceTree = ""; }; + BE330A121D634F2E00806963 /* ReactiveSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ReactiveSwift.framework; path = "build/Debug-iphoneos/ReactiveSwift.framework"; sourceTree = ""; }; + BE330A141D634F4000806963 /* ReactiveSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ReactiveSwift.framework; path = "build/Debug-iphoneos/ReactiveSwift.framework"; sourceTree = ""; }; + BE330A161D634F4E00806963 /* ReactiveSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ReactiveSwift.framework; path = "build/Debug-watchos/ReactiveSwift.framework"; sourceTree = ""; }; + BE330A181D634F5900806963 /* ReactiveSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ReactiveSwift.framework; path = "build/Debug-appletvos/ReactiveSwift.framework"; sourceTree = ""; }; + BE330A1A1D634F5F00806963 /* ReactiveSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ReactiveSwift.framework; path = "build/Debug-appletvos/ReactiveSwift.framework"; sourceTree = ""; }; BFA6B94A1A76044800C846D1 /* SignalProducerNimbleMatchers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SignalProducerNimbleMatchers.swift; path = Swift/SignalProducerNimbleMatchers.swift; sourceTree = ""; }; C7142DBB1CDEA167009F402D /* CocoaAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CocoaAction.swift; sourceTree = ""; }; - C79B64731CD38B2B003F2376 /* TestLogger.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestLogger.swift; sourceTree = ""; }; - C79B647B1CD52E23003F2376 /* EventLogger.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EventLogger.swift; sourceTree = ""; }; - CA6F284F1C52626B001879D2 /* FlattenSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FlattenSpec.swift; sourceTree = ""; }; CD0C45DD1CC9A288009F5BF0 /* DynamicProperty.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DynamicProperty.swift; sourceTree = ""; }; CD8401821CEE8ED7009F0ABF /* CocoaActionSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CocoaActionSpec.swift; sourceTree = ""; }; CDC42E2E1AE7AB8B00965373 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D00004081A46864E000E7D41 /* TupleExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TupleExtensions.swift; sourceTree = ""; }; - D021671C1A6CD50500987861 /* ActionSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = ActionSpec.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; D037642A19EDA41200A782A9 /* NSArray+RACSequenceAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+RACSequenceAdditions.h"; sourceTree = ""; }; D037642B19EDA41200A782A9 /* NSArray+RACSequenceAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+RACSequenceAdditions.m"; sourceTree = ""; }; D037642C19EDA41200A782A9 /* NSControl+RACCommandSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSControl+RACCommandSupport.h"; sourceTree = ""; }; @@ -1191,7 +1089,6 @@ D03766B519EDA60000A782A9 /* UIButtonRACSupportSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIButtonRACSupportSpec.m; sourceTree = ""; }; D03766B719EDA60000A782A9 /* UIImagePickerControllerRACSupportSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIImagePickerControllerRACSupportSpec.m; sourceTree = ""; }; D037672B19EDA75D00A782A9 /* Quick.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Quick.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D03B4A3C19F4C39A009E02AC /* FoundationExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FoundationExtensions.swift; sourceTree = ""; }; D04725EA19E49ED7006002AA /* ReactiveCocoa.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ReactiveCocoa.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D04725EE19E49ED7006002AA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; D04725EF19E49ED7006002AA /* ReactiveCocoa.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ReactiveCocoa.h; sourceTree = ""; }; @@ -1218,24 +1115,9 @@ D047263B19E49FE8006002AA /* Mac-StaticLibrary.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Mac-StaticLibrary.xcconfig"; sourceTree = ""; }; D047263C19E49FE8006002AA /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; D05E662419EDD82000904ACA /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D08C54AF1A69A2AC00AD8286 /* Action.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Action.swift; sourceTree = ""; }; - D08C54B01A69A2AC00AD8286 /* Property.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Property.swift; sourceTree = ""; }; - D08C54B11A69A2AC00AD8286 /* Signal.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Signal.swift; sourceTree = ""; }; - D08C54B21A69A2AC00AD8286 /* SignalProducer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignalProducer.swift; sourceTree = ""; }; - D08C54B51A69A3DB00AD8286 /* Event.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Event.swift; sourceTree = ""; }; - D0A226071A72E0E900D33B74 /* SignalSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = SignalSpec.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - D0A2260A1A72E6C500D33B74 /* SignalProducerSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = SignalProducerSpec.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - D0A2260D1A72F16D00D33B74 /* PropertySpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = PropertySpec.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; + D0A2260D1A72F16D00D33B74 /* DynamicPropertySpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = DynamicPropertySpec.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; D0A226101A72F30B00D33B74 /* ObjectiveCBridgingSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = ObjectiveCBridgingSpec.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - D0C312BB19EF2A5800984962 /* Atomic.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Atomic.swift; sourceTree = ""; }; - D0C312BC19EF2A5800984962 /* Bag.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Bag.swift; sourceTree = ""; }; - D0C312BE19EF2A5800984962 /* Disposable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Disposable.swift; sourceTree = ""; }; D0C312C419EF2A5800984962 /* ObjectiveCBridging.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObjectiveCBridging.swift; sourceTree = ""; }; - D0C312C819EF2A5800984962 /* Scheduler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Scheduler.swift; sourceTree = ""; }; - D0C312EE19EF2A7700984962 /* AtomicSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AtomicSpec.swift; sourceTree = ""; }; - D0C312EF19EF2A7700984962 /* BagSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BagSpec.swift; sourceTree = ""; }; - D0C312F019EF2A7700984962 /* DisposableSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DisposableSpec.swift; sourceTree = ""; }; - D0C312F219EF2A7700984962 /* SchedulerSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SchedulerSpec.swift; sourceTree = ""; }; D0C3131719EF2D9700984962 /* RACTestExampleScheduler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACTestExampleScheduler.h; sourceTree = ""; }; D0C3131819EF2D9700984962 /* RACTestExampleScheduler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACTestExampleScheduler.m; sourceTree = ""; }; D0C3131919EF2D9700984962 /* RACTestObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACTestObject.h; sourceTree = ""; }; @@ -1243,11 +1125,6 @@ D0C3131B19EF2D9700984962 /* RACTestSchedulerSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACTestSchedulerSpec.m; sourceTree = ""; }; D0C3131C19EF2D9700984962 /* RACTestUIButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RACTestUIButton.h; sourceTree = ""; }; D0C3131D19EF2D9700984962 /* RACTestUIButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RACTestUIButton.m; sourceTree = ""; }; - D8024DB11B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = SignalProducerLiftingSpec.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - D8170FC01B100EBC004192AD /* FoundationExtensionsSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FoundationExtensionsSpec.swift; sourceTree = ""; }; - D85C65291C0D84C7005A77AD /* Flatten.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Flatten.swift; sourceTree = ""; }; - D871D69E1B3B29A40070F16C /* Optional.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Optional.swift; sourceTree = ""; }; - EBCC7DBB1BBF010C00A2AE92 /* Observer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = Observer.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -1255,6 +1132,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + BE330A191D634F5900806963 /* ReactiveSwift.framework in Frameworks */, 57A4D2081BA13D7A00F7D4B1 /* Result.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1263,6 +1141,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + BE330A1B1D634F5F00806963 /* ReactiveSwift.framework in Frameworks */, CDF066CA1CDC1CA200199626 /* Nimble.framework in Frameworks */, CDF066CB1CDC1CA200199626 /* Quick.framework in Frameworks */, 7DFBED081CDB8C9500EE435B /* ReactiveCocoa.framework in Frameworks */, @@ -1273,6 +1152,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + BE330A171D634F4E00806963 /* ReactiveSwift.framework in Frameworks */, A9B315C91B3940980001CB9C /* Result.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1281,6 +1161,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + BE330A0F1D634F1E00806963 /* ReactiveSwift.framework in Frameworks */, CDC42E2F1AE7AB8B00965373 /* Result.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1289,6 +1170,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + BE330A111D634F2900806963 /* ReactiveSwift.framework in Frameworks */, CDC42E301AE7AB8B00965373 /* Result.framework in Frameworks */, D05E662519EDD82000904ACA /* Nimble.framework in Frameworks */, D037672D19EDA75D00A782A9 /* Quick.framework in Frameworks */, @@ -1300,6 +1182,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + BE330A131D634F2E00806963 /* ReactiveSwift.framework in Frameworks */, CDC42E311AE7AB8B00965373 /* Result.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1308,6 +1191,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + BE330A151D634F4000806963 /* ReactiveSwift.framework in Frameworks */, D05E662619EDD83000904ACA /* Nimble.framework in Frameworks */, D037672F19EDA78B00A782A9 /* Quick.framework in Frameworks */, D047261719E49F82006002AA /* ReactiveCocoa.framework in Frameworks */, @@ -1339,6 +1223,20 @@ path = watchOS; sourceTree = ""; }; + BE330A0D1D634F1E00806963 /* Frameworks */ = { + isa = PBXGroup; + children = ( + BE330A1A1D634F5F00806963 /* ReactiveSwift.framework */, + BE330A181D634F5900806963 /* ReactiveSwift.framework */, + BE330A161D634F4E00806963 /* ReactiveSwift.framework */, + BE330A141D634F4000806963 /* ReactiveSwift.framework */, + BE330A121D634F2E00806963 /* ReactiveSwift.framework */, + BE330A101D634F2900806963 /* ReactiveSwift.framework */, + BE330A0E1D634F1E00806963 /* ReactiveSwift.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; D037642919EDA3B600A782A9 /* Objective-C */ = { isa = PBXGroup; children = ( @@ -1616,39 +1514,6 @@ path = "Objective-C"; sourceTree = ""; }; - D03B4A3919F4C25F009E02AC /* Signals */ = { - isa = PBXGroup; - children = ( - D08C54AF1A69A2AC00AD8286 /* Action.swift */, - C7142DBB1CDEA167009F402D /* CocoaAction.swift */, - CD0C45DD1CC9A288009F5BF0 /* DynamicProperty.swift */, - D85C65291C0D84C7005A77AD /* Flatten.swift */, - 4A0E10FE1D2A92720065D310 /* Lifetime.swift */, - D08C54B01A69A2AC00AD8286 /* Property.swift */, - D08C54B11A69A2AC00AD8286 /* Signal.swift */, - D08C54B21A69A2AC00AD8286 /* SignalProducer.swift */, - 9A694EF21D5CE02E009B05BD /* UnidirectionalBinding.swift */, - ); - name = Signals; - sourceTree = ""; - }; - D03B4A3A19F4C26D009E02AC /* Internal Utilities */ = { - isa = PBXGroup; - children = ( - D00004081A46864E000E7D41 /* TupleExtensions.swift */, - ); - name = "Internal Utilities"; - sourceTree = ""; - }; - D03B4A3B19F4C281009E02AC /* Extensions */ = { - isa = PBXGroup; - children = ( - D03B4A3C19F4C39A009E02AC /* FoundationExtensions.swift */, - 9AD0F0691D48BA4800ADFAB7 /* NSObject+KeyValueObserving.swift */, - ); - name = Extensions; - sourceTree = ""; - }; D04725E019E49ED7006002AA = { isa = PBXGroup; children = ( @@ -1656,6 +1521,7 @@ D04725F919E49ED7006002AA /* ReactiveCocoaTests */, D047262519E49FE8006002AA /* Configuration */, D04725EB19E49ED7006002AA /* Products */, + BE330A0D1D634F1E00806963 /* Frameworks */, ); sourceTree = ""; usesTabs = 1; @@ -1787,19 +1653,11 @@ D0C312B919EF2A3000984962 /* Swift */ = { isa = PBXGroup; children = ( - D0C312BB19EF2A5800984962 /* Atomic.swift */, - D0C312BC19EF2A5800984962 /* Bag.swift */, - D0C312BE19EF2A5800984962 /* Disposable.swift */, - D08C54B51A69A3DB00AD8286 /* Event.swift */, + C7142DBB1CDEA167009F402D /* CocoaAction.swift */, + CD0C45DD1CC9A288009F5BF0 /* DynamicProperty.swift */, + 9AD0F0691D48BA4800ADFAB7 /* NSObject+KeyValueObserving.swift */, + 4A0E10FE1D2A92720065D310 /* NSObject+Lifetime.swift */, D0C312C419EF2A5800984962 /* ObjectiveCBridging.swift */, - EBCC7DBB1BBF010C00A2AE92 /* Observer.swift */, - D871D69E1B3B29A40070F16C /* Optional.swift */, - D0C312C819EF2A5800984962 /* Scheduler.swift */, - C79B647B1CD52E23003F2376 /* EventLogger.swift */, - D03B4A3919F4C25F009E02AC /* Signals */, - D03B4A3A19F4C26D009E02AC /* Internal Utilities */, - D03B4A3B19F4C281009E02AC /* Extensions */, - 9ABCB1841D2A5B5A00BCA243 /* Deprecations+Removals.swift */, ); path = Swift; sourceTree = ""; @@ -1807,23 +1665,10 @@ D0C312ED19EF2A6F00984962 /* Swift */ = { isa = PBXGroup; children = ( - D021671C1A6CD50500987861 /* ActionSpec.swift */, - D0C312EE19EF2A7700984962 /* AtomicSpec.swift */, - D0C312EF19EF2A7700984962 /* BagSpec.swift */, CD8401821CEE8ED7009F0ABF /* CocoaActionSpec.swift */, - D0C312F019EF2A7700984962 /* DisposableSpec.swift */, - CA6F284F1C52626B001879D2 /* FlattenSpec.swift */, - D8170FC01B100EBC004192AD /* FoundationExtensionsSpec.swift */, - 4A0E11031D2A95200065D310 /* LifetimeSpec.swift */, + D0A2260D1A72F16D00D33B74 /* DynamicPropertySpec.swift */, D0A226101A72F30B00D33B74 /* ObjectiveCBridgingSpec.swift */, - D0A2260D1A72F16D00D33B74 /* PropertySpec.swift */, - D0C312F219EF2A7700984962 /* SchedulerSpec.swift */, - 02D260291C1D6DAF003ACC61 /* SignalLifetimeSpec.swift */, - D8024DB11B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift */, - D0A2260A1A72E6C500D33B74 /* SignalProducerSpec.swift */, - D0A226071A72E0E900D33B74 /* SignalSpec.swift */, B696FB801A7640C00075236D /* TestError.swift */, - C79B64731CD38B2B003F2376 /* TestLogger.swift */, 9A1E72B91D4DE96500CC20C3 /* KeyValueObservingSpec.swift */, ); path = Swift; @@ -2149,9 +1994,9 @@ productReference = A9B315541B3940610001CB9C /* ReactiveCocoa.framework */; productType = "com.apple.product-type.framework"; }; - D04725E919E49ED7006002AA /* ReactiveCocoa-Mac */ = { + D04725E919E49ED7006002AA /* ReactiveCocoa-macOS */ = { isa = PBXNativeTarget; - buildConfigurationList = D047260019E49ED7006002AA /* Build configuration list for PBXNativeTarget "ReactiveCocoa-Mac" */; + buildConfigurationList = D047260019E49ED7006002AA /* Build configuration list for PBXNativeTarget "ReactiveCocoa-macOS" */; buildPhases = ( D04725E519E49ED7006002AA /* Sources */, D04725E619E49ED7006002AA /* Frameworks */, @@ -2162,14 +2007,14 @@ ); dependencies = ( ); - name = "ReactiveCocoa-Mac"; + name = "ReactiveCocoa-macOS"; productName = ReactiveCocoa; productReference = D04725EA19E49ED7006002AA /* ReactiveCocoa.framework */; productType = "com.apple.product-type.framework"; }; - D04725F419E49ED7006002AA /* ReactiveCocoa-MacTests */ = { + D04725F419E49ED7006002AA /* ReactiveCocoa-macOSTests */ = { isa = PBXNativeTarget; - buildConfigurationList = D047260319E49ED7006002AA /* Build configuration list for PBXNativeTarget "ReactiveCocoa-MacTests" */; + buildConfigurationList = D047260319E49ED7006002AA /* Build configuration list for PBXNativeTarget "ReactiveCocoa-macOSTests" */; buildPhases = ( D04725F119E49ED7006002AA /* Sources */, D04725F219E49ED7006002AA /* Frameworks */, @@ -2180,7 +2025,7 @@ dependencies = ( D04725F819E49ED7006002AA /* PBXTargetDependency */, ); - name = "ReactiveCocoa-MacTests"; + name = "ReactiveCocoa-macOSTests"; productName = ReactiveCocoaTests; productReference = D04725F519E49ED7006002AA /* ReactiveCocoaTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; @@ -2273,8 +2118,8 @@ projectDirPath = ""; projectRoot = ""; targets = ( - D04725E919E49ED7006002AA /* ReactiveCocoa-Mac */, - D04725F419E49ED7006002AA /* ReactiveCocoa-MacTests */, + D04725E919E49ED7006002AA /* ReactiveCocoa-macOS */, + D04725F419E49ED7006002AA /* ReactiveCocoa-macOSTests */, D047260B19E49F82006002AA /* ReactiveCocoa-iOS */, D047261519E49F82006002AA /* ReactiveCocoa-iOSTests */, A9B315531B3940610001CB9C /* ReactiveCocoa-watchOS */, @@ -2344,29 +2189,16 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 57A4D1B11BA13D7A00F7D4B1 /* Optional.swift in Sources */, 57D476951C4206EC00EFE697 /* UITableViewCell+RACSignalSupport.m in Sources */, 57A4D1B21BA13D7A00F7D4B1 /* RACCompoundDisposableProvider.d in Sources */, 57D476901C4206D400EFE697 /* UIControl+RACSignalSupportPrivate.m in Sources */, 57A4D1B31BA13D7A00F7D4B1 /* RACSignalProvider.d in Sources */, - 57A4D1B41BA13D7A00F7D4B1 /* Disposable.swift in Sources */, - 57A4D1B61BA13D7A00F7D4B1 /* Event.swift in Sources */, 57A4D1B71BA13D7A00F7D4B1 /* ObjectiveCBridging.swift in Sources */, - 57A4D1B81BA13D7A00F7D4B1 /* Scheduler.swift in Sources */, - 57A4D1B91BA13D7A00F7D4B1 /* Action.swift in Sources */, - 57A4D1BA1BA13D7A00F7D4B1 /* Property.swift in Sources */, - 57A4D1BB1BA13D7A00F7D4B1 /* Signal.swift in Sources */, - 57A4D1BC1BA13D7A00F7D4B1 /* SignalProducer.swift in Sources */, - 57A4D1BD1BA13D7A00F7D4B1 /* Atomic.swift in Sources */, - 57A4D1BE1BA13D7A00F7D4B1 /* Bag.swift in Sources */, - 57A4D1BF1BA13D7A00F7D4B1 /* TupleExtensions.swift in Sources */, - 57A4D1C01BA13D7A00F7D4B1 /* FoundationExtensions.swift in Sources */, 57A4D1C11BA13D7A00F7D4B1 /* EXTRuntimeExtensions.m in Sources */, 57A4D1C21BA13D7A00F7D4B1 /* NSArray+RACSequenceAdditions.m in Sources */, 57A4D1C31BA13D7A00F7D4B1 /* NSData+RACSupport.m in Sources */, 57A4D1C41BA13D7A00F7D4B1 /* NSDictionary+RACSequenceAdditions.m in Sources */, 57A4D1C51BA13D7A00F7D4B1 /* NSEnumerator+RACSequenceAdditions.m in Sources */, - D85C652D1C0E70E5005A77AD /* Flatten.swift in Sources */, 57D476961C4206EC00EFE697 /* UITableViewHeaderFooterView+RACSignalSupport.m in Sources */, 57A4D1C61BA13D7A00F7D4B1 /* NSFileHandle+RACSupport.m in Sources */, 57A4D1C71BA13D7A00F7D4B1 /* NSIndexSet+RACSequenceAdditions.m in Sources */, @@ -2380,7 +2212,6 @@ 57A4D1CD1BA13D7A00F7D4B1 /* NSObject+RACLifting.m in Sources */, 57A4D1CE1BA13D7A00F7D4B1 /* NSObject+RACPropertySubscribing.m in Sources */, 57A4D1CF1BA13D7A00F7D4B1 /* NSObject+RACSelectorSignal.m in Sources */, - 9ABCB1881D2A5B5A00BCA243 /* Deprecations+Removals.swift in Sources */, 57D476981C4206EC00EFE697 /* UITextView+RACSignalSupport.m in Sources */, 57A4D1D01BA13D7A00F7D4B1 /* NSOrderedSet+RACSequenceAdditions.m in Sources */, 57A4D1D11BA13D7A00F7D4B1 /* NSSet+RACSequenceAdditions.m in Sources */, @@ -2399,14 +2230,12 @@ 57A4D1DD1BA13D7A00F7D4B1 /* RACDelegateProxy.m in Sources */, 57A4D1DE1BA13D7A00F7D4B1 /* RACDisposable.m in Sources */, 9AD0F06D1D48BA4800ADFAB7 /* NSObject+KeyValueObserving.swift in Sources */, - EBCC7DBF1BBF01E200A2AE92 /* Observer.swift in Sources */, 57A4D1DF1BA13D7A00F7D4B1 /* RACDynamicSequence.m in Sources */, C7142DBF1CDEA195009F402D /* CocoaAction.swift in Sources */, 57A4D1E01BA13D7A00F7D4B1 /* RACDynamicSignal.m in Sources */, 57A4D1E11BA13D7A00F7D4B1 /* RACEagerSequence.m in Sources */, - C79B64801CD52E4E003F2376 /* EventLogger.swift in Sources */, 57D4768D1C42063C00EFE697 /* UIControl+RACSignalSupport.m in Sources */, - 4A0E11021D2A92720065D310 /* Lifetime.swift in Sources */, + 4A0E11021D2A92720065D310 /* NSObject+Lifetime.swift in Sources */, 57A4D1E21BA13D7A00F7D4B1 /* RACEmptySequence.m in Sources */, 57A4D1E31BA13D7A00F7D4B1 /* RACEmptySignal.m in Sources */, 57A4D1E41BA13D7A00F7D4B1 /* RACErrorSignal.m in Sources */, @@ -2433,7 +2262,6 @@ 57A4D1F81BA13D7A00F7D4B1 /* RACSignalSequence.m in Sources */, 57A4D1F91BA13D7A00F7D4B1 /* RACStream.m in Sources */, 57A4D1FA1BA13D7A00F7D4B1 /* RACStringSequence.m in Sources */, - 9A694EF61D5CE02E009B05BD /* UnidirectionalBinding.swift in Sources */, CD0C45E11CC9A288009F5BF0 /* DynamicProperty.swift in Sources */, 57A4D1FB1BA13D7A00F7D4B1 /* RACSubject.m in Sources */, 57A4D1FC1BA13D7A00F7D4B1 /* RACSubscriber.m in Sources */, @@ -2453,21 +2281,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 7DFBED221CDB8DE300EE435B /* ActionSpec.swift in Sources */, - 7DFBED231CDB8DE300EE435B /* AtomicSpec.swift in Sources */, - 7DFBED241CDB8DE300EE435B /* BagSpec.swift in Sources */, - 7DFBED251CDB8DE300EE435B /* DisposableSpec.swift in Sources */, - 7DFBED261CDB8DE300EE435B /* FoundationExtensionsSpec.swift in Sources */, 7DFBED271CDB8DE300EE435B /* ObjectiveCBridgingSpec.swift in Sources */, - 7DFBED281CDB8DE300EE435B /* PropertySpec.swift in Sources */, - 7DFBED291CDB8DE300EE435B /* SchedulerSpec.swift in Sources */, - 7DFBED2A1CDB8DE300EE435B /* SignalLifetimeSpec.swift in Sources */, - 7DFBED2B1CDB8DE300EE435B /* SignalProducerSpec.swift in Sources */, - 7DFBED2C1CDB8DE300EE435B /* SignalProducerLiftingSpec.swift in Sources */, - 7DFBED2D1CDB8DE300EE435B /* SignalSpec.swift in Sources */, - 7DFBED2E1CDB8DE300EE435B /* FlattenSpec.swift in Sources */, - 7DFBED2F1CDB8DE300EE435B /* TestError.swift in Sources */, - 7DFBED301CDB8DE300EE435B /* TestLogger.swift in Sources */, + 7DFBED281CDB8DE300EE435B /* DynamicPropertySpec.swift in Sources */, 7DFBED321CDB8DE300EE435B /* NSEnumeratorRACSequenceAdditionsSpec.m in Sources */, 7DFBED331CDB8DE300EE435B /* NSNotificationCenterRACSupportSpec.m in Sources */, 7DFBED351CDB8DE300EE435B /* NSObjectRACDeallocatingSpec.m in Sources */, @@ -2476,7 +2291,6 @@ 7DFBED391CDB8DE300EE435B /* NSObjectRACPropertySubscribingSpec.m in Sources */, 7DFBED3A1CDB8DE300EE435B /* NSObjectRACSelectorSignalSpec.m in Sources */, 7DFBED3B1CDB8DE300EE435B /* NSStringRACKeyPathUtilitiesSpec.m in Sources */, - 4A0E11061D2A95200065D310 /* LifetimeSpec.swift in Sources */, 7DFBED3D1CDB8DE300EE435B /* NSUserDefaultsRACSupportSpec.m in Sources */, 7DFBED3E1CDB8DE300EE435B /* RACBlockTrampolineSpec.m in Sources */, 7DFBED401CDB8DE300EE435B /* RACChannelExamples.m in Sources */, @@ -2514,6 +2328,7 @@ 7DFBED671CDB8DE300EE435B /* RACTestExampleScheduler.m in Sources */, 7DFBED691CDB8DE300EE435B /* RACTestObject.m in Sources */, 7DFBED6A1CDB8DE300EE435B /* RACTestSchedulerSpec.m in Sources */, + BEE020661D637B0000DF261F /* TestError.swift in Sources */, 7DFBED6C1CDB8DE300EE435B /* RACTestUIButton.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -2522,32 +2337,18 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - A9F793341B60D0140026BCBA /* Optional.swift in Sources */, A9B316341B394C7F0001CB9C /* RACCompoundDisposableProvider.d in Sources */, A9B316351B394C7F0001CB9C /* RACSignalProvider.d in Sources */, - A9B315BC1B3940810001CB9C /* Disposable.swift in Sources */, - A9B315BE1B3940810001CB9C /* Event.swift in Sources */, A9B315BF1B3940810001CB9C /* ObjectiveCBridging.swift in Sources */, - A9B315C01B3940810001CB9C /* Scheduler.swift in Sources */, - A9B315C11B3940810001CB9C /* Action.swift in Sources */, - A9B315C21B3940810001CB9C /* Property.swift in Sources */, - A9B315C31B3940810001CB9C /* Signal.swift in Sources */, - A9B315C41B3940810001CB9C /* SignalProducer.swift in Sources */, - A9B315C51B3940810001CB9C /* Atomic.swift in Sources */, - A9B315C61B3940810001CB9C /* Bag.swift in Sources */, - A9B315C71B3940810001CB9C /* TupleExtensions.swift in Sources */, - A9B315C81B3940810001CB9C /* FoundationExtensions.swift in Sources */, A9B3155E1B3940750001CB9C /* EXTRuntimeExtensions.m in Sources */, A9B315601B3940750001CB9C /* NSArray+RACSequenceAdditions.m in Sources */, A9B315631B3940750001CB9C /* NSData+RACSupport.m in Sources */, A9B315641B3940750001CB9C /* NSDictionary+RACSequenceAdditions.m in Sources */, A9B315651B3940750001CB9C /* NSEnumerator+RACSequenceAdditions.m in Sources */, - D85C652C1C0E70E4005A77AD /* Flatten.swift in Sources */, A9B315661B3940750001CB9C /* NSFileHandle+RACSupport.m in Sources */, A9B315671B3940750001CB9C /* NSIndexSet+RACSequenceAdditions.m in Sources */, A9B315681B3940750001CB9C /* NSInvocation+RACTypeParsing.m in Sources */, A9B315691B3940750001CB9C /* NSNotificationCenter+RACSupport.m in Sources */, - 9ABCB1871D2A5B5A00BCA243 /* Deprecations+Removals.swift in Sources */, A9B3156B1B3940750001CB9C /* NSObject+RACDeallocating.m in Sources */, A9B3156C1B3940750001CB9C /* NSObject+RACDescription.m in Sources */, A9B3156D1B3940750001CB9C /* NSObject+RACKVOWrapper.m in Sources */, @@ -2568,8 +2369,6 @@ A9B3157E1B3940750001CB9C /* RACCompoundDisposable.m in Sources */, A9B3157F1B3940750001CB9C /* RACDelegateProxy.m in Sources */, A9B315801B3940750001CB9C /* RACDisposable.m in Sources */, - EBCC7DBE1BBF01E200A2AE92 /* Observer.swift in Sources */, - C79B647F1CD52E4D003F2376 /* EventLogger.swift in Sources */, A9B315811B3940750001CB9C /* RACDynamicSequence.m in Sources */, A9B315821B3940750001CB9C /* RACDynamicSignal.m in Sources */, A9B315831B3940750001CB9C /* RACEagerSequence.m in Sources */, @@ -2585,7 +2384,6 @@ A9B3158D1B3940750001CB9C /* RACKVOTrampoline.m in Sources */, A9B3158E1B3940750001CB9C /* RACMulticastConnection.m in Sources */, C7142DBE1CDEA194009F402D /* CocoaAction.swift in Sources */, - 9A694EF51D5CE02E009B05BD /* UnidirectionalBinding.swift in Sources */, A9B315901B3940750001CB9C /* RACPassthroughSubscriber.m in Sources */, A9B315911B3940750001CB9C /* RACQueueScheduler.m in Sources */, A9B315921B3940750001CB9C /* RACReplaySubject.m in Sources */, @@ -2601,7 +2399,7 @@ A9B3159C1B3940750001CB9C /* RACStringSequence.m in Sources */, CD0C45E01CC9A288009F5BF0 /* DynamicProperty.swift in Sources */, A9B3159D1B3940750001CB9C /* RACSubject.m in Sources */, - 4A0E11011D2A92720065D310 /* Lifetime.swift in Sources */, + 4A0E11011D2A92720065D310 /* NSObject+Lifetime.swift in Sources */, A9B3159E1B3940750001CB9C /* RACSubscriber.m in Sources */, A9B3159F1B3940750001CB9C /* RACSubscriptingAssignmentTrampoline.m in Sources */, A9B315A01B3940750001CB9C /* RACSubscriptionScheduler.m in Sources */, @@ -2625,13 +2423,9 @@ D03765C819EDA41200A782A9 /* RACScopedDisposable.m in Sources */, D03764FE19EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.m in Sources */, D03764EA19EDA41200A782A9 /* NSArray+RACSequenceAdditions.m in Sources */, - D00004091A46864E000E7D41 /* TupleExtensions.swift in Sources */, D03765C019EDA41200A782A9 /* RACScheduler.m in Sources */, D037659819EDA41200A782A9 /* RACIndexSetSequence.m in Sources */, D03765D819EDA41200A782A9 /* RACSignal+Operations.m in Sources */, - D871D69F1B3B29A40070F16C /* Optional.swift in Sources */, - D08C54B61A69A3DB00AD8286 /* Event.swift in Sources */, - 9A694EF31D5CE02E009B05BD /* UnidirectionalBinding.swift in Sources */, D03764F219EDA41200A782A9 /* NSControl+RACTextSignalSupport.m in Sources */, D037650219EDA41200A782A9 /* NSFileHandle+RACSupport.m in Sources */, D03765E219EDA41200A782A9 /* RACStream.m in Sources */, @@ -2640,19 +2434,15 @@ D03765B819EDA41200A782A9 /* RACReplaySubject.m in Sources */, D03765EC19EDA41200A782A9 /* RACSubject.m in Sources */, D03765D019EDA41200A782A9 /* RACSerialDisposable.m in Sources */, - D0C312D319EF2A5800984962 /* Disposable.swift in Sources */, D037666F19EDA57100A782A9 /* EXTRuntimeExtensions.m in Sources */, D037653E19EDA41200A782A9 /* NSString+RACSupport.m in Sources */, D037653619EDA41200A782A9 /* NSString+RACKeyPathUtilities.m in Sources */, D03764FA19EDA41200A782A9 /* NSDictionary+RACSequenceAdditions.m in Sources */, - EBCC7DBC1BBF010C00A2AE92 /* Observer.swift in Sources */, CD0C45DE1CC9A288009F5BF0 /* DynamicProperty.swift in Sources */, D037656819EDA41200A782A9 /* RACCompoundDisposableProvider.d in Sources */, - D03B4A3D19F4C39A009E02AC /* FoundationExtensions.swift in Sources */, D037653A19EDA41200A782A9 /* NSString+RACSequenceAdditions.m in Sources */, D03765E819EDA41200A782A9 /* RACStringSequence.m in Sources */, D03764EE19EDA41200A782A9 /* NSControl+RACCommandSupport.m in Sources */, - D08C54B31A69A2AE00AD8286 /* Signal.swift in Sources */, 9AD0F06A1D48BA4800ADFAB7 /* NSObject+KeyValueObserving.swift in Sources */, D037660A19EDA41200A782A9 /* RACTupleSequence.m in Sources */, D03765D419EDA41200A782A9 /* RACSignal.m in Sources */, @@ -2663,8 +2453,6 @@ D037650619EDA41200A782A9 /* NSIndexSet+RACSequenceAdditions.m in Sources */, D037650E19EDA41200A782A9 /* NSNotificationCenter+RACSupport.m in Sources */, D03765FA19EDA41200A782A9 /* RACSubscriptionScheduler.m in Sources */, - D85C652A1C0D84C7005A77AD /* Flatten.swift in Sources */, - D0C312CF19EF2A5800984962 /* Bag.swift in Sources */, D037658019EDA41200A782A9 /* RACEmptySequence.m in Sources */, D037654A19EDA41200A782A9 /* NSUserDefaults+RACSupport.m in Sources */, D037660E19EDA41200A782A9 /* RACUnarySequence.m in Sources */, @@ -2687,9 +2475,7 @@ D037659419EDA41200A782A9 /* RACImmediateScheduler.m in Sources */, 7A7065811A3F88B8001E8354 /* RACKVOProxy.m in Sources */, D037651619EDA41200A782A9 /* NSObject+RACDeallocating.m in Sources */, - 4A0E10FF1D2A92720065D310 /* Lifetime.swift in Sources */, - D0C312E719EF2A5800984962 /* Scheduler.swift in Sources */, - D0C312CD19EF2A5800984962 /* Atomic.swift in Sources */, + 4A0E10FF1D2A92720065D310 /* NSObject+Lifetime.swift in Sources */, D037658419EDA41200A782A9 /* RACEmptySignal.m in Sources */, D037654619EDA41200A782A9 /* NSURLConnection+RACSupport.m in Sources */, D03765F019EDA41200A782A9 /* RACSubscriber.m in Sources */, @@ -2697,21 +2483,16 @@ D037656219EDA41200A782A9 /* RACCommand.m in Sources */, D037658819EDA41200A782A9 /* RACErrorSignal.m in Sources */, D03765F619EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.m in Sources */, - D08C54BA1A69C54300AD8286 /* Property.swift in Sources */, - D0D11AB91A6AE87700C1F8B1 /* Action.swift in Sources */, D037661219EDA41200A782A9 /* RACUnit.m in Sources */, D03765A019EDA41200A782A9 /* RACKVOTrampoline.m in Sources */, D037650A19EDA41200A782A9 /* NSInvocation+RACTypeParsing.m in Sources */, D037660619EDA41200A782A9 /* RACTuple.m in Sources */, D037651E19EDA41200A782A9 /* NSObject+RACKVOWrapper.m in Sources */, D037661619EDA41200A782A9 /* RACValueTransformer.m in Sources */, - C79B647C1CD52E23003F2376 /* EventLogger.swift in Sources */, D03765CC19EDA41200A782A9 /* RACSequence.m in Sources */, - 9ABCB1851D2A5B5A00BCA243 /* Deprecations+Removals.swift in Sources */, D037652E19EDA41200A782A9 /* NSOrderedSet+RACSequenceAdditions.m in Sources */, D037652619EDA41200A782A9 /* NSObject+RACPropertySubscribing.m in Sources */, D037658C19EDA41200A782A9 /* RACEvent.m in Sources */, - D08C54B81A69A9D000AD8286 /* SignalProducer.swift in Sources */, D03765B219EDA41200A782A9 /* RACQueueScheduler.m in Sources */, D037652A19EDA41200A782A9 /* NSObject+RACSelectorSignal.m in Sources */, D03765AE19EDA41200A782A9 /* RACPassthroughSubscriber.m in Sources */, @@ -2723,51 +2504,39 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D0A2260E1A72F16D00D33B74 /* PropertySpec.swift in Sources */, + D0A2260E1A72F16D00D33B74 /* DynamicPropertySpec.swift in Sources */, D03766C719EDA60000A782A9 /* NSObjectRACPropertySubscribingExamples.m in Sources */, D03766E319EDA60000A782A9 /* RACDelegateProxySpec.m in Sources */, B696FB811A7640C00075236D /* TestError.swift in Sources */, - D021671D1A6CD50500987861 /* ActionSpec.swift in Sources */, D03766F919EDA60000A782A9 /* RACSerialDisposableSpec.m in Sources */, D0C3131E19EF2D9700984962 /* RACTestExampleScheduler.m in Sources */, D037670B19EDA60000A782A9 /* RACTargetQueueSchedulerSpec.m in Sources */, D03766DD19EDA60000A782A9 /* RACCommandSpec.m in Sources */, - D0C3130E19EF2B1F00984962 /* SchedulerSpec.swift in Sources */, D037670919EDA60000A782A9 /* RACSubscriptingAssignmentTrampolineSpec.m in Sources */, BFA6B94D1A7604D400C846D1 /* SignalProducerNimbleMatchers.swift in Sources */, D03766EB19EDA60000A782A9 /* RACKVOWrapperSpec.m in Sources */, D03766E719EDA60000A782A9 /* RACEventSpec.m in Sources */, D03766F719EDA60000A782A9 /* RACSequenceSpec.m in Sources */, - D8170FC11B100EBC004192AD /* FoundationExtensionsSpec.swift in Sources */, D03766C919EDA60000A782A9 /* NSObjectRACPropertySubscribingSpec.m in Sources */, D03766C319EDA60000A782A9 /* NSObjectRACDeallocatingSpec.m in Sources */, - C79B64741CD38B2B003F2376 /* TestLogger.swift in Sources */, D03766BD19EDA60000A782A9 /* NSEnumeratorRACSequenceAdditionsSpec.m in Sources */, - CA6F28501C52626B001879D2 /* FlattenSpec.swift in Sources */, D037670119EDA60000A782A9 /* RACSubclassObject.m in Sources */, D03766CD19EDA60000A782A9 /* NSStringRACKeyPathUtilitiesSpec.m in Sources */, - 4A0E11041D2A95200065D310 /* LifetimeSpec.swift in Sources */, D037671519EDA60000A782A9 /* RACTupleSpec.m in Sources */, D03766C519EDA60000A782A9 /* NSObjectRACLiftingSpec.m in Sources */, D03766D119EDA60000A782A9 /* NSURLConnectionRACSupportSpec.m in Sources */, D03766F319EDA60000A782A9 /* RACSequenceAdditionsSpec.m in Sources */, D03766ED19EDA60000A782A9 /* RACMulticastConnectionSpec.m in Sources */, - CDCD247A1C277EEC00710AEE /* AtomicSpec.swift in Sources */, D03766E919EDA60000A782A9 /* RACKVOChannelSpec.m in Sources */, D03766FB19EDA60000A782A9 /* RACSignalSpec.m in Sources */, 7A7065841A3F8967001E8354 /* RACKVOProxySpec.m in Sources */, - 579504331BB8A34200A5E482 /* BagSpec.swift in Sources */, D037670719EDA60000A782A9 /* RACSubscriberSpec.m in Sources */, CD8401831CEE8ED7009F0ABF /* CocoaActionSpec.swift in Sources */, D03766EF19EDA60000A782A9 /* RACPropertySignalExamples.m in Sources */, D037670519EDA60000A782A9 /* RACSubscriberExamples.m in Sources */, 9A1E72BA1D4DE96500CC20C3 /* KeyValueObservingSpec.swift in Sources */, - D0A226081A72E0E900D33B74 /* SignalSpec.swift in Sources */, D0C3132219EF2D9700984962 /* RACTestSchedulerSpec.m in Sources */, - 02D2602B1C1D6DB8003ACC61 /* SignalLifetimeSpec.swift in Sources */, - D0C3130C19EF2B1F00984962 /* DisposableSpec.swift in Sources */, D03766D719EDA60000A782A9 /* RACBlockTrampolineSpec.m in Sources */, - D0A2260B1A72E6C500D33B74 /* SignalProducerSpec.swift in Sources */, D03766FF19EDA60000A782A9 /* RACStreamExamples.m in Sources */, D03766CB19EDA60000A782A9 /* NSObjectRACSelectorSignalSpec.m in Sources */, D03766E119EDA60000A782A9 /* RACControlCommandExamples.m in Sources */, @@ -2783,7 +2552,6 @@ D0A226111A72F30B00D33B74 /* ObjectiveCBridgingSpec.swift in Sources */, D03766D919EDA60000A782A9 /* RACChannelExamples.m in Sources */, D03766F519EDA60000A782A9 /* RACSequenceExamples.m in Sources */, - D8024DB21B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift in Sources */, D03766B919EDA60000A782A9 /* NSControllerRACSupportSpec.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -2793,23 +2561,18 @@ buildActionMask = 2147483647; files = ( D037659D19EDA41200A782A9 /* RACKVOChannel.m in Sources */, - D08C54B41A69A2AF00AD8286 /* Signal.swift in Sources */, D037666319EDA41200A782A9 /* UITextView+RACSignalSupport.m in Sources */, D037662F19EDA41200A782A9 /* UIControl+RACSignalSupport.m in Sources */, D03765C919EDA41200A782A9 /* RACScopedDisposable.m in Sources */, D03764FF19EDA41200A782A9 /* NSEnumerator+RACSequenceAdditions.m in Sources */, D037664719EDA41200A782A9 /* UISegmentedControl+RACSignalSupport.m in Sources */, - D8E84A671B3B32FB00C3E831 /* Optional.swift in Sources */, D03764EB19EDA41200A782A9 /* NSArray+RACSequenceAdditions.m in Sources */, - D0C312D419EF2A5800984962 /* Disposable.swift in Sources */, D03765C119EDA41200A782A9 /* RACScheduler.m in Sources */, D037662B19EDA41200A782A9 /* UICollectionReusableView+RACSignalSupport.m in Sources */, D037659919EDA41200A782A9 /* RACIndexSetSequence.m in Sources */, D03765D919EDA41200A782A9 /* RACSignal+Operations.m in Sources */, D037661B19EDA41200A782A9 /* UIActionSheet+RACSignalSupport.m in Sources */, D037650319EDA41200A782A9 /* NSFileHandle+RACSupport.m in Sources */, - D08C54B91A69A9D100AD8286 /* SignalProducer.swift in Sources */, - 9ABCB1861D2A5B5A00BCA243 /* Deprecations+Removals.swift in Sources */, D03765E319EDA41200A782A9 /* RACStream.m in Sources */, D037655719EDA41200A782A9 /* RACBehaviorSubject.m in Sources */, D037663B19EDA41200A782A9 /* UIGestureRecognizer+RACSignalSupport.m in Sources */, @@ -2818,7 +2581,6 @@ D03765ED19EDA41200A782A9 /* RACSubject.m in Sources */, D037664F19EDA41200A782A9 /* UIStepper+RACSignalSupport.m in Sources */, D03765D119EDA41200A782A9 /* RACSerialDisposable.m in Sources */, - EBCC7DBD1BBF01E100A2AE92 /* Observer.swift in Sources */, D037663F19EDA41200A782A9 /* UIImagePickerController+RACSignalSupport.m in Sources */, D037653F19EDA41200A782A9 /* NSString+RACSupport.m in Sources */, D037653719EDA41200A782A9 /* NSString+RACKeyPathUtilities.m in Sources */, @@ -2834,7 +2596,6 @@ D037664319EDA41200A782A9 /* UIRefreshControl+RACCommandSupport.m in Sources */, D037651B19EDA41200A782A9 /* NSObject+RACDescription.m in Sources */, D03765A519EDA41200A782A9 /* RACMulticastConnection.m in Sources */, - D85C652B1C0E70E3005A77AD /* Flatten.swift in Sources */, D037654F19EDA41200A782A9 /* RACArraySequence.m in Sources */, D037652319EDA41200A782A9 /* NSObject+RACLifting.m in Sources */, C7142DBD1CDEA194009F402D /* CocoaAction.swift in Sources */, @@ -2842,19 +2603,16 @@ D037665F19EDA41200A782A9 /* UITextField+RACSignalSupport.m in Sources */, D037650F19EDA41200A782A9 /* NSNotificationCenter+RACSupport.m in Sources */, D03765FB19EDA41200A782A9 /* RACSubscriptionScheduler.m in Sources */, - 4A0E11001D2A92720065D310 /* Lifetime.swift in Sources */, + 4A0E11001D2A92720065D310 /* NSObject+Lifetime.swift in Sources */, D037658119EDA41200A782A9 /* RACEmptySequence.m in Sources */, D0C312E019EF2A5800984962 /* ObjectiveCBridging.swift in Sources */, D037654B19EDA41200A782A9 /* NSUserDefaults+RACSupport.m in Sources */, D037660F19EDA41200A782A9 /* RACUnarySequence.m in Sources */, - D08C54BB1A69C54400AD8286 /* Property.swift in Sources */, D03765FF19EDA41200A782A9 /* RACTargetQueueScheduler.m in Sources */, D03765DF19EDA41200A782A9 /* RACSignalSequence.m in Sources */, D037656D19EDA41200A782A9 /* RACDelegateProxy.m in Sources */, - D03B4A3E19F4C39A009E02AC /* FoundationExtensions.swift in Sources */, D037657519EDA41200A782A9 /* RACDynamicSequence.m in Sources */, D037657119EDA41200A782A9 /* RACDisposable.m in Sources */, - D000040A1A46864E000E7D41 /* TupleExtensions.swift in Sources */, D03765DB19EDA41200A782A9 /* RACSignalProvider.d in Sources */, D037653319EDA41200A782A9 /* NSSet+RACSequenceAdditions.m in Sources */, D037665319EDA41200A782A9 /* UISwitch+RACSignalSupport.m in Sources */, @@ -2869,13 +2627,9 @@ D037651719EDA41200A782A9 /* NSObject+RACDeallocating.m in Sources */, D037658519EDA41200A782A9 /* RACEmptySignal.m in Sources */, D037663719EDA41200A782A9 /* UIDatePicker+RACSignalSupport.m in Sources */, - D08C54B71A69A3DB00AD8286 /* Event.swift in Sources */, D037654719EDA41200A782A9 /* NSURLConnection+RACSupport.m in Sources */, D03765F119EDA41200A782A9 /* RACSubscriber.m in Sources */, D03764F719EDA41200A782A9 /* NSData+RACSupport.m in Sources */, - C79B647D1CD52E4A003F2376 /* EventLogger.swift in Sources */, - D0C312CE19EF2A5800984962 /* Atomic.swift in Sources */, - D0C312E819EF2A5800984962 /* Scheduler.swift in Sources */, D037656319EDA41200A782A9 /* RACCommand.m in Sources */, D037658919EDA41200A782A9 /* RACErrorSignal.m in Sources */, D03765F719EDA41200A782A9 /* RACSubscriptingAssignmentTrampoline.m in Sources */, @@ -2883,9 +2637,6 @@ D037662319EDA41200A782A9 /* UIBarButtonItem+RACCommandSupport.m in Sources */, D03765A119EDA41200A782A9 /* RACKVOTrampoline.m in Sources */, D037665B19EDA41200A782A9 /* UITableViewHeaderFooterView+RACSignalSupport.m in Sources */, - 9A694EF41D5CE02E009B05BD /* UnidirectionalBinding.swift in Sources */, - D0C312D019EF2A5800984962 /* Bag.swift in Sources */, - D0D11ABA1A6AE87700C1F8B1 /* Action.swift in Sources */, D037650B19EDA41200A782A9 /* NSInvocation+RACTypeParsing.m in Sources */, D037660719EDA41200A782A9 /* RACTuple.m in Sources */, D037667019EDA57100A782A9 /* EXTRuntimeExtensions.m in Sources */, @@ -2911,24 +2662,19 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D0A2260C1A72E6C500D33B74 /* SignalProducerSpec.swift in Sources */, D03766C819EDA60000A782A9 /* NSObjectRACPropertySubscribingExamples.m in Sources */, D037672419EDA60000A782A9 /* UIImagePickerControllerRACSupportSpec.m in Sources */, D03766E419EDA60000A782A9 /* RACDelegateProxySpec.m in Sources */, - D0A2260F1A72F16D00D33B74 /* PropertySpec.swift in Sources */, + D0A2260F1A72F16D00D33B74 /* DynamicPropertySpec.swift in Sources */, D03766FA19EDA60000A782A9 /* RACSerialDisposableSpec.m in Sources */, - D0A226091A72E0E900D33B74 /* SignalSpec.swift in Sources */, - CDCD247B1C277EED00710AEE /* AtomicSpec.swift in Sources */, D037670C19EDA60000A782A9 /* RACTargetQueueSchedulerSpec.m in Sources */, D03766DE19EDA60000A782A9 /* RACCommandSpec.m in Sources */, D037670A19EDA60000A782A9 /* RACSubscriptingAssignmentTrampolineSpec.m in Sources */, D03766EC19EDA60000A782A9 /* RACKVOWrapperSpec.m in Sources */, - D021671E1A6CD50500987861 /* ActionSpec.swift in Sources */, D03766E819EDA60000A782A9 /* RACEventSpec.m in Sources */, D03766F819EDA60000A782A9 /* RACSequenceSpec.m in Sources */, D0A226121A72F30B00D33B74 /* ObjectiveCBridgingSpec.swift in Sources */, D037671E19EDA60000A782A9 /* UIBarButtonItemRACSupportSpec.m in Sources */, - D8024DB31B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift in Sources */, BFA6B94E1A7604D500C846D1 /* SignalProducerNimbleMatchers.swift in Sources */, D03766CA19EDA60000A782A9 /* NSObjectRACPropertySubscribingSpec.m in Sources */, D0C3132319EF2D9700984962 /* RACTestSchedulerSpec.m in Sources */, @@ -2943,15 +2689,10 @@ D03766C619EDA60000A782A9 /* NSObjectRACLiftingSpec.m in Sources */, B696FB821A7640C00075236D /* TestError.swift in Sources */, D0C3131F19EF2D9700984962 /* RACTestExampleScheduler.m in Sources */, - D8170FC21B100EBC004192AD /* FoundationExtensionsSpec.swift in Sources */, D03766D219EDA60000A782A9 /* NSURLConnectionRACSupportSpec.m in Sources */, D03766F419EDA60000A782A9 /* RACSequenceAdditionsSpec.m in Sources */, - D0C3131419EF2B2000984962 /* SchedulerSpec.swift in Sources */, - C79B64751CD38B2B003F2376 /* TestLogger.swift in Sources */, - D0C3131219EF2B2000984962 /* DisposableSpec.swift in Sources */, D03766EE19EDA60000A782A9 /* RACMulticastConnectionSpec.m in Sources */, D03766EA19EDA60000A782A9 /* RACKVOChannelSpec.m in Sources */, - CA6F28511C52626B001879D2 /* FlattenSpec.swift in Sources */, D0C3132119EF2D9700984962 /* RACTestObject.m in Sources */, D03766FC19EDA60000A782A9 /* RACSignalSpec.m in Sources */, D037670819EDA60000A782A9 /* RACSubscriberSpec.m in Sources */, @@ -2970,13 +2711,10 @@ D03766E619EDA60000A782A9 /* RACDisposableSpec.m in Sources */, D03766D419EDA60000A782A9 /* NSUserDefaultsRACSupportSpec.m in Sources */, D03766DC19EDA60000A782A9 /* RACChannelSpec.m in Sources */, - 579504341BB8A34300A5E482 /* BagSpec.swift in Sources */, D037671A19EDA60000A782A9 /* UIActionSheetRACSupportSpec.m in Sources */, D03766DA19EDA60000A782A9 /* RACChannelExamples.m in Sources */, D03766F619EDA60000A782A9 /* RACSequenceExamples.m in Sources */, CD8401841CEE8ED7009F0ABF /* CocoaActionSpec.swift in Sources */, - 4A0E11051D2A95200065D310 /* LifetimeSpec.swift in Sources */, - 02D2602A1C1D6DAF003ACC61 /* SignalLifetimeSpec.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2990,7 +2728,7 @@ }; D04725F819E49ED7006002AA /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = D04725E919E49ED7006002AA /* ReactiveCocoa-Mac */; + target = D04725E919E49ED7006002AA /* ReactiveCocoa-macOS */; targetProxy = D04725F719E49ED7006002AA /* PBXContainerItemProxy */; }; D047261919E49F82006002AA /* PBXTargetDependency */ = { @@ -3188,11 +2926,9 @@ BITCODE_GENERATION_MODE = bitcode; CODE_SIGNING_REQUIRED = NO; CURRENT_PROJECT_VERSION = 1; - ENABLE_BITCODE = NO; ENABLE_TESTABILITY = YES; IPHONEOS_DEPLOYMENT_TARGET = 8.0; MACOSX_DEPLOYMENT_TARGET = 10.9; - ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = "org.reactivecocoa.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(PROJECT_NAME)"; SWIFT_VERSION = 3.0; @@ -3210,7 +2946,6 @@ BITCODE_GENERATION_MODE = bitcode; CODE_SIGNING_REQUIRED = NO; CURRENT_PROJECT_VERSION = 1; - ENABLE_BITCODE = NO; GCC_OPTIMIZATION_LEVEL = 0; IPHONEOS_DEPLOYMENT_TARGET = 8.0; MACOSX_DEPLOYMENT_TARGET = 10.9; @@ -3339,7 +3074,6 @@ BITCODE_GENERATION_MODE = bitcode; CODE_SIGNING_REQUIRED = NO; CURRENT_PROJECT_VERSION = 1; - ENABLE_BITCODE = NO; IPHONEOS_DEPLOYMENT_TARGET = 8.0; MACOSX_DEPLOYMENT_TARGET = 10.9; PRODUCT_BUNDLE_IDENTIFIER = "org.reactivecocoa.$(PRODUCT_NAME:rfc1034identifier)"; @@ -3413,7 +3147,6 @@ BITCODE_GENERATION_MODE = bitcode; CODE_SIGNING_REQUIRED = NO; CURRENT_PROJECT_VERSION = 1; - ENABLE_BITCODE = NO; IPHONEOS_DEPLOYMENT_TARGET = 8.0; MACOSX_DEPLOYMENT_TARGET = 10.9; PRODUCT_BUNDLE_IDENTIFIER = "org.reactivecocoa.$(PRODUCT_NAME:rfc1034identifier)-Tests"; @@ -3527,7 +3260,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - D047260019E49ED7006002AA /* Build configuration list for PBXNativeTarget "ReactiveCocoa-Mac" */ = { + D047260019E49ED7006002AA /* Build configuration list for PBXNativeTarget "ReactiveCocoa-macOS" */ = { isa = XCConfigurationList; buildConfigurations = ( D047260119E49ED7006002AA /* Debug */, @@ -3538,7 +3271,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - D047260319E49ED7006002AA /* Build configuration list for PBXNativeTarget "ReactiveCocoa-MacTests" */ = { + D047260319E49ED7006002AA /* Build configuration list for PBXNativeTarget "ReactiveCocoa-macOSTests" */ = { isa = XCConfigurationList; buildConfigurations = ( D047260419E49ED7006002AA /* Debug */, diff --git a/ReactiveCocoa.xcodeproj/xcshareddata/xcschemes/ReactiveCocoa-iOS.xcscheme b/ReactiveCocoa.xcodeproj/xcshareddata/xcschemes/ReactiveCocoa-iOS.xcscheme index a7c0659a74..6381e6e4d3 100644 --- a/ReactiveCocoa.xcodeproj/xcshareddata/xcschemes/ReactiveCocoa-iOS.xcscheme +++ b/ReactiveCocoa.xcodeproj/xcshareddata/xcschemes/ReactiveCocoa-iOS.xcscheme @@ -20,6 +20,20 @@ ReferencedContainer = "container:Carthage/Checkouts/Result/Result.xcodeproj"> + + + + + + + + @@ -72,7 +86,7 @@ BuildableIdentifier = "primary" BlueprintIdentifier = "D04725F419E49ED7006002AA" BuildableName = "ReactiveCocoaTests.xctest" - BlueprintName = "ReactiveCocoa-MacTests" + BlueprintName = "ReactiveCocoa-macOSTests" ReferencedContainer = "container:ReactiveCocoa.xcodeproj"> @@ -91,7 +105,7 @@ BuildableIdentifier = "primary" BlueprintIdentifier = "D04725F419E49ED7006002AA" BuildableName = "ReactiveCocoaTests.xctest" - BlueprintName = "ReactiveCocoa-MacTests" + BlueprintName = "ReactiveCocoa-macOSTests" ReferencedContainer = "container:ReactiveCocoa.xcodeproj"> @@ -101,7 +115,7 @@ BuildableIdentifier = "primary" BlueprintIdentifier = "D04725E919E49ED7006002AA" BuildableName = "ReactiveCocoa.framework" - BlueprintName = "ReactiveCocoa-Mac" + BlueprintName = "ReactiveCocoa-macOS" ReferencedContainer = "container:ReactiveCocoa.xcodeproj"> @@ -123,7 +137,7 @@ BuildableIdentifier = "primary" BlueprintIdentifier = "D04725E919E49ED7006002AA" BuildableName = "ReactiveCocoa.framework" - BlueprintName = "ReactiveCocoa-Mac" + BlueprintName = "ReactiveCocoa-macOS" ReferencedContainer = "container:ReactiveCocoa.xcodeproj"> @@ -141,7 +155,7 @@ BuildableIdentifier = "primary" BlueprintIdentifier = "D04725E919E49ED7006002AA" BuildableName = "ReactiveCocoa.framework" - BlueprintName = "ReactiveCocoa-Mac" + BlueprintName = "ReactiveCocoa-macOS" ReferencedContainer = "container:ReactiveCocoa.xcodeproj"> diff --git a/ReactiveCocoa.xcodeproj/xcshareddata/xcschemes/ReactiveCocoa-tvOS.xcscheme b/ReactiveCocoa.xcodeproj/xcshareddata/xcschemes/ReactiveCocoa-tvOS.xcscheme index d32ed666ed..cb7acbc19a 100644 --- a/ReactiveCocoa.xcodeproj/xcshareddata/xcschemes/ReactiveCocoa-tvOS.xcscheme +++ b/ReactiveCocoa.xcodeproj/xcshareddata/xcschemes/ReactiveCocoa-tvOS.xcscheme @@ -20,6 +20,20 @@ ReferencedContainer = "container:Carthage/Checkouts/Result/Result.xcodeproj"> + + + + - - @@ -16,4 +13,7 @@ + + diff --git a/ReactiveCocoa/Swift/CocoaAction.swift b/ReactiveCocoa/Swift/CocoaAction.swift index dac51075ce..32548cbeaa 100644 --- a/ReactiveCocoa/Swift/CocoaAction.swift +++ b/ReactiveCocoa/Swift/CocoaAction.swift @@ -1,4 +1,5 @@ import Foundation +import ReactiveSwift /// Wraps an Action for use by a GUI control (such as `NSControl` or /// `UIControl`), with KVO, or with Cocoa Bindings. diff --git a/ReactiveCocoa/Swift/DynamicProperty.swift b/ReactiveCocoa/Swift/DynamicProperty.swift index 0cae822ee6..a4a0020474 100644 --- a/ReactiveCocoa/Swift/DynamicProperty.swift +++ b/ReactiveCocoa/Swift/DynamicProperty.swift @@ -1,4 +1,5 @@ import Foundation +import ReactiveSwift import enum Result.NoError /// Models types that can be represented in Objective-C (i.e., reference diff --git a/ReactiveCocoa/Swift/NSObject+KeyValueObserving.swift b/ReactiveCocoa/Swift/NSObject+KeyValueObserving.swift index 4545524b91..be0d2cc03a 100644 --- a/ReactiveCocoa/Swift/NSObject+KeyValueObserving.swift +++ b/ReactiveCocoa/Swift/NSObject+KeyValueObserving.swift @@ -1,4 +1,5 @@ import Foundation +import ReactiveSwift import enum Result.NoError extension NSObject { diff --git a/ReactiveCocoa/Swift/NSObject+Lifetime.swift b/ReactiveCocoa/Swift/NSObject+Lifetime.swift new file mode 100644 index 0000000000..1f220d12d4 --- /dev/null +++ b/ReactiveCocoa/Swift/NSObject+Lifetime.swift @@ -0,0 +1,25 @@ +import Foundation +import ReactiveSwift + +private var lifetimeKey: UInt8 = 0 +private var lifetimeTokenKey: UInt8 = 0 + +extension NSObject { + /// Returns a lifetime that ends when the receiver is deallocated. + @nonobjc public var rac_lifetime: Lifetime { + objc_sync_enter(self) + defer { objc_sync_exit(self) } + + if let lifetime = objc_getAssociatedObject(self, &lifetimeKey) as! Lifetime? { + return lifetime + } + + let token = Lifetime.Token() + let lifetime = Lifetime(token) + + objc_setAssociatedObject(self, &lifetimeTokenKey, token, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + objc_setAssociatedObject(self, &lifetimeKey, lifetime, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + + return lifetime + } +} diff --git a/ReactiveCocoa/Swift/ObjectiveCBridging.swift b/ReactiveCocoa/Swift/ObjectiveCBridging.swift index c8a893d836..9ffd87e0ac 100644 --- a/ReactiveCocoa/Swift/ObjectiveCBridging.swift +++ b/ReactiveCocoa/Swift/ObjectiveCBridging.swift @@ -6,8 +6,24 @@ // Copyright (c) 2014 GitHub, Inc. All rights reserved. // +import Foundation +import ReactiveSwift import Result +extension SignalProtocol { + /// Turns each value into an Optional. + fileprivate func optionalize() -> Signal { + return map(Optional.init) + } +} + +extension SignalProducerProtocol { + /// Turns each value into an Optional. + fileprivate func optionalize() -> SignalProducer { + return lift { $0.optionalize() } + } +} + extension RACDisposable: Disposable {} extension RACScheduler: DateSchedulerProtocol { /// The current date, as determined by this scheduler. diff --git a/ReactiveCocoaTests/Swift/CocoaActionSpec.swift b/ReactiveCocoaTests/Swift/CocoaActionSpec.swift index a11db898e5..d99d777e96 100644 --- a/ReactiveCocoaTests/Swift/CocoaActionSpec.swift +++ b/ReactiveCocoaTests/Swift/CocoaActionSpec.swift @@ -1,3 +1,4 @@ +import ReactiveSwift import Result import Nimble import Quick diff --git a/ReactiveCocoaTests/Swift/DynamicPropertySpec.swift b/ReactiveCocoaTests/Swift/DynamicPropertySpec.swift new file mode 100644 index 0000000000..c1aafc4168 --- /dev/null +++ b/ReactiveCocoaTests/Swift/DynamicPropertySpec.swift @@ -0,0 +1,248 @@ +// +// DynamicPropertySpec.swift +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2015-01-23. +// Copyright (c) 2015 GitHub. All rights reserved. +// + +import ReactiveSwift +import Result +import Nimble +import Quick +import ReactiveCocoa + +private let initialPropertyValue = "InitialValue" +private let subsequentPropertyValue = "SubsequentValue" +private let finalPropertyValue = "FinalValue" + +private let initialOtherPropertyValue = "InitialOtherValue" +private let subsequentOtherPropertyValue = "SubsequentOtherValue" +private let finalOtherPropertyValue = "FinalOtherValue" + +class DynamicPropertySpec: QuickSpec { + override func spec() { + describe("DynamicProperty") { + var object: ObservableObject! + var property: DynamicProperty! + + let propertyValue: () -> Int? = { + if let value: Any = property?.value { + return value as? Int + } else { + return nil + } + } + + beforeEach { + object = ObservableObject() + expect(object.rac_value) == 0 + + property = DynamicProperty(object: object, keyPath: "rac_value") + } + + afterEach { + object = nil + } + + it("should read the underlying object") { + expect(propertyValue()) == 0 + + object.rac_value = 1 + expect(propertyValue()) == 1 + } + + it("should write the underlying object") { + property.value = 1 + expect(object.rac_value) == 1 + expect(propertyValue()) == 1 + } + + it("should yield a producer that sends the current value and then the changes for the key path of the underlying object") { + var values: [Int] = [] + property.producer.startWithNext { value in + expect(value).notTo(beNil()) + values.append(value!) + } + + expect(values) == [ 0 ] + + property.value = 1 + expect(values) == [ 0, 1 ] + + object.rac_value = 2 + expect(values) == [ 0, 1, 2 ] + } + + it("should yield a producer that sends the current value and then the changes for the key path of the underlying object, even if the value actually remains unchanged") { + var values: [Int] = [] + property.producer.startWithNext { value in + expect(value).notTo(beNil()) + values.append(value!) + } + + expect(values) == [ 0 ] + + property.value = 0 + expect(values) == [ 0, 0 ] + + object.rac_value = 0 + expect(values) == [ 0, 0, 0 ] + } + + it("should yield a signal that emits subsequent values for the key path of the underlying object") { + var values: [Int] = [] + property.signal.observeNext { value in + expect(value).notTo(beNil()) + values.append(value!) + } + + expect(values) == [] + + property.value = 1 + expect(values) == [ 1 ] + + object.rac_value = 2 + expect(values) == [ 1, 2 ] + } + + it("should yield a signal that emits subsequent values for the key path of the underlying object, even if the value actually remains unchanged") { + var values: [Int] = [] + property.signal.observeNext { value in + expect(value).notTo(beNil()) + values.append(value!) + } + + expect(values) == [] + + property.value = 0 + expect(values) == [ 0 ] + + object.rac_value = 0 + expect(values) == [ 0, 0 ] + } + + it("should have a completed producer when the underlying object deallocates") { + var completed = false + + property = { + // Use a closure so this object has a shorter lifetime. + let object = ObservableObject() + let property = DynamicProperty(object: object, keyPath: "rac_value") + + property.producer.startWithCompleted { + completed = true + } + + expect(completed) == false + expect(property.value).notTo(beNil()) + return property + }() + + expect(completed).toEventually(beTruthy()) + expect(property.value).to(beNil()) + } + + it("should have a completed signal when the underlying object deallocates") { + var completed = false + + property = { + // Use a closure so this object has a shorter lifetime. + let object = ObservableObject() + let property = DynamicProperty(object: object, keyPath: "rac_value") + + property.signal.observeCompleted { + completed = true + } + + expect(completed) == false + expect(property.value).notTo(beNil()) + return property + }() + + expect(completed).toEventually(beTruthy()) + expect(property.value).to(beNil()) + } + + it("should retain property while DynamicProperty's underlying object is retained"){ + weak var dynamicProperty: DynamicProperty? = property + + property = nil + expect(dynamicProperty).toNot(beNil()) + + object = nil + expect(dynamicProperty).to(beNil()) + } + + it("should support un-bridged reference types") { + let dynamicProperty = DynamicProperty(object: object, keyPath: "rac_reference") + dynamicProperty.value = UnbridgedObject("foo") + expect(object.rac_reference.value) == "foo" + } + + it("should expose a lifetime that ends upon the deinitialization of its underlying object") { + var isEnded = false + property!.lifetime.ended.observeCompleted { + isEnded = true + } + + expect(isEnded) == false + + property = nil + expect(isEnded) == false + + object = nil + expect(isEnded) == true + } + } + + describe("binding") { + describe("to a dynamic property") { + var object: ObservableObject! + var property: DynamicProperty! + + beforeEach { + object = ObservableObject() + expect(object.rac_value) == 0 + + property = DynamicProperty(object: object, keyPath: "rac_value") + } + + afterEach { + object = nil + } + + it("should bridge values sent on a signal to Objective-C") { + let (signal, observer) = Signal.pipe() + property <~ signal + observer.sendNext(1) + expect(object.rac_value) == 1 + } + + it("should bridge values sent on a signal producer to Objective-C") { + let producer = SignalProducer(value: 1) + property <~ producer + expect(object.rac_value) == 1 + } + + it("should bridge values from a source property to Objective-C") { + let source = MutableProperty(1) + property <~ source + expect(object.rac_value) == 1 + } + } + } + } +} + +private class ObservableObject: NSObject { + dynamic var rac_value: Int = 0 + dynamic var rac_reference: UnbridgedObject = UnbridgedObject("") +} + +private class UnbridgedObject: NSObject { + let value: String + init(_ value: String) { + self.value = value + } +} diff --git a/ReactiveCocoaTests/Swift/KeyValueObservingSpec.swift b/ReactiveCocoaTests/Swift/KeyValueObservingSpec.swift index a8ca47d08f..3c22ab7775 100644 --- a/ReactiveCocoaTests/Swift/KeyValueObservingSpec.swift +++ b/ReactiveCocoaTests/Swift/KeyValueObservingSpec.swift @@ -1,5 +1,6 @@ import Foundation @testable import ReactiveCocoa +import ReactiveSwift import enum Result.NoError import Quick import Nimble diff --git a/ReactiveCocoaTests/Swift/ObjectiveCBridgingSpec.swift b/ReactiveCocoaTests/Swift/ObjectiveCBridgingSpec.swift index fde257d82f..5853f2787e 100644 --- a/ReactiveCocoaTests/Swift/ObjectiveCBridgingSpec.swift +++ b/ReactiveCocoaTests/Swift/ObjectiveCBridgingSpec.swift @@ -6,6 +6,7 @@ // Copyright (c) 2015 GitHub. All rights reserved. // +import ReactiveSwift import Result import Nimble import Quick diff --git a/ReactiveCocoaTests/Swift/SignalProducerNimbleMatchers.swift b/ReactiveCocoaTests/Swift/SignalProducerNimbleMatchers.swift index ad2d89e569..5790549622 100644 --- a/ReactiveCocoaTests/Swift/SignalProducerNimbleMatchers.swift +++ b/ReactiveCocoaTests/Swift/SignalProducerNimbleMatchers.swift @@ -9,6 +9,7 @@ import Foundation import ReactiveCocoa +import ReactiveSwift import Nimble public func sendValue(_ value: T?, sendError: E?, complete: Bool) -> NonNilMatcherFunc> { diff --git a/ReactiveCocoaTests/Swift/TestError.swift b/ReactiveCocoaTests/Swift/TestError.swift index 8ed0054d8d..6a9313c76b 100644 --- a/ReactiveCocoaTests/Swift/TestError.swift +++ b/ReactiveCocoaTests/Swift/TestError.swift @@ -7,9 +7,10 @@ // import ReactiveCocoa +import ReactiveSwift import Result -enum TestError: Int { +internal enum TestError: Int { case `default` = 0 case error1 = 1 case error2 = 2 diff --git a/ReactiveCocoa.playground/Pages/Sandbox.xcplaygroundpage/Contents.swift b/ReactiveSwift.playground/Pages/Sandbox.xcplaygroundpage/Contents.swift similarity index 58% rename from ReactiveCocoa.playground/Pages/Sandbox.xcplaygroundpage/Contents.swift rename to ReactiveSwift.playground/Pages/Sandbox.xcplaygroundpage/Contents.swift index afe8ad4d77..c2de48c890 100644 --- a/ReactiveCocoa.playground/Pages/Sandbox.xcplaygroundpage/Contents.swift +++ b/ReactiveSwift.playground/Pages/Sandbox.xcplaygroundpage/Contents.swift @@ -1,19 +1,19 @@ /*: - > # IMPORTANT: To use `ReactiveCocoa.playground`, please: + > # IMPORTANT: To use `ReactiveSwift.playground`, please: - 1. Retrieve the project dependencies using one of the following terminal commands from the ReactiveCocoa project root directory: + 1. Retrieve the project dependencies using one of the following terminal commands from the ReactiveSwift project root directory: - `script/bootstrap` **OR**, if you have [Carthage](https://github.com/Carthage/Carthage) installed - `carthage checkout` - 1. Open `ReactiveCocoa.xcworkspace` + 1. Open `ReactiveSwift.xcworkspace` 1. Build `Result-Mac` scheme - 1. Build `ReactiveCocoa-Mac` scheme - 1. Finally open the `ReactiveCocoa.playground` + 1. Build `ReactiveSwift-macOS` scheme + 1. Finally open the `ReactiveSwift.playground` 1. Choose `View > Show Debug Area` */ import Result -import ReactiveCocoa +import ReactiveSwift import Foundation /*: diff --git a/ReactiveCocoa.playground/Pages/Signal.xcplaygroundpage/Contents.swift b/ReactiveSwift.playground/Pages/Signal.xcplaygroundpage/Contents.swift similarity index 93% rename from ReactiveCocoa.playground/Pages/Signal.xcplaygroundpage/Contents.swift rename to ReactiveSwift.playground/Pages/Signal.xcplaygroundpage/Contents.swift index 6a310cd20f..385659b078 100644 --- a/ReactiveCocoa.playground/Pages/Signal.xcplaygroundpage/Contents.swift +++ b/ReactiveSwift.playground/Pages/Signal.xcplaygroundpage/Contents.swift @@ -1,25 +1,25 @@ /*: -> # IMPORTANT: To use `ReactiveCocoa.playground`, please: +> # IMPORTANT: To use `ReactiveSwift.playground`, please: -1. Retrieve the project dependencies using one of the following terminal commands from the ReactiveCocoa project root directory: +1. Retrieve the project dependencies using one of the following terminal commands from the ReactiveSwift project root directory: - `script/bootstrap` **OR**, if you have [Carthage](https://github.com/Carthage/Carthage) installed - `carthage checkout` -1. Open `ReactiveCocoa.xcworkspace` +1. Open `ReactiveSwift.xcworkspace` 1. Build `Result-Mac` scheme -1. Build `ReactiveCocoa-Mac` scheme -1. Finally open the `ReactiveCocoa.playground` +1. Build `ReactiveSwift-macOS` scheme +1. Finally open the `ReactiveSwift.playground` 1. Choose `View > Show Debug Area` */ import Result -import ReactiveCocoa +import ReactiveSwift import Foundation /*: ## Signal -A **signal**, represented by the [`Signal`](https://github.com/ReactiveCocoa/ReactiveCocoa/blob/master/ReactiveCocoa/Swift/Signal.swift) type, is any series of [`Event`](https://github.com/ReactiveCocoa/ReactiveCocoa/blob/master/ReactiveCocoa/Swift/Event.swift) values +A **signal**, represented by the [`Signal`](https://github.com/ReactiveCocoa/ReactiveSwift/blob/master/ReactiveSwift/Signal.swift) type, is any series of [`Event`](https://github.com/ReactiveCocoa/ReactiveSwift/blob/master/ReactiveSwift/Event.swift) values over time that can be observed. Signals are generally used to represent event streams that are already “in progress”, @@ -34,7 +34,7 @@ cannot have any effect on their lifetime. While observing a signal, the user can only evaluate the events in the same order as they are sent on the signal. There is no random access to values of a signal. -Signals can be manipulated by applying [primitives](https://github.com/ReactiveCocoa/ReactiveCocoa/blob/master/Documentation/BasicOperators.md) to them. +Signals can be manipulated by applying [primitives](https://github.com/ReactiveCocoa/ReactiveSwift/blob/master/Documentation/BasicOperators.md) to them. Typical primitives to manipulate a single signal like `filter`, `map` and `reduce` are available, as well as primitives to manipulate multiple signals at once (`zip`). Primitives operate only on the `Next` events of a signal. diff --git a/ReactiveCocoa.playground/Pages/SignalProducer.xcplaygroundpage/Contents.swift b/ReactiveSwift.playground/Pages/SignalProducer.xcplaygroundpage/Contents.swift similarity index 97% rename from ReactiveCocoa.playground/Pages/SignalProducer.xcplaygroundpage/Contents.swift rename to ReactiveSwift.playground/Pages/SignalProducer.xcplaygroundpage/Contents.swift index 9cd61b63c5..0bc7a9dfbf 100644 --- a/ReactiveCocoa.playground/Pages/SignalProducer.xcplaygroundpage/Contents.swift +++ b/ReactiveSwift.playground/Pages/SignalProducer.xcplaygroundpage/Contents.swift @@ -1,26 +1,26 @@ /*: -> # IMPORTANT: To use `ReactiveCocoa.playground`, please: +> # IMPORTANT: To use `ReactiveSwift.playground`, please: -1. Retrieve the project dependencies using one of the following terminal commands from the ReactiveCocoa project root directory: +1. Retrieve the project dependencies using one of the following terminal commands from the ReactiveSwift project root directory: - `script/bootstrap` **OR**, if you have [Carthage](https://github.com/Carthage/Carthage) installed - `carthage checkout` -1. Open `ReactiveCocoa.xcworkspace` +1. Open `ReactiveSwift.xcworkspace` 1. Build `Result-Mac` scheme -1. Build `ReactiveCocoa-Mac` scheme -1. Finally open the `ReactiveCocoa.playground` +1. Build `ReactiveSwift-macOS` scheme +1. Finally open the `ReactiveSwift.playground` 1. Choose `View > Show Debug Area` */ import Result -import ReactiveCocoa +import ReactiveSwift import Foundation /*: ## SignalProducer -A **signal producer**, represented by the [`SignalProducer`](https://github.com/ReactiveCocoa/ReactiveCocoa/blob/master/ReactiveCocoa/Swift/SignalProducer.swift) type, creates -[signals](https://github.com/ReactiveCocoa/ReactiveCocoa/blob/master/ReactiveCocoa/Swift/Signal.swift) and performs side effects. +A **signal producer**, represented by the [`SignalProducer`](https://github.com/ReactiveCocoa/ReactiveSwift/blob/master/ReactiveSwift/SignalProducer.swift) type, creates +[signals](https://github.com/ReactiveCocoa/ReactiveSwift/blob/master/ReactiveSwift/Signal.swift) and performs side effects. They can be used to represent operations or tasks, like network requests, where each invocation of `start()` will create a new underlying diff --git a/ReactiveCocoa.playground/Sources/PlaygroundUtility.swift b/ReactiveSwift.playground/Sources/PlaygroundUtility.swift similarity index 100% rename from ReactiveCocoa.playground/Sources/PlaygroundUtility.swift rename to ReactiveSwift.playground/Sources/PlaygroundUtility.swift diff --git a/ReactiveCocoa.playground/contents.xcplayground b/ReactiveSwift.playground/contents.xcplayground similarity index 67% rename from ReactiveCocoa.playground/contents.xcplayground rename to ReactiveSwift.playground/contents.xcplayground index fa86d24d80..43399d296e 100644 --- a/ReactiveCocoa.playground/contents.xcplayground +++ b/ReactiveSwift.playground/contents.xcplayground @@ -1,5 +1,5 @@ - + diff --git a/ReactiveSwift.xcodeproj/project.pbxproj b/ReactiveSwift.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..aed684e9b1 --- /dev/null +++ b/ReactiveSwift.xcodeproj/project.pbxproj @@ -0,0 +1,1596 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 02D2602A1C1D6DAF003ACC61 /* SignalLifetimeSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02D260291C1D6DAF003ACC61 /* SignalLifetimeSpec.swift */; }; + 02D2602B1C1D6DB8003ACC61 /* SignalLifetimeSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02D260291C1D6DAF003ACC61 /* SignalLifetimeSpec.swift */; }; + 4A0E10FF1D2A92720065D310 /* Lifetime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A0E10FE1D2A92720065D310 /* Lifetime.swift */; }; + 4A0E11001D2A92720065D310 /* Lifetime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A0E10FE1D2A92720065D310 /* Lifetime.swift */; }; + 4A0E11011D2A92720065D310 /* Lifetime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A0E10FE1D2A92720065D310 /* Lifetime.swift */; }; + 4A0E11021D2A92720065D310 /* Lifetime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A0E10FE1D2A92720065D310 /* Lifetime.swift */; }; + 4A0E11041D2A95200065D310 /* LifetimeSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A0E11031D2A95200065D310 /* LifetimeSpec.swift */; }; + 4A0E11051D2A95200065D310 /* LifetimeSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A0E11031D2A95200065D310 /* LifetimeSpec.swift */; }; + 4A0E11061D2A95200065D310 /* LifetimeSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A0E11031D2A95200065D310 /* LifetimeSpec.swift */; }; + 579504331BB8A34200A5E482 /* BagSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312EF19EF2A7700984962 /* BagSpec.swift */; }; + 579504341BB8A34300A5E482 /* BagSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312EF19EF2A7700984962 /* BagSpec.swift */; }; + 57A4D1B11BA13D7A00F7D4B1 /* Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = D871D69E1B3B29A40070F16C /* Optional.swift */; }; + 57A4D1B41BA13D7A00F7D4B1 /* Disposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BE19EF2A5800984962 /* Disposable.swift */; }; + 57A4D1B61BA13D7A00F7D4B1 /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B51A69A3DB00AD8286 /* Event.swift */; }; + 57A4D1B81BA13D7A00F7D4B1 /* Scheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312C819EF2A5800984962 /* Scheduler.swift */; }; + 57A4D1B91BA13D7A00F7D4B1 /* Action.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54AF1A69A2AC00AD8286 /* Action.swift */; }; + 57A4D1BA1BA13D7A00F7D4B1 /* Property.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B01A69A2AC00AD8286 /* Property.swift */; }; + 57A4D1BB1BA13D7A00F7D4B1 /* Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B11A69A2AC00AD8286 /* Signal.swift */; }; + 57A4D1BC1BA13D7A00F7D4B1 /* SignalProducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B21A69A2AC00AD8286 /* SignalProducer.swift */; }; + 57A4D1BD1BA13D7A00F7D4B1 /* Atomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BB19EF2A5800984962 /* Atomic.swift */; }; + 57A4D1BE1BA13D7A00F7D4B1 /* Bag.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BC19EF2A5800984962 /* Bag.swift */; }; + 57A4D1BF1BA13D7A00F7D4B1 /* TupleExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00004081A46864E000E7D41 /* TupleExtensions.swift */; }; + 57A4D1C01BA13D7A00F7D4B1 /* FoundationExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B4A3C19F4C39A009E02AC /* FoundationExtensions.swift */; }; + 57A4D2081BA13D7A00F7D4B1 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDC42E2E1AE7AB8B00965373 /* Result.framework */; }; + 57A4D20A1BA13D7A00F7D4B1 /* ReactiveSwift.h in Headers */ = {isa = PBXBuildFile; fileRef = D04725EF19E49ED7006002AA /* ReactiveSwift.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7DFBED081CDB8C9500EE435B /* ReactiveSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57A4D2411BA13D7A00F7D4B1 /* ReactiveSwift.framework */; }; + 7DFBED1E1CDB8D7000EE435B /* ReactiveSwift.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 57A4D2411BA13D7A00F7D4B1 /* ReactiveSwift.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 7DFBED1F1CDB8D7800EE435B /* Quick.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = D037672B19EDA75D00A782A9 /* Quick.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 7DFBED201CDB8D7D00EE435B /* Nimble.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = D05E662419EDD82000904ACA /* Nimble.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 7DFBED211CDB8D8300EE435B /* Result.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = CDC42E2E1AE7AB8B00965373 /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 7DFBED221CDB8DE300EE435B /* ActionSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D021671C1A6CD50500987861 /* ActionSpec.swift */; }; + 7DFBED231CDB8DE300EE435B /* AtomicSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312EE19EF2A7700984962 /* AtomicSpec.swift */; }; + 7DFBED241CDB8DE300EE435B /* BagSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312EF19EF2A7700984962 /* BagSpec.swift */; }; + 7DFBED251CDB8DE300EE435B /* DisposableSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312F019EF2A7700984962 /* DisposableSpec.swift */; }; + 7DFBED261CDB8DE300EE435B /* FoundationExtensionsSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8170FC01B100EBC004192AD /* FoundationExtensionsSpec.swift */; }; + 7DFBED281CDB8DE300EE435B /* PropertySpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A2260D1A72F16D00D33B74 /* PropertySpec.swift */; }; + 7DFBED291CDB8DE300EE435B /* SchedulerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312F219EF2A7700984962 /* SchedulerSpec.swift */; }; + 7DFBED2A1CDB8DE300EE435B /* SignalLifetimeSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02D260291C1D6DAF003ACC61 /* SignalLifetimeSpec.swift */; }; + 7DFBED2B1CDB8DE300EE435B /* SignalProducerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A2260A1A72E6C500D33B74 /* SignalProducerSpec.swift */; }; + 7DFBED2C1CDB8DE300EE435B /* SignalProducerLiftingSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8024DB11B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift */; }; + 7DFBED2D1CDB8DE300EE435B /* SignalSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A226071A72E0E900D33B74 /* SignalSpec.swift */; }; + 7DFBED2E1CDB8DE300EE435B /* FlattenSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA6F284F1C52626B001879D2 /* FlattenSpec.swift */; }; + 7DFBED2F1CDB8DE300EE435B /* TestError.swift in Sources */ = {isa = PBXBuildFile; fileRef = B696FB801A7640C00075236D /* TestError.swift */; }; + 7DFBED301CDB8DE300EE435B /* TestLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C79B64731CD38B2B003F2376 /* TestLogger.swift */; }; + 7DFBED6D1CDB8F7D00EE435B /* SignalProducerNimbleMatchers.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFA6B94A1A76044800C846D1 /* SignalProducerNimbleMatchers.swift */; }; + 9ABCB1851D2A5B5A00BCA243 /* Deprecations+Removals.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9ABCB1841D2A5B5A00BCA243 /* Deprecations+Removals.swift */; }; + 9ABCB1861D2A5B5A00BCA243 /* Deprecations+Removals.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9ABCB1841D2A5B5A00BCA243 /* Deprecations+Removals.swift */; }; + 9ABCB1871D2A5B5A00BCA243 /* Deprecations+Removals.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9ABCB1841D2A5B5A00BCA243 /* Deprecations+Removals.swift */; }; + 9ABCB1881D2A5B5A00BCA243 /* Deprecations+Removals.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9ABCB1841D2A5B5A00BCA243 /* Deprecations+Removals.swift */; }; + A9B315BC1B3940810001CB9C /* Disposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BE19EF2A5800984962 /* Disposable.swift */; }; + A9B315BE1B3940810001CB9C /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B51A69A3DB00AD8286 /* Event.swift */; }; + A9B315C01B3940810001CB9C /* Scheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312C819EF2A5800984962 /* Scheduler.swift */; }; + A9B315C11B3940810001CB9C /* Action.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54AF1A69A2AC00AD8286 /* Action.swift */; }; + A9B315C21B3940810001CB9C /* Property.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B01A69A2AC00AD8286 /* Property.swift */; }; + A9B315C31B3940810001CB9C /* Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B11A69A2AC00AD8286 /* Signal.swift */; }; + A9B315C41B3940810001CB9C /* SignalProducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B21A69A2AC00AD8286 /* SignalProducer.swift */; }; + A9B315C51B3940810001CB9C /* Atomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BB19EF2A5800984962 /* Atomic.swift */; }; + A9B315C61B3940810001CB9C /* Bag.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BC19EF2A5800984962 /* Bag.swift */; }; + A9B315C71B3940810001CB9C /* TupleExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00004081A46864E000E7D41 /* TupleExtensions.swift */; }; + A9B315C81B3940810001CB9C /* FoundationExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B4A3C19F4C39A009E02AC /* FoundationExtensions.swift */; }; + A9B315C91B3940980001CB9C /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDC42E2E1AE7AB8B00965373 /* Result.framework */; }; + A9B315CA1B3940AB0001CB9C /* ReactiveSwift.h in Headers */ = {isa = PBXBuildFile; fileRef = D04725EF19E49ED7006002AA /* ReactiveSwift.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A9F793341B60D0140026BCBA /* Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = D871D69E1B3B29A40070F16C /* Optional.swift */; }; + B696FB811A7640C00075236D /* TestError.swift in Sources */ = {isa = PBXBuildFile; fileRef = B696FB801A7640C00075236D /* TestError.swift */; }; + B696FB821A7640C00075236D /* TestError.swift in Sources */ = {isa = PBXBuildFile; fileRef = B696FB801A7640C00075236D /* TestError.swift */; }; + BE9CF3951D751B6B003AE479 /* UnidirectionalBinding.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE9CF3941D751B6B003AE479 /* UnidirectionalBinding.swift */; }; + BE9CF3961D751B70003AE479 /* UnidirectionalBinding.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE9CF3941D751B6B003AE479 /* UnidirectionalBinding.swift */; }; + BE9CF3971D751B71003AE479 /* UnidirectionalBinding.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE9CF3941D751B6B003AE479 /* UnidirectionalBinding.swift */; }; + BE9CF3981D751B71003AE479 /* UnidirectionalBinding.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE9CF3941D751B6B003AE479 /* UnidirectionalBinding.swift */; }; + BFA6B94D1A7604D400C846D1 /* SignalProducerNimbleMatchers.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFA6B94A1A76044800C846D1 /* SignalProducerNimbleMatchers.swift */; }; + BFA6B94E1A7604D500C846D1 /* SignalProducerNimbleMatchers.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFA6B94A1A76044800C846D1 /* SignalProducerNimbleMatchers.swift */; }; + C79B64741CD38B2B003F2376 /* TestLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C79B64731CD38B2B003F2376 /* TestLogger.swift */; }; + C79B64751CD38B2B003F2376 /* TestLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C79B64731CD38B2B003F2376 /* TestLogger.swift */; }; + C79B647C1CD52E23003F2376 /* EventLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C79B647B1CD52E23003F2376 /* EventLogger.swift */; }; + C79B647D1CD52E4A003F2376 /* EventLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C79B647B1CD52E23003F2376 /* EventLogger.swift */; }; + C79B647F1CD52E4D003F2376 /* EventLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C79B647B1CD52E23003F2376 /* EventLogger.swift */; }; + C79B64801CD52E4E003F2376 /* EventLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C79B647B1CD52E23003F2376 /* EventLogger.swift */; }; + CA6F28501C52626B001879D2 /* FlattenSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA6F284F1C52626B001879D2 /* FlattenSpec.swift */; }; + CA6F28511C52626B001879D2 /* FlattenSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA6F284F1C52626B001879D2 /* FlattenSpec.swift */; }; + CDC42E2F1AE7AB8B00965373 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDC42E2E1AE7AB8B00965373 /* Result.framework */; }; + CDC42E301AE7AB8B00965373 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDC42E2E1AE7AB8B00965373 /* Result.framework */; }; + CDC42E311AE7AB8B00965373 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDC42E2E1AE7AB8B00965373 /* Result.framework */; }; + CDC42E331AE7AC6D00965373 /* Result.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = CDC42E2E1AE7AB8B00965373 /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + CDCD247A1C277EEC00710AEE /* AtomicSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312EE19EF2A7700984962 /* AtomicSpec.swift */; }; + CDCD247B1C277EED00710AEE /* AtomicSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312EE19EF2A7700984962 /* AtomicSpec.swift */; }; + CDF066CA1CDC1CA200199626 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D05E662419EDD82000904ACA /* Nimble.framework */; }; + CDF066CB1CDC1CA200199626 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D037672B19EDA75D00A782A9 /* Quick.framework */; }; + D00004091A46864E000E7D41 /* TupleExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00004081A46864E000E7D41 /* TupleExtensions.swift */; }; + D000040A1A46864E000E7D41 /* TupleExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00004081A46864E000E7D41 /* TupleExtensions.swift */; }; + D01B7B6219EDD8FE00D26E01 /* Nimble.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = D05E662419EDD82000904ACA /* Nimble.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + D01B7B6319EDD8FE00D26E01 /* Quick.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = D037672B19EDA75D00A782A9 /* Quick.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + D01B7B6419EDD94B00D26E01 /* ReactiveSwift.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = D047260C19E49F82006002AA /* ReactiveSwift.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + D021671D1A6CD50500987861 /* ActionSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D021671C1A6CD50500987861 /* ActionSpec.swift */; }; + D021671E1A6CD50500987861 /* ActionSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D021671C1A6CD50500987861 /* ActionSpec.swift */; }; + D037666419EDA43C00A782A9 /* ReactiveSwift.h in Headers */ = {isa = PBXBuildFile; fileRef = D04725EF19E49ED7006002AA /* ReactiveSwift.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D037672D19EDA75D00A782A9 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D037672B19EDA75D00A782A9 /* Quick.framework */; }; + D037672F19EDA78B00A782A9 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D037672B19EDA75D00A782A9 /* Quick.framework */; }; + D03B4A3D19F4C39A009E02AC /* FoundationExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B4A3C19F4C39A009E02AC /* FoundationExtensions.swift */; }; + D03B4A3E19F4C39A009E02AC /* FoundationExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B4A3C19F4C39A009E02AC /* FoundationExtensions.swift */; }; + D04725F019E49ED7006002AA /* ReactiveSwift.h in Headers */ = {isa = PBXBuildFile; fileRef = D04725EF19E49ED7006002AA /* ReactiveSwift.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D04725F619E49ED7006002AA /* ReactiveSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D04725EA19E49ED7006002AA /* ReactiveSwift.framework */; }; + D047261719E49F82006002AA /* ReactiveSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D047260C19E49F82006002AA /* ReactiveSwift.framework */; }; + D05E662519EDD82000904ACA /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D05E662419EDD82000904ACA /* Nimble.framework */; }; + D05E662619EDD83000904ACA /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D05E662419EDD82000904ACA /* Nimble.framework */; }; + D08C54B31A69A2AE00AD8286 /* Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B11A69A2AC00AD8286 /* Signal.swift */; }; + D08C54B41A69A2AF00AD8286 /* Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B11A69A2AC00AD8286 /* Signal.swift */; }; + D08C54B61A69A3DB00AD8286 /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B51A69A3DB00AD8286 /* Event.swift */; }; + D08C54B71A69A3DB00AD8286 /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B51A69A3DB00AD8286 /* Event.swift */; }; + D08C54B81A69A9D000AD8286 /* SignalProducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B21A69A2AC00AD8286 /* SignalProducer.swift */; }; + D08C54B91A69A9D100AD8286 /* SignalProducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B21A69A2AC00AD8286 /* SignalProducer.swift */; }; + D08C54BA1A69C54300AD8286 /* Property.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B01A69A2AC00AD8286 /* Property.swift */; }; + D08C54BB1A69C54400AD8286 /* Property.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54B01A69A2AC00AD8286 /* Property.swift */; }; + D0A226081A72E0E900D33B74 /* SignalSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A226071A72E0E900D33B74 /* SignalSpec.swift */; }; + D0A226091A72E0E900D33B74 /* SignalSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A226071A72E0E900D33B74 /* SignalSpec.swift */; }; + D0A2260B1A72E6C500D33B74 /* SignalProducerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A2260A1A72E6C500D33B74 /* SignalProducerSpec.swift */; }; + D0A2260C1A72E6C500D33B74 /* SignalProducerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A2260A1A72E6C500D33B74 /* SignalProducerSpec.swift */; }; + D0A2260E1A72F16D00D33B74 /* PropertySpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A2260D1A72F16D00D33B74 /* PropertySpec.swift */; }; + D0A2260F1A72F16D00D33B74 /* PropertySpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A2260D1A72F16D00D33B74 /* PropertySpec.swift */; }; + D0C312CD19EF2A5800984962 /* Atomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BB19EF2A5800984962 /* Atomic.swift */; }; + D0C312CE19EF2A5800984962 /* Atomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BB19EF2A5800984962 /* Atomic.swift */; }; + D0C312CF19EF2A5800984962 /* Bag.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BC19EF2A5800984962 /* Bag.swift */; }; + D0C312D019EF2A5800984962 /* Bag.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BC19EF2A5800984962 /* Bag.swift */; }; + D0C312D319EF2A5800984962 /* Disposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BE19EF2A5800984962 /* Disposable.swift */; }; + D0C312D419EF2A5800984962 /* Disposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312BE19EF2A5800984962 /* Disposable.swift */; }; + D0C312E719EF2A5800984962 /* Scheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312C819EF2A5800984962 /* Scheduler.swift */; }; + D0C312E819EF2A5800984962 /* Scheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312C819EF2A5800984962 /* Scheduler.swift */; }; + D0C3130C19EF2B1F00984962 /* DisposableSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312F019EF2A7700984962 /* DisposableSpec.swift */; }; + D0C3130E19EF2B1F00984962 /* SchedulerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312F219EF2A7700984962 /* SchedulerSpec.swift */; }; + D0C3131219EF2B2000984962 /* DisposableSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312F019EF2A7700984962 /* DisposableSpec.swift */; }; + D0C3131419EF2B2000984962 /* SchedulerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C312F219EF2A7700984962 /* SchedulerSpec.swift */; }; + D0D11AB91A6AE87700C1F8B1 /* Action.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54AF1A69A2AC00AD8286 /* Action.swift */; }; + D0D11ABA1A6AE87700C1F8B1 /* Action.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C54AF1A69A2AC00AD8286 /* Action.swift */; }; + D8024DB21B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8024DB11B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift */; }; + D8024DB31B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8024DB11B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift */; }; + D8170FC11B100EBC004192AD /* FoundationExtensionsSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8170FC01B100EBC004192AD /* FoundationExtensionsSpec.swift */; }; + D8170FC21B100EBC004192AD /* FoundationExtensionsSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8170FC01B100EBC004192AD /* FoundationExtensionsSpec.swift */; }; + D85C652A1C0D84C7005A77AD /* Flatten.swift in Sources */ = {isa = PBXBuildFile; fileRef = D85C65291C0D84C7005A77AD /* Flatten.swift */; }; + D85C652B1C0E70E3005A77AD /* Flatten.swift in Sources */ = {isa = PBXBuildFile; fileRef = D85C65291C0D84C7005A77AD /* Flatten.swift */; }; + D85C652C1C0E70E4005A77AD /* Flatten.swift in Sources */ = {isa = PBXBuildFile; fileRef = D85C65291C0D84C7005A77AD /* Flatten.swift */; }; + D85C652D1C0E70E5005A77AD /* Flatten.swift in Sources */ = {isa = PBXBuildFile; fileRef = D85C65291C0D84C7005A77AD /* Flatten.swift */; }; + D871D69F1B3B29A40070F16C /* Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = D871D69E1B3B29A40070F16C /* Optional.swift */; }; + D8E84A671B3B32FB00C3E831 /* Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = D871D69E1B3B29A40070F16C /* Optional.swift */; }; + EBCC7DBC1BBF010C00A2AE92 /* Observer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBCC7DBB1BBF010C00A2AE92 /* Observer.swift */; }; + EBCC7DBD1BBF01E100A2AE92 /* Observer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBCC7DBB1BBF010C00A2AE92 /* Observer.swift */; }; + EBCC7DBE1BBF01E200A2AE92 /* Observer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBCC7DBB1BBF010C00A2AE92 /* Observer.swift */; }; + EBCC7DBF1BBF01E200A2AE92 /* Observer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBCC7DBB1BBF010C00A2AE92 /* Observer.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 7DFBED091CDB8C9500EE435B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D04725E119E49ED7006002AA /* Project object */; + proxyType = 1; + remoteGlobalIDString = 57A4D1AF1BA13D7A00F7D4B1; + remoteInfo = "ReactiveCocoa-tvOS"; + }; + D04725F719E49ED7006002AA /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D04725E119E49ED7006002AA /* Project object */; + proxyType = 1; + remoteGlobalIDString = D04725E919E49ED7006002AA; + remoteInfo = ReactiveCocoa; + }; + D047261819E49F82006002AA /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D04725E119E49ED7006002AA /* Project object */; + proxyType = 1; + remoteGlobalIDString = D047260B19E49F82006002AA; + remoteInfo = ReactiveCocoa; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 7DFBED151CDB8CEC00EE435B /* Copy Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 7DFBED211CDB8D8300EE435B /* Result.framework in Copy Frameworks */, + 7DFBED201CDB8D7D00EE435B /* Nimble.framework in Copy Frameworks */, + 7DFBED1F1CDB8D7800EE435B /* Quick.framework in Copy Frameworks */, + 7DFBED1E1CDB8D7000EE435B /* ReactiveSwift.framework in Copy Frameworks */, + ); + name = "Copy Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + D01B7B6119EDD8F600D26E01 /* Copy Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + CDC42E331AE7AC6D00965373 /* Result.framework in Copy Frameworks */, + D01B7B6219EDD8FE00D26E01 /* Nimble.framework in Copy Frameworks */, + D01B7B6319EDD8FE00D26E01 /* Quick.framework in Copy Frameworks */, + D01B7B6419EDD94B00D26E01 /* ReactiveSwift.framework in Copy Frameworks */, + ); + name = "Copy Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 02D260291C1D6DAF003ACC61 /* SignalLifetimeSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SignalLifetimeSpec.swift; sourceTree = ""; }; + 4A0E10FE1D2A92720065D310 /* Lifetime.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Lifetime.swift; sourceTree = ""; }; + 4A0E11031D2A95200065D310 /* LifetimeSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LifetimeSpec.swift; sourceTree = ""; }; + 57A4D2411BA13D7A00F7D4B1 /* ReactiveSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ReactiveSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 57A4D2441BA13F9700F7D4B1 /* tvOS-Application.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "tvOS-Application.xcconfig"; sourceTree = ""; }; + 57A4D2451BA13F9700F7D4B1 /* tvOS-Base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "tvOS-Base.xcconfig"; sourceTree = ""; }; + 57A4D2461BA13F9700F7D4B1 /* tvOS-Framework.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "tvOS-Framework.xcconfig"; sourceTree = ""; }; + 57A4D2471BA13F9700F7D4B1 /* tvOS-StaticLibrary.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "tvOS-StaticLibrary.xcconfig"; sourceTree = ""; }; + 7DFBED031CDB8C9500EE435B /* ReactiveSwiftTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ReactiveSwiftTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 9ABCB1841D2A5B5A00BCA243 /* Deprecations+Removals.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Deprecations+Removals.swift"; sourceTree = ""; }; + A97451331B3A935E00F48E55 /* watchOS-Application.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "watchOS-Application.xcconfig"; sourceTree = ""; }; + A97451341B3A935E00F48E55 /* watchOS-Base.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "watchOS-Base.xcconfig"; sourceTree = ""; }; + A97451351B3A935E00F48E55 /* watchOS-Framework.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "watchOS-Framework.xcconfig"; sourceTree = ""; }; + A97451361B3A935E00F48E55 /* watchOS-StaticLibrary.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "watchOS-StaticLibrary.xcconfig"; sourceTree = ""; }; + A9B315541B3940610001CB9C /* ReactiveSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ReactiveSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B696FB801A7640C00075236D /* TestError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestError.swift; sourceTree = ""; }; + BE9CF3941D751B6B003AE479 /* UnidirectionalBinding.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UnidirectionalBinding.swift; sourceTree = ""; }; + BFA6B94A1A76044800C846D1 /* SignalProducerNimbleMatchers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SignalProducerNimbleMatchers.swift; sourceTree = ""; }; + C79B64731CD38B2B003F2376 /* TestLogger.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestLogger.swift; sourceTree = ""; }; + C79B647B1CD52E23003F2376 /* EventLogger.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EventLogger.swift; sourceTree = ""; }; + CA6F284F1C52626B001879D2 /* FlattenSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FlattenSpec.swift; sourceTree = ""; }; + CDC42E2E1AE7AB8B00965373 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D00004081A46864E000E7D41 /* TupleExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TupleExtensions.swift; sourceTree = ""; }; + D021671C1A6CD50500987861 /* ActionSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = ActionSpec.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; + D037672B19EDA75D00A782A9 /* Quick.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Quick.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D03B4A3C19F4C39A009E02AC /* FoundationExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FoundationExtensions.swift; sourceTree = ""; }; + D04725EA19E49ED7006002AA /* ReactiveSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ReactiveSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D04725EE19E49ED7006002AA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D04725EF19E49ED7006002AA /* ReactiveSwift.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ReactiveSwift.h; sourceTree = ""; }; + D04725F519E49ED7006002AA /* ReactiveSwiftTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ReactiveSwiftTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + D04725FB19E49ED7006002AA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D047260C19E49F82006002AA /* ReactiveSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ReactiveSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D047261619E49F82006002AA /* ReactiveSwiftTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ReactiveSwiftTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + D047262719E49FE8006002AA /* Common.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Common.xcconfig; sourceTree = ""; }; + D047262919E49FE8006002AA /* Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + D047262A19E49FE8006002AA /* Profile.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Profile.xcconfig; sourceTree = ""; }; + D047262B19E49FE8006002AA /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + D047262C19E49FE8006002AA /* Test.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Test.xcconfig; sourceTree = ""; }; + D047262E19E49FE8006002AA /* Application.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Application.xcconfig; sourceTree = ""; }; + D047262F19E49FE8006002AA /* Framework.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Framework.xcconfig; sourceTree = ""; }; + D047263019E49FE8006002AA /* StaticLibrary.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = StaticLibrary.xcconfig; sourceTree = ""; }; + D047263219E49FE8006002AA /* iOS-Application.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-Application.xcconfig"; sourceTree = ""; }; + D047263319E49FE8006002AA /* iOS-Base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-Base.xcconfig"; sourceTree = ""; }; + D047263419E49FE8006002AA /* iOS-Framework.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-Framework.xcconfig"; sourceTree = ""; }; + D047263519E49FE8006002AA /* iOS-StaticLibrary.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-StaticLibrary.xcconfig"; sourceTree = ""; }; + D047263719E49FE8006002AA /* Mac-Application.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Mac-Application.xcconfig"; sourceTree = ""; }; + D047263819E49FE8006002AA /* Mac-Base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Mac-Base.xcconfig"; sourceTree = ""; }; + D047263919E49FE8006002AA /* Mac-DynamicLibrary.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Mac-DynamicLibrary.xcconfig"; sourceTree = ""; }; + D047263A19E49FE8006002AA /* Mac-Framework.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Mac-Framework.xcconfig"; sourceTree = ""; }; + D047263B19E49FE8006002AA /* Mac-StaticLibrary.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Mac-StaticLibrary.xcconfig"; sourceTree = ""; }; + D047263C19E49FE8006002AA /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; + D05E662419EDD82000904ACA /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D08C54AF1A69A2AC00AD8286 /* Action.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Action.swift; sourceTree = ""; }; + D08C54B01A69A2AC00AD8286 /* Property.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Property.swift; sourceTree = ""; }; + D08C54B11A69A2AC00AD8286 /* Signal.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Signal.swift; sourceTree = ""; }; + D08C54B21A69A2AC00AD8286 /* SignalProducer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignalProducer.swift; sourceTree = ""; }; + D08C54B51A69A3DB00AD8286 /* Event.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Event.swift; sourceTree = ""; }; + D0A226071A72E0E900D33B74 /* SignalSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = SignalSpec.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; + D0A2260A1A72E6C500D33B74 /* SignalProducerSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = SignalProducerSpec.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; + D0A2260D1A72F16D00D33B74 /* PropertySpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = PropertySpec.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; + D0C312BB19EF2A5800984962 /* Atomic.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Atomic.swift; sourceTree = ""; }; + D0C312BC19EF2A5800984962 /* Bag.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Bag.swift; sourceTree = ""; }; + D0C312BE19EF2A5800984962 /* Disposable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Disposable.swift; sourceTree = ""; }; + D0C312C819EF2A5800984962 /* Scheduler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Scheduler.swift; sourceTree = ""; }; + D0C312EE19EF2A7700984962 /* AtomicSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AtomicSpec.swift; sourceTree = ""; }; + D0C312EF19EF2A7700984962 /* BagSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BagSpec.swift; sourceTree = ""; }; + D0C312F019EF2A7700984962 /* DisposableSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DisposableSpec.swift; sourceTree = ""; }; + D0C312F219EF2A7700984962 /* SchedulerSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SchedulerSpec.swift; sourceTree = ""; }; + D8024DB11B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = SignalProducerLiftingSpec.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; + D8170FC01B100EBC004192AD /* FoundationExtensionsSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FoundationExtensionsSpec.swift; sourceTree = ""; }; + D85C65291C0D84C7005A77AD /* Flatten.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Flatten.swift; sourceTree = ""; }; + D871D69E1B3B29A40070F16C /* Optional.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Optional.swift; sourceTree = ""; }; + EBCC7DBB1BBF010C00A2AE92 /* Observer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = Observer.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 57A4D2071BA13D7A00F7D4B1 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 57A4D2081BA13D7A00F7D4B1 /* Result.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7DFBED001CDB8C9500EE435B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + CDF066CA1CDC1CA200199626 /* Nimble.framework in Frameworks */, + CDF066CB1CDC1CA200199626 /* Quick.framework in Frameworks */, + 7DFBED081CDB8C9500EE435B /* ReactiveSwift.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A9B315501B3940610001CB9C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A9B315C91B3940980001CB9C /* Result.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D04725E619E49ED7006002AA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + CDC42E2F1AE7AB8B00965373 /* Result.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D04725F219E49ED7006002AA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + CDC42E301AE7AB8B00965373 /* Result.framework in Frameworks */, + D05E662519EDD82000904ACA /* Nimble.framework in Frameworks */, + D037672D19EDA75D00A782A9 /* Quick.framework in Frameworks */, + D04725F619E49ED7006002AA /* ReactiveSwift.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D047260819E49F82006002AA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + CDC42E311AE7AB8B00965373 /* Result.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D047261319E49F82006002AA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D05E662619EDD83000904ACA /* Nimble.framework in Frameworks */, + D037672F19EDA78B00A782A9 /* Quick.framework in Frameworks */, + D047261719E49F82006002AA /* ReactiveSwift.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 57A4D2431BA13F9700F7D4B1 /* tvOS */ = { + isa = PBXGroup; + children = ( + 57A4D2441BA13F9700F7D4B1 /* tvOS-Application.xcconfig */, + 57A4D2451BA13F9700F7D4B1 /* tvOS-Base.xcconfig */, + 57A4D2461BA13F9700F7D4B1 /* tvOS-Framework.xcconfig */, + 57A4D2471BA13F9700F7D4B1 /* tvOS-StaticLibrary.xcconfig */, + ); + path = tvOS; + sourceTree = ""; + }; + A97451321B3A935E00F48E55 /* watchOS */ = { + isa = PBXGroup; + children = ( + A97451331B3A935E00F48E55 /* watchOS-Application.xcconfig */, + A97451341B3A935E00F48E55 /* watchOS-Base.xcconfig */, + A97451351B3A935E00F48E55 /* watchOS-Framework.xcconfig */, + A97451361B3A935E00F48E55 /* watchOS-StaticLibrary.xcconfig */, + ); + path = watchOS; + sourceTree = ""; + }; + D03B4A3919F4C25F009E02AC /* Signals */ = { + isa = PBXGroup; + children = ( + D08C54AF1A69A2AC00AD8286 /* Action.swift */, + D85C65291C0D84C7005A77AD /* Flatten.swift */, + 4A0E10FE1D2A92720065D310 /* Lifetime.swift */, + D08C54B01A69A2AC00AD8286 /* Property.swift */, + D08C54B11A69A2AC00AD8286 /* Signal.swift */, + D08C54B21A69A2AC00AD8286 /* SignalProducer.swift */, + BE9CF3941D751B6B003AE479 /* UnidirectionalBinding.swift */, + ); + name = Signals; + sourceTree = ""; + }; + D03B4A3A19F4C26D009E02AC /* Internal Utilities */ = { + isa = PBXGroup; + children = ( + D00004081A46864E000E7D41 /* TupleExtensions.swift */, + ); + name = "Internal Utilities"; + sourceTree = ""; + }; + D03B4A3B19F4C281009E02AC /* Extensions */ = { + isa = PBXGroup; + children = ( + D03B4A3C19F4C39A009E02AC /* FoundationExtensions.swift */, + ); + name = Extensions; + sourceTree = ""; + }; + D04725E019E49ED7006002AA = { + isa = PBXGroup; + children = ( + D04725EC19E49ED7006002AA /* ReactiveSwift */, + D04725F919E49ED7006002AA /* ReactiveSwiftTests */, + D047262519E49FE8006002AA /* Configuration */, + D04725EB19E49ED7006002AA /* Products */, + ); + sourceTree = ""; + usesTabs = 1; + }; + D04725EB19E49ED7006002AA /* Products */ = { + isa = PBXGroup; + children = ( + D04725EA19E49ED7006002AA /* ReactiveSwift.framework */, + D04725F519E49ED7006002AA /* ReactiveSwiftTests.xctest */, + D047260C19E49F82006002AA /* ReactiveSwift.framework */, + D047261619E49F82006002AA /* ReactiveSwiftTests.xctest */, + A9B315541B3940610001CB9C /* ReactiveSwift.framework */, + 57A4D2411BA13D7A00F7D4B1 /* ReactiveSwift.framework */, + 7DFBED031CDB8C9500EE435B /* ReactiveSwiftTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + D04725EC19E49ED7006002AA /* ReactiveSwift */ = { + isa = PBXGroup; + children = ( + D04725EF19E49ED7006002AA /* ReactiveSwift.h */, + D0C312BB19EF2A5800984962 /* Atomic.swift */, + D0C312BC19EF2A5800984962 /* Bag.swift */, + D0C312BE19EF2A5800984962 /* Disposable.swift */, + D08C54B51A69A3DB00AD8286 /* Event.swift */, + EBCC7DBB1BBF010C00A2AE92 /* Observer.swift */, + D871D69E1B3B29A40070F16C /* Optional.swift */, + D0C312C819EF2A5800984962 /* Scheduler.swift */, + C79B647B1CD52E23003F2376 /* EventLogger.swift */, + D03B4A3919F4C25F009E02AC /* Signals */, + D03B4A3A19F4C26D009E02AC /* Internal Utilities */, + D03B4A3B19F4C281009E02AC /* Extensions */, + 9ABCB1841D2A5B5A00BCA243 /* Deprecations+Removals.swift */, + D04725ED19E49ED7006002AA /* Supporting Files */, + ); + path = ReactiveSwift; + sourceTree = ""; + }; + D04725ED19E49ED7006002AA /* Supporting Files */ = { + isa = PBXGroup; + children = ( + CDC42E2E1AE7AB8B00965373 /* Result.framework */, + D04725EE19E49ED7006002AA /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + D04725F919E49ED7006002AA /* ReactiveSwiftTests */ = { + isa = PBXGroup; + children = ( + D021671C1A6CD50500987861 /* ActionSpec.swift */, + D0C312EE19EF2A7700984962 /* AtomicSpec.swift */, + D0C312EF19EF2A7700984962 /* BagSpec.swift */, + D0C312F019EF2A7700984962 /* DisposableSpec.swift */, + CA6F284F1C52626B001879D2 /* FlattenSpec.swift */, + D8170FC01B100EBC004192AD /* FoundationExtensionsSpec.swift */, + 4A0E11031D2A95200065D310 /* LifetimeSpec.swift */, + D0A2260D1A72F16D00D33B74 /* PropertySpec.swift */, + D0C312F219EF2A7700984962 /* SchedulerSpec.swift */, + 02D260291C1D6DAF003ACC61 /* SignalLifetimeSpec.swift */, + D8024DB11B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift */, + D0A2260A1A72E6C500D33B74 /* SignalProducerSpec.swift */, + D0A226071A72E0E900D33B74 /* SignalSpec.swift */, + B696FB801A7640C00075236D /* TestError.swift */, + C79B64731CD38B2B003F2376 /* TestLogger.swift */, + D04725FA19E49ED7006002AA /* Supporting Files */, + ); + path = ReactiveSwiftTests; + sourceTree = ""; + }; + D04725FA19E49ED7006002AA /* Supporting Files */ = { + isa = PBXGroup; + children = ( + D05E662419EDD82000904ACA /* Nimble.framework */, + D037672B19EDA75D00A782A9 /* Quick.framework */, + BFA6B94A1A76044800C846D1 /* SignalProducerNimbleMatchers.swift */, + D04725FB19E49ED7006002AA /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + D047262519E49FE8006002AA /* Configuration */ = { + isa = PBXGroup; + children = ( + D047262619E49FE8006002AA /* Base */, + D047263119E49FE8006002AA /* iOS */, + D047263619E49FE8006002AA /* Mac OS X */, + A97451321B3A935E00F48E55 /* watchOS */, + 57A4D2431BA13F9700F7D4B1 /* tvOS */, + D047263C19E49FE8006002AA /* README.md */, + ); + name = Configuration; + path = Carthage/Checkouts/xcconfigs; + sourceTree = ""; + }; + D047262619E49FE8006002AA /* Base */ = { + isa = PBXGroup; + children = ( + D047262719E49FE8006002AA /* Common.xcconfig */, + D047262819E49FE8006002AA /* Configurations */, + D047262D19E49FE8006002AA /* Targets */, + ); + path = Base; + sourceTree = ""; + }; + D047262819E49FE8006002AA /* Configurations */ = { + isa = PBXGroup; + children = ( + D047262919E49FE8006002AA /* Debug.xcconfig */, + D047262A19E49FE8006002AA /* Profile.xcconfig */, + D047262B19E49FE8006002AA /* Release.xcconfig */, + D047262C19E49FE8006002AA /* Test.xcconfig */, + ); + path = Configurations; + sourceTree = ""; + }; + D047262D19E49FE8006002AA /* Targets */ = { + isa = PBXGroup; + children = ( + D047262E19E49FE8006002AA /* Application.xcconfig */, + D047262F19E49FE8006002AA /* Framework.xcconfig */, + D047263019E49FE8006002AA /* StaticLibrary.xcconfig */, + ); + path = Targets; + sourceTree = ""; + }; + D047263119E49FE8006002AA /* iOS */ = { + isa = PBXGroup; + children = ( + D047263219E49FE8006002AA /* iOS-Application.xcconfig */, + D047263319E49FE8006002AA /* iOS-Base.xcconfig */, + D047263419E49FE8006002AA /* iOS-Framework.xcconfig */, + D047263519E49FE8006002AA /* iOS-StaticLibrary.xcconfig */, + ); + path = iOS; + sourceTree = ""; + }; + D047263619E49FE8006002AA /* Mac OS X */ = { + isa = PBXGroup; + children = ( + D047263719E49FE8006002AA /* Mac-Application.xcconfig */, + D047263819E49FE8006002AA /* Mac-Base.xcconfig */, + D047263919E49FE8006002AA /* Mac-DynamicLibrary.xcconfig */, + D047263A19E49FE8006002AA /* Mac-Framework.xcconfig */, + D047263B19E49FE8006002AA /* Mac-StaticLibrary.xcconfig */, + ); + path = "Mac OS X"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 57A4D2091BA13D7A00F7D4B1 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 57A4D20A1BA13D7A00F7D4B1 /* ReactiveSwift.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A9B315511B3940610001CB9C /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + A9B315CA1B3940AB0001CB9C /* ReactiveSwift.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D04725E719E49ED7006002AA /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D04725F019E49ED7006002AA /* ReactiveSwift.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D047260919E49F82006002AA /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D037666419EDA43C00A782A9 /* ReactiveSwift.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 57A4D1AF1BA13D7A00F7D4B1 /* ReactiveSwift-tvOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 57A4D23C1BA13D7A00F7D4B1 /* Build configuration list for PBXNativeTarget "ReactiveSwift-tvOS" */; + buildPhases = ( + 57A4D1B01BA13D7A00F7D4B1 /* Sources */, + 57A4D2071BA13D7A00F7D4B1 /* Frameworks */, + 57A4D2091BA13D7A00F7D4B1 /* Headers */, + 57A4D23B1BA13D7A00F7D4B1 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "ReactiveSwift-tvOS"; + productName = ReactiveCocoa; + productReference = 57A4D2411BA13D7A00F7D4B1 /* ReactiveSwift.framework */; + productType = "com.apple.product-type.framework"; + }; + 7DFBED021CDB8C9500EE435B /* ReactiveSwift-tvOSTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7DFBED0F1CDB8C9500EE435B /* Build configuration list for PBXNativeTarget "ReactiveSwift-tvOSTests" */; + buildPhases = ( + 7DFBECFF1CDB8C9500EE435B /* Sources */, + 7DFBED001CDB8C9500EE435B /* Frameworks */, + 7DFBED011CDB8C9500EE435B /* Resources */, + 7DFBED151CDB8CEC00EE435B /* Copy Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 7DFBED0A1CDB8C9500EE435B /* PBXTargetDependency */, + ); + name = "ReactiveSwift-tvOSTests"; + productName = "ReactiveCocoa-tvOSTests"; + productReference = 7DFBED031CDB8C9500EE435B /* ReactiveSwiftTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + A9B315531B3940610001CB9C /* ReactiveSwift-watchOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = A9B3155D1B3940610001CB9C /* Build configuration list for PBXNativeTarget "ReactiveSwift-watchOS" */; + buildPhases = ( + A9B3154F1B3940610001CB9C /* Sources */, + A9B315501B3940610001CB9C /* Frameworks */, + A9B315511B3940610001CB9C /* Headers */, + A9B315521B3940610001CB9C /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "ReactiveSwift-watchOS"; + productName = ReactiveCocoa; + productReference = A9B315541B3940610001CB9C /* ReactiveSwift.framework */; + productType = "com.apple.product-type.framework"; + }; + D04725E919E49ED7006002AA /* ReactiveSwift-macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = D047260019E49ED7006002AA /* Build configuration list for PBXNativeTarget "ReactiveSwift-macOS" */; + buildPhases = ( + D04725E519E49ED7006002AA /* Sources */, + D04725E619E49ED7006002AA /* Frameworks */, + D04725E719E49ED7006002AA /* Headers */, + D04725E819E49ED7006002AA /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "ReactiveSwift-macOS"; + productName = ReactiveCocoa; + productReference = D04725EA19E49ED7006002AA /* ReactiveSwift.framework */; + productType = "com.apple.product-type.framework"; + }; + D04725F419E49ED7006002AA /* ReactiveSwift-macOSTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = D047260319E49ED7006002AA /* Build configuration list for PBXNativeTarget "ReactiveSwift-macOSTests" */; + buildPhases = ( + D04725F119E49ED7006002AA /* Sources */, + D04725F219E49ED7006002AA /* Frameworks */, + D04725F319E49ED7006002AA /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + D04725F819E49ED7006002AA /* PBXTargetDependency */, + ); + name = "ReactiveSwift-macOSTests"; + productName = ReactiveCocoaTests; + productReference = D04725F519E49ED7006002AA /* ReactiveSwiftTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + D047260B19E49F82006002AA /* ReactiveSwift-iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = D047261F19E49F82006002AA /* Build configuration list for PBXNativeTarget "ReactiveSwift-iOS" */; + buildPhases = ( + D047260719E49F82006002AA /* Sources */, + D047260819E49F82006002AA /* Frameworks */, + D047260919E49F82006002AA /* Headers */, + D047260A19E49F82006002AA /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "ReactiveSwift-iOS"; + productName = ReactiveCocoa; + productReference = D047260C19E49F82006002AA /* ReactiveSwift.framework */; + productType = "com.apple.product-type.framework"; + }; + D047261519E49F82006002AA /* ReactiveSwift-iOSTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = D047262219E49F82006002AA /* Build configuration list for PBXNativeTarget "ReactiveSwift-iOSTests" */; + buildPhases = ( + D047261219E49F82006002AA /* Sources */, + D047261319E49F82006002AA /* Frameworks */, + D047261419E49F82006002AA /* Resources */, + D01B7B6119EDD8F600D26E01 /* Copy Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + D047261919E49F82006002AA /* PBXTargetDependency */, + ); + name = "ReactiveSwift-iOSTests"; + productName = ReactiveCocoaTests; + productReference = D047261619E49F82006002AA /* ReactiveSwiftTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D04725E119E49ED7006002AA /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0730; + LastUpgradeCheck = 0710; + ORGANIZATIONNAME = GitHub; + TargetAttributes = { + 57A4D1AF1BA13D7A00F7D4B1 = { + LastSwiftMigration = 0800; + }; + 7DFBED021CDB8C9500EE435B = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 0800; + }; + A9B315531B3940610001CB9C = { + CreatedOnToolsVersion = 7.0; + LastSwiftMigration = 0800; + }; + D04725E919E49ED7006002AA = { + CreatedOnToolsVersion = 6.1; + LastSwiftMigration = 0800; + }; + D04725F419E49ED7006002AA = { + CreatedOnToolsVersion = 6.1; + LastSwiftMigration = 0800; + }; + D047260B19E49F82006002AA = { + CreatedOnToolsVersion = 6.1; + LastSwiftMigration = 0800; + }; + D047261519E49F82006002AA = { + CreatedOnToolsVersion = 6.1; + LastSwiftMigration = 0800; + }; + }; + }; + buildConfigurationList = D04725E419E49ED7006002AA /* Build configuration list for PBXProject "ReactiveSwift" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = D04725E019E49ED7006002AA; + productRefGroup = D04725EB19E49ED7006002AA /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + D04725E919E49ED7006002AA /* ReactiveSwift-macOS */, + D04725F419E49ED7006002AA /* ReactiveSwift-macOSTests */, + D047260B19E49F82006002AA /* ReactiveSwift-iOS */, + D047261519E49F82006002AA /* ReactiveSwift-iOSTests */, + A9B315531B3940610001CB9C /* ReactiveSwift-watchOS */, + 57A4D1AF1BA13D7A00F7D4B1 /* ReactiveSwift-tvOS */, + 7DFBED021CDB8C9500EE435B /* ReactiveSwift-tvOSTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 57A4D23B1BA13D7A00F7D4B1 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7DFBED011CDB8C9500EE435B /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A9B315521B3940610001CB9C /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D04725E819E49ED7006002AA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D04725F319E49ED7006002AA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D047260A19E49F82006002AA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D047261419E49F82006002AA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 57A4D1B01BA13D7A00F7D4B1 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 57A4D1B11BA13D7A00F7D4B1 /* Optional.swift in Sources */, + 57A4D1B41BA13D7A00F7D4B1 /* Disposable.swift in Sources */, + 57A4D1B61BA13D7A00F7D4B1 /* Event.swift in Sources */, + 57A4D1B81BA13D7A00F7D4B1 /* Scheduler.swift in Sources */, + 57A4D1B91BA13D7A00F7D4B1 /* Action.swift in Sources */, + 57A4D1BA1BA13D7A00F7D4B1 /* Property.swift in Sources */, + 57A4D1BB1BA13D7A00F7D4B1 /* Signal.swift in Sources */, + 57A4D1BC1BA13D7A00F7D4B1 /* SignalProducer.swift in Sources */, + 57A4D1BD1BA13D7A00F7D4B1 /* Atomic.swift in Sources */, + 57A4D1BE1BA13D7A00F7D4B1 /* Bag.swift in Sources */, + 57A4D1BF1BA13D7A00F7D4B1 /* TupleExtensions.swift in Sources */, + 57A4D1C01BA13D7A00F7D4B1 /* FoundationExtensions.swift in Sources */, + D85C652D1C0E70E5005A77AD /* Flatten.swift in Sources */, + 9ABCB1881D2A5B5A00BCA243 /* Deprecations+Removals.swift in Sources */, + EBCC7DBF1BBF01E200A2AE92 /* Observer.swift in Sources */, + C79B64801CD52E4E003F2376 /* EventLogger.swift in Sources */, + 4A0E11021D2A92720065D310 /* Lifetime.swift in Sources */, + BE9CF3981D751B71003AE479 /* UnidirectionalBinding.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7DFBECFF1CDB8C9500EE435B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7DFBED221CDB8DE300EE435B /* ActionSpec.swift in Sources */, + 7DFBED231CDB8DE300EE435B /* AtomicSpec.swift in Sources */, + 7DFBED241CDB8DE300EE435B /* BagSpec.swift in Sources */, + 7DFBED251CDB8DE300EE435B /* DisposableSpec.swift in Sources */, + 7DFBED261CDB8DE300EE435B /* FoundationExtensionsSpec.swift in Sources */, + 7DFBED281CDB8DE300EE435B /* PropertySpec.swift in Sources */, + 7DFBED291CDB8DE300EE435B /* SchedulerSpec.swift in Sources */, + 7DFBED2A1CDB8DE300EE435B /* SignalLifetimeSpec.swift in Sources */, + 7DFBED2B1CDB8DE300EE435B /* SignalProducerSpec.swift in Sources */, + 7DFBED2C1CDB8DE300EE435B /* SignalProducerLiftingSpec.swift in Sources */, + 7DFBED2D1CDB8DE300EE435B /* SignalSpec.swift in Sources */, + 7DFBED2E1CDB8DE300EE435B /* FlattenSpec.swift in Sources */, + 7DFBED2F1CDB8DE300EE435B /* TestError.swift in Sources */, + 7DFBED301CDB8DE300EE435B /* TestLogger.swift in Sources */, + 4A0E11061D2A95200065D310 /* LifetimeSpec.swift in Sources */, + 7DFBED6D1CDB8F7D00EE435B /* SignalProducerNimbleMatchers.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A9B3154F1B3940610001CB9C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A9F793341B60D0140026BCBA /* Optional.swift in Sources */, + A9B315BC1B3940810001CB9C /* Disposable.swift in Sources */, + A9B315BE1B3940810001CB9C /* Event.swift in Sources */, + A9B315C01B3940810001CB9C /* Scheduler.swift in Sources */, + A9B315C11B3940810001CB9C /* Action.swift in Sources */, + A9B315C21B3940810001CB9C /* Property.swift in Sources */, + A9B315C31B3940810001CB9C /* Signal.swift in Sources */, + A9B315C41B3940810001CB9C /* SignalProducer.swift in Sources */, + A9B315C51B3940810001CB9C /* Atomic.swift in Sources */, + A9B315C61B3940810001CB9C /* Bag.swift in Sources */, + A9B315C71B3940810001CB9C /* TupleExtensions.swift in Sources */, + A9B315C81B3940810001CB9C /* FoundationExtensions.swift in Sources */, + D85C652C1C0E70E4005A77AD /* Flatten.swift in Sources */, + 9ABCB1871D2A5B5A00BCA243 /* Deprecations+Removals.swift in Sources */, + EBCC7DBE1BBF01E200A2AE92 /* Observer.swift in Sources */, + C79B647F1CD52E4D003F2376 /* EventLogger.swift in Sources */, + 4A0E11011D2A92720065D310 /* Lifetime.swift in Sources */, + BE9CF3971D751B71003AE479 /* UnidirectionalBinding.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D04725E519E49ED7006002AA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D00004091A46864E000E7D41 /* TupleExtensions.swift in Sources */, + D871D69F1B3B29A40070F16C /* Optional.swift in Sources */, + D08C54B61A69A3DB00AD8286 /* Event.swift in Sources */, + D0C312D319EF2A5800984962 /* Disposable.swift in Sources */, + EBCC7DBC1BBF010C00A2AE92 /* Observer.swift in Sources */, + D03B4A3D19F4C39A009E02AC /* FoundationExtensions.swift in Sources */, + D08C54B31A69A2AE00AD8286 /* Signal.swift in Sources */, + D85C652A1C0D84C7005A77AD /* Flatten.swift in Sources */, + D0C312CF19EF2A5800984962 /* Bag.swift in Sources */, + 4A0E10FF1D2A92720065D310 /* Lifetime.swift in Sources */, + D0C312E719EF2A5800984962 /* Scheduler.swift in Sources */, + D0C312CD19EF2A5800984962 /* Atomic.swift in Sources */, + D08C54BA1A69C54300AD8286 /* Property.swift in Sources */, + D0D11AB91A6AE87700C1F8B1 /* Action.swift in Sources */, + C79B647C1CD52E23003F2376 /* EventLogger.swift in Sources */, + 9ABCB1851D2A5B5A00BCA243 /* Deprecations+Removals.swift in Sources */, + D08C54B81A69A9D000AD8286 /* SignalProducer.swift in Sources */, + BE9CF3951D751B6B003AE479 /* UnidirectionalBinding.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D04725F119E49ED7006002AA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D0A2260E1A72F16D00D33B74 /* PropertySpec.swift in Sources */, + B696FB811A7640C00075236D /* TestError.swift in Sources */, + D021671D1A6CD50500987861 /* ActionSpec.swift in Sources */, + D0C3130E19EF2B1F00984962 /* SchedulerSpec.swift in Sources */, + BFA6B94D1A7604D400C846D1 /* SignalProducerNimbleMatchers.swift in Sources */, + D8170FC11B100EBC004192AD /* FoundationExtensionsSpec.swift in Sources */, + C79B64741CD38B2B003F2376 /* TestLogger.swift in Sources */, + CA6F28501C52626B001879D2 /* FlattenSpec.swift in Sources */, + 4A0E11041D2A95200065D310 /* LifetimeSpec.swift in Sources */, + CDCD247A1C277EEC00710AEE /* AtomicSpec.swift in Sources */, + 579504331BB8A34200A5E482 /* BagSpec.swift in Sources */, + D0A226081A72E0E900D33B74 /* SignalSpec.swift in Sources */, + 02D2602B1C1D6DB8003ACC61 /* SignalLifetimeSpec.swift in Sources */, + D0C3130C19EF2B1F00984962 /* DisposableSpec.swift in Sources */, + D0A2260B1A72E6C500D33B74 /* SignalProducerSpec.swift in Sources */, + D8024DB21B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D047260719E49F82006002AA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D08C54B41A69A2AF00AD8286 /* Signal.swift in Sources */, + D8E84A671B3B32FB00C3E831 /* Optional.swift in Sources */, + D0C312D419EF2A5800984962 /* Disposable.swift in Sources */, + D08C54B91A69A9D100AD8286 /* SignalProducer.swift in Sources */, + 9ABCB1861D2A5B5A00BCA243 /* Deprecations+Removals.swift in Sources */, + EBCC7DBD1BBF01E100A2AE92 /* Observer.swift in Sources */, + D85C652B1C0E70E3005A77AD /* Flatten.swift in Sources */, + 4A0E11001D2A92720065D310 /* Lifetime.swift in Sources */, + D08C54BB1A69C54400AD8286 /* Property.swift in Sources */, + D03B4A3E19F4C39A009E02AC /* FoundationExtensions.swift in Sources */, + D000040A1A46864E000E7D41 /* TupleExtensions.swift in Sources */, + D08C54B71A69A3DB00AD8286 /* Event.swift in Sources */, + C79B647D1CD52E4A003F2376 /* EventLogger.swift in Sources */, + D0C312CE19EF2A5800984962 /* Atomic.swift in Sources */, + D0C312E819EF2A5800984962 /* Scheduler.swift in Sources */, + D0C312D019EF2A5800984962 /* Bag.swift in Sources */, + D0D11ABA1A6AE87700C1F8B1 /* Action.swift in Sources */, + BE9CF3961D751B70003AE479 /* UnidirectionalBinding.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D047261219E49F82006002AA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D0A2260C1A72E6C500D33B74 /* SignalProducerSpec.swift in Sources */, + D0A2260F1A72F16D00D33B74 /* PropertySpec.swift in Sources */, + D0A226091A72E0E900D33B74 /* SignalSpec.swift in Sources */, + CDCD247B1C277EED00710AEE /* AtomicSpec.swift in Sources */, + D021671E1A6CD50500987861 /* ActionSpec.swift in Sources */, + D8024DB31B2E1BB0005E6B9A /* SignalProducerLiftingSpec.swift in Sources */, + BFA6B94E1A7604D500C846D1 /* SignalProducerNimbleMatchers.swift in Sources */, + B696FB821A7640C00075236D /* TestError.swift in Sources */, + D8170FC21B100EBC004192AD /* FoundationExtensionsSpec.swift in Sources */, + D0C3131419EF2B2000984962 /* SchedulerSpec.swift in Sources */, + C79B64751CD38B2B003F2376 /* TestLogger.swift in Sources */, + D0C3131219EF2B2000984962 /* DisposableSpec.swift in Sources */, + CA6F28511C52626B001879D2 /* FlattenSpec.swift in Sources */, + 579504341BB8A34300A5E482 /* BagSpec.swift in Sources */, + 4A0E11051D2A95200065D310 /* LifetimeSpec.swift in Sources */, + 02D2602A1C1D6DAF003ACC61 /* SignalLifetimeSpec.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 7DFBED0A1CDB8C9500EE435B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 57A4D1AF1BA13D7A00F7D4B1 /* ReactiveSwift-tvOS */; + targetProxy = 7DFBED091CDB8C9500EE435B /* PBXContainerItemProxy */; + }; + D04725F819E49ED7006002AA /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = D04725E919E49ED7006002AA /* ReactiveSwift-macOS */; + targetProxy = D04725F719E49ED7006002AA /* PBXContainerItemProxy */; + }; + D047261919E49F82006002AA /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = D047260B19E49F82006002AA /* ReactiveSwift-iOS */; + targetProxy = D047261819E49F82006002AA /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 57A4D23D1BA13D7A00F7D4B1 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 57A4D2461BA13F9700F7D4B1 /* tvOS-Framework.xcconfig */; + buildSettings = { + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + ENABLE_BITCODE = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "DTRACE_PROBES_DISABLED=1", + ); + INFOPLIST_FILE = ReactiveSwift/Info.plist; + }; + name = Debug; + }; + 57A4D23E1BA13D7A00F7D4B1 /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 57A4D2461BA13F9700F7D4B1 /* tvOS-Framework.xcconfig */; + buildSettings = { + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + ENABLE_BITCODE = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "DTRACE_PROBES_DISABLED=1", + ); + INFOPLIST_FILE = ReactiveSwift/Info.plist; + }; + name = Test; + }; + 57A4D23F1BA13D7A00F7D4B1 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 57A4D2461BA13F9700F7D4B1 /* tvOS-Framework.xcconfig */; + buildSettings = { + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + ENABLE_BITCODE = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "DTRACE_PROBES_DISABLED=1", + ); + INFOPLIST_FILE = ReactiveSwift/Info.plist; + }; + name = Release; + }; + 57A4D2401BA13D7A00F7D4B1 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 57A4D2461BA13F9700F7D4B1 /* tvOS-Framework.xcconfig */; + buildSettings = { + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + ENABLE_BITCODE = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "DTRACE_PROBES_DISABLED=1", + ); + INFOPLIST_FILE = ReactiveSwift/Info.plist; + }; + name = Profile; + }; + 7DFBED0B1CDB8C9500EE435B /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 57A4D2441BA13F9700F7D4B1 /* tvOS-Application.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + INFOPLIST_FILE = ReactiveSwiftTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(PROJECT_NAME)Tests"; + }; + name = Debug; + }; + 7DFBED0C1CDB8C9500EE435B /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 57A4D2441BA13F9700F7D4B1 /* tvOS-Application.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + INFOPLIST_FILE = ReactiveSwiftTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(PROJECT_NAME)Tests"; + }; + name = Test; + }; + 7DFBED0D1CDB8C9500EE435B /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 57A4D2441BA13F9700F7D4B1 /* tvOS-Application.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + INFOPLIST_FILE = ReactiveSwiftTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(PROJECT_NAME)Tests"; + }; + name = Release; + }; + 7DFBED0E1CDB8C9500EE435B /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 57A4D2441BA13F9700F7D4B1 /* tvOS-Application.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + INFOPLIST_FILE = ReactiveSwiftTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(PROJECT_NAME)Tests"; + }; + name = Profile; + }; + A9B315591B3940610001CB9C /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A97451351B3A935E00F48E55 /* watchOS-Framework.xcconfig */; + buildSettings = { + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + ENABLE_BITCODE = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "DTRACE_PROBES_DISABLED=1", + ); + INFOPLIST_FILE = ReactiveSwift/Info.plist; + }; + name = Debug; + }; + A9B3155A1B3940610001CB9C /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A97451351B3A935E00F48E55 /* watchOS-Framework.xcconfig */; + buildSettings = { + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + ENABLE_BITCODE = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "DTRACE_PROBES_DISABLED=1", + ); + INFOPLIST_FILE = ReactiveSwift/Info.plist; + }; + name = Test; + }; + A9B3155B1B3940610001CB9C /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A97451351B3A935E00F48E55 /* watchOS-Framework.xcconfig */; + buildSettings = { + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + ENABLE_BITCODE = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "DTRACE_PROBES_DISABLED=1", + ); + INFOPLIST_FILE = ReactiveSwift/Info.plist; + }; + name = Release; + }; + A9B3155C1B3940610001CB9C /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A97451351B3A935E00F48E55 /* watchOS-Framework.xcconfig */; + buildSettings = { + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + ENABLE_BITCODE = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "DTRACE_PROBES_DISABLED=1", + ); + INFOPLIST_FILE = ReactiveSwift/Info.plist; + }; + name = Profile; + }; + D04725FE19E49ED7006002AA /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D047262919E49FE8006002AA /* Debug.xcconfig */; + buildSettings = { + BITCODE_GENERATION_MODE = bitcode; + CODE_SIGNING_REQUIRED = NO; + CURRENT_PROJECT_VERSION = 1; + ENABLE_TESTABILITY = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MACOSX_DEPLOYMENT_TARGET = 10.9; + PRODUCT_BUNDLE_IDENTIFIER = "org.reactivecocoa.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(PROJECT_NAME)"; + SWIFT_VERSION = 3.0; + TVOS_DEPLOYMENT_TARGET = 9.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + WATCHOS_DEPLOYMENT_TARGET = 2.0; + }; + name = Debug; + }; + D04725FF19E49ED7006002AA /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D047262B19E49FE8006002AA /* Release.xcconfig */; + buildSettings = { + BITCODE_GENERATION_MODE = bitcode; + CODE_SIGNING_REQUIRED = NO; + CURRENT_PROJECT_VERSION = 1; + GCC_OPTIMIZATION_LEVEL = 0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MACOSX_DEPLOYMENT_TARGET = 10.9; + PRODUCT_BUNDLE_IDENTIFIER = "org.reactivecocoa.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(PROJECT_NAME)"; + SWIFT_VERSION = 3.0; + TVOS_DEPLOYMENT_TARGET = 9.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + WATCHOS_DEPLOYMENT_TARGET = 2.0; + }; + name = Release; + }; + D047260119E49ED7006002AA /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D047263A19E49FE8006002AA /* Mac-Framework.xcconfig */; + buildSettings = { + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + FRAMEWORK_VERSION = A; + INFOPLIST_FILE = ReactiveSwift/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + }; + name = Debug; + }; + D047260219E49ED7006002AA /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D047263A19E49FE8006002AA /* Mac-Framework.xcconfig */; + buildSettings = { + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + FRAMEWORK_VERSION = A; + INFOPLIST_FILE = ReactiveSwift/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + }; + name = Release; + }; + D047260419E49ED7006002AA /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D047263719E49FE8006002AA /* Mac-Application.xcconfig */; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(DEVELOPER_FRAMEWORKS_DIR)", + "$(inherited)", + ); + INFOPLIST_FILE = ReactiveSwiftTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; + PRODUCT_NAME = "$(PROJECT_NAME)Tests"; + }; + name = Debug; + }; + D047260519E49ED7006002AA /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D047263719E49FE8006002AA /* Mac-Application.xcconfig */; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(DEVELOPER_FRAMEWORKS_DIR)", + "$(inherited)", + ); + INFOPLIST_FILE = ReactiveSwiftTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; + PRODUCT_NAME = "$(PROJECT_NAME)Tests"; + }; + name = Release; + }; + D047262019E49F82006002AA /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D047263419E49FE8006002AA /* iOS-Framework.xcconfig */; + buildSettings = { + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + ENABLE_BITCODE = YES; + INFOPLIST_FILE = ReactiveSwift/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + }; + name = Debug; + }; + D047262119E49F82006002AA /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D047263419E49FE8006002AA /* iOS-Framework.xcconfig */; + buildSettings = { + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + ENABLE_BITCODE = YES; + INFOPLIST_FILE = ReactiveSwift/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + }; + name = Release; + }; + D047262319E49F82006002AA /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D047263219E49FE8006002AA /* iOS-Application.xcconfig */; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + INFOPLIST_FILE = ReactiveSwiftTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(PROJECT_NAME)Tests"; + }; + name = Debug; + }; + D047262419E49F82006002AA /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D047263219E49FE8006002AA /* iOS-Application.xcconfig */; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + INFOPLIST_FILE = ReactiveSwiftTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(PROJECT_NAME)Tests"; + }; + name = Release; + }; + D047263D19E4A008006002AA /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D047262A19E49FE8006002AA /* Profile.xcconfig */; + buildSettings = { + BITCODE_GENERATION_MODE = bitcode; + CODE_SIGNING_REQUIRED = NO; + CURRENT_PROJECT_VERSION = 1; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MACOSX_DEPLOYMENT_TARGET = 10.9; + PRODUCT_BUNDLE_IDENTIFIER = "org.reactivecocoa.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(PROJECT_NAME)"; + SWIFT_VERSION = 3.0; + TVOS_DEPLOYMENT_TARGET = 9.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + WATCHOS_DEPLOYMENT_TARGET = 2.0; + }; + name = Profile; + }; + D047263E19E4A008006002AA /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D047263A19E49FE8006002AA /* Mac-Framework.xcconfig */; + buildSettings = { + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + FRAMEWORK_VERSION = A; + INFOPLIST_FILE = ReactiveSwift/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + }; + name = Profile; + }; + D047263F19E4A008006002AA /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D047263719E49FE8006002AA /* Mac-Application.xcconfig */; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(DEVELOPER_FRAMEWORKS_DIR)", + "$(inherited)", + ); + INFOPLIST_FILE = ReactiveSwiftTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; + PRODUCT_NAME = "$(PROJECT_NAME)Tests"; + }; + name = Profile; + }; + D047264019E4A008006002AA /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D047263419E49FE8006002AA /* iOS-Framework.xcconfig */; + buildSettings = { + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + ENABLE_BITCODE = YES; + INFOPLIST_FILE = ReactiveSwift/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + }; + name = Profile; + }; + D047264119E4A008006002AA /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D047263219E49FE8006002AA /* iOS-Application.xcconfig */; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + INFOPLIST_FILE = ReactiveSwiftTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(PROJECT_NAME)Tests"; + }; + name = Profile; + }; + D047264219E4A00B006002AA /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D047262C19E49FE8006002AA /* Test.xcconfig */; + buildSettings = { + BITCODE_GENERATION_MODE = bitcode; + CODE_SIGNING_REQUIRED = NO; + CURRENT_PROJECT_VERSION = 1; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MACOSX_DEPLOYMENT_TARGET = 10.9; + PRODUCT_BUNDLE_IDENTIFIER = "org.reactivecocoa.$(PRODUCT_NAME:rfc1034identifier)-Tests"; + PRODUCT_NAME = "$(PROJECT_NAME)"; + SWIFT_VERSION = 3.0; + TVOS_DEPLOYMENT_TARGET = 9.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + WATCHOS_DEPLOYMENT_TARGET = 2.0; + }; + name = Test; + }; + D047264319E4A00B006002AA /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D047263A19E49FE8006002AA /* Mac-Framework.xcconfig */; + buildSettings = { + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + FRAMEWORK_VERSION = A; + INFOPLIST_FILE = ReactiveSwift/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + }; + name = Test; + }; + D047264419E4A00B006002AA /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D047263719E49FE8006002AA /* Mac-Application.xcconfig */; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(DEVELOPER_FRAMEWORKS_DIR)", + "$(inherited)", + ); + INFOPLIST_FILE = ReactiveSwiftTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; + PRODUCT_NAME = "$(PROJECT_NAME)Tests"; + }; + name = Test; + }; + D047264519E4A00B006002AA /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D047263419E49FE8006002AA /* iOS-Framework.xcconfig */; + buildSettings = { + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + ENABLE_BITCODE = YES; + INFOPLIST_FILE = ReactiveSwift/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + }; + name = Test; + }; + D047264619E4A00B006002AA /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D047263219E49FE8006002AA /* iOS-Application.xcconfig */; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + INFOPLIST_FILE = ReactiveSwiftTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(PROJECT_NAME)Tests"; + }; + name = Test; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 57A4D23C1BA13D7A00F7D4B1 /* Build configuration list for PBXNativeTarget "ReactiveSwift-tvOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 57A4D23D1BA13D7A00F7D4B1 /* Debug */, + 57A4D23E1BA13D7A00F7D4B1 /* Test */, + 57A4D23F1BA13D7A00F7D4B1 /* Release */, + 57A4D2401BA13D7A00F7D4B1 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 7DFBED0F1CDB8C9500EE435B /* Build configuration list for PBXNativeTarget "ReactiveSwift-tvOSTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7DFBED0B1CDB8C9500EE435B /* Debug */, + 7DFBED0C1CDB8C9500EE435B /* Test */, + 7DFBED0D1CDB8C9500EE435B /* Release */, + 7DFBED0E1CDB8C9500EE435B /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + A9B3155D1B3940610001CB9C /* Build configuration list for PBXNativeTarget "ReactiveSwift-watchOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A9B315591B3940610001CB9C /* Debug */, + A9B3155A1B3940610001CB9C /* Test */, + A9B3155B1B3940610001CB9C /* Release */, + A9B3155C1B3940610001CB9C /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + D04725E419E49ED7006002AA /* Build configuration list for PBXProject "ReactiveSwift" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D04725FE19E49ED7006002AA /* Debug */, + D047264219E4A00B006002AA /* Test */, + D04725FF19E49ED7006002AA /* Release */, + D047263D19E4A008006002AA /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + D047260019E49ED7006002AA /* Build configuration list for PBXNativeTarget "ReactiveSwift-macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D047260119E49ED7006002AA /* Debug */, + D047264319E4A00B006002AA /* Test */, + D047260219E49ED7006002AA /* Release */, + D047263E19E4A008006002AA /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + D047260319E49ED7006002AA /* Build configuration list for PBXNativeTarget "ReactiveSwift-macOSTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D047260419E49ED7006002AA /* Debug */, + D047264419E4A00B006002AA /* Test */, + D047260519E49ED7006002AA /* Release */, + D047263F19E4A008006002AA /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + D047261F19E49F82006002AA /* Build configuration list for PBXNativeTarget "ReactiveSwift-iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D047262019E49F82006002AA /* Debug */, + D047264519E4A00B006002AA /* Test */, + D047262119E49F82006002AA /* Release */, + D047264019E4A008006002AA /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + D047262219E49F82006002AA /* Build configuration list for PBXNativeTarget "ReactiveSwift-iOSTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D047262319E49F82006002AA /* Debug */, + D047264619E4A00B006002AA /* Test */, + D047262419E49F82006002AA /* Release */, + D047264119E4A008006002AA /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = D04725E119E49ED7006002AA /* Project object */; +} diff --git a/ReactiveSwift.xcodeproj/xcshareddata/xcschemes/ReactiveSwift-iOS.xcscheme b/ReactiveSwift.xcodeproj/xcshareddata/xcschemes/ReactiveSwift-iOS.xcscheme new file mode 100644 index 0000000000..749a8751b4 --- /dev/null +++ b/ReactiveSwift.xcodeproj/xcshareddata/xcschemes/ReactiveSwift-iOS.xcscheme @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ReactiveSwift.xcodeproj/xcshareddata/xcschemes/ReactiveSwift-macOS.xcscheme b/ReactiveSwift.xcodeproj/xcshareddata/xcschemes/ReactiveSwift-macOS.xcscheme new file mode 100644 index 0000000000..4709eecf1e --- /dev/null +++ b/ReactiveSwift.xcodeproj/xcshareddata/xcschemes/ReactiveSwift-macOS.xcscheme @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ReactiveSwift.xcodeproj/xcshareddata/xcschemes/ReactiveSwift-tvOS.xcscheme b/ReactiveSwift.xcodeproj/xcshareddata/xcschemes/ReactiveSwift-tvOS.xcscheme new file mode 100644 index 0000000000..863741d9ed --- /dev/null +++ b/ReactiveSwift.xcodeproj/xcshareddata/xcschemes/ReactiveSwift-tvOS.xcscheme @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ReactiveSwift.xcodeproj/xcshareddata/xcschemes/ReactiveSwift-watchOS.xcscheme b/ReactiveSwift.xcodeproj/xcshareddata/xcschemes/ReactiveSwift-watchOS.xcscheme new file mode 100644 index 0000000000..2bdc6d5ca2 --- /dev/null +++ b/ReactiveSwift.xcodeproj/xcshareddata/xcschemes/ReactiveSwift-watchOS.xcscheme @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ReactiveCocoa/Swift/Action.swift b/ReactiveSwift/Action.swift similarity index 99% rename from ReactiveCocoa/Swift/Action.swift rename to ReactiveSwift/Action.swift index 0e7f5f3d75..2e3b3bd4b3 100644 --- a/ReactiveCocoa/Swift/Action.swift +++ b/ReactiveSwift/Action.swift @@ -50,7 +50,7 @@ public final class Action { /// This queue is used for read-modify-write operations on the `_executing` /// property. private let executingQueue = DispatchQueue( - label: "org.reactivecocoa.ReactiveCocoa.Action.executingQueue", + label: "org.reactivecocoa.ReactiveSwift.Action.executingQueue", attributes: [] ) diff --git a/ReactiveCocoa/Swift/Atomic.swift b/ReactiveSwift/Atomic.swift similarity index 99% rename from ReactiveCocoa/Swift/Atomic.swift rename to ReactiveSwift/Atomic.swift index 1f0029c916..fbea4f8f66 100644 --- a/ReactiveCocoa/Swift/Atomic.swift +++ b/ReactiveSwift/Atomic.swift @@ -1,6 +1,6 @@ // // Atomic.swift -// ReactiveCocoa +// ReactiveSwift // // Created by Justin Spahr-Summers on 2014-06-10. // Copyright (c) 2014 GitHub. All rights reserved. diff --git a/ReactiveCocoa/Swift/Bag.swift b/ReactiveSwift/Bag.swift similarity index 99% rename from ReactiveCocoa/Swift/Bag.swift rename to ReactiveSwift/Bag.swift index 3053d162f1..657f746395 100644 --- a/ReactiveCocoa/Swift/Bag.swift +++ b/ReactiveSwift/Bag.swift @@ -1,6 +1,6 @@ // // Bag.swift -// ReactiveCocoa +// ReactiveSwift // // Created by Justin Spahr-Summers on 2014-07-10. // Copyright (c) 2014 GitHub. All rights reserved. diff --git a/ReactiveCocoa/Swift/Deprecations+Removals.swift b/ReactiveSwift/Deprecations+Removals.swift similarity index 97% rename from ReactiveCocoa/Swift/Deprecations+Removals.swift rename to ReactiveSwift/Deprecations+Removals.swift index 13c460e809..53899b6245 100644 --- a/ReactiveCocoa/Swift/Deprecations+Removals.swift +++ b/ReactiveSwift/Deprecations+Removals.swift @@ -60,14 +60,6 @@ extension ActionProtocol { public var executing: Bool { fatalError() } } -extension CocoaAction { - @available(*, unavailable, renamed:"isEnabled") - @nonobjc public var enabled: Bool { fatalError() } - - @available(*, unavailable, renamed:"isExecuting") - @nonobjc public var executing: Bool { fatalError() } -} - // Renamed Enum cases extension Event { diff --git a/ReactiveCocoa/Swift/Disposable.swift b/ReactiveSwift/Disposable.swift similarity index 99% rename from ReactiveCocoa/Swift/Disposable.swift rename to ReactiveSwift/Disposable.swift index 94efb71b41..5c48b71aa2 100644 --- a/ReactiveCocoa/Swift/Disposable.swift +++ b/ReactiveSwift/Disposable.swift @@ -1,6 +1,6 @@ // // Disposable.swift -// ReactiveCocoa +// ReactiveSwift // // Created by Justin Spahr-Summers on 2014-06-02. // Copyright (c) 2014 GitHub. All rights reserved. diff --git a/ReactiveCocoa/Swift/Event.swift b/ReactiveSwift/Event.swift similarity index 99% rename from ReactiveCocoa/Swift/Event.swift rename to ReactiveSwift/Event.swift index 6509f5d226..06bcc2eac3 100644 --- a/ReactiveCocoa/Swift/Event.swift +++ b/ReactiveSwift/Event.swift @@ -1,6 +1,6 @@ // // Event.swift -// ReactiveCocoa +// ReactiveSwift // // Created by Justin Spahr-Summers on 2015-01-16. // Copyright (c) 2015 GitHub. All rights reserved. diff --git a/ReactiveCocoa/Swift/EventLogger.swift b/ReactiveSwift/EventLogger.swift similarity index 99% rename from ReactiveCocoa/Swift/EventLogger.swift rename to ReactiveSwift/EventLogger.swift index 7f9c6266b4..2d43aa01d7 100644 --- a/ReactiveCocoa/Swift/EventLogger.swift +++ b/ReactiveSwift/EventLogger.swift @@ -1,6 +1,6 @@ // // EventLogger.swift -// ReactiveCocoa +// ReactiveSwift // // Created by Rui Peres on 30/04/2016. // Copyright © 2016 GitHub. All rights reserved. diff --git a/ReactiveCocoa/Swift/Flatten.swift b/ReactiveSwift/Flatten.swift similarity index 99% rename from ReactiveCocoa/Swift/Flatten.swift rename to ReactiveSwift/Flatten.swift index d51991c653..716bd5668a 100644 --- a/ReactiveCocoa/Swift/Flatten.swift +++ b/ReactiveSwift/Flatten.swift @@ -1,6 +1,6 @@ // // Flatten.swift -// ReactiveCocoa +// ReactiveSwift // // Created by Neil Pankey on 11/30/15. // Copyright © 2015 GitHub. All rights reserved. diff --git a/ReactiveCocoa/Swift/FoundationExtensions.swift b/ReactiveSwift/FoundationExtensions.swift similarity index 96% rename from ReactiveCocoa/Swift/FoundationExtensions.swift rename to ReactiveSwift/FoundationExtensions.swift index 8f36b3f343..9a6d8bbf52 100644 --- a/ReactiveCocoa/Swift/FoundationExtensions.swift +++ b/ReactiveSwift/FoundationExtensions.swift @@ -1,6 +1,6 @@ // // FoundationExtensions.swift -// ReactiveCocoa +// ReactiveSwift // // Created by Justin Spahr-Summers on 2014-10-19. // Copyright (c) 2014 GitHub. All rights reserved. @@ -44,7 +44,7 @@ extension NotificationCenter { } } -private let defaultSessionError = NSError(domain: "org.reactivecocoa.ReactiveCocoa.rac_dataWithRequest", code: 1, userInfo: nil) +private let defaultSessionError = NSError(domain: "org.reactivecocoa.ReactiveSwift.rac_dataWithRequest", code: 1, userInfo: nil) extension URLSession { /// Returns a SignalProducer which performs the work associated with an diff --git a/ReactiveSwift/Info.plist b/ReactiveSwift/Info.plist new file mode 100644 index 0000000000..9a11afdc43 --- /dev/null +++ b/ReactiveSwift/Info.plist @@ -0,0 +1,28 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSHumanReadableCopyright + Copyright © 2014 GitHub. All rights reserved. + NSPrincipalClass + + + diff --git a/ReactiveCocoa/Swift/Lifetime.swift b/ReactiveSwift/Lifetime.swift similarity index 71% rename from ReactiveCocoa/Swift/Lifetime.swift rename to ReactiveSwift/Lifetime.swift index 671f9e7178..d4567f4d10 100644 --- a/ReactiveCocoa/Swift/Lifetime.swift +++ b/ReactiveSwift/Lifetime.swift @@ -67,30 +67,3 @@ public final class Lifetime { } } } - -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) - -private var lifetimeKey: UInt8 = 0 -private var lifetimeTokenKey: UInt8 = 0 - -extension NSObject { - /// Returns a lifetime that ends when the receiver is deallocated. - @nonobjc public var rac_lifetime: Lifetime { - objc_sync_enter(self) - defer { objc_sync_exit(self) } - - if let lifetime = objc_getAssociatedObject(self, &lifetimeKey) as! Lifetime? { - return lifetime - } - - let token = Lifetime.Token() - let lifetime = Lifetime(token) - - objc_setAssociatedObject(self, &lifetimeTokenKey, token, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - objc_setAssociatedObject(self, &lifetimeKey, lifetime, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - - return lifetime - } -} - -#endif diff --git a/ReactiveCocoa/Swift/Observer.swift b/ReactiveSwift/Observer.swift similarity index 99% rename from ReactiveCocoa/Swift/Observer.swift rename to ReactiveSwift/Observer.swift index 5b5b5067d8..9bc1ada275 100644 --- a/ReactiveCocoa/Swift/Observer.swift +++ b/ReactiveSwift/Observer.swift @@ -1,6 +1,6 @@ // // Observer.swift -// ReactiveCocoa +// ReactiveSwift // // Created by Andy Matuschak on 10/2/15. // Copyright © 2015 GitHub. All rights reserved. diff --git a/ReactiveCocoa/Swift/Optional.swift b/ReactiveSwift/Optional.swift similarity index 98% rename from ReactiveCocoa/Swift/Optional.swift rename to ReactiveSwift/Optional.swift index a32a029014..c5446bd733 100644 --- a/ReactiveCocoa/Swift/Optional.swift +++ b/ReactiveSwift/Optional.swift @@ -1,6 +1,6 @@ // // Optional.swift -// ReactiveCocoa +// ReactiveSwift // // Created by Neil Pankey on 6/24/15. // Copyright (c) 2015 GitHub. All rights reserved. diff --git a/ReactiveCocoa/Swift/Property.swift b/ReactiveSwift/Property.swift similarity index 99% rename from ReactiveCocoa/Swift/Property.swift rename to ReactiveSwift/Property.swift index 8a7ba674ea..ea1badf9b8 100644 --- a/ReactiveCocoa/Swift/Property.swift +++ b/ReactiveSwift/Property.swift @@ -598,7 +598,7 @@ public final class MutableProperty: MutablePropertyProtocol { /// `value`. Note that recursive sets will still deadlock because the /// underlying producer prevents sending recursive events. atomic = RecursiveAtomic(initialValue, - name: "org.reactivecocoa.ReactiveCocoa.MutableProperty", + name: "org.reactivecocoa.ReactiveSwift.MutableProperty", didSet: observer.sendNext) } diff --git a/ReactiveSwift/ReactiveSwift.h b/ReactiveSwift/ReactiveSwift.h new file mode 100644 index 0000000000..dde845ccc0 --- /dev/null +++ b/ReactiveSwift/ReactiveSwift.h @@ -0,0 +1,15 @@ +// +// ReactiveSwift.h +// ReactiveSwift +// +// Created by Matt Diephouse on 8/15/16. +// Copyright (c) 2016 the ReactiveSwift contributors. All rights reserved. +// + +#import + +//! Project version number for ReactiveSwift. +FOUNDATION_EXPORT double ReactiveSwiftVersionNumber; + +//! Project version string for ReactiveSwift. +FOUNDATION_EXPORT const unsigned char ReactiveSwiftVersionString[]; diff --git a/ReactiveCocoa/Swift/Scheduler.swift b/ReactiveSwift/Scheduler.swift similarity index 98% rename from ReactiveCocoa/Swift/Scheduler.swift rename to ReactiveSwift/Scheduler.swift index 0b19ab6560..1045fa21b9 100644 --- a/ReactiveCocoa/Swift/Scheduler.swift +++ b/ReactiveSwift/Scheduler.swift @@ -1,6 +1,6 @@ // // Scheduler.swift -// ReactiveCocoa +// ReactiveSwift // // Created by Justin Spahr-Summers on 2014-06-02. // Copyright (c) 2014 GitHub. All rights reserved. @@ -144,7 +144,7 @@ public final class QueueScheduler: DateSchedulerProtocol { return Date() } - internal let queue: DispatchQueue + public let queue: DispatchQueue internal init(internalQueue: DispatchQueue) { queue = internalQueue @@ -159,7 +159,7 @@ public final class QueueScheduler: DateSchedulerProtocol { /// - warning: Obsoleted in OS X 10.11 @available(OSX, deprecated:10.10, obsoleted:10.11, message:"Use init(qos:, name:) instead") @available(iOS, deprecated:8.0, obsoleted:9.0, message:"Use init(qos:, name:) instead.") - public convenience init(queue: DispatchQueue, name: String = "org.reactivecocoa.ReactiveCocoa.QueueScheduler") { + public convenience init(queue: DispatchQueue, name: String = "org.reactivecocoa.ReactiveSwift.QueueScheduler") { self.init(internalQueue: DispatchQueue(label: name, attributes: [], target: queue)) } @@ -172,7 +172,7 @@ public final class QueueScheduler: DateSchedulerProtocol { @available(OSX 10.10, *) public convenience init( qos: DispatchQoS = .default, - name: String = "org.reactivecocoa.ReactiveCocoa.QueueScheduler" + name: String = "org.reactivecocoa.ReactiveSwift.QueueScheduler" ) { self.init(internalQueue: DispatchQueue( label: name, @@ -320,7 +320,7 @@ public final class TestScheduler: DateSchedulerProtocol { /// - parameters: /// - startDate: The start date of the scheduler. public init(startDate: Date = Date(timeIntervalSinceReferenceDate: 0)) { - lock.name = "org.reactivecocoa.ReactiveCocoa.TestScheduler" + lock.name = "org.reactivecocoa.ReactiveSwift.TestScheduler" _currentDate = startDate } diff --git a/ReactiveCocoa/Swift/Signal.swift b/ReactiveSwift/Signal.swift similarity index 99% rename from ReactiveCocoa/Swift/Signal.swift rename to ReactiveSwift/Signal.swift index 3fe78283f8..3c16914e49 100644 --- a/ReactiveCocoa/Swift/Signal.swift +++ b/ReactiveSwift/Signal.swift @@ -18,7 +18,7 @@ import Result /// 1. its input observer receives a terminating event; or /// 2. it has no active observers, and is not being retained. public final class Signal { - public typealias Observer = ReactiveCocoa.Observer + public typealias Observer = ReactiveSwift.Observer /// The disposable returned by the signal generator. It would be disposed of /// when the signal terminates. @@ -42,7 +42,7 @@ public final class Signal { /// Used to ensure that events are serialized during delivery to observers. let sendLock = NSLock() - sendLock.name = "org.reactivecocoa.ReactiveCocoa.Signal" + sendLock.name = "org.reactivecocoa.ReactiveSwift.Signal" /// When set to `true`, the Signal should interrupt as soon as possible. let interrupted = Atomic(false) @@ -673,7 +673,7 @@ extension SignalProtocol { public func combineLatest(with other: Signal) -> Signal<(Value, U), Error> { return Signal { observer in let lock = NSLock() - lock.name = "org.reactivecocoa.ReactiveCocoa.combineLatestWith" + lock.name = "org.reactivecocoa.ReactiveSwift.combineLatestWith" let signalState = CombineLatestState() let otherState = CombineLatestState() diff --git a/ReactiveCocoa/Swift/SignalProducer.swift b/ReactiveSwift/SignalProducer.swift similarity index 100% rename from ReactiveCocoa/Swift/SignalProducer.swift rename to ReactiveSwift/SignalProducer.swift diff --git a/ReactiveCocoa/Swift/TupleExtensions.swift b/ReactiveSwift/TupleExtensions.swift similarity index 98% rename from ReactiveCocoa/Swift/TupleExtensions.swift rename to ReactiveSwift/TupleExtensions.swift index 31e096c30e..f976369328 100644 --- a/ReactiveCocoa/Swift/TupleExtensions.swift +++ b/ReactiveSwift/TupleExtensions.swift @@ -1,6 +1,6 @@ // // TupleExtensions.swift -// ReactiveCocoa +// ReactiveSwift // // Created by Justin Spahr-Summers on 2014-12-20. // Copyright (c) 2014 GitHub. All rights reserved. diff --git a/ReactiveCocoa/Swift/UnidirectionalBinding.swift b/ReactiveSwift/UnidirectionalBinding.swift similarity index 100% rename from ReactiveCocoa/Swift/UnidirectionalBinding.swift rename to ReactiveSwift/UnidirectionalBinding.swift diff --git a/ReactiveCocoaTests/Swift/ActionSpec.swift b/ReactiveSwiftTests/ActionSpec.swift similarity index 98% rename from ReactiveCocoaTests/Swift/ActionSpec.swift rename to ReactiveSwiftTests/ActionSpec.swift index fc6c7fbfd6..7a56cd5501 100755 --- a/ReactiveCocoaTests/Swift/ActionSpec.swift +++ b/ReactiveSwiftTests/ActionSpec.swift @@ -1,6 +1,6 @@ // // ActionSpec.swift -// ReactiveCocoa +// ReactiveSwift // // Created by Justin Spahr-Summers on 2014-12-11. // Copyright (c) 2014 GitHub. All rights reserved. @@ -9,7 +9,7 @@ import Result import Nimble import Quick -import ReactiveCocoa +import ReactiveSwift class ActionSpec: QuickSpec { override func spec() { diff --git a/ReactiveCocoaTests/Swift/AtomicSpec.swift b/ReactiveSwiftTests/AtomicSpec.swift similarity index 95% rename from ReactiveCocoaTests/Swift/AtomicSpec.swift rename to ReactiveSwiftTests/AtomicSpec.swift index 6fbf8e69d7..8234f5b9f4 100644 --- a/ReactiveCocoaTests/Swift/AtomicSpec.swift +++ b/ReactiveSwiftTests/AtomicSpec.swift @@ -1,6 +1,6 @@ // // AtomicSpec.swift -// ReactiveCocoa +// ReactiveSwift // // Created by Justin Spahr-Summers on 2014-07-13. // Copyright (c) 2014 GitHub. All rights reserved. @@ -8,7 +8,7 @@ import Nimble import Quick -import ReactiveCocoa +import ReactiveSwift class AtomicSpec: QuickSpec { override func spec() { diff --git a/ReactiveCocoaTests/Swift/BagSpec.swift b/ReactiveSwiftTests/BagSpec.swift similarity index 96% rename from ReactiveCocoaTests/Swift/BagSpec.swift rename to ReactiveSwiftTests/BagSpec.swift index b7841486c8..706e781a07 100644 --- a/ReactiveCocoaTests/Swift/BagSpec.swift +++ b/ReactiveSwiftTests/BagSpec.swift @@ -1,6 +1,6 @@ // // BagSpec.swift -// ReactiveCocoa +// ReactiveSwift // // Created by Justin Spahr-Summers on 2014-07-13. // Copyright (c) 2014 GitHub. All rights reserved. @@ -8,7 +8,7 @@ import Nimble import Quick -import ReactiveCocoa +import ReactiveSwift class BagSpec: QuickSpec { override func spec() { diff --git a/ReactiveCocoaTests/Swift/DisposableSpec.swift b/ReactiveSwiftTests/DisposableSpec.swift similarity index 98% rename from ReactiveCocoaTests/Swift/DisposableSpec.swift rename to ReactiveSwiftTests/DisposableSpec.swift index e6928c89ce..b8ac11cf9c 100644 --- a/ReactiveCocoaTests/Swift/DisposableSpec.swift +++ b/ReactiveSwiftTests/DisposableSpec.swift @@ -1,6 +1,6 @@ // // DisposableSpec.swift -// ReactiveCocoa +// ReactiveSwift // // Created by Justin Spahr-Summers on 2014-07-13. // Copyright (c) 2014 GitHub. All rights reserved. @@ -8,7 +8,7 @@ import Nimble import Quick -import ReactiveCocoa +import ReactiveSwift class DisposableSpec: QuickSpec { override func spec() { diff --git a/ReactiveCocoaTests/Swift/FlattenSpec.swift b/ReactiveSwiftTests/FlattenSpec.swift similarity index 99% rename from ReactiveCocoaTests/Swift/FlattenSpec.swift rename to ReactiveSwiftTests/FlattenSpec.swift index e87c7efc34..bf19fdfa2f 100644 --- a/ReactiveCocoaTests/Swift/FlattenSpec.swift +++ b/ReactiveSwiftTests/FlattenSpec.swift @@ -1,6 +1,6 @@ // // FlattenSpec.swift -// ReactiveCocoa +// ReactiveSwift // // Created by Oleg Shnitko on 1/22/16. // Copyright © 2016 GitHub. All rights reserved. @@ -9,7 +9,7 @@ import Result import Nimble import Quick -import ReactiveCocoa +import ReactiveSwift private extension SignalProtocol { typealias Pipe = (signal: Signal, observer: Observer) diff --git a/ReactiveCocoaTests/Swift/FoundationExtensionsSpec.swift b/ReactiveSwiftTests/FoundationExtensionsSpec.swift similarity index 97% rename from ReactiveCocoaTests/Swift/FoundationExtensionsSpec.swift rename to ReactiveSwiftTests/FoundationExtensionsSpec.swift index 7a3ddf943c..249eb44a8f 100644 --- a/ReactiveCocoaTests/Swift/FoundationExtensionsSpec.swift +++ b/ReactiveSwiftTests/FoundationExtensionsSpec.swift @@ -1,6 +1,6 @@ // // FoundationExtensionsSpec.swift -// ReactiveCocoa +// ReactiveSwift // // Created by Neil Pankey on 5/22/15. // Copyright (c) 2015 GitHub. All rights reserved. @@ -9,7 +9,7 @@ import Result import Nimble import Quick -import ReactiveCocoa +import ReactiveSwift extension Notification.Name { static let racFirst = Notification.Name(rawValue: "rac_notifications_test") diff --git a/ReactiveSwiftTests/Info.plist b/ReactiveSwiftTests/Info.plist new file mode 100644 index 0000000000..ba72822e87 --- /dev/null +++ b/ReactiveSwiftTests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/ReactiveCocoaTests/Swift/LifetimeSpec.swift b/ReactiveSwiftTests/LifetimeSpec.swift similarity index 94% rename from ReactiveCocoaTests/Swift/LifetimeSpec.swift rename to ReactiveSwiftTests/LifetimeSpec.swift index a13514667a..215a9d1a48 100644 --- a/ReactiveCocoaTests/Swift/LifetimeSpec.swift +++ b/ReactiveSwiftTests/LifetimeSpec.swift @@ -1,11 +1,11 @@ import Quick import Nimble -import ReactiveCocoa +import ReactiveSwift import Result final class LifetimeSpec: QuickSpec { override func spec() { - describe("NSObject.rac_lifetime") { + describe("Lifetime") { it("should complete its lifetime ended signal when the it deinitializes") { let object = MutableReference(TestObject()) diff --git a/ReactiveCocoaTests/Swift/PropertySpec.swift b/ReactiveSwiftTests/PropertySpec.swift similarity index 89% rename from ReactiveCocoaTests/Swift/PropertySpec.swift rename to ReactiveSwiftTests/PropertySpec.swift index 6fb9b42756..248767199e 100644 --- a/ReactiveCocoaTests/Swift/PropertySpec.swift +++ b/ReactiveSwiftTests/PropertySpec.swift @@ -1,6 +1,6 @@ // // PropertySpec.swift -// ReactiveCocoa +// ReactiveSwift // // Created by Justin Spahr-Summers on 2015-01-23. // Copyright (c) 2015 GitHub. All rights reserved. @@ -9,7 +9,7 @@ import Result import Nimble import Quick -@testable import ReactiveCocoa +@testable import ReactiveSwift private let initialPropertyValue = "InitialValue" private let subsequentPropertyValue = "SubsequentValue" @@ -1404,180 +1404,6 @@ class PropertySpec: QuickSpec { } } - describe("DynamicProperty") { - var object: ObservableObject! - var property: DynamicProperty! - - let propertyValue: () -> Int? = { - if let value: Any = property?.value { - return value as? Int - } else { - return nil - } - } - - beforeEach { - object = ObservableObject() - expect(object.rac_value) == 0 - - property = DynamicProperty(object: object, keyPath: "rac_value") - } - - afterEach { - object = nil - } - - it("should read the underlying object") { - expect(propertyValue()) == 0 - - object.rac_value = 1 - expect(propertyValue()) == 1 - } - - it("should write the underlying object") { - property.value = 1 - expect(object.rac_value) == 1 - expect(propertyValue()) == 1 - } - - it("should yield a producer that sends the current value and then the changes for the key path of the underlying object") { - var values: [Int] = [] - property.producer.startWithNext { value in - expect(value).notTo(beNil()) - values.append(value!) - } - - expect(values) == [ 0 ] - - property.value = 1 - expect(values) == [ 0, 1 ] - - object.rac_value = 2 - expect(values) == [ 0, 1, 2 ] - } - - it("should yield a producer that sends the current value and then the changes for the key path of the underlying object, even if the value actually remains unchanged") { - var values: [Int] = [] - property.producer.startWithNext { value in - expect(value).notTo(beNil()) - values.append(value!) - } - - expect(values) == [ 0 ] - - property.value = 0 - expect(values) == [ 0, 0 ] - - object.rac_value = 0 - expect(values) == [ 0, 0, 0 ] - } - - it("should yield a signal that emits subsequent values for the key path of the underlying object") { - var values: [Int] = [] - property.signal.observeNext { value in - expect(value).notTo(beNil()) - values.append(value!) - } - - expect(values) == [] - - property.value = 1 - expect(values) == [ 1 ] - - object.rac_value = 2 - expect(values) == [ 1, 2 ] - } - - it("should yield a signal that emits subsequent values for the key path of the underlying object, even if the value actually remains unchanged") { - var values: [Int] = [] - property.signal.observeNext { value in - expect(value).notTo(beNil()) - values.append(value!) - } - - expect(values) == [] - - property.value = 0 - expect(values) == [ 0 ] - - object.rac_value = 0 - expect(values) == [ 0, 0 ] - } - - it("should have a completed producer when the underlying object deallocates") { - var completed = false - - property = { - // Use a closure so this object has a shorter lifetime. - let object = ObservableObject() - let property = DynamicProperty(object: object, keyPath: "rac_value") - - property.producer.startWithCompleted { - completed = true - } - - expect(completed) == false - expect(property.value).notTo(beNil()) - return property - }() - - expect(completed).toEventually(beTruthy()) - expect(property.value).to(beNil()) - } - - it("should have a completed signal when the underlying object deallocates") { - var completed = false - - property = { - // Use a closure so this object has a shorter lifetime. - let object = ObservableObject() - let property = DynamicProperty(object: object, keyPath: "rac_value") - - property.signal.observeCompleted { - completed = true - } - - expect(completed) == false - expect(property.value).notTo(beNil()) - return property - }() - - expect(completed).toEventually(beTruthy()) - expect(property.value).to(beNil()) - } - - it("should retain property while DynamicProperty's underlying object is retained"){ - weak var dynamicProperty: DynamicProperty? = property - - property = nil - expect(dynamicProperty).toNot(beNil()) - - object = nil - expect(dynamicProperty).to(beNil()) - } - - it("should support un-bridged reference types") { - let dynamicProperty = DynamicProperty(object: object, keyPath: "rac_reference") - dynamicProperty.value = UnbridgedObject("foo") - expect(object.rac_reference.value) == "foo" - } - - it("should expose a lifetime that ends upon the deinitialization of its underlying object") { - var isEnded = false - property!.lifetime.ended.observeCompleted { - isEnded = true - } - - expect(isEnded) == false - - property = nil - expect(isEnded) == false - - object = nil - expect(isEnded) == true - } - } - describe("binding") { describe("from a Signal") { it("should update the property with values sent from the signal") { @@ -1726,41 +1552,6 @@ class PropertySpec: QuickSpec { expect(isDisposed) == true } } - - describe("to a dynamic property") { - var object: ObservableObject! - var property: DynamicProperty! - - beforeEach { - object = ObservableObject() - expect(object.rac_value) == 0 - - property = DynamicProperty(object: object, keyPath: "rac_value") - } - - afterEach { - object = nil - } - - it("should bridge values sent on a signal to Objective-C") { - let (signal, observer) = Signal.pipe() - property <~ signal - observer.sendNext(1) - expect(object.rac_value) == 1 - } - - it("should bridge values sent on a signal producer to Objective-C") { - let producer = SignalProducer(value: 1) - property <~ producer - expect(object.rac_value) == 1 - } - - it("should bridge values from a source property to Objective-C") { - let source = MutableProperty(1) - property <~ source - expect(object.rac_value) == 1 - } - } } } } diff --git a/ReactiveCocoaTests/Swift/SchedulerSpec.swift b/ReactiveSwiftTests/SchedulerSpec.swift similarity index 99% rename from ReactiveCocoaTests/Swift/SchedulerSpec.swift rename to ReactiveSwiftTests/SchedulerSpec.swift index 5c5850ef7c..2ea04a4d75 100644 --- a/ReactiveCocoaTests/Swift/SchedulerSpec.swift +++ b/ReactiveSwiftTests/SchedulerSpec.swift @@ -1,6 +1,6 @@ // // SchedulerSpec.swift -// ReactiveCocoa +// ReactiveSwift // // Created by Justin Spahr-Summers on 2014-07-13. // Copyright (c) 2014 GitHub. All rights reserved. @@ -10,7 +10,7 @@ import Foundation import Nimble import Quick @testable -import ReactiveCocoa +import ReactiveSwift class SchedulerSpec: QuickSpec { override func spec() { diff --git a/ReactiveCocoaTests/Swift/SignalLifetimeSpec.swift b/ReactiveSwiftTests/SignalLifetimeSpec.swift similarity index 99% rename from ReactiveCocoaTests/Swift/SignalLifetimeSpec.swift rename to ReactiveSwiftTests/SignalLifetimeSpec.swift index 30ad5f86b5..a1ea79ea5d 100644 --- a/ReactiveCocoaTests/Swift/SignalLifetimeSpec.swift +++ b/ReactiveSwiftTests/SignalLifetimeSpec.swift @@ -1,6 +1,6 @@ // // SignalLifetimeSpec.swift -// ReactiveCocoa +// ReactiveSwift // // Created by Vadim Yelagin on 2015-12-13. // Copyright (c) 2015 GitHub. All rights reserved. @@ -9,7 +9,7 @@ import Result import Nimble import Quick -import ReactiveCocoa +import ReactiveSwift class SignalLifetimeSpec: QuickSpec { override func spec() { diff --git a/ReactiveCocoaTests/Swift/SignalProducerLiftingSpec.swift b/ReactiveSwiftTests/SignalProducerLiftingSpec.swift similarity index 99% rename from ReactiveCocoaTests/Swift/SignalProducerLiftingSpec.swift rename to ReactiveSwiftTests/SignalProducerLiftingSpec.swift index deafd94ee9..57ada877f5 100644 --- a/ReactiveCocoaTests/Swift/SignalProducerLiftingSpec.swift +++ b/ReactiveSwiftTests/SignalProducerLiftingSpec.swift @@ -1,6 +1,6 @@ // // SignalProducerLiftingSpec.swift -// ReactiveCocoa +// ReactiveSwift // // Created by Neil Pankey on 6/14/15. // Copyright © 2015 GitHub. All rights reserved. @@ -9,7 +9,7 @@ import Result import Nimble import Quick -import ReactiveCocoa +import ReactiveSwift class SignalProducerLiftingSpec: QuickSpec { override func spec() { diff --git a/ReactiveSwiftTests/SignalProducerNimbleMatchers.swift b/ReactiveSwiftTests/SignalProducerNimbleMatchers.swift new file mode 100644 index 0000000000..bc9654a3e4 --- /dev/null +++ b/ReactiveSwiftTests/SignalProducerNimbleMatchers.swift @@ -0,0 +1,57 @@ +// +// SignalProducerNimbleMatchers.swift +// ReactiveSwift +// +// Created by Javier Soto on 1/25/15. +// Copyright (c) 2015 GitHub. All rights reserved. +// + +import Foundation + +import ReactiveSwift +import Nimble + +public func sendValue(_ value: T?, sendError: E?, complete: Bool) -> NonNilMatcherFunc> { + return sendValues(value.map { [$0] } ?? [], sendError: sendError, complete: complete) +} + +public func sendValues(_ values: [T], sendError maybeSendError: E?, complete: Bool) -> NonNilMatcherFunc> { + return NonNilMatcherFunc { actualExpression, failureMessage in + precondition(maybeSendError == nil || !complete, "Signals can't both send an error and complete") + + failureMessage.postfixMessage = "Send values \(values). Send error \(maybeSendError). Complete: \(complete)" + let maybeProducer = try actualExpression.evaluate() + + if let signalProducer = maybeProducer { + var sentValues: [T] = [] + var sentError: E? + var signalCompleted = false + + signalProducer.start { event in + switch event { + case let .next(value): + sentValues.append(value) + case .completed: + signalCompleted = true + case let .failed(error): + sentError = error + default: + break + } + } + + if sentValues != values { + return false + } + + if sentError != maybeSendError { + return false + } + + return signalCompleted == complete + } + else { + return false + } + } +} diff --git a/ReactiveCocoaTests/Swift/SignalProducerSpec.swift b/ReactiveSwiftTests/SignalProducerSpec.swift similarity index 99% rename from ReactiveCocoaTests/Swift/SignalProducerSpec.swift rename to ReactiveSwiftTests/SignalProducerSpec.swift index 1cc03012f3..d518da8e54 100644 --- a/ReactiveCocoaTests/Swift/SignalProducerSpec.swift +++ b/ReactiveSwiftTests/SignalProducerSpec.swift @@ -1,6 +1,6 @@ // // SignalProducerSpec.swift -// ReactiveCocoa +// ReactiveSwift // // Created by Justin Spahr-Summers on 2015-01-23. // Copyright (c) 2015 GitHub. All rights reserved. @@ -11,7 +11,7 @@ import Foundation import Result import Nimble import Quick -import ReactiveCocoa +import ReactiveSwift class SignalProducerSpec: QuickSpec { override func spec() { diff --git a/ReactiveCocoaTests/Swift/SignalSpec.swift b/ReactiveSwiftTests/SignalSpec.swift similarity index 99% rename from ReactiveCocoaTests/Swift/SignalSpec.swift rename to ReactiveSwiftTests/SignalSpec.swift index 5114b43d5b..dd93b1e378 100755 --- a/ReactiveCocoaTests/Swift/SignalSpec.swift +++ b/ReactiveSwiftTests/SignalSpec.swift @@ -1,6 +1,6 @@ // // SignalSpec.swift -// ReactiveCocoa +// ReactiveSwift // // Created by Justin Spahr-Summers on 2015-01-23. // Copyright (c) 2015 GitHub. All rights reserved. @@ -9,7 +9,7 @@ import Result import Nimble import Quick -import ReactiveCocoa +import ReactiveSwift class SignalSpec: QuickSpec { override func spec() { diff --git a/ReactiveSwiftTests/TestError.swift b/ReactiveSwiftTests/TestError.swift new file mode 100644 index 0000000000..b9d59df8ab --- /dev/null +++ b/ReactiveSwiftTests/TestError.swift @@ -0,0 +1,43 @@ +// +// TestError.swift +// ReactiveSwift +// +// Created by Almas Sapargali on 1/26/15. +// Copyright (c) 2015 GitHub. All rights reserved. +// + +import ReactiveSwift +import Result + +internal enum TestError: Int { + case `default` = 0 + case error1 = 1 + case error2 = 2 +} + +extension TestError: Error { +} + + +internal extension SignalProducerProtocol { + /// Halts if an error is emitted in the receiver signal. + /// This is useful in tests to be able to just use `startWithNext` + /// in cases where we know that an error won't be emitted. + func assumeNoErrors() -> SignalProducer { + return self.lift { $0.assumeNoErrors() } + } +} + +internal extension SignalProtocol { + /// Halts if an error is emitted in the receiver signal. + /// This is useful in tests to be able to just use `startWithNext` + /// in cases where we know that an error won't be emitted. + func assumeNoErrors() -> Signal { + return self.mapError { error in + fatalError("Unexpected error: \(error)") + + () + } + } +} + diff --git a/ReactiveCocoaTests/Swift/TestLogger.swift b/ReactiveSwiftTests/TestLogger.swift similarity index 91% rename from ReactiveCocoaTests/Swift/TestLogger.swift rename to ReactiveSwiftTests/TestLogger.swift index 9f406573b6..bc669279bc 100644 --- a/ReactiveCocoaTests/Swift/TestLogger.swift +++ b/ReactiveSwiftTests/TestLogger.swift @@ -1,13 +1,13 @@ // // TestLogger.swift -// ReactiveCocoa +// ReactiveSwift // // Created by Rui Peres on 29/04/2016. // Copyright © 2016 GitHub. All rights reserved. // import Foundation -@testable import ReactiveCocoa +@testable import ReactiveSwift final class TestLogger { fileprivate var expectations: [(String) -> Void] diff --git a/Sources b/Sources index c5c6e8cb28..2ebf1f0a4c 120000 --- a/Sources +++ b/Sources @@ -1 +1 @@ -ReactiveCocoa/Swift/ \ No newline at end of file +ReactiveSwift/ \ No newline at end of file