From 459def315383755f10e4d44c5d6d15930ae78d82 Mon Sep 17 00:00:00 2001 From: Alexander Schuch Date: Mon, 8 Apr 2013 12:03:39 +0100 Subject: [PATCH 01/88] updated readme, cleaned up some deprecated methods --- README.md | 324 +++++++++++++++++++++++++++--------------------------- 1 file changed, 162 insertions(+), 162 deletions(-) diff --git a/README.md b/README.md index eafba98a..9de7dfad 100644 --- a/README.md +++ b/README.md @@ -1,196 +1,197 @@ -# libPusher, an Objective-C client for Pusher +# libPusher -[Pusher](http://pusherapp.com/) is a hosted service that sits between your web application and the browser that lets you deliver events in real-time using HTML5 WebSockets. +An Objective-C client library for the [Pusher.com](http://pusher.com) real-time service. -This project was borne out of the idea that a web browser doesn't have to be the only client that receives your web app's real-time notifications. Why couldn't your iPhone, iPad or Mac OSX app receive real-time notifications either? +Pusher is a hosted service that sits between your web application and the browser that lets you deliver events in real-time using HTML5 WebSockets. -Apple provides its own push notification service which is great for getting alert-type notifications to your app's users whether or not they are using the app, but for real-time updates to data whilst they are using your app, hooking into your web app's existing event-dispatch mechanism is far less hassle (and is great if you want to be able to interact with other web services that might not have access to the APNS). +The libPusher API mirrors the Pusher Javascript client as closely as possible, with some allowances for Objective-C conventions. In particular, whilst the Javascript client uses event binding for all event handling, where events are pre-defined, libPusher uses the standard Cocoa delegation pattern. -## Installation instructions +## Example +Subscribe to the ```chat``` channel and bind to the ```new-message``` event. -The latest release is 1.4. A list of changes can be found in the [CHANGELOG](CHANGELOG.md). - -1.4 will be the final release of Pusher to support iOS 4. +``` +// _client is a strong instance variable of class PTPusher +_client = [PTPusher pusherWithKey:@"YOUR_API_KEY" delegate:self encrypted:YES]; + +// subscribe to channel and bind to event +PTPusherChannel *channel = [_client subscribeToChannelNamed:@"chat"]; +[channel bindToEventNamed:@"new-message" handleWithBlock:^(PTPusherEvent *channelEvent) { + // channelEvent.data is a NSDictianary of the JSON object received + NSString *message = [channelEvent.data objectForKey:@"text"]; + NSLog(@"message received: %@", message); +}]; +``` -Important note: As of 1.3, libPusher no longer includes the JSONKit JSON parsing library. By default, libPusher now uses the native `NSJSONSerialization` class, only available on iOS 5.0 or OSX 10.7 and above. +## Installation -libPusher retains runtime support for JSONKit for those who still need to support older platforms - in order for this to work, you must manually link JSONKit yourself. +Install using CocoaPods. -If you are using CocoaPods, this is as simple as explicitly adding JSONKit to your Podfile (previously, it would have been installed by CocoaPods as a libPusher dependency). +``` +pod 'libPusher', '~> 1.4' +``` -Detailed installation instructions can be found [in the wiki](https://github.com/lukeredpath/libPusher/wiki/Adding-libPusher-to-your-project). +Import Pusher into the class that wants to make use of the library. -## Getting started +``` +#import +``` +A step-by-step guide on how to [install and setup CocoaPods]() to use libPusher is available on the wiki. -The libPusher API mirrors the [Pusher Javascript client](http://pusher.com/docs/client_api_guide) as closely as possible, with some allowances for Objective-C conventions. In particular, whilst the Javascript client uses event binding for all event handling, where events are pre-defined, libPusher uses the standard Cocoa delegation pattern. -[Online API Documentation](http://lukeredpath.github.com/libPusher/) +## Usage -### Creating a new connection +**Note**: in the following examples, ```_client``` is a strong instance variable. The instance returned by the```pusherWithKey:*:``` methods will be auto-released, according to standard Objective-C return conventions. You must retain the client otherwise it will be auto-released before anything useful happens causing silent failures and unexpected behaviour. -```objc -client = [PTPusher pusherWithKey:@"YOUR-API-KEY" delegate:self]; -``` -When calling the above method, the connection will be established immediately. If you want to defer connection, you can do so: +### Create a connection -```objc -client = [PTPusher pusherWithKey:@"YOUR-API-KEY" connectAutomatically:NO]; ``` +_client = [PTPusher pusherWithKey:@"YOUR_API_KEY" delegate:self encrypted:YES]; +``` +When calling the above method, the connection will be established immediately. +If you want to defer connection, you can do so: -When you are ready to connect: +``` +_client = [PTPusher pusherWithKey:@"YOUR_API_KEY" connectAutomatically:NO encrypted:YES]; +``` +When you are ready to connect, call -```objc -[client connect] +``` +[_client connect] ``` -Note: in the above examples, `client` is a `strong` instance variable. The instance returned by `pusherWithKey:*:` factory methods will be auto-released, according to standard Objective-C return conventions. You *must* retain the client otherwise it will be auto-released before anything useful happens causing silent failures and unexpected behaviour. +It is recommended to implement the PTPusherDelegate protocol in order to be notified when significant connection events happen such as connection errors, disconnects and retries. -It is recommend you assign a delegate to the Pusher client as this will enable you to be notified when significant connection events happen such as connection errors, disconnects and retries. +---------- -### Binding to events +### Subscribe to channels -Once you have created an instance of the Pusher client, you can set up event bindings; there is no need to wait for the connection to be established. +Channels are a way of filtering the events you want your application to receive. In addition, private and presence channels can be used to control access to events and in the case of presence channels, see who else is subscribing to events. For more information on channels, see the Pusher documentation. -When you bind to events on the client, you will receive all events with that name, regardless of the channel from which they originated. +There is no need to wait for the client to establish a connection before subscribing. You can subscribe to a channel immediately and any subscriptions will be created once the connection has connected. -There are two ways of creating bindings to events. You can bind to events using the standard target/action mechanism: +#### Subscribing to public channels -```objc -[client bindToEventNamed:@"something-happened" target:self action:@selector(handleEvent:)]; ``` - -Or you can bind to events using blocks: - -```objc -[client bindToEventNamed:@"something-happened" handleWithBlock:^(PTPusherEvent *event) { - // do something with event -}]; +PTPusherChannel *channel = [_client subscribeToChannelNamed:@"chat"]; ``` -### Removing bindings +#### Subscribing to private channels -Prior to 1.2, there was no way of removing bindings. This resulted in a potential memory issue as when a binding was created a special event listener object was created internally which would, in the case of target/action bindings, retain the target. There was no way of getting at this listener object - the listener was retained by the event dispatcher of either the `PTPusherChannel` or `PTPusher` instance that you had binded to. +This method will add the appropriate ```private-``` prefix to the channel name for you and return a channel cast to the correct PTPusherChannel subclass PTPusherPrivateChannel. -In 1.2, the way listeners were retained was changed. Now, each binding creates a `PTPusherEventBinding` object and it is this object that retains the event listener object and the event dispatcher would retain a collection of binding objects instead. Additionally, all binding methods now return the `PTPusherEventBinding` instance, which means an object can keep track of all of it's bindings and remove them at a later date (for instance, in `dealloc`). +Subscribing to private channels needs server-side authorisation. See section [Channel Authorisation](#channel-auth) for details. -Removing a binding is as simple as storing a reference to the binding object, then passing that as an argument to `removeBinding:` some time later. - -```objc -- (void)viewDidLoad -{ - self.myControllerBinding = [client bindToEventNamed:@"some-event" target:self action:@selector(handleSomeEvent:)]; -{ - -- (void)dealloc -{ - if(self.myControllerBinding) { - [client removeBinding:self.myControllerBinding]; - } -} +``` +// subsribe to private-chat channel +PTPusherPrivateChannel *private = [_client subscribeToPrivateChannelNamed:@"chat"]; ``` -## Working with channels - -Channels are a way of filtering the events you want your application to receive. In addition, private and presence channels can be used to control access to events and in the case of presence channels, see who else is subscribing to events. For more information on channels, [see the Pusher documentation](http://pusher.com/docs/client_api_guide/client_channels). +#### Subscribing to presence channels -### Subscribing and unsubscribing +This method will add the appropriate ```presence-``` prefix to the channel name for you and return a channel cast to the correct PTPusherChannel subclass PTPusherPresenceChannel. -Channels of any type can be subscribed to using the method `subscribeToChannelNamed:`. When subscribing to private or presence channels, it's important to remember to add the appropriate channel name prefix. +Subscribing to presence channels needs server-side authorisation. See section [Channel Authorisation](#channel-auth) for details. -You do not need to wait for the client to establish a connection before subscribing; you can subscribe immediately and any subscriptions will be created once the connection has connected. +``` +// subsribe to presence-chat channel +PTPusherPresenceChannel *presence = [client subscribeToPresenceChannelNamed:@"chat" delegate:self]; +``` -Subscribing to a public channel: +It is recommended to implement ```PTPusherPresenceChannelDelegate``` protocol, to receive notifications for members subscribing or unsubscribing from the presence channel. -```objc -PTPusherChannel *channel = [client subscribeToChannelNamed:@"my-public-channel"]; -``` +### Unsubscribe from channels -Subscribing to a private channel using the appropriate prefix: +If you no longer want to receive event over a channel, you can unsubscribe. -```objc -PTPusherChannel *private = [client subscribeToChannelNamed:@"private-channel"]; +``` +[_client unsubscribeFromChannel:channel]; ``` -As a convenience, two methods are provided specifically for subscribing to private and presence channels. These methods will add the appropriate prefix to the channel name for you and return a channel cast to the correct PTPusherChannel sub-class. You can also set a presence delegate for presence channels using this API. +### Channel authorisation -Subcribing to a private channel without the prefix: +Private and presence channels require server-side authorisation before they can connect. -```objc -PTPusherPrivateChannel *private = [client subscribeToPrivateChannelNamed:@"demo"]; -``` +**Note**: Make sure your server responds correctly to the authentication request. See the [authentication signature](http://pusher.com/docs/auth_signatures) and [user authentication](http://pusher.com/docs/authenticating_users) docs for details and examples on how to implement authorization on the server side. -Subscribing to a presence channel without the prefix, with a presence delegate: +In order to connect to a private or presence channel, you first need to configure your server authorisation URL. -```objc -PTPusherPresenceChannel *presence = [client subscribeToPresenceChannelNamed:@"chat" delegate:self]; ``` +_client.authorizationURL = [NSURL URLWithString:@"http://www.yourserver.com/authorise"]; +``` + +When you attempt to connect to a private or presence channel, libPusher will make a form-encoded POST request to the above URL, passing along the ```socket_id``` and ```channel_name``` as parameters. Prior to sending the request, the Pusher delegate will be notified, passing in the NSMutableURLRequest instance that will be sent. -Any channel that has been previously subscribed to can be retrieved (without re-subscribing) using the `channelNamed:` method. +Its up to you to configure the request to handle whatever authentication mechanism you are using. In this example, we simply set a custom header with a token which the server will use to authenticate the user before proceeding with authorisation. -```objc -PTPusherChannel *channel = [client channelNamed:@"my-channel"]; +``` +- (void)pusher:(PTPusher *)pusher willAuthorizeChannelWithRequest:(NSMutableURLRequest *)request +{ + [request setValue:@"some-authentication-token" forHTTPHeaderField:@"X-MyCustom-AuthTokenHeader"]; +} ``` -You can also unsubcribe from channels: -```objc -[client unsubscribeFromChannel:channel]; -``` +---------- -### Channel authorisation +### Binding to events -Private and presence channels require server-side authorisation before they can connect. Because the Javascript client library runs in the browser, it assumes the presence of an existing server-side session and simply makes an AJAX POST to the server. The server then uses the existing server session cookie to authorise the subscription request. +There are generally two ways to bind to events: Binding to an event on the PTPusher client itself or binding to a specific channel. -When using libPusher in your iOS apps, there is no existing session, so you will need an alternative means of authenticating a user; possible means of authentication could be HTTP Basic Authentication or some kind of token-based authentication. +#### Binding to a channel +Once you have created an instance of PTPusherChannel, you can set up event bindings. There is no need to wait for the PTPusher client connection to be established. -In order to connect to a private or presence channel, you first need to configure your server authorisation URL. +When you bind to events on a single channel, you will only receive events with that name if they are sent over this channel. -```objc -pusher.authorizationURL = [NSURL URLWithString:@"http://www.yourserver.com/authorise"]; +``` +PTPusherChannel *channel = [_client subscribeToChannelNamed:@"chat"]; +[channel bindToEventNamed:@"new-message" handleWithBlock:^(PTPusherEvent *channelEvent) { + // channelEvent.data is a NSDictianary of the JSON object received +}]; ``` -When you attempt to connect to a private or presence channel, libPusher will make a form-encoded POST request to the above URL, passing along the socket ID and channel name as parameters. Prior to sending the request, the Pusher delegate will be notified, passing in the NSMutableURLRequest instance that will be sent. +#### Binding directly to the client +Once you have created an instance of the PTPusher client, you can set up event bindings. There is no need to wait for the connection to be established. -It's at this point that you can configure the request to handle whatever authentication mechanism you are using. In this example, we simply set a custom header with a token which the server will use to authenticate the user before proceeding with authorisation. +When you bind to events on the client, you will receive all events with that name, regardless of the channel from which they originated. -```objc -- (void)pusher:(PTPusher *)pusher willAuthorizeChannelWithRequest:(NSMutableURLRequest *)request -{ - [request setValue:@"some-authentication-token" forHTTPHeaderField:@"X-MyCustom-AuthTokenHeader"]; -} +``` +[_client bindToEventNamed:@"new-message" handleWithBlock:^(PTPusherEvent *event) { + // event.data is a NSDictianary of the JSON object received +}]; ``` -### Binding to channel events - -Binding to events on channels works in exactly the same way as binding to client events; the only difference is that you will only receive events with that are associated with that channel. +#### Remove bindings -```objc -PTPusherChannel *channel = [client subscribeToChannelNamed:@"demo"]; +If you no longer want to receive events with a specific name, you can remove the binding. Removing a binding is as simple as storing a reference to the binding object, then passing that as an argument to ```removeBinding:``` at a later point. -[channel bindToEventNamed:@"channel-event" handleWithBlock:^(PTPusherEvent *channelEvent) { - // do something with channel event -}]; ``` +_binding = [_client bindToEventNamed:@"new-message" target:self action:@selector(handleEvent:)]; -## Binding to all events +// later +[_client removeBinding:_binding]; +``` -Unlike the Javascript client, libPusher does not provide an explicit API for binding to all events from a client or channel. Instead, libPusher will publish a `NSNotification` for every event received. You can subscribe to all events for a client or channel by adding a notification observer. +#### Binding to all events -Binding to all events using `NSNotificationCentre`: +In some cases it might be useful to bind to all events of a client or channel. +libPusher will publish a ```NSNotification``` for every event received. You can subscribe to all events for a client or channel by adding a notification observer. -```objc +Binding to all events using NSNotificationCenter: + +``` [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveEventNotification:) name:PTPusherEventReceivedNotification - object:client]; + object:_client]; ``` Bind to all events on a single channel: -```objc -PTPusherChannel *channel = [client channelNamed:@"some-channel"]; +``` +// get chat channel +PTPusherChannel *channel = [_client channelNamed:@"chat"]; [[NSNotificationCenter defaultCenter] addObserver:self @@ -199,12 +200,12 @@ PTPusherChannel *channel = [client channelNamed:@"some-channel"]; object:channel]; ``` -The event can be retrieved in your callback from the notification's `userInfo` dictionary. The notification's `object` will be either the client or channel from which the event originated. +The event can be retrieved in your callback from the notification's userInfo dictionary. The notification's object will be either the client or channel from which the event originated. -```objc -- (void)didReceiveEventNotification:(NSNotification *)note +``` +- (void)didReceiveEventNotification:(NSNotification *)notification { - PTPusherEvent *event = [note.userInfo objectForKey:PTPusherEventUserInfoKey]; + PTPusherEvent *event = [notification.userInfo objectForKey:PTPusherEventUserInfoKey]; } ``` @@ -216,73 +217,72 @@ The following examples use Apple's Reachability class (version 2.2) to check the You can configure libPusher to automatically try and re-connect if it disconnects or it initially fails to connect. -```objc -PTPusher *client = [PTPusher pusherWithKey:@"YOUR-API-KEY" delegate:self]; -client.reconnectAutomatically = YES; -client.reconnectDelay = 30; // defaults to 5 seconds +``` +_client = [PTPusher pusherWithKey:@"YOUR_API_KEY" delegate:self encrypted:YES]; +_client.reconnectAutomatically = YES; +_client.reconnectDelay = 30; // defaults to 5 seconds ``` -What you don't want to do is keep on blindly trying to reconnect if there is no available network and therefore no possible way a connection could be successful. You should implement the `PTPusherDelegate` methods `pusher:connectionDidDisconnect:` and `pusher:connection:didFailWithError:`. +What you don't want to do is keep on blindly trying to reconnect if there is no available network and therefore no possible way a connection could be successful. You should implement the ```PTPusherDelegate``` methods ```pusher:connectionDidDisconnect:``` and ```pusher:connection:didFailWithError:```. -```objc +``` - (void)pusher:(PTPusher *)client connectionDidDisconnect:(PTPusherConnection *)connection { - Reachability *reachability = [Reachability reachabilityForInternetConnection]; - - if ([reachability currentReachabilityStatus] == NotReachable) { - // there is no point in trying to reconnect at this point - client.reconnectAutomatically = NO; - - // start observing the reachability status to see when we come back online - [[NSNotificationCenter defaultCenter] - addObserver:self - selector:@selector(reachabilityChanged:) - name:kReachabilityChangedNotification] - object:reachability]; - - [reachability startNotifier]; - } + Reachability *reachability = [Reachability reachabilityForInternetConnection]; + + if ([reachability currentReachabilityStatus] == NotReachable) { + // there is no point in trying to reconnect at this point + _client.reconnectAutomatically = NO; + + // start observing the reachability status to see when we come back online + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(reachabilityChanged:) + name:kReachabilityChangedNotification] + object:reachability]; + + [reachability startNotifier]; + } } ``` -The implementation of `pusher:connection:didFailWithError:` will look similar to the above although you may wish to do some further checking of the error. +The implementation of ```pusher:connection:didFailWithError:``` will look similar to the above although you may wish to do some further checking of the error. -Now you simply need to wait for the network to become reachable again; it's no guarantee that you will be able to establish a connection but it is an indicator that it would be reasonable to try again. +Now you simply need to wait for the network to become reachable again. There is no guarantee that you will be able to establish a connection but it is an indicator that it would be reasonable to try again. -```objc -- (void)reachabilityChanged:(NSNotification *)note +``` +- (void)reachabilityChanged:(NSNotification *)notification { - Reachability *reachability = note.object; - - if ([reachability currentReachabilityStatus] != NotReachable) { - // we seem to have some kind of network reachability, so try again - PTPusher *pusher = <# get the pusher instance #> - [pusher connect]; - - // we can stop observing reachability changes now - [[NSNotificationCenter defaultCenter] removeObserver:self]; - [reachability stopNotifier]; - - // re-enable auto-reconnect - pusher.reconnectAutomatically = YES; - } + Reachability *reachability = notification.object; + + if ([reachability currentReachabilityStatus] != NotReachable) { + // we seem to have some kind of network reachability, try to connect again + [_client connect]; + + // we can stop observing reachability changes now + [[NSNotificationCenter defaultCenter] removeObserver:self]; + [reachability stopNotifier]; + + // re-enable auto-reconnect + _client.reconnectAutomatically = YES; + } } ``` -Finally, you may prefer to not turn on automatic reconnection immediately, but instead wait until you've successfully connected. You could do this by implementing the `pusher:connectionDidConnect:` delegate method: -```objc +Finally, you may prefer to not turn on automatic reconnection immediately, but instead wait until you've successfully connected. You could do this by implementing the ```pusher:connectionDidConnect:``` delegate method: + +``` - (void)pusher:(PTPusher *)client connectionDidConnect:(PTPusherConnection *)connection { - client.reconnectAutomatically = YES; + _client.reconnectAutomatically = YES; } ``` Doing it this way means you do not need to re-enable auto-reconnect in your Reachability notification handler as it will happen automatically once you have connected. -If Pusher disconnects but Reachability indicates that the network is reachable, it is possible that there is a problem with the Pusher service. In this situation, you would be advised to simply allow libPusher to try and reconnect automatically (if you have enabled this). +If Pusher disconnects but Reachability indicates that the network is reachable, it is possible that there is a problem with the Pusher service or something is interfering with the connection. In this situation, you would be advised to simply allow libPusher to try and reconnect automatically (if you have enabled this). -You may want to implement the `pusher:connectionWillReconnect:afterDelay:` delegate method and keep track of the number of retry attempts and gradually back off your retry attempts by increasing the reconnect delay after a number of retry attempts have failed. This stops you from constantly trying to connect to Pusher while it is experience issues. +You may want to implement the ```pusher:connectionWillReconnect:afterDelay:``` delegate method and keep track of the number of retry attempts and gradually back off your retry attempts by increasing the reconnect delay after a number of retry attempts have failed. This stops you from constantly trying to connect to Pusher while it is experiencing issues. ## License - All code is licensed under the MIT license. See the LICENSE file for more details. From a3d995ee1f847f782b0e14c4f99ec8ac7fd74a9c Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Thu, 31 Oct 2013 17:33:52 +0000 Subject: [PATCH 02/88] Bump deployment target to 5.0 --- libPusher.xcodeproj/project.pbxproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libPusher.xcodeproj/project.pbxproj b/libPusher.xcodeproj/project.pbxproj index 6a022861..e1b4533d 100755 --- a/libPusher.xcodeproj/project.pbxproj +++ b/libPusher.xcodeproj/project.pbxproj @@ -1134,7 +1134,7 @@ GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 4.3; + IPHONEOS_DEPLOYMENT_TARGET = 5.0; OTHER_LDFLAGS = "$(inherited)"; SDKROOT = iphoneos; WARNING_CFLAGS = "-Wno-arc-performSelector-leaks"; @@ -1153,7 +1153,7 @@ GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 4.3; + IPHONEOS_DEPLOYMENT_TARGET = 5.0; OTHER_LDFLAGS = "$(inherited)"; SDKROOT = iphoneos; WARNING_CFLAGS = "-Wno-arc-performSelector-leaks"; From 68ad137e5bdd14554a83e44b0847c46439eace39 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Thu, 31 Oct 2013 17:36:46 +0000 Subject: [PATCH 03/88] Link libPods to functional specs --- libPusher.xcodeproj/project.pbxproj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libPusher.xcodeproj/project.pbxproj b/libPusher.xcodeproj/project.pbxproj index e1b4533d..f291c94f 100755 --- a/libPusher.xcodeproj/project.pbxproj +++ b/libPusher.xcodeproj/project.pbxproj @@ -92,6 +92,7 @@ A3D1D2CA11580162009A12AD /* PTPusher.m in Sources */ = {isa = PBXBuildFile; fileRef = A3D1D28F1157FA4C009A12AD /* PTPusher.m */; }; A3D1D2CB11580162009A12AD /* PTPusherEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = A3D1D2901157FA4C009A12AD /* PTPusherEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; A3D1D2CC11580162009A12AD /* PTPusherEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = A3D1D2911157FA4C009A12AD /* PTPusherEvent.m */; }; + A3F032471822CC8A00976DA0 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F700C4637DC43EFA335D40F /* libPods.a */; }; A3FE41CB11811161009CF5D7 /* NewEventViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A3FE41C911811161009CF5D7 /* NewEventViewController.m */; }; A3FE41CC11811161009CF5D7 /* NewEventViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = A3FE41CA11811161009CF5D7 /* NewEventViewController.xib */; }; A3FE429E11811EEE009CF5D7 /* NSString+Hashing.h in Headers */ = {isa = PBXBuildFile; fileRef = A3FE429B11811EE8009CF5D7 /* NSString+Hashing.h */; }; @@ -264,6 +265,7 @@ A3A9F95A1496E96100F83617 /* SenTestingKit.framework in Frameworks */, A3A9F95B1496E96100F83617 /* UIKit.framework in Frameworks */, A3A9F95C1496E96100F83617 /* Foundation.framework in Frameworks */, + A3F032471822CC8A00976DA0 /* libPods.a in Frameworks */, A3A9FA4F1496EEE000F83617 /* CFNetwork.framework in Frameworks */, A37E158D14E499E000DCA3A6 /* Security.framework in Frameworks */, 6D926C9364F64493B0A7BE5A /* libPods-specs.a in Frameworks */, From 3251ad5c62dd626b84e7580de7ce4940524f500e Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Thu, 31 Oct 2013 18:12:16 +0000 Subject: [PATCH 04/88] Fix debug logging. --- libPusher.xcodeproj/project.pbxproj | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/libPusher.xcodeproj/project.pbxproj b/libPusher.xcodeproj/project.pbxproj index f291c94f..d89450aa 100755 --- a/libPusher.xcodeproj/project.pbxproj +++ b/libPusher.xcodeproj/project.pbxproj @@ -1094,7 +1094,10 @@ GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = libPusher_Prefix.pch; - GCC_PREPROCESSOR_DEFINITIONS = "kPTPusherClientLibraryVersion=@\"$(CURRENT_PROJECT_VERSION)\""; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "kPTPusherClientLibraryVersion=@\"$(CURRENT_PROJECT_VERSION)\"", + ); GCC_VERSION = com.apple.compilers.llvm.clang.1_0; OTHER_LDFLAGS = "$(inherited)"; PRODUCT_NAME = Pusher; @@ -1114,7 +1117,10 @@ DYLIB_CURRENT_VERSION = "$(CURRENT_PROJECT_VERSION)"; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = libPusher_Prefix.pch; - GCC_PREPROCESSOR_DEFINITIONS = "kPTPusherClientLibraryVersion=@\"$(CURRENT_PROJECT_VERSION)\""; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "kPTPusherClientLibraryVersion=@\"$(CURRENT_PROJECT_VERSION)\"", + ); GCC_VERSION = com.apple.compilers.llvm.clang.1_0; OTHER_LDFLAGS = "$(inherited)"; PRODUCT_NAME = Pusher; @@ -1133,6 +1139,11 @@ CURRENT_PROJECT_VERSION = 1.1; DYLIB_CURRENT_VERSION = 1.1; GCC_C_LANGUAGE_STANDARD = c99; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "COCOAPODS=1", + DEBUG, + ); GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; From da0a827e2a85d9388123b50ae4cda93d2f0c32b7 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Thu, 31 Oct 2013 18:12:43 +0000 Subject: [PATCH 05/88] Added automated ping/pongs for activity timeouts. --- Library/PTPusherConnection.h | 9 +++++ Library/PTPusherConnection.m | 67 ++++++++++++++++++++++++++++++++---- 2 files changed, 69 insertions(+), 7 deletions(-) diff --git a/Library/PTPusherConnection.h b/Library/PTPusherConnection.h index 32e43b47..06b3eece 100644 --- a/Library/PTPusherConnection.h +++ b/Library/PTPusherConnection.h @@ -42,6 +42,15 @@ typedef enum { @property (nonatomic, readonly, getter=isConnected) BOOL connected; @property (nonatomic, copy, readonly) NSString *socketID; +/* If the connection does not receive any new data within the time specified, + * a ping event will be sent. + */ +@property (nonatomic, assign) NSTimeInterval activityTimeout; + +/* The amount of time to wait for a pong in response to a ping before disconnecting. + */ +@property (nonatomic, assign) NSTimeInterval pongTimeout; + ///------------------------------------------------------------------------------------/ /// @name Initialisation ///------------------------------------------------------------------------------------/ diff --git a/Library/PTPusherConnection.m b/Library/PTPusherConnection.m index 3f885483..927a3f39 100644 --- a/Library/PTPusherConnection.m +++ b/Library/PTPusherConnection.m @@ -14,12 +14,13 @@ NSString *const PTPusherConnectionEstablishedEvent = @"pusher:connection_established"; NSString *const PTPusherConnectionPingEvent = @"pusher:ping"; +NSString *const PTPusherConnectionPongEvent = @"pusher:pong"; @interface PTPusherConnection () @property (nonatomic, copy) NSString *socketID; @property (nonatomic, assign) PTPusherConnectionState state; - -- (void)respondToPingEvent; +@property (nonatomic, strong) NSTimer *pingTimer; +@property (nonatomic, strong) NSTimer *pongTimer; @end @implementation PTPusherConnection { @@ -40,12 +41,22 @@ - (id)initWithURL:(NSURL *)aURL { if ((self = [super init])) { request = [NSURLRequest requestWithURL:aURL]; + +#ifdef DEBUG + NSLog(@"[pusher] Debug logging enabled"); +#endif + + // Timeout defaults as recommended by the Pusher protocol documentation. + self.activityTimeout = 120.0; + self.pongTimeout = 30.0; } return self; } - (void)dealloc { + [self.pingTimer invalidate]; + [self.pongTimer invalidate]; [socket setDelegate:nil]; [socket close]; } @@ -119,12 +130,26 @@ - (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reas - (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(NSString *)message { + [self resetPingPongTimer]; + NSDictionary *messageDictionary = [[PTJSON JSONParser] objectFromJSONString:message]; PTPusherEvent *event = [PTPusherEvent eventFromMessageDictionary:messageDictionary]; if ([event.name isEqualToString:PTPusherConnectionPingEvent]) { // don't forward on ping events, just handle them and return - [self respondToPingEvent]; +#ifdef DEBUG + NSLog(@"[pusher] Responding to server sent ping (pong!)"); +#endif + + [self sendPong]; + return; + } + if ([event.name isEqualToString:PTPusherConnectionPongEvent]) { +#ifdef DEBUG + NSLog(@"[pusher] Server responded to ping (pong!)"); +#endif + + [self.pongTimer invalidate]; return; } @@ -138,15 +163,43 @@ - (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(NSString *)message [self.delegate pusherConnection:self didReceiveEvent:event]; } -#pragma mark - +#pragma mark - Ping/Pong/Activity Timeouts + +- (void)sendPing +{ + [self send:[NSDictionary dictionaryWithObject:@"pusher:ping" forKey:@"event"]]; +} -- (void)respondToPingEvent +- (void)sendPong +{ + [self send:[NSDictionary dictionaryWithObject:@"pusher:pong" forKey:@"event"]]; +} + +- (void)resetPingPongTimer +{ + [self.pingTimer invalidate]; + + self.pingTimer = [NSTimer scheduledTimerWithTimeInterval:self.activityTimeout target:self selector:@selector(handleActivityTimeout) userInfo:nil repeats:NO]; +} + +- (void)handleActivityTimeout { #ifdef DEBUG - NSLog(@"[pusher] Responding to ping (pong!)"); + NSLog(@"[pusher] Pusher connection activity timeout reached, sending ping to server"); #endif - [self send:[NSDictionary dictionaryWithObject:@"pusher:pong" forKey:@"event"]]; + [self sendPing]; + + self.pongTimer = [NSTimer scheduledTimerWithTimeInterval:self.activityTimeout target:self selector:@selector(handlePongTimeout) userInfo:nil repeats:NO]; +} + +- (void)handlePongTimeout +{ +#ifdef DEBUG + NSLog(@"[pusher] Server did not respond to ping within timeout, disconnecting"); +#endif + + [self disconnect]; } @end From 26c780d03bbab22cb241bf76b158bf299bcb34fc Mon Sep 17 00:00:00 2001 From: Martyn Loughran Date: Tue, 5 Nov 2013 18:21:14 +0000 Subject: [PATCH 06/88] Remove deprecated line from podspec --- libPusher.podspec | 1 - 1 file changed, 1 deletion(-) diff --git a/libPusher.podspec b/libPusher.podspec index 6a43dd93..7239fd29 100644 --- a/libPusher.podspec +++ b/libPusher.podspec @@ -7,7 +7,6 @@ Pod::Spec.new do |s| s.author = 'Luke Redpath' s.source = { :git => 'git://github.com/lukeredpath/libPusher.git', :tag => 'v1.4' } s.source_files = 'Library/*' - s.clean_paths = ["Frameworks", "Functional Specs", "Sample", "Scripts", "Unit Tests", "*.xcodeproj", "*.xcworkspace"] s.requires_arc = true s.dependency 'SocketRocket', "0.2" s.compiler_flags = '-Wno-arc-performSelector-leaks', '-Wno-format' From a64ae364ca402f1acd44f12882d1408d582326c8 Mon Sep 17 00:00:00 2001 From: Martyn Loughran Date: Tue, 5 Nov 2013 18:22:55 +0000 Subject: [PATCH 07/88] Bugfix: Add preprocessor definition to podspec Otherwise the library version constant is missing when including libPusher via a Podfile --- libPusher.podspec | 1 + 1 file changed, 1 insertion(+) diff --git a/libPusher.podspec b/libPusher.podspec index 7239fd29..3a840797 100644 --- a/libPusher.podspec +++ b/libPusher.podspec @@ -10,4 +10,5 @@ Pod::Spec.new do |s| s.requires_arc = true s.dependency 'SocketRocket', "0.2" s.compiler_flags = '-Wno-arc-performSelector-leaks', '-Wno-format' + s.xcconfig = { 'GCC_PREPROCESSOR_DEFINITIONS' => 'kPTPusherClientLibraryVersion=@\"1.5\"' } end From 4003097f79311cb795d9926c5dbc11fb6934de36 Mon Sep 17 00:00:00 2001 From: Martyn Loughran Date: Thu, 7 Nov 2013 12:21:49 +0000 Subject: [PATCH 08/88] Bugfix, now uses correct pongTimeout --- Library/PTPusherConnection.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Library/PTPusherConnection.m b/Library/PTPusherConnection.m index 927a3f39..932e0aad 100644 --- a/Library/PTPusherConnection.m +++ b/Library/PTPusherConnection.m @@ -190,7 +190,7 @@ - (void)handleActivityTimeout [self sendPing]; - self.pongTimer = [NSTimer scheduledTimerWithTimeInterval:self.activityTimeout target:self selector:@selector(handlePongTimeout) userInfo:nil repeats:NO]; + self.pongTimer = [NSTimer scheduledTimerWithTimeInterval:self.pongTimeout target:self selector:@selector(handlePongTimeout) userInfo:nil repeats:NO]; } - (void)handlePongTimeout From 5b3437f642f085470792b2a1ed22b1682004d34e Mon Sep 17 00:00:00 2001 From: Martyn Loughran Date: Thu, 7 Nov 2013 12:09:28 +0000 Subject: [PATCH 09/88] Invalidate timers on disconnect Otherwise library tries to send a ping after disconnect, causing assertion to fail --- Library/PTPusherConnection.m | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Library/PTPusherConnection.m b/Library/PTPusherConnection.m index 932e0aad..fc14b7c6 100644 --- a/Library/PTPusherConnection.m +++ b/Library/PTPusherConnection.m @@ -113,6 +113,8 @@ - (void)webSocketDidOpen:(SRWebSocket *)webSocket - (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error; { + [self.pingTimer invalidate]; + [self.pongTimer invalidate]; BOOL wasConnected = self.isConnected; self.state = PTPusherConnectionDisconnected; [self.delegate pusherConnection:self didFailWithError:error wasConnected:wasConnected]; @@ -122,6 +124,8 @@ - (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error; - (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean { + [self.pingTimer invalidate]; + [self.pongTimer invalidate]; self.state = PTPusherConnectionDisconnected; [self.delegate pusherConnection:self didDisconnectWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean]; self.socketID = nil; From 740600de02d3755335fd6d58d94db1959bdb95fb Mon Sep 17 00:00:00 2001 From: Martyn Loughran Date: Thu, 7 Nov 2013 12:11:05 +0000 Subject: [PATCH 10/88] Remove unnecessary pusher:ping event handling This will never be sent by the server since the WebSocket draft in use supports native pings --- Library/PTPusherConnection.m | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/Library/PTPusherConnection.m b/Library/PTPusherConnection.m index fc14b7c6..7b0d56b1 100644 --- a/Library/PTPusherConnection.m +++ b/Library/PTPusherConnection.m @@ -138,16 +138,7 @@ - (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(NSString *)message NSDictionary *messageDictionary = [[PTJSON JSONParser] objectFromJSONString:message]; PTPusherEvent *event = [PTPusherEvent eventFromMessageDictionary:messageDictionary]; - - if ([event.name isEqualToString:PTPusherConnectionPingEvent]) { - // don't forward on ping events, just handle them and return -#ifdef DEBUG - NSLog(@"[pusher] Responding to server sent ping (pong!)"); -#endif - [self sendPong]; - return; - } if ([event.name isEqualToString:PTPusherConnectionPongEvent]) { #ifdef DEBUG NSLog(@"[pusher] Server responded to ping (pong!)"); @@ -174,11 +165,6 @@ - (void)sendPing [self send:[NSDictionary dictionaryWithObject:@"pusher:ping" forKey:@"event"]]; } -- (void)sendPong -{ - [self send:[NSDictionary dictionaryWithObject:@"pusher:pong" forKey:@"event"]]; -} - - (void)resetPingPongTimer { [self.pingTimer invalidate]; From 3e47e70cb10f0a9818fc5b65f494754cae8d12bc Mon Sep 17 00:00:00 2001 From: Martyn Loughran Date: Thu, 7 Nov 2013 12:21:28 +0000 Subject: [PATCH 11/88] Reset the pong timer on any activity This simplifies the timer logic: It's no longer possible to have to a ping & a pong timer active at the same time. Also consistent with the js client behaviour --- Library/PTPusherConnection.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Library/PTPusherConnection.m b/Library/PTPusherConnection.m index 7b0d56b1..26472ce7 100644 --- a/Library/PTPusherConnection.m +++ b/Library/PTPusherConnection.m @@ -143,8 +143,6 @@ - (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(NSString *)message #ifdef DEBUG NSLog(@"[pusher] Server responded to ping (pong!)"); #endif - - [self.pongTimer invalidate]; return; } @@ -168,6 +166,8 @@ - (void)sendPing - (void)resetPingPongTimer { [self.pingTimer invalidate]; + // Any activity also invalidates the pong timer if set + [self.pongTimer invalidate]; self.pingTimer = [NSTimer scheduledTimerWithTimeInterval:self.activityTimeout target:self selector:@selector(handleActivityTimeout) userInfo:nil repeats:NO]; } From 8676160348e0c8c8951bcbc79f18208459875ca0 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Sun, 24 Nov 2013 13:49:47 +0000 Subject: [PATCH 12/88] Ignore xccheckout files --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 7720bee6..e5436a76 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,4 @@ dist .bundle xcodebuild.log Pods/Documentation +*.xccheckout From dc5187cefe422a210514a5a58acec1182fa59315 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Sun, 24 Nov 2013 13:57:13 +0000 Subject: [PATCH 13/88] Update to the latest version of CocoaPods and update Xcode project files. --- Gemfile | 2 +- Gemfile.lock | 88 +- Podfile.lock | 2 +- Pods/Manifest.lock | 2 +- Pods/Pods-resources.sh | 44 +- Pods/Pods-specs-resources.sh | 44 +- Pods/Pods.xcodeproj/project.pbxproj | 7060 +++++++++-------- .../xcschemes/Pods-Reachability.xcscheme | 59 + .../xcschemes/Pods-SocketRocket.xcscheme | 59 + .../xcschemes/Pods-specs-Kiwi.xcscheme | 59 + .../xcschemes/Pods-specs-OHHTTPStubs.xcscheme | 59 + .../xcschemes/Pods-specs.xcscheme | 4 +- .../luke.xcuserdatad/xcschemes/Pods.xcscheme | 4 +- .../xcschemes/xcschememanagement.plist | 130 +- .../xcschemes/Sample App (OSX).xcscheme | 2 +- .../xcschemes/libPusher-OSX.xcscheme | 2 +- libPusher.xcodeproj/project.pbxproj | 5 +- .../xcschemes/Functional Specs.xcscheme | 2 +- .../xcschemes/Sample App (iOS).xcscheme | 2 +- .../xcshareddata/xcschemes/UnitTests.xcscheme | 2 +- .../xcshareddata/xcschemes/libPusher.xcscheme | 2 +- 21 files changed, 3985 insertions(+), 3648 deletions(-) create mode 100644 Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-Reachability.xcscheme create mode 100644 Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-SocketRocket.xcscheme create mode 100644 Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs-Kiwi.xcscheme create mode 100644 Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs-OHHTTPStubs.xcscheme diff --git a/Gemfile b/Gemfile index 46cc49ad..b6913243 100644 --- a/Gemfile +++ b/Gemfile @@ -15,7 +15,7 @@ group :building do gem "rest-client" gem "xcodebuild-rb", :git => "git://github.com/lukeredpath/xcodebuild-rb.git" gem "xcodeproj" - gem "cocoapods", '~> 0.22.0' + gem "cocoapods", '~> 0.28.0' gem "github-downloads", :git => "git://github.com/lukeredpath/github-downloads.git" gem "osx_keychain" gem "ios-sim-test", :git => "git://github.com/alloy/ios-sim-test.git" diff --git a/Gemfile.lock b/Gemfile.lock index c73ebef9..b2fe5800 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -20,7 +20,7 @@ GIT GIT remote: git://github.com/lukeredpath/xcodebuild-rb.git - revision: eadcfbb4924b99f9f65775368e2ba5fc43a499fa + revision: 689feb53dc4f7f0132b70b33436dc13495e9fd4c specs: xcodebuild-rb (0.2.0) state_machine (~> 1.1.2) @@ -28,77 +28,83 @@ GIT GEM remote: https://rubygems.org/ specs: - RubyInline (3.11.4) + RubyInline (3.12.2) ZenTest (~> 4.3) - ZenTest (4.8.4) - activesupport (3.2.13) - i18n (= 0.6.1) + ZenTest (4.9.5) + activesupport (3.2.15) + i18n (~> 0.6, >= 0.6.4) multi_json (~> 1.0) - claide (0.3.2) - cocoapods (0.22.2) - activesupport (~> 3.2.13) - claide (~> 0.3.2) - cocoapods-core (= 0.22.2) - cocoapods-downloader (~> 0.1.1) + claide (0.4.0) + cocoapods (0.28.0) + activesupport (>= 3.2.15, < 4) + claide (~> 0.4.0) + cocoapods-core (= 0.28.0) + cocoapods-downloader (~> 0.2.0) colored (~> 1.2) escape (~> 0.0.4) - json (~> 1.8.0) - open4 (~> 1.3.0) - xcodeproj (~> 0.8.1) - cocoapods-core (0.22.2) - activesupport (~> 3.2.13) - json (~> 1.8.0) - nap (~> 0.5.1) - cocoapods-downloader (0.1.1) + json_pure (~> 1.8) + open4 (~> 1.3) + xcodeproj (~> 0.14.1) + cocoapods-core (0.28.0) + activesupport (>= 3.2.15, < 4) + fuzzy_match (~> 2.0.4) + json (~> 1.8) + nap (~> 0.5) + cocoapods-downloader (0.2.0) colored (1.2) daemons (1.1.9) escape (0.0.4) - eventmachine (1.0.0) - highline (1.6.15) - hirb (0.7.0) - i18n (0.6.1) - json (1.8.0) + eventmachine (1.0.3) + fuzzy_match (2.0.4) + highline (1.6.20) + hirb (0.7.1) + httpclient (2.3.4.1) + i18n (0.6.5) + json (1.8.1) + json_pure (1.8.1) macaddr (1.6.1) systemu (~> 2.5.0) - mime-types (1.19) - multi_json (1.7.7) + mime-types (2.0) + multi_json (1.8.2) nap (0.5.1) open4 (1.3.0) osx_keychain (1.0.0) RubyInline (~> 3) - pusher (0.11.1) + pusher (0.12.0) + httpclient (~> 2.3.0) multi_json (~> 1.0) signature (~> 0.1.6) - rack (1.4.1) - rack-protection (1.2.0) + rack (1.5.2) + rack-protection (1.5.1) rack rake (10.1.0) rest-client (1.6.7) mime-types (>= 1.16) - signature (0.1.6) + signature (0.1.7) simpleconsole (0.1.1) - sinatra (1.3.3) - rack (~> 1.3, >= 1.3.6) - rack-protection (~> 1.2) - tilt (~> 1.3, >= 1.3.3) + sinatra (1.4.4) + rack (~> 1.4) + rack-protection (~> 1.4) + tilt (~> 1.3, >= 1.3.4) state_machine (1.1.2) systemu (2.5.2) - thin (1.5.0) + thin (1.6.1) daemons (>= 1.0.9) - eventmachine (>= 0.12.6) + eventmachine (>= 1.0.0) rack (>= 1.0.0) - tilt (1.3.3) - uuid (2.3.6) + tilt (1.4.1) + uuid (2.3.7) macaddr (~> 1.0) - xcodeproj (0.8.1) - activesupport (~> 3.2.13) + xcodeproj (0.14.1) + activesupport (~> 3.0) colored (~> 1.2) + rake PLATFORMS ruby DEPENDENCIES - cocoapods (~> 0.22.0) + cocoapods (~> 0.28.0) github-downloads! ios-sim-test! json diff --git a/Podfile.lock b/Podfile.lock index c2d3fab0..738e9f5a 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -16,4 +16,4 @@ SPEC CHECKSUMS: Reachability: 500bd76bf6cd8ff2c6fb715fc5f44ef6e4c024f2 SocketRocket: bca43a94bd9aac3a629df42c06843402399ee67b -COCOAPODS: 0.22.2 +COCOAPODS: 0.28.0 diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index c2d3fab0..738e9f5a 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -16,4 +16,4 @@ SPEC CHECKSUMS: Reachability: 500bd76bf6cd8ff2c6fb715fc5f44ef6e4c024f2 SocketRocket: bca43a94bd9aac3a629df42c06843402399ee67b -COCOAPODS: 0.22.2 +COCOAPODS: 0.28.0 diff --git a/Pods/Pods-resources.sh b/Pods/Pods-resources.sh index aea76a61..6fff7a09 100755 --- a/Pods/Pods-resources.sh +++ b/Pods/Pods-resources.sh @@ -18,12 +18,22 @@ install_resource() *.framework) echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - echo "cp -fpR ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - cp -fpR "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync -av ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + rsync -av "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + ;; + *.xcdatamodel) + echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1"`.mom\"" + xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodel`.mom" ;; *.xcdatamodeld) - echo "xcrun momc ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename $1 .xcdatamodeld`.momd" - xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename $1 .xcdatamodeld`.momd" + echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd\"" + xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd" + ;; + *.xcassets) + ;; + /*) + echo "$1" + echo "$1" >> "$RESOURCES_TO_COPY" ;; *) echo "${PODS_ROOT}/$1" @@ -32,5 +42,27 @@ install_resource() esac } -rsync -avr --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -rm "$RESOURCES_TO_COPY" +rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +if [[ "${ACTION}" == "install" ]]; then + rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi +rm -f "$RESOURCES_TO_COPY" + +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ `xcrun --find actool` ] && [ `find . -name '*.xcassets' | wc -l` -ne 0 ] +then + case "${TARGETED_DEVICE_FAMILY}" in + 1,2) + TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" + ;; + 1) + TARGET_DEVICE_ARGS="--target-device iphone" + ;; + 2) + TARGET_DEVICE_ARGS="--target-device ipad" + ;; + *) + TARGET_DEVICE_ARGS="--target-device mac" + ;; + esac + find "${PWD}" -name "*.xcassets" -print0 | xargs -0 actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi diff --git a/Pods/Pods-specs-resources.sh b/Pods/Pods-specs-resources.sh index aea76a61..6fff7a09 100755 --- a/Pods/Pods-specs-resources.sh +++ b/Pods/Pods-specs-resources.sh @@ -18,12 +18,22 @@ install_resource() *.framework) echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - echo "cp -fpR ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - cp -fpR "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync -av ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + rsync -av "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + ;; + *.xcdatamodel) + echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1"`.mom\"" + xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodel`.mom" ;; *.xcdatamodeld) - echo "xcrun momc ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename $1 .xcdatamodeld`.momd" - xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename $1 .xcdatamodeld`.momd" + echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd\"" + xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd" + ;; + *.xcassets) + ;; + /*) + echo "$1" + echo "$1" >> "$RESOURCES_TO_COPY" ;; *) echo "${PODS_ROOT}/$1" @@ -32,5 +42,27 @@ install_resource() esac } -rsync -avr --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -rm "$RESOURCES_TO_COPY" +rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +if [[ "${ACTION}" == "install" ]]; then + rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi +rm -f "$RESOURCES_TO_COPY" + +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ `xcrun --find actool` ] && [ `find . -name '*.xcassets' | wc -l` -ne 0 ] +then + case "${TARGETED_DEVICE_FAMILY}" in + 1,2) + TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" + ;; + 1) + TARGET_DEVICE_ARGS="--target-device iphone" + ;; + 2) + TARGET_DEVICE_ARGS="--target-device ipad" + ;; + *) + TARGET_DEVICE_ARGS="--target-device mac" + ;; + esac + find "${PWD}" -name "*.xcassets" -print0 | xargs -0 actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index 6db96425..7743d81a 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -10,106 +10,113 @@ 46 objects - 000DDA3F36E84183865E25F4 + 00008FCC38E246728207AFD5 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWChangeMatcher.h + KWAsyncVerifier.m path - Kiwi/Classes/KWChangeMatcher.h + Classes/KWAsyncVerifier.m sourceTree - SOURCE_ROOT - - 007D6A8BFFE2401D99D28963 - - fileRef - AA639AD4F034426E9C6EE8B1 - isa - PBXBuildFile + <group> - 009B87A4517C4E49B32C3249 + 003C27671F634861B6200BDC fileRef - 9668979FBD5541529C3EBFA2 + C2E00E00C29249379F52604B isa PBXBuildFile - 015E5FADC4864E31ACA24197 + 007DDF76AC2F4F3C8C77C865 fileRef - 625877F642B546C98332C80B + 76146A38D348416F98A7F7E4 isa PBXBuildFile - 01B51F5183B044EE9026444D + 010291D50DF6440BBB36F5D3 children - A172D07E069B4F009901DD4C - 3B78E950BD1846148855AF6A - 216AD05FC2104E778C169485 - CE244AEA34B74D4DA111CDDA + 37EDB6AFC26B46A4B13F9441 + 044A31251DE24E4D89ACE822 + 267A5D395EF640E7B583BF24 isa PBXGroup name - Pods-specs-OHHTTPStubs + Reachability + path + Reachability sourceTree <group> - 0201529585604419A1AE4E4D + 01656CBF93D94C468CBE1471 - children - - 3662B2F395594173B059E575 - A11D0D681B3E408E8D609BAC - 30F560384FFF4C8D8F3D33A1 - 01B51F5183B044EE9026444D - 721DBBD9444D490682A6BABB - F27CFE22D0F54FA0957FC054 - + fileRef + B726226B1E3F4B53BED8EE77 isa - PBXGroup - name - Targets Support Files - sourceTree - <group> + PBXBuildFile - 0225821FFE7D4E9EA2258D18 + 0165A00EA70F4C35AF958E59 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + text name - KWStringUtilities.h + Podfile path - Kiwi/Classes/KWStringUtilities.h + ../Podfile sourceTree SOURCE_ROOT + xcLanguageSpecificationIdentifier + xcode.lang.ruby - 022EE64F38224E26B5DC5F1E + 01D8A1EAABE44A4EBD87F18E fileRef - 35207C7EBAC74DBCA4BC4B3B + 67AA976E7118427D98F0C8F1 isa PBXBuildFile - 03BA55ECD1FB466E9E987E1E + 02917EAEA3E74E9FB9A54260 - fileRef - A3FA974DD32E44B7A9F4E41A + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWAfterEachNode.h + path + Classes/KWAfterEachNode.h + sourceTree + <group> + + 03060AE9CB874C658FA61E37 + + buildConfigurations + + D9A0A143EC1C4C43B6E5CC36 + CA508CC131164E5BB8315DD4 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList - 047C16E20F244D8AB1266662 + 03CB4DC62DB343B9A37EC9E1 includeInIndex 1 @@ -118,13 +125,13 @@ lastKnownFileType sourcecode.c.h name - KWRaiseMatcher.h + KWExistVerifier.h path - Kiwi/Classes/KWRaiseMatcher.h + Classes/KWExistVerifier.h sourceTree - SOURCE_ROOT + <group> - 055FC09FA8354B4B8F426304 + 044A31251DE24E4D89ACE822 includeInIndex 1 @@ -132,184 +139,176 @@ PBXFileReference lastKnownFileType sourcecode.c.objc - name - OHHTTPStubsResponse.m path - OHHTTPStubs/OHHTTPStubs/OHHTTPStubsResponse.m + Reachability.m sourceTree - SOURCE_ROOT + <group> - 072AA58ED0364347AC68B566 + 04A715A7603D4176BE04DCD7 + + isa + PBXTargetDependency + target + F3A20961FEC8436DAF996DD4 + targetProxy + BCFDD67BF3344A34ADB13924 + + 0509686B98054A0F829879CD fileRef - C4261EBEA1EC4D45B866B139 + 521981D242014582BC666854 isa PBXBuildFile - 072ADA10D5A04A799A4785E8 + 05203007927E4DE5B8CB91FF includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWExampleSuite.m + KWBeWithinMatcher.h path - Kiwi/Classes/KWExampleSuite.m + Classes/KWBeWithinMatcher.h sourceTree - SOURCE_ROOT + <group> + + 063B745CAFFF4B3B9E528BBD + + fileRef + 2193788D34E94DBE9C2953A1 + isa + PBXBuildFile - 07473608A64F4403B0C0A66F + 0692DA3FAE464AC9B4070C78 includeInIndex 1 isa PBXFileReference lastKnownFileType - text + text.xcconfig path - Pods-specs-acknowledgements.markdown + Pods.xcconfig sourceTree - SOURCE_ROOT - - 07475DD20A27462DB72313F2 - - fileRef - DA6C7EF21E1147E496C92DFE - isa - PBXBuildFile + <group> - 07758B687044417B88378C7A + 06D0924645CF44F29A7F8FCB includeInIndex 1 isa PBXFileReference lastKnownFileType - text + sourcecode.c.objc name - Podfile + KWNull.m path - ../Podfile + Classes/KWNull.m sourceTree - SOURCE_ROOT - xcLanguageSpecificationIdentifier - xcode.lang.ruby + <group> - 0777BA3BB9584122ACE4EE63 + 07ED0CC062E9413EBE684F61 - attributes - - LastUpgradeCheck - 0450 - - buildConfigurationList - 1DE8CF6EAF6E4A38984CF003 - compatibilityVersion - Xcode 3.2 - developmentRegion - English - hasScannedForEncodings - 0 + fileRef + 2DB0F5A2BA0241F5BDFE8B02 isa - PBXProject - knownRegions - - en - - mainGroup - E05A1DAF02EC4B9694DF2D74 - productRefGroup - 9F597748B21C42CEBCD46279 - projectDirPath - - projectReferences - - projectRoot - - targets - - 81CAD16CBB3143C8A5F918C4 - 99E902D1C70F44B3920567BD - F0531BAE563D403FBDFF4C89 - EF4179F378294E3EB69819FE - 7328A4F9C6374686A27D248B - 72A00082A6D7484B918AFF7E - + PBXBuildFile - 082CB756DEA34ABD8D511FD6 + 08391C3F382E4578BD6E8B96 fileRef - 372F2CC1B1924FBFAA93CAA4 + 5D5449014E644CFB98449F5F isa PBXBuildFile - 08841FEE42C14F07A9BFC795 + 089E653D5D3A4B8BA7C7D289 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWPendingNode.m + path + Classes/KWPendingNode.m + sourceTree + <group> + + 090DE73BDFD446618E005B8C fileRef - BB621ACD7F9B4D88BD0A527C + FBE82AE05AA74A22B1E0CCDD isa PBXBuildFile - 093B6E83497241BAA4703A0F + 095BEA9BB8934C89A96AED18 fileRef - 17E42ACDDB8A4492A9261BB9 + C6EA35EC896446D3812BAF66 isa PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 + + + 0A183BE4AAFF4F9CA9338B78 + + buildActionMask + 2147483647 + files + + 54B2AACB50B045C5B93E084A + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 - 093D16518B924407BD3133F0 + 0A4EB9F903F34C83A99E5993 fileRef - 1551310F7A704937B885F16F + 6BCCA55C01E6486D9E59A6F2 isa PBXBuildFile - 0953C0DFE8EF41078ADEEF85 + 0B780B1BFAED4F2FAFDEB736 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWMessageSpying.h + KWBeforeEachNode.m path - Kiwi/Classes/KWMessageSpying.h + Classes/KWBeforeEachNode.m sourceTree - SOURCE_ROOT - - 09665D148E40438094738FF5 - - fileRef - 2AC39C6B7E8641359DA97E9D - isa - PBXBuildFile - - 0993C03064C746EBB66DBB7F - - fileRef - 0A368F1853344363A10993F6 - isa - PBXBuildFile + <group> - 0A283EFDEC2647D3BD04048E + 0B8425E1BC32490B868E9C00 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.plist.xml + sourcecode.c.objc + name + KWGenericMatcher.m path - Pods-acknowledgements.plist + Classes/KWGenericMatcher.m sourceTree - SOURCE_ROOT + <group> - 0A368F1853344363A10993F6 + 0B880FCBE6804AE59CEE3489 includeInIndex 1 @@ -318,35 +317,28 @@ lastKnownFileType sourcecode.c.h name - KWTestCase.h + KWExampleNode.h path - Kiwi/Classes/KWTestCase.h + Classes/KWExampleNode.h sourceTree - SOURCE_ROOT + <group> - 0BE63869164546C3BF6343DA + 0D35278FB73C48B583F219DA includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWStub.m + KWAfterAllNode.h path - Kiwi/Classes/KWStub.m + Classes/KWAfterAllNode.h sourceTree - SOURCE_ROOT - - 0C3B4B22FAB643B78F0FAD99 - - fileRef - 6DFD3697CDB14D9D9E3F54F2 - isa - PBXBuildFile + <group> - 0E80DAE469F348FCB7949B7D + 0DE613D5FBC442BEA676C2DF includeInIndex 1 @@ -355,13 +347,13 @@ lastKnownFileType sourcecode.c.h name - KWConformToProtocolMatcher.h + KWBeKindOfClassMatcher.h path - Kiwi/Classes/KWConformToProtocolMatcher.h + Classes/KWBeKindOfClassMatcher.h sourceTree - SOURCE_ROOT + <group> - 0F79CA43B2F94A46A6805A04 + 0EBA34AEF95C4A46A6CE35CA includeInIndex 1 @@ -370,58 +362,42 @@ lastKnownFileType sourcecode.c.h name - KWVerifying.h + KWBeZeroMatcher.h path - Kiwi/Classes/KWVerifying.h + Classes/KWBeZeroMatcher.h sourceTree - SOURCE_ROOT - - 0FE5CCFA975C4BCBA37997AC - - fileRef - 41FE594754274C6089C37232 - isa - PBXBuildFile + <group> - 10AD640DF35848B3BCEE71B2 + 0EBCE730DDA7482FA5E2777F - explicitFileType - archive.ar includeInIndex - 0 + 1 isa PBXFileReference + lastKnownFileType + sourcecode.c.h + name + SRWebSocket.h path - libPods-SocketRocket.a + SocketRocket/SRWebSocket.h sourceTree - BUILT_PRODUCTS_DIR + <group> - 116B26F2EEED45BA80995927 + 0F984B16A6544C869570EDE7 - buildSettings - - IPHONEOS_DEPLOYMENT_TARGET - 4.0 - + fileRef + C1F0048B94D4428CBD764038 isa - XCBuildConfiguration - name - Debug + PBXBuildFile - 11F5DCEBEBB740B6A69A0315 + 0FFB35DE920343A6B3CAF39E - containerPortal - 0777BA3BB9584122ACE4EE63 + fileRef + C36DA1A49DFD4F3AA5F1F35C isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - EF4179F378294E3EB69819FE - remoteInfo - Pods-specs-OHHTTPStubs + PBXBuildFile - 1261D92AF3944E9AA65E74D1 + 110FE985B49041708D97AF74 includeInIndex 1 @@ -430,13 +406,27 @@ lastKnownFileType sourcecode.c.h name - KWMatching.h + KWProbePoller.h path - Kiwi/Classes/KWMatching.h + Classes/KWProbePoller.h sourceTree - SOURCE_ROOT + <group> + + 119627D572104042829B4D2A + + fileRef + D748FE8C912848879ADDC40A + isa + PBXBuildFile + + 1237D823D7124559A85760A3 + + fileRef + 4AA7720CA1EC4EB4B2EE6F86 + isa + PBXBuildFile - 131420174C014CC0A4B8AED3 + 12ADDEC1687247D698DF8292 includeInIndex 1 @@ -445,13 +435,41 @@ lastKnownFileType sourcecode.c.h name - KWBeEmptyMatcher.h + KWBeMemberOfClassMatcher.h path - Kiwi/Classes/KWBeEmptyMatcher.h + Classes/KWBeMemberOfClassMatcher.h sourceTree - SOURCE_ROOT + <group> + + 130928DE952446CABA9FA5EB + + fileRef + 27255A9FCBE943A6A263F51D + isa + PBXBuildFile + + 13340D3E27BF4D4BB673F7B2 + + fileRef + B0DE09EF9B424616840103EE + isa + PBXBuildFile + + 139F86C1A4CE41088F1F7181 + + fileRef + 996DF26A178C4391A1E1F3CA + isa + PBXBuildFile + + 14496D57C1B34A84984EB2A0 + + fileRef + A3042D81C15D4061A02BA93C + isa + PBXBuildFile - 1330BF11130A4651A84CC162 + 14723A73BEFA41B8B500CC76 includeInIndex 1 @@ -459,78 +477,119 @@ PBXFileReference lastKnownFileType sourcecode.c.h - name - NSObject+KiwiVerifierAdditions.h path - Kiwi/Classes/NSObject+KiwiVerifierAdditions.h + Pods-specs-OHHTTPStubs-prefix.pch sourceTree - SOURCE_ROOT + <group> + + 1498854BD2F840EF93503103 + + fileRef + E50BEEB09DEE4E46B1E828AF + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 + - 13BD9A952DCD468F8FB57F37 + 159C53CF9F5D4E8B8056AD62 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.script.sh + sourcecode.c.h + name + KWDeviceInfo.h path - Pods-specs-resources.sh + Classes/KWDeviceInfo.h sourceTree - SOURCE_ROOT + <group> - 142FA58830D64CE39FEF40B2 + 161E450B8FF641CE87B5D49A fileRef - A8E1F029C40A4982AACF3060 + 2DB0F5A2BA0241F5BDFE8B02 isa PBXBuildFile - 1443E13311B7461DA5208F46 + 162D4F7B9CFC4F40B3340617 - fileRef - B7EA61D0925D4F0C832E4BF5 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWWorkarounds.m + path + Classes/KWWorkarounds.m + sourceTree + <group> - 14727A6326874E8DB1C4C3F9 + 170446E1EC8F4391A429D2BD fileRef - 5299D1CAD5EA4887A25CBABD + 9EB9DAF99353458F9805E406 isa PBXBuildFile - 150431BFC8FB4FFB98309725 + 17D8EE657E8945FFB655C25E includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWStringPrefixMatcher.h + KWStub.m path - Kiwi/Classes/KWStringPrefixMatcher.h + Classes/KWStub.m sourceTree - SOURCE_ROOT + <group> + + 18083E9F12D14E8CA1A76438 + + children + + 3AAE4842914B427E9703F3EE + 2A2C2174F4F442038A294FD1 + 0EBCE730DDA7482FA5E2777F + 5C556B2B2E4B4C99BEEF778A + E50BEEB09DEE4E46B1E828AF + 27255A9FCBE943A6A263F51D + 6FE92DE38FA4459D8D7E0844 + + isa + PBXGroup + name + SocketRocket + path + SocketRocket + sourceTree + <group> - 154A27ABE58A45078F4BA286 + 1AB5C366EF3549C199A34EBA includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWFormatter.m + KWExampleSuite.h path - Kiwi/Classes/KWFormatter.m + Classes/KWExampleSuite.h sourceTree - SOURCE_ROOT + <group> - 1551310F7A704937B885F16F + 1AB5DA2BA8F84204A5C26473 includeInIndex 1 @@ -539,219 +598,70 @@ lastKnownFileType sourcecode.c.h name - KWBeMemberOfClassMatcher.h + KWSpec.h path - Kiwi/Classes/KWBeMemberOfClassMatcher.h + Classes/KWSpec.h sourceTree - SOURCE_ROOT + <group> - 157DAB4FD18342D4A25B8319 + 1AF086E689164B9C87C4C4BC + fileRef + 1E48EA6CC0AA429083E39A71 isa - PBXTargetDependency - target - F0531BAE563D403FBDFF4C89 - targetProxy - 627008D0168B424291561EEC + PBXBuildFile - 1581FACD930B4176B4F756A6 + 1B2088CF33B84C18BCA2D1F7 fileRef - E9ADDCFD2F8241DEAE01C976 + B623443CEC4F4A81B706FCA2 isa PBXBuildFile - 15CD267206AF4CF192761CCD + 1B29EDD57D3148C8917AAE62 - children - - 5EF065DD59E74924B9AB2E12 - 9C646E20509B411E8D96AEF8 - 756B1D81A44742FFB148E500 - DF8B54EC0E37483AA313BA61 - BD068C43ED654803B8C71995 - A956CB0270644E06904CEBEA - 9811CCF5FA8F4E8C8521EF3F - BB472D7A2DAF4FADAF4FF338 - BC26577D7F904EEF82B048FF - E1BE3EA864234FCC8E7A943E - 6DFD3697CDB14D9D9E3F54F2 - 28376C62F15841FC890EF7F5 - 7A6D92B774934142B6B52E4D - 41FE594754274C6089C37232 - 131420174C014CC0A4B8AED3 - A0C10AE3E81641F28D8FD401 - F05F8DD51A4049A5A374D3E4 - B84A670C25984F7E84EACE3E - 9201585E06B3403C9088447C - F373E1A09E4D4380AA2F5299 - CC5D0C2202FF42BA946660A4 - 8BFB505CDDE24299A1CDBB9F - 6D6C57593C5D437180DC9761 - 939578CAFC8942C2929F3F8C - 1551310F7A704937B885F16F - 5CC394709A934094B0826155 - 8D775504D1CB4769B5F08C04 - 340DF864C1BA4D1EABD936C6 - 8135B9B2F08041FA895A4ED7 - 8E8263928C3B4EBFB09597A6 - DE961CA58FD34E38BD574C33 - 8704BD946CE240C6ACE9CA77 - FC28FBB6542E431491C4A04A - CCAE54C648E04C549E1C1A25 - BE00DE7B32B243A682DDC187 - 42C41A69205E4B2287F16A35 - D17EA38DAB1A4F5098CC2DB0 - 348FFF89C3804BFF98B8640F - 4C70122DFE714497B15FA06F - 7DB4003828D5461B9567DED4 - FB99E112F42B4458A7428CE1 - B5DCCFEA33B048EE8D8816F7 - FEEF61ADDFA143C1A495C880 - 2AC39C6B7E8641359DA97E9D - 88929517815B43D49DFF4362 - 54A6AA3195DF44A9A3DF84FD - 8DBB0F91D01B43AD8C733B2B - 76708E4DABB948E7AD41EC5F - 000DDA3F36E84183865E25F4 - 7A1B44FC71AB4D22A19B6261 - 0E80DAE469F348FCB7949B7D - 9668979FBD5541529C3EBFA2 - C61546A3B30A49959059B7D1 - 8BDE2EBCCBF2417B964841D2 - ABB202FBAD074E109CF71566 - C4331BC551114FD2A5514EB1 - A8E1F029C40A4982AACF3060 - B47BA84054CC4E8C8029DD6F - E9F4040FDC9D40A8B360155D - 75D28F5682DA477796457451 - 52FF9AB870254C3A93AFDFDE - D669F81889054783B93FF400 - C587E4E28E77450E8D32A39A - E638C7BCD02B42149D574241 - 5B8BFCFE37B34B1A884613DF - 6CD7AD6A46CD42A3971E8F97 - A1530E7E8B9040B1B0EFE966 - C3AB70CB973646BAA866BADA - E9ADDCFD2F8241DEAE01C976 - 35207C7EBAC74DBCA4BC4B3B - 7C5886BA6BAA43AD96409043 - 072ADA10D5A04A799A4785E8 - C4261EBEA1EC4D45B866B139 - DEE08E213E904196BEBF63D7 - 5AD0D48F3789483095D5B16B - A1005BAE4B444499834A84BC - 7D9BFDB69EE049EAA02857C8 - 8B753A6C511E40CE84466C07 - 154A27ABE58A45078F4BA286 - EF292CE4724A422BA82C59B0 - 689219963D094039A58E4F7D - 972144E67837407D8240156C - BB621ACD7F9B4D88BD0A527C - 585EB411E8D14F08845B7C34 - 1836A8E7BB3340D1BEC5A659 - 437DAE2ADC694F249B4A818D - 223A1477DF814A05BB730288 - 41F87030F0624DC0B6A732E0 - 6F110B5114A54AA18DBA1F34 - D2140D56BD334E97B6829FC2 - F8BA36D5DCA14B05B8A62544 - 7E25B55285944F2E851E5827 - 2F60E112C3054655B705B2B7 - 575696B34CB24CE999EC340B - 51F0BE639B794FCE8FD932D8 - 47A030E9480940B7896ACBF8 - 1807592351294E42A94014DC - CC3A4C06B2B34AA58BCD8A6A - E7C504DF53524583AA9E8BEF - A3FA974DD32E44B7A9F4E41A - 5299D1CAD5EA4887A25CBABD - B9FE69D9E11C46998AC60AD7 - ED0883BBB05E49E0B2A79C2A - DC2FB9B0E1464FFCAE04D560 - E5918B17FBEF460AADB6F368 - 1261D92AF3944E9AA65E74D1 - EC732E0F175643EE9CCF1ED0 - 33AB4314EB6649A5884333EE - 7CE16008961B46459A91E027 - 59B54FF0DA71484C8F6ACB63 - 0953C0DFE8EF41078ADEEF85 - 5F04555A9DD54A4BA34EDCA6 - 4EC3CD1D81334E07A8A80982 - 17E42ACDDB8A4492A9261BB9 - 16A37C918B734529B369D4C6 - 7922598B24B74704B7EA958E - 27FA6CEB9CD243698A4145AC - 99F76629663940968AF23B8A - 800EFA74AB034A05A5B1AFCC - 53741485212040759799F234 - 491F3A30336742C09363FFFB - C37C48B8EA1E4F679BD0D967 - F30C2226942540408C5925FF - 3B9AECF466C745E7BB285457 - 047C16E20F244D8AB1266662 - DE3AF2C0ECE74478AE372972 - AA639AD4F034426E9C6EE8B1 - F5E81EADB49145A3AE70159D - 240B65CBB16B437FB2024905 - 65AF4B9115714C2AA5CF7DEF - 5E6FAEC9EA9442EAB40239E2 - BF113F4C8D274B2BADE3D699 - BF4F4E14A843446C85BAA992 - F0E2D6994CE748838FE6E07C - 81D313EE3E944E37B3AB3788 - 28D2C822EA74468D9FBF05CA - D7A606855D71448889BA62E8 - 5C9D83F9D8F140EA8B5C47DC - 310BE70F66F64D9DA731F0E3 - 150431BFC8FB4FFB98309725 - D0C72B06C9244DA9931D5344 - 0225821FFE7D4E9EA2258D18 - 9444A72A6A6041E8B70A9767 - AEDA40E015A94B7F9048ED5D - 0BE63869164546C3BF6343DA - 3080884C6C994C5B8835C3ED - 8ED87155D0E546AD8A384DC0 - 0A368F1853344363A10993F6 - 64DB77C0D1CD4367A08FCDDF - E12AE8C526574ECB927D3427 - 3BAE8CEA85634EB6B263A2B8 - 3AFF981E900D47C1B5E326A5 - 7D552DF2DCE5463CADE3D029 - 0F79CA43B2F94A46A6805A04 - 372F2CC1B1924FBFAA93CAA4 - 9676AEE801844D989D68B708 - ABA4519A10C240A992DFF2DE - D4824E5076DD49D6BB3D0985 - 1966C10EA41E45A383BF2968 - 388E29A4E8A248779E285A6F - 5B62C400020A49C0A3A9C3BC - 291CE5E8A70B4984B3F12934 - 845055AF292B45CC8337AD2C - 184561A9A12749ADB6FB96D3 - 2F2F660DFD54463BA9D9A7BF - D6BE811CAAA440A3842014B6 - 9FE5A4C83F224D4AB067DB45 - 2D8DF795D01E4B14B9B183D8 - DE4AAF571A1D40AD82280B3C - 42D8482887C2468FB2456054 - 1330BF11130A4651A84CC162 - 3FB98F70960B4B55A1C528C1 - 7E6D4807392D4006BEF41075 - 7E20F49EDDA34EF48787B3F1 - CBD79DD7CAB9404F836550E6 - 1606192A39B44155BE8B14AA - B7EA61D0925D4F0C832E4BF5 - DA6C7EF21E1147E496C92DFE - + fileRef + 5DFEFC48FF144766B5D6B189 isa - PBXGroup + PBXBuildFile + + 1B7738AF037D4A02B7D6F74D + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc name - Kiwi + KWAfterEachNode.m + path + Classes/KWAfterEachNode.m sourceTree <group> - 1606192A39B44155BE8B14AA + 1C57AB410F244F709E92E631 + + fileRef + DB834F3AE66E43ADBF4E3DF1 + isa + PBXBuildFile + + 1C704EB15BD844DB9E3E7B67 + + fileRef + BA10F41EC2754278945812C3 + isa + PBXBuildFile + + 1C9E5F48B1564FDD965FA441 + + fileRef + 2C887C3ED8A344B9B6AE0E3D + isa + PBXBuildFile + + 1DBCF24C3397436A93F8209F includeInIndex 1 @@ -760,35 +670,42 @@ lastKnownFileType sourcecode.c.objc name - NSValue+KiwiAdditions.m + KWEqualMatcher.m path - Kiwi/Classes/NSValue+KiwiAdditions.m + Classes/KWEqualMatcher.m sourceTree - SOURCE_ROOT + <group> + + 1DF91000F92C4312819661B0 + + fileRef + 25DB25583C0A41EB85B99372 + isa + PBXBuildFile - 166F039443B2431AAFEFBEB4 + 1E313F9CCADC4CFEAD404A16 fileRef - 99F76629663940968AF23B8A + BF1A468DD91B4EFAA1EF8ED4 isa PBXBuildFile - 16A37C918B734529B369D4C6 + 1E435A20911E4649B36B21CB includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWMock.m + KWHaveValueMatcher.h path - Kiwi/Classes/KWMock.m + Classes/KWHaveValueMatcher.h sourceTree - SOURCE_ROOT + <group> - 17E42ACDDB8A4492A9261BB9 + 1E48EA6CC0AA429083E39A71 includeInIndex 1 @@ -797,86 +714,115 @@ lastKnownFileType sourcecode.c.h name - KWMock.h + KWReporting.h path - Kiwi/Classes/KWMock.h + Classes/KWReporting.h sourceTree - SOURCE_ROOT + <group> - 17EBC0A278B84C06972CEC86 + 1ED7F16EB8164913B555296D - fileRef - 6CD7AD6A46CD42A3971E8F97 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + SenTestSuite+KiwiAdditions.m + path + Classes/SenTestSuite+KiwiAdditions.m + sourceTree + <group> - 1807592351294E42A94014DC + 1F7C580652F24C0D94721E40 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWInvocationCapturer.m + KWStringPrefixMatcher.h path - Kiwi/Classes/KWInvocationCapturer.m + Classes/KWStringPrefixMatcher.h sourceTree - SOURCE_ROOT + <group> - 18155CF64FBB467C8B0B7A77 + 215EF63935964E0D8D7E64FA fileRef - 5AD0D48F3789483095D5B16B + A447F211D903418BB7A55A82 isa PBXBuildFile - 1836A8E7BB3340D1BEC5A659 + 2193788D34E94DBE9C2953A1 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWGenericMatchEvaluator.m + KWContainStringMatcher.h path - Kiwi/Classes/KWGenericMatchEvaluator.m + Classes/KWContainStringMatcher.h sourceTree - SOURCE_ROOT + <group> + + 219AD23312004E0E8F67EC23 + + fileRef + 72F4161EAD3744C88B9D32E4 + isa + PBXBuildFile - 184561A9A12749ADB6FB96D3 + 21C20674E43444FBBEC7B66A includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - NSNumber+KiwiAdditions.m + text.xcconfig path - Kiwi/Classes/NSNumber+KiwiAdditions.m + Pods-SocketRocket.xcconfig sourceTree - SOURCE_ROOT + <group> - 1875CF990A3D4041BB0F8CCA + 221F1A46BA0F4EAC8857A397 - fileRef - DE961CA58FD34E38BD574C33 + buildActionMask + 2147483647 + files + + 68DB63AF6A264129A7D8F79E + 7D8DFEBD882F43FBB1CA379B + A56084030AA446BFA6C42FE4 + isa - PBXBuildFile + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 - 190D54C881E449CD89D8261A + 2233F66196FD4088AB894F50 - fileRef - 291CE5E8A70B4984B3F12934 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KiwiMacros.h + path + Classes/KiwiMacros.h + sourceTree + <group> - 1966C10EA41E45A383BF2968 + 22736026782A43489D60A3F0 includeInIndex 1 @@ -885,177 +831,109 @@ lastKnownFileType sourcecode.c.h name - NSInvocation+OCMAdditions.h + KWReceiveMatcher.h path - Kiwi/Classes/NSInvocation+OCMAdditions.h + Classes/KWReceiveMatcher.h sourceTree - SOURCE_ROOT + <group> - 19A74633E98849F8B7BEA7FC + 23753E7755924ADB9F64523F - explicitFileType - archive.ar includeInIndex - 0 + 1 isa PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWBeIdenticalToMatcher.h path - libPods-specs.a + Classes/KWBeIdenticalToMatcher.h sourceTree - BUILT_PRODUCTS_DIR + <group> - 1ACE630F671D49D3BAE64306 + 2375810F38484C808D53D566 fileRef - F05F8DD51A4049A5A374D3E4 + 23753E7755924ADB9F64523F isa PBXBuildFile - 1B204C7016914DAB98C1018A + 24756F2002E14C31A215BC84 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.objc + name + KWMatcherFactory.m path - Pods-Reachability-Private.xcconfig + Classes/KWMatcherFactory.m sourceTree - SOURCE_ROOT + <group> - 1B5653014A834720B72E3B9B + 2475729893FA48208B7F78F4 fileRef - 585EB411E8D14F08845B7C34 + E8BDD58964874D378CD8BE87 isa PBXBuildFile - 1BCA763A0617449EAFD95D51 + 25A5BA849B5B4B73B656505B fileRef - 969FDD6021AA4DB8B4BBFDFA + D5E6437F57824CEE9F5A43F2 isa PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - 1BF533EDF5034020B7603334 + 25DB25583C0A41EB85B99372 includeInIndex 1 isa PBXFileReference lastKnownFileType - wrapper.framework + sourcecode.c.objc name - Security.framework + KWInequalityMatcher.m path - Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/System/Library/Frameworks/Security.framework + Classes/KWInequalityMatcher.m sourceTree - DEVELOPER_DIR + <group> - 1C99083A2B7B43B09B7F8D97 + 267A5D395EF640E7B583BF24 - includeInIndex - 1 + children + + F1383854A6C64AEB9D679FFB + DCFDE749B62C4EB7B4EFB859 + E0F72EF850DD4C8F9533D52E + E648256A1A8B4BF0AFFC0DC8 + isa - PBXFileReference - lastKnownFileType - wrapper.framework + PBXGroup name - SenTestingKit.framework - path - Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/System/Library/Frameworks/SenTestingKit.framework + Support Files sourceTree - DEVELOPER_DIR + SOURCE_ROOT - 1D987852AAF1403CBE5A315B + 267D076EAF2E40CDB23FAA5D fileRef - 9811CCF5FA8F4E8C8521EF3F + 1F7C580652F24C0D94721E40 isa PBXBuildFile - 1DE8CF6EAF6E4A38984CF003 - - buildConfigurations - - DA2BB1A3C062453A9E7BF2A3 - 116B26F2EEED45BA80995927 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 1DFB09B3CD914E0DA2B145B5 + 270684A05C334FBBBE8B027E baseConfigurationReference - 65971647E977429D9AA5A4AE + DCFDE749B62C4EB7B4EFB859 buildSettings ALWAYS_SEARCH_USER_PATHS NO - ARCHS - armv6 armv7 - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 4.0 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES - - isa - XCBuildConfiguration - name - Release - - 1E8713996E3F49BAB251B7EB - - baseConfigurationReference - 1B204C7016914DAB98C1018A - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - ARCHS - armv6 armv7 COPY_PHASE_STRIP YES DSTROOT @@ -1100,74 +978,75 @@ name Release - 1E88DB2C638C45869220B46C + 27255A9FCBE943A6A263F51D - explicitFileType - archive.ar includeInIndex - 0 + 1 isa PBXFileReference + lastKnownFileType + sourcecode.c.h + name + base64.h path - libPods-specs-OHHTTPStubs.a + SocketRocket/base64.h sourceTree - BUILT_PRODUCTS_DIR + <group> - 1EB8ECB08E9140D59F618D7F + 2799AE84635F4E36A69CBC6B - buildConfigurations - - 50B703F9D41E4C719C7D943A - E952D13F467343DD8D1A3302 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release + containerPortal + 56671128374E4360A275B2F1 isa - XCConfigurationList + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + FDA401033508495A940D4635 + remoteInfo + Pods-specs-Kiwi - 202A037C6FBB44BABF42125A + 28DDDF1868B04E47A09B4B67 fileRef - 9444A72A6A6041E8B70A9767 + 721D7E86FD62421A980B009D isa PBXBuildFile - 20EBAD06F679446B9038C1F6 + 2910EBE586224DBFB6C88644 - fileRef - C4331BC551114FD2A5514EB1 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-specs-OHHTTPStubs-Private.xcconfig + sourceTree + <group> - 213298167DAC47C090CF05BD + 2950ACAC3BAE4E0293F5B4B8 - buildActionMask - 2147483647 - files - - A4CDE869765E42D0A1F4C040 - + fileRef + 40E2BE0176B3470EA948A4B8 isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXBuildFile - 216AD05FC2104E778C169485 + 29B873493F4242009C065CC8 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + text.xcconfig path - Pods-specs-OHHTTPStubs-prefix.pch + Pods-specs-Kiwi-Private.xcconfig sourceTree - SOURCE_ROOT + <group> - 223A1477DF814A05BB730288 + 2A2C2174F4F442038A294FD1 includeInIndex 1 @@ -1176,40 +1055,125 @@ lastKnownFileType sourcecode.c.objc name - KWGenericMatchingAdditions.m + NSData+SRB64Additions.m path - Kiwi/Classes/KWGenericMatchingAdditions.m + SocketRocket/NSData+SRB64Additions.m sourceTree - SOURCE_ROOT + <group> - 226F7DA97B5B4D399E0C1B37 + 2A41DC9983B141E8963B5F9D - fileRef - B9FE69D9E11C46998AC60AD7 + buildActionMask + 2147483647 + files + + 718EAF3FF84740F6864F63F2 + 79F28A886D2E4015870C4782 + isa - PBXBuildFile + PBXHeadersBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 2AB45C1EB166493E9F3E11A8 + + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + CLANG_CXX_LANGUAGE_STANDARD + gnu++0x + CLANG_CXX_LIBRARY + libc++ + CLANG_ENABLE_MODULES + YES + CLANG_ENABLE_OBJC_ARC + NO + CLANG_WARN_BOOL_CONVERSION + YES + CLANG_WARN_CONSTANT_CONVERSION + YES + CLANG_WARN_DIRECT_OBJC_ISA_USAGE + YES_ERROR + CLANG_WARN_EMPTY_BODY + YES + CLANG_WARN_ENUM_CONVERSION + YES + CLANG_WARN_INT_CONVERSION + YES + CLANG_WARN_OBJC_ROOT_CLASS + YES_ERROR + COPY_PHASE_STRIP + NO + ENABLE_NS_ASSERTIONS + NO + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_WARN_64_TO_32_BIT_CONVERSION + YES + GCC_WARN_ABOUT_RETURN_TYPE + YES_ERROR + GCC_WARN_UNDECLARED_SELECTOR + YES + GCC_WARN_UNINITIALIZED_AUTOS + YES + GCC_WARN_UNUSED_FUNCTION + YES + GCC_WARN_UNUSED_VARIABLE + YES + IPHONEOS_DEPLOYMENT_TARGET + 4.0 + STRIP_INSTALLED_PRODUCT + NO + VALIDATE_PRODUCT + YES + + isa + XCBuildConfiguration + name + Release - 229A240168A445D580878E21 + 2B068FD6DC2344B093CF25AC includeInIndex 1 isa PBXFileReference lastKnownFileType - text.script.sh + sourcecode.c.h + name + KWMatching.h path - Pods-resources.sh + Classes/KWMatching.h sourceTree - SOURCE_ROOT + <group> - 238E720EAB654D9D969FC9D7 + 2B0A0813AF0741DBB91ACC57 - fileRef - 7D552DF2DCE5463CADE3D029 + buildConfigurationList + 03060AE9CB874C658FA61E37 + buildPhases + + D6D679299D0F4360A4527C57 + 221F1A46BA0F4EAC8857A397 + 541F3D7FFADD45188E85D2B5 + + buildRules + + dependencies + isa - PBXBuildFile + PBXNativeTarget + name + Pods-SocketRocket + productName + Pods-SocketRocket + productReference + 3598443A8B444EEEB51C7FCA + productType + com.apple.product-type.library.static - 240B65CBB16B437FB2024905 + 2C887C3ED8A344B9B6AE0E3D includeInIndex 1 @@ -1218,105 +1182,78 @@ lastKnownFileType sourcecode.c.h name - KWRegisterMatchersNode.h + KWBlockNode.h path - Kiwi/Classes/KWRegisterMatchersNode.h + Classes/KWBlockNode.h sourceTree - SOURCE_ROOT - - 2438A481705B47BF871A4F0F - - fileRef - 7CE16008961B46459A91E027 - isa - PBXBuildFile + <group> - 245FF8F6735E4CCBA4CC749F + 2CAEC5C096FD44C6AA6EA2C8 fileRef - F30C2226942540408C5925FF + 93063D4333F74DB8991E0B6D isa PBXBuildFile - 24A18E88F0354422BD3DCCE4 + 2CE302F0CDD74C84BBC8BD22 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.h + name + KWBeTrueMatcher.h path - Pods-Reachability.xcconfig + Classes/KWBeTrueMatcher.h sourceTree - SOURCE_ROOT - - 25C53005B0614893BA1445E9 - - buildActionMask - 2147483647 - files - - 340143260ABF4E6994CB3252 - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 + <group> - 25D35DB0053540EBAC39E78A + 2D75D4F6472346F898D2702B includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - base64.h + KWAny.m path - SocketRocket/SocketRocket/base64.h + Classes/KWAny.m sourceTree - SOURCE_ROOT - - 26997F9AF54445F186B33E81 - - fileRef - CCAE54C648E04C549E1C1A25 - isa - PBXBuildFile + <group> - 27FA6CEB9CD243698A4145AC + 2DB0F5A2BA0241F5BDFE8B02 - includeInIndex - 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + wrapper.framework name - KWNull.m + Foundation.framework path - Kiwi/Classes/KWNull.m + Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/Foundation.framework sourceTree - SOURCE_ROOT + DEVELOPER_DIR - 28376C62F15841FC890EF7F5 + 2DBC7C45F4E24E5481DB65F5 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWAsyncVerifier.m + KWGenericMatchingAdditions.h path - Kiwi/Classes/KWAsyncVerifier.m + Classes/KWGenericMatchingAdditions.h sourceTree - SOURCE_ROOT + <group> - 28D2C822EA74468D9FBF05CA + 2F2420CB68A34CA1941D6309 includeInIndex 1 @@ -1325,13 +1262,13 @@ lastKnownFileType sourcecode.c.h name - KWSpec.h + KWExampleGroupDelegate.h path - Kiwi/Classes/KWSpec.h + Classes/KWExampleGroupDelegate.h sourceTree - SOURCE_ROOT + <group> - 291CE5E8A70B4984B3F12934 + 2F348541062B48A69CC5EB14 includeInIndex 1 @@ -1340,27 +1277,20 @@ lastKnownFileType sourcecode.c.objc name - NSMethodSignature+KiwiAdditions.m + KWFailure.m path - Kiwi/Classes/NSMethodSignature+KiwiAdditions.m + Classes/KWFailure.m sourceTree - SOURCE_ROOT - - 2A1CE86002FC46128B0EC7F1 - - fileRef - 8D775504D1CB4769B5F08C04 - isa - PBXBuildFile + <group> - 2A545C2E7E134D1D87B6F30B + 2FA72FD99E2F470C8EA501DA fileRef - 28D2C822EA74468D9FBF05CA + A97D6E772BD74AC6B39DD392 isa PBXBuildFile - 2AC39C6B7E8641359DA97E9D + 303AC2C4EDC24B33A809F7BD includeInIndex 1 @@ -1369,20 +1299,13 @@ lastKnownFileType sourcecode.c.objc name - KWBlockRaiseMatcher.m + NSObject+KiwiMockAdditions.m path - Kiwi/Classes/KWBlockRaiseMatcher.m + Classes/NSObject+KiwiMockAdditions.m sourceTree - SOURCE_ROOT - - 2BC0148E6B2447809713C40D - - fileRef - 3FB98F70960B4B55A1C528C1 - isa - PBXBuildFile + <group> - 2D8DF795D01E4B14B9B183D8 + 3074EEEC4A0248F3AD09E672 includeInIndex 1 @@ -1391,70 +1314,52 @@ lastKnownFileType sourcecode.c.objc name - NSObject+KiwiSpyAdditions.m + KWContextNode.m path - Kiwi/Classes/NSObject+KiwiSpyAdditions.m + Classes/KWContextNode.m sourceTree - SOURCE_ROOT + <group> - 2DAFDBBA45734E62A17E83F0 + 32216C9C3EC44D1097F48600 fileRef - D6BE811CAAA440A3842014B6 + B46E29B6DFB74C85A48C8820 isa PBXBuildFile - 2DC346E40D444B149107F158 + 3289AA81AA354AE88BA98FE9 - fileRef - B84A670C25984F7E84EACE3E + children + + 781EED02747A41BCA689AD4B + 2DB0F5A2BA0241F5BDFE8B02 + 3DE9EE5B8184470996D69209 + 9A9C88FF7AFA49EA9BA63CBB + FA785A83EA944F5B94290065 + isa - PBXBuildFile - - 2DDA3EC479904DC487F80E2D - - fileRef - E9F4040FDC9D40A8B360155D - isa - PBXBuildFile - - 2E3D3786DF1548D0902F607E - - fileRef - E12AE8C526574ECB927D3427 - isa - PBXBuildFile - - 2E428323E50E43A58AB779C8 - - fileRef - 54A6AA3195DF44A9A3DF84FD - isa - PBXBuildFile + PBXGroup + name + iOS + sourceTree + <group> - 2EEE501CF58448619D929D2E + 32BAB6074DFA4FA69DFF7572 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - NSData+SRB64Additions.m + KWBlockRaiseMatcher.h path - SocketRocket/SocketRocket/NSData+SRB64Additions.m + Classes/KWBlockRaiseMatcher.h sourceTree - SOURCE_ROOT - - 2F1B3CB422A347D4B7360CAA - - fileRef - 53741485212040759799F234 - isa - PBXBuildFile + <group> - 2F2F660DFD54463BA9D9A7BF + 32F5F8E4CD0141ED8DDF61DB includeInIndex 1 @@ -1463,66 +1368,42 @@ lastKnownFileType sourcecode.c.h name - NSObject+KiwiMockAdditions.h + NSProxy+KiwiVerifierAdditions.h path - Kiwi/Classes/NSObject+KiwiMockAdditions.h + Classes/NSProxy+KiwiVerifierAdditions.h sourceTree - SOURCE_ROOT + <group> - 2F60E112C3054655B705B2B7 + 32FEA4647D024A709AB9FA41 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWInequalityMatcher.m + KWGenericMatchEvaluator.h path - Kiwi/Classes/KWInequalityMatcher.m + Classes/KWGenericMatchEvaluator.h sourceTree - SOURCE_ROOT - - 2F90A978A5FF4521A6E4A2D6 - - fileRef - 625877F642B546C98332C80B - isa - PBXBuildFile + <group> - 306D7AB6D9F8435781B83714 + 347585E620AD454C8DB08DAB fileRef - C39ECDF8F3524523B71BEF0B + 0B880FCBE6804AE59CEE3489 isa PBXBuildFile - 3080884C6C994C5B8835C3ED - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWSymbolicator.h - path - Kiwi/Classes/KWSymbolicator.h - sourceTree - SOURCE_ROOT - - 30C889CB89914BC68C422D9D + 353636652828443BB26916E5 baseConfigurationReference - 9DBAD86B19EC41D49402D8F5 + 29B873493F4242009C065CC8 buildSettings ALWAYS_SEARCH_USER_PATHS NO - ARCHS - armv6 armv7 COPY_PHASE_STRIP NO DSTROOT @@ -1536,7 +1417,7 @@ GCC_PRECOMPILE_PREFIX_HEADER YES GCC_PREFIX_HEADER - Pods-SocketRocket-prefix.pch + Pods-specs-Kiwi-prefix.pch GCC_PREPROCESSOR_DEFINITIONS DEBUG=1 @@ -1566,88 +1447,102 @@ name Debug - 30E5C49E00D54F69B8E48149 + 3598443A8B444EEEB51C7FCA + + explicitFileType + archive.ar + includeInIndex + 0 + isa + PBXFileReference + path + libPods-SocketRocket.a + sourceTree + BUILT_PRODUCTS_DIR + + 35AF467E194B4472B61D6604 fileRef - ED0883BBB05E49E0B2A79C2A + CE42CCE58B754C7B8408D3E0 isa PBXBuildFile - 30F560384FFF4C8D8F3D33A1 + 36C9B6C4441B424A9B257622 - children - - 57D595545632404B8FCFEEF1 - C16216BA42174DE598332FD8 - 97118765DBCE41E1ABED0461 - CF1E2BCA58BB464BAC4A479A - + fileRef + 2F2420CB68A34CA1941D6309 isa - PBXGroup - name - Pods-specs-Kiwi - sourceTree - <group> + PBXBuildFile - 310BE70F66F64D9DA731F0E3 + 372837EDEE934875BF9CC234 + explicitFileType + archive.ar includeInIndex - 1 + 0 isa PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - KWStringContainsMatcher.m path - Kiwi/Classes/KWStringContainsMatcher.m + libPods.a sourceTree - SOURCE_ROOT + BUILT_PRODUCTS_DIR - 319638578ECD461392837CCB + 378508C74CAA4E29A75BE680 - fileRef - 8E8263928C3B4EBFB09597A6 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-SocketRocket-Private.xcconfig + sourceTree + <group> - 31A5C113F4F44D96A063C878 + 37DA39DD91FB428281116FC1 fileRef - 42C41A69205E4B2287F16A35 + DD3F8D69D1D742269C7B8923 isa PBXBuildFile - 31D78A7450F348EEB07D1044 + 37EDB6AFC26B46A4B13F9441 - fileRef - 5E15AB3896BE4E7287F8A8C0 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + Reachability.h + sourceTree + <group> - 33AB4314EB6649A5884333EE + 38F5582CADE24337B8B83E91 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWMatchVerifier.m + KWEqualMatcher.h path - Kiwi/Classes/KWMatchVerifier.m + Classes/KWEqualMatcher.h sourceTree - SOURCE_ROOT + <group> - 340143260ABF4E6994CB3252 + 39859403D0564EF7A8DAB620 fileRef - 95207EAC5C8E42379B8E46F4 + 911DDD43E4EC457F86209F2F isa PBXBuildFile - 340DF864C1BA4D1EABD936C6 + 3A5ECAA3423B4A2BB766BAF0 includeInIndex 1 @@ -1656,35 +1551,28 @@ lastKnownFileType sourcecode.c.objc name - KWBeNilMatcher.m + KWSpec.m path - Kiwi/Classes/KWBeNilMatcher.m + Classes/KWSpec.m sourceTree - SOURCE_ROOT - - 341A31ECC2E84639856C9C23 - - fileRef - A1005BAE4B444499834A84BC - isa - PBXBuildFile + <group> - 348FFF89C3804BFF98B8640F + 3AAE4842914B427E9703F3EE includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWBeZeroMatcher.m + NSData+SRB64Additions.h path - Kiwi/Classes/KWBeZeroMatcher.m + SocketRocket/NSData+SRB64Additions.h sourceTree - SOURCE_ROOT + <group> - 35207C7EBAC74DBCA4BC4B3B + 3B87D4FD143E4393A97CE9EE includeInIndex 1 @@ -1693,118 +1581,148 @@ lastKnownFileType sourcecode.c.h name - KWExampleNodeVisitor.h + KWBeSubclassOfClassMatcher.h path - Kiwi/Classes/KWExampleNodeVisitor.h + Classes/KWBeSubclassOfClassMatcher.h sourceTree - SOURCE_ROOT + <group> - 356153393B744B82BB4136C0 + 3BE1A5095A4B4196B99F0501 fileRef - 76708E4DABB948E7AD41EC5F + C26FA000896A4E34B71C4D3B isa PBXBuildFile - 3627A09A59E04E4BBE9D3DA9 + 3BF9D0401C634BA7AD1DEBC0 fileRef - 9201585E06B3403C9088447C + 6939898846124193BE662AED isa PBXBuildFile - 3662B2F395594173B059E575 + 3CF657903B2440FDB7F63B86 - children + buildActionMask + 2147483647 + files - 24A18E88F0354422BD3DCCE4 - 1B204C7016914DAB98C1018A - F6233DE6A65040D38900D8BF - E9C914CC13514473A8D69DE4 + 61A7C82800E7405999BDFA7B + F8DCD79ACB594FB68905CC50 isa - PBXGroup - name - Pods-Reachability - sourceTree - <group> + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 - 370967D45A33478F8707D998 + 3DE9EE5B8184470996D69209 - includeInIndex - 1 isa PBXFileReference + lastKnownFileType + wrapper.framework name - base64.c + Security.framework path - SocketRocket/SocketRocket/base64.c + Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/Security.framework sourceTree - SOURCE_ROOT + DEVELOPER_DIR - 372F2CC1B1924FBFAA93CAA4 + 3E16E0E7472D40CBA3C21339 - includeInIndex - 1 + baseConfigurationReference + DCFDE749B62C4EB7B4EFB859 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + NO + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-Reachability-prefix.pch + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 4.0 + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + isa - PBXFileReference - lastKnownFileType - sourcecode.c.h + XCBuildConfiguration name - KWWorkarounds.h - path - Kiwi/Classes/KWWorkarounds.h - sourceTree - SOURCE_ROOT + Debug - 374CD74F777F4A0A94E05CB1 + 3F1F4731EFF3438BB47C828C includeInIndex 1 isa PBXFileReference lastKnownFileType - text + sourcecode.c.h + name + KWExpectationType.h path - Pods-acknowledgements.markdown + Classes/KWExpectationType.h sourceTree - SOURCE_ROOT + <group> - 376D5CBD49574D7C8B102AE0 + 3F2B8C9CCC7346028A7673E8 fileRef - 8DBB0F91D01B43AD8C733B2B + D2540CBA91984C1BBC3BBDD0 isa PBXBuildFile - 388E29A4E8A248779E285A6F + 3FBDAC9ACC3C40298CFDC457 - includeInIndex - 1 + buildConfigurations + + 3E16E0E7472D40CBA3C21339 + 270684A05C334FBBBE8B027E + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSInvocation+OCMAdditions.m - path - Kiwi/Classes/NSInvocation+OCMAdditions.m - sourceTree - SOURCE_ROOT + XCConfigurationList - 39447B95C5DB426295DE2531 + 40270A01DE174E3C84ADFFF4 fileRef - 88A88235D0A649B7BFC46CCE + B56C9EC094D74CA3BB71E532 isa PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - 3AFF981E900D47C1B5E326A5 + 40E2BE0176B3470EA948A4B8 includeInIndex 1 @@ -1813,33 +1731,13 @@ lastKnownFileType sourcecode.c.h name - KWValue.h + KWExample.h path - Kiwi/Classes/KWValue.h + Classes/KWExample.h sourceTree - SOURCE_ROOT - - 3B56C057F37A45C4BE40A902 - - fileRef - 955B29E488F444B8BC4126EE - isa - PBXBuildFile + <group> - 3B78E950BD1846148855AF6A - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods-specs-OHHTTPStubs-Private.xcconfig - sourceTree - SOURCE_ROOT - - 3B9AECF466C745E7BB285457 + 413EF2635C834ED381C27BAA includeInIndex 1 @@ -1848,13 +1746,27 @@ lastKnownFileType sourcecode.c.objc name - KWProbePoller.m + KWStringUtilities.m path - Kiwi/Classes/KWProbePoller.m + Classes/KWStringUtilities.m sourceTree - SOURCE_ROOT + <group> + + 4143EB2471F44A1DA6686343 + + fileRef + 7B891F3D4BD24A3AA32A0E14 + isa + PBXBuildFile + + 41A83B1724544619BA12767E + + fileRef + A4AF0D9040AC4B84B5F19209 + isa + PBXBuildFile - 3BAE8CEA85634EB6B263A2B8 + 42EF8B06D2374691AC37C8CA includeInIndex 1 @@ -1862,177 +1774,107 @@ PBXFileReference lastKnownFileType sourcecode.c.objc - name - KWUserDefinedMatcher.m path - Kiwi/Classes/KWUserDefinedMatcher.m + Pods-dummy.m sourceTree - SOURCE_ROOT - - 3C228FEF3ACE4BB192AB3F46 - - fileRef - 1606192A39B44155BE8B14AA - isa - PBXBuildFile + <group> - 3DEC7F57668B418B9377DDCF + 435D621026BA4A4BA2CDA519 fileRef - 5B62C400020A49C0A3A9C3BC + CEE65C51659C4068A1217618 isa PBXBuildFile - 3E17716F92994A4791682356 - - buildActionMask - 2147483647 - files - - 9ED5A2C1C0B0445E9B4C326D - 5E062E8C0BA142A0982B5962 - 821DAA9BE35445D7AC272F14 - 7109FF14CE324EE989283665 - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 3FB98F70960B4B55A1C528C1 + 435DA66FF7A747009B18683B includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - NSObject+KiwiVerifierAdditions.m + KWMatcher.h path - Kiwi/Classes/NSObject+KiwiVerifierAdditions.m + Classes/KWMatcher.h sourceTree - SOURCE_ROOT + <group> - 3FBDDA7B081C4662BFB5DD01 + 43A8055AEDED4330B76BE596 fileRef - 56580F1050924428A2F84270 + 7F06775D39F24B249E7E9122 isa PBXBuildFile - 40B80186D0084BCF9C84BA60 + 440815E09DF54DF3AA139D21 fileRef - 4EC3CD1D81334E07A8A80982 + 79A57B9FECCF46C583B20ECD isa PBXBuildFile - 40D7030FE86145B38E4CF7EB + 458F589F281F49C6BF344536 fileRef - D669F81889054783B93FF400 + D0AECFFEA1B344FEBD6CD493 isa PBXBuildFile - 41F47E5C4F8548AD9A4205A1 + 46E94487428C47AEA506CD79 fileRef - 28376C62F15841FC890EF7F5 + 6D60DBF99A7744EB8DD6EC94 isa PBXBuildFile - 41F87030F0624DC0B6A732E0 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWHaveMatcher.h - path - Kiwi/Classes/KWHaveMatcher.h - sourceTree - SOURCE_ROOT - - 41FE594754274C6089C37232 + 4861FEB6AAA0496BAC78A97E - includeInIndex - 1 isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - KWBeBetweenMatcher.m - path - Kiwi/Classes/KWBeBetweenMatcher.m - sourceTree - SOURCE_ROOT + PBXTargetDependency + target + FDA401033508495A940D4635 + targetProxy + 2799AE84635F4E36A69CBC6B - 4289EC38FDB34B3FAD4713D2 + 489CFB7E8CA340D49C7F1374 fileRef - 41F87030F0624DC0B6A732E0 + 2233F66196FD4088AB894F50 isa PBXBuildFile - 428A8EB78BC9465BB54D8B36 - - children - - 85C0BC2D26F7457991F02565 - 7813868A8AC4428FB5763DB3 - 15CD267206AF4CF192761CCD - CCD666EBDE1D47BDB32A14E9 - - isa - PBXGroup - name - Pods - sourceTree - <group> - - 42C41A69205E4B2287F16A35 + 48E0BDC254584214A34AAD1B - includeInIndex - 1 + fileRef + 846E715C2E6A471D8F5AED4B isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - KWBeWithinMatcher.m - path - Kiwi/Classes/KWBeWithinMatcher.m - sourceTree - SOURCE_ROOT + PBXBuildFile - 42D8482887C2468FB2456054 + 49362D1BDF434C2681D9EA73 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - NSObject+KiwiStubAdditions.m + KWCountType.h path - Kiwi/Classes/NSObject+KiwiStubAdditions.m + Classes/KWCountType.h sourceTree - SOURCE_ROOT + <group> - 4373A6E2D1974C71856CD952 + 4A39920C40A440F1A1104A6D fileRef - 072ADA10D5A04A799A4785E8 + C81D7E013F2944A9BD99B08A isa PBXBuildFile - 437DAE2ADC694F249B4A818D + 4AA7720CA1EC4EB4B2EE6F86 includeInIndex 1 @@ -2041,49 +1883,58 @@ lastKnownFileType sourcecode.c.h name - KWGenericMatchingAdditions.h + KWNull.h path - Kiwi/Classes/KWGenericMatchingAdditions.h + Classes/KWNull.h sourceTree - SOURCE_ROOT + <group> - 44BCC544D3B94617AC91D08E + 4AEAC0FD0D8745ADAEEE6B20 fileRef - 0E80DAE469F348FCB7949B7D + EA5563D0777946FBAEF0B6EB isa PBXBuildFile - 45707E12EE0641979AF86AEF + 4B8FD086C5AF4782A1F39ABF + + children + + 372837EDEE934875BF9CC234 + 6D006AA68F5343FC87E29953 + 3598443A8B444EEEB51C7FCA + E14B41E1242149A78CEEF46B + C146634260D14659A0F9A2EC + C670E39CDCCA4FE2A3B4D495 + + isa + PBXGroup + name + Products + sourceTree + <group> + + 4BA1F22D0D9C4D3F80002ADE fileRef - 7A1B44FC71AB4D22A19B6261 + 0B780B1BFAED4F2FAFDEB736 isa PBXBuildFile - 458BA5E50EDE46CB88EFEF52 + 4C7BB6D8360E4B1DA6A8038F includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h - name - SRWebSocket.h + text path - SocketRocket/SocketRocket/SRWebSocket.h + Pods-acknowledgements.markdown sourceTree - SOURCE_ROOT - - 475FD2E941CB4679AC3B85F3 - - fileRef - 939578CAFC8942C2929F3F8C - isa - PBXBuildFile + <group> - 47A030E9480940B7896ACBF8 + 4CD04D1D584F451FB2F326EF includeInIndex 1 @@ -2092,36 +1943,13 @@ lastKnownFileType sourcecode.c.h name - KWInvocationCapturer.h + OHHTTPStubs.h path - Kiwi/Classes/KWInvocationCapturer.h + OHHTTPStubs/OHHTTPStubs.h sourceTree - SOURCE_ROOT - - 487796028E004CAFA462F59D - - isa - PBXTargetDependency - target - EF4179F378294E3EB69819FE - targetProxy - 11F5DCEBEBB740B6A69A0315 - - 487988ED33ED45F481A15E07 - - fileRef - 27FA6CEB9CD243698A4145AC - isa - PBXBuildFile - - 48AE566003704B51BAEBF699 - - fileRef - A1530E7E8B9040B1B0EFE966 - isa - PBXBuildFile + <group> - 491F3A30336742C09363FFFB + 4D1208DB7BC1462299460C06 includeInIndex 1 @@ -2130,42 +1958,35 @@ lastKnownFileType sourcecode.c.objc name - KWPendingNode.m + KWIntercept.m path - Kiwi/Classes/KWPendingNode.m + Classes/KWIntercept.m sourceTree - SOURCE_ROOT - - 4C63A4539E65495786B6A65E - - fileRef - E5918B17FBEF460AADB6F368 - isa - PBXBuildFile + <group> - 4C70122DFE714497B15FA06F + 4F52B77D3E4649088886C202 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWBlock.h + NSObject+KiwiSpyAdditions.m path - Kiwi/Classes/KWBlock.h + Classes/NSObject+KiwiSpyAdditions.m sourceTree - SOURCE_ROOT + <group> - 4C71C2970B4D4955979294B7 + 500CB610C06C4A1EA1CCB1E4 fileRef - 8BFB505CDDE24299A1CDBB9F + A1DEB3746CC548F28D45865F isa PBXBuildFile - 4EC3CD1D81334E07A8A80982 + 508294BD6D4A48588D9D147E includeInIndex 1 @@ -2174,96 +1995,116 @@ lastKnownFileType sourcecode.c.objc name - KWMessageTracker.m + KWMock.m path - Kiwi/Classes/KWMessageTracker.m + Classes/KWMock.m sourceTree - SOURCE_ROOT - - 5096A63C0CBD49DA96E42B59 - - fileRef - CE244AEA34B74D4DA111CDDA - isa - PBXBuildFile + <group> - 50B703F9D41E4C719C7D943A + 50B71BCF9B254AE3A3AEE204 - baseConfigurationReference - C16216BA42174DE598332FD8 buildSettings ALWAYS_SEARCH_USER_PATHS NO - ARCHS - armv6 armv7 + CLANG_CXX_LANGUAGE_STANDARD + gnu++0x + CLANG_CXX_LIBRARY + libc++ + CLANG_ENABLE_MODULES + YES + CLANG_ENABLE_OBJC_ARC + NO + CLANG_WARN_BOOL_CONVERSION + YES + CLANG_WARN_CONSTANT_CONVERSION + YES + CLANG_WARN_DIRECT_OBJC_ISA_USAGE + YES_ERROR + CLANG_WARN_EMPTY_BODY + YES + CLANG_WARN_ENUM_CONVERSION + YES + CLANG_WARN_INT_CONVERSION + YES + CLANG_WARN_OBJC_ROOT_CLASS + YES_ERROR COPY_PHASE_STRIP YES - DSTROOT - /tmp/xcodeproj.dst GCC_C_LANGUAGE_STANDARD gnu99 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Pods-specs-Kiwi-prefix.pch - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 4.0 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PREPROCESSOR_DEFINITIONS - -DNS_BLOCK_ASSERTIONS=1 + DEBUG=1 $(inherited) - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_WARN_64_TO_32_BIT_CONVERSION YES - VALIDATE_PRODUCT + GCC_WARN_ABOUT_RETURN_TYPE + YES_ERROR + GCC_WARN_UNDECLARED_SELECTOR + YES + GCC_WARN_UNINITIALIZED_AUTOS + YES + GCC_WARN_UNUSED_FUNCTION + YES + GCC_WARN_UNUSED_VARIABLE YES + IPHONEOS_DEPLOYMENT_TARGET + 4.0 + ONLY_ACTIVE_ARCH + YES + STRIP_INSTALLED_PRODUCT + NO isa XCBuildConfiguration name - Release + Debug + + 50C2B3AA1FEA44DB94FA2CB6 + + fileRef + 65EDB901E0CA4106A5D94BCC + isa + PBXBuildFile + + 5108AFB576B048A99D3E3E52 + + fileRef + 0EBA34AEF95C4A46A6CE35CA + isa + PBXBuildFile - 50DC1D914ADE432CAF534667 + 51912FA9780447728D5DB1C9 fileRef - 59B54FF0DA71484C8F6ACB63 + 2CE302F0CDD74C84BBC8BD22 isa PBXBuildFile - 51F0BE639B794FCE8FD932D8 + 51C6E8DD8F914E249A02D86D includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWIntercept.m + KWFailure.h path - Kiwi/Classes/KWIntercept.m + Classes/KWFailure.h sourceTree - SOURCE_ROOT + <group> - 5299D1CAD5EA4887A25CBABD + 521981D242014582BC666854 includeInIndex 1 @@ -2272,42 +2113,50 @@ lastKnownFileType sourcecode.c.objc name - KWMatcher.m + KWBeNonNilMatcher.m path - Kiwi/Classes/KWMatcher.m + Classes/KWBeNonNilMatcher.m sourceTree - SOURCE_ROOT + <group> - 52FF9AB870254C3A93AFDFDE + 5267CBA8D21040FEBE154A6B includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWDeviceInfo.m + KWVerifying.h path - Kiwi/Classes/KWDeviceInfo.m + Classes/KWVerifying.h sourceTree - SOURCE_ROOT + <group> - 532C2C753A844FEDA2F4EB4B + 541F3D7FFADD45188E85D2B5 - fileRef - 33AB4314EB6649A5884333EE + buildActionMask + 2147483647 + files + + ACDD2D51B5934070ABD622EB + A7F958149CD444BABE1E16D9 + 130928DE952446CABA9FA5EB + isa - PBXBuildFile + PBXHeadersBuildPhase + runOnlyForDeploymentPostprocessing + 0 - 5340B9BB33D3456F918D2503 + 5462F79002B74ED29B81E79E fileRef - 7E25B55285944F2E851E5827 + 1DBCF24C3397436A93F8209F isa PBXBuildFile - 53741485212040759799F234 + 5468E232AFE944D09BC96C40 includeInIndex 1 @@ -2316,129 +2165,102 @@ lastKnownFileType sourcecode.c.h name - KWPendingNode.h + KWItNode.h path - Kiwi/Classes/KWPendingNode.h + Classes/KWItNode.h sourceTree - SOURCE_ROOT + <group> - 54A6AA3195DF44A9A3DF84FD + 54B2AACB50B045C5B93E084A - includeInIndex - 1 + fileRef + 42EF8B06D2374691AC37C8CA isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - KWCallSite.m - path - Kiwi/Classes/KWCallSite.m - sourceTree - SOURCE_ROOT + PBXBuildFile - 56580F1050924428A2F84270 + 54F4B67A8A5A4C5F87E1D626 - includeInIndex - 1 + fileRef + BD576C9F5F494723BB82D1C8 isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - Reachability.h - path - Reachability/Reachability.h - sourceTree - SOURCE_ROOT + PBXBuildFile - 575696B34CB24CE999EC340B + 55853AA20C3F4817A6076A6F - includeInIndex - 1 + fileRef + 7C92B8C48626490FB1D72A56 isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWIntercept.h - path - Kiwi/Classes/KWIntercept.h - sourceTree - SOURCE_ROOT + PBXBuildFile + + 560ABCF5EA28411BBDD67345 + + fileRef + 7F4FEB6A55C74466BE5510EC + isa + PBXBuildFile + + 56671128374E4360A275B2F1 + + attributes + + LastUpgradeCheck + 0500 + + buildConfigurationList + E2975C47AF16443685905F4B + compatibilityVersion + Xcode 3.2 + developmentRegion + English + hasScannedForEncodings + 0 + isa + PBXProject + knownRegions + + en + + mainGroup + F9FF974B80E14996B17783AC + productRefGroup + 4B8FD086C5AF4782A1F39ABF + projectDirPath + + projectReferences + + projectRoot + + targets + + C61690B2DA9C420E93D95AB5 + EC1DFB002A1B445EB91488C8 + 2B0A0813AF0741DBB91ACC57 + C7BD8B46A79D490396651011 + FDA401033508495A940D4635 + F3A20961FEC8436DAF996DD4 + - 57D595545632404B8FCFEEF1 + 568C9A7C6150465CA9738957 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + text.script.sh path - Pods-specs-Kiwi.xcconfig + Pods-specs-resources.sh sourceTree - SOURCE_ROOT - - 57F80BE3EF744F31803D3EC3 - - baseConfigurationReference - 65971647E977429D9AA5A4AE - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - ARCHS - armv6 armv7 - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 4.0 - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Debug + <group> - 580EA428BAB346B5A621EDFE + 57B65E09772E4511A472B5A0 fileRef - 5C9D83F9D8F140EA8B5C47DC + 32BAB6074DFA4FA69DFF7572 isa PBXBuildFile - 585EB411E8D14F08845B7C34 + 584440BE7F2F49209EDBCE42 includeInIndex 1 @@ -2447,42 +2269,49 @@ lastKnownFileType sourcecode.c.h name - KWGenericMatchEvaluator.h + KWSymbolicator.h path - Kiwi/Classes/KWGenericMatchEvaluator.h + Classes/KWSymbolicator.h sourceTree - SOURCE_ROOT + <group> - 59587E7B09B54B78BF6B686B + 586D743CA46F49A78891596F fileRef - 1807592351294E42A94014DC + 24756F2002E14C31A215BC84 isa PBXBuildFile - 59B54FF0DA71484C8F6ACB63 + 5885C1F6D9574ADBAB1DDF96 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWMessagePattern.m + KWMock.h path - Kiwi/Classes/KWMessagePattern.m + Classes/KWMock.h sourceTree - SOURCE_ROOT + <group> + + 5893B92869AB49698179161F + + fileRef + 5468E232AFE944D09BC96C40 + isa + PBXBuildFile - 5A6CD3A6B6614990947BAD10 + 589998785A2D4651981C7CF0 fileRef - 348FFF89C3804BFF98B8640F + CEDA435F85FB4EC2AC7E3A9D isa PBXBuildFile - 5AD0D48F3789483095D5B16B + 58B96E09E6C9433FA96FFB68 includeInIndex 1 @@ -2491,13 +2320,13 @@ lastKnownFileType sourcecode.c.h name - KWExpectationType.h + KWMatchVerifier.h path - Kiwi/Classes/KWExpectationType.h + Classes/KWMatchVerifier.h sourceTree - SOURCE_ROOT + <group> - 5B62C400020A49C0A3A9C3BC + 5A5905FA9EE947969254BA7E includeInIndex 1 @@ -2506,13 +2335,13 @@ lastKnownFileType sourcecode.c.h name - NSMethodSignature+KiwiAdditions.h + KWMessageTracker.h path - Kiwi/Classes/NSMethodSignature+KiwiAdditions.h + Classes/KWMessageTracker.h sourceTree - SOURCE_ROOT + <group> - 5B8BFCFE37B34B1A884613DF + 5C556B2B2E4B4C99BEEF778A includeInIndex 1 @@ -2521,20 +2350,13 @@ lastKnownFileType sourcecode.c.objc name - KWExample.m + SRWebSocket.m path - Kiwi/Classes/KWExample.m + SocketRocket/SRWebSocket.m sourceTree - SOURCE_ROOT - - 5BC48A8E9BDF43209E6FD932 - - fileRef - CF1E2BCA58BB464BAC4A479A - isa - PBXBuildFile + <group> - 5C4FD44BB8A74AED9CBD3267 + 5D5449014E644CFB98449F5F includeInIndex 1 @@ -2543,185 +2365,157 @@ lastKnownFileType sourcecode.c.objc name - SRWebSocket.m + KWBeNilMatcher.m path - SocketRocket/SocketRocket/SRWebSocket.m + Classes/KWBeNilMatcher.m sourceTree - SOURCE_ROOT + <group> - 5C9D83F9D8F140EA8B5C47DC + 5DD5F28EF02942E3B404B619 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWStringContainsMatcher.h + OHHTTPStubs.m path - Kiwi/Classes/KWStringContainsMatcher.h + OHHTTPStubs/OHHTTPStubs.m sourceTree - SOURCE_ROOT + <group> - 5CC394709A934094B0826155 + 5DFEFC48FF144766B5D6B189 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWBeMemberOfClassMatcher.m + KWBeNonNilMatcher.h path - Kiwi/Classes/KWBeMemberOfClassMatcher.m + Classes/KWBeNonNilMatcher.h sourceTree - SOURCE_ROOT + <group> - 5E062E8C0BA142A0982B5962 + 5E08C48F2CB0424A8B0C6483 fileRef - 2EEE501CF58448619D929D2E + 83A7D77F40F04C81AD0A1890 isa PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - 5E15AB3896BE4E7287F8A8C0 + 5E36D1AD183C4E52B4BE4A4F - explicitFileType - archive.ar includeInIndex - 0 + 1 isa PBXFileReference + lastKnownFileType + sourcecode.c.h + name + NSMethodSignature+KiwiAdditions.h path - libPods-specs-Kiwi.a + Classes/NSMethodSignature+KiwiAdditions.h sourceTree - BUILT_PRODUCTS_DIR + <group> - 5E36E1F290EB4D94A815BE1C + 5FB13B1E6CCE4DA587C3C45F fileRef - 689219963D094039A58E4F7D + 9D11BEEFD4D049AFA6B3BA0D isa PBXBuildFile - 5E6FAEC9EA9442EAB40239E2 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWRegularExpressionPatternMatcher.h - path - Kiwi/Classes/KWRegularExpressionPatternMatcher.h - sourceTree - SOURCE_ROOT - - 5EF065DD59E74924B9AB2E12 + 604D0E44285B49929F8B5886 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - Kiwi.h + KWInvocationCapturer.m path - Kiwi/Classes/Kiwi.h + Classes/KWInvocationCapturer.m sourceTree - SOURCE_ROOT + <group> - 5F04555A9DD54A4BA34EDCA6 + 60DEAD6ECF8E490A8FA7EB8B - includeInIndex - 1 + fileRef + F01CE9876D9E4C0CA3DACA58 isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWMessageTracker.h - path - Kiwi/Classes/KWMessageTracker.h - sourceTree - SOURCE_ROOT + PBXBuildFile - 5F49EA6A860E46F0B96B2386 + 61A7C82800E7405999BDFA7B fileRef - BD068C43ED654803B8C71995 + E0F72EF850DD4C8F9533D52E isa PBXBuildFile - 5FE55B0238E24108BE1069DD + 624B26EBD7F3450EB86E5C65 fileRef - 8135B9B2F08041FA895A4ED7 + 2DB0F5A2BA0241F5BDFE8B02 isa PBXBuildFile - 60283588392E4FB892430642 + 6257FBE77DCC4452980D88BA fileRef - E9C914CC13514473A8D69DE4 + C146634260D14659A0F9A2EC isa PBXBuildFile - 61DE25026F864EF0B63B3971 + 62868CB2DFA94A088C42C018 fileRef - DEE08E213E904196BEBF63D7 + 1B7738AF037D4A02B7D6F74D isa PBXBuildFile - 625877F642B546C98332C80B + 62870C1C913F4CFE9EABF48D includeInIndex 1 isa PBXFileReference lastKnownFileType - wrapper.framework + sourcecode.c.objc name - Foundation.framework + NSMethodSignature+KiwiAdditions.m path - Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/System/Library/Frameworks/Foundation.framework + Classes/NSMethodSignature+KiwiAdditions.m sourceTree - DEVELOPER_DIR + <group> + + 632B1E0FDA6641FE802BFEC5 + + fileRef + 1AB5DA2BA8F84204A5C26473 + isa + PBXBuildFile - 627008D0168B424291561EEC + 63D8438322F243D589DFFF74 containerPortal - 0777BA3BB9584122ACE4EE63 + 56671128374E4360A275B2F1 isa PBXContainerItemProxy proxyType 1 remoteGlobalIDString - F0531BAE563D403FBDFF4C89 + 2B0A0813AF0741DBB91ACC57 remoteInfo - Pods-specs-Kiwi - - 63A342EB93BE4A2C91FCE3BB - - isa - PBXTargetDependency - target - 99E902D1C70F44B3920567BD - targetProxy - F2A66714D0CA4948A6B8C157 + Pods-SocketRocket - 64DB77C0D1CD4367A08FCDDF + 64A8529690894744B540B826 includeInIndex 1 @@ -2730,47 +2524,28 @@ lastKnownFileType sourcecode.c.objc name - KWTestCase.m + KWBeEmptyMatcher.m path - Kiwi/Classes/KWTestCase.m + Classes/KWBeEmptyMatcher.m sourceTree - SOURCE_ROOT + <group> - 65485A64A4D24C6D8039328A - - fileRef - 9676AEE801844D989D68B708 - isa - PBXBuildFile - - 657A9DDD284B4AE6AE5D289B - - fileRef - C37C48B8EA1E4F679BD0D967 - isa - PBXBuildFile - - 6596C90DF3734B2B9868C438 - - fileRef - ABA4519A10C240A992DFF2DE - isa - PBXBuildFile - - 65971647E977429D9AA5A4AE + 65EDB901E0CA4106A5D94BCC includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.objc + name + KWConformToProtocolMatcher.m path - Pods.xcconfig + Classes/KWConformToProtocolMatcher.m sourceTree - SOURCE_ROOT + <group> - 65AF4B9115714C2AA5CF7DEF + 67AA976E7118427D98F0C8F1 includeInIndex 1 @@ -2779,34 +2554,72 @@ lastKnownFileType sourcecode.c.objc name - KWRegisterMatchersNode.m + KWBeMemberOfClassMatcher.m path - Kiwi/Classes/KWRegisterMatchersNode.m + Classes/KWBeMemberOfClassMatcher.m sourceTree - SOURCE_ROOT + <group> - 65C0E3C67CEA4691863B66FA + 67FC089B3C79470382B8F616 - fileRef - 52FF9AB870254C3A93AFDFDE + baseConfigurationReference + 29B873493F4242009C065CC8 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + YES + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-specs-Kiwi-prefix.pch + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 4.0 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + VALIDATE_PRODUCT + YES + isa - PBXBuildFile + XCBuildConfiguration + name + Release - 66D5F70B92834CDF8FEC9773 + 68DB63AF6A264129A7D8F79E - buildConfigurations - - C3A414A611E34C02B419C3AF - EF36D6613CF148BCB339F4FD - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release + fileRef + 781EED02747A41BCA689AD4B isa - XCConfigurationList + PBXBuildFile - 6760A93D5B2548379F37B686 + 6939898846124193BE662AED includeInIndex 1 @@ -2814,62 +2627,56 @@ PBXFileReference lastKnownFileType sourcecode.c.h + name + KWBlock.h path - Pods-SocketRocket-prefix.pch + Classes/KWBlock.h sourceTree - SOURCE_ROOT + <group> - 6783E85750AE4C4F8B415652 + 6BBA5AB33C4B4E94B82A7A69 fileRef - BB472D7A2DAF4FADAF4FF338 + C4C50EB7E44B43129EB97EB8 isa PBXBuildFile - 689219963D094039A58E4F7D + 6BCCA55C01E6486D9E59A6F2 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWFutureObject.m + KWMessageSpying.h path - Kiwi/Classes/KWFutureObject.m + Classes/KWMessageSpying.h sourceTree - SOURCE_ROOT - - 689D623D0E8E4729974FCEDF - - fileRef - D7A606855D71448889BA62E8 - isa - PBXBuildFile - - 6984341C394F41288905E2CC - - fileRef - F759DFB278F64E7282870585 - isa - PBXBuildFile + <group> - 69ECFB438B2C4BDFBB603B4F + 6D006AA68F5343FC87E29953 - fileRef - F373E1A09E4D4380AA2F5299 + explicitFileType + archive.ar + includeInIndex + 0 isa - PBXBuildFile + PBXFileReference + path + libPods-Reachability.a + sourceTree + BUILT_PRODUCTS_DIR - 6A4109E7DDA34915A329FE1C + 6D57168DA74A48159127E19B fileRef - C587E4E28E77450E8D32A39A + 02917EAEA3E74E9FB9A54260 isa PBXBuildFile - 6CD7AD6A46CD42A3971E8F97 + 6D5F7E43DBC84A86B2E83494 includeInIndex 1 @@ -2878,13 +2685,13 @@ lastKnownFileType sourcecode.c.h name - KWExampleGroupBuilder.h + KiwiBlockMacros.h path - Kiwi/Classes/KWExampleGroupBuilder.h + Classes/KiwiBlockMacros.h sourceTree - SOURCE_ROOT + <group> - 6D6C57593C5D437180DC9761 + 6D60DBF99A7744EB8DD6EC94 includeInIndex 1 @@ -2893,13 +2700,13 @@ lastKnownFileType sourcecode.c.h name - KWBeKindOfClassMatcher.h + KWUserDefinedMatcher.h path - Kiwi/Classes/KWBeKindOfClassMatcher.h + Classes/KWUserDefinedMatcher.h sourceTree - SOURCE_ROOT + <group> - 6DFD3697CDB14D9D9E3F54F2 + 6D78448E158F49E48C4EDB97 includeInIndex 1 @@ -2908,163 +2715,162 @@ lastKnownFileType sourcecode.c.h name - KWAsyncVerifier.h + KWBeEmptyMatcher.h path - Kiwi/Classes/KWAsyncVerifier.h + Classes/KWBeEmptyMatcher.h sourceTree - SOURCE_ROOT + <group> - 6EEEAE37E68C4BE48D4D1832 + 6EBBEC059099403F9F47A889 fileRef - 3B9AECF466C745E7BB285457 + 79A0E4CBBBAB48E29B02BA2F isa PBXBuildFile - 6F110B5114A54AA18DBA1F34 + 6F9533FC66B94324B2B47CD6 - includeInIndex - 1 + children + + E3C5E4D8B47043ABB6B3476D + D7E621A17464496D826E0131 + 010291D50DF6440BBB36F5D3 + 18083E9F12D14E8CA1A76438 + isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc + PBXGroup name - KWHaveMatcher.m - path - Kiwi/Classes/KWHaveMatcher.m + Pods sourceTree - SOURCE_ROOT + <group> - 6FFE29E80EBF4AEA90B19FD7 + 6FE92DE38FA4459D8D7E0844 - includeInIndex - 1 + children + + 21C20674E43444FBBEC7B66A + 378508C74CAA4E29A75BE680 + 7CB7012D77874A34B1B1C375 + C613D1EE68A94DC3BCECB811 + isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods-specs.xcconfig + PBXGroup + name + Support Files sourceTree SOURCE_ROOT - 7109FF14CE324EE989283665 + 714BC488B8D6472785754B19 fileRef - EFFB43BEB94748098A56A500 + 435DA66FF7A747009B18683B isa PBXBuildFile - 716AF9D7BFB3401C9AB5F9B6 + 718EAF3FF84740F6864F63F2 fileRef - 7DB4003828D5461B9567DED4 + 4CD04D1D584F451FB2F326EF isa PBXBuildFile - 721DBBD9444D490682A6BABB + 71A2597AF1CB48DFA8DD9D20 - children - - 65971647E977429D9AA5A4AE - AEDCB01F8A1046B4BDAA0A1A - 229A240168A445D580878E21 - 0A283EFDEC2647D3BD04048E - 374CD74F777F4A0A94E05CB1 - B1035189597D4AB486B15922 - + fileRef + 770C71317885455D98F07999 isa - PBXGroup - name - Pods - sourceTree - <group> + PBXBuildFile - 727250DF6E2A4596A3E018FD + 71CE4A8FC22F436EAD51BDA6 fileRef - FEEF61ADDFA143C1A495C880 + 9539F6C43A3441FF9D78F53D isa PBXBuildFile - 72A00082A6D7484B918AFF7E + 721D7E86FD62421A980B009D - buildConfigurationList - EF41A75BFE7243CAA9FF1DD3 - buildPhases - - 25C53005B0614893BA1445E9 - 7F8290E861A9450187505904 - - buildRules - - dependencies - - 157DAB4FD18342D4A25B8319 - 487796028E004CAFA462F59D - + includeInIndex + 1 isa - PBXNativeTarget + PBXFileReference + lastKnownFileType + sourcecode.c.objc name - Pods-specs - productName - Pods-specs - productReference - 19A74633E98849F8B7BEA7FC - productType - com.apple.product-type.library.static + KWExampleGroupBuilder.m + path + Classes/KWExampleGroupBuilder.m + sourceTree + <group> + + 72493B432DC84B54911CF99C + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + Pods-specs-OHHTTPStubs-dummy.m + sourceTree + <group> - 72A6CB98E8354E50AB0F1D43 + 725A3953033D4B28A485879E fileRef - 5EF065DD59E74924B9AB2E12 + 508294BD6D4A48588D9D147E isa PBXBuildFile - 7328A4F9C6374686A27D248B + 728EE998470F4D588070BC7B - buildConfigurationList - 7E0F5E4306F3443CAA5F404E - buildPhases - - 7B6356F48E504E47B77073BC - F074520187D1417789088DDA - - buildRules - - dependencies + fileRef + E012578A4B604202A3867FC7 + isa + PBXBuildFile + + 72E98B5BE2B448A39BB6B32D + + children - 8A50B544D20246FE88E98E44 - 63A342EB93BE4A2C91FCE3BB + 0692DA3FAE464AC9B4070C78 + 4C7BB6D8360E4B1DA6A8038F + 898F914404B7404F985F0B74 + 42EF8B06D2374691AC37C8CA + 90B711A8829043C38B84C839 + D5192A48425B4D3CB9F20968 isa - PBXNativeTarget + PBXGroup name Pods - productName - Pods - productReference - BC83F1CD8DE64E8EA6B250B6 - productType - com.apple.product-type.library.static + sourceTree + <group> - 756B1D81A44742FFB148E500 + 72F4161EAD3744C88B9D32E4 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KiwiConfiguration.h + KWBlock.m path - Kiwi/Classes/KiwiConfiguration.h + Classes/KWBlock.m sourceTree - SOURCE_ROOT + <group> + + 734A84A485EA42CB885A1127 + + fileRef + FEB66E56A4A64C25BBAFE4D2 + isa + PBXBuildFile - 75D28F5682DA477796457451 + 735647AF52024604987B0174 includeInIndex 1 @@ -3073,27 +2879,27 @@ lastKnownFileType sourcecode.c.h name - KWDeviceInfo.h + KWCallSite.h path - Kiwi/Classes/KWDeviceInfo.h + Classes/KWCallSite.h sourceTree - SOURCE_ROOT + <group> - 75EAC65B1E264D9183BDD767 + 74FA28FCFB34463F8E8D1DEB fileRef - 1330BF11130A4651A84CC162 + 49362D1BDF434C2681D9EA73 isa PBXBuildFile - 75EE950458C94FC7A5E4DD47 + 753A70638C074EA5BF0B2D15 fileRef - 972144E67837407D8240156C + 735647AF52024604987B0174 isa PBXBuildFile - 76708E4DABB948E7AD41EC5F + 75DC40E9B66243CBA6E87459 includeInIndex 1 @@ -3102,45 +2908,34 @@ lastKnownFileType sourcecode.c.objc name - KWCaptureSpy.m + NSObject+KiwiVerifierAdditions.m path - Kiwi/Classes/KWCaptureSpy.m + Classes/NSObject+KiwiVerifierAdditions.m sourceTree - SOURCE_ROOT + <group> - 7813868A8AC4428FB5763DB3 + 75EC7DB9979B4129BA1F64CD - children + buildConfigurations - 370967D45A33478F8707D998 - 25D35DB0053540EBAC39E78A - 955B29E488F444B8BC4126EE - 2EEE501CF58448619D929D2E - 458BA5E50EDE46CB88EFEF52 - 5C4FD44BB8A74AED9CBD3267 + EAAF07603F284871B401067E + 9C5FC564CC14441AAAD535DC + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release isa - PBXGroup - name - SocketRocket - sourceTree - <group> + XCConfigurationList - 78F2FD7527F04C68897580D6 + 76124B18F4CC40379BA4AA1D fileRef - 88929517815B43D49DFF4362 + EDC2AAC8F16143BA965323D3 isa PBXBuildFile - 791BE870AB3443A791EB4141 - - fileRef - DF8B54EC0E37483AA313BA61 - isa - PBXBuildFile - - 7922598B24B74704B7EA958E + 76146A38D348416F98A7F7E4 includeInIndex 1 @@ -3149,107 +2944,248 @@ lastKnownFileType sourcecode.c.h name - KWNull.h + KWBeBetweenMatcher.h path - Kiwi/Classes/KWNull.h + Classes/KWBeBetweenMatcher.h sourceTree - SOURCE_ROOT + <group> - 7A1B44FC71AB4D22A19B6261 + 770C71317885455D98F07999 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWChangeMatcher.m + SenTestSuite+KiwiAdditions.h path - Kiwi/Classes/KWChangeMatcher.m + Classes/SenTestSuite+KiwiAdditions.h sourceTree - SOURCE_ROOT + <group> - 7A6D92B774934142B6B52E4D + 7735A5924E5542D9A2F5AB59 + + fileRef + D24895EE44C64739B92003F2 + isa + PBXBuildFile + + 780C071E5A964E1EAB7A2EBA + + fileRef + 3A5ECAA3423B4A2BB766BAF0 + isa + PBXBuildFile + + 781EED02747A41BCA689AD4B - includeInIndex - 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + wrapper.framework name - KWBeBetweenMatcher.h + CFNetwork.framework path - Kiwi/Classes/KWBeBetweenMatcher.h + Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/CFNetwork.framework sourceTree - SOURCE_ROOT + DEVELOPER_DIR - 7B49607B802643E2B5A1AEE0 + 7820D258C43242B49EBB21DB - fileRef - 150431BFC8FB4FFB98309725 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + text + path + Pods-specs-acknowledgements.markdown + sourceTree + <group> - 7B6356F48E504E47B77073BC + 785E1D88FD65411CBEE07F20 buildActionMask 2147483647 files - D18F69C55B684CC6A8757B0F + 7E6DB855CD24423BB4B22C51 + 6D57168DA74A48159127E19B + CCBF3A07F47D4F4D8047A858 + 215EF63935964E0D8D7E64FA + 007DDF76AC2F4F3C8C77C865 + C6674300683344B1B932330B + 2375810F38484C808D53D566 + E11930F907594C8D9014BC2D + CA4C28BDEEC74F2AA95E37EA + F92ED42764534FAFBC9EEB73 + 1B29EDD57D3148C8917AAE62 + 8D5C79200D80475CB893E52E + 51912FA9780447728D5DB1C9 + 7B1ADC03488C4955A56A8EC4 + 5108AFB576B048A99D3E3E52 + 728EE998470F4D588070BC7B + 7D6BD47E8C6A437BAB3C7557 + 3BF9D0401C634BA7AD1DEBC0 + 1C9E5F48B1564FDD965FA441 + 57B65E09772E4511A472B5A0 + 753A70638C074EA5BF0B2D15 + 82001016308A48F3910552CE + 0F984B16A6544C869570EDE7 + C3BA73B59D894B7CAAE94182 + 139F86C1A4CE41088F1F7181 + 063B745CAFFF4B3B9E528BBD + 14496D57C1B34A84984EB2A0 + 74FA28FCFB34463F8E8D1DEB + A0256FBA608B43438EF98E06 + F07573B2127E4FB48CA2BC57 + 2950ACAC3BAE4E0293F5B4B8 + 170446E1EC8F4391A429D2BD + 36C9B6C4441B424A9B257622 + 347585E620AD454C8DB08DAB + AB98AFA1B8084D109DED77CF + ECCAB9A6EC9A410FAAE482ED + AD1964E3E0B94D4C9E6705E6 + E455A33674124E3CAD9FCC4E + AEDE409AC0CC469A92EDAFBC + 915F97C118734E7D8A7DC5E0 + 458F589F281F49C6BF344536 + DE5CD632034B46428537883D + B8BCE7BC0235479CBBC668D6 + BC7B3D23A9154227AE89E639 + E2A304E02D85459B82F01B8B + AF9BC13717AC44AD87947134 + 2CAEC5C096FD44C6AA6EA2C8 + 37DA39DD91FB428281116FC1 + 9B70004B7F86463698D96E26 + 5893B92869AB49698179161F + E16E12DC32F348F3B6B429A2 + 714BC488B8D6472785754B19 + 3BE1A5095A4B4196B99F0501 + C4F74423FD594F9690E835AA + C1E078818B13496C91845F8B + D779FBD2D5914DEA9E408F4A + 0A4EB9F903F34C83A99E5993 + D2343FAB7B1047CFA406CFFD + B86FF5EE2A02466FBA347F2B + 1237D823D7124559A85760A3 + 0FFB35DE920343A6B3CAF39E + B7ABAAE02EAF449FB40C55AE + D1CD3A46930647B5886DEF53 + ED4F844D9A674929BEB1D7C2 + DD4F5D6A0D4943DCB890E6DB + 852E64C9A7B34B02949829F1 + A81D1F70D4B947FA89594682 + FA376A686ECC4986B3F0163A + 1AF086E689164B9C87C4C4BC + 32216C9C3EC44D1097F48600 + 632B1E0FDA6641FE802BFEC5 + 2475729893FA48208B7F78F4 + 267D076EAF2E40CDB23FAA5D + F921514F164D492AA22248BD + 500CB610C06C4A1EA1CCB1E4 + B1C0ADC88CC44BC78D3EADF0 + 3F2B8C9CCC7346028A7673E8 + 46E94487428C47AEA506CD79 + 39859403D0564EF7A8DAB620 + B73D89D22B424A09B9953AE9 + 901B3A49E99C4C618C656021 + C38CB01C5A53446AB8179F91 + C25B810667FE4D51A0F8F62E + DE81BD24B7FE4C299F6C4D3B + 489CFB7E8CA340D49C7F1374 + C9710E39B89B484698C13C05 + AEC0B0C64D0546B0BC0225B0 + 981F53A68ECD48688278C8F0 + 35AF467E194B4472B61D6604 + 13340D3E27BF4D4BB673F7B2 + 5E08C48F2CB0424A8B0C6483 + 83AD16B1E9614B569CEA3DD3 + F1EBBB27815144EFB2A5F841 + A226DF8C86474203B415F860 + 01656CBF93D94C468CBE1471 + 71A2597AF1CB48DFA8DD9D20 isa - PBXSourcesBuildPhase + PBXHeadersBuildPhase runOnlyForDeploymentPostprocessing 0 - 7B70632E9CF943D09CB064CF + 78A36945CC604CE5A51E72AD fileRef - 047C16E20F244D8AB1266662 + 850FB39AB0D94A0F85DB45DA isa PBXBuildFile - 7C5886BA6BAA43AD96409043 + 79A0E4CBBBAB48E29B02BA2F includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWExampleSuite.h + KWDeviceInfo.m path - Kiwi/Classes/KWExampleSuite.h + Classes/KWDeviceInfo.m sourceTree - SOURCE_ROOT + <group> - 7CE16008961B46459A91E027 + 79A57B9FECCF46C583B20ECD includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWMessagePattern.h + KWReceiveMatcher.m path - Kiwi/Classes/KWMessagePattern.h + Classes/KWReceiveMatcher.m sourceTree - SOURCE_ROOT + <group> + + 79F28A886D2E4015870C4782 + + fileRef + B011D1E5BF164122904DD8C9 + isa + PBXBuildFile + + 7A2DF566CB4D40D6AEC1E635 + + buildConfigurations + + A8B4E2A7D222430CBBA95100 + FEBC1BB75BA24DF69AAB680F + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + 7B0E0A2832F04070B3F2234B + + fileRef + 9B01082F7C5E4189921DF9C1 + isa + PBXBuildFile - 7D4351A35EC141DD83D1F45E + 7B1ADC03488C4955A56A8EC4 fileRef - E7C504DF53524583AA9E8BEF + 05203007927E4DE5B8CB91FF isa PBXBuildFile - 7D552DF2DCE5463CADE3D029 + 7B891F3D4BD24A3AA32A0E14 includeInIndex 1 @@ -3258,13 +3194,13 @@ lastKnownFileType sourcecode.c.objc name - KWValue.m + KWMessagePattern.m path - Kiwi/Classes/KWValue.m + Classes/KWMessagePattern.m sourceTree - SOURCE_ROOT + <group> - 7D9BFDB69EE049EAA02857C8 + 7C92B8C48626490FB1D72A56 includeInIndex 1 @@ -3273,42 +3209,26 @@ lastKnownFileType sourcecode.c.objc name - KWFailure.m + KWMatchVerifier.m path - Kiwi/Classes/KWFailure.m + Classes/KWMatchVerifier.m sourceTree - SOURCE_ROOT + <group> - 7DB4003828D5461B9567DED4 + 7CA8479D2BCC4C1F81077CA0 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - KWBlock.m + sourcecode.c.h path - Kiwi/Classes/KWBlock.m + Pods-specs-Kiwi-prefix.pch sourceTree - SOURCE_ROOT - - 7E0F5E4306F3443CAA5F404E - - buildConfigurations - - 1DFB09B3CD914E0DA2B145B5 - 57F80BE3EF744F31803D3EC3 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList + <group> - 7E20F49EDDA34EF48787B3F1 + 7CB7012D77874A34B1B1C375 includeInIndex 1 @@ -3316,14 +3236,33 @@ PBXFileReference lastKnownFileType sourcecode.c.objc - name - NSProxy+KiwiVerifierAdditions.m path - Kiwi/Classes/NSProxy+KiwiVerifierAdditions.m + Pods-SocketRocket-dummy.m sourceTree - SOURCE_ROOT + <group> + + 7D6BD47E8C6A437BAB3C7557 + + fileRef + 7E9B84AAFAAD46289D3AFE98 + isa + PBXBuildFile + + 7D8DFEBD882F43FBB1CA379B + + fileRef + 2DB0F5A2BA0241F5BDFE8B02 + isa + PBXBuildFile + + 7E6DB855CD24423BB4B22C51 + + fileRef + 0D35278FB73C48B583F219DA + isa + PBXBuildFile - 7E25B55285944F2E851E5827 + 7E9B84AAFAAD46289D3AFE98 includeInIndex 1 @@ -3332,50 +3271,35 @@ lastKnownFileType sourcecode.c.h name - KWInequalityMatcher.h + KWBeforeEachNode.h path - Kiwi/Classes/KWInequalityMatcher.h + Classes/KWBeforeEachNode.h sourceTree - SOURCE_ROOT + <group> - 7E6D4807392D4006BEF41075 + 7F06775D39F24B249E7E9122 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - NSProxy+KiwiVerifierAdditions.h + KWTestCase.m path - Kiwi/Classes/NSProxy+KiwiVerifierAdditions.h + Classes/KWTestCase.m sourceTree - SOURCE_ROOT - - 7F8290E861A9450187505904 - - buildActionMask - 2147483647 - files - - 9012B820DB964FB8852FF805 - 31D78A7450F348EEB07D1044 - 9DA583BBE71745B4871CE9E0 - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 + <group> - 7FC3B368CE2C4ED592CAE9F9 + 7F109BED967C4DB082E89E78 fileRef - BF113F4C8D274B2BADE3D699 + B402548EE7FC4C6A876C4EAB isa PBXBuildFile - 800EFA74AB034A05A5B1AFCC + 7F4FEB6A55C74466BE5510EC includeInIndex 1 @@ -3384,110 +3308,83 @@ lastKnownFileType sourcecode.c.objc name - KWObjCUtilities.m + NSInvocation+OCMAdditions.m path - Kiwi/Classes/KWObjCUtilities.m + Classes/NSInvocation+OCMAdditions.m sourceTree - SOURCE_ROOT + <group> - 80FF6F855710472F80BD059D + 813A8656C6E24A589AEA67F8 fileRef - 75D28F5682DA477796457451 + 5DD5F28EF02942E3B404B619 isa PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 + - 81196C039F0B4ADAA307E877 + 82001016308A48F3910552CE - buildActionMask - 2147483647 - files - - 1BCA763A0617449EAFD95D51 - 60283588392E4FB892430642 - + fileRef + D64720DD20764A37837532B5 isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXBuildFile - 8135B9B2F08041FA895A4ED7 + 825BF97AAA864CD39CA84D95 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWBeNonNilMatcher.h + NSProxy+KiwiVerifierAdditions.m path - Kiwi/Classes/KWBeNonNilMatcher.h + Classes/NSProxy+KiwiVerifierAdditions.m sourceTree - SOURCE_ROOT - - 81CAD16CBB3143C8A5F918C4 - - buildConfigurationList - F7D806C834AC4C99832D49CE - buildPhases - - 81196C039F0B4ADAA307E877 - C64029208A4F4D3BA01157BB - A15B22EEE9BA4329B5CB4AB8 - - buildRules - - dependencies - - isa - PBXNativeTarget - name - Pods-Reachability - productName - Pods-Reachability - productReference - F759DFB278F64E7282870585 - productType - com.apple.product-type.library.static + <group> - 81D313EE3E944E37B3AB3788 + 83A7D77F40F04C81AD0A1890 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWRespondToSelectorMatcher.m + NSObject+KiwiSpyAdditions.h path - Kiwi/Classes/KWRespondToSelectorMatcher.m + Classes/NSObject+KiwiSpyAdditions.h sourceTree - SOURCE_ROOT + <group> - 821DAA9BE35445D7AC272F14 + 83AD16B1E9614B569CEA3DD3 fileRef - 5C4FD44BB8A74AED9CBD3267 + 99C5C695F3D5406483F36D7B isa PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - 82ABDE6BA47F48DB9B2E83B1 + 83F18417D1034374A8D23F0B + + fileRef + 37EDB6AFC26B46A4B13F9441 + isa + PBXBuildFile + + 8458DA3FD1DD41B1AAFD05CC baseConfigurationReference - 1B204C7016914DAB98C1018A + 2910EBE586224DBFB6C88644 buildSettings ALWAYS_SEARCH_USER_PATHS NO - ARCHS - armv6 armv7 COPY_PHASE_STRIP NO DSTROOT @@ -3501,7 +3398,7 @@ GCC_PRECOMPILE_PREFIX_HEADER YES GCC_PREFIX_HEADER - Pods-Reachability-prefix.pch + Pods-specs-OHHTTPStubs-prefix.pch GCC_PREPROCESSOR_DEFINITIONS DEBUG=1 @@ -3531,36 +3428,22 @@ name Debug - 845055AF292B45CC8337AD2C + 846E715C2E6A471D8F5AED4B includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - NSNumber+KiwiAdditions.h + KWBeTrueMatcher.m path - Kiwi/Classes/NSNumber+KiwiAdditions.h - sourceTree - SOURCE_ROOT - - 85C0BC2D26F7457991F02565 - - children - - 56580F1050924428A2F84270 - 969FDD6021AA4DB8B4BBFDFA - - isa - PBXGroup - name - Reachability + Classes/KWBeTrueMatcher.m sourceTree <group> - 8704BD946CE240C6ACE9CA77 + 850FB39AB0D94A0F85DB45DA includeInIndex 1 @@ -3569,51 +3452,62 @@ lastKnownFileType sourcecode.c.objc name - KWBeSubclassOfClassMatcher.m + NSInvocation+KiwiAdditions.m path - Kiwi/Classes/KWBeSubclassOfClassMatcher.m + Classes/NSInvocation+KiwiAdditions.m sourceTree - SOURCE_ROOT + <group> - 8745F2EC1BA44654AB91AC78 + 852E64C9A7B34B02949829F1 fileRef - C3AB70CB973646BAA866BADA + 22736026782A43489D60A3F0 isa PBXBuildFile - 8761C020C58243AD98814BA8 + 859A7B5F66A34049B151372E + + buildActionMask + 2147483647 + files + + 624B26EBD7F3450EB86E5C65 + + isa + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 85AB14A394BA433C88143336 fileRef - D4824E5076DD49D6BB3D0985 + F816B0144B824DD69768CA8C isa PBXBuildFile - 8777FF45154A42B2948CA353 + 85B7625F9D2942609C2C76F0 - children - - DBFEC935A2714BFB905BB101 - 625877F642B546C98332C80B - 1BF533EDF5034020B7603334 - 1C99083A2B7B43B09B7F8D97 - 988C85883392444EBA3E160F - + includeInIndex + 1 isa - PBXGroup + PBXFileReference + lastKnownFileType + sourcecode.c.objc name - Frameworks + KWBeWithinMatcher.m + path + Classes/KWBeWithinMatcher.m sourceTree <group> - 87F89C2E24194A10961BC3DF + 85DB5697079D43F38FB09D98 fileRef - 3BAE8CEA85634EB6B263A2B8 + 62870C1C913F4CFE9EABF48D isa PBXBuildFile - 88929517815B43D49DFF4362 + 8703F23DBBF64CAF8FF1293D includeInIndex 1 @@ -3621,36 +3515,19 @@ PBXFileReference lastKnownFileType sourcecode.c.h - name - KWCallSite.h path - Kiwi/Classes/KWCallSite.h + Pods-specs-environment.h sourceTree - SOURCE_ROOT + <group> - 88A88235D0A649B7BFC46CCE - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - OHHTTPStubs.m - path - OHHTTPStubs/OHHTTPStubs/OHHTTPStubs.m - sourceTree - SOURCE_ROOT - - 88CC7FCF02D74A678E5711B1 + 88724F9B0D63487392B935A9 fileRef - B47BA84054CC4E8C8029DD6F + 9AE9BA613ED2424F9DECFF79 isa PBXBuildFile - 88D6E240FA724802BE9499A3 + 898F914404B7404F985F0B74 includeInIndex 1 @@ -3659,111 +3536,33 @@ lastKnownFileType text.plist.xml path - Pods-specs-acknowledgements.plist + Pods-acknowledgements.plist sourceTree - SOURCE_ROOT - - 897C1BEF548F4A859B79E392 - - fileRef - 184561A9A12749ADB6FB96D3 - isa - PBXBuildFile - - 8A50B544D20246FE88E98E44 - - isa - PBXTargetDependency - target - 81CAD16CBB3143C8A5F918C4 - targetProxy - ED71BFBB36B54EF1B9A1B824 - - 8A6E1B25C2534CBCADA35722 - - baseConfigurationReference - 9DBAD86B19EC41D49402D8F5 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - ARCHS - armv6 armv7 - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Pods-SocketRocket-prefix.pch - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 4.0 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES - - isa - XCBuildConfiguration - name - Release + <group> - 8B753A6C511E40CE84466C07 + 8AEB36B21072419BA56F0F7A includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWFormatter.h + KWMessageTracker.m path - Kiwi/Classes/KWFormatter.h + Classes/KWMessageTracker.m sourceTree - SOURCE_ROOT + <group> - 8BDE2EBCCBF2417B964841D2 + 8C24CA69269144CE8D60CA19 - includeInIndex - 1 + fileRef + 17D8EE657E8945FFB655C25E isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - KWContainMatcher.m - path - Kiwi/Classes/KWContainMatcher.m - sourceTree - SOURCE_ROOT + PBXBuildFile - 8BFB505CDDE24299A1CDBB9F + 8D316B841C9742E0BE03F278 includeInIndex 1 @@ -3772,41 +3571,72 @@ lastKnownFileType sourcecode.c.objc name - KWBeIdenticalToMatcher.m + KWRegisterMatchersNode.m path - Kiwi/Classes/KWBeIdenticalToMatcher.m + Classes/KWRegisterMatchersNode.m sourceTree - SOURCE_ROOT + <group> + + 8D5C79200D80475CB893E52E + + fileRef + 3B87D4FD143E4393A97CE9EE + isa + PBXBuildFile - 8D0836541C014EC7BEB46CD0 + 8DE837F0FEF34A6B8CCDE689 buildActionMask 2147483647 files - 015E5FADC4864E31ACA24197 + 813A8656C6E24A589AEA67F8 + 095BEA9BB8934C89A96AED18 + C8CDCB008FF14C7AB2B889F5 isa - PBXFrameworksBuildPhase + PBXSourcesBuildPhase runOnlyForDeploymentPostprocessing 0 - 8D775504D1CB4769B5F08C04 + 8E2A9EA40750416FB5C29835 - includeInIndex - 1 + fileRef + 85B7625F9D2942609C2C76F0 isa - PBXFileReference - lastKnownFileType - sourcecode.c.h + PBXBuildFile + + 8E8C5155F5AE4B42981AF1BE + + fileRef + 3074EEEC4A0248F3AD09E672 + isa + PBXBuildFile + + 8E90678CC8AF406290F5EC5E + + children + + 9BD1CB05A1F540E793C1B773 + 29B873493F4242009C065CC8 + 9B01082F7C5E4189921DF9C1 + 7CA8479D2BCC4C1F81077CA0 + + isa + PBXGroup name - KWBeNilMatcher.h - path - Kiwi/Classes/KWBeNilMatcher.h + Support Files sourceTree SOURCE_ROOT - 8DBB0F91D01B43AD8C733B2B + 901B3A49E99C4C618C656021 + + fileRef + EC5B33E0DD6646B1BD3245B7 + isa + PBXBuildFile + + 9049A5FFCA564EA7A7581376 includeInIndex 1 @@ -3815,71 +3645,75 @@ lastKnownFileType sourcecode.c.h name - KWCaptureSpy.h + KWHaveMatcher.h path - Kiwi/Classes/KWCaptureSpy.h + Classes/KWHaveMatcher.h sourceTree - SOURCE_ROOT - - 8E34AA0DB2E440C28FDA4EA7 - - fileRef - ABB202FBAD074E109CF71566 - isa - PBXBuildFile + <group> - 8E8263928C3B4EBFB09597A6 + 90B711A8829043C38B84C839 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - KWBeNonNilMatcher.m + sourcecode.c.h path - Kiwi/Classes/KWBeNonNilMatcher.m + Pods-environment.h sourceTree - SOURCE_ROOT + <group> - 8ED87155D0E546AD8A384DC0 + 911DDD43E4EC457F86209F2F includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWSymbolicator.m + KWValue.h path - Kiwi/Classes/KWSymbolicator.m + Classes/KWValue.h sourceTree - SOURCE_ROOT + <group> - 9012B820DB964FB8852FF805 + 915F97C118734E7D8A7DC5E0 fileRef - 625877F642B546C98332C80B + F7C250808FBE4D2096BAF6C4 isa PBXBuildFile - 9041F24FC7F643F6947217EC + 9206AC45E82E4853864AEEDF fileRef - 7922598B24B74704B7EA958E + 3598443A8B444EEEB51C7FCA isa PBXBuildFile - 91406FB0E85A4BAABA435D5A + 9250C579387B43D7A27AF8E4 + + buildActionMask + 2147483647 + files + + 83F18417D1034374A8D23F0B + + isa + PBXHeadersBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 929B14F03A87403BAB4D296F fileRef - EC732E0F175643EE9CCF1ED0 + A2A7531E7A8F4C52A2ADB1CD isa PBXBuildFile - 9201585E06B3403C9088447C + 93063D4333F74DB8991E0B6D includeInIndex 1 @@ -3888,13 +3722,20 @@ lastKnownFileType sourcecode.c.h name - KWBeforeEachNode.h + KWInequalityMatcher.h path - Kiwi/Classes/KWBeforeEachNode.h + Classes/KWInequalityMatcher.h sourceTree - SOURCE_ROOT + <group> - 939578CAFC8942C2929F3F8C + 941B6819DE25449B85BD7F0D + + fileRef + 303AC2C4EDC24B33A809F7BD + isa + PBXBuildFile + + 9539F6C43A3441FF9D78F53D includeInIndex 1 @@ -3903,27 +3744,34 @@ lastKnownFileType sourcecode.c.objc name - KWBeKindOfClassMatcher.m + KWMatcher.m path - Kiwi/Classes/KWBeKindOfClassMatcher.m + Classes/KWMatcher.m sourceTree - SOURCE_ROOT + <group> - 93C0C92AA3924FA5B89F18A2 + 956FB1C6F62F4B7FA2EB59EF fileRef - 2F60E112C3054655B705B2B7 + 2D75D4F6472346F898D2702B isa PBXBuildFile - 93DC1D2DE66D47B6838B9A88 + 960AC4593F1942808B1D7BCD - fileRef - D2140D56BD334E97B6829FC2 + buildActionMask + 2147483647 + files + + E2859CB847C14135B77610C4 + FCF809DCB496476DB9613282 + isa - PBXBuildFile + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 - 9444A72A6A6041E8B70A9767 + 9688D932103B4EB594B1C0C4 includeInIndex 1 @@ -3932,26 +3780,20 @@ lastKnownFileType sourcecode.c.objc name - KWStringUtilities.m + KWBlockNode.m path - Kiwi/Classes/KWStringUtilities.m + Classes/KWBlockNode.m sourceTree - SOURCE_ROOT + <group> - 95207EAC5C8E42379B8E46F4 + 981F53A68ECD48688278C8F0 - includeInIndex - 1 + fileRef + 5E36D1AD183C4E52B4BE4A4F isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - Pods-specs-dummy.m - sourceTree - SOURCE_ROOT + PBXBuildFile - 955B29E488F444B8BC4126EE + 996DF26A178C4391A1E1F3CA includeInIndex 1 @@ -3960,35 +3802,35 @@ lastKnownFileType sourcecode.c.h name - NSData+SRB64Additions.h + KWContainMatcher.h path - SocketRocket/SocketRocket/NSData+SRB64Additions.h + Classes/KWContainMatcher.h sourceTree - SOURCE_ROOT + <group> - 95A0C3C0193742BB854E9BED + 99AA68B5B9604ED49DD81630 fileRef - 42D8482887C2468FB2456054 + C670E39CDCCA4FE2A3B4D495 isa PBXBuildFile - 9668979FBD5541529C3EBFA2 + 99C5C695F3D5406483F36D7B includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWConformToProtocolMatcher.m + NSObject+KiwiStubAdditions.h path - Kiwi/Classes/KWConformToProtocolMatcher.m + Classes/NSObject+KiwiStubAdditions.h sourceTree - SOURCE_ROOT + <group> - 9676AEE801844D989D68B708 + 99E7EBCA9E944975BF10B11E includeInIndex 1 @@ -3997,197 +3839,178 @@ lastKnownFileType sourcecode.c.objc name - KWWorkarounds.m + KWAfterAllNode.m path - Kiwi/Classes/KWWorkarounds.m + Classes/KWAfterAllNode.m sourceTree - SOURCE_ROOT + <group> - 9681EC415AF94E328E756293 + 99EB6D2FB1894B76B060BE98 fileRef - C61546A3B30A49959059B7D1 + 9688D932103B4EB594B1C0C4 isa PBXBuildFile - 969FDD6021AA4DB8B4BBFDFA + 9A9C88FF7AFA49EA9BA63CBB - includeInIndex - 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + wrapper.framework name - Reachability.m + SenTestingKit.framework path - Reachability/Reachability.m + Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/SenTestingKit.framework sourceTree - SOURCE_ROOT + DEVELOPER_DIR - 97118765DBCE41E1ABED0461 + 9AE9BA613ED2424F9DECFF79 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc + name + KWGenericMatchEvaluator.m path - Pods-specs-Kiwi-prefix.pch + Classes/KWGenericMatchEvaluator.m sourceTree - SOURCE_ROOT + <group> - 972144E67837407D8240156C + 9B01082F7C5E4189921DF9C1 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h - name - KWGenericMatcher.h + sourcecode.c.objc path - Kiwi/Classes/KWGenericMatcher.h + Pods-specs-Kiwi-dummy.m sourceTree - SOURCE_ROOT + <group> + + 9B5B15B290EC4CD5BD2060DC + + buildActionMask + 2147483647 + files + + D301190CE0A04B90B00616D1 + 62868CB2DFA94A088C42C018 + 956FB1C6F62F4B7FA2EB59EF + C711B876129844708B7C045C + 7735A5924E5542D9A2F5AB59 + F453D742CD7243E590CE3DEC + 4A39920C40A440F1A1104A6D + 54F4B67A8A5A4C5F87E1D626 + 01D8A1EAABE44A4EBD87F18E + 08391C3F382E4578BD6E8B96 + 0509686B98054A0F829879CD + 003C27671F634861B6200BDC + 48E0BDC254584214A34AAD1B + 8E2A9EA40750416FB5C29835 + 119627D572104042829B4D2A + 2FA72FD99E2F470C8EA501DA + 4BA1F22D0D9C4D3F80002ADE + 219AD23312004E0E8F67EC23 + 99EB6D2FB1894B76B060BE98 + 76124B18F4CC40379BA4AA1D + 435D621026BA4A4BA2CDA519 + 40270A01DE174E3C84ADFFF4 + 929B14F03A87403BAB4D296F + 50C2B3AA1FEA44DB94FA2CB6 + C2CAFAEFF4F840AC80A8DC17 + AA462F62E3D0482B903432B7 + 8E8C5155F5AE4B42981AF1BE + 6EBBEC059099403F9F47A889 + 5462F79002B74ED29B81E79E + 85AB14A394BA433C88143336 + 28DDDF1868B04E47A09B4B67 + 1C57AB410F244F709E92E631 + C4F375FFFEA04228BF826BFA + CBC8D04048CE4414A9FF8861 + 090DE73BDFD446618E005B8C + 1E313F9CCADC4CFEAD404A16 + 88724F9B0D63487392B935A9 + F10205540E194915B56A4A2A + 734A84A485EA42CB885A1127 + 25A5BA849B5B4B73B656505B + 1B2088CF33B84C18BCA2D1F7 + 1DF91000F92C4312819661B0 + FD901F4F13A44F5A87E46BAB + ABDDE5DA869A451CA4ECFFF7 + 4AEAC0FD0D8745ADAEEE6B20 + 55853AA20C3F4817A6076A6F + 71CE4A8FC22F436EAD51BDA6 + 586D743CA46F49A78891596F + C583BDB228344690858E04BE + 4143EB2471F44A1DA6686343 + C0C751F3B15B45E1B8FB017C + 725A3953033D4B28A485879E + A964EE00D9E0466988DB2D5B + DF3FE6D6EE2F4ED6B1A52919 + C92940422BBD4B03848CE3FD + 589998785A2D4651981C7CF0 + C61E12726F3B4E0883F3B80C + 440815E09DF54DF3AA139D21 + ACC0BA8653234D92A6A715C2 + B5CB6069A867455BBFEB446A + 60DEAD6ECF8E490A8FA7EB8B + 780C071E5A964E1EAB7A2EBA + D5FB4B832CEB44AE8CDF093D + C0389F466CB54F1886C01A90 + C2A98F24AB5B480E991052A7 + 8C24CA69269144CE8D60CA19 + C517DAC6688D466FA2B872F0 + 43A8055AEDED4330B76BE596 + D61308BAF91A4096A32420B5 + 6BBA5AB33C4B4E94B82A7A69 + CA11F1F6E42C4234A140F524 + 78A36945CC604CE5A51E72AD + 560ABCF5EA28411BBDD67345 + 85DB5697079D43F38FB09D98 + 5FB13B1E6CCE4DA587C3C45F + 941B6819DE25449B85BD7F0D + 9CD19A335D094F5B8DF65B33 + 1C704EB15BD844DB9E3E7B67 + C3D0B4FFAC234C2CBA1A2E55 + C321FB84C8354EB39C64A5E5 + 7F109BED967C4DB082E89E78 + 7B0E0A2832F04070B3F2234B + C99F60013B7E49DABC486DF2 + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 9B70004B7F86463698D96E26 + + fileRef + C29B57204547435DA2D33954 + isa + PBXBuildFile - 9811CCF5FA8F4E8C8521EF3F + 9B8C5FFD54A9478AB9CD060E includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWAfterEachNode.h - path - Kiwi/Classes/KWAfterEachNode.h - sourceTree - SOURCE_ROOT - - 985FE19A737244EA9B00C491 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods-SocketRocket.xcconfig - sourceTree - SOURCE_ROOT - - 988C85883392444EBA3E160F - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - wrapper.framework - name - SystemConfiguration.framework - path - Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/System/Library/Frameworks/SystemConfiguration.framework - sourceTree - DEVELOPER_DIR - - 99A4213D4B0F40A79555B429 - - fileRef - 437DAE2ADC694F249B4A818D - isa - PBXBuildFile - - 99E902D1C70F44B3920567BD - - buildConfigurationList - B088098A6FCF4526B706EBEF - buildPhases - - 3E17716F92994A4791682356 - F9311DCCAB1549B2A2BE6191 - 9E9B49441F6947E898F6A9B7 - - buildRules - - dependencies - - isa - PBXNativeTarget - name - Pods-SocketRocket - productName - Pods-SocketRocket - productReference - 10AD640DF35848B3BCEE71B2 - productType - com.apple.product-type.library.static - - 99F76629663940968AF23B8A - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWObjCUtilities.h - path - Kiwi/Classes/KWObjCUtilities.h - sourceTree - SOURCE_ROOT - - 9C646E20509B411E8D96AEF8 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KiwiBlockMacros.h - path - Kiwi/Classes/KiwiBlockMacros.h - sourceTree - SOURCE_ROOT - - 9DA1B56D915548479AAB3AA0 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - OHHTTPStubs.h + KWSymbolicator.m path - OHHTTPStubs/OHHTTPStubs/OHHTTPStubs.h + Classes/KWSymbolicator.m sourceTree - SOURCE_ROOT - - 9DA583BBE71745B4871CE9E0 - - fileRef - 1E88DB2C638C45869220B46C - isa - PBXBuildFile - - 9DAF92FDE4954B6ABCB9CA46 - - fileRef - 5F04555A9DD54A4BA34EDCA6 - isa - PBXBuildFile + <group> - 9DBAD86B19EC41D49402D8F5 + 9BD1CB05A1F540E793C1B773 includeInIndex 1 @@ -4196,27 +4019,18 @@ lastKnownFileType text.xcconfig path - Pods-SocketRocket-Private.xcconfig + Pods-specs-Kiwi.xcconfig sourceTree - SOURCE_ROOT - - 9E57E24A0FB44DDDB0B43C58 - - fileRef - 7E6D4807392D4006BEF41075 - isa - PBXBuildFile + <group> - 9E95F1093E64439FAF91A903 + 9C5FC564CC14441AAAD535DC baseConfigurationReference - 6FFE29E80EBF4AEA90B19FD7 + 0692DA3FAE464AC9B4070C78 buildSettings ALWAYS_SEARCH_USER_PATHS NO - ARCHS - armv6 armv7 COPY_PHASE_STRIP YES DSTROOT @@ -4259,66 +4073,44 @@ name Release - 9E9B49441F6947E898F6A9B7 - - buildActionMask - 2147483647 - files - - A30872460FBB482F9C99E9E6 - 3B56C057F37A45C4BE40A902 - D81529FB1A9544BB9E204B79 - - isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 9EAA82DA07914D83BD3D0C94 - - fileRef - 65AF4B9115714C2AA5CF7DEF - isa - PBXBuildFile - - 9EB757B2697E46C89EBC62D0 + 9CD19A335D094F5B8DF65B33 fileRef - BE00DE7B32B243A682DDC187 + 4F52B77D3E4649088886C202 isa PBXBuildFile - 9ED5A2C1C0B0445E9B4C326D + 9CF86F29D3E24EACA76BA39D - fileRef - 370967D45A33478F8707D998 + includeInIndex + 1 isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWRaiseMatcher.h + path + Classes/KWRaiseMatcher.h + sourceTree + <group> - 9F597748B21C42CEBCD46279 + 9D11BEEFD4D049AFA6B3BA0D - children - - F759DFB278F64E7282870585 - 10AD640DF35848B3BCEE71B2 - 5E15AB3896BE4E7287F8A8C0 - 1E88DB2C638C45869220B46C - BC83F1CD8DE64E8EA6B250B6 - 19A74633E98849F8B7BEA7FC - + includeInIndex + 1 isa - PBXGroup + PBXFileReference + lastKnownFileType + sourcecode.c.objc name - Products + NSNumber+KiwiAdditions.m + path + Classes/NSNumber+KiwiAdditions.m sourceTree <group> - 9FE5A4C83F224D4AB067DB45 + 9D8F977726B447A9A45FA965 includeInIndex 1 @@ -4327,13 +4119,13 @@ lastKnownFileType sourcecode.c.h name - NSObject+KiwiSpyAdditions.h + Kiwi.h path - Kiwi/Classes/NSObject+KiwiSpyAdditions.h + Classes/Kiwi.h sourceTree - SOURCE_ROOT + <group> - A0C10AE3E81641F28D8FD401 + 9DE2E3E59AFE40128A1085AB includeInIndex 1 @@ -4342,58 +4134,50 @@ lastKnownFileType sourcecode.c.objc name - KWBeEmptyMatcher.m + KWExistVerifier.m path - Kiwi/Classes/KWBeEmptyMatcher.m + Classes/KWExistVerifier.m sourceTree - SOURCE_ROOT + <group> - A1005BAE4B444499834A84BC + 9E76DADD9AEB4D32961FD45B includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWFailure.h + KWStringContainsMatcher.m path - Kiwi/Classes/KWFailure.h + Classes/KWStringContainsMatcher.m sourceTree - SOURCE_ROOT + <group> - A11D0D681B3E408E8D609BAC + 9EB9DAF99353458F9805E406 - children - - 985FE19A737244EA9B00C491 - 9DBAD86B19EC41D49402D8F5 - 6760A93D5B2548379F37B686 - EFFB43BEB94748098A56A500 - + includeInIndex + 1 isa - PBXGroup + PBXFileReference + lastKnownFileType + sourcecode.c.h name - Pods-SocketRocket + KWExampleGroupBuilder.h + path + Classes/KWExampleGroupBuilder.h sourceTree <group> - A1223FACF3914D50B676FF4E - - fileRef - 10AD640DF35848B3BCEE71B2 - isa - PBXBuildFile - - A1285EB3DE794B289CD97CC5 + A0256FBA608B43438EF98E06 fileRef - 8BDE2EBCCBF2417B964841D2 + 159C53CF9F5D4E8B8056AD62 isa PBXBuildFile - A1530E7E8B9040B1B0EFE966 + A0B577847C4245EF84CA83C9 includeInIndex 1 @@ -4402,110 +4186,82 @@ lastKnownFileType sourcecode.c.objc name - KWExampleGroupBuilder.m + KWMatchers.m path - Kiwi/Classes/KWExampleGroupBuilder.m + Classes/KWMatchers.m sourceTree - SOURCE_ROOT + <group> + + A11EBC0ECD95456590D9BE58 + + children + + F0B245078FE647C2B4C013B1 + 7820D258C43242B49EBB21DB + BE6124AAFF5A45799AF33ACD + A4AF0D9040AC4B84B5F19209 + 8703F23DBBF64CAF8FF1293D + 568C9A7C6150465CA9738957 + + isa + PBXGroup + name + Pods-specs + sourceTree + <group> - A15B22EEE9BA4329B5CB4AB8 + A180A80551F94235B009DA6C buildActionMask 2147483647 files - 3FBDDA7B081C4662BFB5DD01 + 161E450B8FF641CE87B5D49A + F99424FBB57544709A34EFD2 isa - PBXHeadersBuildPhase + PBXFrameworksBuildPhase runOnlyForDeploymentPostprocessing 0 - A172D07E069B4F009901DD4C + A1DEB3746CC548F28D45865F includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.h + name + KWStub.h path - Pods-specs-OHHTTPStubs.xcconfig + Classes/KWStub.h sourceTree - SOURCE_ROOT - - A18B8C2789934D3BBCB03D23 - - fileRef - 5B8BFCFE37B34B1A884613DF - isa - PBXBuildFile - - A2030B9D25124BCC95352042 - - fileRef - 756B1D81A44742FFB148E500 - isa - PBXBuildFile + <group> - A30872460FBB482F9C99E9E6 + A226DF8C86474203B415F860 fileRef - 25D35DB0053540EBAC39E78A + 32F5F8E4CD0141ED8DDF61DB isa PBXBuildFile - A3FA974DD32E44B7A9F4E41A + A2A7531E7A8F4C52A2ADB1CD includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWMatcher.h + KWChangeMatcher.m path - Kiwi/Classes/KWMatcher.h + Classes/KWChangeMatcher.m sourceTree - SOURCE_ROOT - - A4CDE869765E42D0A1F4C040 - - fileRef - 625877F642B546C98332C80B - isa - PBXBuildFile - - A5E6BDE267B34ADE910FA0E1 - - fileRef - 9C646E20509B411E8D96AEF8 - isa - PBXBuildFile - - A60F44D6383D4E999161CC73 - - fileRef - DE3AF2C0ECE74478AE372972 - isa - PBXBuildFile - - A8B2D6441CFF4B69B1A99622 - - fileRef - 388E29A4E8A248779E285A6F - isa - PBXBuildFile - - A8C43EF137CC4F3BA333C583 - - fileRef - 0953C0DFE8EF41078ADEEF85 - isa - PBXBuildFile + <group> - A8E1F029C40A4982AACF3060 + A3042D81C15D4061A02BA93C includeInIndex 1 @@ -4516,33 +4272,54 @@ name KWContextNode.h path - Kiwi/Classes/KWContextNode.h + Classes/KWContextNode.h sourceTree - SOURCE_ROOT + <group> - A956CB0270644E06904CEBEA + A3AF2442D4D145498D189DBF - includeInIndex - 1 + buildActionMask + 2147483647 + files + + 07ED0CC062E9413EBE684F61 + DE8D30A9406542E3A00DD15B + 9206AC45E82E4853864AEEDF + + isa + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + A447F211D903418BB7A55A82 + + includeInIndex + 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWAfterAllNode.m + KWAsyncVerifier.h path - Kiwi/Classes/KWAfterAllNode.m + Classes/KWAsyncVerifier.h sourceTree - SOURCE_ROOT + <group> - A99F5CCD3883466199ED2B43 + A4AF0D9040AC4B84B5F19209 - fileRef - 2D8DF795D01E4B14B9B183D8 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + Pods-specs-dummy.m + sourceTree + <group> - AA639AD4F034426E9C6EE8B1 + A4D1CAD73C3D4CC1A619E60E includeInIndex 1 @@ -4551,79 +4328,141 @@ lastKnownFileType sourcecode.c.h name - KWReceiveMatcher.h + KWPendingNode.h path - Kiwi/Classes/KWReceiveMatcher.h + Classes/KWPendingNode.h sourceTree - SOURCE_ROOT + <group> - AB42B9C15E974E92A608B517 + A56084030AA446BFA6C42FE4 fileRef - 7C5886BA6BAA43AD96409043 + 3DE9EE5B8184470996D69209 isa PBXBuildFile - AB48F64A57154065AFD79A08 + A6308FE3A02543CC9F6016ED + + buildActionMask + 2147483647 + files + + EDCB18B8E4C3428A8B7CF407 + 6257FBE77DCC4452980D88BA + 99AA68B5B9604ED49DD81630 + + isa + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + A726D955F7B04F43806D724B + + buildConfigurations + + 353636652828443BB26916E5 + 67FC089B3C79470382B8F616 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + A7F958149CD444BABE1E16D9 fileRef - 7A6D92B774934142B6B52E4D + 0EBCE730DDA7482FA5E2777F isa PBXBuildFile - ABA4519A10C240A992DFF2DE + A81D1F70D4B947FA89594682 - includeInIndex - 1 + fileRef + E4745F1F7C20474098A5BAD3 isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSInvocation+KiwiAdditions.h - path - Kiwi/Classes/NSInvocation+KiwiAdditions.h - sourceTree - SOURCE_ROOT + PBXBuildFile - ABB202FBAD074E109CF71566 + A8B4E2A7D222430CBBA95100 - includeInIndex - 1 + baseConfigurationReference + F0B245078FE647C2B4C013B1 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + NO + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 4.0 + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + isa - PBXFileReference - lastKnownFileType - sourcecode.c.h + XCBuildConfiguration name - KWContainStringMatcher.h - path - Kiwi/Classes/KWContainStringMatcher.h - sourceTree - SOURCE_ROOT + Debug - AE75162B43AC4A7BBE8B3567 + A964EE00D9E0466988DB2D5B fileRef - 000DDA3F36E84183865E25F4 + 06D0924645CF44F29A7F8FCB isa PBXBuildFile - AEDA40E015A94B7F9048ED5D + A97D6E772BD74AC6B39DD392 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWStub.h + KWBeforeAllNode.m path - Kiwi/Classes/KWStub.h + Classes/KWBeforeAllNode.m sourceTree - SOURCE_ROOT + <group> + + AA462F62E3D0482B903432B7 + + fileRef + C61CCCAB9CBA47FC8C7F42E3 + isa + PBXBuildFile - AEDCB01F8A1046B4BDAA0A1A + AB213DDBAB104C76A5C4BE43 includeInIndex 1 @@ -4631,123 +4470,97 @@ PBXFileReference lastKnownFileType sourcecode.c.h + name + KiwiConfiguration.h path - Pods-environment.h + Classes/KiwiConfiguration.h sourceTree - SOURCE_ROOT + <group> - AF869EF228F1410B8F36182A + AB98AFA1B8084D109DED77CF fileRef - 055FC09FA8354B4B8F426304 + F9FC745BCFCB4C3D9E0E5F2C isa PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - B088098A6FCF4526B706EBEF + ABDDE5DA869A451CA4ECFFF7 - buildConfigurations - - 8A6E1B25C2534CBCADA35722 - 30C889CB89914BC68C422D9D - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release + fileRef + 604D0E44285B49929F8B5886 isa - XCConfigurationList + PBXBuildFile - B1035189597D4AB486B15922 + ACC0BA8653234D92A6A715C2 - includeInIndex - 1 + fileRef + 8D316B841C9742E0BE03F278 isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - Pods-dummy.m - sourceTree - SOURCE_ROOT + PBXBuildFile - B21BE3A02B9D455EAA686A33 + ACDD2D51B5934070ABD622EB fileRef - 7E20F49EDDA34EF48787B3F1 + 3AAE4842914B427E9703F3EE isa PBXBuildFile - B2260DB1576D469BBD5F3700 + AD1964E3E0B94D4C9E6705E6 fileRef - F0E2D6994CE748838FE6E07C + 03CB4DC62DB343B9A37EC9E1 isa PBXBuildFile - B2C7EC765AF541BE8DB317EF + AD41155C1F6448A590AFD1D0 fileRef - 7D9BFDB69EE049EAA02857C8 + 2A2C2174F4F442038A294FD1 isa PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 + - B47BA84054CC4E8C8029DD6F + AEC0B0C64D0546B0BC0225B0 - includeInIndex - 1 + fileRef + D805D6651D9E492196941382 isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - KWContextNode.m - path - Kiwi/Classes/KWContextNode.m - sourceTree - SOURCE_ROOT + PBXBuildFile - B5D2852DE22D4958B0100918 + AEDE409AC0CC469A92EDAFBC fileRef - 2F2F660DFD54463BA9D9A7BF + 51C6E8DD8F914E249A02D86D isa PBXBuildFile - B5D48DB07DF048EFB6C67C16 + AF9BC13717AC44AD87947134 fileRef - AEDA40E015A94B7F9048ED5D + 1E435A20911E4649B36B21CB isa PBXBuildFile - B5DCCFEA33B048EE8D8816F7 + B011D1E5BF164122904DD8C9 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWBlockNode.m + OHHTTPStubsResponse.h path - Kiwi/Classes/KWBlockNode.m + OHHTTPStubs/OHHTTPStubsResponse.h sourceTree - SOURCE_ROOT - - B691426B5D684E2A9097EF0C - - fileRef - 9FE5A4C83F224D4AB067DB45 - isa - PBXBuildFile + <group> - B7EA61D0925D4F0C832E4BF5 + B099553C7E154649AEEA0E59 includeInIndex 1 @@ -4756,35 +4569,35 @@ lastKnownFileType sourcecode.c.h name - SenTestSuite+KiwiAdditions.h + KWConformToProtocolMatcher.h path - Kiwi/Classes/SenTestSuite+KiwiAdditions.h + Classes/KWConformToProtocolMatcher.h sourceTree - SOURCE_ROOT + <group> - B84A670C25984F7E84EACE3E + B0DE09EF9B424616840103EE includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWBeforeAllNode.m + NSObject+KiwiMockAdditions.h path - Kiwi/Classes/KWBeforeAllNode.m + Classes/NSObject+KiwiMockAdditions.h sourceTree - SOURCE_ROOT + <group> - B924BCB04C5743CE9DF19E3E + B1C0ADC88CC44BC78D3EADF0 fileRef - 223A1477DF814A05BB730288 + 584440BE7F2F49209EDBCE42 isa PBXBuildFile - B9FE69D9E11C46998AC60AD7 + B26B9FA502C74F16832B1233 includeInIndex 1 @@ -4793,137 +4606,43 @@ lastKnownFileType sourcecode.c.h name - KWMatcherFactory.h + KWProbe.h path - Kiwi/Classes/KWMatcherFactory.h + Classes/KWProbe.h sourceTree - SOURCE_ROOT - - BA41BC3D77AB4B4C86BCF1B0 - - buildActionMask - 2147483647 - files - - C80C3B1F97E545FFAEFD03DB - 6783E85750AE4C4F8B415652 - CA4B96D36A5748F2BE01897E - 41F47E5C4F8548AD9A4205A1 - 0FE5CCFA975C4BCBA37997AC - F3B209C4D9014728891BBE36 - 2DC346E40D444B149107F158 - 69ECFB438B2C4BDFBB603B4F - 4C71C2970B4D4955979294B7 - 475FD2E941CB4679AC3B85F3 - C7E784DAA6E94BB9B7C4D334 - DD502AA03DD34936A83F3629 - 319638578ECD461392837CCB - EFFE8DE8DA5041288EEAC0FE - 26997F9AF54445F186B33E81 - 31A5C113F4F44D96A063C878 - 5A6CD3A6B6614990947BAD10 - 716AF9D7BFB3401C9AB5F9B6 - C2447E0CF3CE4F339A1B446D - 09665D148E40438094738FF5 - 2E428323E50E43A58AB779C8 - 356153393B744B82BB4136C0 - 45707E12EE0641979AF86AEF - 009B87A4517C4E49B32C3249 - A1285EB3DE794B289CD97CC5 - 20EBAD06F679446B9038C1F6 - 88CC7FCF02D74A678E5711B1 - 65C0E3C67CEA4691863B66FA - 6A4109E7DDA34915A329FE1C - A18B8C2789934D3BBCB03D23 - 48AE566003704B51BAEBF699 - 4373A6E2D1974C71856CD952 - 61DE25026F864EF0B63B3971 - B2C7EC765AF541BE8DB317EF - ED0CDD4114C04A068DE081A9 - 5E36E1F290EB4D94A815BE1C - 08841FEE42C14F07A9BFC795 - BF621ABCBA5648B7A6C06738 - B924BCB04C5743CE9DF19E3E - C561FA982BE94239BBCAD409 - C8181796E9ED4ECCAFBDF9BF - 93C0C92AA3924FA5B89F18A2 - E69DE3F2ED614874A402AD19 - 59587E7B09B54B78BF6B686B - 7D4351A35EC141DD83D1F45E - 14727A6326874E8DB1C4C3F9 - 30E5C49E00D54F69B8E48149 - 4C63A4539E65495786B6A65E - 532C2C753A844FEDA2F4EB4B - 50DC1D914ADE432CAF534667 - 40B80186D0084BCF9C84BA60 - D67BE482D0BA4C7A87EAA70D - 487988ED33ED45F481A15E07 - FEC5A9A9F26441F3B5FC0615 - EC947BB168B6458F9D8D65BD - 6EEEAE37E68C4BE48D4D1832 - A60F44D6383D4E999161CC73 - CB3B643261D445E59092D8EC - 9EAA82DA07914D83BD3D0C94 - 7FC3B368CE2C4ED592CAE9F9 - F6C83C03AFF94EC2A93F5A82 - 689D623D0E8E4729974FCEDF - F13568DE799748C8B92E8684 - EDB4802914374911B976D1D4 - 202A037C6FBB44BABF42125A - E9D978C8B61B4A42B49348B0 - F0CB55BA16FA4A15AFA408E5 - DE8A0FAB610748A9BDDE7C26 - 87F89C2E24194A10961BC3DF - 238E720EAB654D9D969FC9D7 - 65485A64A4D24C6D8039328A - 8761C020C58243AD98814BA8 - A8B2D6441CFF4B69B1A99622 - 190D54C881E449CD89D8261A - 897C1BEF548F4A859B79E392 - 2DAFDBBA45734E62A17E83F0 - A99F5CCD3883466199ED2B43 - 95A0C3C0193742BB854E9BED - 2BC0148E6B2447809713C40D - B21BE3A02B9D455EAA686A33 - 3C228FEF3ACE4BB192AB3F46 - 07475DD20A27462DB72313F2 - 5BC48A8E9BDF43209E6FD932 - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - BA5DE68D699F42E482480DBD - - fileRef - 1261D92AF3944E9AA65E74D1 - isa - PBXBuildFile + <group> - BAD23D5A146640F4ABFD1C3B + B402548EE7FC4C6A876C4EAB - fileRef - 625877F642B546C98332C80B + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + NSValue+KiwiAdditions.m + path + Classes/NSValue+KiwiAdditions.m + sourceTree + <group> - BB472D7A2DAF4FADAF4FF338 + B46E29B6DFB74C85A48C8820 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWAfterEachNode.m + KWRespondToSelectorMatcher.h path - Kiwi/Classes/KWAfterEachNode.m + Classes/KWRespondToSelectorMatcher.h sourceTree - SOURCE_ROOT + <group> - BB621ACD7F9B4D88BD0A527C + B56C9EC094D74CA3BB71E532 includeInIndex 1 @@ -4932,92 +4651,93 @@ lastKnownFileType sourcecode.c.objc name - KWGenericMatcher.m + KWCaptureSpy.m path - Kiwi/Classes/KWGenericMatcher.m + Classes/KWCaptureSpy.m sourceTree - SOURCE_ROOT + <group> - BC111325EADD49779D5434E1 + B5CB6069A867455BBFEB446A fileRef - 9DA1B56D915548479AAB3AA0 + E4F68BE177384739AFA0B2E7 isa PBXBuildFile - BC26577D7F904EEF82B048FF + B623443CEC4F4A81B706FCA2 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWAny.h + KWHaveValueMatcher.m path - Kiwi/Classes/KWAny.h + Classes/KWHaveValueMatcher.m sourceTree - SOURCE_ROOT + <group> - BC83F1CD8DE64E8EA6B250B6 + B726226B1E3F4B53BED8EE77 - explicitFileType - archive.ar includeInIndex - 0 + 1 isa PBXFileReference + lastKnownFileType + sourcecode.c.h + name + NSValue+KiwiAdditions.h path - libPods.a + Classes/NSValue+KiwiAdditions.h sourceTree - BUILT_PRODUCTS_DIR + <group> - BCFB0CBF2F6C4F55AAE818B5 + B73D89D22B424A09B9953AE9 fileRef - 0F79CA43B2F94A46A6805A04 + 5267CBA8D21040FEBE154A6B isa PBXBuildFile - BD068C43ED654803B8C71995 + B7ABAAE02EAF449FB40C55AE - includeInIndex - 1 + fileRef + A4D1CAD73C3D4CC1A619E60E isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWAfterAllNode.h - path - Kiwi/Classes/KWAfterAllNode.h - sourceTree - SOURCE_ROOT + PBXBuildFile + + B86FF5EE2A02466FBA347F2B + + fileRef + 5885C1F6D9574ADBAB1DDF96 + isa + PBXBuildFile - BD9386C90FE94D4AA11A693D + B8BCE7BC0235479CBBC668D6 fileRef - FB99E112F42B4458A7428CE1 + F0B2101D1C85406EBFA2C9B7 isa PBXBuildFile - BE00DE7B32B243A682DDC187 + B96299F345B749F8A87EDFC4 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWBeWithinMatcher.h + KWUserDefinedMatcher.m path - Kiwi/Classes/KWBeWithinMatcher.h + Classes/KWUserDefinedMatcher.m sourceTree - SOURCE_ROOT + <group> - BF113F4C8D274B2BADE3D699 + BA10F41EC2754278945812C3 includeInIndex 1 @@ -5026,13 +4746,13 @@ lastKnownFileType sourcecode.c.objc name - KWRegularExpressionPatternMatcher.m + NSObject+KiwiStubAdditions.m path - Kiwi/Classes/KWRegularExpressionPatternMatcher.m + Classes/NSObject+KiwiStubAdditions.m sourceTree - SOURCE_ROOT + <group> - BF4F4E14A843446C85BAA992 + BA32173C434F4AFFAC2A69FE includeInIndex 1 @@ -5041,124 +4761,132 @@ lastKnownFileType sourcecode.c.h name - KWReporting.h + KWStringUtilities.h path - Kiwi/Classes/KWReporting.h + Classes/KWStringUtilities.h sourceTree - SOURCE_ROOT + <group> + + BBC65B17FD884D54886B41D7 + + containerPortal + 56671128374E4360A275B2F1 + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + EC1DFB002A1B445EB91488C8 + remoteInfo + Pods-Reachability - BF621ABCBA5648B7A6C06738 + BC7B3D23A9154227AE89E639 fileRef - 1836A8E7BB3340D1BEC5A659 + 2DBC7C45F4E24E5481DB65F5 isa PBXBuildFile - C16216BA42174DE598332FD8 + BCFDD67BF3344A34ADB13924 + + containerPortal + 56671128374E4360A275B2F1 + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + F3A20961FEC8436DAF996DD4 + remoteInfo + Pods-specs-OHHTTPStubs + + BD576C9F5F494723BB82D1C8 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.objc + name + KWBeKindOfClassMatcher.m path - Pods-specs-Kiwi-Private.xcconfig + Classes/KWBeKindOfClassMatcher.m sourceTree - SOURCE_ROOT + <group> - C2447E0CF3CE4F339A1B446D + BD89C0973DDE48398CD6AD0E - fileRef - B5DCCFEA33B048EE8D8816F7 isa - PBXBuildFile + PBXTargetDependency + target + 2B0A0813AF0741DBB91ACC57 + targetProxy + 63D8438322F243D589DFFF74 - C37C48B8EA1E4F679BD0D967 + BE6124AAFF5A45799AF33ACD includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h - name - KWProbe.h + text.plist.xml path - Kiwi/Classes/KWProbe.h + Pods-specs-acknowledgements.plist sourceTree - SOURCE_ROOT + <group> - C39ECDF8F3524523B71BEF0B + BF1A468DD91B4EFAA1EF8ED4 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - OHHTTPStubsResponse.h + KWFutureObject.m path - OHHTTPStubs/OHHTTPStubs/OHHTTPStubsResponse.h + Classes/KWFutureObject.m sourceTree - SOURCE_ROOT + <group> - C3A414A611E34C02B419C3AF + C0389F466CB54F1886C01A90 - baseConfigurationReference - 3B78E950BD1846148855AF6A - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - ARCHS - armv6 armv7 - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Pods-specs-OHHTTPStubs-prefix.pch - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 4.0 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES - + fileRef + C8ABC3F90B5345B5A589CF35 isa - XCBuildConfiguration - name - Release + PBXBuildFile - C3AB70CB973646BAA866BADA + C0C751F3B15B45E1B8FB017C + + fileRef + 8AEB36B21072419BA56F0F7A + isa + PBXBuildFile + + C146634260D14659A0F9A2EC + + explicitFileType + archive.ar + includeInIndex + 0 + isa + PBXFileReference + path + libPods-specs-Kiwi.a + sourceTree + BUILT_PRODUCTS_DIR + + C1E078818B13496C91845F8B + + fileRef + 2B068FD6DC2344B093CF25AC + isa + PBXBuildFile + + C1F0048B94D4428CBD764038 includeInIndex 1 @@ -5167,13 +4895,20 @@ lastKnownFileType sourcecode.c.h name - KWExampleGroupDelegate.h + KWChangeMatcher.h path - Kiwi/Classes/KWExampleGroupDelegate.h + Classes/KWChangeMatcher.h sourceTree - SOURCE_ROOT + <group> + + C25B810667FE4D51A0F8F62E + + fileRef + 6D5F7E43DBC84A86B2E83494 + isa + PBXBuildFile - C4261EBEA1EC4D45B866B139 + C26FA000896A4E34B71C4D3B includeInIndex 1 @@ -5182,71 +4917,86 @@ lastKnownFileType sourcecode.c.h name - KWExistVerifier.h + KWMatcherFactory.h path - Kiwi/Classes/KWExistVerifier.h + Classes/KWMatcherFactory.h sourceTree - SOURCE_ROOT + <group> - C4331BC551114FD2A5514EB1 + C29B57204547435DA2D33954 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWContainStringMatcher.m + KWInvocationCapturer.h path - Kiwi/Classes/KWContainStringMatcher.m + Classes/KWInvocationCapturer.h sourceTree - SOURCE_ROOT + <group> - C4D325A517A448D5AE4E001B + C2A98F24AB5B480E991052A7 fileRef - CC5D0C2202FF42BA946660A4 + 413EF2635C834ED381C27BAA isa PBXBuildFile - C561FA982BE94239BBCAD409 + C2CAFAEFF4F840AC80A8DC17 fileRef - 6F110B5114A54AA18DBA1F34 + EFA5245B07A748A6B204F35F isa PBXBuildFile - C57E700F3D2A4C1784E25C62 + C2E00E00C29249379F52604B + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWBeSubclassOfClassMatcher.m + path + Classes/KWBeSubclassOfClassMatcher.m + sourceTree + <group> + + C321FB84C8354EB39C64A5E5 fileRef - 0225821FFE7D4E9EA2258D18 + 825BF97AAA864CD39CA84D95 isa PBXBuildFile - C587E4E28E77450E8D32A39A + C36DA1A49DFD4F3AA5F1F35C includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWEqualMatcher.m + KWObjCUtilities.h path - Kiwi/Classes/KWEqualMatcher.m + Classes/KWObjCUtilities.h sourceTree - SOURCE_ROOT + <group> - C59D4099268043BFA60EA2A4 + C38CB01C5A53446AB8179F91 fileRef - 625877F642B546C98332C80B + 9D8F977726B447A9A45FA965 isa PBXBuildFile - C61546A3B30A49959059B7D1 + C394BB537EC64D01908F0E5F includeInIndex 1 @@ -5255,82 +5005,85 @@ lastKnownFileType sourcecode.c.h name - KWContainMatcher.h + KWRegularExpressionPatternMatcher.h path - Kiwi/Classes/KWContainMatcher.h + Classes/KWRegularExpressionPatternMatcher.h sourceTree - SOURCE_ROOT - - C64029208A4F4D3BA01157BB - - buildActionMask - 2147483647 - files - - 2F90A978A5FF4521A6E4A2D6 - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 + <group> - C76B4092722943F6B4E00756 + C3BA73B59D894B7CAAE94182 fileRef - D17EA38DAB1A4F5098CC2DB0 + B099553C7E154649AEEA0E59 isa PBXBuildFile - C7E784DAA6E94BB9B7C4D334 + C3D0B4FFAC234C2CBA1A2E55 fileRef - 5CC394709A934094B0826155 + 75DC40E9B66243CBA6E87459 isa PBXBuildFile - C80C3B1F97E545FFAEFD03DB + C4226003BAC24AE4AD5B43CE - fileRef - A956CB0270644E06904CEBEA + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + NSObject+KiwiVerifierAdditions.h + path + Classes/NSObject+KiwiVerifierAdditions.h + sourceTree + <group> - C8181796E9ED4ECCAFBDF9BF + C4C50EB7E44B43129EB97EB8 - fileRef - F8BA36D5DCA14B05B8A62544 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWValue.m + path + Classes/KWValue.m + sourceTree + <group> - C86BB3BCB92D4728B6BCE556 + C4F375FFFEA04228BF826BFA fileRef - 3080884C6C994C5B8835C3ED + 9DE2E3E59AFE40128A1085AB isa PBXBuildFile - C8D1C2966B784FC3BB75747E + C4F74423FD594F9690E835AA fileRef - E638C7BCD02B42149D574241 + F018D64549074ED4B33FE9D9 isa PBXBuildFile - CA4B96D36A5748F2BE01897E + C517DAC6688D466FA2B872F0 fileRef - E1BE3EA864234FCC8E7A943E + 9B8C5FFD54A9478AB9CD060E isa PBXBuildFile - CB3B643261D445E59092D8EC + C583BDB228344690858E04BE fileRef - F5E81EADB49145A3AE70159D + A0B577847C4245EF84CA83C9 isa PBXBuildFile - CBD79DD7CAB9404F836550E6 + C613D1EE68A94DC3BCECB811 includeInIndex 1 @@ -5338,108 +5091,94 @@ PBXFileReference lastKnownFileType sourcecode.c.h - name - NSValue+KiwiAdditions.h path - Kiwi/Classes/NSValue+KiwiAdditions.h + Pods-SocketRocket-prefix.pch sourceTree - SOURCE_ROOT + <group> + + C61690B2DA9C420E93D95AB5 + + buildConfigurationList + 75EC7DB9979B4129BA1F64CD + buildPhases + + 0A183BE4AAFF4F9CA9338B78 + A3AF2442D4D145498D189DBF + + buildRules + + dependencies + + D4AD94C0BD384764A48EE0F6 + BD89C0973DDE48398CD6AD0E + + isa + PBXNativeTarget + name + Pods + productName + Pods + productReference + 372837EDEE934875BF9CC234 + productType + com.apple.product-type.library.static - CC3A4C06B2B34AA58BCD8A6A + C61CCCAB9CBA47FC8C7F42E3 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWItNode.h + KWContainStringMatcher.m path - Kiwi/Classes/KWItNode.h + Classes/KWContainStringMatcher.m sourceTree - SOURCE_ROOT - - CC5D0C2202FF42BA946660A4 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWBeIdenticalToMatcher.h - path - Kiwi/Classes/KWBeIdenticalToMatcher.h - sourceTree - SOURCE_ROOT + <group> - CCAE54C648E04C549E1C1A25 + C61E12726F3B4E0883F3B80C - includeInIndex - 1 + fileRef + D43295C3382F40769D4B4A49 isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - KWBeTrueMatcher.m - path - Kiwi/Classes/KWBeTrueMatcher.m - sourceTree - SOURCE_ROOT + PBXBuildFile - CCD666EBDE1D47BDB32A14E9 + C61F6EAE1FD446BBBFEB84F4 children - 9DA1B56D915548479AAB3AA0 - 88A88235D0A649B7BFC46CCE - C39ECDF8F3524523B71BEF0B - 055FC09FA8354B4B8F426304 + 3289AA81AA354AE88BA98FE9 isa PBXGroup name - OHHTTPStubs + Frameworks sourceTree <group> - CD24AE0879F34FD4B6B2E408 + C6674300683344B1B932330B fileRef - 47A030E9480940B7896ACBF8 + 6D78448E158F49E48C4EDB97 isa PBXBuildFile - CE244AEA34B74D4DA111CDDA - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - Pods-specs-OHHTTPStubs-dummy.m - sourceTree - SOURCE_ROOT - - CF1E2BCA58BB464BAC4A479A + C670E39CDCCA4FE2A3B4D495 + explicitFileType + archive.ar includeInIndex - 1 + 0 isa PBXFileReference - lastKnownFileType - sourcecode.c.objc path - Pods-specs-Kiwi-dummy.m + libPods-specs-OHHTTPStubs.a sourceTree - SOURCE_ROOT + BUILT_PRODUCTS_DIR - D0C72B06C9244DA9931D5344 + C6EA35EC896446D3812BAF66 includeInIndex 1 @@ -5448,121 +5187,92 @@ lastKnownFileType sourcecode.c.objc name - KWStringPrefixMatcher.m - path - Kiwi/Classes/KWStringPrefixMatcher.m - sourceTree - SOURCE_ROOT - - D17EA38DAB1A4F5098CC2DB0 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWBeZeroMatcher.h + OHHTTPStubsResponse.m path - Kiwi/Classes/KWBeZeroMatcher.h + OHHTTPStubs/OHHTTPStubsResponse.m sourceTree - SOURCE_ROOT + <group> - D18F69C55B684CC6A8757B0F + C711B876129844708B7C045C fileRef - B1035189597D4AB486B15922 + 00008FCC38E246728207AFD5 isa PBXBuildFile - D2140D56BD334E97B6829FC2 + C7BD8B46A79D490396651011 - includeInIndex - 1 + buildConfigurationList + 7A2DF566CB4D40D6AEC1E635 + buildPhases + + D5C25A2773DA44729BE1A237 + A6308FE3A02543CC9F6016ED + + buildRules + + dependencies + + 4861FEB6AAA0496BAC78A97E + 04A715A7603D4176BE04DCD7 + isa - PBXFileReference - lastKnownFileType - sourcecode.c.h + PBXNativeTarget name - KWHaveValueMatcher.h - path - Kiwi/Classes/KWHaveValueMatcher.h - sourceTree - SOURCE_ROOT + Pods-specs + productName + Pods-specs + productReference + E14B41E1242149A78CEEF46B + productType + com.apple.product-type.library.static - D21417EA3BC440C68752449A + C7C37F37CF42480A906C5326 fileRef - 5E6FAEC9EA9442EAB40239E2 + 5C556B2B2E4B4C99BEEF778A isa PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 + - D3ED1121D78348A7BA17EB97 - - buildActionMask - 2147483647 - files - - 39447B95C5DB426295DE2531 - AF869EF228F1410B8F36182A - 5096A63C0CBD49DA96E42B59 - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - D4824E5076DD49D6BB3D0985 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSInvocation+KiwiAdditions.m - path - Kiwi/Classes/NSInvocation+KiwiAdditions.m - sourceTree - SOURCE_ROOT - - D53A13362C7D4D81A59C0967 + C7E4A4C9979040609B4C2B30 baseConfigurationReference - 6FFE29E80EBF4AEA90B19FD7 + 2910EBE586224DBFB6C88644 buildSettings ALWAYS_SEARCH_USER_PATHS NO - ARCHS - armv6 armv7 COPY_PHASE_STRIP - NO + YES DSTROOT /tmp/xcodeproj.dst GCC_C_LANGUAGE_STANDARD gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 GCC_PRECOMPILE_PREFIX_HEADER YES - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO + GCC_PREFIX_HEADER + Pods-specs-OHHTTPStubs-prefix.pch GCC_VERSION com.apple.compilers.llvm.clang.1_0 INSTALL_PATH $(BUILT_PRODUCTS_DIR) IPHONEOS_DEPLOYMENT_TARGET 4.0 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + OTHER_LDFLAGS PRODUCT_NAME @@ -5573,50 +5283,43 @@ iphoneos SKIP_INSTALL YES + VALIDATE_PRODUCT + YES isa XCBuildConfiguration name - Debug + Release - D669F81889054783B93FF400 + C81D7E013F2944A9BD99B08A includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWEqualMatcher.h + KWBeIdenticalToMatcher.m path - Kiwi/Classes/KWEqualMatcher.h + Classes/KWBeIdenticalToMatcher.m sourceTree - SOURCE_ROOT - - D67BE482D0BA4C7A87EAA70D - - fileRef - 16A37C918B734529B369D4C6 - isa - PBXBuildFile + <group> - D6BE811CAAA440A3842014B6 + C8846FF4E5F441BFA5A24C1A includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - NSObject+KiwiMockAdditions.m + text.xcconfig path - Kiwi/Classes/NSObject+KiwiMockAdditions.m + Pods-specs-OHHTTPStubs.xcconfig sourceTree - SOURCE_ROOT + <group> - D7A606855D71448889BA62E8 + C8ABC3F90B5345B5A589CF35 includeInIndex 1 @@ -5625,76 +5328,136 @@ lastKnownFileType sourcecode.c.objc name - KWSpec.m + KWStringPrefixMatcher.m path - Kiwi/Classes/KWSpec.m + Classes/KWStringPrefixMatcher.m sourceTree - SOURCE_ROOT + <group> + + C8CDCB008FF14C7AB2B889F5 + + fileRef + 72493B432DC84B54911CF99C + isa + PBXBuildFile + + C92940422BBD4B03848CE3FD + + fileRef + 089E653D5D3A4B8BA7C7D289 + isa + PBXBuildFile + + C9710E39B89B484698C13C05 + + fileRef + D9AACE1F3B7E4BFAB62409C2 + isa + PBXBuildFile + + C99F60013B7E49DABC486DF2 + + fileRef + 1ED7F16EB8164913B555296D + isa + PBXBuildFile - D81529FB1A9544BB9E204B79 + CA11F1F6E42C4234A140F524 fileRef - 458BA5E50EDE46CB88EFEF52 + 162D4F7B9CFC4F40B3340617 isa PBXBuildFile - D829F232EF4846C0B0345C19 + CA4C28BDEEC74F2AA95E37EA fileRef - 1966C10EA41E45A383BF2968 + 12ADDEC1687247D698DF8292 isa PBXBuildFile - DA2BB1A3C062453A9E7BF2A3 + CA508CC131164E5BB8315DD4 + baseConfigurationReference + 378508C74CAA4E29A75BE680 buildSettings + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + YES + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-SocketRocket-prefix.pch + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) IPHONEOS_DEPLOYMENT_TARGET 4.0 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + VALIDATE_PRODUCT + YES isa XCBuildConfiguration name Release - DA6C7EF21E1147E496C92DFE + CBC8D04048CE4414A9FF8861 - includeInIndex - 1 + fileRef + 2F348541062B48A69CC5EB14 isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - SenTestSuite+KiwiAdditions.m - path - Kiwi/Classes/SenTestSuite+KiwiAdditions.m - sourceTree - SOURCE_ROOT + PBXBuildFile - DA9CE1E2BAE34B4A8B93D8F5 + CCBF3A07F47D4F4D8047A858 fileRef - 131420174C014CC0A4B8AED3 + DA5501096F7B44398D4723E5 isa PBXBuildFile - DBFEC935A2714BFB905BB101 + CDA62D88D04249F48860B07F includeInIndex 1 isa PBXFileReference lastKnownFileType - wrapper.framework + sourcecode.c.h name - CFNetwork.framework + KWMessagePattern.h path - Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/System/Library/Frameworks/CFNetwork.framework + Classes/KWMessagePattern.h sourceTree - DEVELOPER_DIR + <group> - DC2FB9B0E1464FFCAE04D560 + CE42CCE58B754C7B8408D3E0 includeInIndex 1 @@ -5703,135 +5466,28 @@ lastKnownFileType sourcecode.c.h name - KWMatchers.h + NSNumber+KiwiAdditions.h path - Kiwi/Classes/KWMatchers.h + Classes/NSNumber+KiwiAdditions.h sourceTree - SOURCE_ROOT + <group> - DD4533FB2A444F238D167711 + CEDA435F85FB4EC2AC7E3A9D - buildActionMask - 2147483647 - files - - 72A6CB98E8354E50AB0F1D43 - A5E6BDE267B34ADE910FA0E1 - A2030B9D25124BCC95352042 - 791BE870AB3443A791EB4141 - 5F49EA6A860E46F0B96B2386 - 1D987852AAF1403CBE5A315B - E40BD30345B745D491AA11D6 - 0C3B4B22FAB643B78F0FAD99 - AB48F64A57154065AFD79A08 - DA9CE1E2BAE34B4A8B93D8F5 - 1ACE630F671D49D3BAE64306 - 3627A09A59E04E4BBE9D3DA9 - C4D325A517A448D5AE4E001B - FCD9238CFF644115B62A2890 - 093D16518B924407BD3133F0 - 2A1CE86002FC46128B0EC7F1 - 5FE55B0238E24108BE1069DD - 1875CF990A3D4041BB0F8CCA - ECA58E99700E4B73BA6B0A41 - 9EB757B2697E46C89EBC62D0 - C76B4092722943F6B4E00756 - FC733740CC7B468F875CF704 - BD9386C90FE94D4AA11A693D - 727250DF6E2A4596A3E018FD - 78F2FD7527F04C68897580D6 - 376D5CBD49574D7C8B102AE0 - AE75162B43AC4A7BBE8B3567 - 44BCC544D3B94617AC91D08E - 9681EC415AF94E328E756293 - 8E34AA0DB2E440C28FDA4EA7 - 142FA58830D64CE39FEF40B2 - 2DDA3EC479904DC487F80E2D - 80FF6F855710472F80BD059D - 40D7030FE86145B38E4CF7EB - C8D1C2966B784FC3BB75747E - 17EBC0A278B84C06972CEC86 - 8745F2EC1BA44654AB91AC78 - 1581FACD930B4176B4F756A6 - 022EE64F38224E26B5DC5F1E - AB42B9C15E974E92A608B517 - 072AA58ED0364347AC68B566 - 18155CF64FBB467C8B0B7A77 - 341A31ECC2E84639856C9C23 - DD9EE5C4CD254AD7AA892B46 - EE8A7BADEB744484AA5440FF - 75EE950458C94FC7A5E4DD47 - 1B5653014A834720B72E3B9B - 99A4213D4B0F40A79555B429 - 4289EC38FDB34B3FAD4713D2 - 93DC1D2DE66D47B6838B9A88 - 5340B9BB33D3456F918D2503 - E81B1FBB6D524D70AEAD281A - CD24AE0879F34FD4B6B2E408 - E9FF99E934DB45D8A1E81186 - 03BA55ECD1FB466E9E987E1E - 226F7DA97B5B4D399E0C1B37 - FF729DD1F92641BC91B2ACEB - BA5DE68D699F42E482480DBD - 91406FB0E85A4BAABA435D5A - 2438A481705B47BF871A4F0F - A8C43EF137CC4F3BA333C583 - 9DAF92FDE4954B6ABCB9CA46 - 093B6E83497241BAA4703A0F - 9041F24FC7F643F6947217EC - 166F039443B2431AAFEFBEB4 - 2F1B3CB422A347D4B7360CAA - 657A9DDD284B4AE6AE5D289B - 245FF8F6735E4CCBA4CC749F - 7B70632E9CF943D09CB064CF - 007D6A8BFFE2401D99D28963 - FE8C7753DEB34A56AA8631A1 - D21417EA3BC440C68752449A - E87AAA47E8F342DAA2AD86AF - B2260DB1576D469BBD5F3700 - 2A545C2E7E134D1D87B6F30B - 580EA428BAB346B5A621EDFE - 7B49607B802643E2B5A1AEE0 - C57E700F3D2A4C1784E25C62 - B5D48DB07DF048EFB6C67C16 - C86BB3BCB92D4728B6BCE556 - 0993C03064C746EBB66DBB7F - 2E3D3786DF1548D0902F607E - EDAC8BD58E4846C1B56C0E7C - BCFB0CBF2F6C4F55AAE818B5 - 082CB756DEA34ABD8D511FD6 - 6596C90DF3734B2B9868C438 - D829F232EF4846C0B0345C19 - 3DEC7F57668B418B9377DDCF - F7189C0A9EB44E2D90EF744D - B5D2852DE22D4958B0100918 - B691426B5D684E2A9097EF0C - E57AF64B905B454D8930E4C4 - 75EAC65B1E264D9183BDD767 - 9E57E24A0FB44DDDB0B43C58 - E09F9260964E422DB2EF2EC9 - 1443E13311B7461DA5208F46 - - isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - DD502AA03DD34936A83F3629 - - fileRef - 340DF864C1BA4D1EABD936C6 - isa - PBXBuildFile - - DD9EE5C4CD254AD7AA892B46 - - fileRef - 8B753A6C511E40CE84466C07 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWProbePoller.m + path + Classes/KWProbePoller.m + sourceTree + <group> - DE3AF2C0ECE74478AE372972 + CEE65C51659C4068A1217618 includeInIndex 1 @@ -5840,13 +5496,13 @@ lastKnownFileType sourcecode.c.objc name - KWRaiseMatcher.m + KWCallSite.m path - Kiwi/Classes/KWRaiseMatcher.m + Classes/KWCallSite.m sourceTree - SOURCE_ROOT + <group> - DE4AAF571A1D40AD82280B3C + D0AECFFEA1B344FEBD6CD493 includeInIndex 1 @@ -5855,102 +5511,114 @@ lastKnownFileType sourcecode.c.h name - NSObject+KiwiStubAdditions.h + KWFutureObject.h path - Kiwi/Classes/NSObject+KiwiStubAdditions.h + Classes/KWFutureObject.h sourceTree - SOURCE_ROOT + <group> + + D1CD3A46930647B5886DEF53 + + fileRef + B26B9FA502C74F16832B1233 + isa + PBXBuildFile - DE8A0FAB610748A9BDDE7C26 + D2343FAB7B1047CFA406CFFD fileRef - 64DB77C0D1CD4367A08FCDDF + 5A5905FA9EE947969254BA7E isa PBXBuildFile - DE961CA58FD34E38BD574C33 + D24895EE44C64739B92003F2 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWBeSubclassOfClassMatcher.h + KWBeBetweenMatcher.m path - Kiwi/Classes/KWBeSubclassOfClassMatcher.h + Classes/KWBeBetweenMatcher.m sourceTree - SOURCE_ROOT + <group> - DEE08E213E904196BEBF63D7 + D2540CBA91984C1BBC3BBDD0 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWExistVerifier.m + KWTestCase.h path - Kiwi/Classes/KWExistVerifier.m + Classes/KWTestCase.h sourceTree - SOURCE_ROOT + <group> + + D301190CE0A04B90B00616D1 + + fileRef + 99E7EBCA9E944975BF10B11E + isa + PBXBuildFile - DF8B54EC0E37483AA313BA61 + D43295C3382F40769D4B4A49 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KiwiMacros.h + KWRaiseMatcher.m path - Kiwi/Classes/KiwiMacros.h - sourceTree - SOURCE_ROOT - - E05A1DAF02EC4B9694DF2D74 - - children - - 8777FF45154A42B2948CA353 - 428A8EB78BC9465BB54D8B36 - 9F597748B21C42CEBCD46279 - 0201529585604419A1AE4E4D - 07758B687044417B88378C7A - - isa - PBXGroup + Classes/KWRaiseMatcher.m sourceTree <group> - E09F9260964E422DB2EF2EC9 + D4AD94C0BD384764A48EE0F6 - fileRef - CBD79DD7CAB9404F836550E6 isa - PBXBuildFile + PBXTargetDependency + target + EC1DFB002A1B445EB91488C8 + targetProxy + BBC65B17FD884D54886B41D7 - E12AE8C526574ECB927D3427 + D5192A48425B4D3CB9F20968 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h - name - KWUserDefinedMatcher.h + text.script.sh path - Kiwi/Classes/KWUserDefinedMatcher.h + Pods-resources.sh sourceTree - SOURCE_ROOT + <group> + + D5C25A2773DA44729BE1A237 + + buildActionMask + 2147483647 + files + + 41A83B1724544619BA12767E + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 - E1BE3EA864234FCC8E7A943E + D5E6437F57824CEE9F5A43F2 includeInIndex 1 @@ -5959,115 +5627,135 @@ lastKnownFileType sourcecode.c.objc name - KWAny.m + KWHaveMatcher.m path - Kiwi/Classes/KWAny.m + Classes/KWHaveMatcher.m sourceTree - SOURCE_ROOT + <group> - E40BD30345B745D491AA11D6 + D5FB4B832CEB44AE8CDF093D fileRef - BC26577D7F904EEF82B048FF + 9E76DADD9AEB4D32961FD45B isa PBXBuildFile - E57AF64B905B454D8930E4C4 + D61308BAF91A4096A32420B5 fileRef - DE4AAF571A1D40AD82280B3C + B96299F345B749F8A87EDFC4 isa PBXBuildFile - E5918B17FBEF460AADB6F368 + D64720DD20764A37837532B5 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWMatchers.m + KWCaptureSpy.h path - Kiwi/Classes/KWMatchers.m + Classes/KWCaptureSpy.h sourceTree - SOURCE_ROOT + <group> - E638C7BCD02B42149D574241 + D6D679299D0F4360A4527C57 - includeInIndex - 1 + buildActionMask + 2147483647 + files + + AD41155C1F6448A590AFD1D0 + E67A47AF1E3C40AC92E00009 + C7C37F37CF42480A906C5326 + 1498854BD2F840EF93503103 + isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWExample.h - path - Kiwi/Classes/KWExample.h - sourceTree - SOURCE_ROOT + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 - E68EBB138DEF47A6A39BBE69 + D748FE8C912848879ADDC40A includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc + name + KWBeZeroMatcher.m path - Pods-specs-environment.h + Classes/KWBeZeroMatcher.m sourceTree - SOURCE_ROOT + <group> - E69DE3F2ED614874A402AD19 + D779FBD2D5914DEA9E408F4A fileRef - 51F0BE639B794FCE8FD932D8 + CDA62D88D04249F48860B07F isa PBXBuildFile - E7C504DF53524583AA9E8BEF + D7E621A17464496D826E0131 + + children + + 4CD04D1D584F451FB2F326EF + 5DD5F28EF02942E3B404B619 + B011D1E5BF164122904DD8C9 + C6EA35EC896446D3812BAF66 + DDD79CDD68F542BC9AE21C7D + + isa + PBXGroup + name + OHHTTPStubs + path + OHHTTPStubs + sourceTree + <group> + + D805D6651D9E492196941382 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWItNode.m + NSInvocation+OCMAdditions.h path - Kiwi/Classes/KWItNode.m + Classes/NSInvocation+OCMAdditions.h sourceTree - SOURCE_ROOT - - E81B1FBB6D524D70AEAD281A - - fileRef - 575696B34CB24CE999EC340B - isa - PBXBuildFile + <group> - E87AAA47E8F342DAA2AD86AF + D896ABBE403F47C18F00DE7C - fileRef - BF4F4E14A843446C85BAA992 + buildConfigurations + + 8458DA3FD1DD41B1AAFD05CC + C7E4A4C9979040609B4C2B30 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release isa - PBXBuildFile + XCConfigurationList - E952D13F467343DD8D1A3302 + D9A0A143EC1C4C43B6E5CC36 baseConfigurationReference - C16216BA42174DE598332FD8 + 378508C74CAA4E29A75BE680 buildSettings ALWAYS_SEARCH_USER_PATHS NO - ARCHS - armv6 armv7 COPY_PHASE_STRIP NO DSTROOT @@ -6081,7 +5769,7 @@ GCC_PRECOMPILE_PREFIX_HEADER YES GCC_PREFIX_HEADER - Pods-specs-Kiwi-prefix.pch + Pods-SocketRocket-prefix.pch GCC_PREPROCESSOR_DEFINITIONS DEBUG=1 @@ -6111,7 +5799,7 @@ name Debug - E9ADDCFD2F8241DEAE01C976 + D9AACE1F3B7E4BFAB62409C2 includeInIndex 1 @@ -6120,55 +5808,56 @@ lastKnownFileType sourcecode.c.h name - KWExampleNode.h + NSInvocation+KiwiAdditions.h path - Kiwi/Classes/KWExampleNode.h + Classes/NSInvocation+KiwiAdditions.h sourceTree - SOURCE_ROOT + <group> - E9C914CC13514473A8D69DE4 + DA5501096F7B44398D4723E5 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h + name + KWAny.h path - Pods-Reachability-dummy.m + Classes/KWAny.h sourceTree - SOURCE_ROOT - - E9D978C8B61B4A42B49348B0 - - fileRef - 0BE63869164546C3BF6343DA - isa - PBXBuildFile + <group> - E9F4040FDC9D40A8B360155D + DB834F3AE66E43ADBF4E3DF1 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWCountType.h + KWExampleSuite.m path - Kiwi/Classes/KWCountType.h + Classes/KWExampleSuite.m sourceTree - SOURCE_ROOT + <group> - E9FF99E934DB45D8A1E81186 + DCFDE749B62C4EB7B4EFB859 - fileRef - CC3A4C06B2B34AA58BCD8A6A + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-Reachability-Private.xcconfig + sourceTree + <group> - EC732E0F175643EE9CCF1ED0 + DD3F8D69D1D742269C7B8923 includeInIndex 1 @@ -6177,83 +5866,64 @@ lastKnownFileType sourcecode.c.h name - KWMatchVerifier.h + KWIntercept.h path - Kiwi/Classes/KWMatchVerifier.h + Classes/KWIntercept.h sourceTree - SOURCE_ROOT - - EC947BB168B6458F9D8D65BD - - fileRef - 491F3A30336742C09363FFFB - isa - PBXBuildFile + <group> - ECA58E99700E4B73BA6B0A41 + DD4F5D6A0D4943DCB890E6DB fileRef - FC28FBB6542E431491C4A04A + 9CF86F29D3E24EACA76BA39D isa PBXBuildFile - ED0883BBB05E49E0B2A79C2A + DDD79CDD68F542BC9AE21C7D - includeInIndex - 1 + children + + C8846FF4E5F441BFA5A24C1A + 2910EBE586224DBFB6C88644 + 72493B432DC84B54911CF99C + 14723A73BEFA41B8B500CC76 + isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc + PBXGroup name - KWMatcherFactory.m - path - Kiwi/Classes/KWMatcherFactory.m + Support Files sourceTree SOURCE_ROOT - ED0CDD4114C04A068DE081A9 + DE5CD632034B46428537883D fileRef - 154A27ABE58A45078F4BA286 + 32FEA4647D024A709AB9FA41 isa PBXBuildFile - ED71BFBB36B54EF1B9A1B824 - - containerPortal - 0777BA3BB9584122ACE4EE63 - isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - 81CAD16CBB3143C8A5F918C4 - remoteInfo - Pods-Reachability - - EDAC8BD58E4846C1B56C0E7C + DE81BD24B7FE4C299F6C4D3B fileRef - 3AFF981E900D47C1B5E326A5 + AB213DDBAB104C76A5C4BE43 isa PBXBuildFile - EDB4802914374911B976D1D4 + DE8D30A9406542E3A00DD15B fileRef - D0C72B06C9244DA9931D5344 + 6D006AA68F5343FC87E29953 isa PBXBuildFile - EE8A7BADEB744484AA5440FF + DF3FE6D6EE2F4ED6B1A52919 fileRef - EF292CE4724A422BA82C59B0 + E3E945FC487A48D78155FC44 isa PBXBuildFile - EF292CE4724A422BA82C59B0 + E012578A4B604202A3867FC7 includeInIndex 1 @@ -6262,96 +5932,65 @@ lastKnownFileType sourcecode.c.h name - KWFutureObject.h + KWBeforeAllNode.h path - Kiwi/Classes/KWFutureObject.h + Classes/KWBeforeAllNode.h sourceTree - SOURCE_ROOT + <group> - EF36D6613CF148BCB339F4FD + E0F72EF850DD4C8F9533D52E - baseConfigurationReference - 3B78E950BD1846148855AF6A - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - ARCHS - armv6 armv7 - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Pods-specs-OHHTTPStubs-prefix.pch - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 4.0 - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - + includeInIndex + 1 isa - XCBuildConfiguration - name - Debug + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + Pods-Reachability-dummy.m + sourceTree + <group> - EF4179F378294E3EB69819FE + E11930F907594C8D9014BC2D - buildConfigurationList - 66D5F70B92834CDF8FEC9773 - buildPhases - - D3ED1121D78348A7BA17EB97 - 213298167DAC47C090CF05BD - F5CD4FA62876454EADDD15E3 - - buildRules - - dependencies - + fileRef + 0DE613D5FBC442BEA676C2DF isa - PBXNativeTarget - name - Pods-specs-OHHTTPStubs - productName - Pods-specs-OHHTTPStubs - productReference - 1E88DB2C638C45869220B46C - productType - com.apple.product-type.library.static + PBXBuildFile + + E14B41E1242149A78CEEF46B + + explicitFileType + archive.ar + includeInIndex + 0 + isa + PBXFileReference + path + libPods-specs.a + sourceTree + BUILT_PRODUCTS_DIR + + E16E12DC32F348F3B6B429A2 + + fileRef + 58B96E09E6C9433FA96FFB68 + isa + PBXBuildFile - EF41A75BFE7243CAA9FF1DD3 + E2859CB847C14135B77610C4 + + fileRef + 2DB0F5A2BA0241F5BDFE8B02 + isa + PBXBuildFile + + E2975C47AF16443685905F4B buildConfigurations - 9E95F1093E64439FAF91A903 - D53A13362C7D4D81A59C0967 + 50B71BCF9B254AE3A3AEE204 + 2AB45C1EB166493E9F3E11A8 defaultConfigurationIsVisible 0 @@ -6360,7 +5999,207 @@ isa XCConfigurationList - EFFB43BEB94748098A56A500 + E2A304E02D85459B82F01B8B + + fileRef + 9049A5FFCA564EA7A7581376 + isa + PBXBuildFile + + E3C5E4D8B47043ABB6B3476D + + children + + 0D35278FB73C48B583F219DA + 99E7EBCA9E944975BF10B11E + 02917EAEA3E74E9FB9A54260 + 1B7738AF037D4A02B7D6F74D + DA5501096F7B44398D4723E5 + 2D75D4F6472346F898D2702B + A447F211D903418BB7A55A82 + 00008FCC38E246728207AFD5 + 76146A38D348416F98A7F7E4 + D24895EE44C64739B92003F2 + 6D78448E158F49E48C4EDB97 + 64A8529690894744B540B826 + 23753E7755924ADB9F64523F + C81D7E013F2944A9BD99B08A + 0DE613D5FBC442BEA676C2DF + BD576C9F5F494723BB82D1C8 + 12ADDEC1687247D698DF8292 + 67AA976E7118427D98F0C8F1 + ED0060EEC4F940649B47D902 + 5D5449014E644CFB98449F5F + 5DFEFC48FF144766B5D6B189 + 521981D242014582BC666854 + 3B87D4FD143E4393A97CE9EE + C2E00E00C29249379F52604B + 2CE302F0CDD74C84BBC8BD22 + 846E715C2E6A471D8F5AED4B + 05203007927E4DE5B8CB91FF + 85B7625F9D2942609C2C76F0 + 0EBA34AEF95C4A46A6CE35CA + D748FE8C912848879ADDC40A + E012578A4B604202A3867FC7 + A97D6E772BD74AC6B39DD392 + 7E9B84AAFAAD46289D3AFE98 + 0B780B1BFAED4F2FAFDEB736 + 6939898846124193BE662AED + 72F4161EAD3744C88B9D32E4 + 2C887C3ED8A344B9B6AE0E3D + 9688D932103B4EB594B1C0C4 + 32BAB6074DFA4FA69DFF7572 + EDC2AAC8F16143BA965323D3 + 735647AF52024604987B0174 + CEE65C51659C4068A1217618 + D64720DD20764A37837532B5 + B56C9EC094D74CA3BB71E532 + C1F0048B94D4428CBD764038 + A2A7531E7A8F4C52A2ADB1CD + B099553C7E154649AEEA0E59 + 65EDB901E0CA4106A5D94BCC + 996DF26A178C4391A1E1F3CA + EFA5245B07A748A6B204F35F + 2193788D34E94DBE9C2953A1 + C61CCCAB9CBA47FC8C7F42E3 + A3042D81C15D4061A02BA93C + 3074EEEC4A0248F3AD09E672 + 49362D1BDF434C2681D9EA73 + 159C53CF9F5D4E8B8056AD62 + 79A0E4CBBBAB48E29B02BA2F + 38F5582CADE24337B8B83E91 + 1DBCF24C3397436A93F8209F + 40E2BE0176B3470EA948A4B8 + F816B0144B824DD69768CA8C + 9EB9DAF99353458F9805E406 + 721D7E86FD62421A980B009D + 2F2420CB68A34CA1941D6309 + 0B880FCBE6804AE59CEE3489 + F9FC745BCFCB4C3D9E0E5F2C + 1AB5C366EF3549C199A34EBA + DB834F3AE66E43ADBF4E3DF1 + 03CB4DC62DB343B9A37EC9E1 + 9DE2E3E59AFE40128A1085AB + 3F1F4731EFF3438BB47C828C + 51C6E8DD8F914E249A02D86D + 2F348541062B48A69CC5EB14 + F7C250808FBE4D2096BAF6C4 + FBE82AE05AA74A22B1E0CCDD + D0AECFFEA1B344FEBD6CD493 + BF1A468DD91B4EFAA1EF8ED4 + 32FEA4647D024A709AB9FA41 + 9AE9BA613ED2424F9DECFF79 + F0B2101D1C85406EBFA2C9B7 + 0B8425E1BC32490B868E9C00 + 2DBC7C45F4E24E5481DB65F5 + FEB66E56A4A64C25BBAFE4D2 + 9049A5FFCA564EA7A7581376 + D5E6437F57824CEE9F5A43F2 + 1E435A20911E4649B36B21CB + B623443CEC4F4A81B706FCA2 + 93063D4333F74DB8991E0B6D + 25DB25583C0A41EB85B99372 + DD3F8D69D1D742269C7B8923 + 4D1208DB7BC1462299460C06 + C29B57204547435DA2D33954 + 604D0E44285B49929F8B5886 + 5468E232AFE944D09BC96C40 + EA5563D0777946FBAEF0B6EB + 58B96E09E6C9433FA96FFB68 + 7C92B8C48626490FB1D72A56 + 435DA66FF7A747009B18683B + 9539F6C43A3441FF9D78F53D + C26FA000896A4E34B71C4D3B + 24756F2002E14C31A215BC84 + F018D64549074ED4B33FE9D9 + A0B577847C4245EF84CA83C9 + 2B068FD6DC2344B093CF25AC + CDA62D88D04249F48860B07F + 7B891F3D4BD24A3AA32A0E14 + 6BCCA55C01E6486D9E59A6F2 + 5A5905FA9EE947969254BA7E + 8AEB36B21072419BA56F0F7A + 5885C1F6D9574ADBAB1DDF96 + 508294BD6D4A48588D9D147E + 4AA7720CA1EC4EB4B2EE6F86 + 06D0924645CF44F29A7F8FCB + C36DA1A49DFD4F3AA5F1F35C + E3E945FC487A48D78155FC44 + A4D1CAD73C3D4CC1A619E60E + 089E653D5D3A4B8BA7C7D289 + B26B9FA502C74F16832B1233 + 110FE985B49041708D97AF74 + CEDA435F85FB4EC2AC7E3A9D + 9CF86F29D3E24EACA76BA39D + D43295C3382F40769D4B4A49 + 22736026782A43489D60A3F0 + 79A57B9FECCF46C583B20ECD + E4745F1F7C20474098A5BAD3 + 8D316B841C9742E0BE03F278 + C394BB537EC64D01908F0E5F + E4F68BE177384739AFA0B2E7 + 1E48EA6CC0AA429083E39A71 + B46E29B6DFB74C85A48C8820 + F01CE9876D9E4C0CA3DACA58 + 1AB5DA2BA8F84204A5C26473 + 3A5ECAA3423B4A2BB766BAF0 + E8BDD58964874D378CD8BE87 + 9E76DADD9AEB4D32961FD45B + 1F7C580652F24C0D94721E40 + C8ABC3F90B5345B5A589CF35 + BA32173C434F4AFFAC2A69FE + 413EF2635C834ED381C27BAA + A1DEB3746CC548F28D45865F + 17D8EE657E8945FFB655C25E + 584440BE7F2F49209EDBCE42 + 9B8C5FFD54A9478AB9CD060E + D2540CBA91984C1BBC3BBDD0 + 7F06775D39F24B249E7E9122 + 6D60DBF99A7744EB8DD6EC94 + B96299F345B749F8A87EDFC4 + 911DDD43E4EC457F86209F2F + C4C50EB7E44B43129EB97EB8 + 5267CBA8D21040FEBE154A6B + EC5B33E0DD6646B1BD3245B7 + 162D4F7B9CFC4F40B3340617 + 9D8F977726B447A9A45FA965 + 6D5F7E43DBC84A86B2E83494 + AB213DDBAB104C76A5C4BE43 + 2233F66196FD4088AB894F50 + D9AACE1F3B7E4BFAB62409C2 + 850FB39AB0D94A0F85DB45DA + D805D6651D9E492196941382 + 7F4FEB6A55C74466BE5510EC + 5E36D1AD183C4E52B4BE4A4F + 62870C1C913F4CFE9EABF48D + CE42CCE58B754C7B8408D3E0 + 9D11BEEFD4D049AFA6B3BA0D + B0DE09EF9B424616840103EE + 303AC2C4EDC24B33A809F7BD + 83A7D77F40F04C81AD0A1890 + 4F52B77D3E4649088886C202 + 99C5C695F3D5406483F36D7B + BA10F41EC2754278945812C3 + C4226003BAC24AE4AD5B43CE + 75DC40E9B66243CBA6E87459 + 32F5F8E4CD0141ED8DDF61DB + 825BF97AAA864CD39CA84D95 + B726226B1E3F4B53BED8EE77 + B402548EE7FC4C6A876C4EAB + 770C71317885455D98F07999 + 1ED7F16EB8164913B555296D + 8E90678CC8AF406290F5EC5E + + isa + PBXGroup + name + Kiwi + path + Kiwi + sourceTree + <group> + + E3E945FC487A48D78155FC44 includeInIndex 1 @@ -6368,81 +6207,84 @@ PBXFileReference lastKnownFileType sourcecode.c.objc + name + KWObjCUtilities.m path - Pods-SocketRocket-dummy.m + Classes/KWObjCUtilities.m sourceTree - SOURCE_ROOT + <group> - EFFE8DE8DA5041288EEAC0FE + E455A33674124E3CAD9FCC4E fileRef - 8704BD946CE240C6ACE9CA77 + 3F1F4731EFF3438BB47C828C isa PBXBuildFile - F0531BAE563D403FBDFF4C89 + E4745F1F7C20474098A5BAD3 - buildConfigurationList - 1EB8ECB08E9140D59F618D7F - buildPhases - - BA41BC3D77AB4B4C86BCF1B0 - 8D0836541C014EC7BEB46CD0 - DD4533FB2A444F238D167711 - - buildRules - - dependencies - + includeInIndex + 1 isa - PBXNativeTarget + PBXFileReference + lastKnownFileType + sourcecode.c.h name - Pods-specs-Kiwi - productName - Pods-specs-Kiwi - productReference - 5E15AB3896BE4E7287F8A8C0 - productType - com.apple.product-type.library.static + KWRegisterMatchersNode.h + path + Classes/KWRegisterMatchersNode.h + sourceTree + <group> - F05F8DD51A4049A5A374D3E4 + E4F68BE177384739AFA0B2E7 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWBeforeAllNode.h + KWRegularExpressionPatternMatcher.m path - Kiwi/Classes/KWBeforeAllNode.h + Classes/KWRegularExpressionPatternMatcher.m sourceTree - SOURCE_ROOT + <group> - F074520187D1417789088DDA + E50BEEB09DEE4E46B1E828AF - buildActionMask - 2147483647 - files - - C59D4099268043BFA60EA2A4 - 6984341C394F41288905E2CC - A1223FACF3914D50B676FF4E - + includeInIndex + 1 isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXFileReference + name + base64.c + path + SocketRocket/base64.c + sourceTree + <group> + + E648256A1A8B4BF0AFFC0DC8 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + Pods-Reachability-prefix.pch + sourceTree + <group> - F0CB55BA16FA4A15AFA408E5 + E67A47AF1E3C40AC92E00009 fileRef - 8ED87155D0E546AD8A384DC0 + 7CB7012D77874A34B1B1C375 isa PBXBuildFile - F0E2D6994CE748838FE6E07C + E8BDD58964874D378CD8BE87 includeInIndex 1 @@ -6451,51 +6293,116 @@ lastKnownFileType sourcecode.c.h name - KWRespondToSelectorMatcher.h + KWStringContainsMatcher.h path - Kiwi/Classes/KWRespondToSelectorMatcher.h + Classes/KWStringContainsMatcher.h sourceTree - SOURCE_ROOT + <group> - F13568DE799748C8B92E8684 + EA5563D0777946FBAEF0B6EB - fileRef - 310BE70F66F64D9DA731F0E3 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWItNode.m + path + Classes/KWItNode.m + sourceTree + <group> - F27CFE22D0F54FA0957FC054 + EAA462828A93492E9F3A493B children - 6FFE29E80EBF4AEA90B19FD7 - E68EBB138DEF47A6A39BBE69 - 13BD9A952DCD468F8FB57F37 - 88D6E240FA724802BE9499A3 - 07473608A64F4403B0C0A66F - 95207EAC5C8E42379B8E46F4 + 72E98B5BE2B448A39BB6B32D + A11EBC0ECD95456590D9BE58 isa PBXGroup name - Pods-specs + Targets Support Files sourceTree <group> - F2A66714D0CA4948A6B8C157 + EAAF07603F284871B401067E - containerPortal - 0777BA3BB9584122ACE4EE63 + baseConfigurationReference + 0692DA3FAE464AC9B4070C78 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + NO + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 4.0 + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - 99E902D1C70F44B3920567BD - remoteInfo - Pods-SocketRocket + XCBuildConfiguration + name + Debug - F30C2226942540408C5925FF + EC1DFB002A1B445EB91488C8 + + buildConfigurationList + 3FBDAC9ACC3C40298CFDC457 + buildPhases + + 3CF657903B2440FDB7F63B86 + A180A80551F94235B009DA6C + 9250C579387B43D7A27AF8E4 + + buildRules + + dependencies + + isa + PBXNativeTarget + name + Pods-Reachability + productName + Pods-Reachability + productReference + 6D006AA68F5343FC87E29953 + productType + com.apple.product-type.library.static + + EC5B33E0DD6646B1BD3245B7 includeInIndex 1 @@ -6504,49 +6411,64 @@ lastKnownFileType sourcecode.c.h name - KWProbePoller.h + KWWorkarounds.h path - Kiwi/Classes/KWProbePoller.h + Classes/KWWorkarounds.h sourceTree - SOURCE_ROOT + <group> + + ECCAB9A6EC9A410FAAE482ED + + fileRef + 1AB5C366EF3549C199A34EBA + isa + PBXBuildFile - F373E1A09E4D4380AA2F5299 + ED0060EEC4F940649B47D902 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWBeforeEachNode.m + KWBeNilMatcher.h path - Kiwi/Classes/KWBeforeEachNode.m + Classes/KWBeNilMatcher.h sourceTree - SOURCE_ROOT + <group> - F3B209C4D9014728891BBE36 + ED4F844D9A674929BEB1D7C2 fileRef - A0C10AE3E81641F28D8FD401 + 110FE985B49041708D97AF74 isa PBXBuildFile - F5CD4FA62876454EADDD15E3 + EDC2AAC8F16143BA965323D3 - buildActionMask - 2147483647 - files - - BC111325EADD49779D5434E1 - 306D7AB6D9F8435781B83714 - + includeInIndex + 1 isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWBlockRaiseMatcher.m + path + Classes/KWBlockRaiseMatcher.m + sourceTree + <group> - F5E81EADB49145A3AE70159D + EDCB18B8E4C3428A8B7CF407 + + fileRef + 2DB0F5A2BA0241F5BDFE8B02 + isa + PBXBuildFile + + EFA5245B07A748A6B204F35F includeInIndex 1 @@ -6555,13 +6477,13 @@ lastKnownFileType sourcecode.c.objc name - KWReceiveMatcher.m + KWContainMatcher.m path - Kiwi/Classes/KWReceiveMatcher.m + Classes/KWContainMatcher.m sourceTree - SOURCE_ROOT + <group> - F6233DE6A65040D38900D8BF + F018D64549074ED4B33FE9D9 includeInIndex 1 @@ -6569,81 +6491,123 @@ PBXFileReference lastKnownFileType sourcecode.c.h + name + KWMatchers.h path - Pods-Reachability-prefix.pch + Classes/KWMatchers.h sourceTree - SOURCE_ROOT + <group> - F6C83C03AFF94EC2A93F5A82 + F01CE9876D9E4C0CA3DACA58 - fileRef - 81D313EE3E944E37B3AB3788 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWRespondToSelectorMatcher.m + path + Classes/KWRespondToSelectorMatcher.m + sourceTree + <group> - F7189C0A9EB44E2D90EF744D + F07573B2127E4FB48CA2BC57 fileRef - 845055AF292B45CC8337AD2C + 38F5582CADE24337B8B83E91 isa PBXBuildFile - F759DFB278F64E7282870585 + F0B2101D1C85406EBFA2C9B7 - explicitFileType - archive.ar includeInIndex - 0 + 1 isa PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWGenericMatcher.h path - libPods-Reachability.a + Classes/KWGenericMatcher.h sourceTree - BUILT_PRODUCTS_DIR + <group> - F7D806C834AC4C99832D49CE + F0B245078FE647C2B4C013B1 - buildConfigurations - - 1E8713996E3F49BAB251B7EB - 82ABDE6BA47F48DB9B2E83B1 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release + includeInIndex + 1 isa - XCConfigurationList + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-specs.xcconfig + sourceTree + <group> + + F10205540E194915B56A4A2A + + fileRef + 0B8425E1BC32490B868E9C00 + isa + PBXBuildFile - F8BA36D5DCA14B05B8A62544 + F1383854A6C64AEB9D679FFB includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - KWHaveValueMatcher.m + text.xcconfig path - Kiwi/Classes/KWHaveValueMatcher.m + Pods-Reachability.xcconfig sourceTree - SOURCE_ROOT + <group> - F9311DCCAB1549B2A2BE6191 + F1EBBB27815144EFB2A5F841 - buildActionMask - 2147483647 - files + fileRef + C4226003BAC24AE4AD5B43CE + isa + PBXBuildFile + + F3A20961FEC8436DAF996DD4 + + buildConfigurationList + D896ABBE403F47C18F00DE7C + buildPhases - BAD23D5A146640F4ABFD1C3B + 8DE837F0FEF34A6B8CCDE689 + 859A7B5F66A34049B151372E + 2A41DC9983B141E8963B5F9D + buildRules + + dependencies + isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXNativeTarget + name + Pods-specs-OHHTTPStubs + productName + Pods-specs-OHHTTPStubs + productReference + C670E39CDCCA4FE2A3B4D495 + productType + com.apple.product-type.library.static + + F453D742CD7243E590CE3DEC + + fileRef + 64A8529690894744B540B826 + isa + PBXBuildFile - FB99E112F42B4458A7428CE1 + F7C250808FBE4D2096BAF6C4 includeInIndex 1 @@ -6652,56 +6616,61 @@ lastKnownFileType sourcecode.c.h name - KWBlockNode.h + KWFormatter.h path - Kiwi/Classes/KWBlockNode.h + Classes/KWFormatter.h sourceTree - SOURCE_ROOT + <group> - FC28FBB6542E431491C4A04A + F816B0144B824DD69768CA8C includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWBeTrueMatcher.h + KWExample.m path - Kiwi/Classes/KWBeTrueMatcher.h + Classes/KWExample.m sourceTree - SOURCE_ROOT + <group> - FC733740CC7B468F875CF704 + F8DCD79ACB594FB68905CC50 fileRef - 4C70122DFE714497B15FA06F + 044A31251DE24E4D89ACE822 isa PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 + - FCD9238CFF644115B62A2890 + F921514F164D492AA22248BD fileRef - 6D6C57593C5D437180DC9761 + BA32173C434F4AFFAC2A69FE isa PBXBuildFile - FE8C7753DEB34A56AA8631A1 + F92ED42764534FAFBC9EEB73 fileRef - 240B65CBB16B437FB2024905 + ED0060EEC4F940649B47D902 isa PBXBuildFile - FEC5A9A9F26441F3B5FC0615 + F99424FBB57544709A34EFD2 fileRef - 800EFA74AB034A05A5B1AFCC + FA785A83EA944F5B94290065 isa PBXBuildFile - FEEF61ADDFA143C1A495C880 + F9FC745BCFCB4C3D9E0E5F2C includeInIndex 1 @@ -6710,21 +6679,168 @@ lastKnownFileType sourcecode.c.h name - KWBlockRaiseMatcher.h + KWExampleNodeVisitor.h path - Kiwi/Classes/KWBlockRaiseMatcher.h + Classes/KWExampleNodeVisitor.h sourceTree - SOURCE_ROOT + <group> + + F9FF974B80E14996B17783AC + + children + + 0165A00EA70F4C35AF958E59 + C61F6EAE1FD446BBBFEB84F4 + 6F9533FC66B94324B2B47CD6 + 4B8FD086C5AF4782A1F39ABF + EAA462828A93492E9F3A493B + + isa + PBXGroup + sourceTree + <group> + + FA376A686ECC4986B3F0163A + + fileRef + C394BB537EC64D01908F0E5F + isa + PBXBuildFile + + FA785A83EA944F5B94290065 + + isa + PBXFileReference + lastKnownFileType + wrapper.framework + name + SystemConfiguration.framework + path + Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/SystemConfiguration.framework + sourceTree + DEVELOPER_DIR + + FBE82AE05AA74A22B1E0CCDD + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWFormatter.m + path + Classes/KWFormatter.m + sourceTree + <group> + + FCF809DCB496476DB9613282 + + fileRef + 9A9C88FF7AFA49EA9BA63CBB + isa + PBXBuildFile - FF729DD1F92641BC91B2ACEB + FD901F4F13A44F5A87E46BAB fileRef - DC2FB9B0E1464FFCAE04D560 + 4D1208DB7BC1462299460C06 isa PBXBuildFile + FDA401033508495A940D4635 + + buildConfigurationList + A726D955F7B04F43806D724B + buildPhases + + 9B5B15B290EC4CD5BD2060DC + 960AC4593F1942808B1D7BCD + 785E1D88FD65411CBEE07F20 + + buildRules + + dependencies + + isa + PBXNativeTarget + name + Pods-specs-Kiwi + productName + Pods-specs-Kiwi + productReference + C146634260D14659A0F9A2EC + productType + com.apple.product-type.library.static + + FEB66E56A4A64C25BBAFE4D2 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWGenericMatchingAdditions.m + path + Classes/KWGenericMatchingAdditions.m + sourceTree + <group> + + FEBC1BB75BA24DF69AAB680F + + baseConfigurationReference + F0B245078FE647C2B4C013B1 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + YES + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 4.0 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + VALIDATE_PRODUCT + YES + + isa + XCBuildConfiguration + name + Release + rootObject - 0777BA3BB9584122ACE4EE63 + 56671128374E4360A275B2F1 diff --git a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-Reachability.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-Reachability.xcscheme new file mode 100644 index 00000000..3198c8fa --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-Reachability.xcscheme @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-SocketRocket.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-SocketRocket.xcscheme new file mode 100644 index 00000000..74590d5d --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-SocketRocket.xcscheme @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs-Kiwi.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs-Kiwi.xcscheme new file mode 100644 index 00000000..e6462c28 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs-Kiwi.xcscheme @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs-OHHTTPStubs.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs-OHHTTPStubs.xcscheme new file mode 100644 index 00000000..afc901c8 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs-OHHTTPStubs.xcscheme @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs.xcscheme index 325154b5..17b18176 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs.xcscheme @@ -1,6 +1,6 @@ diff --git a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods.xcscheme index c8ade128..29b360d0 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods.xcscheme @@ -1,6 +1,6 @@ diff --git a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/xcschememanagement.plist b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/xcschememanagement.plist index 9313ac73..3bcc1272 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/xcschememanagement.plist @@ -4,149 +4,65 @@ SchemeUserState - Pods-specs.xcscheme + Pods-Reachability.xcscheme isShown - orderHint - 6 - Pods.xcscheme + Pods-SocketRocket.xcscheme isShown - orderHint - 7 - - - SuppressBuildableAutocreation - - 02F7CA9DF9214D43BB983326 - - primary - - - 058E066784FA49C884C633E0 - - primary - - - 0740E1FCFA6244CA9A993FE8 - - primary - - - 08A9D5DF7A934C5D91224A9D - - primary - - - 11D8ABE1FCB244838A9AA7CE - - primary - - - 2BF681A3CA854FB4AA0BDA21 - - primary - - - 2E9736D95A404976B2D41CF3 - - primary - - - 3198813FAA6C4995AB2E1639 - - primary - - - 397F31D8A5D941F4AE68E95A - - primary - - - 398E3194AD0642E4B6CE4D76 - - primary - - 42D09E1E8A8843E0B5769C18 + Pods-specs-Kiwi.xcscheme - primary - - - 4ADF3FD954B44E66B0A57CE0 - - primary - - - 4C5D06155D144A8094EA87BF - - primary - - - 6D969D3FAB6E4637B46C3BDC - - primary - - - 70AC31718F814251B089774D - - primary - - - 72A00082A6D7484B918AFF7E - - primary - - - 7328A4F9C6374686A27D248B - - primary - + isShown + - 78EDC9E21ECC43ED93C722D9 + Pods-specs-OHHTTPStubs.xcscheme - primary - + isShown + - 81CAD16CBB3143C8A5F918C4 + Pods-specs.xcscheme - primary - + isShown + - 99E902D1C70F44B3920567BD + Pods.xcscheme - primary - + isShown + - AD2504D2DA164CE9AB24E9DA + + SuppressBuildableAutocreation + + 2B0A0813AF0741DBB91ACC57 primary - BB4868375DD040F191C7C834 + C61690B2DA9C420E93D95AB5 primary - EF4179F378294E3EB69819FE + C7BD8B46A79D490396651011 primary - F0531BAE563D403FBDFF4C89 + EC1DFB002A1B445EB91488C8 primary - F090D02198D143ECB4D5792B + F3A20961FEC8436DAF996DD4 primary - FCC83C166A0C45879BF8464F + FDA401033508495A940D4635 primary diff --git a/libPusher-OSX/libPusher-OSX.xcodeproj/xcshareddata/xcschemes/Sample App (OSX).xcscheme b/libPusher-OSX/libPusher-OSX.xcodeproj/xcshareddata/xcschemes/Sample App (OSX).xcscheme index 47d0d770..c4deddee 100644 --- a/libPusher-OSX/libPusher-OSX.xcodeproj/xcshareddata/xcschemes/Sample App (OSX).xcscheme +++ b/libPusher-OSX/libPusher-OSX.xcodeproj/xcshareddata/xcschemes/Sample App (OSX).xcscheme @@ -1,6 +1,6 @@ Date: Sun, 24 Nov 2013 13:58:03 +0000 Subject: [PATCH 14/88] Inhibit CocoaPods warnings. --- Podfile | 2 + Pods/Pods.xcodeproj/project.pbxproj | 7310 +++++++++-------- .../xcschemes/Pods-Reachability.xcscheme | 2 +- .../xcschemes/Pods-SocketRocket.xcscheme | 2 +- .../xcschemes/Pods-specs-Kiwi.xcscheme | 2 +- .../xcschemes/Pods-specs-OHHTTPStubs.xcscheme | 2 +- .../xcschemes/Pods-specs.xcscheme | 2 +- .../luke.xcuserdatad/xcschemes/Pods.xcscheme | 2 +- .../xcschemes/xcschememanagement.plist | 12 +- 9 files changed, 3874 insertions(+), 3462 deletions(-) diff --git a/Podfile b/Podfile index a983eb29..6c0afa63 100644 --- a/Podfile +++ b/Podfile @@ -1,5 +1,7 @@ platform :ios, :deployment_target => '4.0' +inhibit_all_warnings! + pod 'Reachability' pod 'SocketRocket', :head diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index 7743d81a..a9153dd5 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -10,7 +10,14 @@ 46 objects - 00008FCC38E246728207AFD5 + 012E700EE221494EA64AFFDC + + fileRef + 532E269EEC5445FB9593929F + isa + PBXBuildFile + + 0136C6FEC0404CC29428E102 includeInIndex 1 @@ -19,104 +26,159 @@ lastKnownFileType sourcecode.c.objc name - KWAsyncVerifier.m + KWSymbolicator.m path - Classes/KWAsyncVerifier.m + Classes/KWSymbolicator.m sourceTree <group> - 003C27671F634861B6200BDC - - fileRef - C2E00E00C29249379F52604B - isa - PBXBuildFile - - 007DDF76AC2F4F3C8C77C865 + 0162EEF03886440192ACD088 fileRef - 76146A38D348416F98A7F7E4 + F24A12F6E2C64DADB97A429F isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 010291D50DF6440BBB36F5D3 + 019CF53B9F934120867BCC03 - children - - 37EDB6AFC26B46A4B13F9441 - 044A31251DE24E4D89ACE822 - 267A5D395EF640E7B583BF24 - + includeInIndex + 1 isa - PBXGroup + PBXFileReference + lastKnownFileType + sourcecode.c.objc name - Reachability + KWObjCUtilities.m path - Reachability + Classes/KWObjCUtilities.m sourceTree <group> - 01656CBF93D94C468CBE1471 + 02306DAF3AC449A0833E8330 + + baseConfigurationReference + 3B0F2646415548AD84525C6F + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + YES + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 4.0 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + VALIDATE_PRODUCT + YES + + isa + XCBuildConfiguration + name + Release + + 02A5E865C1E542908AC9092E fileRef - B726226B1E3F4B53BED8EE77 + 0136C6FEC0404CC29428E102 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 0165A00EA70F4C35AF958E59 + 02CE1847192D46CB99248DA7 includeInIndex 1 isa PBXFileReference lastKnownFileType - text + sourcecode.c.h name - Podfile + KWRaiseMatcher.h path - ../Podfile + Classes/KWRaiseMatcher.h sourceTree - SOURCE_ROOT - xcLanguageSpecificationIdentifier - xcode.lang.ruby + <group> - 01D8A1EAABE44A4EBD87F18E + 03127DB2B76E413389B71110 - fileRef - 67AA976E7118427D98F0C8F1 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWObjCUtilities.h + path + Classes/KWObjCUtilities.h + sourceTree + <group> - 02917EAEA3E74E9FB9A54260 + 031B6BA4066440EAAF7C395F includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWAfterEachNode.h + KWContextNode.m path - Classes/KWAfterEachNode.h + Classes/KWContextNode.m sourceTree <group> - 03060AE9CB874C658FA61E37 + 0375994CD49046BDA9F30123 - buildConfigurations - - D9A0A143EC1C4C43B6E5CC36 - CA508CC131164E5BB8315DD4 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release + fileRef + 91C847FC9A9D4BC78051552A isa - XCConfigurationList + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 03CB4DC62DB343B9A37EC9E1 + 037C6F64A77342F389E47CA1 includeInIndex 1 @@ -125,42 +187,26 @@ lastKnownFileType sourcecode.c.h name - KWExistVerifier.h + NSInvocation+KiwiAdditions.h path - Classes/KWExistVerifier.h + Classes/NSInvocation+KiwiAdditions.h sourceTree <group> - 044A31251DE24E4D89ACE822 + 03B4A57C7A8D4450AC82D770 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + text path - Reachability.m + Pods-acknowledgements.markdown sourceTree <group> - 04A715A7603D4176BE04DCD7 - - isa - PBXTargetDependency - target - F3A20961FEC8436DAF996DD4 - targetProxy - BCFDD67BF3344A34ADB13924 - - 0509686B98054A0F829879CD - - fileRef - 521981D242014582BC666854 - isa - PBXBuildFile - - 05203007927E4DE5B8CB91FF + 03F05C358E854E8DA923970F includeInIndex 1 @@ -169,20 +215,13 @@ lastKnownFileType sourcecode.c.h name - KWBeWithinMatcher.h + SRWebSocket.h path - Classes/KWBeWithinMatcher.h + SocketRocket/SRWebSocket.h sourceTree <group> - 063B745CAFFF4B3B9E528BBD - - fileRef - 2193788D34E94DBE9C2953A1 - isa - PBXBuildFile - - 0692DA3FAE464AC9B4070C78 + 04AC5B12B1924BE0A2D9B018 includeInIndex 1 @@ -191,11 +230,11 @@ lastKnownFileType text.xcconfig path - Pods.xcconfig + Pods-specs-OHHTTPStubs.xcconfig sourceTree <group> - 06D0924645CF44F29A7F8FCB + 04F8EDEA67CD47CFAB41A953 includeInIndex 1 @@ -204,96 +243,84 @@ lastKnownFileType sourcecode.c.objc name - KWNull.m + KWInvocationCapturer.m path - Classes/KWNull.m + Classes/KWInvocationCapturer.m sourceTree <group> - 07ED0CC062E9413EBE684F61 + 052A27F9A84547CFA5D6CF71 fileRef - 2DB0F5A2BA0241F5BDFE8B02 + B42B66B2AB2C439B85DB6F3B isa PBXBuildFile - 08391C3F382E4578BD6E8B96 - - fileRef - 5D5449014E644CFB98449F5F - isa - PBXBuildFile - - 089E653D5D3A4B8BA7C7D289 + 0589BE3750D34DFAA62C257F includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - KWPendingNode.m + sourcecode.c.h path - Classes/KWPendingNode.m + Pods-specs-Kiwi-prefix.pch sourceTree <group> - 090DE73BDFD446618E005B8C - - fileRef - FBE82AE05AA74A22B1E0CCDD - isa - PBXBuildFile - - 095BEA9BB8934C89A96AED18 + 068884E3B2C9451F817637D8 fileRef - C6EA35EC896446D3812BAF66 + 27254752573F454797B1ACFE isa PBXBuildFile settings COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 + -w -Xanalyzer -analyzer-disable-checker - 0A183BE4AAFF4F9CA9338B78 - - buildActionMask - 2147483647 - files - - 54B2AACB50B045C5B93E084A - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 0A4EB9F903F34C83A99E5993 + 076A1599E77641D8B751C3B7 fileRef - 6BCCA55C01E6486D9E59A6F2 + 7074542AAB8D443198B871D1 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 0B780B1BFAED4F2FAFDEB736 + 07926D06ED154D638E71C495 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWBeforeEachNode.m + KWReceiveMatcher.h path - Classes/KWBeforeEachNode.m + Classes/KWReceiveMatcher.h sourceTree <group> - 0B8425E1BC32490B868E9C00 + 080B01D0317F4003B6F2E75A + + fileRef + 1CE0DAE9B1C240B89A90A668 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 090196E35042422EACB1091F includeInIndex 1 @@ -302,28 +329,51 @@ lastKnownFileType sourcecode.c.objc name - KWGenericMatcher.m + NSMethodSignature+KiwiAdditions.m path - Classes/KWGenericMatcher.m + Classes/NSMethodSignature+KiwiAdditions.m sourceTree <group> - 0B880FCBE6804AE59CEE3489 + 09210E44857A4D7089A55805 - includeInIndex - 1 + fileRef + 962EC98421D24966A0E4C696 isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWExampleNode.h - path - Classes/KWExampleNode.h - sourceTree - <group> + PBXBuildFile + + 0960F8403AD2492AA7CE7920 + + fileRef + 64101EE568764E3EBAD29FA8 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 0A7CB779FCC14A61982E0E9E + + fileRef + C4E290F9834D4B04B8CA5963 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 0A9A0261E4ED4AE780EF9120 + + fileRef + 2223BD9BF15C4E038845AC59 + isa + PBXBuildFile - 0D35278FB73C48B583F219DA + 0BC66B4BDF7D418B9743BEA7 includeInIndex 1 @@ -332,72 +382,147 @@ lastKnownFileType sourcecode.c.h name - KWAfterAllNode.h + KWRespondToSelectorMatcher.h path - Classes/KWAfterAllNode.h + Classes/KWRespondToSelectorMatcher.h sourceTree <group> - 0DE613D5FBC442BEA676C2DF + 0BF201DFF8494CEAA23A4DA1 - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h + baseConfigurationReference + B99D2982DD364339B4DE196A + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + NO + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-SocketRocket-prefix.pch + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 4.0 + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + + isa + XCBuildConfiguration name - KWBeKindOfClassMatcher.h + Debug + + 0C68169B77D04AECADAEFB45 + + fileRef + FCF264B3CF2A49CE981915D1 + isa + PBXBuildFile + + 0D01DC7FB6D04D7882069860 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWUserDefinedMatcher.h path - Classes/KWBeKindOfClassMatcher.h + Classes/KWUserDefinedMatcher.h sourceTree <group> - 0EBA34AEF95C4A46A6CE35CA + 0D8D3EA244524593989E0B52 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h - name - KWBeZeroMatcher.h + text.xcconfig path - Classes/KWBeZeroMatcher.h + Pods-specs-Kiwi.xcconfig sourceTree <group> - 0EBCE730DDA7482FA5E2777F + 0DAEE9065B0A49F4A174501A includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - SRWebSocket.h + NSObject+KiwiVerifierAdditions.m path - SocketRocket/SRWebSocket.h + Classes/NSObject+KiwiVerifierAdditions.m sourceTree <group> - 0F984B16A6544C869570EDE7 + 0DB8C587984C4C819B132205 - fileRef - C1F0048B94D4428CBD764038 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-SocketRocket.xcconfig + sourceTree + <group> + + 0EBFE40558BC490F91DF77BC + + explicitFileType + archive.ar + includeInIndex + 0 + isa + PBXFileReference + path + libPods.a + sourceTree + BUILT_PRODUCTS_DIR - 0FFB35DE920343A6B3CAF39E + 0ECF57D8D8614485A25BD387 fileRef - C36DA1A49DFD4F3AA5F1F35C + 2D5C4349A9F844DEAA444378 isa PBXBuildFile - 110FE985B49041708D97AF74 + 0EE143C221AC43C3A516AE9F includeInIndex 1 @@ -405,28 +530,89 @@ PBXFileReference lastKnownFileType sourcecode.c.h - name - KWProbePoller.h path - Classes/KWProbePoller.h + Reachability.h sourceTree <group> - 119627D572104042829B4D2A + 0F3E746C00904AB7B2AEFD60 + + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + CLANG_CXX_LANGUAGE_STANDARD + gnu++0x + CLANG_CXX_LIBRARY + libc++ + CLANG_ENABLE_MODULES + YES + CLANG_ENABLE_OBJC_ARC + NO + CLANG_WARN_BOOL_CONVERSION + YES + CLANG_WARN_CONSTANT_CONVERSION + YES + CLANG_WARN_DIRECT_OBJC_ISA_USAGE + YES_ERROR + CLANG_WARN_EMPTY_BODY + YES + CLANG_WARN_ENUM_CONVERSION + YES + CLANG_WARN_INT_CONVERSION + YES + CLANG_WARN_OBJC_ROOT_CLASS + YES_ERROR + COPY_PHASE_STRIP + NO + ENABLE_NS_ASSERTIONS + NO + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_WARN_64_TO_32_BIT_CONVERSION + YES + GCC_WARN_ABOUT_RETURN_TYPE + YES_ERROR + GCC_WARN_UNDECLARED_SELECTOR + YES + GCC_WARN_UNINITIALIZED_AUTOS + YES + GCC_WARN_UNUSED_FUNCTION + YES + GCC_WARN_UNUSED_VARIABLE + YES + IPHONEOS_DEPLOYMENT_TARGET + 4.0 + STRIP_INSTALLED_PRODUCT + NO + VALIDATE_PRODUCT + YES + + isa + XCBuildConfiguration + name + Release + + 0F9B254138944CD0A553BF06 fileRef - D748FE8C912848879ADDC40A + F3376D236AF94D0F90F29DF6 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 1237D823D7124559A85760A3 + 0FCFBF21A11047848E8D7653 fileRef - 4AA7720CA1EC4EB4B2EE6F86 + CE935C9D71AA4B01B465AB1C isa PBXBuildFile - 12ADDEC1687247D698DF8292 + 101DE15DDFD44EDAA0D2C31F includeInIndex 1 @@ -435,41 +621,48 @@ lastKnownFileType sourcecode.c.h name - KWBeMemberOfClassMatcher.h + KWRegisterMatchersNode.h path - Classes/KWBeMemberOfClassMatcher.h + Classes/KWRegisterMatchersNode.h sourceTree <group> - 130928DE952446CABA9FA5EB + 10BFE4AD9B4146C1B2D0CFF7 fileRef - 27255A9FCBE943A6A263F51D + 6D3299A50BC348AC87FCE9A4 isa PBXBuildFile - 13340D3E27BF4D4BB673F7B2 + 10D1A08B264F48288C9D26DB fileRef - B0DE09EF9B424616840103EE + CEAE6BFD13A6444BA369FEEB isa PBXBuildFile - 139F86C1A4CE41088F1F7181 + 10F30B15A5484BDCA0CBCEC5 fileRef - 996DF26A178C4391A1E1F3CA + 13996E6DDDE04F34B05DC432 isa PBXBuildFile - 14496D57C1B34A84984EB2A0 + 1101292040514398BF4DDA64 fileRef - A3042D81C15D4061A02BA93C + 8D78F141C95141BE9A535384 isa PBXBuildFile - 14723A73BEFA41B8B500CC76 + 11253ED06B2941C999067601 + + fileRef + 2A0B0396A8154DC6935A91A9 + isa + PBXBuildFile + + 12F77D49665540A999F08418 includeInIndex 1 @@ -477,24 +670,21 @@ PBXFileReference lastKnownFileType sourcecode.c.h + name + KWBeSubclassOfClassMatcher.h path - Pods-specs-OHHTTPStubs-prefix.pch + Classes/KWBeSubclassOfClassMatcher.h sourceTree <group> - 1498854BD2F840EF93503103 + 131A18BCC77C4878A5ADDE4B fileRef - E50BEEB09DEE4E46B1E828AF + 037C6F64A77342F389E47CA1 isa PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - 159C53CF9F5D4E8B8056AD62 + 13996E6DDDE04F34B05DC432 includeInIndex 1 @@ -503,78 +693,48 @@ lastKnownFileType sourcecode.c.h name - KWDeviceInfo.h + KWProbePoller.h path - Classes/KWDeviceInfo.h + Classes/KWProbePoller.h sourceTree <group> - 161E450B8FF641CE87B5D49A + 1480D3DD81F5482087E03701 fileRef - 2DB0F5A2BA0241F5BDFE8B02 + 8CDFB9978A914A6E8E289296 isa PBXBuildFile - 162D4F7B9CFC4F40B3340617 + 14A17D430468457198C4232F - includeInIndex - 1 + fileRef + DB532E7DD2C14E38BF0AA0AB isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - KWWorkarounds.m - path - Classes/KWWorkarounds.m - sourceTree - <group> + PBXBuildFile - 170446E1EC8F4391A429D2BD + 1601B352B2AC4BF39B53901D fileRef - 9EB9DAF99353458F9805E406 + 2E97EDA73E5E497BB8E46FAB isa PBXBuildFile - 17D8EE657E8945FFB655C25E + 166B6D77C59449F7A9113164 - includeInIndex - 1 + fileRef + 5AA7ED306FAF4838B8648877 isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - KWStub.m - path - Classes/KWStub.m - sourceTree - <group> + PBXBuildFile - 18083E9F12D14E8CA1A76438 + 1694E90D6E8A451D91F9CC90 - children - - 3AAE4842914B427E9703F3EE - 2A2C2174F4F442038A294FD1 - 0EBCE730DDA7482FA5E2777F - 5C556B2B2E4B4C99BEEF778A - E50BEEB09DEE4E46B1E828AF - 27255A9FCBE943A6A263F51D - 6FE92DE38FA4459D8D7E0844 - + fileRef + FCF264B3CF2A49CE981915D1 isa - PBXGroup - name - SocketRocket - path - SocketRocket - sourceTree - <group> + PBXBuildFile - 1AB5C366EF3549C199A34EBA + 17237A26F10D450C8403F039 includeInIndex 1 @@ -583,13 +743,13 @@ lastKnownFileType sourcecode.c.h name - KWExampleSuite.h + KWBeZeroMatcher.h path - Classes/KWExampleSuite.h + Classes/KWBeZeroMatcher.h sourceTree <group> - 1AB5DA2BA8F84204A5C26473 + 1731E8CAC2234640B82FBD9D includeInIndex 1 @@ -598,129 +758,123 @@ lastKnownFileType sourcecode.c.h name - KWSpec.h + KWEqualMatcher.h path - Classes/KWSpec.h + Classes/KWEqualMatcher.h sourceTree <group> - 1AF086E689164B9C87C4C4BC - - fileRef - 1E48EA6CC0AA429083E39A71 - isa - PBXBuildFile - - 1B2088CF33B84C18BCA2D1F7 - - fileRef - B623443CEC4F4A81B706FCA2 - isa - PBXBuildFile - - 1B29EDD57D3148C8917AAE62 + 1743A09D6AFD46788C358B14 - fileRef - 5DFEFC48FF144766B5D6B189 + buildActionMask + 2147483647 + files + + 1694E90D6E8A451D91F9CC90 + isa - PBXBuildFile + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 - 1B7738AF037D4A02B7D6F74D + 17CC07321D9F4DD5A8B3E2BB includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWAfterEachNode.m + KWBeTrueMatcher.h path - Classes/KWAfterEachNode.m + Classes/KWBeTrueMatcher.h sourceTree <group> - 1C57AB410F244F709E92E631 - - fileRef - DB834F3AE66E43ADBF4E3DF1 - isa - PBXBuildFile - - 1C704EB15BD844DB9E3E7B67 - - fileRef - BA10F41EC2754278945812C3 - isa - PBXBuildFile - - 1C9E5F48B1564FDD965FA441 + 17E99F172BB04E7FA385D3B1 - fileRef - 2C887C3ED8A344B9B6AE0E3D + explicitFileType + archive.ar + includeInIndex + 0 isa - PBXBuildFile + PBXFileReference + path + libPods-specs-Kiwi.a + sourceTree + BUILT_PRODUCTS_DIR - 1DBCF24C3397436A93F8209F + 18E0BD8C1A7F416291A75D81 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - KWEqualMatcher.m + text.plist.xml path - Classes/KWEqualMatcher.m + Pods-specs-acknowledgements.plist sourceTree <group> - 1DF91000F92C4312819661B0 + 19BF9FFCFAB347B19BEBF81A fileRef - 25DB25583C0A41EB85B99372 + C762FA623AD54994865A5C20 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 1E313F9CCADC4CFEAD404A16 + 1A405738C62443209E636724 fileRef - BF1A468DD91B4EFAA1EF8ED4 + 6A36015C0DE8407CA634E58A isa PBXBuildFile - 1E435A20911E4649B36B21CB + 1AF71CB4A9344C2BBB738F47 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWHaveValueMatcher.h + KWRegularExpressionPatternMatcher.m path - Classes/KWHaveValueMatcher.h + Classes/KWRegularExpressionPatternMatcher.m sourceTree <group> - 1E48EA6CC0AA429083E39A71 + 1C2C7AE386504CFEA89861A8 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWReporting.h + KWFailure.m path - Classes/KWReporting.h + Classes/KWFailure.m sourceTree <group> - 1ED7F16EB8164913B555296D + 1CB76CE981B04DBC82319348 + + fileRef + AC0F8A06DE804D9F8BFE2CD8 + isa + PBXBuildFile + + 1CE0DAE9B1C240B89A90A668 includeInIndex 1 @@ -729,35 +883,28 @@ lastKnownFileType sourcecode.c.objc name - SenTestSuite+KiwiAdditions.m + KWMatchVerifier.m path - Classes/SenTestSuite+KiwiAdditions.m + Classes/KWMatchVerifier.m sourceTree <group> - 1F7C580652F24C0D94721E40 + 1D13657582A1438B8CB5826D includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWStringPrefixMatcher.h + KWBeNonNilMatcher.m path - Classes/KWStringPrefixMatcher.h + Classes/KWBeNonNilMatcher.m sourceTree <group> - 215EF63935964E0D8D7E64FA - - fileRef - A447F211D903418BB7A55A82 - isa - PBXBuildFile - - 2193788D34E94DBE9C2953A1 + 1DD726E13AF0433EB40BD89C includeInIndex 1 @@ -766,48 +913,38 @@ lastKnownFileType sourcecode.c.h name - KWContainStringMatcher.h + KWExampleNode.h path - Classes/KWContainStringMatcher.h + Classes/KWExampleNode.h sourceTree <group> - 219AD23312004E0E8F67EC23 + 1E0F4A803BA542E49C3AC719 fileRef - 72F4161EAD3744C88B9D32E4 + 3CF0C1FB3C68470B9AF60830 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 21C20674E43444FBBEC7B66A + 1E13303919A74B32946FE490 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + text path - Pods-SocketRocket.xcconfig + Pods-specs-acknowledgements.markdown sourceTree <group> - 221F1A46BA0F4EAC8857A397 - - buildActionMask - 2147483647 - files - - 68DB63AF6A264129A7D8F79E - 7D8DFEBD882F43FBB1CA379B - A56084030AA446BFA6C42FE4 - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 2233F66196FD4088AB894F50 + 1E869704A40D46CE9BEF36C2 includeInIndex 1 @@ -815,29 +952,27 @@ PBXFileReference lastKnownFileType sourcecode.c.h - name - KiwiMacros.h path - Classes/KiwiMacros.h + Pods-environment.h sourceTree <group> - 22736026782A43489D60A3F0 + 1EB52154FAA54382B9DE5774 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWReceiveMatcher.h + KWItNode.m path - Classes/KWReceiveMatcher.h + Classes/KWItNode.m sourceTree <group> - 23753E7755924ADB9F64523F + 1F63D9A4933B46CFBE7147E3 includeInIndex 1 @@ -846,49 +981,55 @@ lastKnownFileType sourcecode.c.h name - KWBeIdenticalToMatcher.h + KWExampleGroupBuilder.h path - Classes/KWBeIdenticalToMatcher.h + Classes/KWExampleGroupBuilder.h sourceTree <group> - 2375810F38484C808D53D566 + 2039E9183C1B42ED89EBAE7A - fileRef - 23753E7755924ADB9F64523F + buildActionMask + 2147483647 + files + + 42A653A52FE94003BCF629EC + isa - PBXBuildFile + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 - 24756F2002E14C31A215BC84 + 2055DC61B7024729929F295B includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWMatcherFactory.m + KWFailure.h path - Classes/KWMatcherFactory.m + Classes/KWFailure.h sourceTree <group> - 2475729893FA48208B7F78F4 - - fileRef - E8BDD58964874D378CD8BE87 - isa - PBXBuildFile - - 25A5BA849B5B4B73B656505B + 206D8429722747DB9FB10D71 - fileRef - D5E6437F57824CEE9F5A43F2 + children + + 78E6CC5D4930408A976FBCFC + CBF38EC28FB941DE9FCEC1A5 + isa - PBXBuildFile + PBXGroup + name + Targets Support Files + sourceTree + <group> - 25DB25583C0A41EB85B99372 + 2106E4D8F47D4768A05CEF38 includeInIndex 1 @@ -897,39 +1038,16 @@ lastKnownFileType sourcecode.c.objc name - KWInequalityMatcher.m + KWStringContainsMatcher.m path - Classes/KWInequalityMatcher.m + Classes/KWStringContainsMatcher.m sourceTree <group> - 267A5D395EF640E7B583BF24 - - children - - F1383854A6C64AEB9D679FFB - DCFDE749B62C4EB7B4EFB859 - E0F72EF850DD4C8F9533D52E - E648256A1A8B4BF0AFFC0DC8 - - isa - PBXGroup - name - Support Files - sourceTree - SOURCE_ROOT - - 267D076EAF2E40CDB23FAA5D - - fileRef - 1F7C580652F24C0D94721E40 - isa - PBXBuildFile - - 270684A05C334FBBBE8B027E + 212C08CD4C86497A8B6EAC23 baseConfigurationReference - DCFDE749B62C4EB7B4EFB859 + C7C8C44CDEE04061AECD9B3A buildSettings ALWAYS_SEARCH_USER_PATHS @@ -943,7 +1061,7 @@ GCC_PRECOMPILE_PREFIX_HEADER YES GCC_PREFIX_HEADER - Pods-Reachability-prefix.pch + Pods-specs-OHHTTPStubs-prefix.pch GCC_VERSION com.apple.compilers.llvm.clang.1_0 INSTALL_PATH @@ -978,75 +1096,128 @@ name Release - 27255A9FCBE943A6A263F51D + 21413A39C5CD4494BD093263 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - base64.h + KWRaiseMatcher.m path - SocketRocket/base64.h + Classes/KWRaiseMatcher.m sourceTree <group> - 2799AE84635F4E36A69CBC6B + 2170B8ABD2E947DAAC75C903 - containerPortal - 56671128374E4360A275B2F1 + includeInIndex + 1 isa - PBXContainerItemProxy - proxyType + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWAfterAllNode.h + path + Classes/KWAfterAllNode.h + sourceTree + <group> + + 21CFD7BD0A7A49D99591CCF2 + + includeInIndex 1 - remoteGlobalIDString - FDA401033508495A940D4635 - remoteInfo - Pods-specs-Kiwi + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWBlockRaiseMatcher.h + path + Classes/KWBlockRaiseMatcher.h + sourceTree + <group> - 28DDDF1868B04E47A09B4B67 + 21E1DC6BEE1748869B3FF7EE fileRef - 721D7E86FD62421A980B009D + 99EDF7C7A40A4345A4AC2A00 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 2910EBE586224DBFB6C88644 + 2223BD9BF15C4E038845AC59 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.h + name + KWInvocationCapturer.h path - Pods-specs-OHHTTPStubs-Private.xcconfig + Classes/KWInvocationCapturer.h + sourceTree + <group> + + 2289F5BE59054018BAACAEE8 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWStringUtilities.h + path + Classes/KWStringUtilities.h sourceTree <group> - 2950ACAC3BAE4E0293F5B4B8 + 23862FEDD85643588D2705B2 fileRef - 40E2BE0176B3470EA948A4B8 + FCF264B3CF2A49CE981915D1 isa PBXBuildFile - 29B873493F4242009C065CC8 + 24244F9A273F43F8A4941C0F includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.h + name + OHHTTPStubsResponse.h path - Pods-specs-Kiwi-Private.xcconfig + OHHTTPStubs/OHHTTPStubsResponse.h sourceTree <group> - 2A2C2174F4F442038A294FD1 + 25D18118B70B49E8B307C211 + + fileRef + 019CF53B9F934120867BCC03 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 27254752573F454797B1ACFE includeInIndex 1 @@ -1055,125 +1226,41 @@ lastKnownFileType sourcecode.c.objc name - NSData+SRB64Additions.m + NSObject+KiwiStubAdditions.m path - SocketRocket/NSData+SRB64Additions.m + Classes/NSObject+KiwiStubAdditions.m sourceTree <group> - 2A41DC9983B141E8963B5F9D + 27511A96CF144F4590E59119 - buildActionMask - 2147483647 - files + fileRef + 3EF010FE5CC14A038E33CB45 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 27604F8B2A3342FFBB282E37 + + children - 718EAF3FF84740F6864F63F2 - 79F28A886D2E4015870C4782 + 0D8D3EA244524593989E0B52 + 2846C072D3444C6B895F35AD + 8106A3F641FE48AC8CFBE107 + 0589BE3750D34DFAA62C257F isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXGroup + name + Support Files + sourceTree + SOURCE_ROOT - 2AB45C1EB166493E9F3E11A8 - - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - CLANG_CXX_LANGUAGE_STANDARD - gnu++0x - CLANG_CXX_LIBRARY - libc++ - CLANG_ENABLE_MODULES - YES - CLANG_ENABLE_OBJC_ARC - NO - CLANG_WARN_BOOL_CONVERSION - YES - CLANG_WARN_CONSTANT_CONVERSION - YES - CLANG_WARN_DIRECT_OBJC_ISA_USAGE - YES_ERROR - CLANG_WARN_EMPTY_BODY - YES - CLANG_WARN_ENUM_CONVERSION - YES - CLANG_WARN_INT_CONVERSION - YES - CLANG_WARN_OBJC_ROOT_CLASS - YES_ERROR - COPY_PHASE_STRIP - NO - ENABLE_NS_ASSERTIONS - NO - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_WARN_64_TO_32_BIT_CONVERSION - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES_ERROR - GCC_WARN_UNDECLARED_SELECTOR - YES - GCC_WARN_UNINITIALIZED_AUTOS - YES - GCC_WARN_UNUSED_FUNCTION - YES - GCC_WARN_UNUSED_VARIABLE - YES - IPHONEOS_DEPLOYMENT_TARGET - 4.0 - STRIP_INSTALLED_PRODUCT - NO - VALIDATE_PRODUCT - YES - - isa - XCBuildConfiguration - name - Release - - 2B068FD6DC2344B093CF25AC - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWMatching.h - path - Classes/KWMatching.h - sourceTree - <group> - - 2B0A0813AF0741DBB91ACC57 - - buildConfigurationList - 03060AE9CB874C658FA61E37 - buildPhases - - D6D679299D0F4360A4527C57 - 221F1A46BA0F4EAC8857A397 - 541F3D7FFADD45188E85D2B5 - - buildRules - - dependencies - - isa - PBXNativeTarget - name - Pods-SocketRocket - productName - Pods-SocketRocket - productReference - 3598443A8B444EEEB51C7FCA - productType - com.apple.product-type.library.static - - 2C887C3ED8A344B9B6AE0E3D + 27A412CBB1E04E7992863DB1 includeInIndex 1 @@ -1182,130 +1269,58 @@ lastKnownFileType sourcecode.c.h name - KWBlockNode.h + KiwiConfiguration.h path - Classes/KWBlockNode.h + Classes/KiwiConfiguration.h sourceTree <group> - 2CAEC5C096FD44C6AA6EA2C8 + 283FCB30F7A84712BC18CAE2 fileRef - 93063D4333F74DB8991E0B6D + 985BCE1FE41D40A2B5EC00D8 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 2CE302F0CDD74C84BBC8BD22 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWBeTrueMatcher.h - path - Classes/KWBeTrueMatcher.h - sourceTree - <group> - - 2D75D4F6472346F898D2702B - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - KWAny.m - path - Classes/KWAny.m - sourceTree - <group> - - 2DB0F5A2BA0241F5BDFE8B02 - - isa - PBXFileReference - lastKnownFileType - wrapper.framework - name - Foundation.framework - path - Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/Foundation.framework - sourceTree - DEVELOPER_DIR - - 2DBC7C45F4E24E5481DB65F5 + 28469D6B3C964842B64C09F0 + explicitFileType + archive.ar includeInIndex - 1 + 0 isa PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWGenericMatchingAdditions.h path - Classes/KWGenericMatchingAdditions.h - sourceTree - <group> - - 2F2420CB68A34CA1941D6309 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWExampleGroupDelegate.h - path - Classes/KWExampleGroupDelegate.h + libPods-specs.a sourceTree - <group> + BUILT_PRODUCTS_DIR - 2F348541062B48A69CC5EB14 + 2846C072D3444C6B895F35AD includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - KWFailure.m + text.xcconfig path - Classes/KWFailure.m + Pods-specs-Kiwi-Private.xcconfig sourceTree <group> - 2FA72FD99E2F470C8EA501DA + 287564EBEA034300B6813967 fileRef - A97D6E772BD74AC6B39DD392 + 6BE06CB751AD4C64B3B3C084 isa PBXBuildFile - 303AC2C4EDC24B33A809F7BD - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSObject+KiwiMockAdditions.m - path - Classes/NSObject+KiwiMockAdditions.m - sourceTree - <group> - - 3074EEEC4A0248F3AD09E672 + 28BE4156A6E4457EA0AB6301 includeInIndex 1 @@ -1314,37 +1329,13 @@ lastKnownFileType sourcecode.c.objc name - KWContextNode.m + KWRegisterMatchersNode.m path - Classes/KWContextNode.m - sourceTree - <group> - - 32216C9C3EC44D1097F48600 - - fileRef - B46E29B6DFB74C85A48C8820 - isa - PBXBuildFile - - 3289AA81AA354AE88BA98FE9 - - children - - 781EED02747A41BCA689AD4B - 2DB0F5A2BA0241F5BDFE8B02 - 3DE9EE5B8184470996D69209 - 9A9C88FF7AFA49EA9BA63CBB - FA785A83EA944F5B94290065 - - isa - PBXGroup - name - iOS + Classes/KWRegisterMatchersNode.m sourceTree <group> - 32BAB6074DFA4FA69DFF7572 + 28F34795FB114FBDA7EC29F1 includeInIndex 1 @@ -1353,13 +1344,13 @@ lastKnownFileType sourcecode.c.h name - KWBlockRaiseMatcher.h + KWIntercept.h path - Classes/KWBlockRaiseMatcher.h + Classes/KWIntercept.h sourceTree <group> - 32F5F8E4CD0141ED8DDF61DB + 29110E5530324F50B848A719 includeInIndex 1 @@ -1368,13 +1359,13 @@ lastKnownFileType sourcecode.c.h name - NSProxy+KiwiVerifierAdditions.h + KWAsyncVerifier.h path - Classes/NSProxy+KiwiVerifierAdditions.h + Classes/KWAsyncVerifier.h sourceTree <group> - 32FEA4647D024A709AB9FA41 + 29CC20FB4C3C4EC78A237345 includeInIndex 1 @@ -1383,54 +1374,60 @@ lastKnownFileType sourcecode.c.h name - KWGenericMatchEvaluator.h + KWBlockNode.h path - Classes/KWGenericMatchEvaluator.h + Classes/KWBlockNode.h sourceTree <group> - 347585E620AD454C8DB08DAB + 29DF099C8A9C4E1FB05EE812 - fileRef - 0B880FCBE6804AE59CEE3489 + buildActionMask + 2147483647 + files + + B0E1EC3A3F63449B8166D176 + 0FCFBF21A11047848E8D7653 + isa - PBXBuildFile + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 - 353636652828443BB26916E5 + 2A0628C4EB11469BAFFE5819 baseConfigurationReference - 29B873493F4242009C065CC8 + B99D2982DD364339B4DE196A buildSettings ALWAYS_SEARCH_USER_PATHS NO COPY_PHASE_STRIP - NO + YES DSTROOT /tmp/xcodeproj.dst GCC_C_LANGUAGE_STANDARD gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 GCC_PRECOMPILE_PREFIX_HEADER YES GCC_PREFIX_HEADER - Pods-specs-Kiwi-prefix.pch - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO + Pods-SocketRocket-prefix.pch GCC_VERSION com.apple.compilers.llvm.clang.1_0 INSTALL_PATH $(BUILT_PRODUCTS_DIR) IPHONEOS_DEPLOYMENT_TARGET 4.0 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + OTHER_LDFLAGS PRODUCT_NAME @@ -1441,228 +1438,131 @@ iphoneos SKIP_INSTALL YES + VALIDATE_PRODUCT + YES isa - XCBuildConfiguration - name - Debug - - 3598443A8B444EEEB51C7FCA - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - path - libPods-SocketRocket.a - sourceTree - BUILT_PRODUCTS_DIR - - 35AF467E194B4472B61D6604 - - fileRef - CE42CCE58B754C7B8408D3E0 - isa - PBXBuildFile - - 36C9B6C4441B424A9B257622 - - fileRef - 2F2420CB68A34CA1941D6309 - isa - PBXBuildFile - - 372837EDEE934875BF9CC234 - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - path - libPods.a - sourceTree - BUILT_PRODUCTS_DIR - - 378508C74CAA4E29A75BE680 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods-SocketRocket-Private.xcconfig - sourceTree - <group> - - 37DA39DD91FB428281116FC1 - - fileRef - DD3F8D69D1D742269C7B8923 - isa - PBXBuildFile - - 37EDB6AFC26B46A4B13F9441 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Reachability.h - sourceTree - <group> - - 38F5582CADE24337B8B83E91 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWEqualMatcher.h - path - Classes/KWEqualMatcher.h - sourceTree - <group> - - 39859403D0564EF7A8DAB620 - - fileRef - 911DDD43E4EC457F86209F2F - isa - PBXBuildFile - - 3A5ECAA3423B4A2BB766BAF0 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - KWSpec.m - path - Classes/KWSpec.m - sourceTree - <group> + XCBuildConfiguration + name + Release - 3AAE4842914B427E9703F3EE + 2A0B0396A8154DC6935A91A9 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h - name - NSData+SRB64Additions.h + sourcecode.c.objc path - SocketRocket/NSData+SRB64Additions.h + Pods-SocketRocket-dummy.m sourceTree <group> - 3B87D4FD143E4393A97CE9EE + 2A859C4ED6E04495BC9D22D4 - includeInIndex - 1 + fileRef + F3454C9B803342A18B218796 isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWBeSubclassOfClassMatcher.h - path - Classes/KWBeSubclassOfClassMatcher.h - sourceTree - <group> + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 3BE1A5095A4B4196B99F0501 + 2AD396FB74AF4206AA28707C fileRef - C26FA000896A4E34B71C4D3B + BD20224CD09B411A8D593C28 isa PBXBuildFile - 3BF9D0401C634BA7AD1DEBC0 + 2B940E08016345FAB50B2547 fileRef - 6939898846124193BE662AED + 21413A39C5CD4494BD093263 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 3CF657903B2440FDB7F63B86 + 2BAD3BF58DAF4407BBEFE252 - buildActionMask - 2147483647 - files - - 61A7C82800E7405999BDFA7B - F8DCD79ACB594FB68905CC50 - + fileRef + 90A7AC835622462E88360C24 isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 2C1EB04AA8F24111A9B5E434 + + fileRef + 8E9F9F8062A54FE9874A7B56 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 3DE9EE5B8184470996D69209 + 2C998B7C45FA4912AE90309A + includeInIndex + 1 isa PBXFileReference lastKnownFileType - wrapper.framework + sourcecode.c.objc name - Security.framework + KWValue.m path - Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/Security.framework + Classes/KWValue.m sourceTree - DEVELOPER_DIR + <group> - 3E16E0E7472D40CBA3C21339 + 2CC5E4918BD342F29F909BF0 baseConfigurationReference - DCFDE749B62C4EB7B4EFB859 + 2846C072D3444C6B895F35AD buildSettings ALWAYS_SEARCH_USER_PATHS NO COPY_PHASE_STRIP - NO + YES DSTROOT /tmp/xcodeproj.dst GCC_C_LANGUAGE_STANDARD gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 GCC_PRECOMPILE_PREFIX_HEADER YES GCC_PREFIX_HEADER - Pods-Reachability-prefix.pch - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO + Pods-specs-Kiwi-prefix.pch GCC_VERSION com.apple.compilers.llvm.clang.1_0 INSTALL_PATH $(BUILT_PRODUCTS_DIR) IPHONEOS_DEPLOYMENT_TARGET 4.0 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + OTHER_LDFLAGS PRODUCT_NAME @@ -1673,13 +1573,15 @@ iphoneos SKIP_INSTALL YES + VALIDATE_PRODUCT + YES isa XCBuildConfiguration name - Debug + Release - 3F1F4731EFF3438BB47C828C + 2D55C38164534F49A631E8F9 includeInIndex 1 @@ -1688,105 +1590,332 @@ lastKnownFileType sourcecode.c.h name - KWExpectationType.h + KWBeKindOfClassMatcher.h path - Classes/KWExpectationType.h + Classes/KWBeKindOfClassMatcher.h sourceTree <group> - 3F2B8C9CCC7346028A7673E8 + 2D5C4349A9F844DEAA444378 - fileRef - D2540CBA91984C1BBC3BBDD0 - isa - PBXBuildFile - - 3FBDAC9ACC3C40298CFDC457 - - buildConfigurations - - 3E16E0E7472D40CBA3C21339 - 270684A05C334FBBBE8B027E - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release + includeInIndex + 1 isa - XCConfigurationList + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWItNode.h + path + Classes/KWItNode.h + sourceTree + <group> - 40270A01DE174E3C84ADFFF4 + 2DB272D6053C4807BC626964 fileRef - B56C9EC094D74CA3BB71E532 + 5B0863B4A0AD42DAAEF3CA73 isa PBXBuildFile - 40E2BE0176B3470EA948A4B8 + 2E219F2E9C9A4B0CA08AAAD9 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWExample.h + KWBeforeAllNode.m path - Classes/KWExample.h + Classes/KWBeforeAllNode.m sourceTree <group> - 413EF2635C834ED381C27BAA + 2E97EDA73E5E497BB8E46FAB includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWStringUtilities.m + KWBlock.h path - Classes/KWStringUtilities.m + Classes/KWBlock.h sourceTree <group> - 4143EB2471F44A1DA6686343 + 2E9C8CB3C258437A803DFBB8 + + isa + PBXTargetDependency + target + 8E4EBA6C393D4E669F393B84 + targetProxy + 4C88AF5D601E4E668AE94989 + + 2EEE0E09EE0145E589D340A7 fileRef - 7B891F3D4BD24A3AA32A0E14 + 5FC89F233C484D69867A73C5 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 41A83B1724544619BA12767E + 2F22EB111ADC42DE87A9457F fileRef - A4AF0D9040AC4B84B5F19209 + CAEC558939694D57B32F724A isa PBXBuildFile - 42EF8B06D2374691AC37C8CA + 2FDADB7567BB43D6B2525A5B - includeInIndex - 1 + fileRef + 5C4EA281D97F486CA91ED25B isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc + PBXBuildFile + + 2FE81D78926C484D84643F64 + + children + + 2170B8ABD2E947DAAC75C903 + 6BFBA0F65DCB4AE78E414EBF + F0C50DD325BC4FBE842F5C42 + BF956684202046CD96D1D451 + 6367B6F02A1840F7A43E2D9C + 8D79D2AEE6134607B9C42EED + 29110E5530324F50B848A719 + 8AB698371FC54087AC4A5BE3 + CAEC558939694D57B32F724A + F23B93B5FC8C4F948DF61610 + 3B0D6100E1974B87AD2C122E + 628104BBD4DB470E8D574699 + BD20224CD09B411A8D593C28 + D631F7B436E4436DA877B4A5 + 2D55C38164534F49A631E8F9 + 3D99BC5A70244E529787784B + 53371DB950A44FE2B08263D5 + F3376D236AF94D0F90F29DF6 + E97496D6E4684CC8AD20ABA6 + 9B571EB53ABA42F487FDF7E1 + B42B66B2AB2C439B85DB6F3B + 1D13657582A1438B8CB5826D + 12F77D49665540A999F08418 + 90A7AC835622462E88360C24 + 17CC07321D9F4DD5A8B3E2BB + F01F77AD0DDF4A2E87244480 + 611BECEF302D434B9D565C36 + B1AB0D401D5445A593F9B290 + 17237A26F10D450C8403F039 + F9EEAD8F5EAC4B4E9F497A28 + 49FACA0C9F5749A992DBCABD + 2E219F2E9C9A4B0CA08AAAD9 + A87A1F19A5E24961855B606A + AB79E86D533B4685BC091A9D + 2E97EDA73E5E497BB8E46FAB + C370DE5C47884C4592EBA2B9 + 29CC20FB4C3C4EC78A237345 + 80915F5DDFAA4A89A0559079 + 21CFD7BD0A7A49D99591CCF2 + 887C8C47955141DB8E7CDA66 + 8F4D7E1E163843DE9DBF6C23 + 5FC89F233C484D69867A73C5 + 79E64BB784CE4584A5410888 + ED590E8646BB4A8A96ACF011 + A45B973FF3304AFDBEC54200 + 52320E04B7864854B86D7E04 + 728ED010349F4E4C9249209C + 7074542AAB8D443198B871D1 + 8DB5CFD169084CDA8AD36554 + 9FE41677EAC9448698D57AF2 + AE467A73803847088E1E0707 + F3C145405CBC4A00862AAED7 + 65990ABADFE749B7BA753D58 + 031B6BA4066440EAAF7C395F + 9B3E0953C6D64767883CAC5C + 54CB8D6CA28E43659CE6DF8E + DCD6CA8377B3483FB50DA56F + 1731E8CAC2234640B82FBD9D + 5E5E6B2CFE2445379929C794 + C4067E08F10A4CED82E5D513 + B65B974FF4CF4C3BB160D7D2 + 1F63D9A4933B46CFBE7147E3 + 7AB80B2C80CA44A2936CF0F9 + A778109E7D50436290127673 + 1DD726E13AF0433EB40BD89C + 4D4DEC6B3F8F47B1A7835BD1 + 694774DB4D5C4626939E9F05 + 91C847FC9A9D4BC78051552A + DB532E7DD2C14E38BF0AA0AB + D045CEF3EC0B400DB21E946B + D57E36F90B2C4ED198A60D7D + 2055DC61B7024729929F295B + 1C2C7AE386504CFEA89861A8 + 3A7B3059C5104C918D94B22C + D08C3321806E4969BEF25D4F + 8376554B9B6E4661AE7502E1 + C4E290F9834D4B04B8CA5963 + C2B4892303BC46B29BF170FF + C762FA623AD54994865A5C20 + CA68B81544F441639A6C7FC2 + 49503502CA0D45EFA0D71FF1 + 814B183C251C4643A08C4BF3 + 3EF010FE5CC14A038E33CB45 + 6FE6DE09064343AF8D6C5C5C + 75170BD32DD944139E99DA3B + 6BE06CB751AD4C64B3B3C084 + 8E9F9F8062A54FE9874A7B56 + 3313E27345154B21933E5C7C + 42FACB98211A4A3DAA17F8B2 + 28F34795FB114FBDA7EC29F1 + AB605CA8305E474A8F4B18D3 + 2223BD9BF15C4E038845AC59 + 04F8EDEA67CD47CFAB41A953 + 2D5C4349A9F844DEAA444378 + 1EB52154FAA54382B9DE5774 + 8DDBA4EB259941A9999709D8 + 1CE0DAE9B1C240B89A90A668 + 594FA71E99454011B415C046 + 4982B173575F45CBBB785B47 + CEAE6BFD13A6444BA369FEEB + BCCB43FD08904BA1B7FFA2FF + 6D3299A50BC348AC87FCE9A4 + E7D1FC76CAB84EB9BB536038 + CEBEC57FB3F64041B456877F + 3A20B71BE63C450F84F5F622 + CE09F3BDE9EC4A75A2BA873A + E5145671E6D54BEFBB2490C9 + A81872A9D4564C6591140F8F + 433CE8D0403C40DE8F788617 + 51CE02EBD0C24A5195D33FF3 + B91989E56498406E8FB4D35A + A5955F94002043A2BBB63E23 + 5727A08792DD487E8B691F68 + 03127DB2B76E413389B71110 + 019CF53B9F934120867BCC03 + ACC0458522D94F04BD12A80C + 90D6143BE00D4C9EA4D68B38 + 4C2170171E2B4E01B5B62E1B + 13996E6DDDE04F34B05DC432 + 3CF0C1FB3C68470B9AF60830 + 02CE1847192D46CB99248DA7 + 21413A39C5CD4494BD093263 + 07926D06ED154D638E71C495 + 4B8B175120404E38B5027587 + 101DE15DDFD44EDAA0D2C31F + 28BE4156A6E4457EA0AB6301 + F3C2F30562FD42ACA73225D0 + 1AF71CB4A9344C2BBB738F47 + 8D78F141C95141BE9A535384 + 0BC66B4BDF7D418B9743BEA7 + 985BCE1FE41D40A2B5EC00D8 + 87BD76B106A2436DA1BEAD12 + B5D8AE281BA84EB0A11447AC + DB2C631DFE764E938AF04269 + 2106E4D8F47D4768A05CEF38 + 962EC98421D24966A0E4C696 + F8DA4285419B41DB83E6082E + 2289F5BE59054018BAACAEE8 + 7FAAEAF439364840A8BF958D + A8E59E320A3B4435932F948C + AB4A82823B0348B588BFA3E0 + C1F5B1CDE60B43B280ED49D6 + 0136C6FEC0404CC29428E102 + F157A7F4CB9A4C599B5328A5 + 99EDF7C7A40A4345A4AC2A00 + 0D01DC7FB6D04D7882069860 + 5EDADC32109A4467A3CCA870 + AD6F4D23C0D84697AA90F5A5 + 2C998B7C45FA4912AE90309A + BDBF15DF2B694F6A9C4F3D14 + B88CEEAE2E1F49A882FDF719 + B23124130A98430C90B9154F + 985D20D82D914C949D88A23A + 5B0863B4A0AD42DAAEF3CA73 + 27A412CBB1E04E7992863DB1 + 6AA39E1AFBD54BF480FF6BED + 037C6F64A77342F389E47CA1 + FE3DB58BF5034002BA9880D8 + 45703DE7DE3341679BFBCB8A + 729162EE598F4D65BFE3634D + 99F10C2BC336401B889BBC1C + 090196E35042422EACB1091F + A9C4CB0990804BE2BAFB88F1 + F24A12F6E2C64DADB97A429F + 9B6F68AFEB3745FB9F3D32B2 + EC370BCD987D43A7A1381C09 + F89312611E42485AAEF9F660 + 35AAAED225E9468D9C02BF36 + 57CA756B8C7A46EAA377F67F + 27254752573F454797B1ACFE + B9CD9DBAAAE44EDD9F356FC5 + 0DAEE9065B0A49F4A174501A + 5C4EA281D97F486CA91ED25B + 6D85F37568564FD58D7EA465 + 6A36015C0DE8407CA634E58A + F3454C9B803342A18B218796 + 8CDFB9978A914A6E8E289296 + D6BC5A79F1F947EDBA79F086 + 27604F8B2A3342FFBB282E37 + + isa + PBXGroup + name + Kiwi path - Pods-dummy.m + Kiwi sourceTree <group> - 435D621026BA4A4BA2CDA519 + 3007A43452214FE19D180C47 fileRef - CEE65C51659C4068A1217618 + AD6F4D23C0D84697AA90F5A5 isa PBXBuildFile - 435DA66FF7A747009B18683B + 309704F18AA041F692B94C5D + + fileRef + CEBEC57FB3F64041B456877F + isa + PBXBuildFile + + 30FFC403CA524B3683975801 + + fileRef + D631F7B436E4436DA877B4A5 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 33027B252C0A47288538AB99 + + containerPortal + CD9632B3B8EC456ABE0A7912 + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + BDBE7202A8214393ACF3E379 + remoteInfo + Pods-SocketRocket + + 3313E27345154B21933E5C7C includeInIndex 1 @@ -1795,64 +1924,132 @@ lastKnownFileType sourcecode.c.h name - KWMatcher.h + KWInequalityMatcher.h path - Classes/KWMatcher.h + Classes/KWInequalityMatcher.h sourceTree <group> - 43A8055AEDED4330B76BE596 + 3413A243F3B24702BD368AD7 fileRef - 7F06775D39F24B249E7E9122 + 1AF71CB4A9344C2BBB738F47 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 440815E09DF54DF3AA139D21 + 344ECD924B4549C185303BDE fileRef - 79A57B9FECCF46C583B20ECD + 985D20D82D914C949D88A23A isa PBXBuildFile - 458F589F281F49C6BF344536 + 345A68049CBA4882857C9C19 - fileRef - D0AECFFEA1B344FEBD6CD493 + baseConfigurationReference + FE5D2C2CBA92447DAFACD29C + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + YES + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-Reachability-prefix.pch + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 4.0 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + VALIDATE_PRODUCT + YES + isa - PBXBuildFile + XCBuildConfiguration + name + Release - 46E94487428C47AEA506CD79 + 34F91BD03C514E0799F3C231 fileRef - 6D60DBF99A7744EB8DD6EC94 + D50EC4A6AB114D948A510707 isa PBXBuildFile - 4861FEB6AAA0496BAC78A97E + 35AAAED225E9468D9C02BF36 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + NSObject+KiwiSpyAdditions.m + path + Classes/NSObject+KiwiSpyAdditions.m + sourceTree + <group> + + 383EE8D4E457472CAFA322B9 + fileRef + BC643AC9148A4262AFE6A65C isa - PBXTargetDependency - target - FDA401033508495A940D4635 - targetProxy - 2799AE84635F4E36A69CBC6B + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 489CFB7E8CA340D49C7F1374 + 39034D5B3F194CD990AC513B fileRef - 2233F66196FD4088AB894F50 + E97496D6E4684CC8AD20ABA6 isa PBXBuildFile - 48E0BDC254584214A34AAD1B + 39825487BC7340BFB0EAF451 fileRef - 846E715C2E6A471D8F5AED4B + 58D89DE341D8424F9778003E isa PBXBuildFile - 49362D1BDF434C2681D9EA73 + 3A20B71BE63C450F84F5F622 includeInIndex 1 @@ -1861,20 +2058,13 @@ lastKnownFileType sourcecode.c.h name - KWCountType.h + KWMessagePattern.h path - Classes/KWCountType.h + Classes/KWMessagePattern.h sourceTree <group> - 4A39920C40A440F1A1104A6D - - fileRef - C81D7E013F2944A9BD99B08A - isa - PBXBuildFile - - 4AA7720CA1EC4EB4B2EE6F86 + 3A7B3059C5104C918D94B22C includeInIndex 1 @@ -1883,73 +2073,55 @@ lastKnownFileType sourcecode.c.h name - KWNull.h + KWFormatter.h path - Classes/KWNull.h - sourceTree - <group> - - 4AEAC0FD0D8745ADAEEE6B20 - - fileRef - EA5563D0777946FBAEF0B6EB - isa - PBXBuildFile - - 4B8FD086C5AF4782A1F39ABF - - children - - 372837EDEE934875BF9CC234 - 6D006AA68F5343FC87E29953 - 3598443A8B444EEEB51C7FCA - E14B41E1242149A78CEEF46B - C146634260D14659A0F9A2EC - C670E39CDCCA4FE2A3B4D495 - - isa - PBXGroup - name - Products + Classes/KWFormatter.h sourceTree <group> - 4BA1F22D0D9C4D3F80002ADE - - fileRef - 0B780B1BFAED4F2FAFDEB736 - isa - PBXBuildFile - - 4C7BB6D8360E4B1DA6A8038F + 3B0D6100E1974B87AD2C122E includeInIndex 1 isa PBXFileReference lastKnownFileType - text + sourcecode.c.h + name + KWBeEmptyMatcher.h path - Pods-acknowledgements.markdown + Classes/KWBeEmptyMatcher.h sourceTree <group> - 4CD04D1D584F451FB2F326EF + 3B0F2646415548AD84525C6F includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h - name - OHHTTPStubs.h + text.xcconfig path - OHHTTPStubs/OHHTTPStubs.h + Pods-specs.xcconfig sourceTree <group> - 4D1208DB7BC1462299460C06 + 3BE44394C038473FB097DD0A + + fileRef + 45703DE7DE3341679BFBCB8A + isa + PBXBuildFile + + 3C6F530B048D4F21A218ECED + + fileRef + 6367B6F02A1840F7A43E2D9C + isa + PBXBuildFile + + 3CF0C1FB3C68470B9AF60830 includeInIndex 1 @@ -1958,13 +2130,28 @@ lastKnownFileType sourcecode.c.objc name - KWIntercept.m + KWProbePoller.m path - Classes/KWIntercept.m + Classes/KWProbePoller.m sourceTree <group> - 4F52B77D3E4649088886C202 + 3D6CD950BF214ADC86AF7F32 + + buildActionMask + 2147483647 + files + + 0960F8403AD2492AA7CE7920 + 383EE8D4E457472CAFA322B9 + 012E700EE221494EA64AFFDC + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 3D99BC5A70244E529787784B includeInIndex 1 @@ -1973,20 +2160,35 @@ lastKnownFileType sourcecode.c.objc name - NSObject+KiwiSpyAdditions.m + KWBeKindOfClassMatcher.m path - Classes/NSObject+KiwiSpyAdditions.m + Classes/KWBeKindOfClassMatcher.m sourceTree <group> - 500CB610C06C4A1EA1CCB1E4 + 3D99FBF576A4430DBF48EDC5 fileRef - A1DEB3746CC548F28D45865F + 3313E27345154B21933E5C7C isa PBXBuildFile - 508294BD6D4A48588D9D147E + 3E01AFF0C90A445E9C3CCE93 + + children + + 4ACAE7E3B69041E99177D9E2 + C8AF18EF3E7942D38FE7365C + 6C7E5EB69385496B94455245 + 8ABD6E6739964423BA924C6A + 206D8429722747DB9FB10D71 + + isa + PBXGroup + sourceTree + <group> + + 3EF010FE5CC14A038E33CB45 includeInIndex 1 @@ -1995,13 +2197,32 @@ lastKnownFileType sourcecode.c.objc name - KWMock.m + KWGenericMatchingAdditions.m path - Classes/KWMock.m + Classes/KWGenericMatchingAdditions.m sourceTree <group> - 50B71BCF9B254AE3A3AEE204 + 3F888701D26B4C87ABBC390A + + fileRef + 1731E8CAC2234640B82FBD9D + isa + PBXBuildFile + + 402B84B30C5E462A851F15F2 + + fileRef + 2106E4D8F47D4768A05CEF38 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 403488704D9146CC9BAC5C5D buildSettings @@ -2068,28 +2289,285 @@ name Debug - 50C2B3AA1FEA44DB94FA2CB6 + 40A3C3A05AA6404DB839D750 + + fileRef + 93907A2127B64E32A9E73A34 + isa + PBXBuildFile + + 41633299FEFB4BAE9BE21D2D + + buildActionMask + 2147483647 + files + + 587E6242A41949639A8857D4 + F3494B9C0587408EBEF65482 + FB9511A7CE8C4CB59457793C + D636C2CC9FCC4135A468818B + 54CB21C45F1D4ED98C3236E9 + 6F483306A39C43AC8D0DE18C + 30FFC403CA524B3683975801 + 453F8667B9454243A37AFBA2 + 0F9B254138944CD0A553BF06 + 60E95407C92A4251B39C0907 + 59E845735CD54D7FB2D9E5CE + 2BAD3BF58DAF4407BBEFE252 + 8A76285BC583440486FABAA8 + D4FB66DCAF1F49FE8D340FA5 + 66C436D94B974886A55AE126 + A01E4D115F2849D4A3A2C6E7 + E3BD5F4B2173405C929825D9 + 871F490A59D84E52B75981D7 + A983B2E7AB4E4AFD849B3FCA + 55FCA4255C1E4B3B8AA33D4C + 2EEE0E09EE0145E589D340A7 + 60F7AA8398BD403F83486E6D + 5DA8C85D49C94565839F05F4 + 076A1599E77641D8B751C3B7 + 76A0A952EB364167AE51D83E + 7ED13B5B29FB4489A7F9375F + 8A584269B4744BCDBE97EF8A + F8A3DD7E62C6487FB1FD14B3 + CDF76A42FEE946EE82A19B74 + A4157F1FDC144D338722F240 + E4DBB433AA684B3897C1F767 + 0375994CD49046BDA9F30123 + 7254F50075A145E8BB8E64C3 + 66A5C98C0BF6436F960CD7E7 + 7AEE7246F18E4610B356DFBF + 0A7CB779FCC14A61982E0E9E + 19BF9FFCFAB347B19BEBF81A + 7A0BFC99D1754829817C5823 + 27511A96CF144F4590E59119 + D7F776B944054C1BBA954739 + 2C1EB04AA8F24111A9B5E434 + C05EA06F58B6425E9A04FE02 + 7C99EF6B6936428FBC9E40A0 + ED3966A49AC3465D9F195D7A + D7533F2E00BE47BC866F514F + 080B01D0317F4003B6F2E75A + 82DCBD4F922644089A232368 + FFADB713E0804ED2B518DA06 + BAE78614D5674F4A90C954C9 + 6C6C9D8575784112B85F541A + CB010741BE0540229D83AB23 + CA745C3B305B4F4090486E83 + 4FA90AF997164714ACB7EFB5 + 25D18118B70B49E8B307C211 + 65947214110742B8A82DDDB8 + 1E0F4A803BA542E49C3AC719 + 2B940E08016345FAB50B2547 + 5A84C6B77EF4484F9A56CC17 + 8035F6FB71494134AA09D4C4 + 3413A243F3B24702BD368AD7 + 283FCB30F7A84712BC18CAE2 + 7F989206AFA94BBC94EC2B48 + 402B84B30C5E462A851F15F2 + D6982AC860334EF99D7F9BEA + C6B0D3EC209B44DFBDC97945 + 54E5B00531E342DBBE74D59C + 02A5E865C1E542908AC9092E + 21E1DC6BEE1748869B3FF7EE + EFE7CE3B4F544058B0BF22BF + 44E035ED75E84C0A9485AB7C + 62C6D9A3383D43448AE8D98D + 8E1BAFC9F2A64EDBB13EEB67 + F92DB362259A4E5EAB44F2EB + 9E2AFA1C33AE4B819805F5C8 + 0162EEF03886440192ACD088 + A0885C9E44AC4AC4959CAB5F + 8D49E21B5C094FD7BBCF9B67 + 068884E3B2C9451F817637D8 + 68707D2853BA4964B0CA1C1A + C00DBBADBF4D47D689FEF638 + 2A859C4ED6E04495BC9D22D4 + ACED28F81A714FED8A2C1765 + 91066291B7E144D6827A0862 + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 4264DC13498E4DF9AE5F5BCC + + children + + 0DB8C587984C4C819B132205 + B99D2982DD364339B4DE196A + 2A0B0396A8154DC6935A91A9 + 49E5C96584DA456BB22DCF55 + + isa + PBXGroup + name + Support Files + sourceTree + SOURCE_ROOT + + 42A653A52FE94003BCF629EC + + fileRef + C73D78A31EED4D29A11362CC + isa + PBXBuildFile + + 42F4B24C94CE4905BF683ECF + + fileRef + 29110E5530324F50B848A719 + isa + PBXBuildFile + + 42FACB98211A4A3DAA17F8B2 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWInequalityMatcher.m + path + Classes/KWInequalityMatcher.m + sourceTree + <group> + + 433CE8D0403C40DE8F788617 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWMessageTracker.m + path + Classes/KWMessageTracker.m + sourceTree + <group> + + 43DF4E7A028C430ABD224344 + + containerPortal + CD9632B3B8EC456ABE0A7912 + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + A7D9977497BA4F6AB4A0889F + remoteInfo + Pods-Reachability + + 44B77F29E6494C38BE38903B + + fileRef + F0C50DD325BC4FBE842F5C42 + isa + PBXBuildFile + + 44E035ED75E84C0A9485AB7C + + fileRef + 2C998B7C45FA4912AE90309A + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 453F8667B9454243A37AFBA2 fileRef - 65EDB901E0CA4106A5D94BCC + 3D99BC5A70244E529787784B isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 45703DE7DE3341679BFBCB8A + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + NSInvocation+OCMAdditions.h + path + Classes/NSInvocation+OCMAdditions.h + sourceTree + <group> - 5108AFB576B048A99D3E3E52 + 4780FAA921314985AFBB5680 fileRef - 0EBA34AEF95C4A46A6CE35CA + B88CEEAE2E1F49A882FDF719 isa PBXBuildFile - 51912FA9780447728D5DB1C9 + 480B01DBD2584CB582F8F9D2 fileRef - 2CE302F0CDD74C84BBC8BD22 + 3B0D6100E1974B87AD2C122E isa PBXBuildFile - 51C6E8DD8F914E249A02D86D + 49503502CA0D45EFA0D71FF1 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWGenericMatcher.m + path + Classes/KWGenericMatcher.m + sourceTree + <group> + + 4982B173575F45CBBB785B47 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWMatcher.m + path + Classes/KWMatcher.m + sourceTree + <group> + + 49E5C96584DA456BB22DCF55 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + Pods-SocketRocket-prefix.pch + sourceTree + <group> + + 49FACA0C9F5749A992DBCABD includeInIndex 1 @@ -2098,13 +2576,30 @@ lastKnownFileType sourcecode.c.h name - KWFailure.h + KWBeforeAllNode.h path - Classes/KWFailure.h + Classes/KWBeforeAllNode.h sourceTree <group> - 521981D242014582BC666854 + 4ACAE7E3B69041E99177D9E2 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text + name + Podfile + path + ../Podfile + sourceTree + SOURCE_ROOT + xcLanguageSpecificationIdentifier + xcode.lang.ruby + + 4B8B175120404E38B5027587 includeInIndex 1 @@ -2113,13 +2608,20 @@ lastKnownFileType sourcecode.c.objc name - KWBeNonNilMatcher.m + KWReceiveMatcher.m path - Classes/KWBeNonNilMatcher.m + Classes/KWReceiveMatcher.m sourceTree <group> - 5267CBA8D21040FEBE154A6B + 4B931C4664EB4FBFA9DB5965 + + fileRef + D53A889F73AC4196A1141145 + isa + PBXBuildFile + + 4C2170171E2B4E01B5B62E1B includeInIndex 1 @@ -2128,35 +2630,33 @@ lastKnownFileType sourcecode.c.h name - KWVerifying.h + KWProbe.h path - Classes/KWVerifying.h + Classes/KWProbe.h sourceTree <group> - 541F3D7FFADD45188E85D2B5 + 4C88AF5D601E4E668AE94989 - buildActionMask - 2147483647 - files - - ACDD2D51B5934070ABD622EB - A7F958149CD444BABE1E16D9 - 130928DE952446CABA9FA5EB - + containerPortal + CD9632B3B8EC456ABE0A7912 isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 8E4EBA6C393D4E669F393B84 + remoteInfo + Pods-specs-OHHTTPStubs - 5462F79002B74ED29B81E79E + 4D07028604BA456D84A94849 fileRef - 1DBCF24C3397436A93F8209F + A778109E7D50436290127673 isa PBXBuildFile - 5468E232AFE944D09BC96C40 + 4D4DEC6B3F8F47B1A7835BD1 includeInIndex 1 @@ -2165,124 +2665,130 @@ lastKnownFileType sourcecode.c.h name - KWItNode.h + KWExampleNodeVisitor.h path - Classes/KWItNode.h + Classes/KWExampleNodeVisitor.h sourceTree <group> - 54B2AACB50B045C5B93E084A + 4DD3923901304120927407F6 + + fileRef + A8E59E320A3B4435932F948C + isa + PBXBuildFile + + 4E9B6F4E19504257A4F10A33 + + buildActionMask + 2147483647 + files + + 4B931C4664EB4FBFA9DB5965 + B0653DBFFD1F47D5B0316BF2 + + isa + PBXHeadersBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 4FA90AF997164714ACB7EFB5 fileRef - 42EF8B06D2374691AC37C8CA + 5727A08792DD487E8B691F68 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 54F4B67A8A5A4C5F87E1D626 + 4FD45CA3C1EA4E05A610D789 fileRef - BD576C9F5F494723BB82D1C8 + 8376554B9B6E4661AE7502E1 isa PBXBuildFile - 55853AA20C3F4817A6076A6F + 502E0001F2A847BDA37F39C8 fileRef - 7C92B8C48626490FB1D72A56 + FCF264B3CF2A49CE981915D1 isa PBXBuildFile - 560ABCF5EA28411BBDD67345 + 502F0A07B2C74B239EA14FC7 fileRef - 7F4FEB6A55C74466BE5510EC + 57CA756B8C7A46EAA377F67F isa PBXBuildFile - 56671128374E4360A275B2F1 + 50E25ADAF1BE4AD3B6FFD0B3 - attributes - - LastUpgradeCheck - 0500 - - buildConfigurationList - E2975C47AF16443685905F4B - compatibilityVersion - Xcode 3.2 - developmentRegion - English - hasScannedForEncodings - 0 + fileRef + 03127DB2B76E413389B71110 isa - PBXProject - knownRegions - - en - - mainGroup - F9FF974B80E14996B17783AC - productRefGroup - 4B8FD086C5AF4782A1F39ABF - projectDirPath - - projectReferences - - projectRoot - - targets - - C61690B2DA9C420E93D95AB5 - EC1DFB002A1B445EB91488C8 - 2B0A0813AF0741DBB91ACC57 - C7BD8B46A79D490396651011 - FDA401033508495A940D4635 - F3A20961FEC8436DAF996DD4 - + PBXBuildFile - 568C9A7C6150465CA9738957 + 51CE02EBD0C24A5195D33FF3 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.script.sh + sourcecode.c.h + name + KWMock.h path - Pods-specs-resources.sh + Classes/KWMock.h sourceTree <group> - 57B65E09772E4511A472B5A0 + 52320E04B7864854B86D7E04 - fileRef - 32BAB6074DFA4FA69DFF7572 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWChangeMatcher.m + path + Classes/KWChangeMatcher.m + sourceTree + <group> - 584440BE7F2F49209EDBCE42 + 52A573B4E10E4065A98C488D includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h - name - KWSymbolicator.h + text.xcconfig path - Classes/KWSymbolicator.h + Pods-Reachability.xcconfig sourceTree <group> - 586D743CA46F49A78891596F + 532E269EEC5445FB9593929F - fileRef - 24756F2002E14C31A215BC84 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + Pods-specs-OHHTTPStubs-dummy.m + sourceTree + <group> - 5885C1F6D9574ADBAB1DDF96 + 53371DB950A44FE2B08263D5 includeInIndex 1 @@ -2291,42 +2797,39 @@ lastKnownFileType sourcecode.c.h name - KWMock.h + KWBeMemberOfClassMatcher.h path - Classes/KWMock.h + Classes/KWBeMemberOfClassMatcher.h sourceTree <group> - 5893B92869AB49698179161F + 537B6023702D4F4EA0F8B0A5 fileRef - 5468E232AFE944D09BC96C40 + A87A1F19A5E24961855B606A isa PBXBuildFile - 589998785A2D4651981C7CF0 + 53A025F40F7D4DD5AE8D9984 fileRef - CEDA435F85FB4EC2AC7E3A9D + 4D4DEC6B3F8F47B1A7835BD1 isa PBXBuildFile - 58B96E09E6C9433FA96FFB68 + 54CB21C45F1D4ED98C3236E9 - includeInIndex - 1 + fileRef + F23B93B5FC8C4F948DF61610 isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWMatchVerifier.h - path - Classes/KWMatchVerifier.h - sourceTree - <group> + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 5A5905FA9EE947969254BA7E + 54CB8D6CA28E43659CE6DF8E includeInIndex 1 @@ -2335,13 +2838,37 @@ lastKnownFileType sourcecode.c.h name - KWMessageTracker.h + KWDeviceInfo.h path - Classes/KWMessageTracker.h + Classes/KWDeviceInfo.h sourceTree <group> - 5C556B2B2E4B4C99BEEF778A + 54E5B00531E342DBBE74D59C + + fileRef + AB4A82823B0348B588BFA3E0 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 55FCA4255C1E4B3B8AA33D4C + + fileRef + 887C8C47955141DB8E7CDA66 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 5727A08792DD487E8B691F68 includeInIndex 1 @@ -2350,43 +2877,53 @@ lastKnownFileType sourcecode.c.objc name - SRWebSocket.m + KWNull.m path - SocketRocket/SRWebSocket.m + Classes/KWNull.m sourceTree <group> - 5D5449014E644CFB98449F5F + 57CA756B8C7A46EAA377F67F includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWBeNilMatcher.m + NSObject+KiwiStubAdditions.h path - Classes/KWBeNilMatcher.m + Classes/NSObject+KiwiStubAdditions.h sourceTree <group> - 5DD5F28EF02942E3B404B619 + 587E6242A41949639A8857D4 + fileRef + 6BFBA0F65DCB4AE78E414EBF + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 58D89DE341D8424F9778003E + + explicitFileType + archive.ar includeInIndex - 1 + 0 isa PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - OHHTTPStubs.m path - OHHTTPStubs/OHHTTPStubs.m + libPods-Reachability.a sourceTree - <group> + BUILT_PRODUCTS_DIR - 5DFEFC48FF144766B5D6B189 + 594FA71E99454011B415C046 includeInIndex 1 @@ -2395,92 +2932,120 @@ lastKnownFileType sourcecode.c.h name - KWBeNonNilMatcher.h + KWMatcher.h path - Classes/KWBeNonNilMatcher.h + Classes/KWMatcher.h sourceTree <group> - 5E08C48F2CB0424A8B0C6483 + 59E845735CD54D7FB2D9E5CE fileRef - 83A7D77F40F04C81AD0A1890 + 1D13657582A1438B8CB5826D isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 5E36D1AD183C4E52B4BE4A4F + 5A84C6B77EF4484F9A56CC17 + + fileRef + 4B8B175120404E38B5027587 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 5AA7ED306FAF4838B8648877 - includeInIndex - 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + wrapper.framework name - NSMethodSignature+KiwiAdditions.h + Security.framework path - Classes/NSMethodSignature+KiwiAdditions.h + Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/Security.framework sourceTree - <group> + DEVELOPER_DIR - 5FB13B1E6CCE4DA587C3C45F + 5AF707C5EEA8429EB99F07AE fileRef - 9D11BEEFD4D049AFA6B3BA0D + 101DE15DDFD44EDAA0D2C31F isa PBXBuildFile - 604D0E44285B49929F8B5886 + 5B0863B4A0AD42DAAEF3CA73 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWInvocationCapturer.m + KiwiBlockMacros.h path - Classes/KWInvocationCapturer.m + Classes/KiwiBlockMacros.h sourceTree <group> - 60DEAD6ECF8E490A8FA7EB8B + 5B1EC67926F14E8CBE582734 fileRef - F01CE9876D9E4C0CA3DACA58 + 0D01DC7FB6D04D7882069860 isa PBXBuildFile - 61A7C82800E7405999BDFA7B + 5C3F85CBDE5E4B00B6BB9511 fileRef - E0F72EF850DD4C8F9533D52E + 0BC66B4BDF7D418B9743BEA7 isa PBXBuildFile - 624B26EBD7F3450EB86E5C65 + 5C4EA281D97F486CA91ED25B - fileRef - 2DB0F5A2BA0241F5BDFE8B02 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + NSProxy+KiwiVerifierAdditions.h + path + Classes/NSProxy+KiwiVerifierAdditions.h + sourceTree + <group> - 6257FBE77DCC4452980D88BA + 5CB94DED3E4946F6AA490731 fileRef - C146634260D14659A0F9A2EC + 99F10C2BC336401B889BBC1C isa PBXBuildFile - 62868CB2DFA94A088C42C018 + 5DA8C85D49C94565839F05F4 fileRef - 1B7738AF037D4A02B7D6F74D + 52320E04B7864854B86D7E04 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 62870C1C913F4CFE9EABF48D + 5E5E6B2CFE2445379929C794 includeInIndex 1 @@ -2489,33 +3054,27 @@ lastKnownFileType sourcecode.c.objc name - NSMethodSignature+KiwiAdditions.m + KWEqualMatcher.m path - Classes/NSMethodSignature+KiwiAdditions.m + Classes/KWEqualMatcher.m sourceTree <group> - 632B1E0FDA6641FE802BFEC5 + 5E747111A42F4CCCA55D7309 fileRef - 1AB5DA2BA8F84204A5C26473 + 2170B8ABD2E947DAAC75C903 isa PBXBuildFile - 63D8438322F243D589DFFF74 + 5EC4AD4EF58C4385AD666A4D - containerPortal - 56671128374E4360A275B2F1 + fileRef + D57E36F90B2C4ED198A60D7D isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - 2B0A0813AF0741DBB91ACC57 - remoteInfo - Pods-SocketRocket + PBXBuildFile - 64A8529690894744B540B826 + 5EDADC32109A4467A3CCA870 includeInIndex 1 @@ -2524,13 +3083,20 @@ lastKnownFileType sourcecode.c.objc name - KWBeEmptyMatcher.m + KWUserDefinedMatcher.m path - Classes/KWBeEmptyMatcher.m + Classes/KWUserDefinedMatcher.m sourceTree <group> - 65EDB901E0CA4106A5D94BCC + 5F71308CB84748969FE89A34 + + fileRef + 27A412CBB1E04E7992863DB1 + isa + PBXBuildFile + + 5FC89F233C484D69867A73C5 includeInIndex 1 @@ -2539,87 +3105,50 @@ lastKnownFileType sourcecode.c.objc name - KWConformToProtocolMatcher.m + KWCallSite.m path - Classes/KWConformToProtocolMatcher.m + Classes/KWCallSite.m sourceTree <group> - 67AA976E7118427D98F0C8F1 + 608C824C392E4D6EBB95C62A includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - KWBeMemberOfClassMatcher.m + text.script.sh path - Classes/KWBeMemberOfClassMatcher.m + Pods-resources.sh sourceTree <group> - 67FC089B3C79470382B8F616 + 60E95407C92A4251B39C0907 - baseConfigurationReference - 29B873493F4242009C065CC8 - buildSettings + fileRef + 9B571EB53ABA42F487FDF7E1 + isa + PBXBuildFile + settings - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Pods-specs-Kiwi-prefix.pch - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 4.0 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker - isa - XCBuildConfiguration - name - Release - 68DB63AF6A264129A7D8F79E + 60F7AA8398BD403F83486E6D fileRef - 781EED02747A41BCA689AD4B + ED590E8646BB4A8A96ACF011 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 6939898846124193BE662AED + 611BECEF302D434B9D565C36 includeInIndex 1 @@ -2628,55 +3157,67 @@ lastKnownFileType sourcecode.c.h name - KWBlock.h + KWBeWithinMatcher.h path - Classes/KWBlock.h + Classes/KWBeWithinMatcher.h sourceTree <group> - 6BBA5AB33C4B4E94B82A7A69 + 61FDDB3765BC40D8AD1CA677 - fileRef - C4C50EB7E44B43129EB97EB8 + buildConfigurationList + C0A9A5E7219049B1A83AFE0A + buildPhases + + 2039E9183C1B42ED89EBAE7A + CBFDB18403534B0E8121C3A5 + + buildRules + + dependencies + + EBC3533FED874BBDBFE81F12 + C7AB83A9B09C4209A17BCBA1 + isa - PBXBuildFile + PBXNativeTarget + name + Pods + productName + Pods + productReference + 0EBFE40558BC490F91DF77BC + productType + com.apple.product-type.library.static - 6BCCA55C01E6486D9E59A6F2 + 628104BBD4DB470E8D574699 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWMessageSpying.h + KWBeEmptyMatcher.m path - Classes/KWMessageSpying.h + Classes/KWBeEmptyMatcher.m sourceTree <group> - 6D006AA68F5343FC87E29953 - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - path - libPods-Reachability.a - sourceTree - BUILT_PRODUCTS_DIR - - 6D57168DA74A48159127E19B + 62C6D9A3383D43448AE8D98D fileRef - 02917EAEA3E74E9FB9A54260 + B23124130A98430C90B9154F isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 6D5F7E43DBC84A86B2E83494 + 6367B6F02A1840F7A43E2D9C includeInIndex 1 @@ -2685,28 +3226,47 @@ lastKnownFileType sourcecode.c.h name - KiwiBlockMacros.h + KWAny.h path - Classes/KiwiBlockMacros.h + Classes/KWAny.h sourceTree <group> - 6D60DBF99A7744EB8DD6EC94 + 64101EE568764E3EBAD29FA8 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWUserDefinedMatcher.h + OHHTTPStubs.m path - Classes/KWUserDefinedMatcher.h + OHHTTPStubs/OHHTTPStubs.m sourceTree <group> - 6D78448E158F49E48C4EDB97 + 6513C68576DD40C4ADA9F9F2 + + fileRef + BDBF15DF2B694F6A9C4F3D14 + isa + PBXBuildFile + + 65947214110742B8A82DDDB8 + + fileRef + 90D6143BE00D4C9EA4D68B38 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 65990ABADFE749B7BA753D58 includeInIndex 1 @@ -2715,95 +3275,143 @@ lastKnownFileType sourcecode.c.h name - KWBeEmptyMatcher.h + KWContextNode.h path - Classes/KWBeEmptyMatcher.h + Classes/KWContextNode.h sourceTree <group> - 6EBBEC059099403F9F47A889 + 66A5C98C0BF6436F960CD7E7 fileRef - 79A0E4CBBBAB48E29B02BA2F + 1C2C7AE386504CFEA89861A8 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 6F9533FC66B94324B2B47CD6 + 66C436D94B974886A55AE126 - children - - E3C5E4D8B47043ABB6B3476D - D7E621A17464496D826E0131 - 010291D50DF6440BBB36F5D3 - 18083E9F12D14E8CA1A76438 - + fileRef + F9EEAD8F5EAC4B4E9F497A28 isa - PBXGroup + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 68707D2853BA4964B0CA1C1A + + fileRef + 0DAEE9065B0A49F4A174501A + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 694774DB4D5C4626939E9F05 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h name - Pods + KWExampleSuite.h + path + Classes/KWExampleSuite.h sourceTree <group> - 6FE92DE38FA4459D8D7E0844 + 6A36015C0DE8407CA634E58A - children - - 21C20674E43444FBBEC7B66A - 378508C74CAA4E29A75BE680 - 7CB7012D77874A34B1B1C375 - C613D1EE68A94DC3BCECB811 - + includeInIndex + 1 isa - PBXGroup + PBXFileReference + lastKnownFileType + sourcecode.c.h name - Support Files + NSValue+KiwiAdditions.h + path + Classes/NSValue+KiwiAdditions.h sourceTree - SOURCE_ROOT + <group> - 714BC488B8D6472785754B19 + 6A37838E74DC4EF0A86D86F6 fileRef - 435DA66FF7A747009B18683B + 17E99F172BB04E7FA385D3B1 isa PBXBuildFile - 718EAF3FF84740F6864F63F2 + 6A4B6AA37C6A4A60AA618DE5 - fileRef - 4CD04D1D584F451FB2F326EF + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + text.plist.xml + path + Pods-acknowledgements.plist + sourceTree + <group> - 71A2597AF1CB48DFA8DD9D20 + 6A7B409622AB4481B3EF2324 - fileRef - 770C71317885455D98F07999 + buildConfigurations + + 0BF201DFF8494CEAA23A4DA1 + 2A0628C4EB11469BAFFE5819 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release isa - PBXBuildFile + XCConfigurationList - 71CE4A8FC22F436EAD51BDA6 + 6AA39E1AFBD54BF480FF6BED - fileRef - 9539F6C43A3441FF9D78F53D + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KiwiMacros.h + path + Classes/KiwiMacros.h + sourceTree + <group> - 721D7E86FD62421A980B009D + 6BE06CB751AD4C64B3B3C084 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWExampleGroupBuilder.m + KWHaveValueMatcher.h path - Classes/KWExampleGroupBuilder.m + Classes/KWHaveValueMatcher.h sourceTree <group> - 72493B432DC84B54911CF99C + 6BFBA0F65DCB4AE78E414EBF includeInIndex 1 @@ -2811,35 +3419,47 @@ PBXFileReference lastKnownFileType sourcecode.c.objc + name + KWAfterAllNode.m path - Pods-specs-OHHTTPStubs-dummy.m + Classes/KWAfterAllNode.m sourceTree <group> - 725A3953033D4B28A485879E + 6C0C6181BBB847338DFFD051 + + fileRef + 3A7B3059C5104C918D94B22C + isa + PBXBuildFile + + 6C6C9D8575784112B85F541A fileRef - 508294BD6D4A48588D9D147E + CE09F3BDE9EC4A75A2BA873A isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 728EE998470F4D588070BC7B + 6C6D482A6CD848CBAAB504BE fileRef - E012578A4B604202A3867FC7 + 6FE6DE09064343AF8D6C5C5C isa PBXBuildFile - 72E98B5BE2B448A39BB6B32D + 6C7E5EB69385496B94455245 children - 0692DA3FAE464AC9B4070C78 - 4C7BB6D8360E4B1DA6A8038F - 898F914404B7404F985F0B74 - 42EF8B06D2374691AC37C8CA - 90B711A8829043C38B84C839 - D5192A48425B4D3CB9F20968 + 2FE81D78926C484D84643F64 + C1E952991CD04A79B97AA363 + C0F3A5829EA1439493DBCDE9 + 86C96E1C62EA4A7EBE76CCCC isa PBXGroup @@ -2848,29 +3468,21 @@ sourceTree <group> - 72F4161EAD3744C88B9D32E4 + 6CADAB6FF7E844F4B0FB86BA - includeInIndex - 1 + fileRef + 51CE02EBD0C24A5195D33FF3 isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - KWBlock.m - path - Classes/KWBlock.m - sourceTree - <group> + PBXBuildFile - 734A84A485EA42CB885A1127 + 6CAF3F4E872A48BB90BBA5F9 fileRef - FEB66E56A4A64C25BBAFE4D2 + A81872A9D4564C6591140F8F isa PBXBuildFile - 735647AF52024604987B0174 + 6D3299A50BC348AC87FCE9A4 includeInIndex 1 @@ -2879,27 +3491,13 @@ lastKnownFileType sourcecode.c.h name - KWCallSite.h + KWMatchers.h path - Classes/KWCallSite.h + Classes/KWMatchers.h sourceTree <group> - 74FA28FCFB34463F8E8D1DEB - - fileRef - 49362D1BDF434C2681D9EA73 - isa - PBXBuildFile - - 753A70638C074EA5BF0B2D15 - - fileRef - 735647AF52024604987B0174 - isa - PBXBuildFile - - 75DC40E9B66243CBA6E87459 + 6D85F37568564FD58D7EA465 includeInIndex 1 @@ -2908,34 +3506,32 @@ lastKnownFileType sourcecode.c.objc name - NSObject+KiwiVerifierAdditions.m + NSProxy+KiwiVerifierAdditions.m path - Classes/NSObject+KiwiVerifierAdditions.m + Classes/NSProxy+KiwiVerifierAdditions.m sourceTree <group> - 75EC7DB9979B4129BA1F64CD + 6F1DD6827A3C4241A139A5D9 - buildConfigurations - - EAAF07603F284871B401067E - 9C5FC564CC14441AAAD535DC - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release + fileRef + 07926D06ED154D638E71C495 isa - XCConfigurationList + PBXBuildFile - 76124B18F4CC40379BA4AA1D + 6F483306A39C43AC8D0DE18C fileRef - EDC2AAC8F16143BA965323D3 + 628104BBD4DB470E8D574699 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 76146A38D348416F98A7F7E4 + 6FE6DE09064343AF8D6C5C5C includeInIndex 1 @@ -2944,198 +3540,102 @@ lastKnownFileType sourcecode.c.h name - KWBeBetweenMatcher.h + KWHaveMatcher.h path - Classes/KWBeBetweenMatcher.h + Classes/KWHaveMatcher.h sourceTree <group> - 770C71317885455D98F07999 + 7074542AAB8D443198B871D1 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - SenTestSuite+KiwiAdditions.h + KWConformToProtocolMatcher.m path - Classes/SenTestSuite+KiwiAdditions.h + Classes/KWConformToProtocolMatcher.m sourceTree <group> - 7735A5924E5542D9A2F5AB59 - - fileRef - D24895EE44C64739B92003F2 - isa - PBXBuildFile - - 780C071E5A964E1EAB7A2EBA + 7254F50075A145E8BB8E64C3 fileRef - 3A5ECAA3423B4A2BB766BAF0 + D045CEF3EC0B400DB21E946B isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 781EED02747A41BCA689AD4B + 728ED010349F4E4C9249209C + includeInIndex + 1 isa PBXFileReference lastKnownFileType - wrapper.framework + sourcecode.c.h name - CFNetwork.framework + KWConformToProtocolMatcher.h path - Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/CFNetwork.framework + Classes/KWConformToProtocolMatcher.h sourceTree - DEVELOPER_DIR + <group> - 7820D258C43242B49EBB21DB + 729162EE598F4D65BFE3634D includeInIndex 1 isa PBXFileReference lastKnownFileType - text + sourcecode.c.objc + name + NSInvocation+OCMAdditions.m path - Pods-specs-acknowledgements.markdown + Classes/NSInvocation+OCMAdditions.m sourceTree <group> - 785E1D88FD65411CBEE07F20 - - buildActionMask - 2147483647 - files - - 7E6DB855CD24423BB4B22C51 - 6D57168DA74A48159127E19B - CCBF3A07F47D4F4D8047A858 - 215EF63935964E0D8D7E64FA - 007DDF76AC2F4F3C8C77C865 - C6674300683344B1B932330B - 2375810F38484C808D53D566 - E11930F907594C8D9014BC2D - CA4C28BDEEC74F2AA95E37EA - F92ED42764534FAFBC9EEB73 - 1B29EDD57D3148C8917AAE62 - 8D5C79200D80475CB893E52E - 51912FA9780447728D5DB1C9 - 7B1ADC03488C4955A56A8EC4 - 5108AFB576B048A99D3E3E52 - 728EE998470F4D588070BC7B - 7D6BD47E8C6A437BAB3C7557 - 3BF9D0401C634BA7AD1DEBC0 - 1C9E5F48B1564FDD965FA441 - 57B65E09772E4511A472B5A0 - 753A70638C074EA5BF0B2D15 - 82001016308A48F3910552CE - 0F984B16A6544C869570EDE7 - C3BA73B59D894B7CAAE94182 - 139F86C1A4CE41088F1F7181 - 063B745CAFFF4B3B9E528BBD - 14496D57C1B34A84984EB2A0 - 74FA28FCFB34463F8E8D1DEB - A0256FBA608B43438EF98E06 - F07573B2127E4FB48CA2BC57 - 2950ACAC3BAE4E0293F5B4B8 - 170446E1EC8F4391A429D2BD - 36C9B6C4441B424A9B257622 - 347585E620AD454C8DB08DAB - AB98AFA1B8084D109DED77CF - ECCAB9A6EC9A410FAAE482ED - AD1964E3E0B94D4C9E6705E6 - E455A33674124E3CAD9FCC4E - AEDE409AC0CC469A92EDAFBC - 915F97C118734E7D8A7DC5E0 - 458F589F281F49C6BF344536 - DE5CD632034B46428537883D - B8BCE7BC0235479CBBC668D6 - BC7B3D23A9154227AE89E639 - E2A304E02D85459B82F01B8B - AF9BC13717AC44AD87947134 - 2CAEC5C096FD44C6AA6EA2C8 - 37DA39DD91FB428281116FC1 - 9B70004B7F86463698D96E26 - 5893B92869AB49698179161F - E16E12DC32F348F3B6B429A2 - 714BC488B8D6472785754B19 - 3BE1A5095A4B4196B99F0501 - C4F74423FD594F9690E835AA - C1E078818B13496C91845F8B - D779FBD2D5914DEA9E408F4A - 0A4EB9F903F34C83A99E5993 - D2343FAB7B1047CFA406CFFD - B86FF5EE2A02466FBA347F2B - 1237D823D7124559A85760A3 - 0FFB35DE920343A6B3CAF39E - B7ABAAE02EAF449FB40C55AE - D1CD3A46930647B5886DEF53 - ED4F844D9A674929BEB1D7C2 - DD4F5D6A0D4943DCB890E6DB - 852E64C9A7B34B02949829F1 - A81D1F70D4B947FA89594682 - FA376A686ECC4986B3F0163A - 1AF086E689164B9C87C4C4BC - 32216C9C3EC44D1097F48600 - 632B1E0FDA6641FE802BFEC5 - 2475729893FA48208B7F78F4 - 267D076EAF2E40CDB23FAA5D - F921514F164D492AA22248BD - 500CB610C06C4A1EA1CCB1E4 - B1C0ADC88CC44BC78D3EADF0 - 3F2B8C9CCC7346028A7673E8 - 46E94487428C47AEA506CD79 - 39859403D0564EF7A8DAB620 - B73D89D22B424A09B9953AE9 - 901B3A49E99C4C618C656021 - C38CB01C5A53446AB8179F91 - C25B810667FE4D51A0F8F62E - DE81BD24B7FE4C299F6C4D3B - 489CFB7E8CA340D49C7F1374 - C9710E39B89B484698C13C05 - AEC0B0C64D0546B0BC0225B0 - 981F53A68ECD48688278C8F0 - 35AF467E194B4472B61D6604 - 13340D3E27BF4D4BB673F7B2 - 5E08C48F2CB0424A8B0C6483 - 83AD16B1E9614B569CEA3DD3 - F1EBBB27815144EFB2A5F841 - A226DF8C86474203B415F860 - 01656CBF93D94C468CBE1471 - 71A2597AF1CB48DFA8DD9D20 - - isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 78A36945CC604CE5A51E72AD + 74A95A56C5F94720BBED48D2 fileRef - 850FB39AB0D94A0F85DB45DA + AAB93295F3CD4E85871EFEA1 isa PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 79A0E4CBBBAB48E29B02BA2F + 74CFBCE5012B402CAA3703C2 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - KWDeviceInfo.m + sourcecode.c.h path - Classes/KWDeviceInfo.m + Pods-specs-environment.h sourceTree <group> - 79A57B9FECCF46C583B20ECD + 74E0C855E0CE42F1AA19A4DE + + fileRef + 2055DC61B7024729929F295B + isa + PBXBuildFile + + 75170BD32DD944139E99DA3B includeInIndex 1 @@ -3144,48 +3644,48 @@ lastKnownFileType sourcecode.c.objc name - KWReceiveMatcher.m + KWHaveMatcher.m path - Classes/KWReceiveMatcher.m + Classes/KWHaveMatcher.m sourceTree <group> - 79F28A886D2E4015870C4782 + 76A0A952EB364167AE51D83E fileRef - B011D1E5BF164122904DD8C9 + 9FE41677EAC9448698D57AF2 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 7A2DF566CB4D40D6AEC1E635 + 76BF20B794CB429CBC47B8DA - buildConfigurations + children - A8B4E2A7D222430CBBA95100 - FEBC1BB75BA24DF69AAB680F + 04AC5B12B1924BE0A2D9B018 + C7C8C44CDEE04061AECD9B3A + 532E269EEC5445FB9593929F + BB750892830E43E9A8AFE0F1 - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 7B0E0A2832F04070B3F2234B - - fileRef - 9B01082F7C5E4189921DF9C1 isa - PBXBuildFile + PBXGroup + name + Support Files + sourceTree + SOURCE_ROOT - 7B1ADC03488C4955A56A8EC4 + 7771EC49085444BC8585347F fileRef - 05203007927E4DE5B8CB91FF + A45B973FF3304AFDBEC54200 isa PBXBuildFile - 7B891F3D4BD24A3AA32A0E14 + 7793AD6003B94E13A30057BF includeInIndex 1 @@ -3193,42 +3693,37 @@ PBXFileReference lastKnownFileType sourcecode.c.objc - name - KWMessagePattern.m path - Classes/KWMessagePattern.m + Reachability.m sourceTree <group> - 7C92B8C48626490FB1D72A56 + 78373B40FFD84906AEE77B16 - includeInIndex - 1 + fileRef + 8F4D7E1E163843DE9DBF6C23 isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - KWMatchVerifier.m - path - Classes/KWMatchVerifier.m - sourceTree - <group> + PBXBuildFile - 7CA8479D2BCC4C1F81077CA0 + 78E6CC5D4930408A976FBCFC - includeInIndex - 1 + children + + 863F116C601848108F1DEA69 + 03B4A57C7A8D4450AC82D770 + 6A4B6AA37C6A4A60AA618DE5 + C73D78A31EED4D29A11362CC + 1E869704A40D46CE9BEF36C2 + 608C824C392E4D6EBB95C62A + isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Pods-specs-Kiwi-prefix.pch + PBXGroup + name + Pods sourceTree <group> - 7CB7012D77874A34B1B1C375 + 79594ECD1D924ACAA22259A3 includeInIndex 1 @@ -3236,33 +3731,29 @@ PBXFileReference lastKnownFileType sourcecode.c.objc + name + SRWebSocket.m path - Pods-SocketRocket-dummy.m + SocketRocket/SRWebSocket.m sourceTree <group> - 7D6BD47E8C6A437BAB3C7557 - - fileRef - 7E9B84AAFAAD46289D3AFE98 - isa - PBXBuildFile - - 7D8DFEBD882F43FBB1CA379B + 79BC30C23CDE4DA99835C8E5 - fileRef - 2DB0F5A2BA0241F5BDFE8B02 - isa - PBXBuildFile - - 7E6DB855CD24423BB4B22C51 - - fileRef - 0D35278FB73C48B583F219DA + buildActionMask + 2147483647 + files + + FC15726807EB48968A2AF22F + D8F11F79DB1E47B4AA383102 + 34F91BD03C514E0799F3C231 + isa - PBXBuildFile + PBXHeadersBuildPhase + runOnlyForDeploymentPostprocessing + 0 - 7E9B84AAFAAD46289D3AFE98 + 79E64BB784CE4584A5410888 includeInIndex 1 @@ -3271,35 +3762,25 @@ lastKnownFileType sourcecode.c.h name - KWBeforeEachNode.h - path - Classes/KWBeforeEachNode.h - sourceTree - <group> - - 7F06775D39F24B249E7E9122 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - KWTestCase.m + KWCaptureSpy.h path - Classes/KWTestCase.m + Classes/KWCaptureSpy.h sourceTree <group> - 7F109BED967C4DB082E89E78 + 7A0BFC99D1754829817C5823 fileRef - B402548EE7FC4C6A876C4EAB + 49503502CA0D45EFA0D71FF1 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 7F4FEB6A55C74466BE5510EC + 7AB80B2C80CA44A2936CF0F9 includeInIndex 1 @@ -3308,79 +3789,86 @@ lastKnownFileType sourcecode.c.objc name - NSInvocation+OCMAdditions.m + KWExampleGroupBuilder.m path - Classes/NSInvocation+OCMAdditions.m + Classes/KWExampleGroupBuilder.m sourceTree <group> - 813A8656C6E24A589AEA67F8 + 7AEE7246F18E4610B356DFBF fileRef - 5DD5F28EF02942E3B404B619 + D08C3321806E4969BEF25D4F isa PBXBuildFile settings COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 + -w -Xanalyzer -analyzer-disable-checker - 82001016308A48F3910552CE + 7C99EF6B6936428FBC9E40A0 fileRef - D64720DD20764A37837532B5 + AB605CA8305E474A8F4B18D3 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 825BF97AAA864CD39CA84D95 + 7D544D0BDE0E4EE99E2DFA84 - includeInIndex - 1 + fileRef + A5955F94002043A2BBB63E23 isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSProxy+KiwiVerifierAdditions.m - path - Classes/NSProxy+KiwiVerifierAdditions.m - sourceTree - <group> + PBXBuildFile + + 7ED13B5B29FB4489A7F9375F + + fileRef + F3C145405CBC4A00862AAED7 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 7F989206AFA94BBC94EC2B48 + + fileRef + B5D8AE281BA84EB0A11447AC + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 83A7D77F40F04C81AD0A1890 + 7FAAEAF439364840A8BF958D includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - NSObject+KiwiSpyAdditions.h + KWStringUtilities.m path - Classes/NSObject+KiwiSpyAdditions.h + Classes/KWStringUtilities.m sourceTree <group> - 83AD16B1E9614B569CEA3DD3 - - fileRef - 99C5C695F3D5406483F36D7B - isa - PBXBuildFile - - 83F18417D1034374A8D23F0B - - fileRef - 37EDB6AFC26B46A4B13F9441 - isa - PBXBuildFile - - 8458DA3FD1DD41B1AAFD05CC + 7FCF3FC612C64B0191802AB1 baseConfigurationReference - 2910EBE586224DBFB6C88644 + FE5D2C2CBA92447DAFACD29C buildSettings ALWAYS_SEARCH_USER_PATHS @@ -3398,7 +3886,7 @@ GCC_PRECOMPILE_PREFIX_HEADER YES GCC_PREFIX_HEADER - Pods-specs-OHHTTPStubs-prefix.pch + Pods-Reachability-prefix.pch GCC_PREPROCESSOR_DEFINITIONS DEBUG=1 @@ -3428,7 +3916,26 @@ name Debug - 846E715C2E6A471D8F5AED4B + 7FE7D751F94245D987F2A50C + + fileRef + 29CC20FB4C3C4EC78A237345 + isa + PBXBuildFile + + 8035F6FB71494134AA09D4C4 + + fileRef + 28BE4156A6E4457EA0AB6301 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 80915F5DDFAA4A89A0559079 includeInIndex 1 @@ -3437,13 +3944,13 @@ lastKnownFileType sourcecode.c.objc name - KWBeTrueMatcher.m + KWBlockNode.m path - Classes/KWBeTrueMatcher.m + Classes/KWBlockNode.m sourceTree <group> - 850FB39AB0D94A0F85DB45DA + 8106A3F641FE48AC8CFBE107 includeInIndex 1 @@ -3451,96 +3958,138 @@ PBXFileReference lastKnownFileType sourcecode.c.objc + path + Pods-specs-Kiwi-dummy.m + sourceTree + <group> + + 814B183C251C4643A08C4BF3 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h name - NSInvocation+KiwiAdditions.m + KWGenericMatchingAdditions.h path - Classes/NSInvocation+KiwiAdditions.m + Classes/KWGenericMatchingAdditions.h sourceTree <group> - 852E64C9A7B34B02949829F1 + 8287BF09029947B6AAFB4DC1 - fileRef - 22736026782A43489D60A3F0 isa - PBXBuildFile + PBXTargetDependency + target + 995F1D8F06324A69AC7ADD72 + targetProxy + A83BAE80D1534EFA9CC9774D - 859A7B5F66A34049B151372E + 828CE22DF4604CB78E1E8FD6 - buildActionMask - 2147483647 - files - - 624B26EBD7F3450EB86E5C65 - + fileRef + 1DD726E13AF0433EB40BD89C isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXBuildFile - 85AB14A394BA433C88143336 + 82DCBD4F922644089A232368 fileRef - F816B0144B824DD69768CA8C + 4982B173575F45CBBB785B47 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 85B7625F9D2942609C2C76F0 + 8376554B9B6E4661AE7502E1 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWBeWithinMatcher.m + KWFutureObject.h path - Classes/KWBeWithinMatcher.m + Classes/KWFutureObject.h sourceTree <group> - 85DB5697079D43F38FB09D98 - - fileRef - 62870C1C913F4CFE9EABF48D - isa - PBXBuildFile - - 8703F23DBBF64CAF8FF1293D + 863F116C601848108F1DEA69 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + text.xcconfig path - Pods-specs-environment.h + Pods.xcconfig + sourceTree + <group> + + 86C96E1C62EA4A7EBE76CCCC + + children + + F139C2BE6E5C4487B58E0C79 + AAB93295F3CD4E85871EFEA1 + 03F05C358E854E8DA923970F + 79594ECD1D924ACAA22259A3 + E08626E0AE2F45A78D0E48A0 + D50EC4A6AB114D948A510707 + 4264DC13498E4DF9AE5F5BCC + + isa + PBXGroup + name + SocketRocket + path + SocketRocket sourceTree <group> - 88724F9B0D63487392B935A9 + 871F490A59D84E52B75981D7 fileRef - 9AE9BA613ED2424F9DECFF79 + C370DE5C47884C4592EBA2B9 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 898F914404B7404F985F0B74 + 87BD76B106A2436DA1BEAD12 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.plist.xml + sourcecode.c.h + name + KWSpec.h path - Pods-acknowledgements.plist + Classes/KWSpec.h sourceTree <group> - 8AEB36B21072419BA56F0F7A + 885D15B67D0F40A790E56D66 + + fileRef + C4067E08F10A4CED82E5D513 + isa + PBXBuildFile + + 887C8C47955141DB8E7CDA66 includeInIndex 1 @@ -3549,20 +4098,37 @@ lastKnownFileType sourcecode.c.objc name - KWMessageTracker.m + KWBlockRaiseMatcher.m path - Classes/KWMessageTracker.m + Classes/KWBlockRaiseMatcher.m sourceTree <group> - 8C24CA69269144CE8D60CA19 + 8A584269B4744BCDBE97EF8A + + fileRef + 031B6BA4066440EAAF7C395F + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 8A76285BC583440486FABAA8 fileRef - 17D8EE657E8945FFB655C25E + F01F77AD0DDF4A2E87244480 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 8D316B841C9742E0BE03F278 + 8AB698371FC54087AC4A5BE3 includeInIndex 1 @@ -3571,72 +4137,77 @@ lastKnownFileType sourcecode.c.objc name - KWRegisterMatchersNode.m + KWAsyncVerifier.m path - Classes/KWRegisterMatchersNode.m + Classes/KWAsyncVerifier.m sourceTree <group> - 8D5C79200D80475CB893E52E - - fileRef - 3B87D4FD143E4393A97CE9EE - isa - PBXBuildFile - - 8DE837F0FEF34A6B8CCDE689 + 8ABD6E6739964423BA924C6A - buildActionMask - 2147483647 - files + children - 813A8656C6E24A589AEA67F8 - 095BEA9BB8934C89A96AED18 - C8CDCB008FF14C7AB2B889F5 + 0EBFE40558BC490F91DF77BC + 58D89DE341D8424F9778003E + DD4C75E2AE684153A99B3AE3 + 28469D6B3C964842B64C09F0 + 17E99F172BB04E7FA385D3B1 + AC0F8A06DE804D9F8BFE2CD8 isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXGroup + name + Products + sourceTree + <group> - 8E2A9EA40750416FB5C29835 + 8BE5BCC91D8746468415830C fileRef - 85B7625F9D2942609C2C76F0 + 7793AD6003B94E13A30057BF isa PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 8E8C5155F5AE4B42981AF1BE + 8C7ABCAC9DB14B62A03029D7 fileRef - 3074EEEC4A0248F3AD09E672 + DB2C631DFE764E938AF04269 isa PBXBuildFile - 8E90678CC8AF406290F5EC5E + 8CD183EA2D3E4A6B8D5761CE - children + buildConfigurationList + 919D531A32354A43873423A0 + buildPhases + + FDEF8C78534E4DC29E833357 + B8BDC4103A3946E4B534AF3B + + buildRules + + dependencies - 9BD1CB05A1F540E793C1B773 - 29B873493F4242009C065CC8 - 9B01082F7C5E4189921DF9C1 - 7CA8479D2BCC4C1F81077CA0 + 8287BF09029947B6AAFB4DC1 + 2E9C8CB3C258437A803DFBB8 isa - PBXGroup + PBXNativeTarget name - Support Files - sourceTree - SOURCE_ROOT - - 901B3A49E99C4C618C656021 - - fileRef - EC5B33E0DD6646B1BD3245B7 - isa - PBXBuildFile + Pods-specs + productName + Pods-specs + productReference + 28469D6B3C964842B64C09F0 + productType + com.apple.product-type.library.static - 9049A5FFCA564EA7A7581376 + 8CDFB9978A914A6E8E289296 includeInIndex 1 @@ -3645,13 +4216,32 @@ lastKnownFileType sourcecode.c.h name - KWHaveMatcher.h + SenTestSuite+KiwiAdditions.h path - Classes/KWHaveMatcher.h + Classes/SenTestSuite+KiwiAdditions.h sourceTree <group> - 90B711A8829043C38B84C839 + 8D3739690F854DBCAAD3C1AC + + fileRef + 2D55C38164534F49A631E8F9 + isa + PBXBuildFile + + 8D49E21B5C094FD7BBCF9B67 + + fileRef + 35AAAED225E9468D9C02BF36 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 8D78F141C95141BE9A535384 includeInIndex 1 @@ -3659,61 +4249,29 @@ PBXFileReference lastKnownFileType sourcecode.c.h + name + KWReporting.h path - Pods-environment.h + Classes/KWReporting.h sourceTree <group> - 911DDD43E4EC457F86209F2F + 8D79D2AEE6134607B9C42EED includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWValue.h + KWAny.m path - Classes/KWValue.h + Classes/KWAny.m sourceTree <group> - 915F97C118734E7D8A7DC5E0 - - fileRef - F7C250808FBE4D2096BAF6C4 - isa - PBXBuildFile - - 9206AC45E82E4853864AEEDF - - fileRef - 3598443A8B444EEEB51C7FCA - isa - PBXBuildFile - - 9250C579387B43D7A27AF8E4 - - buildActionMask - 2147483647 - files - - 83F18417D1034374A8D23F0B - - isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 929B14F03A87403BAB4D296F - - fileRef - A2A7531E7A8F4C52A2ADB1CD - isa - PBXBuildFile - - 93063D4333F74DB8991E0B6D + 8DB5CFD169084CDA8AD36554 includeInIndex 1 @@ -3722,56 +4280,65 @@ lastKnownFileType sourcecode.c.h name - KWInequalityMatcher.h + KWContainMatcher.h path - Classes/KWInequalityMatcher.h + Classes/KWContainMatcher.h sourceTree <group> - 941B6819DE25449B85BD7F0D - - fileRef - 303AC2C4EDC24B33A809F7BD - isa - PBXBuildFile - - 9539F6C43A3441FF9D78F53D + 8DDBA4EB259941A9999709D8 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWMatcher.m + KWMatchVerifier.h path - Classes/KWMatcher.m + Classes/KWMatchVerifier.h sourceTree <group> - 956FB1C6F62F4B7FA2EB59EF + 8E1BAFC9F2A64EDBB13EEB67 fileRef - 2D75D4F6472346F898D2702B + FE3DB58BF5034002BA9880D8 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 960AC4593F1942808B1D7BCD + 8E4EBA6C393D4E669F393B84 - buildActionMask - 2147483647 - files + buildConfigurationList + ADEED1D2CD7146409E47EC2C + buildPhases - E2859CB847C14135B77610C4 - FCF809DCB496476DB9613282 + 3D6CD950BF214ADC86AF7F32 + 1743A09D6AFD46788C358B14 + 4E9B6F4E19504257A4F10A33 + buildRules + + dependencies + isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXNativeTarget + name + Pods-specs-OHHTTPStubs + productName + Pods-specs-OHHTTPStubs + productReference + AC0F8A06DE804D9F8BFE2CD8 + productType + com.apple.product-type.library.static - 9688D932103B4EB594B1C0C4 + 8E9F9F8062A54FE9874A7B56 includeInIndex 1 @@ -3780,20 +4347,13 @@ lastKnownFileType sourcecode.c.objc name - KWBlockNode.m + KWHaveValueMatcher.m path - Classes/KWBlockNode.m + Classes/KWHaveValueMatcher.m sourceTree <group> - 981F53A68ECD48688278C8F0 - - fileRef - 5E36D1AD183C4E52B4BE4A4F - isa - PBXBuildFile - - 996DF26A178C4391A1E1F3CA + 8F4D7E1E163843DE9DBF6C23 includeInIndex 1 @@ -3802,35 +4362,28 @@ lastKnownFileType sourcecode.c.h name - KWContainMatcher.h + KWCallSite.h path - Classes/KWContainMatcher.h + Classes/KWCallSite.h sourceTree <group> - 99AA68B5B9604ED49DD81630 - - fileRef - C670E39CDCCA4FE2A3B4D495 - isa - PBXBuildFile - - 99C5C695F3D5406483F36D7B + 90A7AC835622462E88360C24 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - NSObject+KiwiStubAdditions.h + KWBeSubclassOfClassMatcher.m path - Classes/NSObject+KiwiStubAdditions.h + Classes/KWBeSubclassOfClassMatcher.m sourceTree <group> - 99E7EBCA9E944975BF10B11E + 90D6143BE00D4C9EA4D68B38 includeInIndex 1 @@ -3839,48 +4392,53 @@ lastKnownFileType sourcecode.c.objc name - KWAfterAllNode.m + KWPendingNode.m path - Classes/KWAfterAllNode.m + Classes/KWPendingNode.m sourceTree <group> - 99EB6D2FB1894B76B060BE98 + 91066291B7E144D6827A0862 fileRef - 9688D932103B4EB594B1C0C4 + D6BC5A79F1F947EDBA79F086 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 9A9C88FF7AFA49EA9BA63CBB + 911A5F9B865E4CA5910CED97 + fileRef + 0EE143C221AC43C3A516AE9F isa - PBXFileReference - lastKnownFileType - wrapper.framework - name - SenTestingKit.framework - path - Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/SenTestingKit.framework - sourceTree - DEVELOPER_DIR + PBXBuildFile - 9AE9BA613ED2424F9DECFF79 + 912F556C80EB4A01A9EDE526 - includeInIndex - 1 + fileRef + 65990ABADFE749B7BA753D58 isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - KWGenericMatchEvaluator.m - path - Classes/KWGenericMatchEvaluator.m - sourceTree - <group> + PBXBuildFile + + 919D531A32354A43873423A0 + + buildConfigurations + + 9810303B754B4A26BE55143F + 02306DAF3AC449A0833E8330 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList - 9B01082F7C5E4189921DF9C1 + 91C847FC9A9D4BC78051552A includeInIndex 1 @@ -3888,173 +4446,87 @@ PBXFileReference lastKnownFileType sourcecode.c.objc + name + KWExampleSuite.m path - Pods-specs-Kiwi-dummy.m + Classes/KWExampleSuite.m sourceTree <group> - 9B5B15B290EC4CD5BD2060DC + 91DAEB0A48A349BC874897B8 buildActionMask 2147483647 files - D301190CE0A04B90B00616D1 - 62868CB2DFA94A088C42C018 - 956FB1C6F62F4B7FA2EB59EF - C711B876129844708B7C045C - 7735A5924E5542D9A2F5AB59 - F453D742CD7243E590CE3DEC - 4A39920C40A440F1A1104A6D - 54F4B67A8A5A4C5F87E1D626 - 01D8A1EAABE44A4EBD87F18E - 08391C3F382E4578BD6E8B96 - 0509686B98054A0F829879CD - 003C27671F634861B6200BDC - 48E0BDC254584214A34AAD1B - 8E2A9EA40750416FB5C29835 - 119627D572104042829B4D2A - 2FA72FD99E2F470C8EA501DA - 4BA1F22D0D9C4D3F80002ADE - 219AD23312004E0E8F67EC23 - 99EB6D2FB1894B76B060BE98 - 76124B18F4CC40379BA4AA1D - 435D621026BA4A4BA2CDA519 - 40270A01DE174E3C84ADFFF4 - 929B14F03A87403BAB4D296F - 50C2B3AA1FEA44DB94FA2CB6 - C2CAFAEFF4F840AC80A8DC17 - AA462F62E3D0482B903432B7 - 8E8C5155F5AE4B42981AF1BE - 6EBBEC059099403F9F47A889 - 5462F79002B74ED29B81E79E - 85AB14A394BA433C88143336 - 28DDDF1868B04E47A09B4B67 - 1C57AB410F244F709E92E631 - C4F375FFFEA04228BF826BFA - CBC8D04048CE4414A9FF8861 - 090DE73BDFD446618E005B8C - 1E313F9CCADC4CFEAD404A16 - 88724F9B0D63487392B935A9 - F10205540E194915B56A4A2A - 734A84A485EA42CB885A1127 - 25A5BA849B5B4B73B656505B - 1B2088CF33B84C18BCA2D1F7 - 1DF91000F92C4312819661B0 - FD901F4F13A44F5A87E46BAB - ABDDE5DA869A451CA4ECFFF7 - 4AEAC0FD0D8745ADAEEE6B20 - 55853AA20C3F4817A6076A6F - 71CE4A8FC22F436EAD51BDA6 - 586D743CA46F49A78891596F - C583BDB228344690858E04BE - 4143EB2471F44A1DA6686343 - C0C751F3B15B45E1B8FB017C - 725A3953033D4B28A485879E - A964EE00D9E0466988DB2D5B - DF3FE6D6EE2F4ED6B1A52919 - C92940422BBD4B03848CE3FD - 589998785A2D4651981C7CF0 - C61E12726F3B4E0883F3B80C - 440815E09DF54DF3AA139D21 - ACC0BA8653234D92A6A715C2 - B5CB6069A867455BBFEB446A - 60DEAD6ECF8E490A8FA7EB8B - 780C071E5A964E1EAB7A2EBA - D5FB4B832CEB44AE8CDF093D - C0389F466CB54F1886C01A90 - C2A98F24AB5B480E991052A7 - 8C24CA69269144CE8D60CA19 - C517DAC6688D466FA2B872F0 - 43A8055AEDED4330B76BE596 - D61308BAF91A4096A32420B5 - 6BBA5AB33C4B4E94B82A7A69 - CA11F1F6E42C4234A140F524 - 78A36945CC604CE5A51E72AD - 560ABCF5EA28411BBDD67345 - 85DB5697079D43F38FB09D98 - 5FB13B1E6CCE4DA587C3C45F - 941B6819DE25449B85BD7F0D - 9CD19A335D094F5B8DF65B33 - 1C704EB15BD844DB9E3E7B67 - C3D0B4FFAC234C2CBA1A2E55 - C321FB84C8354EB39C64A5E5 - 7F109BED967C4DB082E89E78 - 7B0E0A2832F04070B3F2234B - C99F60013B7E49DABC486DF2 + 911A5F9B865E4CA5910CED97 isa - PBXSourcesBuildPhase + PBXHeadersBuildPhase runOnlyForDeploymentPostprocessing 0 - 9B70004B7F86463698D96E26 - - fileRef - C29B57204547435DA2D33954 - isa - PBXBuildFile - - 9B8C5FFD54A9478AB9CD060E + 93907A2127B64E32A9E73A34 - includeInIndex - 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + wrapper.framework name - KWSymbolicator.m + SystemConfiguration.framework path - Classes/KWSymbolicator.m + Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/SystemConfiguration.framework sourceTree - <group> + DEVELOPER_DIR - 9BD1CB05A1F540E793C1B773 + 962EC98421D24966A0E4C696 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.h + name + KWStringPrefixMatcher.h path - Pods-specs-Kiwi.xcconfig + Classes/KWStringPrefixMatcher.h sourceTree <group> - 9C5FC564CC14441AAAD535DC + 9810303B754B4A26BE55143F baseConfigurationReference - 0692DA3FAE464AC9B4070C78 + 3B0F2646415548AD84525C6F buildSettings ALWAYS_SEARCH_USER_PATHS NO COPY_PHASE_STRIP - YES + NO DSTROOT /tmp/xcodeproj.dst GCC_C_LANGUAGE_STANDARD gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 GCC_PRECOMPILE_PREFIX_HEADER YES + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO GCC_VERSION com.apple.compilers.llvm.clang.1_0 INSTALL_PATH $(BUILT_PRODUCTS_DIR) IPHONEOS_DEPLOYMENT_TARGET 4.0 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - OTHER_LDFLAGS PRODUCT_NAME @@ -4065,22 +4537,28 @@ iphoneos SKIP_INSTALL YES - VALIDATE_PRODUCT - YES isa XCBuildConfiguration name - Release + Debug - 9CD19A335D094F5B8DF65B33 + 985BCE1FE41D40A2B5EC00D8 - fileRef - 4F52B77D3E4649088886C202 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWRespondToSelectorMatcher.m + path + Classes/KWRespondToSelectorMatcher.m + sourceTree + <group> - 9CF86F29D3E24EACA76BA39D + 985D20D82D914C949D88A23A includeInIndex 1 @@ -4089,13 +4567,38 @@ lastKnownFileType sourcecode.c.h name - KWRaiseMatcher.h + Kiwi.h path - Classes/KWRaiseMatcher.h + Classes/Kiwi.h sourceTree <group> - 9D11BEEFD4D049AFA6B3BA0D + 995F1D8F06324A69AC7ADD72 + + buildConfigurationList + C884E558218C47229522B1F4 + buildPhases + + 41633299FEFB4BAE9BE21D2D + 29DF099C8A9C4E1FB05EE812 + CC1B8080648B4590BA8D4B90 + + buildRules + + dependencies + + isa + PBXNativeTarget + name + Pods-specs-Kiwi + productName + Pods-specs-Kiwi + productReference + 17E99F172BB04E7FA385D3B1 + productType + com.apple.product-type.library.static + + 99EDF7C7A40A4345A4AC2A00 includeInIndex 1 @@ -4104,13 +4607,13 @@ lastKnownFileType sourcecode.c.objc name - NSNumber+KiwiAdditions.m + KWTestCase.m path - Classes/NSNumber+KiwiAdditions.m + Classes/KWTestCase.m sourceTree <group> - 9D8F977726B447A9A45FA965 + 99F10C2BC336401B889BBC1C includeInIndex 1 @@ -4119,13 +4622,49 @@ lastKnownFileType sourcecode.c.h name - Kiwi.h + NSMethodSignature+KiwiAdditions.h path - Classes/Kiwi.h + Classes/NSMethodSignature+KiwiAdditions.h + sourceTree + <group> + + 9A1D182D77104738BCBCDBA2 + + buildConfigurations + + 403488704D9146CC9BAC5C5D + 0F3E746C00904AB7B2AEFD60 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + 9A27C4CA2DC445D3A9FDDCD5 + + fileRef + 3A20B71BE63C450F84F5F622 + isa + PBXBuildFile + + 9B3E0953C6D64767883CAC5C + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWCountType.h + path + Classes/KWCountType.h sourceTree <group> - 9DE2E3E59AFE40128A1085AB + 9B571EB53ABA42F487FDF7E1 includeInIndex 1 @@ -4134,134 +4673,162 @@ lastKnownFileType sourcecode.c.objc name - KWExistVerifier.m + KWBeNilMatcher.m path - Classes/KWExistVerifier.m + Classes/KWBeNilMatcher.m sourceTree <group> - 9E76DADD9AEB4D32961FD45B + 9B6F68AFEB3745FB9F3D32B2 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWStringContainsMatcher.m + NSObject+KiwiMockAdditions.h path - Classes/KWStringContainsMatcher.m + Classes/NSObject+KiwiMockAdditions.h sourceTree <group> - 9EB9DAF99353458F9805E406 + 9B8D759A200549A3B661779B + + fileRef + 87BD76B106A2436DA1BEAD12 + isa + PBXBuildFile + + 9BF08495B75042328364FD38 + + buildActionMask + 2147483647 + files + + CF5699A1444F45B697DAB10F + 8BE5BCC91D8746468415830C + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 9E2AFA1C33AE4B819805F5C8 + + fileRef + 090196E35042422EACB1091F + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 9FE35D21B07B43E3A756B83B + + fileRef + AE467A73803847088E1E0707 + isa + PBXBuildFile + + 9FE41677EAC9448698D57AF2 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWExampleGroupBuilder.h + KWContainMatcher.m path - Classes/KWExampleGroupBuilder.h + Classes/KWContainMatcher.m sourceTree <group> - A0256FBA608B43438EF98E06 + A01C54233930461D816953A0 fileRef - 159C53CF9F5D4E8B8056AD62 + AEB9B076F0724C63A76DF656 isa PBXBuildFile - A0B577847C4245EF84CA83C9 + A01E4D115F2849D4A3A2C6E7 - includeInIndex - 1 + fileRef + 2E219F2E9C9A4B0CA08AAAD9 isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - KWMatchers.m - path - Classes/KWMatchers.m - sourceTree - <group> + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - A11EBC0ECD95456590D9BE58 + A0885C9E44AC4AC4959CAB5F - children - - F0B245078FE647C2B4C013B1 - 7820D258C43242B49EBB21DB - BE6124AAFF5A45799AF33ACD - A4AF0D9040AC4B84B5F19209 - 8703F23DBBF64CAF8FF1293D - 568C9A7C6150465CA9738957 - + fileRef + EC370BCD987D43A7A1381C09 isa - PBXGroup - name - Pods-specs - sourceTree - <group> + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - A180A80551F94235B009DA6C + A10FEEC17D3E4CA19E4110BF - buildActionMask - 2147483647 - files - - 161E450B8FF641CE87B5D49A - F99424FBB57544709A34EFD2 - + fileRef + 694774DB4D5C4626939E9F05 isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXBuildFile - A1DEB3746CC548F28D45865F + A1AE93F94AC24445A524226F - includeInIndex - 1 + fileRef + 814B183C251C4643A08C4BF3 isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWStub.h - path - Classes/KWStub.h - sourceTree - <group> + PBXBuildFile + + A32CD7A6721747FEB9F85245 + + fileRef + 9B3E0953C6D64767883CAC5C + isa + PBXBuildFile - A226DF8C86474203B415F860 + A4157F1FDC144D338722F240 fileRef - 32F5F8E4CD0141ED8DDF61DB + B65B974FF4CF4C3BB160D7D2 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - A2A7531E7A8F4C52A2ADB1CD + A45B973FF3304AFDBEC54200 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWChangeMatcher.m + KWChangeMatcher.h path - Classes/KWChangeMatcher.m + Classes/KWChangeMatcher.h sourceTree <group> - A3042D81C15D4061A02BA93C + A5955F94002043A2BBB63E23 includeInIndex 1 @@ -4270,28 +4837,27 @@ lastKnownFileType sourcecode.c.h name - KWContextNode.h + KWNull.h path - Classes/KWContextNode.h + Classes/KWNull.h sourceTree <group> - A3AF2442D4D145498D189DBF + A64532500D0E44C5BC5A6C98 buildActionMask 2147483647 files - 07ED0CC062E9413EBE684F61 - DE8D30A9406542E3A00DD15B - 9206AC45E82E4853864AEEDF + BBC25647CB2646519CFEE44B + 40A3C3A05AA6404DB839D750 isa PBXFrameworksBuildPhase runOnlyForDeploymentPostprocessing 0 - A447F211D903418BB7A55A82 + A778109E7D50436290127673 includeInIndex 1 @@ -4300,26 +4866,66 @@ lastKnownFileType sourcecode.c.h name - KWAsyncVerifier.h + KWExampleGroupDelegate.h path - Classes/KWAsyncVerifier.h + Classes/KWExampleGroupDelegate.h sourceTree <group> - A4AF0D9040AC4B84B5F19209 + A7D9977497BA4F6AB4A0889F + + buildConfigurationList + E9B5A6C339E44F5692B5BA24 + buildPhases + + 9BF08495B75042328364FD38 + A64532500D0E44C5BC5A6C98 + 91DAEB0A48A349BC874897B8 + + buildRules + + dependencies + + isa + PBXNativeTarget + name + Pods-Reachability + productName + Pods-Reachability + productReference + 58D89DE341D8424F9778003E + productType + com.apple.product-type.library.static + + A81872A9D4564C6591140F8F includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h + name + KWMessageTracker.h path - Pods-specs-dummy.m + Classes/KWMessageTracker.h sourceTree <group> - A4D1CAD73C3D4CC1A619E60E + A83BAE80D1534EFA9CC9774D + + containerPortal + CD9632B3B8EC456ABE0A7912 + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 995F1D8F06324A69AC7ADD72 + remoteInfo + Pods-specs-Kiwi + + A87A1F19A5E24961855B606A includeInIndex 1 @@ -4328,224 +4934,192 @@ lastKnownFileType sourcecode.c.h name - KWPendingNode.h + KWBeforeEachNode.h path - Classes/KWPendingNode.h + Classes/KWBeforeEachNode.h sourceTree <group> - A56084030AA446BFA6C42FE4 - - fileRef - 3DE9EE5B8184470996D69209 - isa - PBXBuildFile - - A6308FE3A02543CC9F6016ED - - buildActionMask - 2147483647 - files - - EDCB18B8E4C3428A8B7CF407 - 6257FBE77DCC4452980D88BA - 99AA68B5B9604ED49DD81630 - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - A726D955F7B04F43806D724B - - buildConfigurations - - 353636652828443BB26916E5 - 67FC089B3C79470382B8F616 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - A7F958149CD444BABE1E16D9 + A897C81F7F8448EE8945E99C fileRef - 0EBCE730DDA7482FA5E2777F + DFED1B5F445D40889D02EDA6 isa PBXBuildFile - A81D1F70D4B947FA89594682 + A8AA10DCC15A40448D9209FF fileRef - E4745F1F7C20474098A5BAD3 + 49FACA0C9F5749A992DBCABD isa PBXBuildFile - A8B4E2A7D222430CBBA95100 + A8E59E320A3B4435932F948C - baseConfigurationReference - F0B245078FE647C2B4C013B1 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 4.0 - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - + includeInIndex + 1 isa - XCBuildConfiguration + PBXFileReference + lastKnownFileType + sourcecode.c.h name - Debug + KWStub.h + path + Classes/KWStub.h + sourceTree + <group> - A964EE00D9E0466988DB2D5B + A983B2E7AB4E4AFD849B3FCA fileRef - 06D0924645CF44F29A7F8FCB + 80915F5DDFAA4A89A0559079 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - A97D6E772BD74AC6B39DD392 + A9C4CB0990804BE2BAFB88F1 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWBeforeAllNode.m + NSNumber+KiwiAdditions.h path - Classes/KWBeforeAllNode.m + Classes/NSNumber+KiwiAdditions.h sourceTree <group> - AA462F62E3D0482B903432B7 + AAB93295F3CD4E85871EFEA1 - fileRef - C61CCCAB9CBA47FC8C7F42E3 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + NSData+SRB64Additions.m + path + SocketRocket/NSData+SRB64Additions.m + sourceTree + <group> - AB213DDBAB104C76A5C4BE43 + AB4A82823B0348B588BFA3E0 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KiwiConfiguration.h + KWStub.m path - Classes/KiwiConfiguration.h + Classes/KWStub.m sourceTree <group> - AB98AFA1B8084D109DED77CF + AB605CA8305E474A8F4B18D3 - fileRef - F9FC745BCFCB4C3D9E0E5F2C + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWIntercept.m + path + Classes/KWIntercept.m + sourceTree + <group> - ABDDE5DA869A451CA4ECFFF7 + AB79E86D533B4685BC091A9D - fileRef - 604D0E44285B49929F8B5886 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWBeforeEachNode.m + path + Classes/KWBeforeEachNode.m + sourceTree + <group> - ACC0BA8653234D92A6A715C2 + AC00C8D33F9D4472BB5E0C1B fileRef - 8D316B841C9742E0BE03F278 + 28F34795FB114FBDA7EC29F1 isa PBXBuildFile - ACDD2D51B5934070ABD622EB + AC0F8A06DE804D9F8BFE2CD8 - fileRef - 3AAE4842914B427E9703F3EE + explicitFileType + archive.ar + includeInIndex + 0 isa - PBXBuildFile + PBXFileReference + path + libPods-specs-OHHTTPStubs.a + sourceTree + BUILT_PRODUCTS_DIR - AD1964E3E0B94D4C9E6705E6 + AC68232DE8B34CAB8DB66448 fileRef - 03CB4DC62DB343B9A37EC9E1 + E5145671E6D54BEFBB2490C9 isa PBXBuildFile - AD41155C1F6448A590AFD1D0 + ACB1FA365FCD45CA9E085ACE fileRef - 2A2C2174F4F442038A294FD1 + 79E64BB784CE4584A5410888 isa PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - AEC0B0C64D0546B0BC0225B0 + ACC0458522D94F04BD12A80C - fileRef - D805D6651D9E492196941382 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWPendingNode.h + path + Classes/KWPendingNode.h + sourceTree + <group> - AEDE409AC0CC469A92EDAFBC + ACED28F81A714FED8A2C1765 fileRef - 51C6E8DD8F914E249A02D86D + 8106A3F641FE48AC8CFBE107 isa PBXBuildFile - AF9BC13717AC44AD87947134 + AD1C906265314FB2A06595FC fileRef - 1E435A20911E4649B36B21CB + B9CD9DBAAAE44EDD9F356FC5 isa PBXBuildFile - B011D1E5BF164122904DD8C9 + AD6F4D23C0D84697AA90F5A5 includeInIndex 1 @@ -4554,13 +5128,27 @@ lastKnownFileType sourcecode.c.h name - OHHTTPStubsResponse.h + KWValue.h path - OHHTTPStubs/OHHTTPStubsResponse.h + Classes/KWValue.h sourceTree <group> - B099553C7E154649AEEA0E59 + ADEED1D2CD7146409E47EC2C + + buildConfigurations + + DEFF810FA2294A278F95BD92 + 212C08CD4C86497A8B6EAC23 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + AE467A73803847088E1E0707 includeInIndex 1 @@ -4569,50 +5157,77 @@ lastKnownFileType sourcecode.c.h name - KWConformToProtocolMatcher.h + KWContainStringMatcher.h path - Classes/KWConformToProtocolMatcher.h + Classes/KWContainStringMatcher.h sourceTree <group> - B0DE09EF9B424616840103EE + AE50333D66F64B509D588CF8 + + fileRef + DD4C75E2AE684153A99B3AE3 + isa + PBXBuildFile + + AEB9B076F0724C63A76DF656 - includeInIndex - 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + wrapper.framework name - NSObject+KiwiMockAdditions.h + CFNetwork.framework path - Classes/NSObject+KiwiMockAdditions.h + Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/CFNetwork.framework sourceTree - <group> + DEVELOPER_DIR + + AFF9F31257644A1799C2CB5D + + buildActionMask + 2147483647 + files + + A01C54233930461D816953A0 + 0C68169B77D04AECADAEFB45 + 166B6D77C59449F7A9113164 + + isa + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + B0653DBFFD1F47D5B0316BF2 + + fileRef + 24244F9A273F43F8A4941C0F + isa + PBXBuildFile - B1C0ADC88CC44BC78D3EADF0 + B0E1EC3A3F63449B8166D176 fileRef - 584440BE7F2F49209EDBCE42 + FCF264B3CF2A49CE981915D1 isa PBXBuildFile - B26B9FA502C74F16832B1233 + B1AB0D401D5445A593F9B290 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWProbe.h + KWBeWithinMatcher.m path - Classes/KWProbe.h + Classes/KWBeWithinMatcher.m sourceTree <group> - B402548EE7FC4C6A876C4EAB + B23124130A98430C90B9154F includeInIndex 1 @@ -4621,13 +5236,20 @@ lastKnownFileType sourcecode.c.objc name - NSValue+KiwiAdditions.m + KWWorkarounds.m path - Classes/NSValue+KiwiAdditions.m + Classes/KWWorkarounds.m sourceTree <group> - B46E29B6DFB74C85A48C8820 + B3823E30C7824D488C1413EA + + fileRef + 728ED010349F4E4C9249209C + isa + PBXBuildFile + + B42B66B2AB2C439B85DB6F3B includeInIndex 1 @@ -4636,13 +5258,20 @@ lastKnownFileType sourcecode.c.h name - KWRespondToSelectorMatcher.h + KWBeNonNilMatcher.h path - Classes/KWRespondToSelectorMatcher.h + Classes/KWBeNonNilMatcher.h sourceTree <group> - B56C9EC094D74CA3BB71E532 + B5622ACFBB874C119F2648AA + + fileRef + ACC0458522D94F04BD12A80C + isa + PBXBuildFile + + B5D8AE281BA84EB0A11447AC includeInIndex 1 @@ -4651,20 +5280,13 @@ lastKnownFileType sourcecode.c.objc name - KWCaptureSpy.m + KWSpec.m path - Classes/KWCaptureSpy.m + Classes/KWSpec.m sourceTree <group> - B5CB6069A867455BBFEB446A - - fileRef - E4F68BE177384739AFA0B2E7 - isa - PBXBuildFile - - B623443CEC4F4A81B706FCA2 + B65B974FF4CF4C3BB160D7D2 includeInIndex 1 @@ -4673,13 +5295,13 @@ lastKnownFileType sourcecode.c.objc name - KWHaveValueMatcher.m + KWExample.m path - Classes/KWHaveValueMatcher.m + Classes/KWExample.m sourceTree <group> - B726226B1E3F4B53BED8EE77 + B88CEEAE2E1F49A882FDF719 includeInIndex 1 @@ -4688,41 +5310,28 @@ lastKnownFileType sourcecode.c.h name - NSValue+KiwiAdditions.h + KWWorkarounds.h path - Classes/NSValue+KiwiAdditions.h + Classes/KWWorkarounds.h sourceTree <group> - B73D89D22B424A09B9953AE9 - - fileRef - 5267CBA8D21040FEBE154A6B - isa - PBXBuildFile - - B7ABAAE02EAF449FB40C55AE - - fileRef - A4D1CAD73C3D4CC1A619E60E - isa - PBXBuildFile - - B86FF5EE2A02466FBA347F2B - - fileRef - 5885C1F6D9574ADBAB1DDF96 - isa - PBXBuildFile - - B8BCE7BC0235479CBBC668D6 + B8BDC4103A3946E4B534AF3B - fileRef - F0B2101D1C85406EBFA2C9B7 + buildActionMask + 2147483647 + files + + 23862FEDD85643588D2705B2 + 6A37838E74DC4EF0A86D86F6 + 1CB76CE981B04DBC82319348 + isa - PBXBuildFile + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 - B96299F345B749F8A87EDFC4 + B91989E56498406E8FB4D35A includeInIndex 1 @@ -4731,28 +5340,26 @@ lastKnownFileType sourcecode.c.objc name - KWUserDefinedMatcher.m + KWMock.m path - Classes/KWUserDefinedMatcher.m + Classes/KWMock.m sourceTree <group> - BA10F41EC2754278945812C3 + B99D2982DD364339B4DE196A includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - NSObject+KiwiStubAdditions.m + text.xcconfig path - Classes/NSObject+KiwiStubAdditions.m + Pods-SocketRocket-Private.xcconfig sourceTree <group> - BA32173C434F4AFFAC2A69FE + B9CD9DBAAAE44EDD9F356FC5 includeInIndex 1 @@ -4761,83 +5368,67 @@ lastKnownFileType sourcecode.c.h name - KWStringUtilities.h + NSObject+KiwiVerifierAdditions.h path - Classes/KWStringUtilities.h + Classes/NSObject+KiwiVerifierAdditions.h sourceTree <group> - BBC65B17FD884D54886B41D7 - - containerPortal - 56671128374E4360A275B2F1 - isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - EC1DFB002A1B445EB91488C8 - remoteInfo - Pods-Reachability - - BC7B3D23A9154227AE89E639 + B9D24FC54D634AE192495BB8 fileRef - 2DBC7C45F4E24E5481DB65F5 + 17237A26F10D450C8403F039 isa PBXBuildFile - BCFDD67BF3344A34ADB13924 + BAE78614D5674F4A90C954C9 - containerPortal - 56671128374E4360A275B2F1 + fileRef + E7D1FC76CAB84EB9BB536038 isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - F3A20961FEC8436DAF996DD4 - remoteInfo - Pods-specs-OHHTTPStubs + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - BD576C9F5F494723BB82D1C8 + BB750892830E43E9A8AFE0F1 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - KWBeKindOfClassMatcher.m + sourcecode.c.h path - Classes/KWBeKindOfClassMatcher.m + Pods-specs-OHHTTPStubs-prefix.pch sourceTree <group> - BD89C0973DDE48398CD6AD0E + BBC25647CB2646519CFEE44B + fileRef + FCF264B3CF2A49CE981915D1 isa - PBXTargetDependency - target - 2B0A0813AF0741DBB91ACC57 - targetProxy - 63D8438322F243D589DFFF74 + PBXBuildFile - BE6124AAFF5A45799AF33ACD + BC643AC9148A4262AFE6A65C includeInIndex 1 isa PBXFileReference lastKnownFileType - text.plist.xml + sourcecode.c.objc + name + OHHTTPStubsResponse.m path - Pods-specs-acknowledgements.plist + OHHTTPStubs/OHHTTPStubsResponse.m sourceTree <group> - BF1A468DD91B4EFAA1EF8ED4 + BCCB43FD08904BA1B7FFA2FF includeInIndex 1 @@ -4846,47 +5437,13 @@ lastKnownFileType sourcecode.c.objc name - KWFutureObject.m + KWMatcherFactory.m path - Classes/KWFutureObject.m + Classes/KWMatcherFactory.m sourceTree <group> - C0389F466CB54F1886C01A90 - - fileRef - C8ABC3F90B5345B5A589CF35 - isa - PBXBuildFile - - C0C751F3B15B45E1B8FB017C - - fileRef - 8AEB36B21072419BA56F0F7A - isa - PBXBuildFile - - C146634260D14659A0F9A2EC - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - path - libPods-specs-Kiwi.a - sourceTree - BUILT_PRODUCTS_DIR - - C1E078818B13496C91845F8B - - fileRef - 2B068FD6DC2344B093CF25AC - isa - PBXBuildFile - - C1F0048B94D4428CBD764038 + BD20224CD09B411A8D593C28 includeInIndex 1 @@ -4895,20 +5452,38 @@ lastKnownFileType sourcecode.c.h name - KWChangeMatcher.h + KWBeIdenticalToMatcher.h path - Classes/KWChangeMatcher.h + Classes/KWBeIdenticalToMatcher.h sourceTree <group> - C25B810667FE4D51A0F8F62E + BDBE7202A8214393ACF3E379 - fileRef - 6D5F7E43DBC84A86B2E83494 + buildConfigurationList + 6A7B409622AB4481B3EF2324 + buildPhases + + C19AE52D937F41DE97D1277C + AFF9F31257644A1799C2CB5D + 79BC30C23CDE4DA99835C8E5 + + buildRules + + dependencies + isa - PBXBuildFile + PBXNativeTarget + name + Pods-SocketRocket + productName + Pods-SocketRocket + productReference + DD4C75E2AE684153A99B3AE3 + productType + com.apple.product-type.library.static - C26FA000896A4E34B71C4D3B + BDBF15DF2B694F6A9C4F3D14 includeInIndex 1 @@ -4917,86 +5492,118 @@ lastKnownFileType sourcecode.c.h name - KWMatcherFactory.h + KWVerifying.h path - Classes/KWMatcherFactory.h + Classes/KWVerifying.h sourceTree <group> - C29B57204547435DA2D33954 + BF956684202046CD96D1D451 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWInvocationCapturer.h + KWAfterEachNode.m path - Classes/KWInvocationCapturer.h + Classes/KWAfterEachNode.m sourceTree <group> - C2A98F24AB5B480E991052A7 + C00DBBADBF4D47D689FEF638 fileRef - 413EF2635C834ED381C27BAA + 6D85F37568564FD58D7EA465 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - C2CAFAEFF4F840AC80A8DC17 + C05EA06F58B6425E9A04FE02 fileRef - EFA5245B07A748A6B204F35F + 42FACB98211A4A3DAA17F8B2 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - C2E00E00C29249379F52604B + C0A9A5E7219049B1A83AFE0A - includeInIndex - 1 + buildConfigurations + + F6F4DCC501A541948A42EBAC + DCEA85F980EF4923944795D7 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc + XCConfigurationList + + C0F3A5829EA1439493DBCDE9 + + children + + 0EE143C221AC43C3A516AE9F + 7793AD6003B94E13A30057BF + C5E1C0091E0748888141AAD5 + + isa + PBXGroup name - KWBeSubclassOfClassMatcher.m + Reachability path - Classes/KWBeSubclassOfClassMatcher.m + Reachability sourceTree <group> - C321FB84C8354EB39C64A5E5 + C19AE52D937F41DE97D1277C - fileRef - 825BF97AAA864CD39CA84D95 + buildActionMask + 2147483647 + files + + 74A95A56C5F94720BBED48D2 + 11253ED06B2941C999067601 + E9A6C856148E455497C7415D + F187827DC29D4F4AB6C61A86 + isa - PBXBuildFile + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 - C36DA1A49DFD4F3AA5F1F35C + C1E952991CD04A79B97AA363 - includeInIndex - 1 + children + + D53A889F73AC4196A1141145 + 64101EE568764E3EBAD29FA8 + 24244F9A273F43F8A4941C0F + BC643AC9148A4262AFE6A65C + 76BF20B794CB429CBC47B8DA + isa - PBXFileReference - lastKnownFileType - sourcecode.c.h + PBXGroup name - KWObjCUtilities.h + OHHTTPStubs path - Classes/KWObjCUtilities.h + OHHTTPStubs sourceTree <group> - C38CB01C5A53446AB8179F91 - - fileRef - 9D8F977726B447A9A45FA965 - isa - PBXBuildFile - - C394BB537EC64D01908F0E5F + C1F5B1CDE60B43B280ED49D6 includeInIndex 1 @@ -5005,27 +5612,13 @@ lastKnownFileType sourcecode.c.h name - KWRegularExpressionPatternMatcher.h + KWSymbolicator.h path - Classes/KWRegularExpressionPatternMatcher.h + Classes/KWSymbolicator.h sourceTree <group> - C3BA73B59D894B7CAAE94182 - - fileRef - B099553C7E154649AEEA0E59 - isa - PBXBuildFile - - C3D0B4FFAC234C2CBA1A2E55 - - fileRef - 75DC40E9B66243CBA6E87459 - isa - PBXBuildFile - - C4226003BAC24AE4AD5B43CE + C2B4892303BC46B29BF170FF includeInIndex 1 @@ -5034,13 +5627,13 @@ lastKnownFileType sourcecode.c.h name - NSObject+KiwiVerifierAdditions.h + KWGenericMatchEvaluator.h path - Classes/NSObject+KiwiVerifierAdditions.h + Classes/KWGenericMatchEvaluator.h sourceTree <group> - C4C50EB7E44B43129EB97EB8 + C370DE5C47884C4592EBA2B9 includeInIndex 1 @@ -5049,41 +5642,13 @@ lastKnownFileType sourcecode.c.objc name - KWValue.m + KWBlock.m path - Classes/KWValue.m + Classes/KWBlock.m sourceTree <group> - C4F375FFFEA04228BF826BFA - - fileRef - 9DE2E3E59AFE40128A1085AB - isa - PBXBuildFile - - C4F74423FD594F9690E835AA - - fileRef - F018D64549074ED4B33FE9D9 - isa - PBXBuildFile - - C517DAC6688D466FA2B872F0 - - fileRef - 9B8C5FFD54A9478AB9CD060E - isa - PBXBuildFile - - C583BDB228344690858E04BE - - fileRef - A0B577847C4245EF84CA83C9 - isa - PBXBuildFile - - C613D1EE68A94DC3BCECB811 + C4067E08F10A4CED82E5D513 includeInIndex 1 @@ -5091,39 +5656,21 @@ PBXFileReference lastKnownFileType sourcecode.c.h + name + KWExample.h path - Pods-SocketRocket-prefix.pch + Classes/KWExample.h sourceTree <group> - C61690B2DA9C420E93D95AB5 + C47B6DDE68B04311A7CE66FA - buildConfigurationList - 75EC7DB9979B4129BA1F64CD - buildPhases - - 0A183BE4AAFF4F9CA9338B78 - A3AF2442D4D145498D189DBF - - buildRules - - dependencies - - D4AD94C0BD384764A48EE0F6 - BD89C0973DDE48398CD6AD0E - + fileRef + 53371DB950A44FE2B08263D5 isa - PBXNativeTarget - name - Pods - productName - Pods - productReference - 372837EDEE934875BF9CC234 - productType - com.apple.product-type.library.static + PBXBuildFile - C61CCCAB9CBA47FC8C7F42E3 + C4E290F9834D4B04B8CA5963 includeInIndex 1 @@ -5132,53 +5679,54 @@ lastKnownFileType sourcecode.c.objc name - KWContainStringMatcher.m + KWFutureObject.m path - Classes/KWContainStringMatcher.m + Classes/KWFutureObject.m sourceTree <group> - C61E12726F3B4E0883F3B80C - - fileRef - D43295C3382F40769D4B4A49 - isa - PBXBuildFile - - C61F6EAE1FD446BBBFEB84F4 + C5E1C0091E0748888141AAD5 children - 3289AA81AA354AE88BA98FE9 + 52A573B4E10E4065A98C488D + FE5D2C2CBA92447DAFACD29C + D1A2276FA50A465CA5B89876 + D0E33BE40D58494E94ADDAEE isa PBXGroup name - Frameworks + Support Files sourceTree - <group> + SOURCE_ROOT - C6674300683344B1B932330B + C6B0D3EC209B44DFBDC97945 fileRef - 6D78448E158F49E48C4EDB97 + 7FAAEAF439364840A8BF958D isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - C670E39CDCCA4FE2A3B4D495 + C73D78A31EED4D29A11362CC - explicitFileType - archive.ar includeInIndex - 0 + 1 isa PBXFileReference + lastKnownFileType + sourcecode.c.objc path - libPods-specs-OHHTTPStubs.a + Pods-dummy.m sourceTree - BUILT_PRODUCTS_DIR + <group> - C6EA35EC896446D3812BAF66 + C762FA623AD54994865A5C20 includeInIndex 1 @@ -5187,351 +5735,411 @@ lastKnownFileType sourcecode.c.objc name - OHHTTPStubsResponse.m + KWGenericMatchEvaluator.m path - OHHTTPStubs/OHHTTPStubsResponse.m + Classes/KWGenericMatchEvaluator.m sourceTree <group> - C711B876129844708B7C045C - - fileRef - 00008FCC38E246728207AFD5 - isa - PBXBuildFile - - C7BD8B46A79D490396651011 + C7AB83A9B09C4209A17BCBA1 - buildConfigurationList - 7A2DF566CB4D40D6AEC1E635 - buildPhases - - D5C25A2773DA44729BE1A237 - A6308FE3A02543CC9F6016ED - - buildRules - - dependencies - - 4861FEB6AAA0496BAC78A97E - 04A715A7603D4176BE04DCD7 - isa - PBXNativeTarget - name - Pods-specs - productName - Pods-specs - productReference - E14B41E1242149A78CEEF46B - productType - com.apple.product-type.library.static + PBXTargetDependency + target + BDBE7202A8214393ACF3E379 + targetProxy + 33027B252C0A47288538AB99 - C7C37F37CF42480A906C5326 + C7C8C44CDEE04061AECD9B3A - fileRef - 5C556B2B2E4B4C99BEEF778A + includeInIndex + 1 isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-specs-OHHTTPStubs-Private.xcconfig + sourceTree + <group> - C7E4A4C9979040609B4C2B30 + C884E558218C47229522B1F4 - baseConfigurationReference - 2910EBE586224DBFB6C88644 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Pods-specs-OHHTTPStubs-prefix.pch - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 4.0 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES - - isa - XCBuildConfiguration - name + buildConfigurations + + D775C52EE41245E999368F2C + 2CC5E4918BD342F29F909BF0 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName Release + isa + XCConfigurationList - C81D7E013F2944A9BD99B08A + C8AF18EF3E7942D38FE7365C - includeInIndex - 1 + children + + F3E4AF03573F4785ADBB9227 + isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc + PBXGroup name - KWBeIdenticalToMatcher.m - path - Classes/KWBeIdenticalToMatcher.m + Frameworks sourceTree <group> - C8846FF4E5F441BFA5A24C1A + C9D21AC45984496F9B851674 + + fileRef + 6AA39E1AFBD54BF480FF6BED + isa + PBXBuildFile + + CA68B81544F441639A6C7FC2 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.h + name + KWGenericMatcher.h path - Pods-specs-OHHTTPStubs.xcconfig + Classes/KWGenericMatcher.h sourceTree <group> - C8ABC3F90B5345B5A589CF35 + CA745C3B305B4F4090486E83 + + fileRef + B91989E56498406E8FB4D35A + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + CAEC558939694D57B32F724A includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWStringPrefixMatcher.m + KWBeBetweenMatcher.h path - Classes/KWStringPrefixMatcher.m + Classes/KWBeBetweenMatcher.h sourceTree <group> - C8CDCB008FF14C7AB2B889F5 + CB010741BE0540229D83AB23 fileRef - 72493B432DC84B54911CF99C + 433CE8D0403C40DE8F788617 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - C92940422BBD4B03848CE3FD + CBF38EC28FB941DE9FCEC1A5 - fileRef - 089E653D5D3A4B8BA7C7D289 + children + + 3B0F2646415548AD84525C6F + 1E13303919A74B32946FE490 + 18E0BD8C1A7F416291A75D81 + DFED1B5F445D40889D02EDA6 + 74CFBCE5012B402CAA3703C2 + D15F8CC71CA74ACE98289C43 + isa - PBXBuildFile + PBXGroup + name + Pods-specs + sourceTree + <group> - C9710E39B89B484698C13C05 + CBFDB18403534B0E8121C3A5 - fileRef - D9AACE1F3B7E4BFAB62409C2 + buildActionMask + 2147483647 + files + + 502E0001F2A847BDA37F39C8 + 39825487BC7340BFB0EAF451 + AE50333D66F64B509D588CF8 + isa - PBXBuildFile + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 - C99F60013B7E49DABC486DF2 + CC1B8080648B4590BA8D4B90 - fileRef - 1ED7F16EB8164913B555296D + buildActionMask + 2147483647 + files + + 5E747111A42F4CCCA55D7309 + 44B77F29E6494C38BE38903B + 3C6F530B048D4F21A218ECED + 42F4B24C94CE4905BF683ECF + 2F22EB111ADC42DE87A9457F + 480B01DBD2584CB582F8F9D2 + 2AD396FB74AF4206AA28707C + 8D3739690F854DBCAAD3C1AC + C47B6DDE68B04311A7CE66FA + 39034D5B3F194CD990AC513B + 052A27F9A84547CFA5D6CF71 + D68EEAA06F3847C3A57D7CF4 + F55E5C657C7B41BD92A40A1B + EEB93D97A1BC495291811E2B + B9D24FC54D634AE192495BB8 + A8AA10DCC15A40448D9209FF + 537B6023702D4F4EA0F8B0A5 + 1601B352B2AC4BF39B53901D + 7FE7D751F94245D987F2A50C + DC38DAD1A9004EAD8876A588 + 78373B40FFD84906AEE77B16 + ACB1FA365FCD45CA9E085ACE + 7771EC49085444BC8585347F + B3823E30C7824D488C1413EA + D4F269D024174C919CF18A4B + 9FE35D21B07B43E3A756B83B + 912F556C80EB4A01A9EDE526 + A32CD7A6721747FEB9F85245 + F531FF2C5A244689B884183F + 3F888701D26B4C87ABBC390A + 885D15B67D0F40A790E56D66 + F8B02FB71FA746CA9766C7FA + 4D07028604BA456D84A94849 + 828CE22DF4604CB78E1E8FD6 + 53A025F40F7D4DD5AE8D9984 + A10FEEC17D3E4CA19E4110BF + 14A17D430468457198C4232F + 5EC4AD4EF58C4385AD666A4D + 74E0C855E0CE42F1AA19A4DE + 6C0C6181BBB847338DFFD051 + 4FD45CA3C1EA4E05A610D789 + D2DDEF83B4374922AE828A8F + CCE3090F37D0458996480073 + A1AE93F94AC24445A524226F + 6C6D482A6CD848CBAAB504BE + 287564EBEA034300B6813967 + 3D99FBF576A4430DBF48EDC5 + AC00C8D33F9D4472BB5E0C1B + 0A9A0261E4ED4AE780EF9120 + 0ECF57D8D8614485A25BD387 + DDF2E56BB5D54EE7A479032F + CD756E5A8CBD4406AF32F979 + 10D1A08B264F48288C9D26DB + 10BFE4AD9B4146C1B2D0CFF7 + 309704F18AA041F692B94C5D + 9A27C4CA2DC445D3A9FDDCD5 + AC68232DE8B34CAB8DB66448 + 6CAF3F4E872A48BB90BBA5F9 + 6CADAB6FF7E844F4B0FB86BA + 7D544D0BDE0E4EE99E2DFA84 + 50E25ADAF1BE4AD3B6FFD0B3 + B5622ACFBB874C119F2648AA + DF7AE47998A840D8B6A3FDC5 + 10F30B15A5484BDCA0CBCEC5 + FEDD5642F29D4F11B2DF3E50 + 6F1DD6827A3C4241A139A5D9 + 5AF707C5EEA8429EB99F07AE + D7A8D82465574FB3865D8933 + 1101292040514398BF4DDA64 + 5C3F85CBDE5E4B00B6BB9511 + 9B8D759A200549A3B661779B + 8C7ABCAC9DB14B62A03029D7 + 09210E44857A4D7089A55805 + FF94E7F3CDFF4CA0BBD35AF0 + 4DD3923901304120927407F6 + E2DB16594B514BCBBE0E9408 + E3ABC2DD60654E5DABADECE0 + 5B1EC67926F14E8CBE582734 + 3007A43452214FE19D180C47 + 6513C68576DD40C4ADA9F9F2 + 4780FAA921314985AFBB5680 + 344ECD924B4549C185303BDE + 2DB272D6053C4807BC626964 + 5F71308CB84748969FE89A34 + C9D21AC45984496F9B851674 + 131A18BCC77C4878A5ADDE4B + 3BE44394C038473FB097DD0A + 5CB94DED3E4946F6AA490731 + D72FFFC6003F43CAA12201B6 + F84410D067E945A8BD4EB10E + E1D73F1C3FDB4DD195555A59 + 502F0A07B2C74B239EA14FC7 + AD1C906265314FB2A06595FC + 2FDADB7567BB43D6B2525A5B + 1A405738C62443209E636724 + 1480D3DD81F5482087E03701 + isa - PBXBuildFile + PBXHeadersBuildPhase + runOnlyForDeploymentPostprocessing + 0 - CA11F1F6E42C4234A140F524 + CCE3090F37D0458996480073 fileRef - 162D4F7B9CFC4F40B3340617 + CA68B81544F441639A6C7FC2 isa PBXBuildFile - CA4C28BDEEC74F2AA95E37EA + CD756E5A8CBD4406AF32F979 fileRef - 12ADDEC1687247D698DF8292 + 594FA71E99454011B415C046 isa PBXBuildFile - CA508CC131164E5BB8315DD4 + CD9632B3B8EC456ABE0A7912 - baseConfigurationReference - 378508C74CAA4E29A75BE680 - buildSettings + attributes - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Pods-SocketRocket-prefix.pch - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 4.0 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES + LastUpgradeCheck + 0500 + buildConfigurationList + 9A1D182D77104738BCBCDBA2 + compatibilityVersion + Xcode 3.2 + developmentRegion + English + hasScannedForEncodings + 0 isa - XCBuildConfiguration - name - Release - - CBC8D04048CE4414A9FF8861 - - fileRef - 2F348541062B48A69CC5EB14 - isa - PBXBuildFile + PBXProject + knownRegions + + en + + mainGroup + 3E01AFF0C90A445E9C3CCE93 + productRefGroup + 8ABD6E6739964423BA924C6A + projectDirPath + + projectReferences + + projectRoot + + targets + + 61FDDB3765BC40D8AD1CA677 + A7D9977497BA4F6AB4A0889F + BDBE7202A8214393ACF3E379 + 8CD183EA2D3E4A6B8D5761CE + 995F1D8F06324A69AC7ADD72 + 8E4EBA6C393D4E669F393B84 + - CCBF3A07F47D4F4D8047A858 + CDF76A42FEE946EE82A19B74 fileRef - DA5501096F7B44398D4723E5 + 5E5E6B2CFE2445379929C794 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - CDA62D88D04249F48860B07F + CE09F3BDE9EC4A75A2BA873A includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWMessagePattern.h + KWMessagePattern.m path - Classes/KWMessagePattern.h + Classes/KWMessagePattern.m sourceTree <group> - CE42CCE58B754C7B8408D3E0 + CE935C9D71AA4B01B465AB1C - includeInIndex - 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + wrapper.framework name - NSNumber+KiwiAdditions.h + SenTestingKit.framework path - Classes/NSNumber+KiwiAdditions.h + Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/SenTestingKit.framework sourceTree - <group> + DEVELOPER_DIR - CEDA435F85FB4EC2AC7E3A9D + CEAE6BFD13A6444BA369FEEB includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWProbePoller.m + KWMatcherFactory.h path - Classes/KWProbePoller.m + Classes/KWMatcherFactory.h sourceTree <group> - CEE65C51659C4068A1217618 + CEBEC57FB3F64041B456877F includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWCallSite.m + KWMatching.h path - Classes/KWCallSite.m + Classes/KWMatching.h sourceTree <group> - D0AECFFEA1B344FEBD6CD493 + CF5699A1444F45B697DAB10F + + fileRef + D1A2276FA50A465CA5B89876 + isa + PBXBuildFile + + D045CEF3EC0B400DB21E946B includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWFutureObject.h + KWExistVerifier.m path - Classes/KWFutureObject.h + Classes/KWExistVerifier.m sourceTree <group> - D1CD3A46930647B5886DEF53 - - fileRef - B26B9FA502C74F16832B1233 - isa - PBXBuildFile - - D2343FAB7B1047CFA406CFFD - - fileRef - 5A5905FA9EE947969254BA7E - isa - PBXBuildFile - - D24895EE44C64739B92003F2 + D08C3321806E4969BEF25D4F includeInIndex 1 @@ -5540,13 +6148,13 @@ lastKnownFileType sourcecode.c.objc name - KWBeBetweenMatcher.m + KWFormatter.m path - Classes/KWBeBetweenMatcher.m + Classes/KWFormatter.m sourceTree <group> - D2540CBA91984C1BBC3BBDD0 + D0E33BE40D58494E94ADDAEE includeInIndex 1 @@ -5554,100 +6162,79 @@ PBXFileReference lastKnownFileType sourcecode.c.h - name - KWTestCase.h path - Classes/KWTestCase.h + Pods-Reachability-prefix.pch sourceTree <group> - D301190CE0A04B90B00616D1 - - fileRef - 99E7EBCA9E944975BF10B11E - isa - PBXBuildFile - - D43295C3382F40769D4B4A49 + D15F8CC71CA74ACE98289C43 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - KWRaiseMatcher.m + text.script.sh path - Classes/KWRaiseMatcher.m + Pods-specs-resources.sh sourceTree <group> - D4AD94C0BD384764A48EE0F6 - - isa - PBXTargetDependency - target - EC1DFB002A1B445EB91488C8 - targetProxy - BBC65B17FD884D54886B41D7 - - D5192A48425B4D3CB9F20968 + D1A2276FA50A465CA5B89876 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.script.sh + sourcecode.c.objc path - Pods-resources.sh + Pods-Reachability-dummy.m sourceTree <group> - D5C25A2773DA44729BE1A237 + D2DDEF83B4374922AE828A8F - buildActionMask - 2147483647 - files - - 41A83B1724544619BA12767E - + fileRef + C2B4892303BC46B29BF170FF isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXBuildFile + + D4F269D024174C919CF18A4B + + fileRef + 8DB5CFD169084CDA8AD36554 + isa + PBXBuildFile + + D4FB66DCAF1F49FE8D340FA5 + + fileRef + B1AB0D401D5445A593F9B290 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - D5E6437F57824CEE9F5A43F2 + D50EC4A6AB114D948A510707 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWHaveMatcher.m + base64.h path - Classes/KWHaveMatcher.m + SocketRocket/base64.h sourceTree <group> - D5FB4B832CEB44AE8CDF093D - - fileRef - 9E76DADD9AEB4D32961FD45B - isa - PBXBuildFile - - D61308BAF91A4096A32420B5 - - fileRef - B96299F345B749F8A87EDFC4 - isa - PBXBuildFile - - D64720DD20764A37837532B5 + D53A889F73AC4196A1141145 includeInIndex 1 @@ -5656,29 +6243,28 @@ lastKnownFileType sourcecode.c.h name - KWCaptureSpy.h + OHHTTPStubs.h path - Classes/KWCaptureSpy.h + OHHTTPStubs/OHHTTPStubs.h sourceTree <group> - D6D679299D0F4360A4527C57 + D57E36F90B2C4ED198A60D7D - buildActionMask - 2147483647 - files - - AD41155C1F6448A590AFD1D0 - E67A47AF1E3C40AC92E00009 - C7C37F37CF42480A906C5326 - 1498854BD2F840EF93503103 - + includeInIndex + 1 isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWExpectationType.h + path + Classes/KWExpectationType.h + sourceTree + <group> - D748FE8C912848879ADDC40A + D631F7B436E4436DA877B4A5 includeInIndex 1 @@ -5687,71 +6273,81 @@ lastKnownFileType sourcecode.c.objc name - KWBeZeroMatcher.m + KWBeIdenticalToMatcher.m path - Classes/KWBeZeroMatcher.m + Classes/KWBeIdenticalToMatcher.m sourceTree <group> - D779FBD2D5914DEA9E408F4A + D636C2CC9FCC4135A468818B fileRef - CDA62D88D04249F48860B07F + 8AB698371FC54087AC4A5BE3 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - D7E621A17464496D826E0131 + D68EEAA06F3847C3A57D7CF4 - children - - 4CD04D1D584F451FB2F326EF - 5DD5F28EF02942E3B404B619 - B011D1E5BF164122904DD8C9 - C6EA35EC896446D3812BAF66 - DDD79CDD68F542BC9AE21C7D - + fileRef + 12F77D49665540A999F08418 isa - PBXGroup - name - OHHTTPStubs - path - OHHTTPStubs - sourceTree - <group> + PBXBuildFile + + D6982AC860334EF99D7F9BEA + + fileRef + F8DA4285419B41DB83E6082E + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - D805D6651D9E492196941382 + D6BC5A79F1F947EDBA79F086 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - NSInvocation+OCMAdditions.h + SenTestSuite+KiwiAdditions.m path - Classes/NSInvocation+OCMAdditions.h + Classes/SenTestSuite+KiwiAdditions.m sourceTree <group> - D896ABBE403F47C18F00DE7C + D72FFFC6003F43CAA12201B6 - buildConfigurations - - 8458DA3FD1DD41B1AAFD05CC - C7E4A4C9979040609B4C2B30 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release + fileRef + A9C4CB0990804BE2BAFB88F1 isa - XCConfigurationList + PBXBuildFile + + D7533F2E00BE47BC866F514F + + fileRef + 1EB52154FAA54382B9DE5774 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - D9A0A143EC1C4C43B6E5CC36 + D775C52EE41245E999368F2C baseConfigurationReference - 378508C74CAA4E29A75BE680 + 2846C072D3444C6B895F35AD buildSettings ALWAYS_SEARCH_USER_PATHS @@ -5769,7 +6365,7 @@ GCC_PRECOMPILE_PREFIX_HEADER YES GCC_PREFIX_HEADER - Pods-SocketRocket-prefix.pch + Pods-specs-Kiwi-prefix.pch GCC_PREPROCESSOR_DEFINITIONS DEBUG=1 @@ -5799,7 +6395,33 @@ name Debug - D9AACE1F3B7E4BFAB62409C2 + D7A8D82465574FB3865D8933 + + fileRef + F3C2F30562FD42ACA73225D0 + isa + PBXBuildFile + + D7F776B944054C1BBA954739 + + fileRef + 75170BD32DD944139E99DA3B + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + D8F11F79DB1E47B4AA383102 + + fileRef + 03F05C358E854E8DA923970F + isa + PBXBuildFile + + DB2C631DFE764E938AF04269 includeInIndex 1 @@ -5808,13 +6430,13 @@ lastKnownFileType sourcecode.c.h name - NSInvocation+KiwiAdditions.h + KWStringContainsMatcher.h path - Classes/NSInvocation+KiwiAdditions.h + Classes/KWStringContainsMatcher.h sourceTree <group> - DA5501096F7B44398D4723E5 + DB532E7DD2C14E38BF0AA0AB includeInIndex 1 @@ -5823,13 +6445,20 @@ lastKnownFileType sourcecode.c.h name - KWAny.h + KWExistVerifier.h path - Classes/KWAny.h + Classes/KWExistVerifier.h sourceTree <group> - DB834F3AE66E43ADBF4E3DF1 + DC38DAD1A9004EAD8876A588 + + fileRef + 21CFD7BD0A7A49D99591CCF2 + isa + PBXBuildFile + + DCD6CA8377B3483FB50DA56F includeInIndex 1 @@ -5838,92 +6467,212 @@ lastKnownFileType sourcecode.c.objc name - KWExampleSuite.m + KWDeviceInfo.m path - Classes/KWExampleSuite.m + Classes/KWDeviceInfo.m sourceTree <group> - DCFDE749B62C4EB7B4EFB859 + DCEA85F980EF4923944795D7 + + baseConfigurationReference + 863F116C601848108F1DEA69 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + YES + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 4.0 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + VALIDATE_PRODUCT + YES + + isa + XCBuildConfiguration + name + Release + + DD4C75E2AE684153A99B3AE3 + + explicitFileType + archive.ar + includeInIndex + 0 + isa + PBXFileReference + path + libPods-SocketRocket.a + sourceTree + BUILT_PRODUCTS_DIR + + DDF2E56BB5D54EE7A479032F + + fileRef + 8DDBA4EB259941A9999709D8 + isa + PBXBuildFile + + DEFF810FA2294A278F95BD92 + + baseConfigurationReference + C7C8C44CDEE04061AECD9B3A + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + NO + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-specs-OHHTTPStubs-prefix.pch + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 4.0 + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + + isa + XCBuildConfiguration + name + Debug + + DF7AE47998A840D8B6A3FDC5 + + fileRef + 4C2170171E2B4E01B5B62E1B + isa + PBXBuildFile + + DFED1B5F445D40889D02EDA6 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.objc path - Pods-Reachability-Private.xcconfig + Pods-specs-dummy.m sourceTree <group> - DD3F8D69D1D742269C7B8923 + E08626E0AE2F45A78D0E48A0 includeInIndex 1 isa PBXFileReference - lastKnownFileType - sourcecode.c.h name - KWIntercept.h + base64.c path - Classes/KWIntercept.h + SocketRocket/base64.c sourceTree <group> - DD4F5D6A0D4943DCB890E6DB + E1D73F1C3FDB4DD195555A59 fileRef - 9CF86F29D3E24EACA76BA39D + F89312611E42485AAEF9F660 isa PBXBuildFile - DDD79CDD68F542BC9AE21C7D - - children - - C8846FF4E5F441BFA5A24C1A - 2910EBE586224DBFB6C88644 - 72493B432DC84B54911CF99C - 14723A73BEFA41B8B500CC76 - - isa - PBXGroup - name - Support Files - sourceTree - SOURCE_ROOT - - DE5CD632034B46428537883D + E2DB16594B514BCBBE0E9408 fileRef - 32FEA4647D024A709AB9FA41 + C1F5B1CDE60B43B280ED49D6 isa PBXBuildFile - DE81BD24B7FE4C299F6C4D3B + E3ABC2DD60654E5DABADECE0 fileRef - AB213DDBAB104C76A5C4BE43 + F157A7F4CB9A4C599B5328A5 isa PBXBuildFile - DE8D30A9406542E3A00DD15B + E3BD5F4B2173405C929825D9 fileRef - 6D006AA68F5343FC87E29953 + AB79E86D533B4685BC091A9D isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - DF3FE6D6EE2F4ED6B1A52919 + E4DBB433AA684B3897C1F767 fileRef - E3E945FC487A48D78155FC44 + 7AB80B2C80CA44A2936CF0F9 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - E012578A4B604202A3867FC7 + E5145671E6D54BEFBB2490C9 includeInIndex 1 @@ -5932,13 +6681,13 @@ lastKnownFileType sourcecode.c.h name - KWBeforeAllNode.h + KWMessageSpying.h path - Classes/KWBeforeAllNode.h + Classes/KWMessageSpying.h sourceTree <group> - E0F72EF850DD4C8F9533D52E + E7D1FC76CAB84EB9BB536038 includeInIndex 1 @@ -5946,51 +6695,46 @@ PBXFileReference lastKnownFileType sourcecode.c.objc + name + KWMatchers.m path - Pods-Reachability-dummy.m + Classes/KWMatchers.m sourceTree <group> - E11930F907594C8D9014BC2D - - fileRef - 0DE613D5FBC442BEA676C2DF - isa - PBXBuildFile - - E14B41E1242149A78CEEF46B + E97496D6E4684CC8AD20ABA6 - explicitFileType - archive.ar includeInIndex - 0 + 1 isa PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWBeNilMatcher.h path - libPods-specs.a + Classes/KWBeNilMatcher.h sourceTree - BUILT_PRODUCTS_DIR - - E16E12DC32F348F3B6B429A2 - - fileRef - 58B96E09E6C9433FA96FFB68 - isa - PBXBuildFile + <group> - E2859CB847C14135B77610C4 + E9A6C856148E455497C7415D fileRef - 2DB0F5A2BA0241F5BDFE8B02 + 79594ECD1D924ACAA22259A3 isa PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - E2975C47AF16443685905F4B + E9B5A6C339E44F5692B5BA24 buildConfigurations - 50B71BCF9B254AE3A3AEE204 - 2AB45C1EB166493E9F3E11A8 + 7FCF3FC612C64B0191802AB1 + 345A68049CBA4882857C9C19 defaultConfigurationIsVisible 0 @@ -5999,207 +6743,16 @@ isa XCConfigurationList - E2A304E02D85459B82F01B8B - - fileRef - 9049A5FFCA564EA7A7581376 - isa - PBXBuildFile - - E3C5E4D8B47043ABB6B3476D + EBC3533FED874BBDBFE81F12 - children - - 0D35278FB73C48B583F219DA - 99E7EBCA9E944975BF10B11E - 02917EAEA3E74E9FB9A54260 - 1B7738AF037D4A02B7D6F74D - DA5501096F7B44398D4723E5 - 2D75D4F6472346F898D2702B - A447F211D903418BB7A55A82 - 00008FCC38E246728207AFD5 - 76146A38D348416F98A7F7E4 - D24895EE44C64739B92003F2 - 6D78448E158F49E48C4EDB97 - 64A8529690894744B540B826 - 23753E7755924ADB9F64523F - C81D7E013F2944A9BD99B08A - 0DE613D5FBC442BEA676C2DF - BD576C9F5F494723BB82D1C8 - 12ADDEC1687247D698DF8292 - 67AA976E7118427D98F0C8F1 - ED0060EEC4F940649B47D902 - 5D5449014E644CFB98449F5F - 5DFEFC48FF144766B5D6B189 - 521981D242014582BC666854 - 3B87D4FD143E4393A97CE9EE - C2E00E00C29249379F52604B - 2CE302F0CDD74C84BBC8BD22 - 846E715C2E6A471D8F5AED4B - 05203007927E4DE5B8CB91FF - 85B7625F9D2942609C2C76F0 - 0EBA34AEF95C4A46A6CE35CA - D748FE8C912848879ADDC40A - E012578A4B604202A3867FC7 - A97D6E772BD74AC6B39DD392 - 7E9B84AAFAAD46289D3AFE98 - 0B780B1BFAED4F2FAFDEB736 - 6939898846124193BE662AED - 72F4161EAD3744C88B9D32E4 - 2C887C3ED8A344B9B6AE0E3D - 9688D932103B4EB594B1C0C4 - 32BAB6074DFA4FA69DFF7572 - EDC2AAC8F16143BA965323D3 - 735647AF52024604987B0174 - CEE65C51659C4068A1217618 - D64720DD20764A37837532B5 - B56C9EC094D74CA3BB71E532 - C1F0048B94D4428CBD764038 - A2A7531E7A8F4C52A2ADB1CD - B099553C7E154649AEEA0E59 - 65EDB901E0CA4106A5D94BCC - 996DF26A178C4391A1E1F3CA - EFA5245B07A748A6B204F35F - 2193788D34E94DBE9C2953A1 - C61CCCAB9CBA47FC8C7F42E3 - A3042D81C15D4061A02BA93C - 3074EEEC4A0248F3AD09E672 - 49362D1BDF434C2681D9EA73 - 159C53CF9F5D4E8B8056AD62 - 79A0E4CBBBAB48E29B02BA2F - 38F5582CADE24337B8B83E91 - 1DBCF24C3397436A93F8209F - 40E2BE0176B3470EA948A4B8 - F816B0144B824DD69768CA8C - 9EB9DAF99353458F9805E406 - 721D7E86FD62421A980B009D - 2F2420CB68A34CA1941D6309 - 0B880FCBE6804AE59CEE3489 - F9FC745BCFCB4C3D9E0E5F2C - 1AB5C366EF3549C199A34EBA - DB834F3AE66E43ADBF4E3DF1 - 03CB4DC62DB343B9A37EC9E1 - 9DE2E3E59AFE40128A1085AB - 3F1F4731EFF3438BB47C828C - 51C6E8DD8F914E249A02D86D - 2F348541062B48A69CC5EB14 - F7C250808FBE4D2096BAF6C4 - FBE82AE05AA74A22B1E0CCDD - D0AECFFEA1B344FEBD6CD493 - BF1A468DD91B4EFAA1EF8ED4 - 32FEA4647D024A709AB9FA41 - 9AE9BA613ED2424F9DECFF79 - F0B2101D1C85406EBFA2C9B7 - 0B8425E1BC32490B868E9C00 - 2DBC7C45F4E24E5481DB65F5 - FEB66E56A4A64C25BBAFE4D2 - 9049A5FFCA564EA7A7581376 - D5E6437F57824CEE9F5A43F2 - 1E435A20911E4649B36B21CB - B623443CEC4F4A81B706FCA2 - 93063D4333F74DB8991E0B6D - 25DB25583C0A41EB85B99372 - DD3F8D69D1D742269C7B8923 - 4D1208DB7BC1462299460C06 - C29B57204547435DA2D33954 - 604D0E44285B49929F8B5886 - 5468E232AFE944D09BC96C40 - EA5563D0777946FBAEF0B6EB - 58B96E09E6C9433FA96FFB68 - 7C92B8C48626490FB1D72A56 - 435DA66FF7A747009B18683B - 9539F6C43A3441FF9D78F53D - C26FA000896A4E34B71C4D3B - 24756F2002E14C31A215BC84 - F018D64549074ED4B33FE9D9 - A0B577847C4245EF84CA83C9 - 2B068FD6DC2344B093CF25AC - CDA62D88D04249F48860B07F - 7B891F3D4BD24A3AA32A0E14 - 6BCCA55C01E6486D9E59A6F2 - 5A5905FA9EE947969254BA7E - 8AEB36B21072419BA56F0F7A - 5885C1F6D9574ADBAB1DDF96 - 508294BD6D4A48588D9D147E - 4AA7720CA1EC4EB4B2EE6F86 - 06D0924645CF44F29A7F8FCB - C36DA1A49DFD4F3AA5F1F35C - E3E945FC487A48D78155FC44 - A4D1CAD73C3D4CC1A619E60E - 089E653D5D3A4B8BA7C7D289 - B26B9FA502C74F16832B1233 - 110FE985B49041708D97AF74 - CEDA435F85FB4EC2AC7E3A9D - 9CF86F29D3E24EACA76BA39D - D43295C3382F40769D4B4A49 - 22736026782A43489D60A3F0 - 79A57B9FECCF46C583B20ECD - E4745F1F7C20474098A5BAD3 - 8D316B841C9742E0BE03F278 - C394BB537EC64D01908F0E5F - E4F68BE177384739AFA0B2E7 - 1E48EA6CC0AA429083E39A71 - B46E29B6DFB74C85A48C8820 - F01CE9876D9E4C0CA3DACA58 - 1AB5DA2BA8F84204A5C26473 - 3A5ECAA3423B4A2BB766BAF0 - E8BDD58964874D378CD8BE87 - 9E76DADD9AEB4D32961FD45B - 1F7C580652F24C0D94721E40 - C8ABC3F90B5345B5A589CF35 - BA32173C434F4AFFAC2A69FE - 413EF2635C834ED381C27BAA - A1DEB3746CC548F28D45865F - 17D8EE657E8945FFB655C25E - 584440BE7F2F49209EDBCE42 - 9B8C5FFD54A9478AB9CD060E - D2540CBA91984C1BBC3BBDD0 - 7F06775D39F24B249E7E9122 - 6D60DBF99A7744EB8DD6EC94 - B96299F345B749F8A87EDFC4 - 911DDD43E4EC457F86209F2F - C4C50EB7E44B43129EB97EB8 - 5267CBA8D21040FEBE154A6B - EC5B33E0DD6646B1BD3245B7 - 162D4F7B9CFC4F40B3340617 - 9D8F977726B447A9A45FA965 - 6D5F7E43DBC84A86B2E83494 - AB213DDBAB104C76A5C4BE43 - 2233F66196FD4088AB894F50 - D9AACE1F3B7E4BFAB62409C2 - 850FB39AB0D94A0F85DB45DA - D805D6651D9E492196941382 - 7F4FEB6A55C74466BE5510EC - 5E36D1AD183C4E52B4BE4A4F - 62870C1C913F4CFE9EABF48D - CE42CCE58B754C7B8408D3E0 - 9D11BEEFD4D049AFA6B3BA0D - B0DE09EF9B424616840103EE - 303AC2C4EDC24B33A809F7BD - 83A7D77F40F04C81AD0A1890 - 4F52B77D3E4649088886C202 - 99C5C695F3D5406483F36D7B - BA10F41EC2754278945812C3 - C4226003BAC24AE4AD5B43CE - 75DC40E9B66243CBA6E87459 - 32F5F8E4CD0141ED8DDF61DB - 825BF97AAA864CD39CA84D95 - B726226B1E3F4B53BED8EE77 - B402548EE7FC4C6A876C4EAB - 770C71317885455D98F07999 - 1ED7F16EB8164913B555296D - 8E90678CC8AF406290F5EC5E - isa - PBXGroup - name - Kiwi - path - Kiwi - sourceTree - <group> + PBXTargetDependency + target + A7D9977497BA4F6AB4A0889F + targetProxy + 43DF4E7A028C430ABD224344 - E3E945FC487A48D78155FC44 + EC370BCD987D43A7A1381C09 includeInIndex 1 @@ -6208,35 +6761,25 @@ lastKnownFileType sourcecode.c.objc name - KWObjCUtilities.m + NSObject+KiwiMockAdditions.m path - Classes/KWObjCUtilities.m + Classes/NSObject+KiwiMockAdditions.m sourceTree <group> - E455A33674124E3CAD9FCC4E + ED3966A49AC3465D9F195D7A fileRef - 3F1F4731EFF3438BB47C828C + 04F8EDEA67CD47CFAB41A953 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - E4745F1F7C20474098A5BAD3 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWRegisterMatchersNode.h - path - Classes/KWRegisterMatchersNode.h - sourceTree - <group> - - E4F68BE177384739AFA0B2E7 + ED590E8646BB4A8A96ACF011 includeInIndex 1 @@ -6245,164 +6788,62 @@ lastKnownFileType sourcecode.c.objc name - KWRegularExpressionPatternMatcher.m - path - Classes/KWRegularExpressionPatternMatcher.m - sourceTree - <group> - - E50BEEB09DEE4E46B1E828AF - - includeInIndex - 1 - isa - PBXFileReference - name - base64.c + KWCaptureSpy.m path - SocketRocket/base64.c + Classes/KWCaptureSpy.m sourceTree <group> - E648256A1A8B4BF0AFFC0DC8 + EEB93D97A1BC495291811E2B - includeInIndex - 1 + fileRef + 611BECEF302D434B9D565C36 isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Pods-Reachability-prefix.pch - sourceTree - <group> + PBXBuildFile - E67A47AF1E3C40AC92E00009 + EFE7CE3B4F544058B0BF22BF fileRef - 7CB7012D77874A34B1B1C375 + 5EDADC32109A4467A3CCA870 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - E8BDD58964874D378CD8BE87 + F01F77AD0DDF4A2E87244480 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWStringContainsMatcher.h + KWBeTrueMatcher.m path - Classes/KWStringContainsMatcher.h + Classes/KWBeTrueMatcher.m sourceTree <group> - EA5563D0777946FBAEF0B6EB + F0C50DD325BC4FBE842F5C42 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWItNode.m + KWAfterEachNode.h path - Classes/KWItNode.m - sourceTree - <group> - - EAA462828A93492E9F3A493B - - children - - 72E98B5BE2B448A39BB6B32D - A11EBC0ECD95456590D9BE58 - - isa - PBXGroup - name - Targets Support Files + Classes/KWAfterEachNode.h sourceTree <group> - EAAF07603F284871B401067E - - baseConfigurationReference - 0692DA3FAE464AC9B4070C78 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 4.0 - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Debug - - EC1DFB002A1B445EB91488C8 - - buildConfigurationList - 3FBDAC9ACC3C40298CFDC457 - buildPhases - - 3CF657903B2440FDB7F63B86 - A180A80551F94235B009DA6C - 9250C579387B43D7A27AF8E4 - - buildRules - - dependencies - - isa - PBXNativeTarget - name - Pods-Reachability - productName - Pods-Reachability - productReference - 6D006AA68F5343FC87E29953 - productType - com.apple.product-type.library.static - - EC5B33E0DD6646B1BD3245B7 + F139C2BE6E5C4487B58E0C79 includeInIndex 1 @@ -6411,20 +6852,13 @@ lastKnownFileType sourcecode.c.h name - KWWorkarounds.h + NSData+SRB64Additions.h path - Classes/KWWorkarounds.h + SocketRocket/NSData+SRB64Additions.h sourceTree <group> - ECCAB9A6EC9A410FAAE482ED - - fileRef - 1AB5C366EF3549C199A34EBA - isa - PBXBuildFile - - ED0060EEC4F940649B47D902 + F157A7F4CB9A4C599B5328A5 includeInIndex 1 @@ -6433,20 +6867,25 @@ lastKnownFileType sourcecode.c.h name - KWBeNilMatcher.h + KWTestCase.h path - Classes/KWBeNilMatcher.h + Classes/KWTestCase.h sourceTree <group> - ED4F844D9A674929BEB1D7C2 + F187827DC29D4F4AB6C61A86 fileRef - 110FE985B49041708D97AF74 + E08626E0AE2F45A78D0E48A0 isa PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - EDC2AAC8F16143BA965323D3 + F23B93B5FC8C4F948DF61610 includeInIndex 1 @@ -6455,20 +6894,13 @@ lastKnownFileType sourcecode.c.objc name - KWBlockRaiseMatcher.m + KWBeBetweenMatcher.m path - Classes/KWBlockRaiseMatcher.m + Classes/KWBeBetweenMatcher.m sourceTree <group> - EDCB18B8E4C3428A8B7CF407 - - fileRef - 2DB0F5A2BA0241F5BDFE8B02 - isa - PBXBuildFile - - EFA5245B07A748A6B204F35F + F24A12F6E2C64DADB97A429F includeInIndex 1 @@ -6477,28 +6909,28 @@ lastKnownFileType sourcecode.c.objc name - KWContainMatcher.m + NSNumber+KiwiAdditions.m path - Classes/KWContainMatcher.m + Classes/NSNumber+KiwiAdditions.m sourceTree <group> - F018D64549074ED4B33FE9D9 + F3376D236AF94D0F90F29DF6 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWMatchers.h + KWBeMemberOfClassMatcher.m path - Classes/KWMatchers.h + Classes/KWBeMemberOfClassMatcher.m sourceTree <group> - F01CE9876D9E4C0CA3DACA58 + F3454C9B803342A18B218796 includeInIndex 1 @@ -6507,107 +6939,142 @@ lastKnownFileType sourcecode.c.objc name - KWRespondToSelectorMatcher.m + NSValue+KiwiAdditions.m path - Classes/KWRespondToSelectorMatcher.m + Classes/NSValue+KiwiAdditions.m sourceTree <group> - F07573B2127E4FB48CA2BC57 + F3494B9C0587408EBEF65482 fileRef - 38F5582CADE24337B8B83E91 + BF956684202046CD96D1D451 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - F0B2101D1C85406EBFA2C9B7 + F3C145405CBC4A00862AAED7 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWGenericMatcher.h + KWContainStringMatcher.m path - Classes/KWGenericMatcher.h + Classes/KWContainStringMatcher.m sourceTree <group> - F0B245078FE647C2B4C013B1 + F3C2F30562FD42ACA73225D0 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.h + name + KWRegularExpressionPatternMatcher.h path - Pods-specs.xcconfig + Classes/KWRegularExpressionPatternMatcher.h sourceTree <group> - F10205540E194915B56A4A2A + F3E4AF03573F4785ADBB9227 - fileRef - 0B8425E1BC32490B868E9C00 + children + + AEB9B076F0724C63A76DF656 + FCF264B3CF2A49CE981915D1 + 5AA7ED306FAF4838B8648877 + CE935C9D71AA4B01B465AB1C + 93907A2127B64E32A9E73A34 + isa - PBXBuildFile + PBXGroup + name + iOS + sourceTree + <group> - F1383854A6C64AEB9D679FFB + F531FF2C5A244689B884183F - includeInIndex - 1 + fileRef + 54CB8D6CA28E43659CE6DF8E isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods-Reachability.xcconfig - sourceTree - <group> + PBXBuildFile - F1EBBB27815144EFB2A5F841 + F55E5C657C7B41BD92A40A1B fileRef - C4226003BAC24AE4AD5B43CE + 17CC07321D9F4DD5A8B3E2BB isa PBXBuildFile - F3A20961FEC8436DAF996DD4 + F6F4DCC501A541948A42EBAC - buildConfigurationList - D896ABBE403F47C18F00DE7C - buildPhases - - 8DE837F0FEF34A6B8CCDE689 - 859A7B5F66A34049B151372E - 2A41DC9983B141E8963B5F9D - - buildRules - - dependencies - + baseConfigurationReference + 863F116C601848108F1DEA69 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + NO + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 4.0 + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + isa - PBXNativeTarget + XCBuildConfiguration name - Pods-specs-OHHTTPStubs - productName - Pods-specs-OHHTTPStubs - productReference - C670E39CDCCA4FE2A3B4D495 - productType - com.apple.product-type.library.static + Debug - F453D742CD7243E590CE3DEC + F84410D067E945A8BD4EB10E fileRef - 64A8529690894744B540B826 + 9B6F68AFEB3745FB9F3D32B2 isa PBXBuildFile - F7C250808FBE4D2096BAF6C4 + F89312611E42485AAEF9F660 includeInIndex 1 @@ -6616,13 +7083,32 @@ lastKnownFileType sourcecode.c.h name - KWFormatter.h + NSObject+KiwiSpyAdditions.h path - Classes/KWFormatter.h + Classes/NSObject+KiwiSpyAdditions.h sourceTree <group> - F816B0144B824DD69768CA8C + F8A3DD7E62C6487FB1FD14B3 + + fileRef + DCD6CA8377B3483FB50DA56F + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + F8B02FB71FA746CA9766C7FA + + fileRef + 1F63D9A4933B46CFBE7147E3 + isa + PBXBuildFile + + F8DA4285419B41DB83E6082E includeInIndex 1 @@ -6631,216 +7117,140 @@ lastKnownFileType sourcecode.c.objc name - KWExample.m + KWStringPrefixMatcher.m path - Classes/KWExample.m + Classes/KWStringPrefixMatcher.m sourceTree <group> - F8DCD79ACB594FB68905CC50 + F92DB362259A4E5EAB44F2EB fileRef - 044A31251DE24E4D89ACE822 + 729162EE598F4D65BFE3634D isa PBXBuildFile settings COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 + -w -Xanalyzer -analyzer-disable-checker - F921514F164D492AA22248BD + F9EEAD8F5EAC4B4E9F497A28 - fileRef - BA32173C434F4AFFAC2A69FE + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWBeZeroMatcher.m + path + Classes/KWBeZeroMatcher.m + sourceTree + <group> - F92ED42764534FAFBC9EEB73 + FB9511A7CE8C4CB59457793C fileRef - ED0060EEC4F940649B47D902 + 8D79D2AEE6134607B9C42EED isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - F99424FBB57544709A34EFD2 + FC15726807EB48968A2AF22F fileRef - FA785A83EA944F5B94290065 + F139C2BE6E5C4487B58E0C79 isa PBXBuildFile - F9FC745BCFCB4C3D9E0E5F2C + FCF264B3CF2A49CE981915D1 - includeInIndex - 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + wrapper.framework name - KWExampleNodeVisitor.h + Foundation.framework path - Classes/KWExampleNodeVisitor.h + Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/Foundation.framework sourceTree - <group> + DEVELOPER_DIR - F9FF974B80E14996B17783AC + FDEF8C78534E4DC29E833357 - children + buildActionMask + 2147483647 + files - 0165A00EA70F4C35AF958E59 - C61F6EAE1FD446BBBFEB84F4 - 6F9533FC66B94324B2B47CD6 - 4B8FD086C5AF4782A1F39ABF - EAA462828A93492E9F3A493B + A897C81F7F8448EE8945E99C isa - PBXGroup - sourceTree - <group> - - FA376A686ECC4986B3F0163A - - fileRef - C394BB537EC64D01908F0E5F - isa - PBXBuildFile + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 - FA785A83EA944F5B94290065 + FE3DB58BF5034002BA9880D8 + includeInIndex + 1 isa PBXFileReference lastKnownFileType - wrapper.framework + sourcecode.c.objc name - SystemConfiguration.framework + NSInvocation+KiwiAdditions.m path - Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/SystemConfiguration.framework + Classes/NSInvocation+KiwiAdditions.m sourceTree - DEVELOPER_DIR + <group> - FBE82AE05AA74A22B1E0CCDD + FE5D2C2CBA92447DAFACD29C includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - KWFormatter.m + text.xcconfig path - Classes/KWFormatter.m + Pods-Reachability-Private.xcconfig sourceTree <group> - FCF809DCB496476DB9613282 + FEDD5642F29D4F11B2DF3E50 fileRef - 9A9C88FF7AFA49EA9BA63CBB + 02CE1847192D46CB99248DA7 isa PBXBuildFile - FD901F4F13A44F5A87E46BAB + FF94E7F3CDFF4CA0BBD35AF0 fileRef - 4D1208DB7BC1462299460C06 + 2289F5BE59054018BAACAEE8 isa PBXBuildFile - FDA401033508495A940D4635 - - buildConfigurationList - A726D955F7B04F43806D724B - buildPhases - - 9B5B15B290EC4CD5BD2060DC - 960AC4593F1942808B1D7BCD - 785E1D88FD65411CBEE07F20 - - buildRules - - dependencies - - isa - PBXNativeTarget - name - Pods-specs-Kiwi - productName - Pods-specs-Kiwi - productReference - C146634260D14659A0F9A2EC - productType - com.apple.product-type.library.static - - FEB66E56A4A64C25BBAFE4D2 + FFADB713E0804ED2B518DA06 - includeInIndex - 1 + fileRef + BCCB43FD08904BA1B7FFA2FF isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - KWGenericMatchingAdditions.m - path - Classes/KWGenericMatchingAdditions.m - sourceTree - <group> - - FEBC1BB75BA24DF69AAB680F - - baseConfigurationReference - F0B245078FE647C2B4C013B1 - buildSettings + PBXBuildFile + settings - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 4.0 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker - isa - XCBuildConfiguration - name - Release rootObject - 56671128374E4360A275B2F1 + CD9632B3B8EC456ABE0A7912 diff --git a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-Reachability.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-Reachability.xcscheme index 3198c8fa..d8106540 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-Reachability.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-Reachability.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> diff --git a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-SocketRocket.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-SocketRocket.xcscheme index 74590d5d..3d5f5c28 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-SocketRocket.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-SocketRocket.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> diff --git a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs-Kiwi.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs-Kiwi.xcscheme index e6462c28..08f573d5 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs-Kiwi.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs-Kiwi.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> diff --git a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs-OHHTTPStubs.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs-OHHTTPStubs.xcscheme index afc901c8..85384bba 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs-OHHTTPStubs.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs-OHHTTPStubs.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> diff --git a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs.xcscheme index 17b18176..fd515f0c 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> diff --git a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods.xcscheme index 29b360d0..30fa13d2 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> diff --git a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/xcschememanagement.plist b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/xcschememanagement.plist index 3bcc1272..872d41bf 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/xcschememanagement.plist @@ -37,32 +37,32 @@ SuppressBuildableAutocreation - 2B0A0813AF0741DBB91ACC57 + 61FDDB3765BC40D8AD1CA677 primary - C61690B2DA9C420E93D95AB5 + 8CD183EA2D3E4A6B8D5761CE primary - C7BD8B46A79D490396651011 + 8E4EBA6C393D4E669F393B84 primary - EC1DFB002A1B445EB91488C8 + 995F1D8F06324A69AC7ADD72 primary - F3A20961FEC8436DAF996DD4 + A7D9977497BA4F6AB4A0889F primary - FDA401033508495A940D4635 + BDBE7202A8214393ACF3E379 primary From f307440e2d37230f62533267338b2dfed9c9a0cc Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Sun, 24 Nov 2013 14:11:58 +0000 Subject: [PATCH 15/88] Mock connection must call the designated initialiser or it will not have appropriate default ping/pong timeout values. --- Library/PTPusherMockConnection.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Library/PTPusherMockConnection.m b/Library/PTPusherMockConnection.m index 28d35dd2..b7a11e56 100644 --- a/Library/PTPusherMockConnection.m +++ b/Library/PTPusherMockConnection.m @@ -18,7 +18,7 @@ @implementation PTPusherMockConnection { - (id)init { - if ((self = [super init])) { + if ((self = [super initWithURL:nil])) { sentClientEvents = [[NSMutableArray alloc] init]; } return self; From f5a7169d94cd22298ff62e4f82e5f73380c3e2c1 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Sun, 24 Nov 2013 14:23:03 +0000 Subject: [PATCH 16/88] Deprecated the use of auto-connect and any methods that take a connectAutomatically parameter. This behaviour was generally undesirable as you wouldn't normally want to connect without setting a delegate first, which resulted in extra factory methods that take the delegate or having to pass NO and then set the delegate. It was generally confusing. It's simpler to have just two factory methods; one with an optional encrypted parameter, and let the user call connect when they are ready. The deprecated methods will continue to call connect automatically if requested but this will go away in 1.6. --- Library/PTPusher.h | 38 ++++++++++++------------- Library/PTPusher.m | 36 ++++++++++++++++------- Unit Tests/PTPusherMockConnectionSpec.m | 2 +- 3 files changed, 44 insertions(+), 32 deletions(-) diff --git a/Library/PTPusher.h b/Library/PTPusher.h index d7fdeea5..1334b64e 100644 --- a/Library/PTPusher.h +++ b/Library/PTPusher.h @@ -128,40 +128,37 @@ extern NSString *const PTPusherErrorUnderlyingEventKey; /// @name Creating new instances ///------------------------------------------------------------------------------------/ -- (id)initWithConnection:(PTPusherConnection *)connection connectAutomatically:(BOOL)connectAutomatically; - -/** Returns a new PTPusher instance with a connection configured with the given key. - - Instances created using this method will connect automatically. Specify the delegate here - to ensure that it is notified about the connection status during connection. If you assign - a delegate using the delegate property after this method returns, it may not be notified - of connection events. - - @deprecated Use pusherWithKey:delegate:encrypted: - @param key Your application's API key. It can be found in the API Access section of your application within the Pusher user dashboard. - @param delegate The delegate for this instance +/** + * Use initWithConnection: */ -+ (id)pusherWithKey:(NSString *)key delegate:(id)delegate __PUSHER_DEPRECATED__; +- (id)initWithConnection:(PTPusherConnection *)connection connectAutomatically:(BOOL)connectAutomatically __PUSHER_DEPRECATED__; + +- (id)initWithConnection:(PTPusherConnection *)connection; /** Returns a new PTPusher instance with a connection configured with the given key. - Instances created using this method will connect automatically. Specify the delegate here - to ensure that it is notified about the connection status during connection. If you assign - a delegate using the delegate property after this method returns, it may not be notified - of connection events. - @param key Your application's API key. It can be found in the API Access section of your application within the Pusher user dashboard. @param delegate The delegate for this instance @param isEncrypted If yes, a secure connection over SSL will be established. */ + (id)pusherWithKey:(NSString *)key delegate:(id)delegate encrypted:(BOOL)isEncrypted; +/** Returns a new PTPusher instance with an connection configured with the given key. + + Instances created using this method will be encrypted by default. This requires SSL access on your account, + which is generally recommended for mobile connections. + + @param key Your application's API key. It can be found in the API Access section of your application within the Pusher user dashboard. + @param delegate The delegate for this instance + */ ++ (id)pusherWithKey:(NSString *)key delegate:(id)delegate; + /** Initialises a new PTPusher instance with a connection configured with the given key. If you intend to set a delegate for this instance, you are recommended to set connectAutomatically to NO, set the delegate then manually call connect. - @deprecated Use pusherWithKey:connectAutomatically:encrypted: + @deprecated Use pusherWithKey:delegate:encrypted: or pusherWithKey:delegate: @param key Your application's API key. It can be found in the API Access section of your application within the Pusher user dashboard. @param connect Automatically If YES, the connection will be connected on initialisation. */ @@ -172,11 +169,12 @@ extern NSString *const PTPusherErrorUnderlyingEventKey; If you intend to set a delegate for this instance, you are recommended to set connectAutomatically to NO, set the delegate then manually call connect. + @deprecated Use pusherWithKey:delegate:encrypted: or pusherWithKey:delegate: @param key Your application's API key. It can be found in the API Access section of your application within the Pusher user dashboard. @param connectAutomatically If YES, the connection will be connected on initialisation. @param isEncrypted If yes, a secure connection over SSL will be established. */ -+ (id)pusherWithKey:(NSString *)key connectAutomatically:(BOOL)connectAutomatically encrypted:(BOOL)isEncrypted; ++ (id)pusherWithKey:(NSString *)key connectAutomatically:(BOOL)connectAutomatically encrypted:(BOOL)isEncrypted __PUSHER_DEPRECATED__; ///------------------------------------------------------------------------------------/ /// @name Managing the connection diff --git a/Library/PTPusher.m b/Library/PTPusher.m index 0f10dedc..8b1a8b80 100644 --- a/Library/PTPusher.m +++ b/Library/PTPusher.m @@ -64,6 +64,16 @@ @implementation PTPusher { @synthesize authorizationURL; - (id)initWithConnection:(PTPusherConnection *)connection connectAutomatically:(BOOL)connectAutomatically +{ + if ((self = [self initWithConnection:connection])) { + if (connectAutomatically) { + [self connect]; + } + } + return self; +} + +- (id)initWithConnection:(PTPusherConnection *)connection { if (self = [super init]) { dispatcher = [[PTPusherEventDispatcher alloc] init]; @@ -76,10 +86,6 @@ - (id)initWithConnection:(PTPusherConnection *)connection connectAutomatically:( self.connection = connection; self.connection.delegate = self; self.reconnectDelay = kPTPusherDefaultReconnectDelay; - - if (connectAutomatically) { - [self connect]; - } } return self; } @@ -91,23 +97,31 @@ + (id)pusherWithKey:(NSString *)key delegate:(id)delegate + (id)pusherWithKey:(NSString *)key delegate:(id)delegate encrypted:(BOOL)isEncrypted { - PTPusher *pusher = [self pusherWithKey:key connectAutomatically:NO encrypted:isEncrypted]; + NSURL *serviceURL = PTPusherConnectionURL(kPUSHER_HOST, key, @"libPusher", isEncrypted); + PTPusherConnection *connection = [[PTPusherConnection alloc] initWithURL:serviceURL]; + PTPusher *pusher = [[self alloc] initWithConnection:connection]; pusher.delegate = delegate; - [pusher connect]; return pusher; } +#pragma mark - Deprecated methods + + (id)pusherWithKey:(NSString *)key connectAutomatically:(BOOL)connectAutomatically { - return [self pusherWithKey:key connectAutomatically:connectAutomatically encrypted:YES]; + PTPusher *client = [self pusherWithKey:key delegate:nil encrypted:YES]; + if (connectAutomatically) { + [client connect]; + } + return client; } + (id)pusherWithKey:(NSString *)key connectAutomatically:(BOOL)connectAutomatically encrypted:(BOOL)isEncrypted { - NSURL *serviceURL = PTPusherConnectionURL(kPUSHER_HOST, key, @"libPusher", isEncrypted); - PTPusherConnection *connection = [[PTPusherConnection alloc] initWithURL:serviceURL]; - PTPusher *pusher = [[self alloc] initWithConnection:connection connectAutomatically:connectAutomatically]; - return pusher; + PTPusher *client = [self pusherWithKey:key delegate:nil encrypted:isEncrypted]; + if (connectAutomatically) { + [client connect]; + } + return client; } - (void)dealloc; diff --git a/Unit Tests/PTPusherMockConnectionSpec.m b/Unit Tests/PTPusherMockConnectionSpec.m index 7e4a4c04..7b139b38 100644 --- a/Unit Tests/PTPusherMockConnectionSpec.m +++ b/Unit Tests/PTPusherMockConnectionSpec.m @@ -19,7 +19,7 @@ __block PTPusher *pusher; beforeEach(^{ - pusher = [[PTPusher alloc] initWithConnection:connection connectAutomatically:NO]; + pusher = [[PTPusher alloc] initWithConnection:connection]; }); it(@"handles connections and reports connected", ^{ From e7be3e5bb4ba7879ddaf04443102a5fe4ab98ead Mon Sep 17 00:00:00 2001 From: Martyn Loughran Date: Wed, 6 Nov 2013 16:43:28 +0000 Subject: [PATCH 17/88] Add missing deprecated delegate call (removed by 6b5989b0) --- Library/PTPusher.m | 7 +++++++ Library/PTPusherDelegate.h | 11 ++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/Library/PTPusher.m b/Library/PTPusher.m index 8b1a8b80..6d09e23b 100644 --- a/Library/PTPusher.m +++ b/Library/PTPusher.m @@ -372,6 +372,13 @@ - (void)handleDisconnection:(PTPusherConnection *)connection error:(NSError *)er [self.delegate pusher:self connectionDidDisconnect:connection]; #pragma clang diagnostic pop } + + if ([self.delegate respondsToSelector:@selector(pusher:connection:didDisconnectWithError:)]) { // deprecated call +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + [self.delegate pusher:self connection:connection didDisconnectWithError:error]; +#pragma clang diagnostic pop + } if ([self.delegate respondsToSelector:@selector(pusher:connection:didDisconnectWithError:willAttemptReconnect:)]) { [self.delegate pusher:self connection:connection didDisconnectWithError:error willAttemptReconnect:willReconnect]; diff --git a/Library/PTPusherDelegate.h b/Library/PTPusherDelegate.h index c8e3640d..807be631 100644 --- a/Library/PTPusherDelegate.h +++ b/Library/PTPusherDelegate.h @@ -42,12 +42,21 @@ /** Notifies the delegate that the PTPusher instance has disconnected from the Pusher service. - @deprecated Use pusher:connection:didDisconnectWithError: + @deprecated Use pusher:connection:didDisconnectWithError:willAttemptReconnect: @param pusher The PTPusher instance that has connected. @param connection The connection for the pusher instance. */ - (void)pusher:(PTPusher *)pusher connectionDidDisconnect:(PTPusherConnection *)connection __PUSHER_DEPRECATED__; +/** Notifies the delegate that the PTPusher instance has disconnected from the Pusher service. + + @deprecated Use pusher:connection:didDisconnectWithError:willAttemptReconnect: + @param pusher The PTPusher instance that has connected. + @param connection The connection for the pusher instance. + @param error If the connection disconnected abnormally, error will be non-nil. + */ +- (void)pusher:(PTPusher *)pusher connection:(PTPusherConnection *)connection didDisconnectWithError:(NSError *)error __PUSHER_DEPRECATED__; + /** Notifies the delegate that the PTPusher instance has disconnected from the Pusher service. Clients should check the value of the willAttemptReconnect parameter before trying to reconnect manually. From 8bf423fc1cb16692c95656dc87f288e4ab11986e Mon Sep 17 00:00:00 2001 From: Martyn Loughran Date: Thu, 7 Nov 2013 00:23:51 +0000 Subject: [PATCH 18/88] Should reconnect after delay for unknown errors Otherwise libPusher will not reconnect automatically after a whole range of errors --- Library/PTPusher.m | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Library/PTPusher.m b/Library/PTPusher.m index 6d09e23b..19b225e7 100644 --- a/Library/PTPusher.m +++ b/Library/PTPusher.m @@ -323,7 +323,8 @@ - (void)pusherConnection:(PTPusherConnection *)connection didDisconnectWithCode: } } else { - [self handleDisconnection:connection error:error willReconnect:NO]; + [self handleDisconnection:connection error:error willReconnect:YES]; + [self reconnectAfterDelay:self.reconnectDelay]; } } From 68d71684a1c199957bee212ca7aed40c288734c1 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Sun, 24 Nov 2013 14:30:15 +0000 Subject: [PATCH 19/88] Log deprecation notices when calling deprecated delegate methods. This is because deprecated delegate method usage will not be detected by the compiler because clients do not call delegate methods, they just define them. Closes #120. --- Library/PTPusher.m | 2 ++ Library/PTPusherChannel.m | 1 + 2 files changed, 3 insertions(+) diff --git a/Library/PTPusher.m b/Library/PTPusher.m index 19b225e7..4bdb2cec 100644 --- a/Library/PTPusher.m +++ b/Library/PTPusher.m @@ -370,6 +370,7 @@ - (void)handleDisconnection:(PTPusherConnection *)connection error:(NSError *)er if ([self.delegate respondsToSelector:@selector(pusher:connectionDidDisconnect:)]) { // deprecated call #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" + NSLog(@"pusher:connectionDidDisconnect: is deprecated and will be removed in 1.6. Use pusher:connection:didDisconnectWithError:willAttemptReconnect: instead."); [self.delegate pusher:self connectionDidDisconnect:connection]; #pragma clang diagnostic pop } @@ -377,6 +378,7 @@ - (void)handleDisconnection:(PTPusherConnection *)connection error:(NSError *)er if ([self.delegate respondsToSelector:@selector(pusher:connection:didDisconnectWithError:)]) { // deprecated call #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" + NSLog(@"pusher:connectionDidDisconnectWithError: is deprecated and will be removed in 1.6. Use pusher:connection:didDisconnectWithError:willAttemptReconnect: instead."); [self.delegate pusher:self connection:connection didDisconnectWithError:error]; #pragma clang diagnostic pop } diff --git a/Library/PTPusherChannel.m b/Library/PTPusherChannel.m index 1e4e9a96..45b0e8c2 100644 --- a/Library/PTPusherChannel.m +++ b/Library/PTPusherChannel.m @@ -243,6 +243,7 @@ - (void)authorizeWithCompletionHandler:(void(^)(BOOL, NSDictionary *, NSError *) #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" + NSLog(@"willAuthorizeChannelWithRequest: is deprecated and will be removed in 1.6. Use pusher:willAuthorizeChannel:withRequest: instead."); if ([pusher.delegate respondsToSelector:@selector(pusher:willAuthorizeChannelWithRequest:)]) { // deprecated call [pusher.delegate pusher:pusher willAuthorizeChannelWithRequest:authOperation.mutableURLRequest]; } From 35bc0605b59878f770dcb572a06fa72cb8551629 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Mon, 25 Nov 2013 10:52:47 +0000 Subject: [PATCH 20/88] Refactor presence channel membership handling, taking a similar approach to the JavaScript client. --- Library/PTPusherChannel.h | 64 +++++-- Library/PTPusherChannel.m | 200 +++++++++++++++++++--- Library/PTPusherPresenceChannelDelegate.h | 49 ++++-- Unit Tests/PTPusherMockConnectionSpec.m | 2 +- Unit Tests/PTPusherPresenceChannelSpec.m | 7 +- libPusher.xcodeproj/project.pbxproj | 2 + 6 files changed, 265 insertions(+), 59 deletions(-) diff --git a/Library/PTPusherChannel.h b/Library/PTPusherChannel.h index d8a381e3..1cdc06a7 100644 --- a/Library/PTPusherChannel.h +++ b/Library/PTPusherChannel.h @@ -10,7 +10,7 @@ #import "PTPusherEventPublisher.h" #import "PTEventListener.h" #import "PTPusherPresenceChannelDelegate.h" - +#import "PTPusherMacros.h" @class PTPusher; @class PTPusherEventDispatcher; @@ -136,6 +136,8 @@ @end +@class PTPusherChannelMembers; + /** A PTPusherPresenceChannel object represents a Pusher presence channel. Presence channels build on the security of Private channels and expose the additional feature @@ -150,10 +152,7 @@ @see PTPusherPresenceChannelDelegate */ -@interface PTPusherPresenceChannel : PTPusherPrivateChannel { - NSMutableDictionary *members; - NSMutableArray *memberIDs; // store these separately to preserve order -} +@interface PTPusherPresenceChannel : PTPusherPrivateChannel ///------------------------------------------------------------------------------------/ /// @name Properties @@ -170,23 +169,60 @@ @property (nonatomic, unsafe_unretained) id presenceDelegate; #endif -/** Returns the current list of channel members. - - Members are stored as a dictionary of dictionaries, keyed on the member's "user_id" field. - - @deprecated Use the methods below for accessing member data. +/** Returns the channel member list. */ -@property (nonatomic, readonly) NSDictionary *members; +@property (nonatomic, readonly) PTPusherChannelMembers *members; /** Returns a dictionary of member metadata (email, name etc.) for the given member ID. + * + * @deprecated Use the members object. */ -- (NSDictionary *)infoForMemberWithID:(NSString *)memberID; +- (NSDictionary *)infoForMemberWithID:(NSString *)memberID __PUSHER_DEPRECATED__; /** Returns an array of available member IDs + * + * @deprecated Use the members object. */ -- (NSArray *)memberIDs; +- (NSArray *)memberIDs __PUSHER_DEPRECATED__; /** Returns the number of members currently connected to this channel. + * + * @deprecated Use the members object. */ -- (NSInteger)memberCount; +- (NSInteger)memberCount __PUSHER_DEPRECATED__; +@end + +/** Represents a single member in a presence channel. + * + * Object subscripting can be used to access individual keys in a user's info dictionary. + * + */ +@interface PTPusherChannelMember : NSObject + +@property (nonatomic, readonly) NSString *userID; +@property (nonatomic, readonly) NSDictionary *userInfo; + +- (id)objectForKeyedSubscript:(id )key; + +@end + +/** Represents an unordered collection of members in a presence channel. + * + * Individual members are represented by instances of the class PTPusherChannelMember. + * + * This object supports subscripting for member access (where the user ID is the key). + * + * If you require an ordered list of members (e.g. to display in a table view) + * you should implement the presence delegate methods and maintain your own ordered list. + * + */ +@interface PTPusherChannelMembers : NSObject + +@property (nonatomic, readonly) NSInteger count; +@property (nonatomic, readonly) NSDictionary *me; + +- (PTPusherChannelMember *)memberWithID:(NSString *)userID; +- (void)enumerateObjectsUsingBlock:(void (^)(id obj, BOOL *stop))block; +- (id)objectForKeyedSubscript:(id )key; + @end diff --git a/Library/PTPusherChannel.m b/Library/PTPusherChannel.m index 45b0e8c2..8dd18230 100644 --- a/Library/PTPusherChannel.m +++ b/Library/PTPusherChannel.m @@ -14,6 +14,7 @@ #import "PTBlockEventListener.h" #import "PTPusherChannelAuthorizationOperation.h" #import "PTPusherErrors.h" +#import "PTJSON.h" @interface PTPusher () - (void)__unsubscribeFromChannel:(PTPusherChannel *)channel; @@ -293,17 +294,27 @@ - (void)triggerEventNamed:(NSString *)eventName data:(id)eventData #pragma mark - +@interface PTPusherChannelMembers () + +@property (nonatomic, copy) NSString *myID; + +- (void)reset; +- (void)handleSubscription:(NSDictionary *)subscriptionData; +- (PTPusherChannelMember *)handleMemberAdded:(NSDictionary *)memberData; +- (PTPusherChannelMember *)handleMemberRemoved:(NSDictionary *)memberData; + +@end + @implementation PTPusherPresenceChannel @synthesize presenceDelegate; -@synthesize members; +@synthesize members = _members; - (id)initWithName:(NSString *)channelName pusher:(PTPusher *)aPusher { if ((self = [super initWithName:channelName pusher:aPusher])) { - members = [[NSMutableDictionary alloc] init]; - memberIDs = [[NSMutableArray alloc] init]; - + _members = [[PTPusherChannelMembers alloc] init]; + /* Set up event handlers for pre-defined channel events. As above, use blocks as proxies to a weak channel reference to avoid retain cycles. */ @@ -330,13 +341,32 @@ - (id)initWithName:(NSString *)channelName pusher:(PTPusher *)aPusher return self; } +- (void)subscribeWithAuthorization:(NSDictionary *)authData +{ + [super subscribeWithAuthorization:authData]; + + NSDictionary *channelData = [[PTJSON JSONParser] objectFromJSONString:authData[@"channel_data"]]; + self.members.myID = channelData[@"user_id"]; +} + - (void)handleSubscribeEvent:(PTPusherEvent *)event { - NSDictionary *presenceData = [event.data objectForKey:@"presence"]; [super handleSubscribeEvent:event]; - [members setDictionary:[presenceData objectForKey:@"hash"]]; - [memberIDs setArray:[presenceData objectForKey:@"ids"]]; - [self.presenceDelegate presenceChannel:self didSubscribeWithMemberList:memberIDs]; + [self.members handleSubscription:event.data]; + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + if ([self.presenceDelegate respondsToSelector:@selector(presenceChannel:didSubscribeWithMemberList:)]) { // deprecated call + NSLog(@"presenceChannel:didSubscribeWithMemberList: is deprecated and will be removed in 1.6. Use presenceChannelDidSubscribe: instead."); + NSMutableArray *members = [NSMutableArray arrayWithCapacity:self.members.count]; + [self.members enumerateObjectsUsingBlock:^(id obj, BOOL *stop) { + [members addObject:obj]; + }]; + [self.presenceDelegate presenceChannel:self didSubscribeWithMemberList:members]; + } +#pragma clang diagnostic pop + + [self.presenceDelegate presenceChannelDidSubscribe:self]; } - (BOOL)isPresence @@ -346,38 +376,162 @@ - (BOOL)isPresence - (NSDictionary *)infoForMemberWithID:(NSString *)memberID { - return [members objectForKey:memberID]; + return self.members[memberID]; } - (NSArray *)memberIDs { - return [memberIDs copy]; + NSMutableArray *memberIDs = [NSMutableArray array]; + [self.members enumerateObjectsUsingBlock:^(PTPusherChannelMember *member, BOOL *stop) { + [memberIDs addObject:member.userID]; + }]; + return memberIDs; } - (NSInteger)memberCount { - return [memberIDs count]; + return self.members.count; } - (void)handleMemberAddedEvent:(PTPusherEvent *)event { - NSString *memberID = [event.data objectForKey:@"user_id"]; - NSDictionary *memberInfo = [event.data objectForKey:@"user_info"]; - if (memberInfo == nil) { - memberInfo = [NSDictionary dictionary]; + PTPusherChannelMember *member = [self.members handleMemberAdded:event.data]; + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + if ([self.presenceDelegate respondsToSelector:@selector(presenceChannel:memberAddedWithID:memberInfo:)]) { // deprecated call + NSLog(@"presenceChannel:memberAddedWithID:memberInfo: is deprecated and will be removed in 1.6. Use presenceChannel:memberAdded: instead."); + [self.presenceDelegate presenceChannel:self memberAddedWithID:member.userID memberInfo:member.userInfo]; } - [memberIDs addObject:memberID]; - [members setObject:memberInfo forKey:memberID]; - [self.presenceDelegate presenceChannel:self memberAddedWithID:memberID memberInfo:memberInfo]; +#pragma clang diagnostic pop + + [self.presenceDelegate presenceChannel:self memberAdded:member]; } - (void)handleMemberRemovedEvent:(PTPusherEvent *)event { - NSString *memberID = [event.data valueForKey:@"user_id"]; - NSInteger memberIndex = [memberIDs indexOfObject:memberID]; - [memberIDs removeObject:memberID]; - [members removeObjectForKey:memberID]; - [self.presenceDelegate presenceChannel:self memberRemovedWithID:memberID atIndex:memberIndex]; + PTPusherChannelMember *member = [self.members handleMemberRemoved:event.data]; + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + if ([self.presenceDelegate respondsToSelector:@selector(presenceChannel:memberRemovedWithID:atIndex:)]) { // deprecated call + NSLog(@"presenceChannel:memberRemovedWithID:atIndex: is deprecated and will be removed in 1.6. Use presenceChannel:memberRemoved: instead."); + // we just send an index of -1 here: I don't want to jump through hoops to support a deprecated API call + [self.presenceDelegate presenceChannel:self memberRemovedWithID:member.userID atIndex:-1]; + } +#pragma clang diagnostic pop + + [self.presenceDelegate presenceChannel:self memberRemoved:member]; +} + +@end + +#pragma mark - + +@implementation PTPusherChannelMember + +- (id)initWithUserID:(NSString *)userID userInfo:(NSDictionary *)userInfo +{ + if ((self = [super init])) { + _userID = [userID copy]; + _userInfo = [userInfo copy]; + } + return self; +} + +- (NSString *)description +{ + return [NSString stringWithFormat:@"", self.userID, self.userInfo]; +} + +- (id)objectForKeyedSubscript:(id )key +{ + return self.userInfo[key]; +} + +@end + +@implementation PTPusherChannelMembers { + NSMutableDictionary *_members; +} + +- (id)init +{ + self = [super init]; + if (self) { + _members = [[NSMutableDictionary alloc] init]; + } + return self; +} + +- (void)reset +{ + _members = [[NSMutableDictionary alloc] init]; + self.myID = nil; +} + +- (NSString *)description +{ + return [NSString stringWithFormat:@"", _members]; +} + +- (NSInteger)count +{ + return _members.count; +} + +- (id)objectForKeyedSubscript:(id )key +{ + return _members[key]; +} + +- (void)enumerateObjectsUsingBlock:(void (^)(id obj, BOOL *stop))block +{ + [_members enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + block(obj, stop); + }]; +} + + +- (PTPusherChannelMember *)me +{ + return self[self.myID]; +} + +- (PTPusherChannelMember *)memberWithID:(NSString *)userID +{ + return self[userID]; +} + +#pragma mark - Channel event handling + +- (void)handleSubscription:(NSDictionary *)subscriptionData +{ + NSDictionary *memberHash = subscriptionData[@"presence"][@"hash"]; + + [memberHash enumerateKeysAndObjectsUsingBlock:^(NSString *userID, NSDictionary *userInfo, BOOL *stop) { + PTPusherChannelMember *member = [[PTPusherChannelMember alloc] initWithUserID:userID userInfo:userInfo]; + _members[userID] = member; + }]; +} + +- (PTPusherChannelMember *)handleMemberAdded:(NSDictionary *)memberData +{ + PTPusherChannelMember *member = [self memberWithID:memberData[@"user_id"]]; + if (member == nil) { + member = [[PTPusherChannelMember alloc] initWithUserID:memberData[@"user_id"] userInfo:memberData[@"user_info"]]; + [_members setObject:member forKey:member.userID]; + } + return member; +} + +- (PTPusherChannelMember *)handleMemberRemoved:(NSDictionary *)memberData +{ + PTPusherChannelMember *member = [self memberWithID:memberData[@"user_id"]]; + if (member) { + [_members removeObjectForKey:member.userID]; + } + return member; } @end diff --git a/Library/PTPusherPresenceChannelDelegate.h b/Library/PTPusherPresenceChannelDelegate.h index f69005cd..e2452d10 100644 --- a/Library/PTPusherPresenceChannelDelegate.h +++ b/Library/PTPusherPresenceChannelDelegate.h @@ -7,7 +7,9 @@ // #import +#import "PTPusherMacros.h" +@class PTPusherChannelMember; @class PTPusherPresenceChannel; @protocol PTPusherPresenceChannelDelegate @@ -16,32 +18,45 @@ Whenever you subscribe to a presence channel, a list of current subscribers will be returned by Pusher. - The list will be an array of member IDs. Further metadata can be obtained by asking the channel object - for information about a particular member using `-[PTPusherChannel infoForMemberWithID:]`. + The members list can be accessed using the `members` property on the channel. + + @param channel The presence channel that was subscribed to. + */ +- (void)presenceChannelDidSubscribe:(PTPusherPresenceChannel *)channel; + +/** Notifies the delegate that a member has joined the channel. @param channel The presence channel that was subscribed to. - @param members The current members subscribed to the channel. + @param member The member that was removed. */ -- (void)presenceChannel:(PTPusherPresenceChannel *)channel didSubscribeWithMemberList:(NSArray *)members; -/** Notifies the delegate that a new member subscribed to the presence channel. +- (void)presenceChannel:(PTPusherPresenceChannel *)channel memberAdded:(PTPusherChannelMember *)member; + +/** Notifies the delegate that a member has left from the channel. - The member info can contain arbitrary user data returned by the authorization server. - @param channel The presence channel that was subscribed to. - @param memberID The ID for the new member. - @param memberInfo The custom user data for the new member. + @param member The member that was removed. */ -- (void)presenceChannel:(PTPusherPresenceChannel *)channel memberAddedWithID:(NSString *)memberID memberInfo:(NSDictionary *)memberInfo; +- (void)presenceChannel:(PTPusherPresenceChannel *)channel memberRemoved:(PTPusherChannelMember *)member; + +#pragma mark - Deprecated methods + +@optional + +/** Notifies the delegate that the presence channel subscribed successfully. + @deprecated Use presenceChannelDidSubscribe: and access the members property. + */ +- (void)presenceChannel:(PTPusherPresenceChannel *)channel didSubscribeWithMemberList:(NSArray *)members __PUSHER_DEPRECATED__; + +/** Notifies the delegate that a member has joined the channel. + @deprecated Use presenceChannel:memberAdded: + */ + +- (void)presenceChannel:(PTPusherPresenceChannel *)channel memberAddedWithID:(NSString *)memberID memberInfo:(NSDictionary *)memberInfo __PUSHER_DEPRECATED__; /** Notifies the delegate that a member subscribed to the presence channel has unsubscribed. - - The member data can contain arbitrary user data returned by the authorization server. - - @param channel The presence channel that was subscribed to. - @param memberID The ID of the member removed. - @param index The internal index of the member (depends on the order joined/left or returned in the server member list) + @deprecated Use presenceChannel:memberRemoved: */ -- (void)presenceChannel:(PTPusherPresenceChannel *)channel memberRemovedWithID:(NSString *)memberID atIndex:(NSInteger)index; +- (void)presenceChannel:(PTPusherPresenceChannel *)channel memberRemovedWithID:(NSString *)memberID atIndex:(NSInteger)index __PUSHER_DEPRECATED__; @end diff --git a/Unit Tests/PTPusherMockConnectionSpec.m b/Unit Tests/PTPusherMockConnectionSpec.m index 7b139b38..8c581953 100644 --- a/Unit Tests/PTPusherMockConnectionSpec.m +++ b/Unit Tests/PTPusherMockConnectionSpec.m @@ -48,7 +48,7 @@ it(@"simulates the correct response when subscribing to a private channel when auth bypass is enabled", ^{ [pusher enableChannelAuthorizationBypassMode]; [pusher connect]; - PTPusherChannel *channel = [pusher subscribeToPresenceChannelNamed:@"test-channel"]; + PTPusherChannel *channel = [pusher subscribeToPrivateChannelNamed:@"test-channel"]; [[theReturnValueOfBlock(^{ return theValue(channel.isSubscribed); }) shouldEventually] beTrue]; }); diff --git a/Unit Tests/PTPusherPresenceChannelSpec.m b/Unit Tests/PTPusherPresenceChannelSpec.m index 98bdecd7..c8b05e46 100644 --- a/Unit Tests/PTPusherPresenceChannelSpec.m +++ b/Unit Tests/PTPusherPresenceChannelSpec.m @@ -31,10 +31,9 @@ [channel dispatchEvent:event]; - [[theReturnValueOfBlock(^{ return theValue(channel.memberCount); }) shouldEventually] equal:[NSNumber numberWithInt:1]]; + [[theReturnValueOfBlock(^{ return theValue(channel.members.count); }) shouldEventually] equal:[NSNumber numberWithInt:1]]; - [[channel.memberIDs should] contain:@"123"]; - [[[[channel infoForMemberWithID:@"123"] objectForKey:@"name"] should] equal:@"Joe Bloggs"]; + [[[channel.members[@"123"] userInfo][@"name"] should] equal:@"Joe Bloggs"]; }); it(@"adds an empty dictionary for the member if it has no info", ^{ @@ -44,7 +43,7 @@ [channel dispatchEvent:event]; - [[[channel infoForMemberWithID:@"123"] shouldEventually] equal:[NSDictionary dictionary]]; + [[[channel.members[@"123"] userInfo] shouldEventually] equal:[NSDictionary dictionary]]; }); }); }); diff --git a/libPusher.xcodeproj/project.pbxproj b/libPusher.xcodeproj/project.pbxproj index c60896f3..1900ddb8 100755 --- a/libPusher.xcodeproj/project.pbxproj +++ b/libPusher.xcodeproj/project.pbxproj @@ -933,6 +933,7 @@ GCC_PREFIX_HEADER = libPusher_Prefix.pch; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; INFOPLIST_FILE = "libPusher-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; PRODUCT_NAME = SampleApp; SKIP_INSTALL = YES; }; @@ -950,6 +951,7 @@ GCC_PREFIX_HEADER = libPusher_Prefix.pch; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; INFOPLIST_FILE = "libPusher-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; PRODUCT_NAME = SampleApp; SKIP_INSTALL = YES; }; From 257096a3c28fb126b63f7892cab56f2d4da8b844 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Mon, 25 Nov 2013 11:19:25 +0000 Subject: [PATCH 21/88] Add some specs around presence channel subscription and member handling. --- Library/PTPusher.m | 8 +-- Library/PTPusherChannel.h | 1 + Library/PTPusherChannel.m | 2 +- Library/PTPusherChannel_Private.h | 16 +++++ Unit Tests/PTPusherPresenceChannelSpec.m | 81 ++++++++++++++++++------ libPusher.xcodeproj/project.pbxproj | 4 ++ 6 files changed, 83 insertions(+), 29 deletions(-) create mode 100644 Library/PTPusherChannel_Private.h diff --git a/Library/PTPusher.m b/Library/PTPusher.m index 4bdb2cec..e26706fa 100644 --- a/Library/PTPusher.m +++ b/Library/PTPusher.m @@ -15,6 +15,7 @@ #import "PTBlockEventListener.h" #import "PTPusherErrors.h" #import "PTPusherChannelAuthorizationOperation.h" +#import "PTPusherChannel_Private.h" #define kPUSHER_HOST @"ws.pusherapp.com" @@ -44,13 +45,6 @@ @interface PTPusher () @property (nonatomic, strong, readwrite) PTPusherConnection *connection; @end -@interface PTPusherChannel () -/* These methods should only be called internally */ -- (void)subscribeWithAuthorization:(NSDictionary *)authData; -- (void)unsubscribe; -- (void)markAsUnsubscribed; -@end - #pragma mark - @implementation PTPusher { diff --git a/Library/PTPusherChannel.h b/Library/PTPusherChannel.h index 1cdc06a7..57aa489c 100644 --- a/Library/PTPusherChannel.h +++ b/Library/PTPusherChannel.h @@ -219,6 +219,7 @@ @interface PTPusherChannelMembers : NSObject @property (nonatomic, readonly) NSInteger count; +@property (nonatomic, copy, readonly) NSString *myID; @property (nonatomic, readonly) NSDictionary *me; - (PTPusherChannelMember *)memberWithID:(NSString *)userID; diff --git a/Library/PTPusherChannel.m b/Library/PTPusherChannel.m index 8dd18230..ae1786e0 100644 --- a/Library/PTPusherChannel.m +++ b/Library/PTPusherChannel.m @@ -296,7 +296,7 @@ - (void)triggerEventNamed:(NSString *)eventName data:(id)eventData @interface PTPusherChannelMembers () -@property (nonatomic, copy) NSString *myID; +@property (nonatomic, copy, readwrite) NSString *myID; - (void)reset; - (void)handleSubscription:(NSDictionary *)subscriptionData; diff --git a/Library/PTPusherChannel_Private.h b/Library/PTPusherChannel_Private.h new file mode 100644 index 00000000..938fc50f --- /dev/null +++ b/Library/PTPusherChannel_Private.h @@ -0,0 +1,16 @@ +// +// PTPusherChannel_Private.h +// libPusher +// +// Created by Luke Redpath on 25/11/2013. +// +// + +/** + * These methods are for internal use only. + */ +@interface PTPusherChannel () +- (void)subscribeWithAuthorization:(NSDictionary *)authData; +- (void)unsubscribe; +- (void)handleDisconnect; +@end diff --git a/Unit Tests/PTPusherPresenceChannelSpec.m b/Unit Tests/PTPusherPresenceChannelSpec.m index c8b05e46..498fc9c8 100644 --- a/Unit Tests/PTPusherPresenceChannelSpec.m +++ b/Unit Tests/PTPusherPresenceChannelSpec.m @@ -8,7 +8,9 @@ #import "SpecHelper.h" #import "PTPusherChannel.h" +#import "PTPusherChannel_Private.h" #import "PTPusherEvent.h" +#import "PTJSON.h" SPEC_BEGIN(PTPusherPresenceChannelSpec) @@ -23,28 +25,65 @@ [[channel.members should] beEmpty]; }); - context(@"when a memberAdded event is received", ^{ - it(@"adds the member from the event to its members", ^{ - NSDictionary *eventData = [NSDictionary dictionaryWithObjectsAndKeys:@"123", @"user_id", [NSDictionary dictionaryWithObject:@"Joe Bloggs" forKey:@"name"], @"user_info", nil]; - - PTPusherEvent *event = [[PTPusherEvent alloc] initWithEventName:@"pusher_internal:member_added" channel:channel.name data:eventData]; - - [channel dispatchEvent:event]; - - [[theReturnValueOfBlock(^{ return theValue(channel.members.count); }) shouldEventually] equal:[NSNumber numberWithInt:1]]; + it(@"stores a reference to the subscriber's user ID on authorization", ^{ + NSDictionary *authData = @{@"channel_data": [[PTJSON JSONParser] JSONStringFromObject:@{@"user_id": @"12345"}]}; + [channel subscribeWithAuthorization:authData]; + [[channel.members.myID should] equal:@"12345"]; + }); + + it(@"updates the member list on subscribe", ^{ + NSDictionary *subscribeEventData = @{@"presence": @{ + @"count": @1, + @"hash": @{ + @"user-1": @{@"name": @"Joe"} + } + }}; - [[[channel.members[@"123"] userInfo][@"name"] should] equal:@"Joe Bloggs"]; - }); - - it(@"adds an empty dictionary for the member if it has no info", ^{ - NSDictionary *eventData = [NSDictionary dictionaryWithObjectsAndKeys:@"123", @"user_id", nil]; - - PTPusherEvent *event = [[PTPusherEvent alloc] initWithEventName:@"pusher_internal:member_added" channel:channel.name data:eventData]; - - [channel dispatchEvent:event]; - - [[[channel.members[@"123"] userInfo] shouldEventually] equal:[NSDictionary dictionary]]; - }); + PTPusherEvent *subscribeEvent = [[PTPusherEvent alloc] initWithEventName:@"pusher_internal:subscription_succeeded" channel:channel.name data:subscribeEventData]; + [channel dispatchEvent:subscribeEvent]; + + [[theReturnValueOfBlock(^{ return theValue(channel.members.count); }) shouldEventually] equal:@1]; + }); + + it(@"can return the subscribed member after authorising and subscribing", ^{ + NSDictionary *authData = @{@"channel_data": [[PTJSON JSONParser] JSONStringFromObject:@{@"user_id": @"user-1"}]}; + [channel subscribeWithAuthorization:authData]; + + NSDictionary *subscribeEventData = @{@"presence": @{ + @"count": @1, + @"hash": @{ + @"user-1": @{@"name": @"Joe"} + } + }}; + + PTPusherEvent *subscribeEvent = [[PTPusherEvent alloc] initWithEventName:@"pusher_internal:subscription_succeeded" channel:channel.name data:subscribeEventData]; + [channel dispatchEvent:subscribeEvent]; + + [[theReturnValueOfBlock(^{ return channel.members.me; }) shouldEventually] haveValue:@"user-1" forKey:@"userID"]; + }); + + it(@"handles member_added events", ^{ + NSDictionary *eventData = @{@"user_id": @"123", @"user_info": @{@"name": @"Joe Bloggs"}}; + + PTPusherEvent *event = [[PTPusherEvent alloc] initWithEventName:@"pusher_internal:member_added" channel:channel.name data:eventData]; + [channel dispatchEvent:event]; + + [[theReturnValueOfBlock(^{ return theValue(channel.members.count); }) shouldEventually] equal:@1]; + [[[channel.members[@"123"] userInfo][@"name"] should] equal:@"Joe Bloggs"]; + }); + + it(@"handles member_removed events", ^{ + PTPusherEvent *memberAddedEvent = [[PTPusherEvent alloc] initWithEventName:@"pusher_internal:member_added" channel:channel.name data:@{@"user_id": @"123", @"user_info": @{@"name": @"Joe Bloggs"}}]; + [channel dispatchEvent:memberAddedEvent]; + + [[theReturnValueOfBlock(^{ return theValue(channel.members.count); }) shouldEventually] equal:@1]; + + PTPusherEvent *memberRemovedEvent = [[PTPusherEvent alloc] initWithEventName:@"pusher_internal:member_removed" channel:channel.name data:@{@"user_id": @"123"}]; + [channel dispatchEvent:memberRemovedEvent]; + + [[theReturnValueOfBlock(^{ return theValue(channel.members.count); }) shouldEventually] equal:@0]; + + [[channel.members[@"123"] should] beNil]; }); }); diff --git a/libPusher.xcodeproj/project.pbxproj b/libPusher.xcodeproj/project.pbxproj index 1900ddb8..ae078cff 100755 --- a/libPusher.xcodeproj/project.pbxproj +++ b/libPusher.xcodeproj/project.pbxproj @@ -21,6 +21,7 @@ A317375F155D38C4007E4BBA /* PTPusher+Testing.h in Headers */ = {isa = PBXBuildFile; fileRef = A317375D155D38C4007E4BBA /* PTPusher+Testing.h */; settings = {ATTRIBUTES = (Public, ); }; }; A3173760155D38C4007E4BBA /* PTPusher+Testing.m in Sources */ = {isa = PBXBuildFile; fileRef = A317375E155D38C4007E4BBA /* PTPusher+Testing.m */; }; A3226317155D481C00A46067 /* PTPusherMockConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = A3173758155D2D21007E4BBA /* PTPusherMockConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A32EE793184364D800E3B072 /* PTPusherChannel_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A32EE792184364D800E3B072 /* PTPusherChannel_Private.h */; }; A3382DE31525C3F70025550D /* PTJSON.m in Sources */ = {isa = PBXBuildFile; fileRef = A30950121525C272008F695B /* PTJSON.m */; }; A3382DE41525C3FA0025550D /* PTJSON.h in Headers */ = {isa = PBXBuildFile; fileRef = A30950111525C272008F695B /* PTJSON.h */; settings = {ATTRIBUTES = (Public, ); }; }; A3382DF61525D06C0025550D /* JSONKit.h in Headers */ = {isa = PBXBuildFile; fileRef = A3382DEA1525D01B0025550D /* JSONKit.h */; }; @@ -147,6 +148,7 @@ A3173759155D2D21007E4BBA /* PTPusherMockConnection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PTPusherMockConnection.m; sourceTree = ""; }; A317375D155D38C4007E4BBA /* PTPusher+Testing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "PTPusher+Testing.h"; sourceTree = ""; }; A317375E155D38C4007E4BBA /* PTPusher+Testing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "PTPusher+Testing.m"; sourceTree = ""; }; + A32EE792184364D800E3B072 /* PTPusherChannel_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTPusherChannel_Private.h; sourceTree = ""; }; A3382DEA1525D01B0025550D /* JSONKit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JSONKit.h; path = Library/JSONKit.h; sourceTree = SOURCE_ROOT; }; A35281CE13F721A8000687C0 /* PTPusherConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTPusherConnection.h; sourceTree = ""; }; A35281CF13F721A8000687C0 /* PTPusherConnection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PTPusherConnection.m; sourceTree = ""; }; @@ -308,6 +310,7 @@ A35281CF13F721A8000687C0 /* PTPusherConnection.m */, A39E238613F7E3FD0083CAD7 /* PTPusherErrors.h */, A39E238A13F7E85C0083CAD7 /* PTPusherPresenceChannelDelegate.h */, + A32EE792184364D800E3B072 /* PTPusherChannel_Private.h */, ); path = Library; sourceTree = ""; @@ -532,6 +535,7 @@ A3D1D2C711580162009A12AD /* PTEventListener.h in Headers */, A3AC28B613F75530001C4808 /* PTURLRequestOperation.h in Headers */, A3AC28BF13F75BF1001C4808 /* PusherExampleMenuViewController.h in Headers */, + A32EE793184364D800E3B072 /* PTPusherChannel_Private.h in Headers */, A3AC28C313F76C51001C4808 /* PTPusherChannelAuthorizationOperation.h in Headers */, A3B2931F14D8D96900C6B79F /* PTPusherPresenceChannelDelegate.h in Headers */, A3CA666914D96814003E2F1E /* PTPusherChannel.h in Headers */, From bff19c8b6e0e6b8e28e8cb1cd8db9ffee5b719ab Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Mon, 25 Nov 2013 11:27:27 +0000 Subject: [PATCH 22/88] It is permissible to call unsubscribe on a channel that may have been marked as not subscribed (e.g. due to a disconnection). This is because an explicit unsubscribe marks the end of the lifecycle of that channel object: all bindings are removed and internal references to that object are discarded. I've added a comment that elaborates on this. --- Library/PTPusher.m | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/Library/PTPusher.m b/Library/PTPusher.m index e26706fa..2a15c03f 100644 --- a/Library/PTPusher.m +++ b/Library/PTPusher.m @@ -201,23 +201,39 @@ - (PTPusherChannel *)channelNamed:(NSString *)name return [channels objectForKey:name]; } +/* This is only called when a client explicitly unsubscribes from a channel + * by calling either [channel unsubscribe] or using the deprecated API + * [client unsubscribeFromChannel:]. + * + * This effectively ends the lifetime of a channel: the client will remove it + * from it's channels collection and all bindings will be removed. If no other + * code outside of libPusher has a strong reference to the channel, it will + * be deallocated. + * + * This is different to implicit unsubscribes (where the connection has been lost) + * where the channel will object will remain and be re-subscribed when connection + * is re-established. + * + * A pusher:unsubscribe event will only be sent if there is a connection, otherwise + * it's not necessary as the channel is already implicitly unsubscribed due to the + * disconnection. + */ - (void)__unsubscribeFromChannel:(PTPusherChannel *)channel { NSParameterAssert(channel != nil); - if (channel.isSubscribed == NO) return; + [channel removeAllBindings]; - [self sendEventNamed:@"pusher:unsubscribe" - data:[NSDictionary dictionaryWithObject:channel.name forKey:@"channel"]]; + if (self.connection.isConnected) { + [self sendEventNamed:@"pusher:unsubscribe" + data:[NSDictionary dictionaryWithObject:channel.name forKey:@"channel"]]; + } - [channel removeAllBindings]; - [channel markAsUnsubscribed]; + [channels removeObjectForKey:channel.name]; if ([self.delegate respondsToSelector:@selector(pusher:didUnsubscribeFromChannel:)]) { [self.delegate pusher:self didUnsubscribeFromChannel:channel]; } - - [channels removeObjectForKey:channel.name]; } - (void)unsubscribeFromChannel:(PTPusherChannel *)channel From b77e9910bc5f99d802bfc50b531a5912cce7eec3 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Mon, 25 Nov 2013 11:28:10 +0000 Subject: [PATCH 23/88] Renamed to handleDisconnect: as it signals the intent more clearly without leaking implementation details of *what* channels do on disconnect (i.e. they become implicitly unsubscribed). --- Library/PTPusher.m | 13 +++++++++---- Library/PTPusherChannel.m | 14 ++++++++++---- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/Library/PTPusher.m b/Library/PTPusher.m index 2a15c03f..e82d3265 100644 --- a/Library/PTPusher.m +++ b/Library/PTPusher.m @@ -259,6 +259,13 @@ - (void)subscribeToChannel:(PTPusherChannel *)channel }]; } +- (void)subscribeAll +{ + for (PTPusherChannel *channel in [channels allValues]) { + [self subscribeToChannel:channel]; + } +} + #pragma mark - Sending events - (void)sendEventNamed:(NSString *)name data:(id)data @@ -299,9 +306,7 @@ - (void)pusherConnectionDidConnect:(PTPusherConnection *)connection [self.delegate pusher:self connectionDidConnect:connection]; } - for (PTPusherChannel *channel in [channels allValues]) { - [self subscribeToChannel:channel]; - } + [self subscribeAll]; } - (void)pusherConnection:(PTPusherConnection *)connection didDisconnectWithCode:(NSInteger)errorCode reason:(NSString *)reason wasClean:(BOOL)wasClean @@ -374,7 +379,7 @@ - (void)handleDisconnection:(PTPusherConnection *)connection error:(NSError *)er [authorizationQueue cancelAllOperations]; for (PTPusherChannel *channel in [channels allValues]) { - [channel markAsUnsubscribed]; + [channel handleDisconnect]; } if ([self.delegate respondsToSelector:@selector(pusher:connectionDidDisconnect:)]) { // deprecated call diff --git a/Library/PTPusherChannel.m b/Library/PTPusherChannel.m index ae1786e0..80739cda 100644 --- a/Library/PTPusherChannel.m +++ b/Library/PTPusherChannel.m @@ -193,7 +193,7 @@ - (void)unsubscribe [pusher __unsubscribeFromChannel:self]; } -- (void)markAsUnsubscribed +- (void)handleDisconnect { self.subscribed = NO; } @@ -223,9 +223,9 @@ - (void)handleSubscribeEvent:(PTPusherEvent *)event [clientEventQueue setSuspended:NO]; } -- (void)markAsUnSubscribed +- (void)handleDisconnect { - [super markAsUnsubscribed]; + [super handleDisconnect]; [clientEventQueue setSuspended:YES]; } @@ -324,7 +324,6 @@ - (id)initWithName:(NSString *)channelName pusher:(PTPusher *)aPusher __unsafe_unretained PTPusherPresenceChannel *weakChannel = self; #endif - [internalBindings addObject: [self bindToEventNamed:@"pusher_internal:member_added" handleWithBlock:^(PTPusherEvent *event) { @@ -341,6 +340,12 @@ - (id)initWithName:(NSString *)channelName pusher:(PTPusher *)aPusher return self; } +- (void)handleDisconnect +{ + [super handleDisconnect]; + [self.members reset]; +} + - (void)subscribeWithAuthorization:(NSDictionary *)authData { [super subscribeWithAuthorization:authData]; @@ -352,6 +357,7 @@ - (void)subscribeWithAuthorization:(NSDictionary *)authData - (void)handleSubscribeEvent:(PTPusherEvent *)event { [super handleSubscribeEvent:event]; + [self.members handleSubscription:event.data]; #pragma clang diagnostic push From a03b32b2ca732470cbcbfb68fe252a50394bf0f9 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Mon, 25 Nov 2013 11:28:27 +0000 Subject: [PATCH 24/88] Expose the URL of a connection as a read-only property. --- Library/PTPusherConnection.h | 1 + Library/PTPusherConnection.m | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/Library/PTPusherConnection.h b/Library/PTPusherConnection.h index 06b3eece..570777e0 100644 --- a/Library/PTPusherConnection.h +++ b/Library/PTPusherConnection.h @@ -41,6 +41,7 @@ typedef enum { #endif @property (nonatomic, readonly, getter=isConnected) BOOL connected; @property (nonatomic, copy, readonly) NSString *socketID; +@property (nonatomic, readonly) NSURL *URL; /* If the connection does not receive any new data within the time specified, * a ping event will be sent. diff --git a/Library/PTPusherConnection.m b/Library/PTPusherConnection.m index 26472ce7..9372693d 100644 --- a/Library/PTPusherConnection.m +++ b/Library/PTPusherConnection.m @@ -66,6 +66,11 @@ - (BOOL)isConnected return (self.state == PTPusherConnectionConnected); } +- (NSURL *)URL +{ + return request.URL; +} + #pragma mark - Connection management - (void)connect; From 880127837dd4ddc29b75ec87dbe3f3da2bb5a66a Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Mon, 25 Nov 2013 11:28:45 +0000 Subject: [PATCH 25/88] Update presence demo, removing broken buttons and using new delegate API. --- .../PusherPresenceEventsViewController.m | 77 +++++++++++++------ 1 file changed, 54 insertions(+), 23 deletions(-) diff --git a/Sample/Classes/PusherPresenceEventsViewController.m b/Sample/Classes/PusherPresenceEventsViewController.m index 2a2fb7eb..6a665b34 100644 --- a/Sample/Classes/PusherPresenceEventsViewController.m +++ b/Sample/Classes/PusherPresenceEventsViewController.m @@ -18,6 +18,9 @@ #import "PusherEventsAppDelegate.h" @interface PusherPresenceEventsViewController () +@property (nonatomic, strong) UIBarButtonItem *joinButtonItem; +@property (nonatomic, strong) UIBarButtonItem *leaveButtonItem; +@property (nonatomic, strong) NSMutableArray *members; @end @implementation PusherPresenceEventsViewController @@ -31,31 +34,48 @@ - (void)viewDidLoad self.title = @"Presence"; self.tableView.rowHeight = 55; + self.members = [NSMutableArray array]; - UIBarButtonItem *newClientButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Add Client" style:UIBarButtonItemStyleBordered target:self action:@selector(connectClient)]; - UIBarButtonItem *disconnectClientButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Remove Client" style:UIBarButtonItemStyleBordered target:self action:@selector(disconnectLastClient)]; - self.toolbarItems = [NSArray arrayWithObjects:newClientButtonItem, disconnectClientButtonItem, nil]; + self.joinButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Join" + style:UIBarButtonItemStyleBordered + target:self + action:@selector(joinChannel:)]; + + self.leaveButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Leave" + style:UIBarButtonItemStyleBordered + target:self + action:@selector(leaveChannel:)]; + + self.navigationItem.rightBarButtonItem = self.joinButtonItem; // configure the auth URL for private/presence channels self.pusher.authorizationURL = [NSURL URLWithString:@"http://localhost:9292/presence/auth"]; } -- (void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - [self subscribeToPresenceChannel:@"demo"]; -} - - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; if ([self.currentChannel isSubscribed]) { - // unsubscribe before we go back to the main menu [self.currentChannel unsubscribe]; } } +- (void)joinChannel:(id)sender +{ + [self subscribeToPresenceChannel:@"demo"]; +} + +- (void)leaveChannel:(id)sender +{ + [self.currentChannel unsubscribe]; + self.currentChannel = nil; + + self.navigationItem.rightBarButtonItem = self.joinButtonItem; + + [self.members removeAllObjects]; + [self.tableView reloadData]; +} #pragma mark - Subscribing @@ -66,28 +86,40 @@ - (void)subscribeToPresenceChannel:(NSString *)channelName #pragma mark - Presence channel events -- (void)presenceChannel:(PTPusherPresenceChannel *)channel didSubscribeWithMemberList:(NSArray *)members +- (void)presenceChannelDidSubscribe:(PTPusherPresenceChannel *)channel { - NSLog(@"[pusher] Channel members: %@", members); + NSLog(@"[pusher] Channel members: %@", channel.members); + + self.navigationItem.rightBarButtonItem = self.leaveButtonItem; + + [channel.members enumerateObjectsUsingBlock:^(id obj, BOOL *stop) { + [self.members addObject:obj]; + }]; + [self.tableView reloadData]; } -- (void)presenceChannel:(PTPusherPresenceChannel *)channel memberAddedWithID:(NSString *)memberID memberInfo:(NSDictionary *)memberInfo +- (void)presenceChannel:(PTPusherPresenceChannel *)channel memberAdded:(PTPusherChannelMember *)member { - NSLog(@"[pusher] Member joined channel: %@", memberInfo); + NSLog(@"[pusher] Member joined channel: %@", member); + + [self.members addObject:member]; [self.tableView beginUpdates]; - [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:[channel.memberIDs indexOfObject:memberID] inSection:0]] + [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:self.members.count-1 inSection:0]] withRowAnimation:UITableViewRowAnimationTop]; [self.tableView endUpdates]; } -- (void)presenceChannel:(PTPusherPresenceChannel *)channel memberRemovedWithID:(NSString *)memberID atIndex:(NSInteger)index +- (void)presenceChannel:(PTPusherPresenceChannel *)channel memberRemoved:(PTPusherChannelMember *)member { - NSLog(@"[pusher] Member left channel: %@", memberID); + NSLog(@"[pusher] Member left channel: %@", member); + + NSInteger memberIndex = [self.members indexOfObject:member]; + [self.members removeObject:member]; [self.tableView beginUpdates]; - [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:index inSection:0]] + [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:memberIndex inSection:0]] withRowAnimation:UITableViewRowAnimationTop]; [self.tableView endUpdates]; } @@ -96,7 +128,7 @@ - (void)presenceChannel:(PTPusherPresenceChannel *)channel memberRemovedWithID:( - (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section; { - return self.currentChannel.memberCount; + return self.currentChannel.members.count; } static NSString *EventCellIdentifier = @"EventCell"; @@ -107,11 +139,10 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:EventCellIdentifier]; } - NSString *memberID = [self.currentChannel.memberIDs objectAtIndex:indexPath.row]; - NSDictionary *memberInfo = [self.currentChannel infoForMemberWithID:memberID]; + PTPusherChannelMember *member = self.members[indexPath.row]; - cell.textLabel.text = [NSString stringWithFormat:@"Member: %@", memberID]; - cell.detailTextLabel.text = [NSString stringWithFormat:@"Name: %@ Email: %@", [memberInfo objectForKey:@"name"], [memberInfo objectForKey:@"email"]]; + cell.textLabel.text = [NSString stringWithFormat:@"Member: %@", member.userID]; + cell.detailTextLabel.text = [NSString stringWithFormat:@"Name: %@ Email: %@", member.userInfo[@"name"], member.userInfo[@"email"]]; return cell; } From ad80e16a3149de75d1f219c84411bf276a28e468 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Mon, 25 Nov 2013 11:29:07 +0000 Subject: [PATCH 26/88] The demo should start a reachability check on disconnect too. --- Sample/Classes/PusherEventsAppDelegate.m | 59 ++++++++++++++---------- 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/Sample/Classes/PusherEventsAppDelegate.m b/Sample/Classes/PusherEventsAppDelegate.m index 98518b99..f7e335eb 100644 --- a/Sample/Classes/PusherEventsAppDelegate.m +++ b/Sample/Classes/PusherEventsAppDelegate.m @@ -53,6 +53,35 @@ - (void)handlePusherEvent:(NSNotification *)note #endif } +#pragma mark - Reachability + +- (void)startReachabilityCheck +{ + // we probably have no internet connection, so lets check with Reachability + Reachability *reachability = [Reachability reachabilityWithHostname:self.pusherClient.connection.URL.host]; + + if ([reachability isReachable]) { + // we appear to have a connection, so something else must have gone wrong + NSLog(@"Internet reachable, is Pusher down?"); + } + else { + NSLog(@"Waiting for reachability"); + + [reachability setReachableBlock:^(Reachability *reachability) { + if ([reachability isReachable]) { + NSLog(@"Internet is now reachable"); + [reachability stopNotifier]; + + dispatch_async(dispatch_get_main_queue(), ^{ + [self.pusherClient connect]; + }); + } + }]; + + [reachability startNotifier]; + } +} + #pragma mark - PTPusherDelegate methods - (BOOL)pusher:(PTPusher *)pusher connectionWillConnect:(PTPusherConnection *)connection @@ -69,31 +98,8 @@ - (void)pusher:(PTPusher *)pusher connectionDidConnect:(PTPusherConnection *)con - (void)pusher:(PTPusher *)pusher connection:(PTPusherConnection *)connection failedWithError:(NSError *)error { NSLog(@"[pusher] Pusher Connection failed with error: %@", error); - if ([error.domain isEqualToString:(NSString *)kCFErrorDomainCFNetwork]) { - // we probably have no internet connection, so lets check with Reachability - Reachability *reachability = [Reachability reachabilityForInternetConnection]; - - if ([reachability isReachable]) { - // we appear to have a connection, so something else must have gone wrong - NSLog(@"Internet reachable, is Pusher down?"); - } - else { - NSLog(@"Waiting for reachability"); - - [reachability setReachableBlock:^(Reachability *reachability) { - if ([reachability isReachable]) { - NSLog(@"Internet is now reachable"); - [reachability stopNotifier]; - - dispatch_async(dispatch_get_main_queue(), ^{ - [pusher connect]; - }); - } - }]; - - [reachability startNotifier]; - } + [self startReachabilityCheck]; } } @@ -105,6 +111,11 @@ - (void)pusher:(PTPusher *)pusher connection:(PTPusherConnection *)connection di if (willAttemptReconnect) { NSLog(@"[pusher-%@] Client will attempt to reconnect automatically", pusher.connection.socketID); } + else { + if ([error.domain isEqualToString:NSPOSIXErrorDomain]) { + [self startReachabilityCheck]; + } + } } - (BOOL)pusher:(PTPusher *)pusher connectionWillAutomaticallyReconnect:(PTPusherConnection *)connection afterDelay:(NSTimeInterval)delay From 463fcdaf226cb3ba6c65105b312662d8b8e7c48b Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Mon, 25 Nov 2013 11:45:25 +0000 Subject: [PATCH 27/88] Replace assertion with silent return. Client's should generally not be calling this method directly anyway. --- Library/PTPusherConnection.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Library/PTPusherConnection.m b/Library/PTPusherConnection.m index 9372693d..ff57316f 100644 --- a/Library/PTPusherConnection.m +++ b/Library/PTPusherConnection.m @@ -102,7 +102,7 @@ - (void)disconnect; - (void)send:(id)object { - NSAssert(self.isConnected, @"Cannot send data unless connected."); + if (self.isConnected == NO) return; NSData *JSONData = [[PTJSON JSONParser] JSONDataFromObject:object]; NSString *message = [[NSString alloc] initWithData:JSONData encoding:NSUTF8StringEncoding]; From 006939b75636dddf811f26349024708fc162ceb9 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Mon, 25 Nov 2013 11:46:06 +0000 Subject: [PATCH 28/88] Log a warning about sending events when disconnected and do not even attempt to send them (will no longer crash anyway due to removal of assertion but logging is useful). --- Library/PTPusher.m | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Library/PTPusher.m b/Library/PTPusher.m index e82d3265..03c1d33b 100644 --- a/Library/PTPusher.m +++ b/Library/PTPusher.m @@ -277,6 +277,11 @@ - (void)sendEventNamed:(NSString *)name data:(id)data channel:(NSString *)channe { NSParameterAssert(name); + if (self.connection.isConnected == NO) { + NSLog(@"Warning: attempting to send event while disconnected. Event will not be sent."); + return; + } + NSMutableDictionary *payload = [NSMutableDictionary dictionary]; [payload setObject:name forKey:PTPusherEventKey]; From c20eeec40ea0ecd9c9d2b5ff13f5a8c23893f0cd Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Mon, 25 Nov 2013 14:08:39 +0000 Subject: [PATCH 29/88] Do not send disconnection/failure delegate methods until we've fully cleaned up. This fixes a horrible race condition where the delegate call is made (e.g. didDisconnect), and in response an attempt to reconnect is made, which creates a new socket, and *then* we set the socket to nil, resulting the socket being lost. This probably explains a number of mysterious connectivity issues that have been reported. --- Library/PTPusherConnection.m | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/Library/PTPusherConnection.m b/Library/PTPusherConnection.m index ff57316f..b4c181e2 100644 --- a/Library/PTPusherConnection.m +++ b/Library/PTPusherConnection.m @@ -53,7 +53,7 @@ - (id)initWithURL:(NSURL *)aURL return self; } -- (void)dealloc +- (void)dealloc { [self.pingTimer invalidate]; [self.pongTimer invalidate]; @@ -76,7 +76,7 @@ - (NSURL *)URL - (void)connect; { if (self.state >= PTPusherConnectionConnecting) return; - + BOOL shouldConnect = [self.delegate pusherConnectionWillConnect:self]; if (!shouldConnect) return; @@ -120,21 +120,25 @@ - (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error; { [self.pingTimer invalidate]; [self.pongTimer invalidate]; + BOOL wasConnected = self.isConnected; self.state = PTPusherConnectionDisconnected; - [self.delegate pusherConnection:self didFailWithError:error wasConnected:wasConnected]; self.socketID = nil; socket = nil; + + [self.delegate pusherConnection:self didFailWithError:error wasConnected:wasConnected]; } - (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean { [self.pingTimer invalidate]; [self.pongTimer invalidate]; + self.state = PTPusherConnectionDisconnected; - [self.delegate pusherConnection:self didDisconnectWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean]; self.socketID = nil; socket = nil; + + [self.delegate pusherConnection:self didDisconnectWithCode:(NSInteger)code reason:(NSString *)reason wasClean:wasClean]; } - (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(NSString *)message @@ -143,7 +147,7 @@ - (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(NSString *)message NSDictionary *messageDictionary = [[PTJSON JSONParser] objectFromJSONString:message]; PTPusherEvent *event = [PTPusherEvent eventFromMessageDictionary:messageDictionary]; - + if ([event.name isEqualToString:PTPusherConnectionPongEvent]) { #ifdef DEBUG NSLog(@"[pusher] Server responded to ping (pong!)"); From a28c6832bb3c0fa1586c41ab61e7f87e37a5c032 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Mon, 25 Nov 2013 17:16:21 +0000 Subject: [PATCH 30/88] Move reconnection into the handleDisconnect: method. --- Library/PTPusher.m | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/Library/PTPusher.m b/Library/PTPusher.m index 03c1d33b..df4218be 100644 --- a/Library/PTPusher.m +++ b/Library/PTPusher.m @@ -54,7 +54,7 @@ @implementation PTPusher { @synthesize connection = _connection; @synthesize delegate; @synthesize reconnectAutomatically; -@synthesize reconnectDelay; +@synthesize reconnectDelay = _reconnectDelay; @synthesize authorizationURL; - (id)initWithConnection:(PTPusherConnection *)connection connectAutomatically:(BOOL)connectAutomatically @@ -328,30 +328,27 @@ - (void)pusherConnection:(PTPusherConnection *)connection didDisconnectWithCode: // 4000-4099 -> The connection SHOULD NOT be re-established unchanged. if (errorCode >= 4000 && errorCode <= 4099) { - [self handleDisconnection:connection error:error willReconnect:NO]; + [self handleDisconnection:connection error:error willReconnect:NO reconnectDelay:0]; } else // 4200-4299 -> The connection SHOULD be re-established immediately. if(errorCode >= 4200 && errorCode <= 4299) { - [self handleDisconnection:connection error:error willReconnect:YES]; - [self reconnectAfterDelay:0]; + [self handleDisconnection:connection error:error willReconnect:YES reconnectDelay:0]; } else { // i.e. 4100-4199 -> The connection SHOULD be re-established after backing off. - [self handleDisconnection:connection error:error willReconnect:YES]; - [self reconnectAfterDelay:self.reconnectDelay]; + [self handleDisconnection:connection error:error willReconnect:YES reconnectDelay:self.reconnectDelay]; } } else { - [self handleDisconnection:connection error:error willReconnect:YES]; - [self reconnectAfterDelay:self.reconnectDelay]; + [self handleDisconnection:connection error:error willReconnect:YES reconnectDelay:self.reconnectDelay]; } } - (void)pusherConnection:(PTPusherConnection *)connection didFailWithError:(NSError *)error wasConnected:(BOOL)wasConnected { if (wasConnected) { - [self handleDisconnection:connection error:error willReconnect:NO]; + [self handleDisconnection:connection error:error willReconnect:NO reconnectDelay:0]; } else { if ([self.delegate respondsToSelector:@selector(pusher:connection:failedWithError:)]) { @@ -379,7 +376,7 @@ - (void)pusherConnection:(PTPusherConnection *)connection didReceiveEvent:(PTPus userInfo:[NSDictionary dictionaryWithObject:event forKey:PTPusherEventUserInfoKey]]; } -- (void)handleDisconnection:(PTPusherConnection *)connection error:(NSError *)error willReconnect:(BOOL)willReconnect +- (void)handleDisconnection:(PTPusherConnection *)connection error:(NSError *)error willReconnect:(BOOL)willReconnect reconnectDelay:(NSTimeInterval)reconnectDelay { [authorizationQueue cancelAllOperations]; @@ -406,6 +403,10 @@ - (void)handleDisconnection:(PTPusherConnection *)connection error:(NSError *)er if ([self.delegate respondsToSelector:@selector(pusher:connection:didDisconnectWithError:willAttemptReconnect:)]) { [self.delegate pusher:self connection:connection didDisconnectWithError:error willAttemptReconnect:willReconnect]; } + + if (willReconnect) { + [self reconnectAfterDelay:reconnectDelay]; + } } #pragma mark - Private @@ -415,7 +416,7 @@ - (void)beginAuthorizationOperation:(PTPusherChannelAuthorizationOperation *)ope [authorizationQueue addOperation:operation]; } -- (void)reconnectAfterDelay:(NSUInteger)delay +- (void)reconnectAfterDelay:(NSTimeInterval)delay { if ([self.delegate respondsToSelector:@selector(pusher:connectionWillAutomaticallyReconnect:afterDelay:)]) { BOOL shouldProceed = [self.delegate pusher:self connectionWillAutomaticallyReconnect:_connection afterDelay:delay]; From 2886a56acd5e74c8840ac2dd73c8272b5c778523 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Mon, 25 Nov 2013 18:14:13 +0000 Subject: [PATCH 31/88] Only reconnect if the number of reconnect attempts doesn't exceed a specified limit. --- Library/PTPusher.m | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/Library/PTPusher.m b/Library/PTPusher.m index df4218be..32a45bf6 100644 --- a/Library/PTPusher.m +++ b/Library/PTPusher.m @@ -49,6 +49,8 @@ @interface PTPusher () @implementation PTPusher { NSOperationQueue *authorizationQueue; + NSUInteger _numberOfReconnectAttempts; + NSUInteger _maximumNumberOfReconnectAttempts; } @synthesize connection = _connection; @@ -80,6 +82,18 @@ - (id)initWithConnection:(PTPusherConnection *)connection self.connection = connection; self.connection.delegate = self; self.reconnectDelay = kPTPusherDefaultReconnectDelay; + + /* Three reconnection attempts should be more than enough attempts + * to reconnect where the user has simply locked their device or + * backgrounded the app. + * + * If there is no internet connection, we don't want to retry too + * many times. + * + * We may consider making this user-customisable in future but not + * for now. + */ + _maximumNumberOfReconnectAttempts = 3; } return self; } @@ -307,6 +321,8 @@ - (BOOL)pusherConnectionWillConnect:(PTPusherConnection *)connection - (void)pusherConnectionDidConnect:(PTPusherConnection *)connection { + _numberOfReconnectAttempts = 0; + if ([self.delegate respondsToSelector:@selector(pusher:connectionDidConnect:)]) { [self.delegate pusher:self connectionDidConnect:connection]; } @@ -328,27 +344,27 @@ - (void)pusherConnection:(PTPusherConnection *)connection didDisconnectWithCode: // 4000-4099 -> The connection SHOULD NOT be re-established unchanged. if (errorCode >= 4000 && errorCode <= 4099) { - [self handleDisconnection:connection error:error willReconnect:NO reconnectDelay:0]; + [self handleDisconnection:connection error:error shouldReconnect:NO reconnectDelay:0]; } else // 4200-4299 -> The connection SHOULD be re-established immediately. if(errorCode >= 4200 && errorCode <= 4299) { - [self handleDisconnection:connection error:error willReconnect:YES reconnectDelay:0]; + [self handleDisconnection:connection error:error shouldReconnect:YES reconnectDelay:0]; } else { // i.e. 4100-4199 -> The connection SHOULD be re-established after backing off. - [self handleDisconnection:connection error:error willReconnect:YES reconnectDelay:self.reconnectDelay]; + [self handleDisconnection:connection error:error shouldReconnect:YES reconnectDelay:self.reconnectDelay]; } } else { - [self handleDisconnection:connection error:error willReconnect:YES reconnectDelay:self.reconnectDelay]; + [self handleDisconnection:connection error:error shouldReconnect:YES reconnectDelay:self.reconnectDelay]; } } - (void)pusherConnection:(PTPusherConnection *)connection didFailWithError:(NSError *)error wasConnected:(BOOL)wasConnected { if (wasConnected) { - [self handleDisconnection:connection error:error willReconnect:NO reconnectDelay:0]; + [self handleDisconnection:connection error:error shouldReconnect:NO reconnectDelay:0]; } else { if ([self.delegate respondsToSelector:@selector(pusher:connection:failedWithError:)]) { @@ -376,7 +392,7 @@ - (void)pusherConnection:(PTPusherConnection *)connection didReceiveEvent:(PTPus userInfo:[NSDictionary dictionaryWithObject:event forKey:PTPusherEventUserInfoKey]]; } -- (void)handleDisconnection:(PTPusherConnection *)connection error:(NSError *)error willReconnect:(BOOL)willReconnect reconnectDelay:(NSTimeInterval)reconnectDelay +- (void)handleDisconnection:(PTPusherConnection *)connection error:(NSError *)error shouldReconnect:(BOOL)shouldReconnect reconnectDelay:(NSTimeInterval)reconnectDelay { [authorizationQueue cancelAllOperations]; @@ -399,6 +415,12 @@ - (void)handleDisconnection:(PTPusherConnection *)connection error:(NSError *)er [self.delegate pusher:self connection:connection didDisconnectWithError:error]; #pragma clang diagnostic pop } + + BOOL willReconnect = NO; + + if (shouldReconnect && _numberOfReconnectAttempts < _maximumNumberOfReconnectAttempts) { + willReconnect = YES; + } if ([self.delegate respondsToSelector:@selector(pusher:connection:didDisconnectWithError:willAttemptReconnect:)]) { [self.delegate pusher:self connection:connection didDisconnectWithError:error willAttemptReconnect:willReconnect]; @@ -427,6 +449,8 @@ - (void)reconnectAfterDelay:(NSTimeInterval)delay dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delay * NSEC_PER_SEC); dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ [_connection connect]; + + _numberOfReconnectAttempts++; }); } From 32b65b9304b20a258ae3d76ccd5d9d0130f9fa55 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Mon, 25 Nov 2013 18:15:13 +0000 Subject: [PATCH 32/88] A manual call to connect should reset the reconnect attempts counter. --- Library/PTPusher.m | 1 + 1 file changed, 1 insertion(+) diff --git a/Library/PTPusher.m b/Library/PTPusher.m index 32a45bf6..498bf71f 100644 --- a/Library/PTPusher.m +++ b/Library/PTPusher.m @@ -142,6 +142,7 @@ - (void)dealloc; - (void)connect { + _numberOfReconnectAttempts = 0; [self.connection connect]; } From 6dd4fa7d6aacc314f3519eff7b153ca31bcf86ed Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Mon, 25 Nov 2013 18:21:01 +0000 Subject: [PATCH 33/88] We can now safely auto-reconnect if the connection fails whilst connected. This makes it easier for clients as this can happen whenever the app goes into the background or the device is locked. In the cases where there is no internet connectivity, we will still end up retrying at least once but this will fail and as we were not previously connected at the point of the second failure, we will no longer continue trying to reconnect. We are further protected from infinite retries due to our internal retry limit. --- Library/PTPusher.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Library/PTPusher.m b/Library/PTPusher.m index 498bf71f..b13687e5 100644 --- a/Library/PTPusher.m +++ b/Library/PTPusher.m @@ -365,7 +365,7 @@ - (void)pusherConnection:(PTPusherConnection *)connection didDisconnectWithCode: - (void)pusherConnection:(PTPusherConnection *)connection didFailWithError:(NSError *)error wasConnected:(BOOL)wasConnected { if (wasConnected) { - [self handleDisconnection:connection error:error shouldReconnect:NO reconnectDelay:0]; + [self handleDisconnection:connection error:error shouldReconnect:YES reconnectDelay:self.reconnectDelay]; } else { if ([self.delegate respondsToSelector:@selector(pusher:connection:failedWithError:)]) { From 79a77985ff34d05b6cb98bf5bcb630093feb98fc Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Mon, 25 Nov 2013 18:21:40 +0000 Subject: [PATCH 34/88] Always attempt to reconnect if we have reachability. Ideally we would also implement our own retry limit but for the sake of the sample app I've omitted this. --- Sample/Classes/PusherEventsAppDelegate.m | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Sample/Classes/PusherEventsAppDelegate.m b/Sample/Classes/PusherEventsAppDelegate.m index f7e335eb..2407593b 100644 --- a/Sample/Classes/PusherEventsAppDelegate.m +++ b/Sample/Classes/PusherEventsAppDelegate.m @@ -62,7 +62,8 @@ - (void)startReachabilityCheck if ([reachability isReachable]) { // we appear to have a connection, so something else must have gone wrong - NSLog(@"Internet reachable, is Pusher down?"); + NSLog(@"Internet reachable, reconnecting"); + [_pusherClient connect]; } else { NSLog(@"Waiting for reachability"); From ccfdf93e123e57b35c48bcd573353674fff8073a Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Mon, 25 Nov 2013 18:22:00 +0000 Subject: [PATCH 35/88] Always perform reachability checks on disconnection *unless* we've disconnected due to a pusher error. --- Sample/Classes/PusherEventsAppDelegate.m | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Sample/Classes/PusherEventsAppDelegate.m b/Sample/Classes/PusherEventsAppDelegate.m index 2407593b..33188d44 100644 --- a/Sample/Classes/PusherEventsAppDelegate.m +++ b/Sample/Classes/PusherEventsAppDelegate.m @@ -104,7 +104,6 @@ - (void)pusher:(PTPusher *)pusher connection:(PTPusherConnection *)connection fa } } - - (void)pusher:(PTPusher *)pusher connection:(PTPusherConnection *)connection didDisconnectWithError:(NSError *)error willAttemptReconnect:(BOOL)willAttemptReconnect { NSLog(@"[pusher-%@] Pusher Connection disconnected with error: %@", pusher.connection.socketID, error); @@ -113,7 +112,7 @@ - (void)pusher:(PTPusher *)pusher connection:(PTPusherConnection *)connection di NSLog(@"[pusher-%@] Client will attempt to reconnect automatically", pusher.connection.socketID); } else { - if ([error.domain isEqualToString:NSPOSIXErrorDomain]) { + if (![error.domain isEqualToString:PTPusherErrorDomain]) { [self startReachabilityCheck]; } } From 0e0196a0b372e2a3575e75b033829f1a9be6fcfc Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Mon, 25 Nov 2013 18:27:55 +0000 Subject: [PATCH 36/88] Made this comment more accurate --- Library/PTPusher.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Library/PTPusher.m b/Library/PTPusher.m index b13687e5..d7dbcee5 100644 --- a/Library/PTPusher.m +++ b/Library/PTPusher.m @@ -87,8 +87,8 @@ - (id)initWithConnection:(PTPusherConnection *)connection * to reconnect where the user has simply locked their device or * backgrounded the app. * - * If there is no internet connection, we don't want to retry too - * many times. + * If there is no internet connection, we will only end up retrying + * once as after the first failure we will no longer auto-retry. * * We may consider making this user-customisable in future but not * for now. From 6c8c7bb48c3eb4ee5a6168f4f60c8f6464360339 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Mon, 25 Nov 2013 18:36:36 +0000 Subject: [PATCH 37/88] Introduce back-off delay mode for 4100-4199 errors. Used this as an opportunity to refactor the reconnection parameters - faced with adding some kind of "back off" flag, coupled with the fact that you still had to pass a reconnect delay when you weren't going to reconnect, using an enum to describe the reconnection "mode" seemed much nicer. The back-off mode is linear, we just multiply the configured delay by the number of the attempt, which should more than suffice. --- Library/PTPusher.m | 44 +++++++++++++++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/Library/PTPusher.m b/Library/PTPusher.m index d7dbcee5..cbcd6dd6 100644 --- a/Library/PTPusher.m +++ b/Library/PTPusher.m @@ -19,6 +19,13 @@ #define kPUSHER_HOST @"ws.pusherapp.com" +typedef NS_ENUM(NSUInteger, PTPusherAutoReconnectMode) { + PTPusherAutoReconnectModeNoReconnect, + PTPusherAutoReconnectModeReconnectImmediately, + PTPusherAutoReconnectModeReconnectWithConfiguredDelay, + PTPusherAutoReconnectModeReconnectWithBackoffDelay +}; + NSURL *PTPusherConnectionURL(NSString *host, NSString *key, NSString *clientID, BOOL secure); NSString *const PTPusherEventReceivedNotification = @"PTPusherEventReceivedNotification"; @@ -345,27 +352,27 @@ - (void)pusherConnection:(PTPusherConnection *)connection didDisconnectWithCode: // 4000-4099 -> The connection SHOULD NOT be re-established unchanged. if (errorCode >= 4000 && errorCode <= 4099) { - [self handleDisconnection:connection error:error shouldReconnect:NO reconnectDelay:0]; + [self handleDisconnection:connection error:error reconnectMode:PTPusherAutoReconnectModeNoReconnect]; } else // 4200-4299 -> The connection SHOULD be re-established immediately. if(errorCode >= 4200 && errorCode <= 4299) { - [self handleDisconnection:connection error:error shouldReconnect:YES reconnectDelay:0]; + [self handleDisconnection:connection error:error reconnectMode:PTPusherAutoReconnectModeReconnectImmediately]; } else { // i.e. 4100-4199 -> The connection SHOULD be re-established after backing off. - [self handleDisconnection:connection error:error shouldReconnect:YES reconnectDelay:self.reconnectDelay]; + [self handleDisconnection:connection error:error reconnectMode:PTPusherAutoReconnectModeReconnectWithBackoffDelay]; } } else { - [self handleDisconnection:connection error:error shouldReconnect:YES reconnectDelay:self.reconnectDelay]; + [self handleDisconnection:connection error:error reconnectMode:PTPusherAutoReconnectModeReconnectWithConfiguredDelay]; } } - (void)pusherConnection:(PTPusherConnection *)connection didFailWithError:(NSError *)error wasConnected:(BOOL)wasConnected { if (wasConnected) { - [self handleDisconnection:connection error:error shouldReconnect:YES reconnectDelay:self.reconnectDelay]; + [self handleDisconnection:connection error:error reconnectMode:PTPusherAutoReconnectModeReconnectWithConfiguredDelay]; } else { if ([self.delegate respondsToSelector:@selector(pusher:connection:failedWithError:)]) { @@ -393,7 +400,7 @@ - (void)pusherConnection:(PTPusherConnection *)connection didReceiveEvent:(PTPus userInfo:[NSDictionary dictionaryWithObject:event forKey:PTPusherEventUserInfoKey]]; } -- (void)handleDisconnection:(PTPusherConnection *)connection error:(NSError *)error shouldReconnect:(BOOL)shouldReconnect reconnectDelay:(NSTimeInterval)reconnectDelay +- (void)handleDisconnection:(PTPusherConnection *)connection error:(NSError *)error reconnectMode:(PTPusherAutoReconnectMode)reconnectMode { [authorizationQueue cancelAllOperations]; @@ -419,7 +426,7 @@ - (void)handleDisconnection:(PTPusherConnection *)connection error:(NSError *)er BOOL willReconnect = NO; - if (shouldReconnect && _numberOfReconnectAttempts < _maximumNumberOfReconnectAttempts) { + if (reconnectMode > PTPusherAutoReconnectModeNoReconnect && _numberOfReconnectAttempts < _maximumNumberOfReconnectAttempts) { willReconnect = YES; } @@ -428,7 +435,7 @@ - (void)handleDisconnection:(PTPusherConnection *)connection error:(NSError *)er } if (willReconnect) { - [self reconnectAfterDelay:reconnectDelay]; + [self reconnectUsingMode:reconnectMode]; } } @@ -439,8 +446,25 @@ - (void)beginAuthorizationOperation:(PTPusherChannelAuthorizationOperation *)ope [authorizationQueue addOperation:operation]; } -- (void)reconnectAfterDelay:(NSTimeInterval)delay +- (void)reconnectUsingMode:(PTPusherAutoReconnectMode)reconnectMode { + _numberOfReconnectAttempts++; + + NSTimeInterval delay; + + switch (reconnectMode) { + case PTPusherAutoReconnectModeReconnectImmediately: + delay = 0; + break; + case PTPusherAutoReconnectModeReconnectWithConfiguredDelay: + delay = self.reconnectDelay; + break; + case PTPusherAutoReconnectModeReconnectWithBackoffDelay: + delay = self.reconnectDelay * _numberOfReconnectAttempts; + default: + break; + } + if ([self.delegate respondsToSelector:@selector(pusher:connectionWillAutomaticallyReconnect:afterDelay:)]) { BOOL shouldProceed = [self.delegate pusher:self connectionWillAutomaticallyReconnect:_connection afterDelay:delay]; @@ -450,8 +474,6 @@ - (void)reconnectAfterDelay:(NSTimeInterval)delay dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delay * NSEC_PER_SEC); dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ [_connection connect]; - - _numberOfReconnectAttempts++; }); } From a354d8d7d75a01c50ee65bda716f960f6863c333 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Mon, 25 Nov 2013 18:38:08 +0000 Subject: [PATCH 38/88] Switch missing default --- Library/PTPusher.m | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Library/PTPusher.m b/Library/PTPusher.m index cbcd6dd6..a2231995 100644 --- a/Library/PTPusher.m +++ b/Library/PTPusher.m @@ -461,7 +461,9 @@ - (void)reconnectUsingMode:(PTPusherAutoReconnectMode)reconnectMode break; case PTPusherAutoReconnectModeReconnectWithBackoffDelay: delay = self.reconnectDelay * _numberOfReconnectAttempts; + break; default: + delay = 0; break; } From 488b03de6a6fd2d78d63c5bacff264e7e149dad1 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Mon, 25 Nov 2013 18:43:14 +0000 Subject: [PATCH 39/88] Add explaining comment to reduce the chance of me breaking this. --- Library/PTPusherConnection.m | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Library/PTPusherConnection.m b/Library/PTPusherConnection.m index b4c181e2..c20d04d7 100644 --- a/Library/PTPusherConnection.m +++ b/Library/PTPusherConnection.m @@ -126,6 +126,7 @@ - (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error; self.socketID = nil; socket = nil; + // we always call this last, to prevent a race condition if the delegate calls 'connect' [self.delegate pusherConnection:self didFailWithError:error wasConnected:wasConnected]; } @@ -138,6 +139,7 @@ - (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reas self.socketID = nil; socket = nil; + // we always call this last, to prevent a race condition if the delegate calls 'connect' [self.delegate pusherConnection:self didDisconnectWithCode:(NSInteger)code reason:(NSString *)reason wasClean:wasClean]; } From 9881ffffc48300557d82296961d9f0017c5014d7 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Mon, 25 Nov 2013 18:53:09 +0000 Subject: [PATCH 40/88] Trying to get the library building again on TravisCI using xctool --- .travis.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 570a2364..90d10f9e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,5 @@ language: objective-c -before_install: sudo gem update --system && bundle install --without scripts -script: bundle exec rake debug:cleanbuild +before_install: + - brew update + - brew install xctool +script: xctool -workspace libPusher.xcworkspace -scheme libPusher build From a38a73984a884b21662fce9b3a99a8d67fb4f7c8 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Mon, 25 Nov 2013 19:02:11 +0000 Subject: [PATCH 41/88] It turns out that Travis CI supports xctool natively. Let's try that. Leaving the blank install: phase as I do not want pod install to run. --- .travis.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 90d10f9e..fdb0141f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ language: objective-c -before_install: - - brew update - - brew install xctool -script: xctool -workspace libPusher.xcworkspace -scheme libPusher build +xcode_workspace: libPusher.xcworkspace +xcode_scheme: libPusher +install: + \ No newline at end of file From a76c509dfb31d94b7f2194e941adbc54ee2fd94e Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Mon, 25 Nov 2013 19:05:24 +0000 Subject: [PATCH 42/88] This should prevent pod install --- .travis.yml | 2 +- Rakefile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index fdb0141f..5136192c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ language: objective-c xcode_workspace: libPusher.xcworkspace xcode_scheme: libPusher -install: +install: true \ No newline at end of file diff --git a/Rakefile b/Rakefile index 49e7e2f0..a5992c07 100644 --- a/Rakefile +++ b/Rakefile @@ -233,7 +233,7 @@ namespace :test do desc "Run unit tests" task :run => 'xcode:cleanbuild' do - sh "bundle exec ios-sim-test logic --workspace=libPusher.xcworkspace --scheme=UnitTests" + sh "bundle exec ios-sim-test logic --workspace=libPusher.xcworkspace --scheme=UnitTests --configuration=Debug" end end From 21c2d8ca6b0f0e62612038bbca97e5a874ad531a Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Mon, 25 Nov 2013 19:10:52 +0000 Subject: [PATCH 43/88] Just build for simulator for now, due to Kiwi issues --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 5136192c..9dcf7ffa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ language: objective-c xcode_workspace: libPusher.xcworkspace xcode_scheme: libPusher +xcode_sdk: iphonesimulator install: true - \ No newline at end of file From 3b86d353e80038bfaae6600031fbe4b09dab70b1 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Mon, 25 Nov 2013 19:16:54 +0000 Subject: [PATCH 44/88] Make sure the OSX sample app connects --- libPusher-OSX/PusherSampleOSX/LRAppDelegate.m | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libPusher-OSX/PusherSampleOSX/LRAppDelegate.m b/libPusher-OSX/PusherSampleOSX/LRAppDelegate.m index 7f1f9696..ab16d308 100644 --- a/libPusher-OSX/PusherSampleOSX/LRAppDelegate.m +++ b/libPusher-OSX/PusherSampleOSX/LRAppDelegate.m @@ -24,13 +24,15 @@ @implementation LRAppDelegate - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { _events = [[NSMutableArray alloc] init]; + + self.pusher = [PTPusher pusherWithKey:PUSHER_API_KEY delegate:self encrypted:NO]; } - (IBAction)connect:(id)sender { [sender setEnabled:NO]; - self.pusher = [PTPusher pusherWithKey:PUSHER_API_KEY delegate:self encrypted:NO]; + [self.pusher connect]; PTPusherChannel *channel = [self.pusher subscribeToChannelNamed:@"messages"]; From ea08cf47b1e58602f176c95919e328e4adef29a3 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Mon, 25 Nov 2013 19:21:56 +0000 Subject: [PATCH 45/88] Remove the OSX sample app as it's useless. I'm going to start a new one in a separate project. --- libPusher-OSX/PusherSampleOSX/LRAppDelegate.h | 24 - libPusher-OSX/PusherSampleOSX/LRAppDelegate.m | 65 - .../PusherSampleOSX-Info.plist | 34 - .../PusherSampleOSX-Prefix.pch | 7 - .../PusherSampleOSX/en.lproj/Credits.rtf | 29 - .../en.lproj/InfoPlist.strings | 2 - .../PusherSampleOSX/en.lproj/MainMenu.xib | 4170 ----------------- libPusher-OSX/PusherSampleOSX/main.m | 14 - .../libPusher-OSX.xcodeproj/project.pbxproj | 146 - .../xcschemes/Sample App (OSX).xcscheme | 86 - .../xcshareddata/xcschemes/UnitTests.xcscheme | 69 - 11 files changed, 4646 deletions(-) delete mode 100644 libPusher-OSX/PusherSampleOSX/LRAppDelegate.h delete mode 100644 libPusher-OSX/PusherSampleOSX/LRAppDelegate.m delete mode 100644 libPusher-OSX/PusherSampleOSX/PusherSampleOSX-Info.plist delete mode 100644 libPusher-OSX/PusherSampleOSX/PusherSampleOSX-Prefix.pch delete mode 100644 libPusher-OSX/PusherSampleOSX/en.lproj/Credits.rtf delete mode 100644 libPusher-OSX/PusherSampleOSX/en.lproj/InfoPlist.strings delete mode 100644 libPusher-OSX/PusherSampleOSX/en.lproj/MainMenu.xib delete mode 100644 libPusher-OSX/PusherSampleOSX/main.m delete mode 100644 libPusher-OSX/libPusher-OSX.xcodeproj/xcshareddata/xcschemes/Sample App (OSX).xcscheme delete mode 100644 libPusher.xcodeproj/xcshareddata/xcschemes/UnitTests.xcscheme diff --git a/libPusher-OSX/PusherSampleOSX/LRAppDelegate.h b/libPusher-OSX/PusherSampleOSX/LRAppDelegate.h deleted file mode 100644 index 29fc36f6..00000000 --- a/libPusher-OSX/PusherSampleOSX/LRAppDelegate.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// LRAppDelegate.h -// PusherSampleOSX -// -// Created by Luke Redpath on 05/02/2012. -// Copyright (c) 2012 LJR Software Limited. All rights reserved. -// - -#import -#import - -@class PTPusher; - -@interface LRAppDelegate : NSObject - -@property (assign) IBOutlet NSWindow *window; -@property (weak) IBOutlet NSTableView *eventsTableView; -@property (weak) IBOutlet NSArrayController *eventsController; -@property (weak) IBOutlet NSTextField *connectionStatus; - -@property (nonatomic, strong) NSMutableArray *events; -@property (nonatomic, strong) PTPusher *pusher; - -@end diff --git a/libPusher-OSX/PusherSampleOSX/LRAppDelegate.m b/libPusher-OSX/PusherSampleOSX/LRAppDelegate.m deleted file mode 100644 index ab16d308..00000000 --- a/libPusher-OSX/PusherSampleOSX/LRAppDelegate.m +++ /dev/null @@ -1,65 +0,0 @@ -// -// LRAppDelegate.m -// PusherSampleOSX -// -// Created by Luke Redpath on 05/02/2012. -// Copyright (c) 2012 LJR Software Limited. All rights reserved. -// - -#import "LRAppDelegate.h" -#import "Constants.h" -#import -#import -#import - -@implementation LRAppDelegate - -@synthesize window = _window; -@synthesize eventsTableView = _eventsTableView; -@synthesize events = _events; -@synthesize eventsController = _eventsController; -@synthesize connectionStatus = _connectionStatus; -@synthesize pusher; - -- (void)applicationDidFinishLaunching:(NSNotification *)aNotification -{ - _events = [[NSMutableArray alloc] init]; - - self.pusher = [PTPusher pusherWithKey:PUSHER_API_KEY delegate:self encrypted:NO]; -} - -- (IBAction)connect:(id)sender -{ - [sender setEnabled:NO]; - - [self.pusher connect]; - - PTPusherChannel *channel = [self.pusher subscribeToChannelNamed:@"messages"]; - - [[NSNotificationCenter defaultCenter] addObserverForName:PTPusherEventReceivedNotification object:channel queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) { - - [self.eventsController addObject:[note.userInfo objectForKey:PTPusherEventUserInfoKey]]; - }]; -} - -#pragma mark - PTPusherEventDelegate methods - -- (void)pusher:(PTPusher *)pusher connectionDidConnect:(PTPusherConnection *)connection -{ - NSLog(@"Connected!"); - [self.connectionStatus setStringValue:@"Connected."]; -} - -- (void)pusher:(PTPusher *)pusher connectionDidDisconnect:(PTPusherConnection *)connection -{ - NSLog(@"Disconnected!"); - [self.connectionStatus setStringValue:@"Disconnected."]; -} - -- (void)pusher:(PTPusher *)pusher connection:(PTPusherConnection *)connection failedWithError:(NSError *)error -{ - NSLog(@"Connection Failed! %@", error); - [self.connectionStatus setStringValue:[NSString stringWithFormat:@"Connection Failed (%@)", [error localizedDescription]]]; -} - -@end diff --git a/libPusher-OSX/PusherSampleOSX/PusherSampleOSX-Info.plist b/libPusher-OSX/PusherSampleOSX/PusherSampleOSX-Info.plist deleted file mode 100644 index 98e3ccbd..00000000 --- a/libPusher-OSX/PusherSampleOSX/PusherSampleOSX-Info.plist +++ /dev/null @@ -1,34 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIconFile - - CFBundleIdentifier - co.uk.lukeredpath.${PRODUCT_NAME:rfc1034identifier} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSMinimumSystemVersion - ${MACOSX_DEPLOYMENT_TARGET} - NSHumanReadableCopyright - Copyright © 2012 LJR Software Limited. All rights reserved. - NSMainNibFile - MainMenu - NSPrincipalClass - NSApplication - - diff --git a/libPusher-OSX/PusherSampleOSX/PusherSampleOSX-Prefix.pch b/libPusher-OSX/PusherSampleOSX/PusherSampleOSX-Prefix.pch deleted file mode 100644 index 175fa7f8..00000000 --- a/libPusher-OSX/PusherSampleOSX/PusherSampleOSX-Prefix.pch +++ /dev/null @@ -1,7 +0,0 @@ -// -// Prefix header for all source files of the 'PusherSampleOSX' target in the 'PusherSampleOSX' project -// - -#ifdef __OBJC__ - #import -#endif diff --git a/libPusher-OSX/PusherSampleOSX/en.lproj/Credits.rtf b/libPusher-OSX/PusherSampleOSX/en.lproj/Credits.rtf deleted file mode 100644 index 46576ef2..00000000 --- a/libPusher-OSX/PusherSampleOSX/en.lproj/Credits.rtf +++ /dev/null @@ -1,29 +0,0 @@ -{\rtf0\ansi{\fonttbl\f0\fswiss Helvetica;} -{\colortbl;\red255\green255\blue255;} -\paperw9840\paperh8400 -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural - -\f0\b\fs24 \cf0 Engineering: -\b0 \ - Some people\ -\ - -\b Human Interface Design: -\b0 \ - Some other people\ -\ - -\b Testing: -\b0 \ - Hopefully not nobody\ -\ - -\b Documentation: -\b0 \ - Whoever\ -\ - -\b With special thanks to: -\b0 \ - Mom\ -} diff --git a/libPusher-OSX/PusherSampleOSX/en.lproj/InfoPlist.strings b/libPusher-OSX/PusherSampleOSX/en.lproj/InfoPlist.strings deleted file mode 100644 index 477b28ff..00000000 --- a/libPusher-OSX/PusherSampleOSX/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/libPusher-OSX/PusherSampleOSX/en.lproj/MainMenu.xib b/libPusher-OSX/PusherSampleOSX/en.lproj/MainMenu.xib deleted file mode 100644 index a98f423d..00000000 --- a/libPusher-OSX/PusherSampleOSX/en.lproj/MainMenu.xib +++ /dev/null @@ -1,4170 +0,0 @@ - - - - 1070 - 11C73 - 1938 - 1138.23 - 567.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 1938 - - - NSUserDefaultsController - NSScroller - NSTableHeaderView - NSMenuItem - NSMenu - NSScrollView - NSTextFieldCell - NSButton - NSButtonCell - NSArrayController - NSTableView - NSTableCellView - NSDateFormatter - NSCustomObject - NSView - NSWindowTemplate - NSTextField - NSTableColumn - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - NSApplication - - - FirstResponder - - - NSApplication - - - AMainMenu - - - - Pusher Debug Console - - 1048576 - 2147483647 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - submenuAction: - - Pusher Debug Console - - - - About PusherSampleOSX - - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Preferences… - , - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Services - - 1048576 - 2147483647 - - - submenuAction: - - Services - - _NSServicesMenu - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Hide PusherSampleOSX - h - 1048576 - 2147483647 - - - - - - Hide Others - h - 1572864 - 2147483647 - - - - - - Show All - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Quit PusherSampleOSX - q - 1048576 - 2147483647 - - - - - _NSAppleMenu - - - - - File - - 1048576 - 2147483647 - - - submenuAction: - - File - - - - New - n - 1048576 - 2147483647 - - - - - - Open… - o - 1048576 - 2147483647 - - - - - - Open Recent - - 1048576 - 2147483647 - - - submenuAction: - - Open Recent - - - - Clear Menu - - 1048576 - 2147483647 - - - - - _NSRecentDocumentsMenu - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Close - w - 1048576 - 2147483647 - - - - - - Save… - s - 1048576 - 2147483647 - - - - - - Revert to Saved - - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Page Setup... - P - 1179648 - 2147483647 - - - - - - - Print… - p - 1048576 - 2147483647 - - - - - - - - - Edit - - 1048576 - 2147483647 - - - submenuAction: - - Edit - - - - Undo - z - 1048576 - 2147483647 - - - - - - Redo - Z - 1179648 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Cut - x - 1048576 - 2147483647 - - - - - - Copy - c - 1048576 - 2147483647 - - - - - - Paste - v - 1048576 - 2147483647 - - - - - - Paste and Match Style - V - 1572864 - 2147483647 - - - - - - Delete - - 1048576 - 2147483647 - - - - - - Select All - a - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Find - - 1048576 - 2147483647 - - - submenuAction: - - Find - - - - Find… - f - 1048576 - 2147483647 - - - 1 - - - - Find and Replace… - f - 1572864 - 2147483647 - - - 12 - - - - Find Next - g - 1048576 - 2147483647 - - - 2 - - - - Find Previous - G - 1179648 - 2147483647 - - - 3 - - - - Use Selection for Find - e - 1048576 - 2147483647 - - - 7 - - - - Jump to Selection - j - 1048576 - 2147483647 - - - - - - - - - Spelling and Grammar - - 1048576 - 2147483647 - - - submenuAction: - - Spelling and Grammar - - - - Show Spelling and Grammar - : - 1048576 - 2147483647 - - - - - - Check Document Now - ; - 1048576 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Check Spelling While Typing - - 1048576 - 2147483647 - - - - - - Check Grammar With Spelling - - 1048576 - 2147483647 - - - - - - Correct Spelling Automatically - - 2147483647 - - - - - - - - - Substitutions - - 1048576 - 2147483647 - - - submenuAction: - - Substitutions - - - - Show Substitutions - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Smart Copy/Paste - f - 1048576 - 2147483647 - - - 1 - - - - Smart Quotes - g - 1048576 - 2147483647 - - - 2 - - - - Smart Dashes - - 2147483647 - - - - - - Smart Links - G - 1179648 - 2147483647 - - - 3 - - - - Text Replacement - - 2147483647 - - - - - - - - - Transformations - - 2147483647 - - - submenuAction: - - Transformations - - - - Make Upper Case - - 2147483647 - - - - - - Make Lower Case - - 2147483647 - - - - - - Capitalize - - 2147483647 - - - - - - - - - Speech - - 1048576 - 2147483647 - - - submenuAction: - - Speech - - - - Start Speaking - - 1048576 - 2147483647 - - - - - - Stop Speaking - - 1048576 - 2147483647 - - - - - - - - - - - - Format - - 2147483647 - - - submenuAction: - - Format - - - - Font - - 2147483647 - - - submenuAction: - - Font - - - - Show Fonts - t - 1048576 - 2147483647 - - - - - - Bold - b - 1048576 - 2147483647 - - - 2 - - - - Italic - i - 1048576 - 2147483647 - - - 1 - - - - Underline - u - 1048576 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Bigger - + - 1048576 - 2147483647 - - - 3 - - - - Smaller - - - 1048576 - 2147483647 - - - 4 - - - - YES - YES - - - 2147483647 - - - - - - Kern - - 2147483647 - - - submenuAction: - - Kern - - - - Use Default - - 2147483647 - - - - - - Use None - - 2147483647 - - - - - - Tighten - - 2147483647 - - - - - - Loosen - - 2147483647 - - - - - - - - - Ligature - - 2147483647 - - - submenuAction: - - Ligature - - - - Use Default - - 2147483647 - - - - - - Use None - - 2147483647 - - - - - - Use All - - 2147483647 - - - - - - - - - Baseline - - 2147483647 - - - submenuAction: - - Baseline - - - - Use Default - - 2147483647 - - - - - - Superscript - - 2147483647 - - - - - - Subscript - - 2147483647 - - - - - - Raise - - 2147483647 - - - - - - Lower - - 2147483647 - - - - - - - - - YES - YES - - - 2147483647 - - - - - - Show Colors - C - 1048576 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Copy Style - c - 1572864 - 2147483647 - - - - - - Paste Style - v - 1572864 - 2147483647 - - - - - _NSFontMenu - - - - - Text - - 2147483647 - - - submenuAction: - - Text - - - - Align Left - { - 1048576 - 2147483647 - - - - - - Center - | - 1048576 - 2147483647 - - - - - - Justify - - 2147483647 - - - - - - Align Right - } - 1048576 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Writing Direction - - 2147483647 - - - submenuAction: - - Writing Direction - - - - YES - Paragraph - - 2147483647 - - - - - - CURlZmF1bHQ - - 2147483647 - - - - - - CUxlZnQgdG8gUmlnaHQ - - 2147483647 - - - - - - CVJpZ2h0IHRvIExlZnQ - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - YES - Selection - - 2147483647 - - - - - - CURlZmF1bHQ - - 2147483647 - - - - - - CUxlZnQgdG8gUmlnaHQ - - 2147483647 - - - - - - CVJpZ2h0IHRvIExlZnQ - - 2147483647 - - - - - - - - - YES - YES - - - 2147483647 - - - - - - Show Ruler - - 2147483647 - - - - - - Copy Ruler - c - 1310720 - 2147483647 - - - - - - Paste Ruler - v - 1310720 - 2147483647 - - - - - - - - - - - - View - - 1048576 - 2147483647 - - - submenuAction: - - View - - - - Show Toolbar - t - 1572864 - 2147483647 - - - - - - Customize Toolbar… - - 1048576 - 2147483647 - - - - - - - - - Window - - 1048576 - 2147483647 - - - submenuAction: - - Window - - - - Minimize - m - 1048576 - 2147483647 - - - - - - Zoom - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Bring All to Front - - 1048576 - 2147483647 - - - - - _NSWindowsMenu - - - - - Help - - 2147483647 - - - submenuAction: - - Help - - - - PusherSampleOSX Help - ? - 1048576 - 2147483647 - - - - - _NSHelpMenu - - - - _NSMainMenu - - - 15 - 2 - {{335, 390}, {687, 518}} - 1954021376 - Pusher Debug Console - NSWindow - - - - - 256 - - - - 4382 - - - - 2304 - - - - 256 - {645, 426} - - - - _NS:1828 - YES - - - 256 - {645, 17} - - - - - - - - -2147483392 - {{224, 0}, {16, 17}} - _NS:1833 - - - - timestamp - 126.42578125 - 40 - 1000 - - 75628096 - 2048 - Timestamp - - LucidaGrande - 11 - 3100 - - - 3 - MC4zMzMzMzI5ODU2AA - - - 6 - System - headerTextColor - - 3 - MAA - - - - - 337772096 - 2048 - Text Cell - - LucidaGrande - 13 - 1044 - - - - 6 - System - controlBackgroundColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - - - 3 - YES - - - - event - 137.421875 - 40 - 1000 - - 75628096 - 2048 - Event - - - - - - 337772096 - 2048 - Text Cell - - - - - - 3 - YES - - - - channel - 131 - 10 - 3.4028234663852886e+38 - - 75628096 - 2048 - Channel - - - 6 - System - headerColor - - 3 - MQA - - - - - - 337772096 - 2048 - Text Cell - - - - - - 3 - YES - - - - data - 239.2578125 - 10 - 3.4028234663852886e+38 - - 75628096 - 2048 - Event Data - - - - - - 337772096 - 2048 - Text Cell - - - - - - 3 - YES - - - - 3 - 2 - - - 6 - System - gridColor - - 3 - MC41AA - - - 17 - -700416000 - - - 1 - 15 - 0 - YES - 0 - 1 - - - {{1, 17}, {645, 426}} - - - - _NS:1826 - - - 4 - - - - -2147483392 - {{224, 17}, {15, 102}} - - - - _NS:1845 - - _doScroller: - 0.99765807962529274 - - - - -2147483392 - {{1, 428}, {645, 15}} - - - - _NS:1847 - 1 - - _doScroller: - 0.99383667180277346 - - - - 2304 - - - - {{1, 0}, {645, 17}} - - - - - - 4 - - - {{20, 54}, {647, 444}} - - - - _NS:1824 - 133682 - - - - - QSAAAEEgAABBmAAAQZgAAA - - - - 292 - {{17, 20}, {57, 17}} - - - - _NS:3944 - YES - - 68288064 - 272630784 - Status: - - LucidaGrande-Bold - 13 - 2072 - - _NS:3944 - - - 6 - System - controlColor - - - - - - - - 292 - {{70, 20}, {90, 17}} - - - - _NS:3944 - YES - - 68288064 - 272630784 - Disconnected - - _NS:3944 - - - - - - - - 289 - {{581, 9}, {92, 32}} - - - - _NS:687 - YES - - 67239424 - 134217728 - Connect - - _NS:687 - - -2038284033 - 129 - - - 200 - 25 - - - - {687, 518} - - - - - {{0, 0}, {1680, 1028}} - {10000000000000, 10000000000000} - YES - - - LRAppDelegate - - - NSFontManager - - - YES - - YES - YES - YES - YES - YES - - - YES - - - - - - - terminate: - - - - 449 - - - - orderFrontStandardAboutPanel: - - - - 142 - - - - delegate - - - - 495 - - - - performMiniaturize: - - - - 37 - - - - arrangeInFront: - - - - 39 - - - - print: - - - - 86 - - - - runPageLayout: - - - - 87 - - - - clearRecentDocuments: - - - - 127 - - - - performClose: - - - - 193 - - - - toggleContinuousSpellChecking: - - - - 222 - - - - undo: - - - - 223 - - - - copy: - - - - 224 - - - - checkSpelling: - - - - 225 - - - - paste: - - - - 226 - - - - stopSpeaking: - - - - 227 - - - - cut: - - - - 228 - - - - showGuessPanel: - - - - 230 - - - - redo: - - - - 231 - - - - selectAll: - - - - 232 - - - - startSpeaking: - - - - 233 - - - - delete: - - - - 235 - - - - performZoom: - - - - 240 - - - - performFindPanelAction: - - - - 241 - - - - centerSelectionInVisibleArea: - - - - 245 - - - - toggleGrammarChecking: - - - - 347 - - - - toggleSmartInsertDelete: - - - - 355 - - - - toggleAutomaticQuoteSubstitution: - - - - 356 - - - - toggleAutomaticLinkDetection: - - - - 357 - - - - saveDocument: - - - - 362 - - - - revertDocumentToSaved: - - - - 364 - - - - runToolbarCustomizationPalette: - - - - 365 - - - - toggleToolbarShown: - - - - 366 - - - - hide: - - - - 367 - - - - hideOtherApplications: - - - - 368 - - - - unhideAllApplications: - - - - 370 - - - - newDocument: - - - - 373 - - - - openDocument: - - - - 374 - - - - raiseBaseline: - - - - 426 - - - - lowerBaseline: - - - - 427 - - - - copyFont: - - - - 428 - - - - subscript: - - - - 429 - - - - superscript: - - - - 430 - - - - tightenKerning: - - - - 431 - - - - underline: - - - - 432 - - - - orderFrontColorPanel: - - - - 433 - - - - useAllLigatures: - - - - 434 - - - - loosenKerning: - - - - 435 - - - - pasteFont: - - - - 436 - - - - unscript: - - - - 437 - - - - useStandardKerning: - - - - 438 - - - - useStandardLigatures: - - - - 439 - - - - turnOffLigatures: - - - - 440 - - - - turnOffKerning: - - - - 441 - - - - toggleAutomaticSpellingCorrection: - - - - 456 - - - - orderFrontSubstitutionsPanel: - - - - 458 - - - - toggleAutomaticDashSubstitution: - - - - 461 - - - - toggleAutomaticTextReplacement: - - - - 463 - - - - uppercaseWord: - - - - 464 - - - - capitalizeWord: - - - - 467 - - - - lowercaseWord: - - - - 468 - - - - pasteAsPlainText: - - - - 486 - - - - performFindPanelAction: - - - - 487 - - - - performFindPanelAction: - - - - 488 - - - - performFindPanelAction: - - - - 489 - - - - showHelp: - - - - 493 - - - - alignCenter: - - - - 518 - - - - pasteRuler: - - - - 519 - - - - toggleRuler: - - - - 520 - - - - alignRight: - - - - 521 - - - - copyRuler: - - - - 522 - - - - alignJustified: - - - - 523 - - - - alignLeft: - - - - 524 - - - - makeBaseWritingDirectionNatural: - - - - 525 - - - - makeBaseWritingDirectionLeftToRight: - - - - 526 - - - - makeBaseWritingDirectionRightToLeft: - - - - 527 - - - - makeTextWritingDirectionNatural: - - - - 528 - - - - makeTextWritingDirectionLeftToRight: - - - - 529 - - - - makeTextWritingDirectionRightToLeft: - - - - 530 - - - - performFindPanelAction: - - - - 535 - - - - addFontTrait: - - - - 421 - - - - addFontTrait: - - - - 422 - - - - modifyFont: - - - - 423 - - - - orderFrontFontPanel: - - - - 424 - - - - modifyFont: - - - - 425 - - - - window - - - - 532 - - - - eventsTableView - - - - 556 - - - - eventsController - - - - 602 - - - - connect: - - - - 604 - - - - connectionStatus - - - - 605 - - - - content: arrangedObjects - - - - - - content: arrangedObjects - content - arrangedObjects - 2 - - - 587 - - - - textField - - - 274 - - - - 266 - {126, 17} - - - YES - - 67239488 - -1874851840 - Table View Cell - - - - - - - - HH:mm:ss - NO - - - - - - - - {{1, 1}, {126, 17}} - - - - - 560 - - - - value: objectValue.timeReceived - - - - - - value: objectValue.timeReceived - value - objectValue.timeReceived - 2 - - - 589 - - - - textField - - - 274 - - - - 266 - {137, 17} - - - YES - - 67239488 - 272631808 - Table View Cell - - - - - - - - {{130, 1}, {137, 17}} - - - - - 564 - - - - value: objectValue.name - - - - - - value: objectValue.name - value - objectValue.name - 2 - - - 597 - - - - textField - - - 274 - - - - 266 - {239, 17} - - - YES - - 67239488 - 272631808 - Table View Cell - - - - - - - - {{404, 1}, {239, 17}} - - - - - 568 - - - - value: objectValue.data - - - - - - value: objectValue.data - value - objectValue.data - 2 - - - 600 - - - - contentArray: events - - - - - - contentArray: events - contentArray - events - 2 - - - 586 - - - - textField - - - 274 - - - - 266 - {131, 17} - - - YES - - 67239488 - 272631808 - Table View Cell - - - - - - - - {{270, 1}, {131, 17}} - - - - - 595 - - - - value: objectValue.channel - - - - - - value: objectValue.channel - value - objectValue.channel - 2 - - - 599 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 29 - - - - - - - - - - - - - - 19 - - - - - - - - 56 - - - - - - - - 217 - - - - - - - - 83 - - - - - - - - 81 - - - - - - - - - - - - - - - - - 75 - - - - - 78 - - - - - 72 - - - - - 82 - - - - - 124 - - - - - - - - 77 - - - - - 73 - - - - - 79 - - - - - 112 - - - - - 74 - - - - - 125 - - - - - - - - 126 - - - - - 205 - - - - - - - - - - - - - - - - - - - - - - 202 - - - - - 198 - - - - - 207 - - - - - 214 - - - - - 199 - - - - - 203 - - - - - 197 - - - - - 206 - - - - - 215 - - - - - 218 - - - - - - - - 216 - - - - - - - - 200 - - - - - - - - - - - - - 219 - - - - - 201 - - - - - 204 - - - - - 220 - - - - - - - - - - - - - 213 - - - - - 210 - - - - - 221 - - - - - 208 - - - - - 209 - - - - - 57 - - - - - - - - - - - - - - - - - - 58 - - - - - 134 - - - - - 150 - - - - - 136 - - - - - 144 - - - - - 129 - - - - - 143 - - - - - 236 - - - - - 131 - - - - - - - - 149 - - - - - 145 - - - - - 130 - - - - - 24 - - - - - - - - - - - 92 - - - - - 5 - - - - - 239 - - - - - 23 - - - - - 295 - - - - - - - - 296 - - - - - - - - - 297 - - - - - 298 - - - - - 211 - - - - - - - - 212 - - - - - - - - - 195 - - - - - 196 - - - - - 346 - - - - - 348 - - - - - - - - 349 - - - - - - - - - - - - - - 350 - - - - - 351 - - - - - 354 - - - - - 371 - - - - - - - - 372 - - - - - - - - - - - 375 - - - - - - - - 376 - - - - - - - - - 377 - - - - - - - - 388 - - - - - - - - - - - - - - - - - - - - - - - 389 - - - - - 390 - - - - - 391 - - - - - 392 - - - - - 393 - - - - - 394 - - - - - 395 - - - - - 396 - - - - - 397 - - - - - - - - 398 - - - - - - - - 399 - - - - - - - - 400 - - - - - 401 - - - - - 402 - - - - - 403 - - - - - 404 - - - - - 405 - - - - - - - - - - - - 406 - - - - - 407 - - - - - 408 - - - - - 409 - - - - - 410 - - - - - 411 - - - - - - - - - - 412 - - - - - 413 - - - - - 414 - - - - - 415 - - - - - - - - - - - 416 - - - - - 417 - - - - - 418 - - - - - 419 - - - - - 420 - - - - - 450 - - - - - - - - 451 - - - - - - - - - - 452 - - - - - 453 - - - - - 454 - - - - - 457 - - - - - 459 - - - - - 460 - - - - - 462 - - - - - 465 - - - - - 466 - - - - - 485 - - - - - 490 - - - - - - - - 491 - - - - - - - - 492 - - - - - 494 - - - - - 496 - - - - - - - - 497 - - - - - - - - - - - - - - - - - 498 - - - - - 499 - - - - - 500 - - - - - 501 - - - - - 502 - - - - - 503 - - - - - - - - 504 - - - - - 505 - - - - - 506 - - - - - 507 - - - - - 508 - - - - - - - - - - - - - - - - 509 - - - - - 510 - - - - - 511 - - - - - 512 - - - - - 513 - - - - - 514 - - - - - 515 - - - - - 516 - - - - - 517 - - - - - 534 - - - - - 536 - - - - - - - - - - - 537 - - - - - - - - - - - 538 - - - - - 540 - - - - - 541 - - - - - - - - - 542 - - - - - - - - - 543 - - - - - 544 - - - - - 545 - - - - - - - - 546 - - - - - 547 - - - - - - - - 548 - - - - - 551 - - - - - - - - 552 - - - - - 553 - - - - - 554 - - - - - - - - - 555 - - - - - 557 - - - - - - - - 558 - - - - - - - - 559 - - - - - - - - 561 - - - - - - - - 562 - - - - - - - - 563 - - - - - 565 - - - - - - - - 566 - - - - - - - - 567 - - - - - 582 - - - - - 583 - - - - - 590 - - - - - - - - - 591 - - - - - 592 - - - - - - - - 593 - - - - - - - - 594 - - - - - 603 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{380, 496}, {480, 360}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 605 - - - - - LRAppDelegate - NSObject - - NSTextField - NSArrayController - NSTableView - NSWindow - - - - connectionStatus - NSTextField - - - eventsController - NSArrayController - - - eventsTableView - NSTableView - - - window - NSWindow - - - - IBProjectSource - ./Classes/LRAppDelegate.h - - - - NSDocument - - id - id - id - id - id - id - - - - printDocument: - id - - - revertDocumentToSaved: - id - - - runPageLayout: - id - - - saveDocument: - id - - - saveDocumentAs: - id - - - saveDocumentTo: - id - - - - IBProjectSource - ./Classes/NSDocument.h - - - - - 0 - IBCocoaFramework - YES - 3 - - {9, 8} - {7, 2} - - - diff --git a/libPusher-OSX/PusherSampleOSX/main.m b/libPusher-OSX/PusherSampleOSX/main.m deleted file mode 100644 index 2a477b84..00000000 --- a/libPusher-OSX/PusherSampleOSX/main.m +++ /dev/null @@ -1,14 +0,0 @@ -// -// main.m -// PusherSampleOSX -// -// Created by Luke Redpath on 05/02/2012. -// Copyright (c) 2012 LJR Software Limited. All rights reserved. -// - -#import - -int main(int argc, char *argv[]) -{ - return NSApplicationMain(argc, (const char **)argv); -} diff --git a/libPusher-OSX/libPusher-OSX.xcodeproj/project.pbxproj b/libPusher-OSX/libPusher-OSX.xcodeproj/project.pbxproj index d420f682..559b0f24 100644 --- a/libPusher-OSX/libPusher-OSX.xcodeproj/project.pbxproj +++ b/libPusher-OSX/libPusher-OSX.xcodeproj/project.pbxproj @@ -55,13 +55,6 @@ A3CA67A814DBCB95003E2F1E /* PTTargetActionEventListener.m in Sources */ = {isa = PBXBuildFile; fileRef = A3CA678914DBCB95003E2F1E /* PTTargetActionEventListener.m */; }; A3CA67A914DBCB95003E2F1E /* PTURLRequestOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A3CA678A14DBCB95003E2F1E /* PTURLRequestOperation.h */; }; A3CA67AA14DBCB95003E2F1E /* PTURLRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = A3CA678B14DBCB95003E2F1E /* PTURLRequestOperation.m */; }; - A3F203C814DEF36C0093C793 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A3CA675814DBCB2D003E2F1E /* Cocoa.framework */; }; - A3F203D214DEF36C0093C793 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = A3F203D014DEF36C0093C793 /* InfoPlist.strings */; }; - A3F203D414DEF36C0093C793 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = A3F203D314DEF36C0093C793 /* main.m */; }; - A3F203D814DEF36C0093C793 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = A3F203D614DEF36C0093C793 /* Credits.rtf */; }; - A3F203DB14DEF36C0093C793 /* LRAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A3F203DA14DEF36C0093C793 /* LRAppDelegate.m */; }; - A3F203DE14DEF36C0093C793 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = A3F203DC14DEF36C0093C793 /* MainMenu.xib */; }; - A3F203E314DEF37A0093C793 /* Pusher.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A3CA675514DBCB2D003E2F1E /* Pusher.framework */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -116,19 +109,9 @@ A3CA678914DBCB95003E2F1E /* PTTargetActionEventListener.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PTTargetActionEventListener.m; path = ../../Library/PTTargetActionEventListener.m; sourceTree = ""; }; A3CA678A14DBCB95003E2F1E /* PTURLRequestOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PTURLRequestOperation.h; path = ../../Library/PTURLRequestOperation.h; sourceTree = ""; }; A3CA678B14DBCB95003E2F1E /* PTURLRequestOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PTURLRequestOperation.m; path = ../../Library/PTURLRequestOperation.m; sourceTree = ""; }; - A3F203C614DEF36C0093C793 /* PusherSampleOSX.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PusherSampleOSX.app; sourceTree = BUILT_PRODUCTS_DIR; }; A3F203CA14DEF36C0093C793 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; A3F203CB14DEF36C0093C793 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; A3F203CC14DEF36C0093C793 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - A3F203CF14DEF36C0093C793 /* PusherSampleOSX-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "PusherSampleOSX-Info.plist"; sourceTree = ""; }; - A3F203D114DEF36C0093C793 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - A3F203D314DEF36C0093C793 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - A3F203D514DEF36C0093C793 /* PusherSampleOSX-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "PusherSampleOSX-Prefix.pch"; sourceTree = ""; }; - A3F203D714DEF36C0093C793 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = ""; }; - A3F203D914DEF36C0093C793 /* LRAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LRAppDelegate.h; sourceTree = ""; }; - A3F203DA14DEF36C0093C793 /* LRAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LRAppDelegate.m; sourceTree = ""; }; - A3F203DD14DEF36C0093C793 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainMenu.xib; sourceTree = ""; }; - A3F203E514DF05410093C793 /* Constants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Constants.h; path = ../../Sample/Constants.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -143,15 +126,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - A3F203C314DEF36C0093C793 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - A3F203E314DEF37A0093C793 /* Pusher.framework in Frameworks */, - A3F203C814DEF36C0093C793 /* Cocoa.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -159,7 +133,6 @@ isa = PBXGroup; children = ( A3CA675E14DBCB2D003E2F1E /* libPusher-OSX */, - A3F203CD14DEF36C0093C793 /* PusherSampleOSX */, A3CA675714DBCB2D003E2F1E /* Frameworks */, A3CA675614DBCB2D003E2F1E /* Products */, ); @@ -169,7 +142,6 @@ isa = PBXGroup; children = ( A3CA675514DBCB2D003E2F1E /* Pusher.framework */, - A3F203C614DEF36C0093C793 /* PusherSampleOSX.app */, ); name = Products; sourceTree = ""; @@ -257,30 +229,6 @@ name = "Other Frameworks"; sourceTree = ""; }; - A3F203CD14DEF36C0093C793 /* PusherSampleOSX */ = { - isa = PBXGroup; - children = ( - A3F203E514DF05410093C793 /* Constants.h */, - A3F203DA14DEF36C0093C793 /* LRAppDelegate.m */, - A3F203D914DEF36C0093C793 /* LRAppDelegate.h */, - A3F203DC14DEF36C0093C793 /* MainMenu.xib */, - A3F203CE14DEF36C0093C793 /* Supporting Files */, - ); - path = PusherSampleOSX; - sourceTree = ""; - }; - A3F203CE14DEF36C0093C793 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - A3F203CF14DEF36C0093C793 /* PusherSampleOSX-Info.plist */, - A3F203D014DEF36C0093C793 /* InfoPlist.strings */, - A3F203D314DEF36C0093C793 /* main.m */, - A3F203D514DEF36C0093C793 /* PusherSampleOSX-Prefix.pch */, - A3F203D614DEF36C0093C793 /* Credits.rtf */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -339,23 +287,6 @@ productReference = A3CA675514DBCB2D003E2F1E /* Pusher.framework */; productType = "com.apple.product-type.framework"; }; - A3F203C514DEF36C0093C793 /* PusherSampleOSX */ = { - isa = PBXNativeTarget; - buildConfigurationList = A3F203E114DEF36C0093C793 /* Build configuration list for PBXNativeTarget "PusherSampleOSX" */; - buildPhases = ( - A3F203C214DEF36C0093C793 /* Sources */, - A3F203C314DEF36C0093C793 /* Frameworks */, - A3F203C414DEF36C0093C793 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = PusherSampleOSX; - productName = PusherSampleOSX; - productReference = A3F203C614DEF36C0093C793 /* PusherSampleOSX.app */; - productType = "com.apple.product-type.application"; - }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -378,7 +309,6 @@ projectRoot = ""; targets = ( A3CA675414DBCB2D003E2F1E /* Pusher */, - A3F203C514DEF36C0093C793 /* PusherSampleOSX */, ); }; /* End PBXProject section */ @@ -392,16 +322,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - A3F203C414DEF36C0093C793 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - A3F203D214DEF36C0093C793 /* InfoPlist.strings in Resources */, - A3F203D814DEF36C0093C793 /* Credits.rtf in Resources */, - A3F203DE14DEF36C0093C793 /* MainMenu.xib in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ @@ -446,15 +366,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - A3F203C214DEF36C0093C793 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - A3F203D414DEF36C0093C793 /* main.m in Sources */, - A3F203DB14DEF36C0093C793 /* LRAppDelegate.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ @@ -466,30 +377,6 @@ name = InfoPlist.strings; sourceTree = ""; }; - A3F203D014DEF36C0093C793 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - A3F203D114DEF36C0093C793 /* en */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; - A3F203D614DEF36C0093C793 /* Credits.rtf */ = { - isa = PBXVariantGroup; - children = ( - A3F203D714DEF36C0093C793 /* en */, - ); - name = Credits.rtf; - sourceTree = ""; - }; - A3F203DC14DEF36C0093C793 /* MainMenu.xib */ = { - isa = PBXVariantGroup; - children = ( - A3F203DD14DEF36C0093C793 /* en */, - ); - name = MainMenu.xib; - sourceTree = ""; - }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ @@ -577,30 +464,6 @@ }; name = Release; }; - A3F203DF14DEF36C0093C793 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "PusherSampleOSX/PusherSampleOSX-Prefix.pch"; - INFOPLIST_FILE = "PusherSampleOSX/PusherSampleOSX-Info.plist"; - MACOSX_DEPLOYMENT_TARGET = 10.7; - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; - }; - name = Debug; - }; - A3F203E014DEF36C0093C793 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "PusherSampleOSX/PusherSampleOSX-Prefix.pch"; - INFOPLIST_FILE = "PusherSampleOSX/PusherSampleOSX-Info.plist"; - MACOSX_DEPLOYMENT_TARGET = 10.7; - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; - }; - name = Release; - }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -622,15 +485,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - A3F203E114DEF36C0093C793 /* Build configuration list for PBXNativeTarget "PusherSampleOSX" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - A3F203DF14DEF36C0093C793 /* Debug */, - A3F203E014DEF36C0093C793 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; /* End XCConfigurationList section */ }; rootObject = A3CA674B14DBCB2D003E2F1E /* Project object */; diff --git a/libPusher-OSX/libPusher-OSX.xcodeproj/xcshareddata/xcschemes/Sample App (OSX).xcscheme b/libPusher-OSX/libPusher-OSX.xcodeproj/xcshareddata/xcschemes/Sample App (OSX).xcscheme deleted file mode 100644 index c4deddee..00000000 --- a/libPusher-OSX/libPusher-OSX.xcodeproj/xcshareddata/xcschemes/Sample App (OSX).xcscheme +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/libPusher.xcodeproj/xcshareddata/xcschemes/UnitTests.xcscheme b/libPusher.xcodeproj/xcshareddata/xcschemes/UnitTests.xcscheme deleted file mode 100644 index f5d7cb9d..00000000 --- a/libPusher.xcodeproj/xcshareddata/xcschemes/UnitTests.xcscheme +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 315f14d07bd95370d5f578ea3fe77566f0ff1f63 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Mon, 25 Nov 2013 20:04:24 +0000 Subject: [PATCH 46/88] Pusher.h should be public --- libPusher.xcodeproj/project.pbxproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libPusher.xcodeproj/project.pbxproj b/libPusher.xcodeproj/project.pbxproj index ae078cff..5c4521e5 100755 --- a/libPusher.xcodeproj/project.pbxproj +++ b/libPusher.xcodeproj/project.pbxproj @@ -11,7 +11,7 @@ 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; 288765A50DF7441C002DB57D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765A40DF7441C002DB57D /* CoreGraphics.framework */; }; - 4D81597F1712C6CA0013A485 /* Pusher.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D81597E1712C6CA0013A485 /* Pusher.h */; }; + 4D81597F1712C6CA0013A485 /* Pusher.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D81597E1712C6CA0013A485 /* Pusher.h */; settings = {ATTRIBUTES = (Public, ); }; }; 5D5C4E7E0F2A4C92B9D85932 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F700C4637DC43EFA335D40F /* libPods.a */; }; 6D926C9364F64493B0A7BE5A /* libPods-specs.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 34CD0B6EB8B94D28B0AEC265 /* libPods-specs.a */; }; A304896C1667AAB4009511CB /* PTPusherChannelAuthorizationOperationSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = A304895E1667A8A6009511CB /* PTPusherChannelAuthorizationOperationSpec.m */; }; From 7e606254beea9515183cb5f0cf20c20f199f97bd Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Mon, 25 Nov 2013 20:11:50 +0000 Subject: [PATCH 47/88] Set the header dir and exclude private headers. Bump version. --- libPusher.podspec | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/libPusher.podspec b/libPusher.podspec index 3a840797..dceef5a8 100644 --- a/libPusher.podspec +++ b/libPusher.podspec @@ -1,14 +1,22 @@ Pod::Spec.new do |s| s.name = 'libPusher' - s.version = '1.4' + s.version = '1.5' s.license = 'MIT' s.summary = 'An Objective-C client for the Pusher.com service' s.homepage = 'https://github.com/lukeredpath/libPusher' s.author = 'Luke Redpath' - s.source = { :git => 'git://github.com/lukeredpath/libPusher.git', :tag => 'v1.4' } + s.source = { :git => 'https://github.com/lukeredpath/libPusher.git', :tag => 'v1.4' } s.source_files = 'Library/*' + s.private_header_files = %w( + PTJSON.h + PTJSONParser.h + NSString+Hashing.h + NSDictionary+QueryString.h + PTPusherChannel_Private.h + ) s.requires_arc = true s.dependency 'SocketRocket', "0.2" s.compiler_flags = '-Wno-arc-performSelector-leaks', '-Wno-format' s.xcconfig = { 'GCC_PREPROCESSOR_DEFINITIONS' => 'kPTPusherClientLibraryVersion=@\"1.5\"' } + s.header_dir = 'Pusher' end From 24a4afed38db1bf35e786c2fb894fc16ff9b4360 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Tue, 26 Nov 2013 18:00:21 +0000 Subject: [PATCH 48/88] Reconnect immediately on connection failure. This removes any delay in reconnection when waking the device up. --- Library/PTPusher.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Library/PTPusher.m b/Library/PTPusher.m index a2231995..c1613441 100644 --- a/Library/PTPusher.m +++ b/Library/PTPusher.m @@ -372,7 +372,7 @@ - (void)pusherConnection:(PTPusherConnection *)connection didDisconnectWithCode: - (void)pusherConnection:(PTPusherConnection *)connection didFailWithError:(NSError *)error wasConnected:(BOOL)wasConnected { if (wasConnected) { - [self handleDisconnection:connection error:error reconnectMode:PTPusherAutoReconnectModeReconnectWithConfiguredDelay]; + [self handleDisconnection:connection error:error reconnectMode:PTPusherAutoReconnectModeReconnectImmediately]; } else { if ([self.delegate respondsToSelector:@selector(pusher:connection:failedWithError:)]) { From 9149ebb0c14bae1696b2a0812c7123f4d50c4269 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Tue, 26 Nov 2013 18:21:36 +0000 Subject: [PATCH 49/88] Don't allow clients to configure a reconnectDelay of less than 1 second. --- Library/PTPusher.m | 5 ++++ Unit Tests/PTPusherSpec.m | 37 +++++++++++++++++++++++++++++ libPusher.xcodeproj/project.pbxproj | 16 +++++-------- 3 files changed, 48 insertions(+), 10 deletions(-) create mode 100644 Unit Tests/PTPusherSpec.m diff --git a/Library/PTPusher.m b/Library/PTPusher.m index c1613441..0095de68 100644 --- a/Library/PTPusher.m +++ b/Library/PTPusher.m @@ -147,6 +147,11 @@ - (void)dealloc; #pragma mark - Connection management +- (void)setReconnectDelay:(NSTimeInterval)reconnectDelay +{ + _reconnectDelay = MAX(reconnectDelay, 1); +} + - (void)connect { _numberOfReconnectAttempts = 0; diff --git a/Unit Tests/PTPusherSpec.m b/Unit Tests/PTPusherSpec.m new file mode 100644 index 00000000..75bf1966 --- /dev/null +++ b/Unit Tests/PTPusherSpec.m @@ -0,0 +1,37 @@ +// +// PTPusherSpec.m +// libPusher +// +// Created by Luke Redpath on 26/11/2013. +// Copyright 2013 __MyCompanyName__. All rights reserved. +// + +#import "SpecHelper.h" +#import "PTPusher.h" +#import "PTPusherMockConnection.h" + +SPEC_BEGIN(PTPusherSpec) + +describe(@"PTPusher", ^{ + + __block PTPusher *pusher; + __block PTPusherConnection *mockConnection = [[PTPusherMockConnection alloc] init]; + + beforeEach(^{ + pusher = [[PTPusher alloc] initWithConnection:mockConnection]; + }); + + it(@"it allows the reconnectDelay to be configured but not less than 1 second", ^{ + pusher.reconnectDelay = 1; + [[@(pusher.reconnectDelay) should] equal:@1]; + + pusher.reconnectDelay = 5; + [[@(pusher.reconnectDelay) should] equal:@5]; + + pusher.reconnectDelay = 0; + [[@(pusher.reconnectDelay) should] equal:@1]; + }); + +}); + +SPEC_END diff --git a/libPusher.xcodeproj/project.pbxproj b/libPusher.xcodeproj/project.pbxproj index 5c4521e5..c1ad0fa6 100755 --- a/libPusher.xcodeproj/project.pbxproj +++ b/libPusher.xcodeproj/project.pbxproj @@ -55,6 +55,8 @@ A37E15EA14E4BBBA00DCA3A6 /* PusherExampleMenuViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A3AC28BD13F75BF1001C4808 /* PusherExampleMenuViewController.m */; }; A37E160814E4C87500DCA3A6 /* libicucore.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A37E160714E4C87500DCA3A6 /* libicucore.dylib */; }; A37E167414E572C900DCA3A6 /* PTPusherMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = A37E167314E572C900DCA3A6 /* PTPusherMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A394E6F118451CD3004C70A2 /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A3A9F9591496E96100F83617 /* SenTestingKit.framework */; }; + A394E6F218451CFE004C70A2 /* PTPusherSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = A394E6EF18451C99004C70A2 /* PTPusherSpec.m */; }; A39E238913F7E6AB0083CAD7 /* PusherPresenceEventsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A39E238813F7E6AB0083CAD7 /* PusherPresenceEventsViewController.m */; }; A3A1A149115814F7001EF877 /* OCHamcrest.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = A3A1A111115814D0001EF877 /* OCHamcrest.framework */; }; A3A1A20111581782001EF877 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A3D1D0B51157CCDE009A12AD /* CFNetwork.framework */; }; @@ -175,6 +177,7 @@ A37E158E14E49F2D00DCA3A6 /* SRWebSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SRWebSocket.h; path = Pods/Headers/SocketRocket/SRWebSocket.h; sourceTree = SOURCE_ROOT; }; A37E160714E4C87500DCA3A6 /* libicucore.dylib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "compiled.mach-o.dylib"; name = libicucore.dylib; path = usr/lib/libicucore.dylib; sourceTree = SDKROOT; }; A37E167314E572C900DCA3A6 /* PTPusherMacros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTPusherMacros.h; sourceTree = ""; }; + A394E6EF18451C99004C70A2 /* PTPusherSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PTPusherSpec.m; sourceTree = ""; }; A39E238613F7E3FD0083CAD7 /* PTPusherErrors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTPusherErrors.h; sourceTree = ""; }; A39E238713F7E6AB0083CAD7 /* PusherPresenceEventsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PusherPresenceEventsViewController.h; sourceTree = ""; }; A39E238813F7E6AB0083CAD7 /* PusherPresenceEventsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PusherPresenceEventsViewController.m; sourceTree = ""; }; @@ -252,6 +255,7 @@ A37E158914E4997700DCA3A6 /* Security.framework in Frameworks */, A3A1A20111581782001EF877 /* CFNetwork.framework in Frameworks */, A3A1A20211581782001EF877 /* Foundation.framework in Frameworks */, + A394E6F118451CD3004C70A2 /* SenTestingKit.framework in Frameworks */, 009E68D1E15E43B3BDAB74B0 /* libPods-specs.a in Frameworks */, A3A297DC17368BE300BD956D /* libPusher.a in Frameworks */, A3A2DECF179C202100349728 /* libPods.a in Frameworks */, @@ -414,6 +418,7 @@ A30575CE15233C1200DA19BD /* PTPusherPresenceChannelSpec.m */, A304895E1667A8A6009511CB /* PTPusherChannelAuthorizationOperationSpec.m */, A3173754155D2CDF007E4BBA /* PTPusherMockConnectionSpec.m */, + A394E6EF18451C99004C70A2 /* PTPusherSpec.m */, A3C32D9C14D083D60017FAED /* SpecHelper.h */, A366E53914FD88B3002F0C39 /* SpecHelper.m */, ); @@ -858,6 +863,7 @@ files = ( A3C32D9B14D083C10017FAED /* PTPusherEventSpec.m in Sources */, A366E53814FD87F5002F0C39 /* PTPusherEventDispatcherSpec.m in Sources */, + A394E6F218451CFE004C70A2 /* PTPusherSpec.m in Sources */, A366E53A14FD88B3002F0C39 /* SpecHelper.m in Sources */, A30575D115233CC800DA19BD /* PTPusherPresenceChannelSpec.m in Sources */, A317375B155D2D7D007E4BBA /* PTPusherMockConnectionSpec.m in Sources */, @@ -968,11 +974,6 @@ ALWAYS_SEARCH_USER_PATHS = NO; COPY_PHASE_STRIP = NO; DSTROOT = /tmp/xcodeproj.dst; - FRAMEWORK_SEARCH_PATHS = ( - "\"$(SDKROOT)/Developer/Library/Frameworks\"", - "\"$(DEVELOPER_LIBRARY_DIR)/Frameworks\"", - "\"$(SRCROOT)/Frameworks\"", - ); GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_OBJC_EXCEPTIONS = YES; GCC_OPTIMIZATION_LEVEL = 0; @@ -1004,11 +1005,6 @@ COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DSTROOT = /tmp/xcodeproj.dst; - FRAMEWORK_SEARCH_PATHS = ( - "\"$(SDKROOT)/Developer/Library/Frameworks\"", - "\"$(DEVELOPER_LIBRARY_DIR)/Frameworks\"", - "\"$(SRCROOT)/Frameworks\"", - ); GCC_ENABLE_OBJC_EXCEPTIONS = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; From 5a2ae161f53055d1b58996f6e7ea103c4d69fcfc Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Tue, 26 Nov 2013 18:29:09 +0000 Subject: [PATCH 50/88] Move fatal Pusher errors into a separate domain. This enables clients to check if the error they have received will prevent reconnecting without having to know the specific range of error codes. --- Library/PTPusher.h | 16 +++++++++++++++- Library/PTPusher.m | 9 ++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/Library/PTPusher.h b/Library/PTPusher.h index 1334b64e..84c0a692 100644 --- a/Library/PTPusher.h +++ b/Library/PTPusher.h @@ -20,10 +20,24 @@ extern NSString *const PTPusherEventReceivedNotification; */ extern NSString *const PTPusherEventUserInfoKey; -/** The error domain for all PTPusher errors. +/** The error domain for all non-fatal PTPusher errors. + * + * These will be any errors not in the range of 4000-4099. + * + * See: http://pusher.com/docs/pusher_protocol#error-codes */ extern NSString *const PTPusherErrorDomain; +/** The error domain for all fatal PTPusher errors. + * + * These will be any errors in the range of 4000-4099. If your + * connection fails or disconnects with one of these errors, you + * will typically not be able to reconnect immediately (or at all). + * + * See: http://pusher.com/docs/pusher_protocol#error-codes + */ +extern NSString *const PTPusherFatalErrorDomain; + /** The key for any underlying PTPusherEvent associated with a PTPusher error's userInfo dictionary. */ extern NSString *const PTPusherErrorUnderlyingEventKey; diff --git a/Library/PTPusher.m b/Library/PTPusher.m index 0095de68..9f98f0c1 100644 --- a/Library/PTPusher.m +++ b/Library/PTPusher.m @@ -31,6 +31,7 @@ typedef NS_ENUM(NSUInteger, PTPusherAutoReconnectMode) { NSString *const PTPusherEventReceivedNotification = @"PTPusherEventReceivedNotification"; NSString *const PTPusherEventUserInfoKey = @"PTPusherEventUserInfoKey"; NSString *const PTPusherErrorDomain = @"PTPusherErrorDomain"; +NSString *const PTPusherFatalErrorDomain = @"PTPusherFatalErrorDomain"; NSString *const PTPusherErrorUnderlyingEventKey = @"PTPusherErrorUnderlyingEventKey"; /** The Pusher protocol version, used to determined which features @@ -352,8 +353,14 @@ - (void)pusherConnection:(PTPusherConnection *)connection didDisconnectWithCode: reason = @"Unknown error"; // not sure what could cause this to be nil, but just playing it safe } + NSString *errorDomain = PTPusherErrorDomain; + + if (errorCode >= 400 && errorCode <= 4099) { + errorDomain = PTPusherFatalErrorDomain; + } + // check for error codes based on the Pusher Websocket protocol see http://pusher.com/docs/pusher_protocol - error = [NSError errorWithDomain:PTPusherErrorDomain code:errorCode userInfo:[NSDictionary dictionaryWithObject:reason forKey:@"reason"]]; + error = [NSError errorWithDomain:errorDomain code:errorCode userInfo:[NSDictionary dictionaryWithObject:reason forKey:@"reason"]]; // 4000-4099 -> The connection SHOULD NOT be re-established unchanged. if (errorCode >= 4000 && errorCode <= 4099) { From 4d20e84322d784adeecb1fe00d6f14e9861a2aa7 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Tue, 26 Nov 2013 18:33:41 +0000 Subject: [PATCH 51/88] Remove support for JSONKit. I've decided to leave the PTJSON abstraction in place for now - it's doing no harm. --- Library/JSONKit.h | 251 ----------------------------------------- Library/PTJSON.h | 27 ++--- Library/PTJSON.m | 44 +------- Library/PTJSONParser.h | 18 --- 4 files changed, 13 insertions(+), 327 deletions(-) delete mode 100644 Library/JSONKit.h delete mode 100644 Library/PTJSONParser.h diff --git a/Library/JSONKit.h b/Library/JSONKit.h deleted file mode 100644 index 16228870..00000000 --- a/Library/JSONKit.h +++ /dev/null @@ -1,251 +0,0 @@ -// -// JSONKit.h -// http://github.com/johnezang/JSONKit -// Dual licensed under either the terms of the BSD License, or alternatively -// under the terms of the Apache License, Version 2.0, as specified below. -// - -/* - Copyright (c) 2011, John Engelhart - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of the Zang Industries nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/* - Copyright 2011 John Engelhart - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#include -#include -#include -#include -#include - -#ifdef __OBJC__ -#import -#import -#import -#import -#import -#import -#endif // __OBJC__ - -#ifdef __cplusplus -extern "C" { -#endif - - - // For Mac OS X < 10.5. -#ifndef NSINTEGER_DEFINED -#define NSINTEGER_DEFINED -#if defined(__LP64__) || defined(NS_BUILD_32_LIKE_64) - typedef long NSInteger; - typedef unsigned long NSUInteger; -#define NSIntegerMin LONG_MIN -#define NSIntegerMax LONG_MAX -#define NSUIntegerMax ULONG_MAX -#else // defined(__LP64__) || defined(NS_BUILD_32_LIKE_64) - typedef int NSInteger; - typedef unsigned int NSUInteger; -#define NSIntegerMin INT_MIN -#define NSIntegerMax INT_MAX -#define NSUIntegerMax UINT_MAX -#endif // defined(__LP64__) || defined(NS_BUILD_32_LIKE_64) -#endif // NSINTEGER_DEFINED - - -#ifndef _JSONKIT_H_ -#define _JSONKIT_H_ - -#if defined(__GNUC__) && (__GNUC__ >= 4) && defined(__APPLE_CC__) && (__APPLE_CC__ >= 5465) -#define JK_DEPRECATED_ATTRIBUTE __attribute__((deprecated)) -#else -#define JK_DEPRECATED_ATTRIBUTE -#endif - -#define JSONKIT_VERSION_MAJOR 1 -#define JSONKIT_VERSION_MINOR 4 - - typedef NSUInteger JKFlags; - - /* - JKParseOptionComments : Allow C style // and /_* ... *_/ (without a _, obviously) comments in JSON. - JKParseOptionUnicodeNewlines : Allow Unicode recommended (?:\r\n|[\n\v\f\r\x85\p{Zl}\p{Zp}]) newlines. - JKParseOptionLooseUnicode : Normally the decoder will stop with an error at any malformed Unicode. - This option allows JSON with malformed Unicode to be parsed without reporting an error. - Any malformed Unicode is replaced with \uFFFD, or "REPLACEMENT CHARACTER". - */ - - enum { - JKParseOptionNone = 0, - JKParseOptionStrict = 0, - JKParseOptionComments = (1 << 0), - JKParseOptionUnicodeNewlines = (1 << 1), - JKParseOptionLooseUnicode = (1 << 2), - JKParseOptionPermitTextAfterValidJSON = (1 << 3), - JKParseOptionValidFlags = (JKParseOptionComments | JKParseOptionUnicodeNewlines | JKParseOptionLooseUnicode | JKParseOptionPermitTextAfterValidJSON), - }; - typedef JKFlags JKParseOptionFlags; - - enum { - JKSerializeOptionNone = 0, - JKSerializeOptionPretty = (1 << 0), - JKSerializeOptionEscapeUnicode = (1 << 1), - JKSerializeOptionEscapeForwardSlashes = (1 << 4), - JKSerializeOptionValidFlags = (JKSerializeOptionPretty | JKSerializeOptionEscapeUnicode | JKSerializeOptionEscapeForwardSlashes), - }; - typedef JKFlags JKSerializeOptionFlags; - -#ifdef __OBJC__ - - typedef struct JKParseState JKParseState; // Opaque internal, private type. - - // As a general rule of thumb, if you use a method that doesn't accept a JKParseOptionFlags argument, it defaults to JKParseOptionStrict - - @interface JSONDecoder : NSObject { - JKParseState *parseState; - } -+ (id)decoder; -+ (id)decoderWithParseOptions:(JKParseOptionFlags)parseOptionFlags; -- (id)initWithParseOptions:(JKParseOptionFlags)parseOptionFlags; -- (void)clearCache; - -// The parse... methods were deprecated in v1.4 in favor of the v1.4 objectWith... methods. -- (id)parseUTF8String:(const unsigned char *)string length:(size_t)length JK_DEPRECATED_ATTRIBUTE; // Deprecated in JSONKit v1.4. Use objectWithUTF8String:length: instead. -- (id)parseUTF8String:(const unsigned char *)string length:(size_t)length error:(NSError **)error JK_DEPRECATED_ATTRIBUTE; // Deprecated in JSONKit v1.4. Use objectWithUTF8String:length:error: instead. - // The NSData MUST be UTF8 encoded JSON. -- (id)parseJSONData:(NSData *)jsonData JK_DEPRECATED_ATTRIBUTE; // Deprecated in JSONKit v1.4. Use objectWithData: instead. -- (id)parseJSONData:(NSData *)jsonData error:(NSError **)error JK_DEPRECATED_ATTRIBUTE; // Deprecated in JSONKit v1.4. Use objectWithData:error: instead. - -// Methods that return immutable collection objects. -- (id)objectWithUTF8String:(const unsigned char *)string length:(NSUInteger)length; -- (id)objectWithUTF8String:(const unsigned char *)string length:(NSUInteger)length error:(NSError **)error; -// The NSData MUST be UTF8 encoded JSON. -- (id)objectWithData:(NSData *)jsonData; -- (id)objectWithData:(NSData *)jsonData error:(NSError **)error; - -// Methods that return mutable collection objects. -- (id)mutableObjectWithUTF8String:(const unsigned char *)string length:(NSUInteger)length; -- (id)mutableObjectWithUTF8String:(const unsigned char *)string length:(NSUInteger)length error:(NSError **)error; -// The NSData MUST be UTF8 encoded JSON. -- (id)mutableObjectWithData:(NSData *)jsonData; -- (id)mutableObjectWithData:(NSData *)jsonData error:(NSError **)error; - -@end - - //////////// -#pragma mark Deserializing methods - //////////// - - @interface NSString (JSONKitDeserializing) -- (id)objectFromJSONString; -- (id)objectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags; -- (id)objectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error; -- (id)mutableObjectFromJSONString; -- (id)mutableObjectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags; -- (id)mutableObjectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error; -@end - - @interface NSData (JSONKitDeserializing) -// The NSData MUST be UTF8 encoded JSON. -- (id)objectFromJSONData; -- (id)objectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags; -- (id)objectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error; -- (id)mutableObjectFromJSONData; -- (id)mutableObjectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags; -- (id)mutableObjectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error; -@end - - //////////// -#pragma mark Serializing methods - //////////// - - @interface NSString (JSONKitSerializing) -// Convenience methods for those that need to serialize the receiving NSString (i.e., instead of having to serialize a NSArray with a single NSString, you can "serialize to JSON" just the NSString). -// Normally, a string that is serialized to JSON has quotation marks surrounding it, which you may or may not want when serializing a single string, and can be controlled with includeQuotes: -// includeQuotes:YES `a "test"...` -> `"a \"test\"..."` -// includeQuotes:NO `a "test"...` -> `a \"test\"...` -- (NSData *)JSONData; // Invokes JSONDataWithOptions:JKSerializeOptionNone includeQuotes:YES -- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions includeQuotes:(BOOL)includeQuotes error:(NSError **)error; -- (NSString *)JSONString; // Invokes JSONStringWithOptions:JKSerializeOptionNone includeQuotes:YES -- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions includeQuotes:(BOOL)includeQuotes error:(NSError **)error; -@end - - @interface NSArray (JSONKitSerializing) -- (NSData *)JSONData; -- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions error:(NSError **)error; -- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingDelegate:(id)delegate selector:(SEL)selector error:(NSError **)error; -- (NSString *)JSONString; -- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions error:(NSError **)error; -- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingDelegate:(id)delegate selector:(SEL)selector error:(NSError **)error; -@end - - @interface NSDictionary (JSONKitSerializing) -- (NSData *)JSONData; -- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions error:(NSError **)error; -- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingDelegate:(id)delegate selector:(SEL)selector error:(NSError **)error; -- (NSString *)JSONString; -- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions error:(NSError **)error; -- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingDelegate:(id)delegate selector:(SEL)selector error:(NSError **)error; -@end - -#ifdef __BLOCKS__ - - @interface NSArray (JSONKitSerializingBlockAdditions) -- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingBlock:(id(^)(id object))block error:(NSError **)error; -- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingBlock:(id(^)(id object))block error:(NSError **)error; -@end - - @interface NSDictionary (JSONKitSerializingBlockAdditions) -- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingBlock:(id(^)(id object))block error:(NSError **)error; -- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingBlock:(id(^)(id object))block error:(NSError **)error; -@end - -#endif - - -#endif // __OBJC__ - -#endif // _JSONKIT_H_ - -#ifdef __cplusplus -} // extern "C" -#endif diff --git a/Library/PTJSON.h b/Library/PTJSON.h index 3683320a..86d23e61 100644 --- a/Library/PTJSON.h +++ b/Library/PTJSON.h @@ -7,31 +7,24 @@ // #import -#import "PTJSONParser.h" -extern NSString *const PTJSONParserNotAvailable; +@protocol PTJSONParser + +- (NSData *)JSONDataFromObject:(id)object; +- (NSString *)JSONStringFromObject:(id)object; +- (id)objectFromJSONData:(NSData *)data; +- (id)objectFromJSONString:(NSString *)string; + +@end @interface PTJSON : NSObject /** Returns a JSON parser appropriate for the current platform. - A runtime check is performed for the presence of NSJSONSerialization - (available on iOS 5.0 and OSX 10.7 and later). If it is available, - it will be used, otherwise it will fall back to using JSONKit. - - Important note: If you intend to support users of iOS 4.x, you must - ensure that you link JSONKit to your project as it is no longer - embedded within libPusher. + As of libPusher 1.5, the lowest supported deployment target is iOS 5.0 + so this will always return a parser that uses NSJSONSerialisation. */ + (id)JSONParser; @end - -@interface PTJSONKitParser : NSObject -+ (id)JSONKitParser; -@end - -@interface PTNSJSONParser : NSObject -+ (id)NSJSONParser; -@end \ No newline at end of file diff --git a/Library/PTJSON.m b/Library/PTJSON.m index 174e300c..dda71c18 100644 --- a/Library/PTJSON.m +++ b/Library/PTJSON.m @@ -7,59 +7,21 @@ // #import "PTJSON.h" -#import "JSONKit.h" #import "PTPusherMacros.h" -NSString *const PTJSONParserNotAvailable = @"PTJSONParserNotAvailable"; +@interface PTNSJSONParser : NSObject ++ (id)NSJSONParser; +@end @implementation PTJSON + (id)JSONParser { - if (![NSJSONSerialization class]) { - if (NSClassFromString(@"JSONDecoder") == nil) { - [NSException raise:PTJSONParserNotAvailable - format:@"No JSON parser available. To support iOS4, you should link JSONKit to your project."]; - } - return [PTJSONKitParser JSONKitParser]; - } return [PTNSJSONParser NSJSONParser]; } @end -@implementation PTJSONKitParser - -+ (id)JSONKitParser -{ - PT_DEFINE_SHARED_INSTANCE_USING_BLOCK(^{ - return [[self alloc] init]; - }); -} - -- (NSData *)JSONDataFromObject:(id)object -{ - return [object JSONData]; -} - -- (NSString *)JSONStringFromObject:(id)object -{ - return [object JSONString]; -} - -- (id)objectFromJSONData:(NSData *)data -{ - return [data objectFromJSONData]; -} - -- (id)objectFromJSONString:(NSString *)string -{ - return [string objectFromJSONString]; -} - -@end - - @implementation PTNSJSONParser + (id)NSJSONParser diff --git a/Library/PTJSONParser.h b/Library/PTJSONParser.h deleted file mode 100644 index b12e292c..00000000 --- a/Library/PTJSONParser.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// PTJSONParser.h -// libPusher -// -// Created by Luke Redpath on 30/03/2012. -// Copyright (c) 2012 LJR Software Limited. All rights reserved. -// - -#import - -@protocol PTJSONParser - -- (NSData *)JSONDataFromObject:(id)object; -- (NSString *)JSONStringFromObject:(id)object; -- (id)objectFromJSONData:(NSData *)data; -- (id)objectFromJSONString:(NSString *)string; - -@end From f5d1a4de92eaa0d4c68eee37837ccf84760a3f7f Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Tue, 26 Nov 2013 18:39:01 +0000 Subject: [PATCH 52/88] Fixed some 64-bit warnings. --- Library/NSString+Hashing.m | 2 +- Library/PTPusherEvent.m | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Library/NSString+Hashing.m b/Library/NSString+Hashing.m index f2b95fb8..c622d04b 100644 --- a/Library/NSString+Hashing.m +++ b/Library/NSString+Hashing.m @@ -9,7 +9,7 @@ - (NSString *)MD5Hash; const char *cStr = [self UTF8String]; unsigned char result[CC_MD5_DIGEST_LENGTH]; - CC_MD5( cStr, strlen(cStr), result ); + CC_MD5( cStr, (CC_LONG)strlen(cStr), result ); return [NSString stringWithFormat: @"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", diff --git a/Library/PTPusherEvent.m b/Library/PTPusherEvent.m index b431ef5f..9398bcac 100644 --- a/Library/PTPusherEvent.m +++ b/Library/PTPusherEvent.m @@ -80,7 +80,7 @@ - (NSInteger)code - (NSString *)description { - return [NSString stringWithFormat:@"", self.code, self.message]; + return [NSString stringWithFormat:@"", (long)self.code, self.message]; } @end From 0cc29642c85c287903fa2b9650bd2861cbf3a2ce Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Tue, 26 Nov 2013 18:39:09 +0000 Subject: [PATCH 53/88] Updated OSX project settings. --- .../libPusher-OSX.xcodeproj/project.pbxproj | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/libPusher-OSX/libPusher-OSX.xcodeproj/project.pbxproj b/libPusher-OSX/libPusher-OSX.xcodeproj/project.pbxproj index 559b0f24..de29e6b2 100644 --- a/libPusher-OSX/libPusher-OSX.xcodeproj/project.pbxproj +++ b/libPusher-OSX/libPusher-OSX.xcodeproj/project.pbxproj @@ -8,10 +8,8 @@ /* Begin PBXBuildFile section */ A3141C4A176F2F4A008330D7 /* Pusher.h in Headers */ = {isa = PBXBuildFile; fileRef = A3141C49176F2F4A008330D7 /* Pusher.h */; }; - A3382DFA1525D0AF0025550D /* JSONKit.h in Headers */ = {isa = PBXBuildFile; fileRef = A3382DF91525D0AB0025550D /* JSONKit.h */; }; A3382DFE1525D0C90025550D /* PTJSON.h in Headers */ = {isa = PBXBuildFile; fileRef = A3382DFB1525D0C90025550D /* PTJSON.h */; settings = {ATTRIBUTES = (Public, ); }; }; A3382DFF1525D0C90025550D /* PTJSON.m in Sources */ = {isa = PBXBuildFile; fileRef = A3382DFC1525D0C90025550D /* PTJSON.m */; }; - A3382E001525D0C90025550D /* PTJSONParser.h in Headers */ = {isa = PBXBuildFile; fileRef = A3382DFD1525D0C90025550D /* PTJSONParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; A373A2831562D3B000BFAECE /* PTPusher+Testing.h in Headers */ = {isa = PBXBuildFile; fileRef = A373A2811562D3B000BFAECE /* PTPusher+Testing.h */; }; A373A2841562D3B000BFAECE /* PTPusher+Testing.m in Sources */ = {isa = PBXBuildFile; fileRef = A373A2821562D3B000BFAECE /* PTPusher+Testing.m */; }; A37E161214E4C95C00DCA3A6 /* base64.c in Sources */ = {isa = PBXBuildFile; fileRef = A37E160B14E4C95B00DCA3A6 /* base64.c */; }; @@ -59,10 +57,8 @@ /* Begin PBXFileReference section */ A3141C49176F2F4A008330D7 /* Pusher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Pusher.h; sourceTree = ""; }; - A3382DF91525D0AB0025550D /* JSONKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JSONKit.h; path = ../../Library/JSONKit.h; sourceTree = ""; }; A3382DFB1525D0C90025550D /* PTJSON.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PTJSON.h; path = ../../Library/PTJSON.h; sourceTree = ""; }; A3382DFC1525D0C90025550D /* PTJSON.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PTJSON.m; path = ../../Library/PTJSON.m; sourceTree = ""; }; - A3382DFD1525D0C90025550D /* PTJSONParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PTJSONParser.h; path = ../../Library/PTJSONParser.h; sourceTree = ""; }; A373A2811562D3B000BFAECE /* PTPusher+Testing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "PTPusher+Testing.h"; path = "../../Library/PTPusher+Testing.h"; sourceTree = ""; }; A373A2821562D3B000BFAECE /* PTPusher+Testing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "PTPusher+Testing.m"; path = "../../Library/PTPusher+Testing.m"; sourceTree = ""; }; A37E160B14E4C95B00DCA3A6 /* base64.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = base64.c; path = ../../Pods/SocketRocket/SocketRocket/base64.c; sourceTree = ""; }; @@ -166,8 +162,6 @@ A373A2821562D3B000BFAECE /* PTPusher+Testing.m */, A3382DFB1525D0C90025550D /* PTJSON.h */, A3382DFC1525D0C90025550D /* PTJSON.m */, - A3382DFD1525D0C90025550D /* PTJSONParser.h */, - A3382DF91525D0AB0025550D /* JSONKit.h */, A37E168114E5736300DCA3A6 /* PTPusherMacros.h */, A37E160B14E4C95B00DCA3A6 /* base64.c */, A37E160C14E4C95B00DCA3A6 /* base64.h */, @@ -257,9 +251,7 @@ A37E161414E4C95C00DCA3A6 /* NSData+SRB64Additions.h in Headers */, A37E161714E4C95C00DCA3A6 /* SRWebSocket.h in Headers */, A37E168214E5736300DCA3A6 /* PTPusherMacros.h in Headers */, - A3382DFA1525D0AF0025550D /* JSONKit.h in Headers */, A3382DFE1525D0C90025550D /* PTJSON.h in Headers */, - A3382E001525D0C90025550D /* PTJSONParser.h in Headers */, A373A2831562D3B000BFAECE /* PTPusher+Testing.h in Headers */, A3141C4A176F2F4A008330D7 /* Pusher.h in Headers */, ); @@ -293,7 +285,7 @@ A3CA674B14DBCB2D003E2F1E /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0420; + LastUpgradeCheck = 0500; ORGANIZATIONNAME = "LJR Software Limited"; }; buildConfigurationList = A3CA674E14DBCB2D003E2F1E /* Build configuration list for PBXProject "libPusher-OSX" */; @@ -384,8 +376,13 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1.5; DYLIB_COMPATIBILITY_VERSION = 1.0; @@ -403,6 +400,9 @@ GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; INSTALL_PATH = "@executable_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.6; @@ -416,8 +416,13 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = YES; CURRENT_PROJECT_VERSION = 1.5; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; @@ -430,6 +435,9 @@ GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; INSTALL_PATH = "@executable_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.6; @@ -441,6 +449,7 @@ A3CA676B14DBCB2D003E2F1E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + COMBINE_HIDPI_IMAGES = YES; FRAMEWORK_VERSION = A; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "libPusher-OSX/libPusher-OSX-Prefix.pch"; @@ -454,6 +463,7 @@ A3CA676C14DBCB2D003E2F1E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + COMBINE_HIDPI_IMAGES = YES; FRAMEWORK_VERSION = A; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "libPusher-OSX/libPusher-OSX-Prefix.pch"; From 6b7841ae2b5d238862498da33f8b910269ae3eba Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Tue, 26 Nov 2013 18:41:59 +0000 Subject: [PATCH 54/88] Convert to modern Objective-C syntax. --- Library/PTPusher.m | 20 +++++++++---------- Library/PTPusherAPI.m | 14 ++++++------- Library/PTPusherChannel.m | 12 +++++------ .../PTPusherChannelAuthorizationOperation.m | 12 +++++------ Library/PTPusherConnection.m | 4 ++-- Library/PTPusherEvent.m | 10 +++++----- Library/PTPusherEventDispatcher.m | 8 ++++---- Library/PTPusherMockConnection.m | 10 +++++----- .../libPusher-OSX.xcodeproj/project.pbxproj | 2 ++ 9 files changed, 47 insertions(+), 45 deletions(-) diff --git a/Library/PTPusher.m b/Library/PTPusher.m index 9f98f0c1..16d113cb 100644 --- a/Library/PTPusher.m +++ b/Library/PTPusher.m @@ -195,10 +195,10 @@ - (void)removeAllBindings - (PTPusherChannel *)subscribeToChannelNamed:(NSString *)name { - PTPusherChannel *channel = [channels objectForKey:name]; + PTPusherChannel *channel = channels[name]; if (channel == nil) { channel = [PTPusherChannel channelWithName:name pusher:self]; - [channels setObject:channel forKey:name]; + channels[name] = channel; } // private/presence channels require a socketID to authenticate if (self.connection.isConnected && self.connection.socketID) { @@ -226,7 +226,7 @@ - (PTPusherPresenceChannel *)subscribeToPresenceChannelNamed:(NSString *)name de - (PTPusherChannel *)channelNamed:(NSString *)name { - return [channels objectForKey:name]; + return channels[name]; } /* This is only called when a client explicitly unsubscribes from a channel @@ -254,7 +254,7 @@ - (void)__unsubscribeFromChannel:(PTPusherChannel *)channel if (self.connection.isConnected) { [self sendEventNamed:@"pusher:unsubscribe" - data:[NSDictionary dictionaryWithObject:channel.name forKey:@"channel"]]; + data:@{@"channel": channel.name}]; } [channels removeObjectForKey:channel.name]; @@ -311,14 +311,14 @@ - (void)sendEventNamed:(NSString *)name data:(id)data channel:(NSString *)channe } NSMutableDictionary *payload = [NSMutableDictionary dictionary]; - [payload setObject:name forKey:PTPusherEventKey]; + payload[PTPusherEventKey] = name; if (data) { - [payload setObject:data forKey:PTPusherDataKey]; + payload[PTPusherDataKey] = data; } if (channelName) { - [payload setObject:channelName forKey:PTPusherChannelKey]; + payload[PTPusherChannelKey] = channelName; } [self.connection send:payload]; } @@ -360,7 +360,7 @@ - (void)pusherConnection:(PTPusherConnection *)connection didDisconnectWithCode: } // check for error codes based on the Pusher Websocket protocol see http://pusher.com/docs/pusher_protocol - error = [NSError errorWithDomain:errorDomain code:errorCode userInfo:[NSDictionary dictionaryWithObject:reason forKey:@"reason"]]; + error = [NSError errorWithDomain:errorDomain code:errorCode userInfo:@{@"reason": reason}]; // 4000-4099 -> The connection SHOULD NOT be re-established unchanged. if (errorCode >= 4000 && errorCode <= 4099) { @@ -402,14 +402,14 @@ - (void)pusherConnection:(PTPusherConnection *)connection didReceiveEvent:(PTPus } if (event.channel) { - [[channels objectForKey:event.channel] dispatchEvent:event]; + [channels[event.channel] dispatchEvent:event]; } [dispatcher dispatchEvent:event]; [[NSNotificationCenter defaultCenter] postNotificationName:PTPusherEventReceivedNotification object:self - userInfo:[NSDictionary dictionaryWithObject:event forKey:PTPusherEventUserInfoKey]]; + userInfo:@{PTPusherEventUserInfoKey: event}]; } - (void)handleDisconnection:(PTPusherConnection *)connection error:(NSError *)error reconnectMode:(PTPusherAutoReconnectMode)reconnectMode diff --git a/Library/PTPusherAPI.m b/Library/PTPusherAPI.m index 3c7627a4..2aeed084 100644 --- a/Library/PTPusherAPI.m +++ b/Library/PTPusherAPI.m @@ -37,19 +37,19 @@ - (void)triggerEvent:(NSString *)eventName onChannel:(NSString *)channelName dat NSMutableDictionary *queryParameters = [NSMutableDictionary dictionary]; - [queryParameters setObject:[[bodyString MD5Hash] lowercaseString] forKey:@"body_md5"]; - [queryParameters setObject:key forKey:@"auth_key"]; - [queryParameters setObject:[NSNumber numberWithDouble:time(NULL)] forKey:@"auth_timestamp"]; - [queryParameters setObject:@"1.0" forKey:@"auth_version"]; - [queryParameters setObject:eventName forKey:@"name"]; + queryParameters[@"body_md5"] = [[bodyString MD5Hash] lowercaseString]; + queryParameters[@"auth_key"] = key; + queryParameters[@"auth_timestamp"] = @((double)time(NULL)); + queryParameters[@"auth_version"] = @"1.0"; + queryParameters[@"name"] = eventName; if (socketID) { - [queryParameters setObject:socketID forKey:@"socket_id"]; + queryParameters[@"socket_id"] = socketID; } NSString *signatureString = [NSString stringWithFormat:@"POST\n%@\n%@", path, [queryParameters sortedQueryString]]; - [queryParameters setObject:[signatureString HMACDigestUsingSecretKey:secretKey] forKey:@"auth_signature"]; + queryParameters[@"auth_signature"] = [signatureString HMACDigestUsingSecretKey:secretKey]; NSString *URLString = [NSString stringWithFormat:@"http://%@%@?%@", kPUSHER_API_DEFAULT_HOST, path, [queryParameters sortedQueryString]]; diff --git a/Library/PTPusherChannel.m b/Library/PTPusherChannel.m index 80739cda..56f2a755 100644 --- a/Library/PTPusherChannel.m +++ b/Library/PTPusherChannel.m @@ -111,7 +111,7 @@ - (void)handleSubscribeEvent:(PTPusherEvent *)event - (void)handleSubcribeErrorEvent:(PTPusherEvent *)event { if ([pusher.delegate respondsToSelector:@selector(pusher:didFailToSubscribeToChannel:withError:)]) { - NSDictionary *userInfo = [NSDictionary dictionaryWithObject:event forKey:PTPusherErrorUnderlyingEventKey]; + NSDictionary *userInfo = @{PTPusherErrorUnderlyingEventKey: event}; NSError *error = [NSError errorWithDomain:PTPusherErrorDomain code:PTPusherSubscriptionError userInfo:userInfo]; [pusher.delegate pusher:pusher didFailToSubscribeToChannel:self withError:error]; } @@ -121,7 +121,7 @@ - (void)handleSubcribeErrorEvent:(PTPusherEvent *)event - (void)authorizeWithCompletionHandler:(void(^)(BOOL, NSDictionary *, NSError *))completionHandler { - completionHandler(YES, [NSDictionary dictionary], nil); // public channels do not require authorization + completionHandler(YES, @{}, nil); // public channels do not require authorization } #pragma mark - Binding to events @@ -174,7 +174,7 @@ - (void)dispatchEvent:(PTPusherEvent *)event [[NSNotificationCenter defaultCenter] postNotificationName:PTPusherEventReceivedNotification object:self - userInfo:[NSDictionary dictionaryWithObject:event forKey:PTPusherEventUserInfoKey]]; + userInfo:@{PTPusherEventUserInfoKey: event}]; } #pragma mark - Internal use only @@ -184,7 +184,7 @@ - (void)subscribeWithAuthorization:(NSDictionary *)authData if (self.isSubscribed) return; [pusher sendEventNamed:@"pusher:subscribe" - data:[NSDictionary dictionaryWithObject:self.name forKey:@"channel"] + data:@{@"channel": self.name} channel:nil]; } @@ -262,7 +262,7 @@ - (void)subscribeWithAuthorization:(NSDictionary *)authData if (self.isSubscribed) return; NSMutableDictionary *eventData = [authData mutableCopy]; - [eventData setObject:self.name forKey:@"channel"]; + eventData[@"channel"] = self.name; [pusher sendEventNamed:@"pusher:subscribe" data:eventData @@ -526,7 +526,7 @@ - (PTPusherChannelMember *)handleMemberAdded:(NSDictionary *)memberData PTPusherChannelMember *member = [self memberWithID:memberData[@"user_id"]]; if (member == nil) { member = [[PTPusherChannelMember alloc] initWithUserID:memberData[@"user_id"] userInfo:memberData[@"user_info"]]; - [_members setObject:member forKey:member.userID]; + _members[member.userID] = member; } return member; } diff --git a/Library/PTPusherChannelAuthorizationOperation.m b/Library/PTPusherChannelAuthorizationOperation.m index db0463f9..147b7478 100644 --- a/Library/PTPusherChannelAuthorizationOperation.m +++ b/Library/PTPusherChannelAuthorizationOperation.m @@ -47,8 +47,8 @@ + (id)operationWithAuthorizationURL:(NSURL *)URL channelName:(NSString *)channel [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; NSMutableDictionary *requestData = [NSMutableDictionary dictionary]; - [requestData setObject:socketID forKey:@"socket_id"]; - [requestData setObject:channelName forKey:@"channel_name"]; + requestData[@"socket_id"] = socketID; + requestData[@"channel_name"] = channelName; [request setHTTPBody:[[requestData sortedQueryString] dataUsingEncoding:NSUTF8StringEncoding]]; @@ -63,7 +63,7 @@ - (void)finish } if (self.connectionError) { - self.error = [NSError errorWithDomain:PTPusherErrorDomain code:PTPusherChannelAuthorizationConnectionError userInfo:[NSDictionary dictionaryWithObject:self.connectionError forKey:NSUnderlyingErrorKey]]; + self.error = [NSError errorWithDomain:PTPusherErrorDomain code:PTPusherChannelAuthorizationConnectionError userInfo:@{NSUnderlyingErrorKey: self.connectionError}]; } else { authorized = YES; @@ -79,10 +79,10 @@ - (void)finish NSDictionary *userInfo = nil; if (authorizationData) { // make sure it isn't nil as a result of invalid JSON first - userInfo = [NSDictionary dictionaryWithObjectsAndKeys:@"Authorization data was not a dictionary", @"reason", authorizationData, @"authorization_data", nil]; + userInfo = @{@"reason": @"Authorization data was not a dictionary", @"authorization_data": authorizationData}; } else { - userInfo = [NSDictionary dictionaryWithObject:@"Authorization data was not valid JSON" forKey:@"reason"]; + userInfo = @{@"reason": @"Authorization data was not valid JSON"}; } self.error = [NSError errorWithDomain:PTPusherErrorDomain code:PTPusherChannelAuthorizationBadResponseError userInfo:userInfo]; @@ -132,7 +132,7 @@ - (BOOL)isAuthorized - (NSDictionary *)authorizationData { - return [NSDictionary dictionary]; + return @{}; } - (NSMutableURLRequest *)mutableURLRequest diff --git a/Library/PTPusherConnection.m b/Library/PTPusherConnection.m index c20d04d7..8898fb33 100644 --- a/Library/PTPusherConnection.m +++ b/Library/PTPusherConnection.m @@ -158,7 +158,7 @@ - (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(NSString *)message } if ([event.name isEqualToString:PTPusherConnectionEstablishedEvent]) { - self.socketID = [event.data objectForKey:@"socket_id"]; + self.socketID = (event.data)[@"socket_id"]; self.state = PTPusherConnectionConnected; [self.delegate pusherConnectionDidConnect:self]; @@ -171,7 +171,7 @@ - (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(NSString *)message - (void)sendPing { - [self send:[NSDictionary dictionaryWithObject:@"pusher:ping" forKey:@"event"]]; + [self send:@{@"event": @"pusher:ping"}]; } - (void)resetPingPongTimer diff --git a/Library/PTPusherEvent.m b/Library/PTPusherEvent.m index 9398bcac..d76b1060 100644 --- a/Library/PTPusherEvent.m +++ b/Library/PTPusherEvent.m @@ -22,10 +22,10 @@ @implementation PTPusherEvent + (id)eventFromMessageDictionary:(NSDictionary *)dictionary { - if ([[dictionary objectForKey:PTPusherEventKey] isEqualToString:@"pusher:error"]) { - return [[PTPusherErrorEvent alloc] initWithEventName:[dictionary objectForKey:PTPusherEventKey] channel:nil data:[dictionary objectForKey:PTPusherDataKey]]; + if ([dictionary[PTPusherEventKey] isEqualToString:@"pusher:error"]) { + return [[PTPusherErrorEvent alloc] initWithEventName:dictionary[PTPusherEventKey] channel:nil data:dictionary[PTPusherDataKey]]; } - return [[self alloc] initWithEventName:[dictionary objectForKey:PTPusherEventKey] channel:[dictionary objectForKey:PTPusherChannelKey] data:[dictionary objectForKey:PTPusherDataKey]]; + return [[self alloc] initWithEventName:dictionary[PTPusherEventKey] channel:dictionary[PTPusherChannelKey] data:dictionary[PTPusherDataKey]]; } - (id)initWithEventName:(NSString *)name channel:(NSString *)channel data:(id)data @@ -65,12 +65,12 @@ @implementation PTPusherErrorEvent - (NSString *)message { - return [self.data objectForKey:@"message"]; + return (self.data)[@"message"]; } - (NSInteger)code { - id eventCode = [self.data objectForKey:@"code"]; + id eventCode = (self.data)[@"code"]; if (eventCode == nil || eventCode == [NSNull null]) { return PTPusherErrorUnknown; diff --git a/Library/PTPusherEventDispatcher.m b/Library/PTPusherEventDispatcher.m index bd873e42..68eda717 100644 --- a/Library/PTPusherEventDispatcher.m +++ b/Library/PTPusherEventDispatcher.m @@ -31,11 +31,11 @@ - (id)init - (PTPusherEventBinding *)addEventListener:(id)listener forEventNamed:(NSString *)eventName { - NSMutableArray *bindingsForEvent = [bindings objectForKey:eventName]; + NSMutableArray *bindingsForEvent = bindings[eventName]; if (bindingsForEvent == nil) { bindingsForEvent = [NSMutableArray array]; - [bindings setObject:bindingsForEvent forKey:eventName]; + bindings[eventName] = bindingsForEvent; } PTPusherEventBinding *binding = [[PTPusherEventBinding alloc] initWithEventListener:listener eventName:eventName]; [bindingsForEvent addObject:binding]; @@ -45,7 +45,7 @@ - (PTPusherEventBinding *)addEventListener:(id)listener forEven - (void)removeBinding:(PTPusherEventBinding *)binding { - NSMutableArray *bindingsForEvent = [bindings objectForKey:binding.eventName]; + NSMutableArray *bindingsForEvent = bindings[binding.eventName]; if ([bindingsForEvent containsObject:binding]) { [binding invalidate]; @@ -67,7 +67,7 @@ - (void)removeAllBindings - (void)dispatchEvent:(PTPusherEvent *)event { - for (PTPusherEventBinding *binding in [bindings objectForKey:event.name]) { + for (PTPusherEventBinding *binding in bindings[event.name]) { [binding dispatchEvent:event]; } } diff --git a/Library/PTPusherMockConnection.m b/Library/PTPusherMockConnection.m index b7a11e56..423ef47d 100644 --- a/Library/PTPusherMockConnection.m +++ b/Library/PTPusherMockConnection.m @@ -31,7 +31,7 @@ - (void)connect NSInteger socketID = (NSInteger)[NSDate timeIntervalSinceReferenceDate]; [self simulateServerEventNamed:PTPusherConnectionEstablishedEvent - data:[NSDictionary dictionaryWithObject:[NSNumber numberWithInteger:socketID] forKey:@"socket_id"]]; + data:@{@"socket_id": @(socketID)}]; } - (void)disconnect @@ -55,14 +55,14 @@ - (void)simulateServerEventNamed:(NSString *)name data:(id)data channel:(NSStrin { NSMutableDictionary *event = [NSMutableDictionary dictionary]; - [event setObject:name forKey:PTPusherEventKey]; + event[PTPusherEventKey] = name; if (data) { - [event setObject:data forKey:PTPusherDataKey]; + event[PTPusherDataKey] = data; } if (channelName) { - [event setObject:channelName forKey:PTPusherChannelKey]; + event[PTPusherChannelKey] = channelName; } NSString *message = [[PTJSON JSONParser] JSONStringFromObject:event]; @@ -92,7 +92,7 @@ - (void)handleSubscribeEvent:(PTPusherEvent *)subscribeEvent { [self simulateServerEventNamed:@"pusher_internal:subscription_succeeded" data:nil - channel:[subscribeEvent.data objectForKey:PTPusherChannelKey]]; + channel:(subscribeEvent.data)[PTPusherChannelKey]]; } @end diff --git a/libPusher-OSX/libPusher-OSX.xcodeproj/project.pbxproj b/libPusher-OSX/libPusher-OSX.xcodeproj/project.pbxproj index de29e6b2..f25f9d24 100644 --- a/libPusher-OSX/libPusher-OSX.xcodeproj/project.pbxproj +++ b/libPusher-OSX/libPusher-OSX.xcodeproj/project.pbxproj @@ -455,6 +455,7 @@ GCC_PREFIX_HEADER = "libPusher-OSX/libPusher-OSX-Prefix.pch"; HEADER_SEARCH_PATHS = "\"$(PROJECT_DIR)/usr/include\""; INFOPLIST_FILE = "libPusher-OSX/libPusher-OSX-Info.plist"; + MACOSX_DEPLOYMENT_TARGET = 10.6.8; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = framework; }; @@ -469,6 +470,7 @@ GCC_PREFIX_HEADER = "libPusher-OSX/libPusher-OSX-Prefix.pch"; HEADER_SEARCH_PATHS = "\"$(PROJECT_DIR)/usr/include\""; INFOPLIST_FILE = "libPusher-OSX/libPusher-OSX-Info.plist"; + MACOSX_DEPLOYMENT_TARGET = 10.6.8; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = framework; }; From b3021a6e3e888f77de17cd7e19ddfb90acc6e8f8 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Tue, 26 Nov 2013 18:56:23 +0000 Subject: [PATCH 55/88] General style updates: * Synthesize by default * Underscore prefix private variables * Move instance variable declarations out of headers and into implementation * Prefer properties in most cases over instance variables * Hide interfaces that do not need to be exposed publicly * Remove conditional compiler checks for pre iOS5 --- Library/PTBlockEventListener.h | 9 -- Library/PTBlockEventListener.m | 16 ++- Library/PTPusher.h | 5 +- Library/PTPusher.m | 8 +- Library/PTPusherAPI.h | 5 +- Library/PTPusherAPI.m | 5 +- Library/PTPusherChannel.h | 19 +--- Library/PTPusherChannel.m | 106 ++++++++---------- .../PTPusherChannelAuthorizationOperation.h | 4 - .../PTPusherChannelAuthorizationOperation.m | 21 ++-- Library/PTPusherConnection.h | 4 - Library/PTPusherConnection.m | 4 - Library/PTPusherEvent.h | 4 +- Library/PTPusherEvent.m | 5 - Library/PTPusherEventDispatcher.m | 20 ++-- Library/PTTargetActionEventListener.h | 8 -- Library/PTTargetActionEventListener.m | 12 +- 17 files changed, 89 insertions(+), 166 deletions(-) diff --git a/Library/PTBlockEventListener.h b/Library/PTBlockEventListener.h index 3b23276b..6db2b46a 100644 --- a/Library/PTBlockEventListener.h +++ b/Library/PTBlockEventListener.h @@ -10,17 +10,8 @@ #import "PTEventListener.h" #import "PTPusherEventDispatcher.h" -@class PTPusherEvent; - typedef void (^PTBlockEventListenerBlock)(PTPusherEvent *); -@interface PTBlockEventListener : NSObject { - PTBlockEventListenerBlock block; - dispatch_queue_t queue; -} -- (id)initWithBlock:(PTBlockEventListenerBlock)aBlock dispatchQueue:(dispatch_queue_t)queue; -@end - @interface PTPusherEventDispatcher (PTBlockEventFactory) - (PTPusherEventBinding *)addEventListenerForEventNamed:(NSString *)eventName diff --git a/Library/PTBlockEventListener.m b/Library/PTBlockEventListener.m index 4bc624ca..65dca87b 100644 --- a/Library/PTBlockEventListener.m +++ b/Library/PTBlockEventListener.m @@ -8,8 +8,12 @@ #import "PTBlockEventListener.h" +@interface PTBlockEventListener : NSObject +@end @implementation PTBlockEventListener { + PTBlockEventListenerBlock _block; + dispatch_queue_t _queue; BOOL _invalid; } @@ -18,11 +22,11 @@ - (id)initWithBlock:(PTBlockEventListenerBlock)aBlock dispatchQueue:(dispatch_qu NSParameterAssert(aBlock); if ((self = [super init])) { - block = [aBlock copy]; - queue = aQueue; + _block = [aBlock copy]; + _queue = aQueue; _invalid = NO; #if !OS_OBJECT_USE_OBJC - dispatch_retain(queue); + dispatch_retain(_queue); #endif } return self; @@ -31,7 +35,7 @@ - (id)initWithBlock:(PTBlockEventListenerBlock)aBlock dispatchQueue:(dispatch_qu - (void)dealloc { #if !OS_OBJECT_USE_OBJC - dispatch_release(queue); + dispatch_release(_queue); #endif } @@ -42,9 +46,9 @@ - (void)invalidate - (void)dispatchEvent:(PTPusherEvent *)event { - dispatch_async(queue, ^{ + dispatch_async(_queue, ^{ if (!_invalid) { - block(event); + _block(event); } }); } diff --git a/Library/PTPusher.h b/Library/PTPusher.h index 84c0a692..b8ef9b5d 100644 --- a/Library/PTPusher.h +++ b/Library/PTPusher.h @@ -78,10 +78,7 @@ extern NSString *const PTPusherErrorUnderlyingEventKey; Note: due to various problems people have had connecting to Pusher without SSL over a 3G connection, it is highly recommend that you use SSL. For this reason, SSL is enabled by default. */ -@interface PTPusher : NSObject { - PTPusherEventDispatcher *dispatcher; - NSMutableDictionary *channels; -} +@interface PTPusher : NSObject ///------------------------------------------------------------------------------------/ /// @name Properties diff --git a/Library/PTPusher.m b/Library/PTPusher.m index 16d113cb..30ffe558 100644 --- a/Library/PTPusher.m +++ b/Library/PTPusher.m @@ -59,14 +59,10 @@ @implementation PTPusher { NSOperationQueue *authorizationQueue; NSUInteger _numberOfReconnectAttempts; NSUInteger _maximumNumberOfReconnectAttempts; + PTPusherEventDispatcher *dispatcher; + NSMutableDictionary *channels; } -@synthesize connection = _connection; -@synthesize delegate; -@synthesize reconnectAutomatically; -@synthesize reconnectDelay = _reconnectDelay; -@synthesize authorizationURL; - - (id)initWithConnection:(PTPusherConnection *)connection connectAutomatically:(BOOL)connectAutomatically { if ((self = [self initWithConnection:connection])) { diff --git a/Library/PTPusherAPI.h b/Library/PTPusherAPI.h index d843535a..ce98f1d8 100644 --- a/Library/PTPusherAPI.h +++ b/Library/PTPusherAPI.h @@ -19,10 +19,7 @@ As well as your Pusher API key, you will also need your app ID and secret key for signing requests. */ -@interface PTPusherAPI : NSObject { - NSString *key, *appID, *secretKey; - NSOperationQueue *operationQueue; -} +@interface PTPusherAPI : NSObject ///------------------------------------------------------------------------------------/ /// @name Initialisation diff --git a/Library/PTPusherAPI.m b/Library/PTPusherAPI.m index 2aeed084..9931f85d 100644 --- a/Library/PTPusherAPI.m +++ b/Library/PTPusherAPI.m @@ -15,7 +15,10 @@ #define kPUSHER_API_DEFAULT_HOST @"api.pusherapp.com" -@implementation PTPusherAPI +@implementation PTPusherAPI { + NSString *key, *appID, *secretKey; + NSOperationQueue *operationQueue; +} - (id)initWithKey:(NSString *)aKey appID:(NSString *)anAppID secretKey:(NSString *)aSecretKey { diff --git a/Library/PTPusherChannel.h b/Library/PTPusherChannel.h index 57aa489c..16ba03ba 100644 --- a/Library/PTPusherChannel.h +++ b/Library/PTPusherChannel.h @@ -36,16 +36,7 @@ Channels can be subscribed to or unsubscribed to at any time, even before the initial Pusher connection has been established. */ -@interface PTPusherChannel : NSObject { - NSString *name; -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_5_0 - __weak PTPusher *pusher; -#else - __unsafe_unretained PTPusher *pusher; -#endif - PTPusherEventDispatcher *dispatcher; - NSMutableArray *internalBindings; -} +@interface PTPusherChannel : NSObject ///------------------------------------------------------------------------------------/ /// @name Properties @@ -107,9 +98,7 @@ Only private and presence channels support the triggering client events. */ -@interface PTPusherPrivateChannel : PTPusherChannel { - NSMutableArray *clientEventBuffer; -} +@interface PTPusherPrivateChannel : PTPusherChannel ///------------------------------------------------------------------------------------/ /// @name Triggering events @@ -163,11 +152,7 @@ The presence delegate will be notified of presence channel-specific events, such as the initial member list on subscription and member added/removed events. */ -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_5_0 @property (nonatomic, weak) id presenceDelegate; -#else -@property (nonatomic, unsafe_unretained) id presenceDelegate; -#endif /** Returns the channel member list. */ diff --git a/Library/PTPusherChannel.m b/Library/PTPusherChannel.m index 56f2a755..ededbb7c 100644 --- a/Library/PTPusherChannel.m +++ b/Library/PTPusherChannel.m @@ -21,17 +21,17 @@ - (void)__unsubscribeFromChannel:(PTPusherChannel *)channel; - (void)beginAuthorizationOperation:(PTPusherChannelAuthorizationOperation *)operation; @end -@interface PTPusherChannel () +@interface PTPusherChannel () +@property (nonatomic, weak) PTPusher *pusher; +@property (nonatomic, strong) PTPusherEventDispatcher *dispatcher; @property (nonatomic, assign, readwrite) BOOL subscribed; +@property (nonatomic, readonly) NSMutableArray *internalBindings; @end #pragma mark - @implementation PTPusherChannel -@synthesize name; -@synthesize subscribed; - + (id)channelWithName:(NSString *)name pusher:(PTPusher *)pusher { if ([name hasPrefix:@"private-"]) { @@ -46,10 +46,10 @@ + (id)channelWithName:(NSString *)name pusher:(PTPusher *)pusher - (id)initWithName:(NSString *)channelName pusher:(PTPusher *)aPusher { if (self = [super init]) { - name = [channelName copy]; - pusher = aPusher; - dispatcher = [[PTPusherEventDispatcher alloc] init]; - internalBindings = [[NSMutableArray alloc] init]; + _name = [channelName copy]; + _pusher = aPusher; + _dispatcher = [[PTPusherEventDispatcher alloc] init]; + _internalBindings = [[NSMutableArray alloc] init]; /* Set up event handlers for pre-defined channel events @@ -58,20 +58,15 @@ - (id)initWithName:(NSString *)channelName pusher:(PTPusher *)aPusher Using a target-action binding will create a retain cycle between the channel and the target/action binding object. */ - -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_5_0 __weak PTPusherChannel *weakChannel = self; -#else - __unsafe_unretained PTPusherChannel *weakChannel = self; -#endif - [internalBindings addObject: + [self.internalBindings addObject: [self bindToEventNamed:@"pusher_internal:subscription_succeeded" handleWithBlock:^(PTPusherEvent *event) { [weakChannel handleSubscribeEvent:event]; }]]; - [internalBindings addObject: + [self.internalBindings addObject: [self bindToEventNamed:@"subscription_error" handleWithBlock:^(PTPusherEvent *event) { [weakChannel handleSubcribeErrorEvent:event]; @@ -82,8 +77,8 @@ - (id)initWithName:(NSString *)channelName pusher:(PTPusher *)aPusher - (void)dealloc { - [internalBindings enumerateObjectsUsingBlock:^(id object, NSUInteger index, BOOL *stop) { - [dispatcher removeBinding:object]; + [self.internalBindings enumerateObjectsUsingBlock:^(id object, NSUInteger index, BOOL *stop) { + [_dispatcher removeBinding:object]; }]; } @@ -103,17 +98,17 @@ - (void)handleSubscribeEvent:(PTPusherEvent *)event { self.subscribed = YES; - if ([pusher.delegate respondsToSelector:@selector(pusher:didSubscribeToChannel:)]) { - [pusher.delegate pusher:pusher didSubscribeToChannel:self]; + if ([self.pusher.delegate respondsToSelector:@selector(pusher:didSubscribeToChannel:)]) { + [self.pusher.delegate pusher:self.pusher didSubscribeToChannel:self]; } } - (void)handleSubcribeErrorEvent:(PTPusherEvent *)event { - if ([pusher.delegate respondsToSelector:@selector(pusher:didFailToSubscribeToChannel:withError:)]) { + if ([self.pusher.delegate respondsToSelector:@selector(pusher:didFailToSubscribeToChannel:withError:)]) { NSDictionary *userInfo = @{PTPusherErrorUnderlyingEventKey: event}; NSError *error = [NSError errorWithDomain:PTPusherErrorDomain code:PTPusherSubscriptionError userInfo:userInfo]; - [pusher.delegate pusher:pusher didFailToSubscribeToChannel:self withError:error]; + [self.pusher.delegate pusher:self.pusher didFailToSubscribeToChannel:self withError:error]; } } @@ -128,7 +123,7 @@ - (void)authorizeWithCompletionHandler:(void(^)(BOOL, NSDictionary *, NSError *) - (PTPusherEventBinding *)bindToEventNamed:(NSString *)eventName target:(id)target action:(SEL)selector { - return [dispatcher addEventListenerForEventNamed:eventName target:target action:selector]; + return [self.dispatcher addEventListenerForEventNamed:eventName target:target action:selector]; } - (PTPusherEventBinding *)bindToEventNamed:(NSString *)eventName handleWithBlock:(PTPusherEventBlockHandler)block @@ -138,12 +133,12 @@ - (PTPusherEventBinding *)bindToEventNamed:(NSString *)eventName handleWithBlock - (PTPusherEventBinding *)bindToEventNamed:(NSString *)eventName handleWithBlock:(PTPusherEventBlockHandler)block queue:(dispatch_queue_t)queue { - return [dispatcher addEventListenerForEventNamed:eventName block:block queue:queue]; + return [self.dispatcher addEventListenerForEventNamed:eventName block:block queue:queue]; } - (void)removeBinding:(PTPusherEventBinding *)binding { - [dispatcher removeBinding:binding]; + [self.dispatcher removeBinding:binding]; } - (void)removeAllBindings @@ -152,16 +147,16 @@ - (void)removeAllBindings // need to unpack the bindings from the nested arrays, so we can // iterate over them safely whilst removing them from the dispatcher - for (NSArray *bindingsArray in [dispatcher.bindings allValues]) { + for (NSArray *bindingsArray in [self.dispatcher.bindings allValues]) { for (PTPusherEventBinding *binding in bindingsArray) { - if (![internalBindings containsObject:binding]) { + if (![self.internalBindings containsObject:binding]) { [bindingsToRemove addObject:binding]; } } } for (PTPusherEventBinding *binding in bindingsToRemove) { - [dispatcher removeBinding:binding]; + [self.dispatcher removeBinding:binding]; } } @@ -169,7 +164,7 @@ - (void)removeAllBindings - (void)dispatchEvent:(PTPusherEvent *)event { - [dispatcher dispatchEvent:event]; + [self.dispatcher dispatchEvent:event]; [[NSNotificationCenter defaultCenter] postNotificationName:PTPusherEventReceivedNotification @@ -183,14 +178,14 @@ - (void)subscribeWithAuthorization:(NSDictionary *)authData { if (self.isSubscribed) return; - [pusher sendEventNamed:@"pusher:subscribe" + [self.pusher sendEventNamed:@"pusher:subscribe" data:@{@"channel": self.name} channel:nil]; } - (void)unsubscribe { - [pusher __unsubscribeFromChannel:self]; + [self.pusher __unsubscribeFromChannel:self]; } - (void)handleDisconnect @@ -203,16 +198,16 @@ - (void)handleDisconnect #pragma mark - @implementation PTPusherPrivateChannel { - NSOperationQueue *clientEventQueue; + NSOperationQueue *_clientEventQueue; } - (id)initWithName:(NSString *)channelName pusher:(PTPusher *)aPusher { if ((self = [super initWithName:channelName pusher:aPusher])) { - clientEventQueue = [[NSOperationQueue alloc] init]; - clientEventQueue.maxConcurrentOperationCount = 1; - clientEventQueue.name = @"com.pusher.libPusher.clientEventQueue"; - clientEventQueue.suspended = YES; + _clientEventQueue = [[NSOperationQueue alloc] init]; + _clientEventQueue.maxConcurrentOperationCount = 1; + _clientEventQueue.name = @"com.pusher.libPusher.clientEventQueue"; + _clientEventQueue.suspended = YES; } return self; } @@ -220,13 +215,13 @@ - (id)initWithName:(NSString *)channelName pusher:(PTPusher *)aPusher - (void)handleSubscribeEvent:(PTPusherEvent *)event { [super handleSubscribeEvent:event]; - [clientEventQueue setSuspended:NO]; + [_clientEventQueue setSuspended:NO]; } - (void)handleDisconnect { [super handleDisconnect]; - [clientEventQueue setSuspended:YES]; + [_clientEventQueue setSuspended:YES]; } - (BOOL)isPrivate @@ -236,7 +231,7 @@ - (BOOL)isPrivate - (void)authorizeWithCompletionHandler:(void(^)(BOOL, NSDictionary *, NSError *))completionHandler { - PTPusherChannelAuthorizationOperation *authOperation = [PTPusherChannelAuthorizationOperation operationWithAuthorizationURL:pusher.authorizationURL channelName:self.name socketID:pusher.connection.socketID]; + PTPusherChannelAuthorizationOperation *authOperation = [PTPusherChannelAuthorizationOperation operationWithAuthorizationURL:self.pusher.authorizationURL channelName:self.name socketID:self.pusher.connection.socketID]; [authOperation setCompletionHandler:^(PTPusherChannelAuthorizationOperation *operation) { completionHandler(operation.isAuthorized, operation.authorizationData, operation.error); @@ -245,16 +240,16 @@ - (void)authorizeWithCompletionHandler:(void(^)(BOOL, NSDictionary *, NSError *) #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" NSLog(@"willAuthorizeChannelWithRequest: is deprecated and will be removed in 1.6. Use pusher:willAuthorizeChannel:withRequest: instead."); - if ([pusher.delegate respondsToSelector:@selector(pusher:willAuthorizeChannelWithRequest:)]) { // deprecated call - [pusher.delegate pusher:pusher willAuthorizeChannelWithRequest:authOperation.mutableURLRequest]; + if ([self.pusher.delegate respondsToSelector:@selector(pusher:willAuthorizeChannelWithRequest:)]) { // deprecated call + [self.pusher.delegate pusher:self.pusher willAuthorizeChannelWithRequest:authOperation.mutableURLRequest]; } #pragma clang diagnostic pop - if ([pusher.delegate respondsToSelector:@selector(pusher:willAuthorizeChannel:withRequest:)]) { - [pusher.delegate pusher:pusher willAuthorizeChannel:self withRequest:authOperation.mutableURLRequest]; + if ([self.pusher.delegate respondsToSelector:@selector(pusher:willAuthorizeChannel:withRequest:)]) { + [self.pusher.delegate pusher:self.pusher willAuthorizeChannel:self withRequest:authOperation.mutableURLRequest]; } - [pusher beginAuthorizationOperation:authOperation]; + [self.pusher beginAuthorizationOperation:authOperation]; } - (void)subscribeWithAuthorization:(NSDictionary *)authData @@ -264,7 +259,7 @@ - (void)subscribeWithAuthorization:(NSDictionary *)authData NSMutableDictionary *eventData = [authData mutableCopy]; eventData[@"channel"] = self.name; - [pusher sendEventNamed:@"pusher:subscribe" + [self.pusher sendEventNamed:@"pusher:subscribe" data:eventData channel:nil]; } @@ -277,16 +272,10 @@ - (void)triggerEventNamed:(NSString *)eventName data:(id)eventData eventName = [@"client-" stringByAppendingString:eventName]; } -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_5_0 - __weak PTPusherChannel *weakSelf = self; - __weak PTPusher *weakPusher = pusher; -#else - __unsafe_unretained PTPusherChannel *weakSelf = self; - __unsafe_unretained PTPusher *weakPusher = pusher; -#endif + __weak PTPusherChannel *weakSelf = self; - [clientEventQueue addOperationWithBlock:^{ - [weakPusher sendEventNamed:eventName data:eventData channel:weakSelf.name]; + [_clientEventQueue addOperationWithBlock:^{ + [weakSelf.pusher sendEventNamed:eventName data:eventData channel:weakSelf.name]; }]; } @@ -307,9 +296,6 @@ - (PTPusherChannelMember *)handleMemberRemoved:(NSDictionary *)memberData; @implementation PTPusherPresenceChannel -@synthesize presenceDelegate; -@synthesize members = _members; - - (id)initWithName:(NSString *)channelName pusher:(PTPusher *)aPusher { if ((self = [super initWithName:channelName pusher:aPusher])) { @@ -318,19 +304,15 @@ - (id)initWithName:(NSString *)channelName pusher:(PTPusher *)aPusher /* Set up event handlers for pre-defined channel events. As above, use blocks as proxies to a weak channel reference to avoid retain cycles. */ -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_5_0 __weak PTPusherPresenceChannel *weakChannel = self; -#else - __unsafe_unretained PTPusherPresenceChannel *weakChannel = self; -#endif - [internalBindings addObject: + [self.internalBindings addObject: [self bindToEventNamed:@"pusher_internal:member_added" handleWithBlock:^(PTPusherEvent *event) { [weakChannel handleMemberAddedEvent:event]; }]]; - [internalBindings addObject: + [self.internalBindings addObject: [self bindToEventNamed:@"pusher_internal:member_removed" handleWithBlock:^(PTPusherEvent *event) { [weakChannel handleMemberRemovedEvent:event]; diff --git a/Library/PTPusherChannelAuthorizationOperation.h b/Library/PTPusherChannelAuthorizationOperation.h index 5a7be70b..e30a50ac 100644 --- a/Library/PTPusherChannelAuthorizationOperation.h +++ b/Library/PTPusherChannelAuthorizationOperation.h @@ -19,11 +19,7 @@ typedef enum { @property (nonatomic, copy) void (^completionHandler)(PTPusherChannelAuthorizationOperation *); @property (nonatomic, readonly, getter=isAuthorized) BOOL authorized; @property (nonatomic, strong, readonly) NSDictionary *authorizationData; -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_5_0 @property (weak, nonatomic, readonly) NSMutableURLRequest *mutableURLRequest; -#else -@property (unsafe_unretained, nonatomic, readonly) NSMutableURLRequest *mutableURLRequest; -#endif @property (nonatomic, readonly) NSError *error; + (id)operationWithAuthorizationURL:(NSURL *)URL channelName:(NSString *)channelName socketID:(NSString *)socketID; diff --git a/Library/PTPusherChannelAuthorizationOperation.m b/Library/PTPusherChannelAuthorizationOperation.m index 147b7478..ab859d8c 100644 --- a/Library/PTPusherChannelAuthorizationOperation.m +++ b/Library/PTPusherChannelAuthorizationOperation.m @@ -22,11 +22,6 @@ @interface PTPusherChannelAuthorizationOperation () @implementation PTPusherChannelAuthorizationOperation -@synthesize authorized; -@synthesize authorizationData; -@synthesize completionHandler; -@synthesize error; - - (NSMutableURLRequest *)mutableURLRequest { // we can be sure this is always mutable @@ -66,20 +61,20 @@ - (void)finish self.error = [NSError errorWithDomain:PTPusherErrorDomain code:PTPusherChannelAuthorizationConnectionError userInfo:@{NSUnderlyingErrorKey: self.connectionError}]; } else { - authorized = YES; + _authorized = YES; if ([URLResponse isKindOfClass:[NSHTTPURLResponse class]]) { - authorized = ([(NSHTTPURLResponse *)URLResponse statusCode] == 200 || [(NSHTTPURLResponse *)URLResponse statusCode] == 201); + _authorized = ([(NSHTTPURLResponse *)URLResponse statusCode] == 200 || [(NSHTTPURLResponse *)URLResponse statusCode] == 201); } - if (authorized) { - authorizationData = [[PTJSON JSONParser] objectFromJSONData:responseData]; + if (_authorized) { + _authorizationData = [[PTJSON JSONParser] objectFromJSONData:responseData]; - if (![authorizationData isKindOfClass:[NSDictionary class]]) { + if (![_authorizationData isKindOfClass:[NSDictionary class]]) { NSDictionary *userInfo = nil; - if (authorizationData) { // make sure it isn't nil as a result of invalid JSON first - userInfo = @{@"reason": @"Authorization data was not a dictionary", @"authorization_data": authorizationData}; + if (_authorizationData) { // make sure it isn't nil as a result of invalid JSON first + userInfo = @{@"reason": @"Authorization data was not a dictionary", @"authorization_data": _authorizationData}; } else { userInfo = @{@"reason": @"Authorization data was not valid JSON"}; @@ -87,7 +82,7 @@ - (void)finish self.error = [NSError errorWithDomain:PTPusherErrorDomain code:PTPusherChannelAuthorizationBadResponseError userInfo:userInfo]; - authorized = NO; + _authorized = NO; } } } diff --git a/Library/PTPusherConnection.h b/Library/PTPusherConnection.h index 570777e0..175efb48 100644 --- a/Library/PTPusherConnection.h +++ b/Library/PTPusherConnection.h @@ -34,11 +34,7 @@ typedef enum { @interface PTPusherConnection : NSObject -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_5_0 @property (nonatomic, weak) id delegate; -#else -@property (nonatomic, unsafe_unretained) id delegate; -#endif @property (nonatomic, readonly, getter=isConnected) BOOL connected; @property (nonatomic, copy, readonly) NSString *socketID; @property (nonatomic, readonly) NSURL *URL; diff --git a/Library/PTPusherConnection.m b/Library/PTPusherConnection.m index 8898fb33..b2023ea3 100644 --- a/Library/PTPusherConnection.m +++ b/Library/PTPusherConnection.m @@ -28,10 +28,6 @@ @implementation PTPusherConnection { NSURLRequest *request; } -@synthesize delegate = _delegate; -@synthesize state; -@synthesize socketID; - - (id)initWithURL:(NSURL *)aURL secure:(BOOL)secure { return [self initWithURL:aURL secure:NO]; diff --git a/Library/PTPusherEvent.h b/Library/PTPusherEvent.h index 9bdc85f2..5dd6e895 100644 --- a/Library/PTPusherEvent.h +++ b/Library/PTPusherEvent.h @@ -17,9 +17,7 @@ extern NSString *const PTPusherChannelKey; All events dispatched by libPusher (via either bindings or notifications) will be represented by instances of this class. */ -@interface PTPusherEvent : NSObject { - NSString *_name; -} +@interface PTPusherEvent : NSObject ///------------------------------------------------------------------------------------/ /// @name Properties diff --git a/Library/PTPusherEvent.m b/Library/PTPusherEvent.m index d76b1060..2ac766e5 100644 --- a/Library/PTPusherEvent.m +++ b/Library/PTPusherEvent.m @@ -15,11 +15,6 @@ @implementation PTPusherEvent -@synthesize name = _name; -@synthesize data = _data; -@synthesize channel = _channel; -@synthesize timeReceived = _timeReceived; - + (id)eventFromMessageDictionary:(NSDictionary *)dictionary { if ([dictionary[PTPusherEventKey] isEqualToString:@"pusher:error"]) { diff --git a/Library/PTPusherEventDispatcher.m b/Library/PTPusherEventDispatcher.m index 68eda717..c2936d7a 100644 --- a/Library/PTPusherEventDispatcher.m +++ b/Library/PTPusherEventDispatcher.m @@ -14,15 +14,13 @@ - (void)invalidate; @end @implementation PTPusherEventDispatcher { - NSMutableDictionary *bindings; + NSMutableDictionary *_bindings; } -@synthesize bindings; - - (id)init { if ((self = [super init])) { - bindings = [[NSMutableDictionary alloc] init]; + _bindings = [[NSMutableDictionary alloc] init]; } return self; } @@ -31,11 +29,11 @@ - (id)init - (PTPusherEventBinding *)addEventListener:(id)listener forEventNamed:(NSString *)eventName { - NSMutableArray *bindingsForEvent = bindings[eventName]; + NSMutableArray *bindingsForEvent = _bindings[eventName]; if (bindingsForEvent == nil) { bindingsForEvent = [NSMutableArray array]; - bindings[eventName] = bindingsForEvent; + _bindings[eventName] = bindingsForEvent; } PTPusherEventBinding *binding = [[PTPusherEventBinding alloc] initWithEventListener:listener eventName:eventName]; [bindingsForEvent addObject:binding]; @@ -45,7 +43,7 @@ - (PTPusherEventBinding *)addEventListener:(id)listener forEven - (void)removeBinding:(PTPusherEventBinding *)binding { - NSMutableArray *bindingsForEvent = bindings[binding.eventName]; + NSMutableArray *bindingsForEvent = _bindings[binding.eventName]; if ([bindingsForEvent containsObject:binding]) { [binding invalidate]; @@ -55,19 +53,19 @@ - (void)removeBinding:(PTPusherEventBinding *)binding - (void)removeAllBindings { - for (NSArray *eventBindings in [bindings allValues]) { + for (NSArray *eventBindings in [_bindings allValues]) { for (PTPusherEventBinding *binding in eventBindings) { [binding invalidate]; } } - [bindings removeAllObjects]; + [_bindings removeAllObjects]; } #pragma mark - Dispatching events - (void)dispatchEvent:(PTPusherEvent *)event { - for (PTPusherEventBinding *binding in bindings[event.name]) { + for (PTPusherEventBinding *binding in _bindings[event.name]) { [binding dispatchEvent:event]; } } @@ -78,8 +76,6 @@ @implementation PTPusherEventBinding { id _eventListener; } -@synthesize eventName = _eventName; - - (id)initWithEventListener:(id)eventListener eventName:(NSString *)eventName { if ((self = [super init])) { diff --git a/Library/PTTargetActionEventListener.h b/Library/PTTargetActionEventListener.h index 43fb235b..74f4e5aa 100644 --- a/Library/PTTargetActionEventListener.h +++ b/Library/PTTargetActionEventListener.h @@ -10,14 +10,6 @@ #import "PTEventListener.h" #import "PTPusherEventDispatcher.h" - -@interface PTTargetActionEventListener : NSObject { - id target; - SEL action; -} -- (id)initWithTarget:(id)aTarget action:(SEL)aSelector; -@end - @interface PTPusherEventDispatcher (PTTargetActionFactory) - (PTPusherEventBinding *)addEventListenerForEventNamed:(NSString *)eventName target:(id)target action:(SEL)action; @end diff --git a/Library/PTTargetActionEventListener.m b/Library/PTTargetActionEventListener.m index b18dd11c..27ea68ec 100644 --- a/Library/PTTargetActionEventListener.m +++ b/Library/PTTargetActionEventListener.m @@ -8,16 +8,20 @@ #import "PTTargetActionEventListener.h" +@interface PTTargetActionEventListener : NSObject +@end @implementation PTTargetActionEventListener { + id _target; + SEL _action; BOOL _invalid; } - (id)initWithTarget:(id)aTarget action:(SEL)aSelector { if (self = [super init]) { - target = aTarget; - action = aSelector; + _target = aTarget; + _action = aSelector; _invalid = NO; } return self; @@ -30,7 +34,7 @@ - (void)invalidate - (NSString *)description; { - return [NSString stringWithFormat:@"", target, NSStringFromSelector(action)]; + return [NSString stringWithFormat:@"", _target, NSStringFromSelector(_action)]; } - (void)dispatchEvent:(PTPusherEvent *)event; @@ -38,7 +42,7 @@ - (void)dispatchEvent:(PTPusherEvent *)event; #pragma clang diagnostic push #pragma clang diagnostic ignored "-Warc-performSelector-leaks" if (!_invalid) { - [target performSelector:action withObject:event]; + [_target performSelector:_action withObject:event]; } #pragma clang diagnostic pop } From 2efad36367747912d70063448963a8026f9a457d Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Tue, 26 Nov 2013 19:06:38 +0000 Subject: [PATCH 56/88] Update header visibility, set OSX deployment target to 10.8 --- .../libPusher-OSX.xcodeproj/project.pbxproj | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/libPusher-OSX/libPusher-OSX.xcodeproj/project.pbxproj b/libPusher-OSX/libPusher-OSX.xcodeproj/project.pbxproj index f25f9d24..51e5566c 100644 --- a/libPusher-OSX/libPusher-OSX.xcodeproj/project.pbxproj +++ b/libPusher-OSX/libPusher-OSX.xcodeproj/project.pbxproj @@ -7,16 +7,16 @@ objects = { /* Begin PBXBuildFile section */ - A3141C4A176F2F4A008330D7 /* Pusher.h in Headers */ = {isa = PBXBuildFile; fileRef = A3141C49176F2F4A008330D7 /* Pusher.h */; }; - A3382DFE1525D0C90025550D /* PTJSON.h in Headers */ = {isa = PBXBuildFile; fileRef = A3382DFB1525D0C90025550D /* PTJSON.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A3141C4A176F2F4A008330D7 /* Pusher.h in Headers */ = {isa = PBXBuildFile; fileRef = A3141C49176F2F4A008330D7 /* Pusher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A3382DFE1525D0C90025550D /* PTJSON.h in Headers */ = {isa = PBXBuildFile; fileRef = A3382DFB1525D0C90025550D /* PTJSON.h */; }; A3382DFF1525D0C90025550D /* PTJSON.m in Sources */ = {isa = PBXBuildFile; fileRef = A3382DFC1525D0C90025550D /* PTJSON.m */; }; - A373A2831562D3B000BFAECE /* PTPusher+Testing.h in Headers */ = {isa = PBXBuildFile; fileRef = A373A2811562D3B000BFAECE /* PTPusher+Testing.h */; }; + A373A2831562D3B000BFAECE /* PTPusher+Testing.h in Headers */ = {isa = PBXBuildFile; fileRef = A373A2811562D3B000BFAECE /* PTPusher+Testing.h */; settings = {ATTRIBUTES = (Public, ); }; }; A373A2841562D3B000BFAECE /* PTPusher+Testing.m in Sources */ = {isa = PBXBuildFile; fileRef = A373A2821562D3B000BFAECE /* PTPusher+Testing.m */; }; A37E161214E4C95C00DCA3A6 /* base64.c in Sources */ = {isa = PBXBuildFile; fileRef = A37E160B14E4C95B00DCA3A6 /* base64.c */; }; A37E161314E4C95C00DCA3A6 /* base64.h in Headers */ = {isa = PBXBuildFile; fileRef = A37E160C14E4C95B00DCA3A6 /* base64.h */; }; A37E161414E4C95C00DCA3A6 /* NSData+SRB64Additions.h in Headers */ = {isa = PBXBuildFile; fileRef = A37E160D14E4C95B00DCA3A6 /* NSData+SRB64Additions.h */; }; A37E161514E4C95C00DCA3A6 /* NSData+SRB64Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = A37E160E14E4C95C00DCA3A6 /* NSData+SRB64Additions.m */; }; - A37E161714E4C95C00DCA3A6 /* SRWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = A37E161014E4C95C00DCA3A6 /* SRWebSocket.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A37E161714E4C95C00DCA3A6 /* SRWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = A37E161014E4C95C00DCA3A6 /* SRWebSocket.h */; }; A37E161814E4C95C00DCA3A6 /* SRWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = A37E161114E4C95C00DCA3A6 /* SRWebSocket.m */; }; A37E161C14E4C9CC00DCA3A6 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A37E161B14E4C9CC00DCA3A6 /* Security.framework */; }; A37E162014E4CA6400DCA3A6 /* libicucore.A.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A37E161F14E4CA6400DCA3A6 /* libicucore.A.dylib */; }; @@ -240,20 +240,20 @@ A3CA679914DBCB95003E2F1E /* PTPusherChannelAuthorizationOperation.h in Headers */, A3CA679B14DBCB95003E2F1E /* PTPusherConnection.h in Headers */, A3CA679F14DBCB95003E2F1E /* PTPusherDelegate.h in Headers */, + A373A2831562D3B000BFAECE /* PTPusher+Testing.h in Headers */, A3CA67A014DBCB95003E2F1E /* PTPusherErrors.h in Headers */, A3CA67A114DBCB95003E2F1E /* PTPusherEvent.h in Headers */, + A3141C4A176F2F4A008330D7 /* Pusher.h in Headers */, A3CA67A314DBCB95003E2F1E /* PTPusherEventDispatcher.h in Headers */, A3CA67A514DBCB95003E2F1E /* PTPusherEventPublisher.h in Headers */, A3CA67A614DBCB95003E2F1E /* PTPusherPresenceChannelDelegate.h in Headers */, A3CA67A714DBCB95003E2F1E /* PTTargetActionEventListener.h in Headers */, + A37E161714E4C95C00DCA3A6 /* SRWebSocket.h in Headers */, + A3382DFE1525D0C90025550D /* PTJSON.h in Headers */, A3CA67A914DBCB95003E2F1E /* PTURLRequestOperation.h in Headers */, A37E161314E4C95C00DCA3A6 /* base64.h in Headers */, A37E161414E4C95C00DCA3A6 /* NSData+SRB64Additions.h in Headers */, - A37E161714E4C95C00DCA3A6 /* SRWebSocket.h in Headers */, A37E168214E5736300DCA3A6 /* PTPusherMacros.h in Headers */, - A3382DFE1525D0C90025550D /* PTJSON.h in Headers */, - A373A2831562D3B000BFAECE /* PTPusher+Testing.h in Headers */, - A3141C4A176F2F4A008330D7 /* Pusher.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -455,7 +455,7 @@ GCC_PREFIX_HEADER = "libPusher-OSX/libPusher-OSX-Prefix.pch"; HEADER_SEARCH_PATHS = "\"$(PROJECT_DIR)/usr/include\""; INFOPLIST_FILE = "libPusher-OSX/libPusher-OSX-Info.plist"; - MACOSX_DEPLOYMENT_TARGET = 10.6.8; + MACOSX_DEPLOYMENT_TARGET = 10.8; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = framework; }; @@ -470,7 +470,7 @@ GCC_PREFIX_HEADER = "libPusher-OSX/libPusher-OSX-Prefix.pch"; HEADER_SEARCH_PATHS = "\"$(PROJECT_DIR)/usr/include\""; INFOPLIST_FILE = "libPusher-OSX/libPusher-OSX-Info.plist"; - MACOSX_DEPLOYMENT_TARGET = 10.6.8; + MACOSX_DEPLOYMENT_TARGET = 10.8; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = framework; }; From 0ebcf51fd66999d52b9e8cbae9820dabe5e4feb8 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Tue, 26 Nov 2013 19:09:29 +0000 Subject: [PATCH 57/88] Fix a weird issue where the Xcode project had references to a removed file. --- libPusher.xcodeproj/project.pbxproj | 26 ++------------------------ 1 file changed, 2 insertions(+), 24 deletions(-) diff --git a/libPusher.xcodeproj/project.pbxproj b/libPusher.xcodeproj/project.pbxproj index c1ad0fa6..6e2d6259 100755 --- a/libPusher.xcodeproj/project.pbxproj +++ b/libPusher.xcodeproj/project.pbxproj @@ -23,9 +23,7 @@ A3226317155D481C00A46067 /* PTPusherMockConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = A3173758155D2D21007E4BBA /* PTPusherMockConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; A32EE793184364D800E3B072 /* PTPusherChannel_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A32EE792184364D800E3B072 /* PTPusherChannel_Private.h */; }; A3382DE31525C3F70025550D /* PTJSON.m in Sources */ = {isa = PBXBuildFile; fileRef = A30950121525C272008F695B /* PTJSON.m */; }; - A3382DE41525C3FA0025550D /* PTJSON.h in Headers */ = {isa = PBXBuildFile; fileRef = A30950111525C272008F695B /* PTJSON.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A3382DF61525D06C0025550D /* JSONKit.h in Headers */ = {isa = PBXBuildFile; fileRef = A3382DEA1525D01B0025550D /* JSONKit.h */; }; - A3382E011525D0D50025550D /* PTJSONParser.h in Headers */ = {isa = PBXBuildFile; fileRef = A309500F1525C236008F695B /* PTJSONParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A3382DE41525C3FA0025550D /* PTJSON.h in Headers */ = {isa = PBXBuildFile; fileRef = A30950111525C272008F695B /* PTJSON.h */; }; A35281D013F721A8000687C0 /* PTPusherConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = A35281CE13F721A8000687C0 /* PTPusherConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; A35281D113F721A8000687C0 /* PTPusherConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = A35281CF13F721A8000687C0 /* PTPusherConnection.m */; }; A35281D313F72E03000687C0 /* PTPusherEventPublisher.h in Headers */ = {isa = PBXBuildFile; fileRef = A35281D213F72E03000687C0 /* PTPusherEventPublisher.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -51,7 +49,6 @@ A373A2CA1565248C00BFAECE /* PusherClientSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = A373A2C91565248C00BFAECE /* PusherClientSpec.m */; }; A37E158914E4997700DCA3A6 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A37E158814E4997700DCA3A6 /* Security.framework */; }; A37E158D14E499E000DCA3A6 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A37E158814E4997700DCA3A6 /* Security.framework */; }; - A37E158F14E49F2D00DCA3A6 /* SRWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = A37E158E14E49F2D00DCA3A6 /* SRWebSocket.h */; settings = {ATTRIBUTES = (Public, ); }; }; A37E15EA14E4BBBA00DCA3A6 /* PusherExampleMenuViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A3AC28BD13F75BF1001C4808 /* PusherExampleMenuViewController.m */; }; A37E160814E4C87500DCA3A6 /* libicucore.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A37E160714E4C87500DCA3A6 /* libicucore.dylib */; }; A37E167414E572C900DCA3A6 /* PTPusherMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = A37E167314E572C900DCA3A6 /* PTPusherMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -75,7 +72,6 @@ A3A9FA4F1496EEE000F83617 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A3D1D0B51157CCDE009A12AD /* CFNetwork.framework */; }; A3AC28B613F75530001C4808 /* PTURLRequestOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A3AC28B413F75530001C4808 /* PTURLRequestOperation.h */; }; A3AC28B713F75530001C4808 /* PTURLRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = A3AC28B513F75530001C4808 /* PTURLRequestOperation.m */; }; - A3AC28BF13F75BF1001C4808 /* PusherExampleMenuViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = A3AC28BC13F75BF1001C4808 /* PusherExampleMenuViewController.h */; }; A3AC28C313F76C51001C4808 /* PTPusherChannelAuthorizationOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A3AC28C113F76C50001C4808 /* PTPusherChannelAuthorizationOperation.h */; }; A3AC28C413F76C51001C4808 /* PTPusherChannelAuthorizationOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = A3AC28C213F76C50001C4808 /* PTPusherChannelAuthorizationOperation.m */; }; A3B2931F14D8D96900C6B79F /* PTPusherPresenceChannelDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = A39E238A13F7E85C0083CAD7 /* PTPusherPresenceChannelDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -140,7 +136,6 @@ A304895E1667A8A6009511CB /* PTPusherChannelAuthorizationOperationSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PTPusherChannelAuthorizationOperationSpec.m; sourceTree = ""; }; A30575CE15233C1200DA19BD /* PTPusherPresenceChannelSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PTPusherPresenceChannelSpec.m; sourceTree = ""; }; A30790D911583B7200EBFFF8 /* Constants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Constants.h; sourceTree = ""; }; - A309500F1525C236008F695B /* PTJSONParser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PTJSONParser.h; sourceTree = ""; }; A30950111525C272008F695B /* PTJSON.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTJSON.h; sourceTree = ""; }; A30950121525C272008F695B /* PTJSON.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PTJSON.m; sourceTree = ""; }; A31577F714D0731B000136A9 /* Pods-specs.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Pods-specs.xcconfig"; path = "Pods/Pods-specs.xcconfig"; sourceTree = ""; }; @@ -151,7 +146,6 @@ A317375D155D38C4007E4BBA /* PTPusher+Testing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "PTPusher+Testing.h"; sourceTree = ""; }; A317375E155D38C4007E4BBA /* PTPusher+Testing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "PTPusher+Testing.m"; sourceTree = ""; }; A32EE792184364D800E3B072 /* PTPusherChannel_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTPusherChannel_Private.h; sourceTree = ""; }; - A3382DEA1525D01B0025550D /* JSONKit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JSONKit.h; path = Library/JSONKit.h; sourceTree = SOURCE_ROOT; }; A35281CE13F721A8000687C0 /* PTPusherConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTPusherConnection.h; sourceTree = ""; }; A35281CF13F721A8000687C0 /* PTPusherConnection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PTPusherConnection.m; sourceTree = ""; }; A35281D213F72E03000687C0 /* PTPusherEventPublisher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTPusherEventPublisher.h; sourceTree = ""; }; @@ -174,7 +168,6 @@ A369CFE114FDAD9200A8D56B /* PrivateChannelsSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PrivateChannelsSpec.m; sourceTree = ""; }; A373A2C91565248C00BFAECE /* PusherClientSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PusherClientSpec.m; sourceTree = ""; }; A37E158814E4997700DCA3A6 /* Security.framework */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; - A37E158E14E49F2D00DCA3A6 /* SRWebSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SRWebSocket.h; path = Pods/Headers/SocketRocket/SRWebSocket.h; sourceTree = SOURCE_ROOT; }; A37E160714E4C87500DCA3A6 /* libicucore.dylib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "compiled.mach-o.dylib"; name = libicucore.dylib; path = usr/lib/libicucore.dylib; sourceTree = SDKROOT; }; A37E167314E572C900DCA3A6 /* PTPusherMacros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTPusherMacros.h; sourceTree = ""; }; A394E6EF18451C99004C70A2 /* PTPusherSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PTPusherSpec.m; sourceTree = ""; }; @@ -334,7 +327,6 @@ isa = PBXGroup; children = ( A3D1D2711157F961009A12AD /* Sample Application */, - A3D1D0991157CC3F009A12AD /* Vendor */, 080E96DDFE201D6D7F000001 /* Library */, A3A19FB211580DC8001EF877 /* Specs */, A3A9F95D1496E96100F83617 /* Functional Specs */, @@ -450,15 +442,6 @@ name = "Supporting Files"; sourceTree = ""; }; - A3D1D0991157CC3F009A12AD /* Vendor */ = { - isa = PBXGroup; - children = ( - A3382DEA1525D01B0025550D /* JSONKit.h */, - A37E158E14E49F2D00DCA3A6 /* SRWebSocket.h */, - ); - path = Vendor; - sourceTree = ""; - }; A3D1D2711157F961009A12AD /* Sample Application */ = { isa = PBXGroup; children = ( @@ -510,7 +493,6 @@ A3AC28B513F75530001C4808 /* PTURLRequestOperation.m */, A30950111525C272008F695B /* PTJSON.h */, A30950121525C272008F695B /* PTJSON.m */, - A309500F1525C236008F695B /* PTJSONParser.h */, A3FE429B11811EE8009CF5D7 /* NSString+Hashing.h */, A3FE429C11811EE8009CF5D7 /* NSString+Hashing.m */, A3FE42FF11812541009CF5D7 /* NSDictionary+QueryString.h */, @@ -539,18 +521,14 @@ A35281E913F75265000687C0 /* PTPusherAPI.h in Headers */, A3D1D2C711580162009A12AD /* PTEventListener.h in Headers */, A3AC28B613F75530001C4808 /* PTURLRequestOperation.h in Headers */, - A3AC28BF13F75BF1001C4808 /* PusherExampleMenuViewController.h in Headers */, A32EE793184364D800E3B072 /* PTPusherChannel_Private.h in Headers */, A3AC28C313F76C51001C4808 /* PTPusherChannelAuthorizationOperation.h in Headers */, A3B2931F14D8D96900C6B79F /* PTPusherPresenceChannelDelegate.h in Headers */, + A3382DE41525C3FA0025550D /* PTJSON.h in Headers */, A3CA666914D96814003E2F1E /* PTPusherChannel.h in Headers */, A3CA670E14DBBAA1003E2F1E /* PTPusherErrors.h in Headers */, A3CA671514DBBAE1003E2F1E /* NSDictionary+QueryString.h in Headers */, - A37E158F14E49F2D00DCA3A6 /* SRWebSocket.h in Headers */, A37E167414E572C900DCA3A6 /* PTPusherMacros.h in Headers */, - A3382DE41525C3FA0025550D /* PTJSON.h in Headers */, - A3382DF61525D06C0025550D /* JSONKit.h in Headers */, - A3382E011525D0D50025550D /* PTJSONParser.h in Headers */, A317375F155D38C4007E4BBA /* PTPusher+Testing.h in Headers */, A3226317155D481C00A46067 /* PTPusherMockConnection.h in Headers */, 4D81597F1712C6CA0013A485 /* Pusher.h in Headers */, From 2d8a1916350c5ec2f2c8ae68f8c5eacc92b2e6aa Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Tue, 26 Nov 2013 19:17:01 +0000 Subject: [PATCH 58/88] Trying out a build matrix --- .travis.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 9dcf7ffa..1f19311a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,7 @@ language: objective-c -xcode_workspace: libPusher.xcworkspace -xcode_scheme: libPusher -xcode_sdk: iphonesimulator install: true +env: + matrix: + - XCODE_SCHEME=libPusher + - XCODE_SCHEME-libPusher-OSX +script: xctool -workspace libPusher.xcworkspace -scheme $XCODE_SCHEME build From 813676065f10e6d031c84254fc65ccbb57d6cb6e Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Tue, 26 Nov 2013 19:17:48 +0000 Subject: [PATCH 59/88] Specify the simulator and test commands --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 1f19311a..dc1639e3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,4 +4,4 @@ env: matrix: - XCODE_SCHEME=libPusher - XCODE_SCHEME-libPusher-OSX -script: xctool -workspace libPusher.xcworkspace -scheme $XCODE_SCHEME build +script: xctool -workspace libPusher.xcworkspace -scheme $XCODE_SCHEME -sdk iphonesimulator build test From e7f0dcb70dd5023afcb68039547d07b0521e0371 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Tue, 26 Nov 2013 19:20:18 +0000 Subject: [PATCH 60/88] Trying to get env var working in script --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index dc1639e3..08a7516c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,4 +4,4 @@ env: matrix: - XCODE_SCHEME=libPusher - XCODE_SCHEME-libPusher-OSX -script: xctool -workspace libPusher.xcworkspace -scheme $XCODE_SCHEME -sdk iphonesimulator build test +script: "xctool -workspace libPusher.xcworkspace -scheme $XCODE_SCHEME -sdk iphonesimulator build test" From ac498ae713b5f46460b49dae602d09a43b422d71 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Tue, 26 Nov 2013 19:23:44 +0000 Subject: [PATCH 61/88] It helps if you use the right syntax --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 08a7516c..f8f2979d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,5 +3,5 @@ install: true env: matrix: - XCODE_SCHEME=libPusher - - XCODE_SCHEME-libPusher-OSX -script: "xctool -workspace libPusher.xcworkspace -scheme $XCODE_SCHEME -sdk iphonesimulator build test" + - XCODE_SCHEME=libPusher-OSX +script: xctool -workspace libPusher.xcworkspace -scheme $XCODE_SCHEME -sdk iphonesimulator build test From 1a3c79a5580a76a57585d07a9ac6e2e761ea771f Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Tue, 26 Nov 2013 19:26:13 +0000 Subject: [PATCH 62/88] Use the correct SDK for OSX builds. --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index f8f2979d..e409b027 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,6 @@ language: objective-c install: true env: matrix: - - XCODE_SCHEME=libPusher - - XCODE_SCHEME=libPusher-OSX -script: xctool -workspace libPusher.xcworkspace -scheme $XCODE_SCHEME -sdk iphonesimulator build test + - XCODE_SCHEME=libPusher SDK=iphonesimulator + - XCODE_SCHEME=libPusher-OSX SDK=macosx10.9 +script: xctool -workspace libPusher.xcworkspace -scheme $XCODE_SCHEME -sdk $SDK build test From 3b494c412a58809beadc021869abcff2ee326043 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Tue, 26 Nov 2013 19:34:10 +0000 Subject: [PATCH 63/88] Fix Travis badge link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1d3e46bd..633dc544 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # libPusher, an Objective-C client for Pusher -[![Build Status](https://travis-ci.org/lukeredpath/libPusher.png)](https://travis-ci.org/[YOUR_GITHUB_USERNAME]/[YOUR_PROJECT_NAME]) +[![Build Status](https://travis-ci.org/lukeredpath/libPusher.png)](https://travis-ci.org/lukeredpath/libPusher) [Pusher](http://pusherapp.com/) is a hosted service that sits between your web application and the browser that lets you deliver events in real-time using HTML5 WebSockets. From 01cdfe72686c8631f61cf3bc04cdc6c236bb0e22 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Wed, 27 Nov 2013 14:56:19 +0000 Subject: [PATCH 64/88] Added ReactiveCocoa to Podfile. --- Podfile | 3 +- Podfile.lock | 8 + .../ReactiveCocoa/RACObjCRuntime.h | 1 + .../NSArray+RACSequenceAdditions.h | 1 + .../ReactiveCocoa/NSData+RACSupport.h | 1 + .../NSDictionary+RACSequenceAdditions.h | 1 + .../NSEnumerator+RACSequenceAdditions.h | 1 + .../ReactiveCocoa/NSFileHandle+RACSupport.h | 1 + .../NSInvocation+RACTypeParsing.h | 1 + .../NSNotificationCenter+RACSupport.h | 1 + .../ReactiveCocoa/NSObject+RACDeallocating.h | 1 + .../ReactiveCocoa/NSObject+RACDescription.h | 1 + .../ReactiveCocoa/NSObject+RACKVOWrapper.h | 1 + .../ReactiveCocoa/NSObject+RACLifting.h | 1 + .../NSObject+RACPropertySubscribing.h | 1 + .../NSObject+RACSelectorSignal.h | 1 + .../NSOrderedSet+RACSequenceAdditions.h | 1 + .../NSSet+RACSequenceAdditions.h | 1 + .../NSString+RACKeyPathUtilities.h | 1 + .../NSString+RACSequenceAdditions.h | 1 + .../ReactiveCocoa/NSString+RACSupport.h | 1 + .../NSURLConnection+RACSupport.h | 1 + .../ReactiveCocoa/RACArraySequence.h | 1 + .../ReactiveCocoa/RACBacktrace.h | 1 + .../ReactiveCocoa/RACBehaviorSubject.h | 1 + .../ReactiveCocoa/RACBlockTrampoline.h | 1 + .../ReactiveCocoa/ReactiveCocoa/RACChannel.h | 1 + .../ReactiveCocoa/ReactiveCocoa/RACCommand.h | 1 + .../ReactiveCocoa/RACCompoundDisposable.h | 1 + .../ReactiveCocoa/RACDelegateProxy.h | 1 + .../ReactiveCocoa/RACDisposable.h | 1 + .../ReactiveCocoa/RACDynamicSequence.h | 1 + .../ReactiveCocoa/RACDynamicSignal.h | 1 + .../ReactiveCocoa/RACEXTKeyPathCoding.h | 1 + .../ReactiveCocoa/RACEXTRuntimeExtensions.h | 1 + .../ReactiveCocoa/ReactiveCocoa/RACEXTScope.h | 1 + .../ReactiveCocoa/RACEagerSequence.h | 1 + .../ReactiveCocoa/RACEmptySequence.h | 1 + .../ReactiveCocoa/RACEmptySignal.h | 1 + .../ReactiveCocoa/RACErrorSignal.h | 1 + .../ReactiveCocoa/ReactiveCocoa/RACEvent.h | 1 + .../ReactiveCocoa/RACGroupedSignal.h | 1 + .../ReactiveCocoa/RACImmediateScheduler.h | 1 + .../ReactiveCocoa/RACKVOChannel.h | 1 + .../ReactiveCocoa/RACKVOTrampoline.h | 1 + .../RACMulticastConnection+Private.h | 1 + .../ReactiveCocoa/RACMulticastConnection.h | 1 + .../ReactiveCocoa/RACPassthroughSubscriber.h | 1 + .../RACQueueScheduler+Subclass.h | 1 + .../ReactiveCocoa/RACQueueScheduler.h | 1 + .../ReactiveCocoa/RACReplaySubject.h | 1 + .../ReactiveCocoa/RACReturnSignal.h | 1 + .../ReactiveCocoa/RACScheduler+Private.h | 1 + .../ReactiveCocoa/RACScheduler.h | 1 + .../ReactiveCocoa/RACScopedDisposable.h | 1 + .../ReactiveCocoa/ReactiveCocoa/RACSequence.h | 1 + .../ReactiveCocoa/RACSerialDisposable.h | 1 + .../ReactiveCocoa/RACSignal+Operations.h | 1 + .../ReactiveCocoa/ReactiveCocoa/RACSignal.h | 1 + .../ReactiveCocoa/RACSignalSequence.h | 1 + .../ReactiveCocoa/RACStream+Private.h | 1 + .../ReactiveCocoa/ReactiveCocoa/RACStream.h | 1 + .../ReactiveCocoa/RACStringSequence.h | 1 + .../ReactiveCocoa/ReactiveCocoa/RACSubject.h | 1 + .../ReactiveCocoa/RACSubscriber+Private.h | 1 + .../ReactiveCocoa/RACSubscriber.h | 1 + .../RACSubscriptingAssignmentTrampoline.h | 1 + .../ReactiveCocoa/RACSubscriptionScheduler.h | 1 + .../ReactiveCocoa/RACTargetQueueScheduler.h | 1 + .../ReactiveCocoa/RACTestScheduler.h | 1 + .../ReactiveCocoa/ReactiveCocoa/RACTuple.h | 1 + .../ReactiveCocoa/RACTupleSequence.h | 1 + .../ReactiveCocoa/RACUnarySequence.h | 1 + .../ReactiveCocoa/ReactiveCocoa/RACUnit.h | 1 + .../ReactiveCocoa/RACValueTransformer.h | 1 + .../ReactiveCocoa/RACmetamacros.h | 1 + .../ReactiveCocoa/ReactiveCocoa.h | 1 + .../UIActionSheet+RACSignalSupport.h | 1 + .../UIAlertView+RACSignalSupport.h | 1 + .../UIBarButtonItem+RACCommandSupport.h | 1 + .../UIButton+RACCommandSupport.h | 1 + .../UICollectionViewCell+RACSignalSupport.h | 1 + .../UIControl+RACSignalSupport.h | 1 + .../UIControl+RACSignalSupportPrivate.h | 1 + .../UIDatePicker+RACSignalSupport.h | 1 + .../UIGestureRecognizer+RACSignalSupport.h | 1 + .../UIRefreshControl+RACCommandSupport.h | 1 + .../UISegmentedControl+RACSignalSupport.h | 1 + .../ReactiveCocoa/UISlider+RACSignalSupport.h | 1 + .../UIStepper+RACSignalSupport.h | 1 + .../ReactiveCocoa/UISwitch+RACSignalSupport.h | 1 + .../UITableViewCell+RACSignalSupport.h | 1 + .../UITextField+RACSignalSupport.h | 1 + .../UITextView+RACSignalSupport.h | 1 + Pods/Headers/ReactiveCocoa/RACObjCRuntime.h | 1 + .../NSArray+RACSequenceAdditions.h | 1 + .../ReactiveCocoa/NSData+RACSupport.h | 1 + .../NSDictionary+RACSequenceAdditions.h | 1 + .../NSEnumerator+RACSequenceAdditions.h | 1 + .../ReactiveCocoa/NSFileHandle+RACSupport.h | 1 + .../NSInvocation+RACTypeParsing.h | 1 + .../NSNotificationCenter+RACSupport.h | 1 + .../ReactiveCocoa/NSObject+RACDeallocating.h | 1 + .../ReactiveCocoa/NSObject+RACDescription.h | 1 + .../ReactiveCocoa/NSObject+RACKVOWrapper.h | 1 + .../ReactiveCocoa/NSObject+RACLifting.h | 1 + .../NSObject+RACPropertySubscribing.h | 1 + .../NSObject+RACSelectorSignal.h | 1 + .../NSOrderedSet+RACSequenceAdditions.h | 1 + .../NSSet+RACSequenceAdditions.h | 1 + .../NSString+RACKeyPathUtilities.h | 1 + .../NSString+RACSequenceAdditions.h | 1 + .../ReactiveCocoa/NSString+RACSupport.h | 1 + .../NSURLConnection+RACSupport.h | 1 + .../ReactiveCocoa/RACArraySequence.h | 1 + .../ReactiveCocoa/RACBacktrace.h | 1 + .../ReactiveCocoa/RACBehaviorSubject.h | 1 + .../ReactiveCocoa/RACBlockTrampoline.h | 1 + .../ReactiveCocoa/ReactiveCocoa/RACChannel.h | 1 + .../ReactiveCocoa/ReactiveCocoa/RACCommand.h | 1 + .../ReactiveCocoa/RACCompoundDisposable.h | 1 + .../ReactiveCocoa/RACDelegateProxy.h | 1 + .../ReactiveCocoa/RACDisposable.h | 1 + .../ReactiveCocoa/RACDynamicSequence.h | 1 + .../ReactiveCocoa/RACDynamicSignal.h | 1 + .../ReactiveCocoa/RACEXTKeyPathCoding.h | 1 + .../ReactiveCocoa/ReactiveCocoa/RACEXTScope.h | 1 + .../ReactiveCocoa/RACEagerSequence.h | 1 + .../ReactiveCocoa/RACEmptySequence.h | 1 + .../ReactiveCocoa/RACEmptySignal.h | 1 + .../ReactiveCocoa/RACErrorSignal.h | 1 + .../ReactiveCocoa/ReactiveCocoa/RACEvent.h | 1 + .../ReactiveCocoa/RACGroupedSignal.h | 1 + .../ReactiveCocoa/RACImmediateScheduler.h | 1 + .../ReactiveCocoa/RACKVOChannel.h | 1 + .../ReactiveCocoa/RACKVOTrampoline.h | 1 + .../ReactiveCocoa/RACMulticastConnection.h | 1 + .../ReactiveCocoa/RACPassthroughSubscriber.h | 1 + .../RACQueueScheduler+Subclass.h | 1 + .../ReactiveCocoa/RACQueueScheduler.h | 1 + .../ReactiveCocoa/RACReplaySubject.h | 1 + .../ReactiveCocoa/RACReturnSignal.h | 1 + .../ReactiveCocoa/RACScheduler.h | 1 + .../ReactiveCocoa/RACScopedDisposable.h | 1 + .../ReactiveCocoa/ReactiveCocoa/RACSequence.h | 1 + .../ReactiveCocoa/RACSerialDisposable.h | 1 + .../ReactiveCocoa/RACSignal+Operations.h | 1 + .../ReactiveCocoa/ReactiveCocoa/RACSignal.h | 1 + .../ReactiveCocoa/RACSignalSequence.h | 1 + .../ReactiveCocoa/ReactiveCocoa/RACStream.h | 1 + .../ReactiveCocoa/RACStringSequence.h | 1 + .../ReactiveCocoa/ReactiveCocoa/RACSubject.h | 1 + .../ReactiveCocoa/RACSubscriber.h | 1 + .../RACSubscriptingAssignmentTrampoline.h | 1 + .../ReactiveCocoa/RACSubscriptionScheduler.h | 1 + .../ReactiveCocoa/RACTargetQueueScheduler.h | 1 + .../ReactiveCocoa/RACTestScheduler.h | 1 + .../ReactiveCocoa/ReactiveCocoa/RACTuple.h | 1 + .../ReactiveCocoa/RACTupleSequence.h | 1 + .../ReactiveCocoa/RACUnarySequence.h | 1 + .../ReactiveCocoa/ReactiveCocoa/RACUnit.h | 1 + .../ReactiveCocoa/RACValueTransformer.h | 1 + .../ReactiveCocoa/RACmetamacros.h | 1 + .../ReactiveCocoa/ReactiveCocoa.h | 1 + .../UIActionSheet+RACSignalSupport.h | 1 + .../UIAlertView+RACSignalSupport.h | 1 + .../UIBarButtonItem+RACCommandSupport.h | 1 + .../UIButton+RACCommandSupport.h | 1 + .../UICollectionViewCell+RACSignalSupport.h | 1 + .../UIControl+RACSignalSupport.h | 1 + .../UIDatePicker+RACSignalSupport.h | 1 + .../UIGestureRecognizer+RACSignalSupport.h | 1 + .../UIRefreshControl+RACCommandSupport.h | 1 + .../UISegmentedControl+RACSignalSupport.h | 1 + .../ReactiveCocoa/UISlider+RACSignalSupport.h | 1 + .../UIStepper+RACSignalSupport.h | 1 + .../ReactiveCocoa/UISwitch+RACSignalSupport.h | 1 + .../UITableViewCell+RACSignalSupport.h | 1 + .../UITextField+RACSignalSupport.h | 1 + .../UITextView+RACSignalSupport.h | 1 + Pods/Manifest.lock | 8 + Pods/Pods-Acknowledgements.markdown | 23 + Pods/Pods-Acknowledgements.plist | 27 + Pods/Pods-Reachability-Private.xcconfig | 2 +- Pods/Pods-ReactiveCocoa-Private.xcconfig | 5 + Pods/Pods-ReactiveCocoa-dummy.m | 5 + Pods/Pods-ReactiveCocoa-prefix.pch | 7 + Pods/Pods-ReactiveCocoa.xcconfig | 0 Pods/Pods-SocketRocket-Private.xcconfig | 2 +- Pods/Pods-environment.h | 18 + Pods/Pods-specs-Kiwi-Private.xcconfig | 2 +- Pods/Pods-specs-OHHTTPStubs-Private.xcconfig | 2 +- Pods/Pods-specs.xcconfig | 2 +- Pods/Pods.xcconfig | 2 +- Pods/Pods.xcodeproj/project.pbxproj | 12263 +++++++++++----- .../xcschemes/Pods-Reachability.xcscheme | 2 +- .../xcschemes/Pods-ReactiveCocoa.xcscheme | 59 + .../xcschemes/Pods-SocketRocket.xcscheme | 2 +- .../xcschemes/Pods-specs-Kiwi.xcscheme | 2 +- .../xcschemes/Pods-specs-OHHTTPStubs.xcscheme | 2 +- .../xcschemes/Pods-specs.xcscheme | 2 +- .../luke.xcuserdatad/xcschemes/Pods.xcscheme | 2 +- .../xcschemes/xcschememanagement.plist | 38 +- Pods/ReactiveCocoa/LICENSE.md | 19 + Pods/ReactiveCocoa/README.md | 539 + .../NSArray+RACSequenceAdditions.h | 20 + .../NSArray+RACSequenceAdditions.m | 18 + .../ReactiveCocoa/NSData+RACSupport.h | 22 + .../ReactiveCocoa/NSData+RACSupport.m | 35 + .../NSDictionary+RACSequenceAdditions.h | 31 + .../NSDictionary+RACSequenceAdditions.m | 34 + .../NSEnumerator+RACSequenceAdditions.h | 20 + .../NSEnumerator+RACSequenceAdditions.m | 22 + .../ReactiveCocoa/NSFileHandle+RACSupport.h | 19 + .../ReactiveCocoa/NSFileHandle+RACSupport.m | 39 + .../NSInvocation+RACTypeParsing.h | 55 + .../NSInvocation+RACTypeParsing.m | 232 + .../NSNotificationCenter+RACSupport.h | 18 + .../NSNotificationCenter+RACSupport.m | 31 + .../ReactiveCocoa/NSObject+RACDeallocating.h | 32 + .../ReactiveCocoa/NSObject+RACDeallocating.m | 124 + .../ReactiveCocoa/NSObject+RACDescription.h | 20 + .../ReactiveCocoa/NSObject+RACDescription.m | 46 + .../ReactiveCocoa/NSObject+RACKVOWrapper.h | 55 + .../ReactiveCocoa/NSObject+RACKVOWrapper.m | 230 + .../ReactiveCocoa/NSObject+RACLifting.h | 55 + .../ReactiveCocoa/NSObject+RACLifting.m | 132 + .../NSObject+RACPropertySubscribing.h | 102 + .../NSObject+RACPropertySubscribing.m | 145 + .../NSObject+RACSelectorSignal.h | 79 + .../NSObject+RACSelectorSignal.m | 276 + .../NSOrderedSet+RACSequenceAdditions.h | 20 + .../NSOrderedSet+RACSequenceAdditions.m | 19 + .../NSSet+RACSequenceAdditions.h | 20 + .../NSSet+RACSequenceAdditions.m | 19 + .../NSString+RACKeyPathUtilities.h | 33 + .../NSString+RACKeyPathUtilities.m | 36 + .../NSString+RACSequenceAdditions.h | 21 + .../NSString+RACSequenceAdditions.m | 18 + .../ReactiveCocoa/NSString+RACSupport.h | 22 + .../ReactiveCocoa/NSString+RACSupport.m | 35 + .../NSURLConnection+RACSupport.h | 25 + .../NSURLConnection+RACSupport.m | 47 + .../ReactiveCocoa/RACArraySequence.h | 18 + .../ReactiveCocoa/RACArraySequence.m | 125 + .../ReactiveCocoa/RACBacktrace.h | 70 + .../ReactiveCocoa/RACBacktrace.m | 244 + .../ReactiveCocoa/RACBehaviorSubject.h | 19 + .../ReactiveCocoa/RACBehaviorSubject.m | 56 + .../ReactiveCocoa/RACBlockTrampoline.h | 30 + .../ReactiveCocoa/RACBlockTrampoline.m | 156 + .../ReactiveCocoa/RACChannel.h | 70 + .../ReactiveCocoa/RACChannel.m | 91 + .../ReactiveCocoa/RACCommand.h | 123 + .../ReactiveCocoa/RACCommand.m | 273 + .../ReactiveCocoa/RACCompoundDisposable.h | 48 + .../ReactiveCocoa/RACCompoundDisposable.m | 239 + .../RACCompoundDisposableProvider.d | 4 + .../ReactiveCocoa/RACDelegateProxy.h | 28 + .../ReactiveCocoa/RACDelegateProxy.m | 78 + .../ReactiveCocoa/RACDisposable.h | 36 + .../ReactiveCocoa/RACDisposable.m | 92 + .../ReactiveCocoa/RACDynamicSequence.h | 20 + .../ReactiveCocoa/RACDynamicSequence.m | 197 + .../ReactiveCocoa/RACDynamicSignal.h | 17 + .../ReactiveCocoa/RACDynamicSignal.m | 188 + .../ReactiveCocoa/RACEagerSequence.h | 14 + .../ReactiveCocoa/RACEagerSequence.m | 66 + .../ReactiveCocoa/RACEmptySequence.h | 13 + .../ReactiveCocoa/RACEmptySequence.m | 71 + .../ReactiveCocoa/RACEmptySignal.h | 17 + .../ReactiveCocoa/RACEmptySignal.m | 62 + .../ReactiveCocoa/RACErrorSignal.h | 17 + .../ReactiveCocoa/RACErrorSignal.m | 47 + .../ReactiveCocoa/RACEvent.h | 51 + .../ReactiveCocoa/RACEvent.m | 113 + .../ReactiveCocoa/RACGroupedSignal.h | 20 + .../ReactiveCocoa/RACGroupedSignal.m | 25 + .../ReactiveCocoa/RACImmediateScheduler.h | 14 + .../ReactiveCocoa/RACImmediateScheduler.m | 44 + .../ReactiveCocoa/RACKVOChannel.h | 97 + .../ReactiveCocoa/RACKVOChannel.m | 206 + .../ReactiveCocoa/RACKVOTrampoline.h | 31 + .../ReactiveCocoa/RACKVOTrampoline.m | 100 + .../RACMulticastConnection+Private.h | 17 + .../ReactiveCocoa/RACMulticastConnection.h | 46 + .../ReactiveCocoa/RACMulticastConnection.m | 85 + .../ReactiveCocoa/RACObjCRuntime.h | 16 + .../ReactiveCocoa/RACObjCRuntime.m | 22 + .../ReactiveCocoa/RACPassthroughSubscriber.h | 28 + .../ReactiveCocoa/RACPassthroughSubscriber.m | 103 + .../RACQueueScheduler+Subclass.h | 46 + .../ReactiveCocoa/RACQueueScheduler.h | 18 + .../ReactiveCocoa/RACQueueScheduler.m | 120 + .../ReactiveCocoa/RACReplaySubject.h | 23 + .../ReactiveCocoa/RACReplaySubject.m | 112 + .../ReactiveCocoa/RACReturnSignal.h | 17 + .../ReactiveCocoa/RACReturnSignal.m | 90 + .../ReactiveCocoa/RACScheduler+Private.h | 34 + .../ReactiveCocoa/RACScheduler.h | 148 + .../ReactiveCocoa/RACScheduler.m | 206 + .../ReactiveCocoa/RACScopedDisposable.h | 19 + .../ReactiveCocoa/RACScopedDisposable.m | 32 + .../ReactiveCocoa/RACSequence.h | 154 + .../ReactiveCocoa/RACSequence.m | 384 + .../ReactiveCocoa/RACSerialDisposable.h | 43 + .../ReactiveCocoa/RACSerialDisposable.m | 133 + .../ReactiveCocoa/RACSignal+Operations.h | 597 + .../ReactiveCocoa/RACSignal+Operations.m | 1396 ++ .../ReactiveCocoa/RACSignal.h | 219 + .../ReactiveCocoa/RACSignal.m | 447 + .../ReactiveCocoa/RACSignalProvider.d | 5 + .../ReactiveCocoa/RACSignalSequence.h | 19 + .../ReactiveCocoa/RACSignalSequence.m | 79 + .../ReactiveCocoa/RACStream+Private.h | 23 + .../ReactiveCocoa/RACStream.h | 320 + .../ReactiveCocoa/RACStream.m | 359 + .../ReactiveCocoa/RACStringSequence.h | 18 + .../ReactiveCocoa/RACStringSequence.m | 65 + .../ReactiveCocoa/RACSubject.h | 22 + .../ReactiveCocoa/RACSubject.m | 117 + .../ReactiveCocoa/RACSubscriber+Private.h | 17 + .../ReactiveCocoa/RACSubscriber.h | 51 + .../ReactiveCocoa/RACSubscriber.m | 101 + .../RACSubscriptingAssignmentTrampoline.h | 51 + .../RACSubscriptingAssignmentTrampoline.m | 42 + .../ReactiveCocoa/RACSubscriptionScheduler.h | 14 + .../ReactiveCocoa/RACSubscriptionScheduler.m | 54 + .../ReactiveCocoa/RACTargetQueueScheduler.h | 24 + .../ReactiveCocoa/RACTargetQueueScheduler.m | 37 + .../ReactiveCocoa/RACTestScheduler.h | 42 + .../ReactiveCocoa/RACTestScheduler.m | 223 + .../ReactiveCocoa/RACTuple.h | 159 + .../ReactiveCocoa/RACTuple.m | 252 + .../ReactiveCocoa/RACTupleSequence.h | 18 + .../ReactiveCocoa/RACTupleSequence.m | 68 + .../ReactiveCocoa/RACUnarySequence.h | 13 + .../ReactiveCocoa/RACUnarySequence.m | 81 + .../ReactiveCocoa/RACUnit.h | 20 + .../ReactiveCocoa/RACUnit.m | 27 + .../ReactiveCocoa/RACValueTransformer.h | 16 + .../ReactiveCocoa/RACValueTransformer.m | 42 + .../ReactiveCocoa/ReactiveCocoa.h | 71 + .../UIActionSheet+RACSignalSupport.h | 32 + .../UIActionSheet+RACSignalSupport.m | 50 + .../UIAlertView+RACSignalSupport.h | 32 + .../UIAlertView+RACSignalSupport.m | 50 + .../UIBarButtonItem+RACCommandSupport.h | 22 + .../UIBarButtonItem+RACCommandSupport.m | 55 + .../UIButton+RACCommandSupport.h | 20 + .../UIButton+RACCommandSupport.m | 57 + .../UICollectionViewCell+RACSignalSupport.h | 29 + .../UICollectionViewCell+RACSignalSupport.m | 31 + .../UIControl+RACSignalSupport.h | 19 + .../UIControl+RACSignalSupport.m | 41 + .../UIControl+RACSignalSupportPrivate.h | 29 + .../UIControl+RACSignalSupportPrivate.m | 50 + .../UIDatePicker+RACSignalSupport.h | 24 + .../UIDatePicker+RACSignalSupport.m | 20 + .../UIGestureRecognizer+RACSignalSupport.h | 18 + .../UIGestureRecognizer+RACSignalSupport.m | 40 + .../UIRefreshControl+RACCommandSupport.h | 22 + .../UIRefreshControl+RACCommandSupport.m | 59 + .../UISegmentedControl+RACSignalSupport.h | 24 + .../UISegmentedControl+RACSignalSupport.m | 20 + .../ReactiveCocoa/UISlider+RACSignalSupport.h | 24 + .../ReactiveCocoa/UISlider+RACSignalSupport.m | 20 + .../UIStepper+RACSignalSupport.h | 24 + .../UIStepper+RACSignalSupport.m | 20 + .../ReactiveCocoa/UISwitch+RACSignalSupport.h | 22 + .../ReactiveCocoa/UISwitch+RACSignalSupport.m | 20 + .../UITableViewCell+RACSignalSupport.h | 28 + .../UITableViewCell+RACSignalSupport.m | 31 + .../UITextField+RACSignalSupport.h | 27 + .../UITextField+RACSignalSupport.m | 39 + .../UITextView+RACSignalSupport.h | 39 + .../UITextView+RACSignalSupport.m | 56 + .../extobjc/RACEXTKeyPathCoding.h | 68 + .../extobjc/RACEXTRuntimeExtensions.h | 122 + .../extobjc/RACEXTRuntimeExtensions.m | 232 + .../ReactiveCocoa/extobjc/RACEXTScope.h | 101 + .../ReactiveCocoa/extobjc/RACmetamacros.h | 670 + libPusher.xcodeproj/project.pbxproj | 16 + 383 files changed, 24297 insertions(+), 3672 deletions(-) create mode 120000 Pods/BuildHeaders/ReactiveCocoa/RACObjCRuntime.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSArray+RACSequenceAdditions.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSData+RACSupport.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSDictionary+RACSequenceAdditions.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSEnumerator+RACSequenceAdditions.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSFileHandle+RACSupport.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSInvocation+RACTypeParsing.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSNotificationCenter+RACSupport.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSObject+RACDeallocating.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSObject+RACDescription.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSObject+RACKVOWrapper.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSObject+RACLifting.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSObject+RACPropertySubscribing.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSObject+RACSelectorSignal.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSOrderedSet+RACSequenceAdditions.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSSet+RACSequenceAdditions.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSString+RACKeyPathUtilities.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSString+RACSequenceAdditions.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSString+RACSupport.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSURLConnection+RACSupport.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACArraySequence.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACBacktrace.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACBehaviorSubject.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACBlockTrampoline.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACChannel.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACCommand.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACCompoundDisposable.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACDelegateProxy.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACDisposable.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACDynamicSequence.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACDynamicSignal.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACEXTKeyPathCoding.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACEXTRuntimeExtensions.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACEXTScope.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACEagerSequence.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACEmptySequence.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACEmptySignal.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACErrorSignal.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACEvent.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACGroupedSignal.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACImmediateScheduler.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACKVOChannel.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACKVOTrampoline.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACMulticastConnection+Private.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACMulticastConnection.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACPassthroughSubscriber.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACQueueScheduler+Subclass.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACQueueScheduler.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACReplaySubject.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACReturnSignal.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACScheduler+Private.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACScheduler.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACScopedDisposable.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSequence.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSerialDisposable.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSignal+Operations.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSignal.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSignalSequence.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACStream+Private.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACStream.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACStringSequence.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSubject.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSubscriber+Private.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSubscriber.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSubscriptingAssignmentTrampoline.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSubscriptionScheduler.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACTargetQueueScheduler.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACTestScheduler.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACTuple.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACTupleSequence.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACUnarySequence.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACUnit.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACValueTransformer.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACmetamacros.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/ReactiveCocoa.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIActionSheet+RACSignalSupport.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIAlertView+RACSignalSupport.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIBarButtonItem+RACCommandSupport.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIButton+RACCommandSupport.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UICollectionViewCell+RACSignalSupport.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIControl+RACSignalSupport.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIControl+RACSignalSupportPrivate.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIDatePicker+RACSignalSupport.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIGestureRecognizer+RACSignalSupport.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIRefreshControl+RACCommandSupport.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UISegmentedControl+RACSignalSupport.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UISlider+RACSignalSupport.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIStepper+RACSignalSupport.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UISwitch+RACSignalSupport.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UITableViewCell+RACSignalSupport.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UITextField+RACSignalSupport.h create mode 120000 Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UITextView+RACSignalSupport.h create mode 120000 Pods/Headers/ReactiveCocoa/RACObjCRuntime.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSArray+RACSequenceAdditions.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSData+RACSupport.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSDictionary+RACSequenceAdditions.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSEnumerator+RACSequenceAdditions.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSFileHandle+RACSupport.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSInvocation+RACTypeParsing.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSNotificationCenter+RACSupport.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSObject+RACDeallocating.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSObject+RACDescription.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSObject+RACKVOWrapper.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSObject+RACLifting.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSObject+RACPropertySubscribing.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSObject+RACSelectorSignal.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSOrderedSet+RACSequenceAdditions.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSSet+RACSequenceAdditions.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSString+RACKeyPathUtilities.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSString+RACSequenceAdditions.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSString+RACSupport.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSURLConnection+RACSupport.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACArraySequence.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACBacktrace.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACBehaviorSubject.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACBlockTrampoline.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACChannel.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACCommand.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACCompoundDisposable.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACDelegateProxy.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACDisposable.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACDynamicSequence.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACDynamicSignal.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACEXTKeyPathCoding.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACEXTScope.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACEagerSequence.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACEmptySequence.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACEmptySignal.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACErrorSignal.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACEvent.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACGroupedSignal.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACImmediateScheduler.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACKVOChannel.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACKVOTrampoline.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACMulticastConnection.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACPassthroughSubscriber.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACQueueScheduler+Subclass.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACQueueScheduler.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACReplaySubject.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACReturnSignal.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACScheduler.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACScopedDisposable.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSequence.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSerialDisposable.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSignal+Operations.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSignal.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSignalSequence.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACStream.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACStringSequence.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSubject.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSubscriber.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSubscriptingAssignmentTrampoline.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSubscriptionScheduler.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACTargetQueueScheduler.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACTestScheduler.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACTuple.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACTupleSequence.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACUnarySequence.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACUnit.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACValueTransformer.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACmetamacros.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/ReactiveCocoa.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIActionSheet+RACSignalSupport.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIAlertView+RACSignalSupport.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIBarButtonItem+RACCommandSupport.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIButton+RACCommandSupport.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/UICollectionViewCell+RACSignalSupport.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIControl+RACSignalSupport.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIDatePicker+RACSignalSupport.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIGestureRecognizer+RACSignalSupport.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIRefreshControl+RACCommandSupport.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/UISegmentedControl+RACSignalSupport.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/UISlider+RACSignalSupport.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIStepper+RACSignalSupport.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/UISwitch+RACSignalSupport.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/UITableViewCell+RACSignalSupport.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/UITextField+RACSignalSupport.h create mode 120000 Pods/Headers/ReactiveCocoa/ReactiveCocoa/UITextView+RACSignalSupport.h create mode 100644 Pods/Pods-ReactiveCocoa-Private.xcconfig create mode 100644 Pods/Pods-ReactiveCocoa-dummy.m create mode 100644 Pods/Pods-ReactiveCocoa-prefix.pch create mode 100644 Pods/Pods-ReactiveCocoa.xcconfig create mode 100644 Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-ReactiveCocoa.xcscheme create mode 100644 Pods/ReactiveCocoa/LICENSE.md create mode 100644 Pods/ReactiveCocoa/README.md create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSArray+RACSequenceAdditions.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSArray+RACSequenceAdditions.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSData+RACSupport.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSData+RACSupport.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSDictionary+RACSequenceAdditions.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSDictionary+RACSequenceAdditions.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSEnumerator+RACSequenceAdditions.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSEnumerator+RACSequenceAdditions.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSFileHandle+RACSupport.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSFileHandle+RACSupport.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSInvocation+RACTypeParsing.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSInvocation+RACTypeParsing.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSNotificationCenter+RACSupport.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSNotificationCenter+RACSupport.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACDeallocating.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACDeallocating.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACDescription.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACDescription.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACKVOWrapper.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACKVOWrapper.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACLifting.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACLifting.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACPropertySubscribing.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACPropertySubscribing.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACSelectorSignal.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACSelectorSignal.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSOrderedSet+RACSequenceAdditions.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSOrderedSet+RACSequenceAdditions.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSSet+RACSequenceAdditions.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSSet+RACSequenceAdditions.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSString+RACKeyPathUtilities.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSString+RACKeyPathUtilities.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSString+RACSequenceAdditions.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSString+RACSequenceAdditions.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSString+RACSupport.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSString+RACSupport.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSURLConnection+RACSupport.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSURLConnection+RACSupport.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACArraySequence.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACArraySequence.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACBacktrace.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACBacktrace.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACBehaviorSubject.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACBehaviorSubject.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACBlockTrampoline.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACBlockTrampoline.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACChannel.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACChannel.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACCommand.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACCommand.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACCompoundDisposable.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACCompoundDisposable.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACCompoundDisposableProvider.d create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDelegateProxy.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDelegateProxy.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDisposable.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDisposable.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDynamicSequence.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDynamicSequence.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDynamicSignal.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDynamicSignal.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEagerSequence.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEagerSequence.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEmptySequence.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEmptySequence.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEmptySignal.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEmptySignal.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACErrorSignal.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACErrorSignal.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEvent.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEvent.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACGroupedSignal.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACGroupedSignal.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACImmediateScheduler.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACImmediateScheduler.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACKVOChannel.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACKVOChannel.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACKVOTrampoline.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACKVOTrampoline.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACMulticastConnection+Private.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACMulticastConnection.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACMulticastConnection.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACObjCRuntime.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACObjCRuntime.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACPassthroughSubscriber.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACPassthroughSubscriber.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACQueueScheduler+Subclass.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACQueueScheduler.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACQueueScheduler.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACReplaySubject.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACReplaySubject.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACReturnSignal.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACReturnSignal.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACScheduler+Private.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACScheduler.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACScheduler.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACScopedDisposable.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACScopedDisposable.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSequence.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSequence.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSerialDisposable.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSerialDisposable.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignal+Operations.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignal+Operations.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignal.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignal.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignalProvider.d create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignalSequence.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignalSequence.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACStream+Private.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACStream.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACStream.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACStringSequence.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACStringSequence.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubject.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubject.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriber+Private.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriber.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriber.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriptingAssignmentTrampoline.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriptingAssignmentTrampoline.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriptionScheduler.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriptionScheduler.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTargetQueueScheduler.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTargetQueueScheduler.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTestScheduler.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTestScheduler.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTuple.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTuple.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTupleSequence.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTupleSequence.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACUnarySequence.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACUnarySequence.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACUnit.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACUnit.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACValueTransformer.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACValueTransformer.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/ReactiveCocoa.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIActionSheet+RACSignalSupport.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIActionSheet+RACSignalSupport.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIAlertView+RACSignalSupport.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIAlertView+RACSignalSupport.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIBarButtonItem+RACCommandSupport.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIBarButtonItem+RACCommandSupport.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIButton+RACCommandSupport.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIButton+RACCommandSupport.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UICollectionViewCell+RACSignalSupport.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UICollectionViewCell+RACSignalSupport.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIControl+RACSignalSupport.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIControl+RACSignalSupport.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIControl+RACSignalSupportPrivate.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIControl+RACSignalSupportPrivate.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIDatePicker+RACSignalSupport.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIDatePicker+RACSignalSupport.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIGestureRecognizer+RACSignalSupport.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIGestureRecognizer+RACSignalSupport.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIRefreshControl+RACCommandSupport.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIRefreshControl+RACCommandSupport.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UISegmentedControl+RACSignalSupport.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UISegmentedControl+RACSignalSupport.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UISlider+RACSignalSupport.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UISlider+RACSignalSupport.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIStepper+RACSignalSupport.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIStepper+RACSignalSupport.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UISwitch+RACSignalSupport.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UISwitch+RACSignalSupport.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UITableViewCell+RACSignalSupport.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UITableViewCell+RACSignalSupport.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UITextField+RACSignalSupport.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UITextField+RACSignalSupport.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UITextView+RACSignalSupport.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UITextView+RACSignalSupport.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACEXTKeyPathCoding.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACEXTRuntimeExtensions.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACEXTRuntimeExtensions.m create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACEXTScope.h create mode 100644 Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACmetamacros.h diff --git a/Podfile b/Podfile index 6c0afa63..8fc2d6fb 100644 --- a/Podfile +++ b/Podfile @@ -1,9 +1,10 @@ -platform :ios, :deployment_target => '4.0' +platform :ios, :deployment_target => '5.0' inhibit_all_warnings! pod 'Reachability' pod 'SocketRocket', :head +pod 'ReactiveCocoa' post_install do |installer| # we don't want to link static lib to the icucore dylib or it will fail to build diff --git a/Podfile.lock b/Podfile.lock index 738e9f5a..8f3dff16 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -2,18 +2,26 @@ PODS: - Kiwi (2.2) - OHHTTPStubs (1.0.1) - Reachability (3.0.0) + - ReactiveCocoa (2.1.7): + - ReactiveCocoa/Core + - ReactiveCocoa/no-arc + - ReactiveCocoa/Core (2.1.7): + - ReactiveCocoa/no-arc + - ReactiveCocoa/no-arc (2.1.7) - SocketRocket (HEAD based on 0.2.0) DEPENDENCIES: - Kiwi - OHHTTPStubs - Reachability + - ReactiveCocoa - SocketRocket (HEAD) SPEC CHECKSUMS: Kiwi: db174bba4ee8068b15d7122f1b22fb64b7c1d378 OHHTTPStubs: 25b40f0c39ce8dab25b3fc4b52d630e7a665f3fb Reachability: 500bd76bf6cd8ff2c6fb715fc5f44ef6e4c024f2 + ReactiveCocoa: 1117f7968c8667d2ca00b5aa47156fabcb56af75 SocketRocket: bca43a94bd9aac3a629df42c06843402399ee67b COCOAPODS: 0.28.0 diff --git a/Pods/BuildHeaders/ReactiveCocoa/RACObjCRuntime.h b/Pods/BuildHeaders/ReactiveCocoa/RACObjCRuntime.h new file mode 120000 index 00000000..ed85580d --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/RACObjCRuntime.h @@ -0,0 +1 @@ +../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACObjCRuntime.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSArray+RACSequenceAdditions.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSArray+RACSequenceAdditions.h new file mode 120000 index 00000000..d483f628 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSArray+RACSequenceAdditions.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSArray+RACSequenceAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSData+RACSupport.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSData+RACSupport.h new file mode 120000 index 00000000..792279d3 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSData+RACSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSData+RACSupport.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSDictionary+RACSequenceAdditions.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSDictionary+RACSequenceAdditions.h new file mode 120000 index 00000000..bbd102d9 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSDictionary+RACSequenceAdditions.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSDictionary+RACSequenceAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSEnumerator+RACSequenceAdditions.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSEnumerator+RACSequenceAdditions.h new file mode 120000 index 00000000..62cd0258 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSEnumerator+RACSequenceAdditions.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSEnumerator+RACSequenceAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSFileHandle+RACSupport.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSFileHandle+RACSupport.h new file mode 120000 index 00000000..051e192f --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSFileHandle+RACSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSFileHandle+RACSupport.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSInvocation+RACTypeParsing.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSInvocation+RACTypeParsing.h new file mode 120000 index 00000000..1aa061d0 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSInvocation+RACTypeParsing.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSInvocation+RACTypeParsing.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSNotificationCenter+RACSupport.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSNotificationCenter+RACSupport.h new file mode 120000 index 00000000..2cc66960 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSNotificationCenter+RACSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSNotificationCenter+RACSupport.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSObject+RACDeallocating.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSObject+RACDeallocating.h new file mode 120000 index 00000000..1c593905 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSObject+RACDeallocating.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACDeallocating.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSObject+RACDescription.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSObject+RACDescription.h new file mode 120000 index 00000000..6398be58 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSObject+RACDescription.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACDescription.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSObject+RACKVOWrapper.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSObject+RACKVOWrapper.h new file mode 120000 index 00000000..483ec955 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSObject+RACKVOWrapper.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACKVOWrapper.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSObject+RACLifting.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSObject+RACLifting.h new file mode 120000 index 00000000..b50f89fe --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSObject+RACLifting.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACLifting.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSObject+RACPropertySubscribing.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSObject+RACPropertySubscribing.h new file mode 120000 index 00000000..bcfb7499 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSObject+RACPropertySubscribing.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACPropertySubscribing.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSObject+RACSelectorSignal.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSObject+RACSelectorSignal.h new file mode 120000 index 00000000..3693dd5d --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSObject+RACSelectorSignal.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACSelectorSignal.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSOrderedSet+RACSequenceAdditions.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSOrderedSet+RACSequenceAdditions.h new file mode 120000 index 00000000..27b912c9 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSOrderedSet+RACSequenceAdditions.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSOrderedSet+RACSequenceAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSSet+RACSequenceAdditions.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSSet+RACSequenceAdditions.h new file mode 120000 index 00000000..2a63c51c --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSSet+RACSequenceAdditions.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSSet+RACSequenceAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSString+RACKeyPathUtilities.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSString+RACKeyPathUtilities.h new file mode 120000 index 00000000..5240f714 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSString+RACKeyPathUtilities.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSString+RACKeyPathUtilities.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSString+RACSequenceAdditions.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSString+RACSequenceAdditions.h new file mode 120000 index 00000000..95b24f28 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSString+RACSequenceAdditions.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSString+RACSequenceAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSString+RACSupport.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSString+RACSupport.h new file mode 120000 index 00000000..ec99678b --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSString+RACSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSString+RACSupport.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSURLConnection+RACSupport.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSURLConnection+RACSupport.h new file mode 120000 index 00000000..439fa69a --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/NSURLConnection+RACSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSURLConnection+RACSupport.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACArraySequence.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACArraySequence.h new file mode 120000 index 00000000..86205094 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACArraySequence.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACArraySequence.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACBacktrace.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACBacktrace.h new file mode 120000 index 00000000..0ab8ceb8 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACBacktrace.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACBacktrace.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACBehaviorSubject.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACBehaviorSubject.h new file mode 120000 index 00000000..3d7e251d --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACBehaviorSubject.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACBehaviorSubject.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACBlockTrampoline.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACBlockTrampoline.h new file mode 120000 index 00000000..85af616a --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACBlockTrampoline.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACBlockTrampoline.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACChannel.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACChannel.h new file mode 120000 index 00000000..2e0294b9 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACChannel.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACChannel.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACCommand.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACCommand.h new file mode 120000 index 00000000..51f2e7b6 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACCommand.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACCommand.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACCompoundDisposable.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACCompoundDisposable.h new file mode 120000 index 00000000..a3aa6140 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACCompoundDisposable.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACCompoundDisposable.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACDelegateProxy.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACDelegateProxy.h new file mode 120000 index 00000000..017bab38 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACDelegateProxy.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDelegateProxy.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACDisposable.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACDisposable.h new file mode 120000 index 00000000..321d2cef --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACDisposable.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDisposable.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACDynamicSequence.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACDynamicSequence.h new file mode 120000 index 00000000..71eadc71 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACDynamicSequence.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDynamicSequence.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACDynamicSignal.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACDynamicSignal.h new file mode 120000 index 00000000..8fe338be --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACDynamicSignal.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDynamicSignal.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACEXTKeyPathCoding.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACEXTKeyPathCoding.h new file mode 120000 index 00000000..d4c111b2 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACEXTKeyPathCoding.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACEXTKeyPathCoding.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACEXTRuntimeExtensions.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACEXTRuntimeExtensions.h new file mode 120000 index 00000000..13ff8429 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACEXTRuntimeExtensions.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACEXTRuntimeExtensions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACEXTScope.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACEXTScope.h new file mode 120000 index 00000000..f0af58e0 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACEXTScope.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACEXTScope.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACEagerSequence.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACEagerSequence.h new file mode 120000 index 00000000..9680c7ab --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACEagerSequence.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEagerSequence.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACEmptySequence.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACEmptySequence.h new file mode 120000 index 00000000..bfb47325 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACEmptySequence.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEmptySequence.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACEmptySignal.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACEmptySignal.h new file mode 120000 index 00000000..70abee6e --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACEmptySignal.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEmptySignal.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACErrorSignal.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACErrorSignal.h new file mode 120000 index 00000000..04261d13 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACErrorSignal.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACErrorSignal.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACEvent.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACEvent.h new file mode 120000 index 00000000..159e888d --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACEvent.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEvent.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACGroupedSignal.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACGroupedSignal.h new file mode 120000 index 00000000..4c454aaf --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACGroupedSignal.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACGroupedSignal.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACImmediateScheduler.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACImmediateScheduler.h new file mode 120000 index 00000000..1bcb87b7 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACImmediateScheduler.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACImmediateScheduler.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACKVOChannel.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACKVOChannel.h new file mode 120000 index 00000000..70319d27 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACKVOChannel.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACKVOChannel.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACKVOTrampoline.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACKVOTrampoline.h new file mode 120000 index 00000000..e6092790 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACKVOTrampoline.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACKVOTrampoline.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACMulticastConnection+Private.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACMulticastConnection+Private.h new file mode 120000 index 00000000..1ff80204 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACMulticastConnection+Private.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACMulticastConnection+Private.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACMulticastConnection.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACMulticastConnection.h new file mode 120000 index 00000000..bcc72f01 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACMulticastConnection.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACMulticastConnection.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACPassthroughSubscriber.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACPassthroughSubscriber.h new file mode 120000 index 00000000..8255a672 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACPassthroughSubscriber.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACPassthroughSubscriber.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACQueueScheduler+Subclass.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACQueueScheduler+Subclass.h new file mode 120000 index 00000000..2df1574b --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACQueueScheduler+Subclass.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACQueueScheduler+Subclass.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACQueueScheduler.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACQueueScheduler.h new file mode 120000 index 00000000..c3cd6c99 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACQueueScheduler.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACQueueScheduler.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACReplaySubject.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACReplaySubject.h new file mode 120000 index 00000000..ad35864c --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACReplaySubject.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACReplaySubject.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACReturnSignal.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACReturnSignal.h new file mode 120000 index 00000000..9d94ffce --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACReturnSignal.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACReturnSignal.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACScheduler+Private.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACScheduler+Private.h new file mode 120000 index 00000000..9a2ee197 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACScheduler+Private.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACScheduler+Private.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACScheduler.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACScheduler.h new file mode 120000 index 00000000..d12e38a5 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACScheduler.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACScheduler.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACScopedDisposable.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACScopedDisposable.h new file mode 120000 index 00000000..f8f3aa87 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACScopedDisposable.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACScopedDisposable.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSequence.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSequence.h new file mode 120000 index 00000000..64ec6092 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSequence.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSequence.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSerialDisposable.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSerialDisposable.h new file mode 120000 index 00000000..9a7ee27f --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSerialDisposable.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSerialDisposable.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSignal+Operations.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSignal+Operations.h new file mode 120000 index 00000000..68992d5c --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSignal+Operations.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignal+Operations.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSignal.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSignal.h new file mode 120000 index 00000000..30b3dd7a --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSignal.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignal.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSignalSequence.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSignalSequence.h new file mode 120000 index 00000000..56bf5c1e --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSignalSequence.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignalSequence.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACStream+Private.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACStream+Private.h new file mode 120000 index 00000000..15ea9270 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACStream+Private.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACStream+Private.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACStream.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACStream.h new file mode 120000 index 00000000..ff066205 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACStream.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACStream.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACStringSequence.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACStringSequence.h new file mode 120000 index 00000000..73ac6501 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACStringSequence.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACStringSequence.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSubject.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSubject.h new file mode 120000 index 00000000..e1f2bb01 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSubject.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubject.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSubscriber+Private.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSubscriber+Private.h new file mode 120000 index 00000000..6cda6038 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSubscriber+Private.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriber+Private.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSubscriber.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSubscriber.h new file mode 120000 index 00000000..5d36efca --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSubscriber.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriber.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSubscriptingAssignmentTrampoline.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSubscriptingAssignmentTrampoline.h new file mode 120000 index 00000000..b4f4d37e --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSubscriptingAssignmentTrampoline.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriptingAssignmentTrampoline.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSubscriptionScheduler.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSubscriptionScheduler.h new file mode 120000 index 00000000..bc66909c --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACSubscriptionScheduler.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriptionScheduler.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACTargetQueueScheduler.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACTargetQueueScheduler.h new file mode 120000 index 00000000..696d5bb4 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACTargetQueueScheduler.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTargetQueueScheduler.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACTestScheduler.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACTestScheduler.h new file mode 120000 index 00000000..72d525cd --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACTestScheduler.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTestScheduler.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACTuple.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACTuple.h new file mode 120000 index 00000000..0fd18d66 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACTuple.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTuple.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACTupleSequence.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACTupleSequence.h new file mode 120000 index 00000000..cd59437a --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACTupleSequence.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTupleSequence.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACUnarySequence.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACUnarySequence.h new file mode 120000 index 00000000..99dd034e --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACUnarySequence.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACUnarySequence.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACUnit.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACUnit.h new file mode 120000 index 00000000..617a4316 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACUnit.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACUnit.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACValueTransformer.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACValueTransformer.h new file mode 120000 index 00000000..1b6e4345 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACValueTransformer.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACValueTransformer.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACmetamacros.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACmetamacros.h new file mode 120000 index 00000000..631220ef --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/RACmetamacros.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACmetamacros.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/ReactiveCocoa.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/ReactiveCocoa.h new file mode 120000 index 00000000..9a1ff24c --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/ReactiveCocoa.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/ReactiveCocoa.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIActionSheet+RACSignalSupport.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIActionSheet+RACSignalSupport.h new file mode 120000 index 00000000..9c68b99c --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIActionSheet+RACSignalSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIActionSheet+RACSignalSupport.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIAlertView+RACSignalSupport.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIAlertView+RACSignalSupport.h new file mode 120000 index 00000000..07a76a05 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIAlertView+RACSignalSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIAlertView+RACSignalSupport.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIBarButtonItem+RACCommandSupport.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIBarButtonItem+RACCommandSupport.h new file mode 120000 index 00000000..8ec0050f --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIBarButtonItem+RACCommandSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIBarButtonItem+RACCommandSupport.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIButton+RACCommandSupport.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIButton+RACCommandSupport.h new file mode 120000 index 00000000..b3293260 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIButton+RACCommandSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIButton+RACCommandSupport.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UICollectionViewCell+RACSignalSupport.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UICollectionViewCell+RACSignalSupport.h new file mode 120000 index 00000000..c4099a98 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UICollectionViewCell+RACSignalSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UICollectionViewCell+RACSignalSupport.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIControl+RACSignalSupport.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIControl+RACSignalSupport.h new file mode 120000 index 00000000..270404bd --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIControl+RACSignalSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIControl+RACSignalSupport.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIControl+RACSignalSupportPrivate.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIControl+RACSignalSupportPrivate.h new file mode 120000 index 00000000..f916e5a0 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIControl+RACSignalSupportPrivate.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIControl+RACSignalSupportPrivate.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIDatePicker+RACSignalSupport.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIDatePicker+RACSignalSupport.h new file mode 120000 index 00000000..9deca0fb --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIDatePicker+RACSignalSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIDatePicker+RACSignalSupport.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIGestureRecognizer+RACSignalSupport.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIGestureRecognizer+RACSignalSupport.h new file mode 120000 index 00000000..99f169e3 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIGestureRecognizer+RACSignalSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIGestureRecognizer+RACSignalSupport.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIRefreshControl+RACCommandSupport.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIRefreshControl+RACCommandSupport.h new file mode 120000 index 00000000..3dfb3b21 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIRefreshControl+RACCommandSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIRefreshControl+RACCommandSupport.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UISegmentedControl+RACSignalSupport.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UISegmentedControl+RACSignalSupport.h new file mode 120000 index 00000000..2e30090b --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UISegmentedControl+RACSignalSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UISegmentedControl+RACSignalSupport.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UISlider+RACSignalSupport.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UISlider+RACSignalSupport.h new file mode 120000 index 00000000..b300c499 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UISlider+RACSignalSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UISlider+RACSignalSupport.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIStepper+RACSignalSupport.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIStepper+RACSignalSupport.h new file mode 120000 index 00000000..00188b20 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UIStepper+RACSignalSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIStepper+RACSignalSupport.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UISwitch+RACSignalSupport.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UISwitch+RACSignalSupport.h new file mode 120000 index 00000000..a3c963be --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UISwitch+RACSignalSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UISwitch+RACSignalSupport.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UITableViewCell+RACSignalSupport.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UITableViewCell+RACSignalSupport.h new file mode 120000 index 00000000..341fcc6e --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UITableViewCell+RACSignalSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UITableViewCell+RACSignalSupport.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UITextField+RACSignalSupport.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UITextField+RACSignalSupport.h new file mode 120000 index 00000000..d32d800c --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UITextField+RACSignalSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UITextField+RACSignalSupport.h \ No newline at end of file diff --git a/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UITextView+RACSignalSupport.h b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UITextView+RACSignalSupport.h new file mode 120000 index 00000000..cd337c32 --- /dev/null +++ b/Pods/BuildHeaders/ReactiveCocoa/ReactiveCocoa/UITextView+RACSignalSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UITextView+RACSignalSupport.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/RACObjCRuntime.h b/Pods/Headers/ReactiveCocoa/RACObjCRuntime.h new file mode 120000 index 00000000..ed85580d --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/RACObjCRuntime.h @@ -0,0 +1 @@ +../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACObjCRuntime.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSArray+RACSequenceAdditions.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSArray+RACSequenceAdditions.h new file mode 120000 index 00000000..d483f628 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSArray+RACSequenceAdditions.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSArray+RACSequenceAdditions.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSData+RACSupport.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSData+RACSupport.h new file mode 120000 index 00000000..792279d3 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSData+RACSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSData+RACSupport.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSDictionary+RACSequenceAdditions.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSDictionary+RACSequenceAdditions.h new file mode 120000 index 00000000..bbd102d9 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSDictionary+RACSequenceAdditions.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSDictionary+RACSequenceAdditions.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSEnumerator+RACSequenceAdditions.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSEnumerator+RACSequenceAdditions.h new file mode 120000 index 00000000..62cd0258 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSEnumerator+RACSequenceAdditions.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSEnumerator+RACSequenceAdditions.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSFileHandle+RACSupport.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSFileHandle+RACSupport.h new file mode 120000 index 00000000..051e192f --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSFileHandle+RACSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSFileHandle+RACSupport.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSInvocation+RACTypeParsing.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSInvocation+RACTypeParsing.h new file mode 120000 index 00000000..1aa061d0 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSInvocation+RACTypeParsing.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSInvocation+RACTypeParsing.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSNotificationCenter+RACSupport.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSNotificationCenter+RACSupport.h new file mode 120000 index 00000000..2cc66960 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSNotificationCenter+RACSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSNotificationCenter+RACSupport.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSObject+RACDeallocating.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSObject+RACDeallocating.h new file mode 120000 index 00000000..1c593905 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSObject+RACDeallocating.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACDeallocating.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSObject+RACDescription.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSObject+RACDescription.h new file mode 120000 index 00000000..6398be58 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSObject+RACDescription.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACDescription.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSObject+RACKVOWrapper.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSObject+RACKVOWrapper.h new file mode 120000 index 00000000..483ec955 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSObject+RACKVOWrapper.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACKVOWrapper.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSObject+RACLifting.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSObject+RACLifting.h new file mode 120000 index 00000000..b50f89fe --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSObject+RACLifting.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACLifting.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSObject+RACPropertySubscribing.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSObject+RACPropertySubscribing.h new file mode 120000 index 00000000..bcfb7499 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSObject+RACPropertySubscribing.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACPropertySubscribing.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSObject+RACSelectorSignal.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSObject+RACSelectorSignal.h new file mode 120000 index 00000000..3693dd5d --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSObject+RACSelectorSignal.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACSelectorSignal.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSOrderedSet+RACSequenceAdditions.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSOrderedSet+RACSequenceAdditions.h new file mode 120000 index 00000000..27b912c9 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSOrderedSet+RACSequenceAdditions.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSOrderedSet+RACSequenceAdditions.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSSet+RACSequenceAdditions.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSSet+RACSequenceAdditions.h new file mode 120000 index 00000000..2a63c51c --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSSet+RACSequenceAdditions.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSSet+RACSequenceAdditions.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSString+RACKeyPathUtilities.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSString+RACKeyPathUtilities.h new file mode 120000 index 00000000..5240f714 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSString+RACKeyPathUtilities.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSString+RACKeyPathUtilities.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSString+RACSequenceAdditions.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSString+RACSequenceAdditions.h new file mode 120000 index 00000000..95b24f28 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSString+RACSequenceAdditions.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSString+RACSequenceAdditions.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSString+RACSupport.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSString+RACSupport.h new file mode 120000 index 00000000..ec99678b --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSString+RACSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSString+RACSupport.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSURLConnection+RACSupport.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSURLConnection+RACSupport.h new file mode 120000 index 00000000..439fa69a --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/NSURLConnection+RACSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSURLConnection+RACSupport.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACArraySequence.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACArraySequence.h new file mode 120000 index 00000000..86205094 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACArraySequence.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACArraySequence.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACBacktrace.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACBacktrace.h new file mode 120000 index 00000000..0ab8ceb8 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACBacktrace.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACBacktrace.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACBehaviorSubject.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACBehaviorSubject.h new file mode 120000 index 00000000..3d7e251d --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACBehaviorSubject.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACBehaviorSubject.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACBlockTrampoline.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACBlockTrampoline.h new file mode 120000 index 00000000..85af616a --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACBlockTrampoline.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACBlockTrampoline.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACChannel.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACChannel.h new file mode 120000 index 00000000..2e0294b9 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACChannel.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACChannel.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACCommand.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACCommand.h new file mode 120000 index 00000000..51f2e7b6 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACCommand.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACCommand.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACCompoundDisposable.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACCompoundDisposable.h new file mode 120000 index 00000000..a3aa6140 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACCompoundDisposable.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACCompoundDisposable.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACDelegateProxy.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACDelegateProxy.h new file mode 120000 index 00000000..017bab38 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACDelegateProxy.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDelegateProxy.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACDisposable.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACDisposable.h new file mode 120000 index 00000000..321d2cef --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACDisposable.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDisposable.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACDynamicSequence.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACDynamicSequence.h new file mode 120000 index 00000000..71eadc71 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACDynamicSequence.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDynamicSequence.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACDynamicSignal.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACDynamicSignal.h new file mode 120000 index 00000000..8fe338be --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACDynamicSignal.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDynamicSignal.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACEXTKeyPathCoding.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACEXTKeyPathCoding.h new file mode 120000 index 00000000..d4c111b2 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACEXTKeyPathCoding.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACEXTKeyPathCoding.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACEXTScope.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACEXTScope.h new file mode 120000 index 00000000..f0af58e0 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACEXTScope.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACEXTScope.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACEagerSequence.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACEagerSequence.h new file mode 120000 index 00000000..9680c7ab --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACEagerSequence.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEagerSequence.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACEmptySequence.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACEmptySequence.h new file mode 120000 index 00000000..bfb47325 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACEmptySequence.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEmptySequence.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACEmptySignal.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACEmptySignal.h new file mode 120000 index 00000000..70abee6e --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACEmptySignal.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEmptySignal.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACErrorSignal.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACErrorSignal.h new file mode 120000 index 00000000..04261d13 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACErrorSignal.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACErrorSignal.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACEvent.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACEvent.h new file mode 120000 index 00000000..159e888d --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACEvent.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEvent.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACGroupedSignal.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACGroupedSignal.h new file mode 120000 index 00000000..4c454aaf --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACGroupedSignal.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACGroupedSignal.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACImmediateScheduler.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACImmediateScheduler.h new file mode 120000 index 00000000..1bcb87b7 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACImmediateScheduler.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACImmediateScheduler.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACKVOChannel.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACKVOChannel.h new file mode 120000 index 00000000..70319d27 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACKVOChannel.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACKVOChannel.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACKVOTrampoline.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACKVOTrampoline.h new file mode 120000 index 00000000..e6092790 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACKVOTrampoline.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACKVOTrampoline.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACMulticastConnection.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACMulticastConnection.h new file mode 120000 index 00000000..bcc72f01 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACMulticastConnection.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACMulticastConnection.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACPassthroughSubscriber.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACPassthroughSubscriber.h new file mode 120000 index 00000000..8255a672 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACPassthroughSubscriber.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACPassthroughSubscriber.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACQueueScheduler+Subclass.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACQueueScheduler+Subclass.h new file mode 120000 index 00000000..2df1574b --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACQueueScheduler+Subclass.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACQueueScheduler+Subclass.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACQueueScheduler.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACQueueScheduler.h new file mode 120000 index 00000000..c3cd6c99 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACQueueScheduler.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACQueueScheduler.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACReplaySubject.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACReplaySubject.h new file mode 120000 index 00000000..ad35864c --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACReplaySubject.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACReplaySubject.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACReturnSignal.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACReturnSignal.h new file mode 120000 index 00000000..9d94ffce --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACReturnSignal.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACReturnSignal.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACScheduler.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACScheduler.h new file mode 120000 index 00000000..d12e38a5 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACScheduler.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACScheduler.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACScopedDisposable.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACScopedDisposable.h new file mode 120000 index 00000000..f8f3aa87 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACScopedDisposable.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACScopedDisposable.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSequence.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSequence.h new file mode 120000 index 00000000..64ec6092 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSequence.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSequence.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSerialDisposable.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSerialDisposable.h new file mode 120000 index 00000000..9a7ee27f --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSerialDisposable.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSerialDisposable.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSignal+Operations.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSignal+Operations.h new file mode 120000 index 00000000..68992d5c --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSignal+Operations.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignal+Operations.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSignal.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSignal.h new file mode 120000 index 00000000..30b3dd7a --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSignal.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignal.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSignalSequence.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSignalSequence.h new file mode 120000 index 00000000..56bf5c1e --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSignalSequence.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignalSequence.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACStream.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACStream.h new file mode 120000 index 00000000..ff066205 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACStream.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACStream.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACStringSequence.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACStringSequence.h new file mode 120000 index 00000000..73ac6501 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACStringSequence.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACStringSequence.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSubject.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSubject.h new file mode 120000 index 00000000..e1f2bb01 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSubject.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubject.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSubscriber.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSubscriber.h new file mode 120000 index 00000000..5d36efca --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSubscriber.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriber.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSubscriptingAssignmentTrampoline.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSubscriptingAssignmentTrampoline.h new file mode 120000 index 00000000..b4f4d37e --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSubscriptingAssignmentTrampoline.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriptingAssignmentTrampoline.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSubscriptionScheduler.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSubscriptionScheduler.h new file mode 120000 index 00000000..bc66909c --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACSubscriptionScheduler.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriptionScheduler.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACTargetQueueScheduler.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACTargetQueueScheduler.h new file mode 120000 index 00000000..696d5bb4 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACTargetQueueScheduler.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTargetQueueScheduler.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACTestScheduler.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACTestScheduler.h new file mode 120000 index 00000000..72d525cd --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACTestScheduler.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTestScheduler.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACTuple.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACTuple.h new file mode 120000 index 00000000..0fd18d66 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACTuple.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTuple.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACTupleSequence.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACTupleSequence.h new file mode 120000 index 00000000..cd59437a --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACTupleSequence.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTupleSequence.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACUnarySequence.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACUnarySequence.h new file mode 120000 index 00000000..99dd034e --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACUnarySequence.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACUnarySequence.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACUnit.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACUnit.h new file mode 120000 index 00000000..617a4316 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACUnit.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACUnit.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACValueTransformer.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACValueTransformer.h new file mode 120000 index 00000000..1b6e4345 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACValueTransformer.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACValueTransformer.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACmetamacros.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACmetamacros.h new file mode 120000 index 00000000..631220ef --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/RACmetamacros.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACmetamacros.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/ReactiveCocoa.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/ReactiveCocoa.h new file mode 120000 index 00000000..9a1ff24c --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/ReactiveCocoa.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/ReactiveCocoa.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIActionSheet+RACSignalSupport.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIActionSheet+RACSignalSupport.h new file mode 120000 index 00000000..9c68b99c --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIActionSheet+RACSignalSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIActionSheet+RACSignalSupport.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIAlertView+RACSignalSupport.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIAlertView+RACSignalSupport.h new file mode 120000 index 00000000..07a76a05 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIAlertView+RACSignalSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIAlertView+RACSignalSupport.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIBarButtonItem+RACCommandSupport.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIBarButtonItem+RACCommandSupport.h new file mode 120000 index 00000000..8ec0050f --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIBarButtonItem+RACCommandSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIBarButtonItem+RACCommandSupport.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIButton+RACCommandSupport.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIButton+RACCommandSupport.h new file mode 120000 index 00000000..b3293260 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIButton+RACCommandSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIButton+RACCommandSupport.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UICollectionViewCell+RACSignalSupport.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UICollectionViewCell+RACSignalSupport.h new file mode 120000 index 00000000..c4099a98 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UICollectionViewCell+RACSignalSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UICollectionViewCell+RACSignalSupport.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIControl+RACSignalSupport.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIControl+RACSignalSupport.h new file mode 120000 index 00000000..270404bd --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIControl+RACSignalSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIControl+RACSignalSupport.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIDatePicker+RACSignalSupport.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIDatePicker+RACSignalSupport.h new file mode 120000 index 00000000..9deca0fb --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIDatePicker+RACSignalSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIDatePicker+RACSignalSupport.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIGestureRecognizer+RACSignalSupport.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIGestureRecognizer+RACSignalSupport.h new file mode 120000 index 00000000..99f169e3 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIGestureRecognizer+RACSignalSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIGestureRecognizer+RACSignalSupport.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIRefreshControl+RACCommandSupport.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIRefreshControl+RACCommandSupport.h new file mode 120000 index 00000000..3dfb3b21 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIRefreshControl+RACCommandSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIRefreshControl+RACCommandSupport.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UISegmentedControl+RACSignalSupport.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UISegmentedControl+RACSignalSupport.h new file mode 120000 index 00000000..2e30090b --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UISegmentedControl+RACSignalSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UISegmentedControl+RACSignalSupport.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UISlider+RACSignalSupport.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UISlider+RACSignalSupport.h new file mode 120000 index 00000000..b300c499 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UISlider+RACSignalSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UISlider+RACSignalSupport.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIStepper+RACSignalSupport.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIStepper+RACSignalSupport.h new file mode 120000 index 00000000..00188b20 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UIStepper+RACSignalSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIStepper+RACSignalSupport.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UISwitch+RACSignalSupport.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UISwitch+RACSignalSupport.h new file mode 120000 index 00000000..a3c963be --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UISwitch+RACSignalSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UISwitch+RACSignalSupport.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UITableViewCell+RACSignalSupport.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UITableViewCell+RACSignalSupport.h new file mode 120000 index 00000000..341fcc6e --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UITableViewCell+RACSignalSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UITableViewCell+RACSignalSupport.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UITextField+RACSignalSupport.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UITextField+RACSignalSupport.h new file mode 120000 index 00000000..d32d800c --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UITextField+RACSignalSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UITextField+RACSignalSupport.h \ No newline at end of file diff --git a/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UITextView+RACSignalSupport.h b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UITextView+RACSignalSupport.h new file mode 120000 index 00000000..cd337c32 --- /dev/null +++ b/Pods/Headers/ReactiveCocoa/ReactiveCocoa/UITextView+RACSignalSupport.h @@ -0,0 +1 @@ +../../../ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UITextView+RACSignalSupport.h \ No newline at end of file diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index 738e9f5a..8f3dff16 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -2,18 +2,26 @@ PODS: - Kiwi (2.2) - OHHTTPStubs (1.0.1) - Reachability (3.0.0) + - ReactiveCocoa (2.1.7): + - ReactiveCocoa/Core + - ReactiveCocoa/no-arc + - ReactiveCocoa/Core (2.1.7): + - ReactiveCocoa/no-arc + - ReactiveCocoa/no-arc (2.1.7) - SocketRocket (HEAD based on 0.2.0) DEPENDENCIES: - Kiwi - OHHTTPStubs - Reachability + - ReactiveCocoa - SocketRocket (HEAD) SPEC CHECKSUMS: Kiwi: db174bba4ee8068b15d7122f1b22fb64b7c1d378 OHHTTPStubs: 25b40f0c39ce8dab25b3fc4b52d630e7a665f3fb Reachability: 500bd76bf6cd8ff2c6fb715fc5f44ef6e4c024f2 + ReactiveCocoa: 1117f7968c8667d2ca00b5aa47156fabcb56af75 SocketRocket: bca43a94bd9aac3a629df42c06843402399ee67b COCOAPODS: 0.28.0 diff --git a/Pods/Pods-Acknowledgements.markdown b/Pods/Pods-Acknowledgements.markdown index d0194594..de6bb8bb 100644 --- a/Pods/Pods-Acknowledgements.markdown +++ b/Pods/Pods-Acknowledgements.markdown @@ -15,6 +15,29 @@ Redistribution and use in source and binary forms, with or without modification, THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +## ReactiveCocoa + +**Copyright (c) 2012 - 2013, GitHub, Inc.** +**All rights reserved.** + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + ## SocketRocket diff --git a/Pods/Pods-Acknowledgements.plist b/Pods/Pods-Acknowledgements.plist index a1798f90..61e2a823 100644 --- a/Pods/Pods-Acknowledgements.plist +++ b/Pods/Pods-Acknowledgements.plist @@ -30,6 +30,33 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND Type PSGroupSpecifier + + FooterText + **Copyright (c) 2012 - 2013, GitHub, Inc.** +**All rights reserved.** + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + Title + ReactiveCocoa + Type + PSGroupSpecifier + FooterText diff --git a/Pods/Pods-Reachability-Private.xcconfig b/Pods/Pods-Reachability-Private.xcconfig index 4cf70798..22021a26 100644 --- a/Pods/Pods-Reachability-Private.xcconfig +++ b/Pods/Pods-Reachability-Private.xcconfig @@ -1,5 +1,5 @@ #include "Pods-Reachability.xcconfig" GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/Reachability" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/Kiwi" "${PODS_ROOT}/Headers/OHHTTPStubs" "${PODS_ROOT}/Headers/Reachability" "${PODS_ROOT}/Headers/SocketRocket" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/Reachability" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/Kiwi" "${PODS_ROOT}/Headers/OHHTTPStubs" "${PODS_ROOT}/Headers/Reachability" "${PODS_ROOT}/Headers/ReactiveCocoa" "${PODS_ROOT}/Headers/ReactiveCocoa/ReactiveCocoa" "${PODS_ROOT}/Headers/SocketRocket" OTHER_LDFLAGS = -ObjC ${PODS_REACHABILITY_OTHER_LDFLAGS} PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/Pods/Pods-ReactiveCocoa-Private.xcconfig b/Pods/Pods-ReactiveCocoa-Private.xcconfig new file mode 100644 index 00000000..d3890997 --- /dev/null +++ b/Pods/Pods-ReactiveCocoa-Private.xcconfig @@ -0,0 +1,5 @@ +#include "Pods-ReactiveCocoa.xcconfig" +GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/ReactiveCocoa" "${PODS_ROOT}/BuildHeaders/ReactiveCocoa/ReactiveCocoa" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/Kiwi" "${PODS_ROOT}/Headers/OHHTTPStubs" "${PODS_ROOT}/Headers/Reachability" "${PODS_ROOT}/Headers/ReactiveCocoa" "${PODS_ROOT}/Headers/ReactiveCocoa/ReactiveCocoa" "${PODS_ROOT}/Headers/SocketRocket" +OTHER_LDFLAGS = -ObjC +PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/Pods/Pods-ReactiveCocoa-dummy.m b/Pods/Pods-ReactiveCocoa-dummy.m new file mode 100644 index 00000000..3fd1bfdd --- /dev/null +++ b/Pods/Pods-ReactiveCocoa-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_ReactiveCocoa : NSObject +@end +@implementation PodsDummy_Pods_ReactiveCocoa +@end diff --git a/Pods/Pods-ReactiveCocoa-prefix.pch b/Pods/Pods-ReactiveCocoa-prefix.pch new file mode 100644 index 00000000..b522c18d --- /dev/null +++ b/Pods/Pods-ReactiveCocoa-prefix.pch @@ -0,0 +1,7 @@ +#ifdef __OBJC__ +#import +#endif + +#import "Pods-environment.h" + + diff --git a/Pods/Pods-ReactiveCocoa.xcconfig b/Pods/Pods-ReactiveCocoa.xcconfig new file mode 100644 index 00000000..e69de29b diff --git a/Pods/Pods-SocketRocket-Private.xcconfig b/Pods/Pods-SocketRocket-Private.xcconfig index 3e7a6658..794584af 100644 --- a/Pods/Pods-SocketRocket-Private.xcconfig +++ b/Pods/Pods-SocketRocket-Private.xcconfig @@ -1,5 +1,5 @@ #include "Pods-SocketRocket.xcconfig" GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/SocketRocket" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/Kiwi" "${PODS_ROOT}/Headers/OHHTTPStubs" "${PODS_ROOT}/Headers/Reachability" "${PODS_ROOT}/Headers/SocketRocket" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/SocketRocket" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/Kiwi" "${PODS_ROOT}/Headers/OHHTTPStubs" "${PODS_ROOT}/Headers/Reachability" "${PODS_ROOT}/Headers/ReactiveCocoa" "${PODS_ROOT}/Headers/ReactiveCocoa/ReactiveCocoa" "${PODS_ROOT}/Headers/SocketRocket" OTHER_LDFLAGS = -ObjC ${PODS_SOCKETROCKET_OTHER_LDFLAGS} PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/Pods/Pods-environment.h b/Pods/Pods-environment.h index fcbaac85..1166b659 100644 --- a/Pods/Pods-environment.h +++ b/Pods/Pods-environment.h @@ -12,6 +12,24 @@ #define COCOAPODS_VERSION_MINOR_Reachability 0 #define COCOAPODS_VERSION_PATCH_Reachability 0 +// ReactiveCocoa +#define COCOAPODS_POD_AVAILABLE_ReactiveCocoa +#define COCOAPODS_VERSION_MAJOR_ReactiveCocoa 2 +#define COCOAPODS_VERSION_MINOR_ReactiveCocoa 1 +#define COCOAPODS_VERSION_PATCH_ReactiveCocoa 7 + +// ReactiveCocoa/Core +#define COCOAPODS_POD_AVAILABLE_ReactiveCocoa_Core +#define COCOAPODS_VERSION_MAJOR_ReactiveCocoa_Core 2 +#define COCOAPODS_VERSION_MINOR_ReactiveCocoa_Core 1 +#define COCOAPODS_VERSION_PATCH_ReactiveCocoa_Core 7 + +// ReactiveCocoa/no-arc +#define COCOAPODS_POD_AVAILABLE_ReactiveCocoa_no_arc +#define COCOAPODS_VERSION_MAJOR_ReactiveCocoa_no_arc 2 +#define COCOAPODS_VERSION_MINOR_ReactiveCocoa_no_arc 1 +#define COCOAPODS_VERSION_PATCH_ReactiveCocoa_no_arc 7 + // SocketRocket #define COCOAPODS_POD_AVAILABLE_SocketRocket #define COCOAPODS_VERSION_MAJOR_SocketRocket 0 diff --git a/Pods/Pods-specs-Kiwi-Private.xcconfig b/Pods/Pods-specs-Kiwi-Private.xcconfig index 8b7694ac..e80d6b8f 100644 --- a/Pods/Pods-specs-Kiwi-Private.xcconfig +++ b/Pods/Pods-specs-Kiwi-Private.xcconfig @@ -1,6 +1,6 @@ #include "Pods-specs-Kiwi.xcconfig" FRAMEWORK_SEARCH_PATHS = ${PODS_SPECS_KIWI_FRAMEWORK_SEARCH_PATHS} GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/Kiwi" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/Kiwi" "${PODS_ROOT}/Headers/OHHTTPStubs" "${PODS_ROOT}/Headers/Reachability" "${PODS_ROOT}/Headers/SocketRocket" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/Kiwi" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/Kiwi" "${PODS_ROOT}/Headers/OHHTTPStubs" "${PODS_ROOT}/Headers/Reachability" "${PODS_ROOT}/Headers/ReactiveCocoa" "${PODS_ROOT}/Headers/ReactiveCocoa/ReactiveCocoa" "${PODS_ROOT}/Headers/SocketRocket" OTHER_LDFLAGS = -ObjC ${PODS_SPECS_KIWI_OTHER_LDFLAGS} PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/Pods/Pods-specs-OHHTTPStubs-Private.xcconfig b/Pods/Pods-specs-OHHTTPStubs-Private.xcconfig index d4e4f1c1..828081d1 100644 --- a/Pods/Pods-specs-OHHTTPStubs-Private.xcconfig +++ b/Pods/Pods-specs-OHHTTPStubs-Private.xcconfig @@ -1,5 +1,5 @@ #include "Pods-specs-OHHTTPStubs.xcconfig" GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/OHHTTPStubs" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/Kiwi" "${PODS_ROOT}/Headers/OHHTTPStubs" "${PODS_ROOT}/Headers/Reachability" "${PODS_ROOT}/Headers/SocketRocket" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/OHHTTPStubs" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/Kiwi" "${PODS_ROOT}/Headers/OHHTTPStubs" "${PODS_ROOT}/Headers/Reachability" "${PODS_ROOT}/Headers/ReactiveCocoa" "${PODS_ROOT}/Headers/ReactiveCocoa/ReactiveCocoa" "${PODS_ROOT}/Headers/SocketRocket" OTHER_LDFLAGS = -ObjC PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/Pods/Pods-specs.xcconfig b/Pods/Pods-specs.xcconfig index c0de6fd6..5bfca83c 100644 --- a/Pods/Pods-specs.xcconfig +++ b/Pods/Pods-specs.xcconfig @@ -1,5 +1,5 @@ FRAMEWORK_SEARCH_PATHS = $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(DEVELOPER_LIBRARY_DIR)/Frameworks" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/Kiwi" "${PODS_ROOT}/Headers/OHHTTPStubs" "${PODS_ROOT}/Headers/Reachability" "${PODS_ROOT}/Headers/SocketRocket" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/Kiwi" "${PODS_ROOT}/Headers/OHHTTPStubs" "${PODS_ROOT}/Headers/Reachability" "${PODS_ROOT}/Headers/ReactiveCocoa" "${PODS_ROOT}/Headers/ReactiveCocoa/ReactiveCocoa" "${PODS_ROOT}/Headers/SocketRocket" OTHER_LDFLAGS = -ObjC -framework SenTestingKit PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/Pods/Pods.xcconfig b/Pods/Pods.xcconfig index bf86a1f2..f9451faf 100644 --- a/Pods/Pods.xcconfig +++ b/Pods/Pods.xcconfig @@ -1,4 +1,4 @@ GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/Kiwi" "${PODS_ROOT}/Headers/OHHTTPStubs" "${PODS_ROOT}/Headers/Reachability" "${PODS_ROOT}/Headers/SocketRocket" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/Kiwi" "${PODS_ROOT}/Headers/OHHTTPStubs" "${PODS_ROOT}/Headers/Reachability" "${PODS_ROOT}/Headers/ReactiveCocoa" "${PODS_ROOT}/Headers/ReactiveCocoa/ReactiveCocoa" "${PODS_ROOT}/Headers/SocketRocket" OTHER_LDFLAGS = -ObjC -framework CFNetwork -framework Security -framework SystemConfiguration PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index a9153dd5..9c3762e6 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -10,14 +10,97 @@ 46 objects - 012E700EE221494EA64AFFDC + 002213C66BFA43BC88E6C87C + + children + + 3C10429833BA4FF496BFBA2C + B15B1B188BA84C97ABDC5C42 + EAE64924340A463FB638A8C3 + 523D92D0958140FEA4A15703 + + isa + PBXGroup + name + Support Files + sourceTree + SOURCE_ROOT + + 006505DCB63C49C6AC141116 + + fileRef + 11CB839B9D3544B4A698BBDC + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 00CDD16060B34B2AA072743A + + fileRef + 0A6AD1F25F17462092E426E6 + isa + PBXBuildFile + + 00EFCF0925324CB8BCAC1DD7 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWStringPrefixMatcher.h + path + Classes/KWStringPrefixMatcher.h + sourceTree + <group> + + 00FA74F1A9B844C0971B3F27 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACScheduler.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACScheduler.h + sourceTree + <group> + + 00FE4AA931F74A278E4AE20E + + explicitFileType + archive.ar + includeInIndex + 0 + isa + PBXFileReference + path + libPods-specs.a + sourceTree + BUILT_PRODUCTS_DIR + + 01109DFF02D046A8B33FDA28 fileRef - 532E269EEC5445FB9593929F + 011E23B0EC0447BAB81117BE isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 0136C6FEC0404CC29428E102 + 011E23B0EC0447BAB81117BE includeInIndex 1 @@ -26,16 +109,23 @@ lastKnownFileType sourcecode.c.objc name - KWSymbolicator.m + KWInvocationCapturer.m path - Classes/KWSymbolicator.m + Classes/KWInvocationCapturer.m sourceTree <group> - 0162EEF03886440192ACD088 + 0128DC02ACC44D11B943F116 + + fileRef + 072F4D5A159146A089344825 + isa + PBXBuildFile + + 0183B220EF7B49C68296319A fileRef - F24A12F6E2C64DADB97A429F + 0FE390E54A1D4F9B98A12B75 isa PBXBuildFile settings @@ -44,7 +134,14 @@ -w -Xanalyzer -analyzer-disable-checker - 019CF53B9F934120867BCC03 + 018A4422F095460791593192 + + fileRef + 00FA74F1A9B844C0971B3F27 + isa + PBXBuildFile + + 01A88CE06E43421E81687AA6 includeInIndex 1 @@ -53,16 +150,111 @@ lastKnownFileType sourcecode.c.objc name - KWObjCUtilities.m + KWBeforeAllNode.m path - Classes/KWObjCUtilities.m + Classes/KWBeforeAllNode.m + sourceTree + <group> + + 02290D0240FD4719BD909556 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RACSignal+Operations.m + path + ReactiveCocoaFramework/ReactiveCocoa/RACSignal+Operations.m + sourceTree + <group> + + 02616A972EBA4ADE98ACA097 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWBlock.m + path + Classes/KWBlock.m + sourceTree + <group> + + 02B72FB1BAE046F9A722326A + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWSpec.h + path + Classes/KWSpec.h + sourceTree + <group> + + 03D93B8DA9224BA0B3822BD8 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + Pods-specs-Kiwi-prefix.pch sourceTree <group> - 02306DAF3AC449A0833E8330 + 03F0B9797FFD47F18002FB94 + + fileRef + 1AF6555748A24DF8A242A662 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 0402D00C4DFB42199217841D + + buildConfigurationList + A06199B41C7A42869DBA4850 + buildPhases + + 48D979147BD14312945D14C5 + 63DD62F1AC6E44F0B6D7C245 + AE5BD0C78D984D5682163C03 + + buildRules + + dependencies + + isa + PBXNativeTarget + name + Pods-ReactiveCocoa + productName + Pods-ReactiveCocoa + productReference + 5A3A8742B8FD4F0D98E23A99 + productType + com.apple.product-type.library.static + + 041407CDD2064CDFA000AC22 baseConfigurationReference - 3B0F2646415548AD84525C6F + 2A4E80FD601C41D1B2127F15 buildSettings ALWAYS_SEARCH_USER_PATHS @@ -75,12 +267,14 @@ gnu99 GCC_PRECOMPILE_PREFIX_HEADER YES + GCC_PREFIX_HEADER + Pods-specs-Kiwi-prefix.pch GCC_VERSION com.apple.compilers.llvm.clang.1_0 INSTALL_PATH $(BUILT_PRODUCTS_DIR) IPHONEOS_DEPLOYMENT_TARGET - 4.0 + 5.0 OTHER_CFLAGS -DNS_BLOCK_ASSERTIONS=1 @@ -109,34 +303,55 @@ name Release - 02A5E865C1E542908AC9092E + 041E58F497624808B4848ED3 + + fileRef + 3C4E26096492433E9FD101C1 + isa + PBXBuildFile + + 04A4146C17D141BD82049C73 + + fileRef + 50E826F43D0F4FD7B5D37294 + isa + PBXBuildFile + + 05271C08C02944D996DA8CD3 + + fileRef + C71CA4F8073E4B3FA8291299 + isa + PBXBuildFile + + 052E094B207C4372B959E620 fileRef - 0136C6FEC0404CC29428E102 + 84D1954B5074420691A31E3A isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 02CE1847192D46CB99248DA7 + 0549192BBCB34EA58BCF73C4 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWRaiseMatcher.h + NSObject+RACKVOWrapper.m path - Classes/KWRaiseMatcher.h + ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACKVOWrapper.m sourceTree <group> - 03127DB2B76E413389B71110 + 06136C9D62C147BFAFF3A6E7 includeInIndex 1 @@ -145,40 +360,38 @@ lastKnownFileType sourcecode.c.h name - KWObjCUtilities.h + RACEagerSequence.h path - Classes/KWObjCUtilities.h + ReactiveCocoaFramework/ReactiveCocoa/RACEagerSequence.h sourceTree <group> - 031B6BA4066440EAAF7C395F + 063659C829454C82A619E4F8 - includeInIndex - 1 + buildConfigurationList + 46AA7648C8CF43D3AF534C2A + buildPhases + + 29BE2EC28F4B47B5B49C76C6 + C419D736F80543DCB883C705 + 0EA58BEC60F04B498226220D + + buildRules + + dependencies + isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc + PBXNativeTarget name - KWContextNode.m - path - Classes/KWContextNode.m - sourceTree - <group> - - 0375994CD49046BDA9F30123 - - fileRef - 91C847FC9A9D4BC78051552A - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - + Pods-Reachability + productName + Pods-Reachability + productReference + 7D65B9FB661147F599209F8B + productType + com.apple.product-type.library.static - 037C6F64A77342F389E47CA1 + 068D9ED896A94AF2BF713D23 includeInIndex 1 @@ -187,26 +400,28 @@ lastKnownFileType sourcecode.c.h name - NSInvocation+KiwiAdditions.h + RACMulticastConnection.h path - Classes/NSInvocation+KiwiAdditions.h + ReactiveCocoaFramework/ReactiveCocoa/RACMulticastConnection.h sourceTree <group> - 03B4A57C7A8D4450AC82D770 + 06A552ABA0EC48E6BE53E264 includeInIndex 1 isa PBXFileReference lastKnownFileType - text + sourcecode.c.objc + name + NSValue+KiwiAdditions.m path - Pods-acknowledgements.markdown + Classes/NSValue+KiwiAdditions.m sourceTree <group> - 03F05C358E854E8DA923970F + 072F4D5A159146A089344825 includeInIndex 1 @@ -215,26 +430,35 @@ lastKnownFileType sourcecode.c.h name - SRWebSocket.h + KWBeSubclassOfClassMatcher.h path - SocketRocket/SRWebSocket.h + Classes/KWBeSubclassOfClassMatcher.h sourceTree <group> - 04AC5B12B1924BE0A2D9B018 + 0756253C4EE34A4CA3408E25 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.objc + name + NSInvocation+RACTypeParsing.m path - Pods-specs-OHHTTPStubs.xcconfig + ReactiveCocoaFramework/ReactiveCocoa/NSInvocation+RACTypeParsing.m sourceTree <group> - 04F8EDEA67CD47CFAB41A953 + 0789AB73B2DE41C987B95B02 + + fileRef + 7D65B9FB661147F599209F8B + isa + PBXBuildFile + + 0799C3C8DF1C400D9BD56A7E includeInIndex 1 @@ -243,20 +467,27 @@ lastKnownFileType sourcecode.c.objc name - KWInvocationCapturer.m + RACTestScheduler.m path - Classes/KWInvocationCapturer.m + ReactiveCocoaFramework/ReactiveCocoa/RACTestScheduler.m sourceTree <group> - 052A27F9A84547CFA5D6CF71 + 083791F0A7264D4BBC61B52D fileRef - B42B66B2AB2C439B85DB6F3B + 408C107D614240478A48FC45 isa PBXBuildFile - 0589BE3750D34DFAA62C257F + 08521C9395CD4D08BECBBEB5 + + fileRef + 1CA392F4FE0041718008A555 + isa + PBXBuildFile + + 08A1EF1724374DAE8DFAF285 includeInIndex 1 @@ -264,36 +495,51 @@ PBXFileReference lastKnownFileType sourcecode.c.h + name + UISegmentedControl+RACSignalSupport.h path - Pods-specs-Kiwi-prefix.pch + ReactiveCocoaFramework/ReactiveCocoa/UISegmentedControl+RACSignalSupport.h sourceTree <group> - 068884E3B2C9451F817637D8 + 08D62584CB044423B4FBA2C4 - fileRef - 27254752573F454797B1ACFE + includeInIndex + 1 isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RACArraySequence.m + path + ReactiveCocoaFramework/ReactiveCocoa/RACArraySequence.m + sourceTree + <group> + + 0907D7C22C3F4A0A857F3E38 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + NSInvocation+RACTypeParsing.h + path + ReactiveCocoaFramework/ReactiveCocoa/NSInvocation+RACTypeParsing.h + sourceTree + <group> - 076A1599E77641D8B751C3B7 + 097EE9E3EA3A4CD8AF8D24A1 fileRef - 7074542AAB8D443198B871D1 + 7BE69C7F20244315B3215BF9 isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - 07926D06ED154D638E71C495 + 0988090F73D54254A25F6DE1 includeInIndex 1 @@ -302,179 +548,129 @@ lastKnownFileType sourcecode.c.h name - KWReceiveMatcher.h + NSInvocation+OCMAdditions.h path - Classes/KWReceiveMatcher.h + Classes/NSInvocation+OCMAdditions.h sourceTree <group> - 080B01D0317F4003B6F2E75A + 09D8FBD4CBC34F718790D2D3 fileRef - 1CE0DAE9B1C240B89A90A668 + 981CC30D0F674C24826FFC3B isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 090196E35042422EACB1091F + 0A4F3C639DF7496FBE5DB8F9 + + children + + 400DC0602AD64C8F84518D92 + 6A1A9B8DEC6447AFBFFCA440 + 9F497F4B641743868D8F7742 + 28F097249507485D86D2CFB3 + + isa + PBXGroup + name + Support Files + sourceTree + SOURCE_ROOT + + 0A6AD1F25F17462092E426E6 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - NSMethodSignature+KiwiAdditions.m + KWContextNode.h path - Classes/NSMethodSignature+KiwiAdditions.m + Classes/KWContextNode.h sourceTree <group> - 09210E44857A4D7089A55805 - - fileRef - 962EC98421D24966A0E4C696 - isa - PBXBuildFile - - 0960F8403AD2492AA7CE7920 + 0A7C8CB648E34D22BA49DC67 fileRef - 64101EE568764E3EBAD29FA8 + 0DE359521DB44B8BB58851F0 isa PBXBuildFile settings COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + -w -Xanalyzer -analyzer-disable-checker - 0A7CB779FCC14A61982E0E9E + 0AAA23E4769844409E164717 fileRef - C4E290F9834D4B04B8CA5963 + 4CCD9D13DC4E4B6AA766B153 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 0A9A0261E4ED4AE780EF9120 - - fileRef - 2223BD9BF15C4E038845AC59 - isa - PBXBuildFile - - 0BC66B4BDF7D418B9743BEA7 + 0B97546E56F6468492891F50 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWRespondToSelectorMatcher.h + KWAsyncVerifier.m path - Classes/KWRespondToSelectorMatcher.h + Classes/KWAsyncVerifier.m sourceTree <group> - 0BF201DFF8494CEAA23A4DA1 - - baseConfigurationReference - B99D2982DD364339B4DE196A - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Pods-SocketRocket-prefix.pch - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 4.0 - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Debug - - 0C68169B77D04AECADAEFB45 + 0B9847163B87433D89595766 fileRef - FCF264B3CF2A49CE981915D1 + DB2179E6CFC14E158426AFFA isa PBXBuildFile - 0D01DC7FB6D04D7882069860 + 0BC5D37D947E4D45A6D41886 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWUserDefinedMatcher.h + KWBlockNode.m path - Classes/KWUserDefinedMatcher.h + Classes/KWBlockNode.m sourceTree <group> - 0D8D3EA244524593989E0B52 + 0C2778DD16544965BE613972 - includeInIndex - 1 + fileRef + 1A513DA3413145C5AFC020AF isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods-specs-Kiwi.xcconfig - sourceTree - <group> + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 0DAEE9065B0A49F4A174501A + 0C66A6206848438B9317E3A7 includeInIndex 1 @@ -483,120 +679,75 @@ lastKnownFileType sourcecode.c.objc name - NSObject+KiwiVerifierAdditions.m + RACEXTRuntimeExtensions.m path - Classes/NSObject+KiwiVerifierAdditions.m + ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACEXTRuntimeExtensions.m sourceTree <group> - 0DB8C587984C4C819B132205 + 0C9280FA086D45B789940A85 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.h + name + OHHTTPStubsResponse.h path - Pods-SocketRocket.xcconfig + OHHTTPStubs/OHHTTPStubsResponse.h sourceTree <group> - 0EBFE40558BC490F91DF77BC + 0CC70054E0BD4E3AA5EC3EA0 - explicitFileType - archive.ar includeInIndex - 0 + 1 isa PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACSubscriptionScheduler.h path - libPods.a + ReactiveCocoaFramework/ReactiveCocoa/RACSubscriptionScheduler.h sourceTree - BUILT_PRODUCTS_DIR + <group> - 0ECF57D8D8614485A25BD387 + 0CF8701D50C54959BEE4367B fileRef - 2D5C4349A9F844DEAA444378 + 7136BFD4C2A946AFBFA72482 isa PBXBuildFile - 0EE143C221AC43C3A516AE9F + 0D66EF14253D49378094C744 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc + name + KWExample.m path - Reachability.h + Classes/KWExample.m sourceTree <group> - 0F3E746C00904AB7B2AEFD60 + 0D8ED76004544CAA96154FCD - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - CLANG_CXX_LANGUAGE_STANDARD - gnu++0x - CLANG_CXX_LIBRARY - libc++ - CLANG_ENABLE_MODULES - YES - CLANG_ENABLE_OBJC_ARC - NO - CLANG_WARN_BOOL_CONVERSION - YES - CLANG_WARN_CONSTANT_CONVERSION - YES - CLANG_WARN_DIRECT_OBJC_ISA_USAGE - YES_ERROR - CLANG_WARN_EMPTY_BODY - YES - CLANG_WARN_ENUM_CONVERSION - YES - CLANG_WARN_INT_CONVERSION - YES - CLANG_WARN_OBJC_ROOT_CLASS - YES_ERROR - COPY_PHASE_STRIP - NO - ENABLE_NS_ASSERTIONS - NO - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_WARN_64_TO_32_BIT_CONVERSION - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES_ERROR - GCC_WARN_UNDECLARED_SELECTOR - YES - GCC_WARN_UNINITIALIZED_AUTOS - YES - GCC_WARN_UNUSED_FUNCTION - YES - GCC_WARN_UNUSED_VARIABLE - YES - IPHONEOS_DEPLOYMENT_TARGET - 4.0 - STRIP_INSTALLED_PRODUCT - NO - VALIDATE_PRODUCT - YES - + fileRef + F98668C4B8E24C36B5B93224 isa - XCBuildConfiguration - name - Release + PBXBuildFile - 0F9B254138944CD0A553BF06 + 0DBEC28C43A74AB2868061B7 fileRef - F3376D236AF94D0F90F29DF6 + FD8E538DAE614D2FA8CC5A65 isa PBXBuildFile settings @@ -605,179 +756,199 @@ -w -Xanalyzer -analyzer-disable-checker - 0FCFBF21A11047848E8D7653 - - fileRef - CE935C9D71AA4B01B465AB1C - isa - PBXBuildFile - - 101DE15DDFD44EDAA0D2C31F + 0DE359521DB44B8BB58851F0 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWRegisterMatchersNode.h + KWReceiveMatcher.m path - Classes/KWRegisterMatchersNode.h + Classes/KWReceiveMatcher.m sourceTree <group> - 10BFE4AD9B4146C1B2D0CFF7 + 0E19815BFEDE414781FC6560 fileRef - 6D3299A50BC348AC87FCE9A4 - isa - PBXBuildFile - - 10D1A08B264F48288C9D26DB - - fileRef - CEAE6BFD13A6444BA369FEEB + 3A4D5B4C955A4A13983E8616 isa PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 10F30B15A5484BDCA0CBCEC5 + 0E348C8D94804EBF9D4ED132 fileRef - 13996E6DDDE04F34B05DC432 + AC4FE112AC644974ACDBB944 isa PBXBuildFile - 1101292040514398BF4DDA64 + 0EA58BEC60F04B498226220D - fileRef - 8D78F141C95141BE9A535384 + buildActionMask + 2147483647 + files + + BC89064F796746F3AD7646FB + isa - PBXBuildFile + PBXHeadersBuildPhase + runOnlyForDeploymentPostprocessing + 0 - 11253ED06B2941C999067601 + 0ED4A9E80328433CB1DD4D8B - fileRef - 2A0B0396A8154DC6935A91A9 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + text + path + Pods-specs-acknowledgements.markdown + sourceTree + <group> - 12F77D49665540A999F08418 + 0EDD851F5BC24A55B4FB4F5B includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWBeSubclassOfClassMatcher.h + NSInvocation+OCMAdditions.m path - Classes/KWBeSubclassOfClassMatcher.h + Classes/NSInvocation+OCMAdditions.m sourceTree <group> - 131A18BCC77C4878A5ADDE4B - - fileRef - 037C6F64A77342F389E47CA1 - isa - PBXBuildFile - - 13996E6DDDE04F34B05DC432 + 0F0099A8FFF44612BFF6FB5D includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWProbePoller.h + NSString+RACSequenceAdditions.m path - Classes/KWProbePoller.h + ReactiveCocoaFramework/ReactiveCocoa/NSString+RACSequenceAdditions.m sourceTree <group> - 1480D3DD81F5482087E03701 - - fileRef - 8CDFB9978A914A6E8E289296 - isa - PBXBuildFile - - 14A17D430468457198C4232F + 0F80146C3286492786396D72 - fileRef - DB532E7DD2C14E38BF0AA0AB + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWNull.m + path + Classes/KWNull.m + sourceTree + <group> - 1601B352B2AC4BF39B53901D + 0FE390E54A1D4F9B98A12B75 - fileRef - 2E97EDA73E5E497BB8E46FAB + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWStub.m + path + Classes/KWStub.m + sourceTree + <group> - 166B6D77C59449F7A9113164 + 10C30819C67B48638ACFB8F5 - fileRef - 5AA7ED306FAF4838B8648877 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + SRWebSocket.m + path + SocketRocket/SRWebSocket.m + sourceTree + <group> - 1694E90D6E8A451D91F9CC90 + 114BD20560BC429DA72A9C5C - fileRef - FCF264B3CF2A49CE981915D1 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + UITableViewCell+RACSignalSupport.m + path + ReactiveCocoaFramework/ReactiveCocoa/UITableViewCell+RACSignalSupport.m + sourceTree + <group> - 17237A26F10D450C8403F039 + 11CB839B9D3544B4A698BBDC includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWBeZeroMatcher.h + KWGenericMatchEvaluator.m path - Classes/KWBeZeroMatcher.h + Classes/KWGenericMatchEvaluator.m sourceTree <group> - 1731E8CAC2234640B82FBD9D + 124EFA25229848358CE27175 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWEqualMatcher.h + KWDeviceInfo.m path - Classes/KWEqualMatcher.h + Classes/KWDeviceInfo.m sourceTree <group> - 1743A09D6AFD46788C358B14 + 12A11E6980B14F098D5D2FD9 - buildActionMask - 2147483647 - files - - 1694E90D6E8A451D91F9CC90 - + fileRef + DBF23712AD1341D79E414D00 isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 17CC07321D9F4DD5A8B3E2BB + 12C605A130B94D0896B7324E includeInIndex 1 @@ -786,58 +957,50 @@ lastKnownFileType sourcecode.c.h name - KWBeTrueMatcher.h + RACErrorSignal.h path - Classes/KWBeTrueMatcher.h + ReactiveCocoaFramework/ReactiveCocoa/RACErrorSignal.h sourceTree <group> - 17E99F172BB04E7FA385D3B1 + 12C64636FAC14868AE6DDA18 - explicitFileType - archive.ar includeInIndex - 0 + 1 isa PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWExistVerifier.h path - libPods-specs-Kiwi.a + Classes/KWExistVerifier.h sourceTree - BUILT_PRODUCTS_DIR + <group> - 18E0BD8C1A7F416291A75D81 + 13811616FF3443FF8EB3000B includeInIndex 1 isa PBXFileReference lastKnownFileType - text.plist.xml + sourcecode.c.objc + name + NSString+RACSupport.m path - Pods-specs-acknowledgements.plist + ReactiveCocoaFramework/ReactiveCocoa/NSString+RACSupport.m sourceTree <group> - 19BF9FFCFAB347B19BEBF81A - - fileRef - C762FA623AD54994865A5C20 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - - 1A405738C62443209E636724 + 13A38F574BB84912BE400C64 fileRef - 6A36015C0DE8407CA634E58A + C48BFD32853148A6A50A8EF2 isa PBXBuildFile - 1AF71CB4A9344C2BBB738F47 + 13D58A1BA64A48858E2E49DD includeInIndex 1 @@ -846,35 +1009,60 @@ lastKnownFileType sourcecode.c.objc name - KWRegularExpressionPatternMatcher.m + UITextView+RACSignalSupport.m path - Classes/KWRegularExpressionPatternMatcher.m + ReactiveCocoaFramework/ReactiveCocoa/UITextView+RACSignalSupport.m sourceTree <group> - 1C2C7AE386504CFEA89861A8 + 13F2D2D950854BEF917D776C + + buildActionMask + 2147483647 + files + + C4B9054E508C4291BA1A9FB6 + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 146E9B1E965E48FD9D306DC7 + + fileRef + 187EC25AB69E4B98AD18572F + isa + PBXBuildFile + + 146E9DCCC1514DD283A458EC includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWFailure.m + NSValue+KiwiAdditions.h path - Classes/KWFailure.m + Classes/NSValue+KiwiAdditions.h sourceTree <group> - 1CB76CE981B04DBC82319348 + 14CB6CB5EEE34C9894A621C3 fileRef - AC0F8A06DE804D9F8BFE2CD8 + CD88C965FD144077A9EA5996 isa PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 1CE0DAE9B1C240B89A90A668 + 1521FFD6F75A40DAB94ACE40 includeInIndex 1 @@ -883,13 +1071,32 @@ lastKnownFileType sourcecode.c.objc name - KWMatchVerifier.m + KWProbePoller.m path - Classes/KWMatchVerifier.m + Classes/KWProbePoller.m sourceTree <group> - 1D13657582A1438B8CB5826D + 157FA199DCD24618A85EED3F + + fileRef + 74E86158709945BD83B008FA + isa + PBXBuildFile + + 161BB060B93F42E8A985913A + + fileRef + 1E162C30F4F641AF89E36F33 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 162EACA552DA4EFDA0E61371 includeInIndex 1 @@ -898,31 +1105,62 @@ lastKnownFileType sourcecode.c.objc name - KWBeNonNilMatcher.m + KWMock.m path - Classes/KWBeNonNilMatcher.m + Classes/KWMock.m sourceTree <group> - 1DD726E13AF0433EB40BD89C + 16557A788BBC4A1DB8AFE695 + + fileRef + 8D8B572537864D34AF142F4A + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 167F3C8E1D3143A1873C1E1B + + fileRef + C1F0907DC2724A54B83ECD36 + isa + PBXBuildFile + + 168903ABF9454B78954156F5 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWExampleNode.h + RACEmptySequence.m path - Classes/KWExampleNode.h + ReactiveCocoaFramework/ReactiveCocoa/RACEmptySequence.m sourceTree <group> - 1E0F4A803BA542E49C3AC719 + 172F92CFE1C345A0A5A58AC6 + + fileRef + 06A552ABA0EC48E6BE53E264 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 17C3EC31285D48CEB5B00367 fileRef - 3CF0C1FB3C68470B9AF60830 + B537597C504E427B9DC86A48 isa PBXBuildFile settings @@ -931,20 +1169,29 @@ -w -Xanalyzer -analyzer-disable-checker - 1E13303919A74B32946FE490 + 17E3C735A53048C6A34198FE includeInIndex 1 isa PBXFileReference lastKnownFileType - text + sourcecode.c.h + name + KWFutureObject.h path - Pods-specs-acknowledgements.markdown + Classes/KWFutureObject.h sourceTree <group> - 1E869704A40D46CE9BEF36C2 + 180A4600FC7E44CCB1B33763 + + fileRef + 8B6E23560B6F45D8B2BEE903 + isa + PBXBuildFile + + 180D9CE0DCB846F39C434383 includeInIndex 1 @@ -957,7 +1204,7 @@ sourceTree <group> - 1EB52154FAA54382B9DE5774 + 185F34A7C47140BD85EF19DD includeInIndex 1 @@ -966,13 +1213,13 @@ lastKnownFileType sourcecode.c.objc name - KWItNode.m + UIControl+RACSignalSupportPrivate.m path - Classes/KWItNode.m + ReactiveCocoaFramework/ReactiveCocoa/UIControl+RACSignalSupportPrivate.m sourceTree <group> - 1F63D9A4933B46CFBE7147E3 + 187EC25AB69E4B98AD18572F includeInIndex 1 @@ -981,55 +1228,35 @@ lastKnownFileType sourcecode.c.h name - KWExampleGroupBuilder.h + KWReceiveMatcher.h path - Classes/KWExampleGroupBuilder.h + Classes/KWReceiveMatcher.h sourceTree <group> - 2039E9183C1B42ED89EBAE7A - - buildActionMask - 2147483647 - files - - 42A653A52FE94003BCF629EC - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 2055DC61B7024729929F295B + 1921F3201B6C4F5FAC1A4ADF includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWFailure.h + RACPassthroughSubscriber.m path - Classes/KWFailure.h + ReactiveCocoaFramework/ReactiveCocoa/RACPassthroughSubscriber.m sourceTree <group> - 206D8429722747DB9FB10D71 + 193015FEE23D4287A657FF8B - children - - 78E6CC5D4930408A976FBCFC - CBF38EC28FB941DE9FCEC1A5 - + fileRef + 26AFAED530FE4A58A8D326B2 isa - PBXGroup - name - Targets Support Files - sourceTree - <group> + PBXBuildFile - 2106E4D8F47D4768A05CEF38 + 194B85AAFB3D454BB50BC1CB includeInIndex 1 @@ -1038,65 +1265,20 @@ lastKnownFileType sourcecode.c.objc name - KWStringContainsMatcher.m + NSObject+KiwiMockAdditions.m path - Classes/KWStringContainsMatcher.m + Classes/NSObject+KiwiMockAdditions.m sourceTree <group> - 212C08CD4C86497A8B6EAC23 + 19727C1C40F943B4BEFBB132 - baseConfigurationReference - C7C8C44CDEE04061AECD9B3A - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Pods-specs-OHHTTPStubs-prefix.pch - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 4.0 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES - + fileRef + 572B588A0DD649089CF4C327 isa - XCBuildConfiguration - name - Release + PBXBuildFile - 21413A39C5CD4494BD093263 + 1995B62678FE45A192A5AB24 includeInIndex 1 @@ -1105,46 +1287,112 @@ lastKnownFileType sourcecode.c.objc name - KWRaiseMatcher.m + RACSubscriptionScheduler.m path - Classes/KWRaiseMatcher.m + ReactiveCocoaFramework/ReactiveCocoa/RACSubscriptionScheduler.m sourceTree <group> - 2170B8ABD2E947DAAC75C903 + 1A240A713E5E4D1EB0E25E16 + + fileRef + BE8FFCEC4DB04FF587B7A559 + isa + PBXBuildFile + + 1A2E78E1A99F45D293A979C2 + + fileRef + 482CE5400B8C4694970E64CD + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 1A4CC88A702447E292FE2889 + + fileRef + 3C9CA71753B24B7ABD90EA0F + isa + PBXBuildFile + + 1A513DA3413145C5AFC020AF includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWAfterAllNode.h + NSNotificationCenter+RACSupport.m path - Classes/KWAfterAllNode.h + ReactiveCocoaFramework/ReactiveCocoa/NSNotificationCenter+RACSupport.m sourceTree <group> - 21CFD7BD0A7A49D99591CCF2 + 1A70152110024A5590C0499D + + fileRef + A8B9260B59324479AEC0BCCE + isa + PBXBuildFile + + 1AF6555748A24DF8A242A662 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWBlockRaiseMatcher.h + KWValue.m path - Classes/KWBlockRaiseMatcher.h + Classes/KWValue.m sourceTree <group> - 21E1DC6BEE1748869B3FF7EE + 1B0BCCC0AFF4465282D28997 + + fileRef + C9988DAD30D24211A0D9B87E + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 1B198C97EA3145B8A104BC89 + + fileRef + C0762976D3384786BF00EE2A + isa + PBXBuildFile + + 1C14D87E220A4101A616F8F7 + + fileRef + 5FD559D961704045A16F11DF + isa + PBXBuildFile + + 1C2131814E3B49828C4D2392 + + fileRef + C61A973704EA4BC49CE42E0C + isa + PBXBuildFile + + 1C6AAA6D726649A28E867392 fileRef - 99EDF7C7A40A4345A4AC2A00 + E4B9DD62B3994997BB9815EE isa PBXBuildFile settings @@ -1153,7 +1401,7 @@ -w -Xanalyzer -analyzer-disable-checker - 2223BD9BF15C4E038845AC59 + 1CA392F4FE0041718008A555 includeInIndex 1 @@ -1162,13 +1410,13 @@ lastKnownFileType sourcecode.c.h name - KWInvocationCapturer.h + RACEmptySequence.h path - Classes/KWInvocationCapturer.h + ReactiveCocoaFramework/ReactiveCocoa/RACEmptySequence.h sourceTree <group> - 2289F5BE59054018BAACAEE8 + 1CC4D0F1A48E4C3AAD362CF0 includeInIndex 1 @@ -1177,20 +1425,28 @@ lastKnownFileType sourcecode.c.h name - KWStringUtilities.h + RACBacktrace.h path - Classes/KWStringUtilities.h + ReactiveCocoaFramework/ReactiveCocoa/RACBacktrace.h sourceTree <group> - 23862FEDD85643588D2705B2 + 1CD756676E9241DD98F5B3D5 - fileRef - FCF264B3CF2A49CE981915D1 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWBeEmptyMatcher.m + path + Classes/KWBeEmptyMatcher.m + sourceTree + <group> - 24244F9A273F43F8A4941C0F + 1D301BD0BDEC47FB9FEC0305 includeInIndex 1 @@ -1199,25 +1455,13 @@ lastKnownFileType sourcecode.c.h name - OHHTTPStubsResponse.h + KWBeZeroMatcher.h path - OHHTTPStubs/OHHTTPStubsResponse.h + Classes/KWBeZeroMatcher.h sourceTree <group> - 25D18118B70B49E8B307C211 - - fileRef - 019CF53B9F934120867BCC03 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - - 27254752573F454797B1ACFE + 1E162C30F4F641AF89E36F33 includeInIndex 1 @@ -1226,59 +1470,51 @@ lastKnownFileType sourcecode.c.objc name - NSObject+KiwiStubAdditions.m + KWBeWithinMatcher.m path - Classes/NSObject+KiwiStubAdditions.m + Classes/KWBeWithinMatcher.m sourceTree <group> - 27511A96CF144F4590E59119 + 1E16689B410E4F709845351C fileRef - 3EF010FE5CC14A038E33CB45 + 9270CBB8168D4B8AB915CBB7 isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - 27604F8B2A3342FFBB282E37 + 1E282BE0BD124CDA8E329714 - children - - 0D8D3EA244524593989E0B52 - 2846C072D3444C6B895F35AD - 8106A3F641FE48AC8CFBE107 - 0589BE3750D34DFAA62C257F - + includeInIndex + 1 isa - PBXGroup + PBXFileReference + lastKnownFileType + sourcecode.c.objc name - Support Files + KWGenericMatchingAdditions.m + path + Classes/KWGenericMatchingAdditions.m sourceTree - SOURCE_ROOT + <group> - 27A412CBB1E04E7992863DB1 + 1E2A4BFD472046B0A9DA68DC includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h - name - KiwiConfiguration.h + text.xcconfig path - Classes/KiwiConfiguration.h + Pods.xcconfig sourceTree <group> - 283FCB30F7A84712BC18CAE2 + 1F0EE99EE23247CF8E8379BC fileRef - 985BCE1FE41D40A2B5EC00D8 + 4E66F6BC25A54F3CAE9C4140 isa PBXBuildFile settings @@ -1287,85 +1523,117 @@ -w -Xanalyzer -analyzer-disable-checker - 28469D6B3C964842B64C09F0 - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - path - libPods-specs.a - sourceTree - BUILT_PRODUCTS_DIR - - 2846C072D3444C6B895F35AD + 1FF7249D3FA7430FB7CCC462 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.objc + name + RACStringSequence.m path - Pods-specs-Kiwi-Private.xcconfig + ReactiveCocoaFramework/ReactiveCocoa/RACStringSequence.m sourceTree <group> - 287564EBEA034300B6813967 + 204B040DE2F2428E9EDFF73C + + fileRef + 1FF7249D3FA7430FB7CCC462 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 20E0DFB114104027A960BB95 + + fileRef + 6C1E5330BB384D458541D7B3 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 211DB2C5F4FF4CA2807938DD fileRef - 6BE06CB751AD4C64B3B3C084 + B0D59693D7DE4F02A9DF033E isa PBXBuildFile - 28BE4156A6E4457EA0AB6301 + 2134AA12091647249B92798C includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWRegisterMatchersNode.m + KWExample.h path - Classes/KWRegisterMatchersNode.m + Classes/KWExample.h sourceTree <group> - 28F34795FB114FBDA7EC29F1 + 21C56824A0804A99A45C7942 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWIntercept.h + RACKVOTrampoline.m path - Classes/KWIntercept.h + ReactiveCocoaFramework/ReactiveCocoa/RACKVOTrampoline.m sourceTree <group> - 29110E5530324F50B848A719 + 2254FD044A9148C288495E76 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWAsyncVerifier.h + KWMatcherFactory.m path - Classes/KWAsyncVerifier.h + Classes/KWMatcherFactory.m sourceTree <group> - 29CC20FB4C3C4EC78A237345 + 2281F279AAEE4A6C8AB47D32 + + fileRef + 427A693C18C544E6A9937E08 + isa + PBXBuildFile + + 2330D4D14580411790B942EB + + fileRef + 08D62584CB044423B4FBA2C4 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 236A1BFC99784F36BBAFCC75 includeInIndex 1 @@ -1374,30 +1642,23 @@ lastKnownFileType sourcecode.c.h name - KWBlockNode.h + RACUnarySequence.h path - Classes/KWBlockNode.h + ReactiveCocoaFramework/ReactiveCocoa/RACUnarySequence.h sourceTree <group> - 29DF099C8A9C4E1FB05EE812 + 23A6E27104D64EE7972C0B3D - buildActionMask - 2147483647 - files - - B0E1EC3A3F63449B8166D176 - 0FCFBF21A11047848E8D7653 - + fileRef + E3F6DFF70DA348DCA2C18755 isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXBuildFile - 2A0628C4EB11469BAFFE5819 + 24C3DBF970F44A8F9D375763 baseConfigurationReference - B99D2982DD364339B4DE196A + 2E03E503A6AF4E2DB66DE761 buildSettings ALWAYS_SEARCH_USER_PATHS @@ -1411,13 +1672,13 @@ GCC_PRECOMPILE_PREFIX_HEADER YES GCC_PREFIX_HEADER - Pods-SocketRocket-prefix.pch + Pods-Reachability-prefix.pch GCC_VERSION com.apple.compilers.llvm.clang.1_0 INSTALL_PATH $(BUILT_PRODUCTS_DIR) IPHONEOS_DEPLOYMENT_TARGET - 4.0 + 5.0 OTHER_CFLAGS -DNS_BLOCK_ASSERTIONS=1 @@ -1446,42 +1707,29 @@ name Release - 2A0B0396A8154DC6935A91A9 + 253BAE184DBC4CD0B167AEEF - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - Pods-SocketRocket-dummy.m - sourceTree - <group> - - 2A859C4ED6E04495BC9D22D4 - - fileRef - F3454C9B803342A18B218796 + fileRef + 1995B62678FE45A192A5AB24 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 2AD396FB74AF4206AA28707C + 2541CF606A9C407BA6DAEC51 fileRef - BD20224CD09B411A8D593C28 + 0988090F73D54254A25F6DE1 isa PBXBuildFile - 2B940E08016345FAB50B2547 + 25A760E8262D445A9D0DAEFB fileRef - 21413A39C5CD4494BD093263 + 28319A8E00654DE9BC25931E isa PBXBuildFile settings @@ -1490,98 +1738,45 @@ -w -Xanalyzer -analyzer-disable-checker - 2BAD3BF58DAF4407BBEFE252 + 25E4E934A2D54C969E2A7657 fileRef - 90A7AC835622462E88360C24 + BDF34832C2054D93ADCE35CE isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 2C1EB04AA8F24111A9B5E434 + 25FDD8BAE1874297B26ACE9B fileRef - 8E9F9F8062A54FE9874A7B56 + DB74AC156BEB40569A576D32 isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - 2C998B7C45FA4912AE90309A + 26330589E89147A5ADBE77F7 - includeInIndex - 1 + fileRef + 42E6B0A1AA23414789BB67A5 isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - KWValue.m - path - Classes/KWValue.m - sourceTree - <group> + PBXBuildFile - 2CC5E4918BD342F29F909BF0 + 26A33DB591184055BDD1A692 - baseConfigurationReference - 2846C072D3444C6B895F35AD - buildSettings + fileRef + 2254FD044A9148C288495E76 + isa + PBXBuildFile + settings - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Pods-specs-Kiwi-prefix.pch - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 4.0 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker - isa - XCBuildConfiguration - name - Release - 2D55C38164534F49A631E8F9 + 26AFAED530FE4A58A8D326B2 includeInIndex 1 @@ -1590,13 +1785,13 @@ lastKnownFileType sourcecode.c.h name - KWBeKindOfClassMatcher.h + KWCountType.h path - Classes/KWBeKindOfClassMatcher.h + Classes/KWCountType.h sourceTree <group> - 2D5C4349A9F844DEAA444378 + 26BA8B42BF5249398A327A1C includeInIndex 1 @@ -1605,62 +1800,74 @@ lastKnownFileType sourcecode.c.h name - KWItNode.h + RACPassthroughSubscriber.h path - Classes/KWItNode.h + ReactiveCocoaFramework/ReactiveCocoa/RACPassthroughSubscriber.h sourceTree <group> - 2DB272D6053C4807BC626964 + 26EA2D348DF140A18732EF3F fileRef - 5B0863B4A0AD42DAAEF3CA73 + 938F977EA92046698CA65115 isa PBXBuildFile - 2E219F2E9C9A4B0CA08AAAD9 + 281FFDE57E78449AA68CF521 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWBeforeAllNode.m + KWIntercept.h path - Classes/KWBeforeAllNode.m + Classes/KWIntercept.h sourceTree <group> - 2E97EDA73E5E497BB8E46FAB + 28319A8E00654DE9BC25931E includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWBlock.h + KWExampleGroupBuilder.m path - Classes/KWBlock.h + Classes/KWExampleGroupBuilder.m sourceTree <group> - 2E9C8CB3C258437A803DFBB8 + 283BB8C504AF48B3A7185986 + + fileRef + 068D9ED896A94AF2BF713D23 + isa + PBXBuildFile + + 284CECC9F5A74ACE97DF1B29 + fileRef + 6F819ABAD996486EB36E1162 isa - PBXTargetDependency - target - 8E4EBA6C393D4E669F393B84 - targetProxy - 4C88AF5D601E4E668AE94989 + PBXBuildFile + + 28601DC3D49B493D95A03317 + + fileRef + FA837F145D5142109E15FEC1 + isa + PBXBuildFile - 2EEE0E09EE0145E589D340A7 + 286964CE6C22428FB84182BF fileRef - 5FC89F233C484D69867A73C5 + AFC0D4D407CD4AED96871E36 isa PBXBuildFile settings @@ -1669,231 +1876,84 @@ -w -Xanalyzer -analyzer-disable-checker - 2F22EB111ADC42DE87A9457F + 2869F79ED35C4EA8844A27D4 - fileRef - CAEC558939694D57B32F724A + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACDisposable.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACDisposable.h + sourceTree + <group> - 2FDADB7567BB43D6B2525A5B + 28E56DDCB3C649D3817FDEA3 fileRef - 5C4EA281D97F486CA91ED25B + FFDD53DD78DE404084421DCA isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 2FE81D78926C484D84643F64 + 28E7B4EA3CCB41A188767F75 - children - - 2170B8ABD2E947DAAC75C903 - 6BFBA0F65DCB4AE78E414EBF - F0C50DD325BC4FBE842F5C42 - BF956684202046CD96D1D451 - 6367B6F02A1840F7A43E2D9C - 8D79D2AEE6134607B9C42EED - 29110E5530324F50B848A719 - 8AB698371FC54087AC4A5BE3 - CAEC558939694D57B32F724A - F23B93B5FC8C4F948DF61610 - 3B0D6100E1974B87AD2C122E - 628104BBD4DB470E8D574699 - BD20224CD09B411A8D593C28 - D631F7B436E4436DA877B4A5 - 2D55C38164534F49A631E8F9 - 3D99BC5A70244E529787784B - 53371DB950A44FE2B08263D5 - F3376D236AF94D0F90F29DF6 - E97496D6E4684CC8AD20ABA6 - 9B571EB53ABA42F487FDF7E1 - B42B66B2AB2C439B85DB6F3B - 1D13657582A1438B8CB5826D - 12F77D49665540A999F08418 - 90A7AC835622462E88360C24 - 17CC07321D9F4DD5A8B3E2BB - F01F77AD0DDF4A2E87244480 - 611BECEF302D434B9D565C36 - B1AB0D401D5445A593F9B290 - 17237A26F10D450C8403F039 - F9EEAD8F5EAC4B4E9F497A28 - 49FACA0C9F5749A992DBCABD - 2E219F2E9C9A4B0CA08AAAD9 - A87A1F19A5E24961855B606A - AB79E86D533B4685BC091A9D - 2E97EDA73E5E497BB8E46FAB - C370DE5C47884C4592EBA2B9 - 29CC20FB4C3C4EC78A237345 - 80915F5DDFAA4A89A0559079 - 21CFD7BD0A7A49D99591CCF2 - 887C8C47955141DB8E7CDA66 - 8F4D7E1E163843DE9DBF6C23 - 5FC89F233C484D69867A73C5 - 79E64BB784CE4584A5410888 - ED590E8646BB4A8A96ACF011 - A45B973FF3304AFDBEC54200 - 52320E04B7864854B86D7E04 - 728ED010349F4E4C9249209C - 7074542AAB8D443198B871D1 - 8DB5CFD169084CDA8AD36554 - 9FE41677EAC9448698D57AF2 - AE467A73803847088E1E0707 - F3C145405CBC4A00862AAED7 - 65990ABADFE749B7BA753D58 - 031B6BA4066440EAAF7C395F - 9B3E0953C6D64767883CAC5C - 54CB8D6CA28E43659CE6DF8E - DCD6CA8377B3483FB50DA56F - 1731E8CAC2234640B82FBD9D - 5E5E6B2CFE2445379929C794 - C4067E08F10A4CED82E5D513 - B65B974FF4CF4C3BB160D7D2 - 1F63D9A4933B46CFBE7147E3 - 7AB80B2C80CA44A2936CF0F9 - A778109E7D50436290127673 - 1DD726E13AF0433EB40BD89C - 4D4DEC6B3F8F47B1A7835BD1 - 694774DB4D5C4626939E9F05 - 91C847FC9A9D4BC78051552A - DB532E7DD2C14E38BF0AA0AB - D045CEF3EC0B400DB21E946B - D57E36F90B2C4ED198A60D7D - 2055DC61B7024729929F295B - 1C2C7AE386504CFEA89861A8 - 3A7B3059C5104C918D94B22C - D08C3321806E4969BEF25D4F - 8376554B9B6E4661AE7502E1 - C4E290F9834D4B04B8CA5963 - C2B4892303BC46B29BF170FF - C762FA623AD54994865A5C20 - CA68B81544F441639A6C7FC2 - 49503502CA0D45EFA0D71FF1 - 814B183C251C4643A08C4BF3 - 3EF010FE5CC14A038E33CB45 - 6FE6DE09064343AF8D6C5C5C - 75170BD32DD944139E99DA3B - 6BE06CB751AD4C64B3B3C084 - 8E9F9F8062A54FE9874A7B56 - 3313E27345154B21933E5C7C - 42FACB98211A4A3DAA17F8B2 - 28F34795FB114FBDA7EC29F1 - AB605CA8305E474A8F4B18D3 - 2223BD9BF15C4E038845AC59 - 04F8EDEA67CD47CFAB41A953 - 2D5C4349A9F844DEAA444378 - 1EB52154FAA54382B9DE5774 - 8DDBA4EB259941A9999709D8 - 1CE0DAE9B1C240B89A90A668 - 594FA71E99454011B415C046 - 4982B173575F45CBBB785B47 - CEAE6BFD13A6444BA369FEEB - BCCB43FD08904BA1B7FFA2FF - 6D3299A50BC348AC87FCE9A4 - E7D1FC76CAB84EB9BB536038 - CEBEC57FB3F64041B456877F - 3A20B71BE63C450F84F5F622 - CE09F3BDE9EC4A75A2BA873A - E5145671E6D54BEFBB2490C9 - A81872A9D4564C6591140F8F - 433CE8D0403C40DE8F788617 - 51CE02EBD0C24A5195D33FF3 - B91989E56498406E8FB4D35A - A5955F94002043A2BBB63E23 - 5727A08792DD487E8B691F68 - 03127DB2B76E413389B71110 - 019CF53B9F934120867BCC03 - ACC0458522D94F04BD12A80C - 90D6143BE00D4C9EA4D68B38 - 4C2170171E2B4E01B5B62E1B - 13996E6DDDE04F34B05DC432 - 3CF0C1FB3C68470B9AF60830 - 02CE1847192D46CB99248DA7 - 21413A39C5CD4494BD093263 - 07926D06ED154D638E71C495 - 4B8B175120404E38B5027587 - 101DE15DDFD44EDAA0D2C31F - 28BE4156A6E4457EA0AB6301 - F3C2F30562FD42ACA73225D0 - 1AF71CB4A9344C2BBB738F47 - 8D78F141C95141BE9A535384 - 0BC66B4BDF7D418B9743BEA7 - 985BCE1FE41D40A2B5EC00D8 - 87BD76B106A2436DA1BEAD12 - B5D8AE281BA84EB0A11447AC - DB2C631DFE764E938AF04269 - 2106E4D8F47D4768A05CEF38 - 962EC98421D24966A0E4C696 - F8DA4285419B41DB83E6082E - 2289F5BE59054018BAACAEE8 - 7FAAEAF439364840A8BF958D - A8E59E320A3B4435932F948C - AB4A82823B0348B588BFA3E0 - C1F5B1CDE60B43B280ED49D6 - 0136C6FEC0404CC29428E102 - F157A7F4CB9A4C599B5328A5 - 99EDF7C7A40A4345A4AC2A00 - 0D01DC7FB6D04D7882069860 - 5EDADC32109A4467A3CCA870 - AD6F4D23C0D84697AA90F5A5 - 2C998B7C45FA4912AE90309A - BDBF15DF2B694F6A9C4F3D14 - B88CEEAE2E1F49A882FDF719 - B23124130A98430C90B9154F - 985D20D82D914C949D88A23A - 5B0863B4A0AD42DAAEF3CA73 - 27A412CBB1E04E7992863DB1 - 6AA39E1AFBD54BF480FF6BED - 037C6F64A77342F389E47CA1 - FE3DB58BF5034002BA9880D8 - 45703DE7DE3341679BFBCB8A - 729162EE598F4D65BFE3634D - 99F10C2BC336401B889BBC1C - 090196E35042422EACB1091F - A9C4CB0990804BE2BAFB88F1 - F24A12F6E2C64DADB97A429F - 9B6F68AFEB3745FB9F3D32B2 - EC370BCD987D43A7A1381C09 - F89312611E42485AAEF9F660 - 35AAAED225E9468D9C02BF36 - 57CA756B8C7A46EAA377F67F - 27254752573F454797B1ACFE - B9CD9DBAAAE44EDD9F356FC5 - 0DAEE9065B0A49F4A174501A - 5C4EA281D97F486CA91ED25B - 6D85F37568564FD58D7EA465 - 6A36015C0DE8407CA634E58A - F3454C9B803342A18B218796 - 8CDFB9978A914A6E8E289296 - D6BC5A79F1F947EDBA79F086 - 27604F8B2A3342FFBB282E37 - + includeInIndex + 1 isa - PBXGroup + PBXFileReference name - Kiwi + RACSignalProvider.d path - Kiwi + ReactiveCocoaFramework/ReactiveCocoa/RACSignalProvider.d sourceTree <group> - 3007A43452214FE19D180C47 + 28F097249507485D86D2CFB3 - fileRef - AD6F4D23C0D84697AA90F5A5 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + Pods-specs-OHHTTPStubs-prefix.pch + sourceTree + <group> - 309704F18AA041F692B94C5D + 2942129614DF4666B230114C fileRef - CEBEC57FB3F64041B456877F + 7654BA79B10446F7AC28FB01 isa PBXBuildFile - 30FFC403CA524B3683975801 + 29BE2EC28F4B47B5B49C76C6 + + buildActionMask + 2147483647 + files + + 0B9847163B87433D89595766 + 3C60A4F5D75848F4B3143621 + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 29C232542CB14D1C8A3310D2 fileRef - D631F7B436E4436DA877B4A5 + D625095EC8EA4017A7E4D296 isa PBXBuildFile settings @@ -1902,87 +1962,96 @@ -w -Xanalyzer -analyzer-disable-checker - 33027B252C0A47288538AB99 + 2A47736C24BE4F8E8F1B20C6 - containerPortal - CD9632B3B8EC456ABE0A7912 + fileRef + 2134AA12091647249B92798C isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - BDBE7202A8214393ACF3E379 - remoteInfo - Pods-SocketRocket + PBXBuildFile - 3313E27345154B21933E5C7C + 2A4E80FD601C41D1B2127F15 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h - name - KWInequalityMatcher.h + text.xcconfig path - Classes/KWInequalityMatcher.h + Pods-specs-Kiwi-Private.xcconfig sourceTree <group> - 3413A243F3B24702BD368AD7 + 2A8FBEBD92944C319974F855 fileRef - 1AF71CB4A9344C2BBB738F47 + 2869F79ED35C4EA8844A27D4 isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - 344ECD924B4549C185303BDE + 2BAC182050CE474E8B4590CF - fileRef - 985D20D82D914C949D88A23A + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RACQueueScheduler.m + path + ReactiveCocoaFramework/ReactiveCocoa/RACQueueScheduler.m + sourceTree + <group> + + 2BC9C86526404E9997BD3574 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + NSObject+RACSelectorSignal.m + path + ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACSelectorSignal.m + sourceTree + <group> - 345A68049CBA4882857C9C19 + 2BD86D32521240479C54478A baseConfigurationReference - FE5D2C2CBA92447DAFACD29C + 1E2A4BFD472046B0A9DA68DC buildSettings ALWAYS_SEARCH_USER_PATHS NO COPY_PHASE_STRIP - YES + NO DSTROOT /tmp/xcodeproj.dst GCC_C_LANGUAGE_STANDARD gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 GCC_PRECOMPILE_PREFIX_HEADER YES - GCC_PREFIX_HEADER - Pods-Reachability-prefix.pch + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO GCC_VERSION com.apple.compilers.llvm.clang.1_0 INSTALL_PATH $(BUILT_PRODUCTS_DIR) IPHONEOS_DEPLOYMENT_TARGET - 4.0 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - + 5.0 OTHER_LDFLAGS PRODUCT_NAME @@ -1993,63 +2062,66 @@ iphoneos SKIP_INSTALL YES - VALIDATE_PRODUCT - YES isa XCBuildConfiguration name - Release + Debug - 34F91BD03C514E0799F3C231 + 2BDC4B9365114C1CB482BBC3 fileRef - D50EC4A6AB114D948A510707 + 3061F1C7A2F9406CA98D21F9 isa PBXBuildFile - 35AAAED225E9468D9C02BF36 + 2C0DF2DA739C41299DFBDC2F includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - NSObject+KiwiSpyAdditions.m + RACReturnSignal.h path - Classes/NSObject+KiwiSpyAdditions.m + ReactiveCocoaFramework/ReactiveCocoa/RACReturnSignal.h sourceTree <group> - 383EE8D4E457472CAFA322B9 + 2C5F2B679A0F44DF95CAAA01 fileRef - BC643AC9148A4262AFE6A65C + 7EC28D8C043C4CC7ADDDE4AF isa PBXBuildFile settings COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + -w -Xanalyzer -analyzer-disable-checker - 39034D5B3F194CD990AC513B + 2CF75CA115824843827AA589 fileRef - E97496D6E4684CC8AD20ABA6 + CC9E48D74B9D428ABB776918 isa PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 39825487BC7340BFB0EAF451 + 2CFE4A6340084832BE69FF43 fileRef - 58D89DE341D8424F9778003E + 00EFCF0925324CB8BCAC1DD7 isa PBXBuildFile - 3A20B71BE63C450F84F5F622 + 2D2862D4A2464AECB630CB7E includeInIndex 1 @@ -2058,13 +2130,13 @@ lastKnownFileType sourcecode.c.h name - KWMessagePattern.h + KWBlockNode.h path - Classes/KWMessagePattern.h + Classes/KWBlockNode.h sourceTree <group> - 3A7B3059C5104C918D94B22C + 2D96B9FF873E4BC990447F8A includeInIndex 1 @@ -2073,147 +2145,101 @@ lastKnownFileType sourcecode.c.h name - KWFormatter.h + KWRaiseMatcher.h path - Classes/KWFormatter.h + Classes/KWRaiseMatcher.h sourceTree <group> - 3B0D6100E1974B87AD2C122E + 2E03E503A6AF4E2DB66DE761 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h - name - KWBeEmptyMatcher.h + text.xcconfig path - Classes/KWBeEmptyMatcher.h + Pods-Reachability-Private.xcconfig sourceTree <group> - 3B0F2646415548AD84525C6F + 2E0B5DA8E80D4F409E034AA8 - includeInIndex - 1 + fileRef + 37B559C7F9584E118EFCD905 isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods-specs.xcconfig - sourceTree - <group> + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 3BE44394C038473FB097DD0A + 2E47BE679DD14189A6A866A9 fileRef - 45703DE7DE3341679BFBCB8A + 0C9280FA086D45B789940A85 isa PBXBuildFile - 3C6F530B048D4F21A218ECED + 2FB0F052111848489578A9CA fileRef - 6367B6F02A1840F7A43E2D9C + 3C12293BC71B4783AFFDDD47 isa PBXBuildFile - 3CF0C1FB3C68470B9AF60830 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - KWProbePoller.m - path - Classes/KWProbePoller.m - sourceTree - <group> - - 3D6CD950BF214ADC86AF7F32 + 304C97ED6FC44689842E8126 - buildActionMask - 2147483647 - files - - 0960F8403AD2492AA7CE7920 - 383EE8D4E457472CAFA322B9 - 012E700EE221494EA64AFFDC - + fileRef + 3C2C0C8FE4ED460F9D638876 isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 3D99BC5A70244E529787784B + 3061F1C7A2F9406CA98D21F9 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWBeKindOfClassMatcher.m + KWNull.h path - Classes/KWBeKindOfClassMatcher.m + Classes/KWNull.h sourceTree <group> - 3D99FBF576A4430DBF48EDC5 + 30DEBB44CE0C4C49BBEE363E fileRef - 3313E27345154B21933E5C7C + 3CDEF60012744580A52C479A isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 3E01AFF0C90A445E9C3CCE93 - - children - - 4ACAE7E3B69041E99177D9E2 - C8AF18EF3E7942D38FE7365C - 6C7E5EB69385496B94455245 - 8ABD6E6739964423BA924C6A - 206D8429722747DB9FB10D71 - - isa - PBXGroup - sourceTree - <group> - - 3EF010FE5CC14A038E33CB45 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - KWGenericMatchingAdditions.m - path - Classes/KWGenericMatchingAdditions.m - sourceTree - <group> - - 3F888701D26B4C87ABBC390A + 312E4D9DE5C64FE092E8F0C3 fileRef - 1731E8CAC2234640B82FBD9D + 3973542F01BB41F7AD0CA143 isa PBXBuildFile - 402B84B30C5E462A851F15F2 + 3148B8563AB046918CE13DCD fileRef - 2106E4D8F47D4768A05CEF38 + A366688035054E879C7300D0 isa PBXBuildFile settings @@ -2222,206 +2248,48 @@ -w -Xanalyzer -analyzer-disable-checker - 403488704D9146CC9BAC5C5D + 316C7A35DFDE4BB197E706BB - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - CLANG_CXX_LANGUAGE_STANDARD - gnu++0x - CLANG_CXX_LIBRARY - libc++ - CLANG_ENABLE_MODULES - YES - CLANG_ENABLE_OBJC_ARC - NO - CLANG_WARN_BOOL_CONVERSION - YES - CLANG_WARN_CONSTANT_CONVERSION - YES - CLANG_WARN_DIRECT_OBJC_ISA_USAGE - YES_ERROR - CLANG_WARN_EMPTY_BODY - YES - CLANG_WARN_ENUM_CONVERSION - YES - CLANG_WARN_INT_CONVERSION - YES - CLANG_WARN_OBJC_ROOT_CLASS - YES_ERROR - COPY_PHASE_STRIP - YES - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_WARN_64_TO_32_BIT_CONVERSION - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES_ERROR - GCC_WARN_UNDECLARED_SELECTOR - YES - GCC_WARN_UNINITIALIZED_AUTOS - YES - GCC_WARN_UNUSED_FUNCTION - YES - GCC_WARN_UNUSED_VARIABLE - YES - IPHONEOS_DEPLOYMENT_TARGET - 4.0 - ONLY_ACTIVE_ARCH - YES - STRIP_INSTALLED_PRODUCT - NO - + includeInIndex + 1 isa - XCBuildConfiguration + PBXFileReference + lastKnownFileType + sourcecode.c.objc name - Debug - - 40A3C3A05AA6404DB839D750 - - fileRef - 93907A2127B64E32A9E73A34 - isa - PBXBuildFile - - 41633299FEFB4BAE9BE21D2D - - buildActionMask - 2147483647 - files - - 587E6242A41949639A8857D4 - F3494B9C0587408EBEF65482 - FB9511A7CE8C4CB59457793C - D636C2CC9FCC4135A468818B - 54CB21C45F1D4ED98C3236E9 - 6F483306A39C43AC8D0DE18C - 30FFC403CA524B3683975801 - 453F8667B9454243A37AFBA2 - 0F9B254138944CD0A553BF06 - 60E95407C92A4251B39C0907 - 59E845735CD54D7FB2D9E5CE - 2BAD3BF58DAF4407BBEFE252 - 8A76285BC583440486FABAA8 - D4FB66DCAF1F49FE8D340FA5 - 66C436D94B974886A55AE126 - A01E4D115F2849D4A3A2C6E7 - E3BD5F4B2173405C929825D9 - 871F490A59D84E52B75981D7 - A983B2E7AB4E4AFD849B3FCA - 55FCA4255C1E4B3B8AA33D4C - 2EEE0E09EE0145E589D340A7 - 60F7AA8398BD403F83486E6D - 5DA8C85D49C94565839F05F4 - 076A1599E77641D8B751C3B7 - 76A0A952EB364167AE51D83E - 7ED13B5B29FB4489A7F9375F - 8A584269B4744BCDBE97EF8A - F8A3DD7E62C6487FB1FD14B3 - CDF76A42FEE946EE82A19B74 - A4157F1FDC144D338722F240 - E4DBB433AA684B3897C1F767 - 0375994CD49046BDA9F30123 - 7254F50075A145E8BB8E64C3 - 66A5C98C0BF6436F960CD7E7 - 7AEE7246F18E4610B356DFBF - 0A7CB779FCC14A61982E0E9E - 19BF9FFCFAB347B19BEBF81A - 7A0BFC99D1754829817C5823 - 27511A96CF144F4590E59119 - D7F776B944054C1BBA954739 - 2C1EB04AA8F24111A9B5E434 - C05EA06F58B6425E9A04FE02 - 7C99EF6B6936428FBC9E40A0 - ED3966A49AC3465D9F195D7A - D7533F2E00BE47BC866F514F - 080B01D0317F4003B6F2E75A - 82DCBD4F922644089A232368 - FFADB713E0804ED2B518DA06 - BAE78614D5674F4A90C954C9 - 6C6C9D8575784112B85F541A - CB010741BE0540229D83AB23 - CA745C3B305B4F4090486E83 - 4FA90AF997164714ACB7EFB5 - 25D18118B70B49E8B307C211 - 65947214110742B8A82DDDB8 - 1E0F4A803BA542E49C3AC719 - 2B940E08016345FAB50B2547 - 5A84C6B77EF4484F9A56CC17 - 8035F6FB71494134AA09D4C4 - 3413A243F3B24702BD368AD7 - 283FCB30F7A84712BC18CAE2 - 7F989206AFA94BBC94EC2B48 - 402B84B30C5E462A851F15F2 - D6982AC860334EF99D7F9BEA - C6B0D3EC209B44DFBDC97945 - 54E5B00531E342DBBE74D59C - 02A5E865C1E542908AC9092E - 21E1DC6BEE1748869B3FF7EE - EFE7CE3B4F544058B0BF22BF - 44E035ED75E84C0A9485AB7C - 62C6D9A3383D43448AE8D98D - 8E1BAFC9F2A64EDBB13EEB67 - F92DB362259A4E5EAB44F2EB - 9E2AFA1C33AE4B819805F5C8 - 0162EEF03886440192ACD088 - A0885C9E44AC4AC4959CAB5F - 8D49E21B5C094FD7BBCF9B67 - 068884E3B2C9451F817637D8 - 68707D2853BA4964B0CA1C1A - C00DBBADBF4D47D689FEF638 - 2A859C4ED6E04495BC9D22D4 - ACED28F81A714FED8A2C1765 - 91066291B7E144D6827A0862 - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 + RACSignalSequence.m + path + ReactiveCocoaFramework/ReactiveCocoa/RACSignalSequence.m + sourceTree + <group> - 4264DC13498E4DF9AE5F5BCC + 322CB620A759410CA14308CA - children - - 0DB8C587984C4C819B132205 - B99D2982DD364339B4DE196A - 2A0B0396A8154DC6935A91A9 - 49E5C96584DA456BB22DCF55 - isa - PBXGroup + PBXFileReference + lastKnownFileType + wrapper.framework name - Support Files + CFNetwork.framework + path + Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/CFNetwork.framework sourceTree - SOURCE_ROOT - - 42A653A52FE94003BCF629EC - - fileRef - C73D78A31EED4D29A11362CC - isa - PBXBuildFile + DEVELOPER_DIR - 42F4B24C94CE4905BF683ECF + 3276F9627DB241BFA46C885F - fileRef - 29110E5530324F50B848A719 + explicitFileType + archive.ar + includeInIndex + 0 isa - PBXBuildFile + PBXFileReference + path + libPods.a + sourceTree + BUILT_PRODUCTS_DIR - 42FACB98211A4A3DAA17F8B2 + 328144E6BE17458BBFF4C41B includeInIndex 1 @@ -2429,14 +2297,12 @@ PBXFileReference lastKnownFileType sourcecode.c.objc - name - KWInequalityMatcher.m path - Classes/KWInequalityMatcher.m + Pods-dummy.m sourceTree <group> - 433CE8D0403C40DE8F788617 + 32B3D8CFC841489184670469 includeInIndex 1 @@ -2445,86 +2311,56 @@ lastKnownFileType sourcecode.c.objc name - KWMessageTracker.m + NSFileHandle+RACSupport.m path - Classes/KWMessageTracker.m + ReactiveCocoaFramework/ReactiveCocoa/NSFileHandle+RACSupport.m sourceTree <group> - 43DF4E7A028C430ABD224344 - - containerPortal - CD9632B3B8EC456ABE0A7912 - isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - A7D9977497BA4F6AB4A0889F - remoteInfo - Pods-Reachability - - 44B77F29E6494C38BE38903B - - fileRef - F0C50DD325BC4FBE842F5C42 - isa - PBXBuildFile - - 44E035ED75E84C0A9485AB7C - - fileRef - 2C998B7C45FA4912AE90309A - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - - 453F8667B9454243A37AFBA2 + 33533C123DCB41A394181B46 fileRef - 3D99BC5A70244E529787784B + 3A891723BBB64F9EAE0F0C2F isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - 45703DE7DE3341679BFBCB8A + 335ACBB103CF42D294441418 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + text name - NSInvocation+OCMAdditions.h + Podfile path - Classes/NSInvocation+OCMAdditions.h + ../Podfile sourceTree - <group> + SOURCE_ROOT + xcLanguageSpecificationIdentifier + xcode.lang.ruby - 4780FAA921314985AFBB5680 + 337A474C4A5B4B4F97F82AE5 fileRef - B88CEEAE2E1F49A882FDF719 + 909081FECD234CB4B538A63E isa PBXBuildFile - 480B01DBD2584CB582F8F9D2 + 338EE28E93424A329B1BE41D fileRef - 3B0D6100E1974B87AD2C122E + 497C093DAD454749A098D195 isa PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 49503502CA0D45EFA0D71FF1 + 33E7747595C64B30BC8EDD39 includeInIndex 1 @@ -2533,13 +2369,13 @@ lastKnownFileType sourcecode.c.objc name - KWGenericMatcher.m + RACTuple.m path - Classes/KWGenericMatcher.m + ReactiveCocoaFramework/ReactiveCocoa/RACTuple.m sourceTree <group> - 4982B173575F45CBBB785B47 + 3415BFF012E446EEAD2FB457 includeInIndex 1 @@ -2548,26 +2384,28 @@ lastKnownFileType sourcecode.c.objc name - KWMatcher.m + KWBeSubclassOfClassMatcher.m path - Classes/KWMatcher.m + Classes/KWBeSubclassOfClassMatcher.m sourceTree <group> - 49E5C96584DA456BB22DCF55 + 34E5A24A6D20477D890F6BC6 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc + name + KWAny.m path - Pods-SocketRocket-prefix.pch + Classes/KWAny.m sourceTree <group> - 49FACA0C9F5749A992DBCABD + 34FAF0DA2F954738B5CC0BF2 includeInIndex 1 @@ -2576,126 +2414,171 @@ lastKnownFileType sourcecode.c.h name - KWBeforeAllNode.h + NSSet+RACSequenceAdditions.h path - Classes/KWBeforeAllNode.h + ReactiveCocoaFramework/ReactiveCocoa/NSSet+RACSequenceAdditions.h sourceTree <group> - 4ACAE7E3B69041E99177D9E2 + 34FC5AE89020407EABAF3874 includeInIndex 1 isa PBXFileReference lastKnownFileType - text + sourcecode.c.objc name - Podfile + KWBeNonNilMatcher.m path - ../Podfile + Classes/KWBeNonNilMatcher.m sourceTree - SOURCE_ROOT - xcLanguageSpecificationIdentifier - xcode.lang.ruby + <group> - 4B8B175120404E38B5027587 + 354688651EC347BEA7E72F0E + explicitFileType + archive.ar includeInIndex - 1 + 0 isa PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - KWReceiveMatcher.m path - Classes/KWReceiveMatcher.m + libPods-SocketRocket.a sourceTree - <group> + BUILT_PRODUCTS_DIR - 4B931C4664EB4FBFA9DB5965 + 354964B346D949F189E533DE fileRef - D53A889F73AC4196A1141145 + 406A41651A7B4852B8D1E670 isa PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 4C2170171E2B4E01B5B62E1B + 354DC08775164A0891005588 - includeInIndex - 1 + fileRef + AF14715DFF9E412191C1FE8E isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWProbe.h - path - Classes/KWProbe.h - sourceTree - <group> + PBXBuildFile - 4C88AF5D601E4E668AE94989 + 3593DC205A284FA2958F1B80 - containerPortal - CD9632B3B8EC456ABE0A7912 + attributes + + LastUpgradeCheck + 0500 + + buildConfigurationList + 942CAEB072AB43CEA819CE6D + compatibilityVersion + Xcode 3.2 + developmentRegion + English + hasScannedForEncodings + 0 isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - 8E4EBA6C393D4E669F393B84 - remoteInfo - Pods-specs-OHHTTPStubs + PBXProject + knownRegions + + en + + mainGroup + 50EE5E49F3EF446593877EC5 + productRefGroup + A0CE69363211446C86C94F98 + projectDirPath + + projectReferences + + projectRoot + + targets + + 6CAA6E31029C41429D0B0213 + 063659C829454C82A619E4F8 + 0402D00C4DFB42199217841D + 5BF559B20D784F7096C0D5FF + 8024D3DAD4AE415E897DC585 + EA2B21702FD443F39A8DE00E + 9A6B6BFEB33144239FDB185C + + + 36A28D6DBF4B4D0E8D4AA412 + + fileRef + 492299289A5046A7B1B722B3 + isa + PBXBuildFile - 4D07028604BA456D84A94849 + 36FD63E8A2A74E01A71C9AFA fileRef - A778109E7D50436290127673 + 4514A9907D4E427BA03994A3 isa PBXBuildFile - 4D4DEC6B3F8F47B1A7835BD1 + 37B559C7F9584E118EFCD905 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWExampleNodeVisitor.h + NSInvocation+KiwiAdditions.m path - Classes/KWExampleNodeVisitor.h + Classes/NSInvocation+KiwiAdditions.m sourceTree <group> - 4DD3923901304120927407F6 + 380887868DD5496990E34F1E fileRef - A8E59E320A3B4435932F948C + 5167ACA3B53F4A839874B1E3 isa PBXBuildFile - 4E9B6F4E19504257A4F10A33 + 383D0AD29EEF48EBA03A1B6E - buildActionMask - 2147483647 - files - - 4B931C4664EB4FBFA9DB5965 - B0653DBFFD1F47D5B0316BF2 - + includeInIndex + 1 isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWExampleSuite.m + path + Classes/KWExampleSuite.m + sourceTree + <group> + + 38732CFA0E2548E1A75616FF + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWHaveMatcher.h + path + Classes/KWHaveMatcher.h + sourceTree + <group> - 4FA90AF997164714ACB7EFB5 + 3894254C6B4E483EA53C7DD9 fileRef - 5727A08792DD487E8B691F68 + 53F5158A9DE244498DD596D2 isa PBXBuildFile settings @@ -2704,78 +2587,88 @@ -w -Xanalyzer -analyzer-disable-checker - 4FD45CA3C1EA4E05A610D789 - - fileRef - 8376554B9B6E4661AE7502E1 - isa - PBXBuildFile - - 502E0001F2A847BDA37F39C8 + 389A6FDB7A914F93BE714E75 fileRef - FCF264B3CF2A49CE981915D1 - isa - PBXBuildFile - - 502F0A07B2C74B239EA14FC7 - - fileRef - 57CA756B8C7A46EAA377F67F + 7EF4653CE9CA4DAD9233D367 isa PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 50E25ADAF1BE4AD3B6FFD0B3 + 38EFE9F2FD77459A8F46D694 - fileRef - 03127DB2B76E413389B71110 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWPendingNode.m + path + Classes/KWPendingNode.m + sourceTree + <group> - 51CE02EBD0C24A5195D33FF3 + 3901E1175E2A4B8FA4AEC6F1 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWMock.h + NSObject+KiwiSpyAdditions.m path - Classes/KWMock.h + Classes/NSObject+KiwiSpyAdditions.m sourceTree <group> - 52320E04B7864854B86D7E04 + 3953D48BF0DC4C9EAA633932 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWChangeMatcher.m + UITextView+RACSignalSupport.h path - Classes/KWChangeMatcher.m + ReactiveCocoaFramework/ReactiveCocoa/UITextView+RACSignalSupport.h sourceTree <group> - 52A573B4E10E4065A98C488D + 3973542F01BB41F7AD0CA143 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.h + name + UISlider+RACSignalSupport.h path - Pods-Reachability.xcconfig + ReactiveCocoaFramework/ReactiveCocoa/UISlider+RACSignalSupport.h sourceTree <group> - 532E269EEC5445FB9593929F + 3A416DFC18E14002A647FD6B + + isa + PBXTargetDependency + target + EA2B21702FD443F39A8DE00E + targetProxy + C19D96C06C8240A39B9C7A5F + + 3A4D5B4C955A4A13983E8616 includeInIndex 1 @@ -2783,12 +2676,14 @@ PBXFileReference lastKnownFileType sourcecode.c.objc + name + OHHTTPStubsResponse.m path - Pods-specs-OHHTTPStubs-dummy.m + OHHTTPStubs/OHHTTPStubsResponse.m sourceTree <group> - 53371DB950A44FE2B08263D5 + 3A891723BBB64F9EAE0F0C2F includeInIndex 1 @@ -2797,39 +2692,20 @@ lastKnownFileType sourcecode.c.h name - KWBeMemberOfClassMatcher.h + UIAlertView+RACSignalSupport.h path - Classes/KWBeMemberOfClassMatcher.h + ReactiveCocoaFramework/ReactiveCocoa/UIAlertView+RACSignalSupport.h sourceTree <group> - 537B6023702D4F4EA0F8B0A5 - - fileRef - A87A1F19A5E24961855B606A - isa - PBXBuildFile - - 53A025F40F7D4DD5AE8D9984 - - fileRef - 4D4DEC6B3F8F47B1A7835BD1 - isa - PBXBuildFile - - 54CB21C45F1D4ED98C3236E9 + 3AD4C381408243A8B3BA611B fileRef - F23B93B5FC8C4F948DF61610 + F3F65FACF58D4DEA948F7A65 isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - 54CB8D6CA28E43659CE6DF8E + 3BBBEF9DDF2948B6BB1DAF1D includeInIndex 1 @@ -2838,52 +2714,41 @@ lastKnownFileType sourcecode.c.h name - KWDeviceInfo.h + RACEXTRuntimeExtensions.h path - Classes/KWDeviceInfo.h + ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACEXTRuntimeExtensions.h sourceTree <group> - 54E5B00531E342DBBE74D59C - - fileRef - AB4A82823B0348B588BFA3E0 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - - 55FCA4255C1E4B3B8AA33D4C + 3C09F943F7AF4D76A10CA4B3 - fileRef - 887C8C47955141DB8E7CDA66 + includeInIndex + 1 isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWMessagePattern.h + path + Classes/KWMessagePattern.h + sourceTree + <group> - 5727A08792DD487E8B691F68 + 3C10429833BA4FF496BFBA2C includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - KWNull.m + text.xcconfig path - Classes/KWNull.m + Pods-SocketRocket.xcconfig sourceTree <group> - 57CA756B8C7A46EAA377F67F + 3C12293BC71B4783AFFDDD47 includeInIndex 1 @@ -2892,38 +2757,43 @@ lastKnownFileType sourcecode.c.h name - NSObject+KiwiStubAdditions.h + KWMatcher.h path - Classes/NSObject+KiwiStubAdditions.h + Classes/KWMatcher.h sourceTree <group> - 587E6242A41949639A8857D4 + 3C2C0C8FE4ED460F9D638876 - fileRef - 6BFBA0F65DCB4AE78E414EBF + includeInIndex + 1 isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RACBacktrace.m + path + ReactiveCocoaFramework/ReactiveCocoa/RACBacktrace.m + sourceTree + <group> - 58D89DE341D8424F9778003E + 3C3EE7F5AFF74E9F898B6254 - explicitFileType - archive.ar includeInIndex - 0 + 1 isa PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + UIControl+RACSignalSupport.m path - libPods-Reachability.a + ReactiveCocoaFramework/ReactiveCocoa/UIControl+RACSignalSupport.m sourceTree - BUILT_PRODUCTS_DIR + <group> - 594FA71E99454011B415C046 + 3C4E26096492433E9FD101C1 includeInIndex 1 @@ -2932,86 +2802,67 @@ lastKnownFileType sourcecode.c.h name - KWMatcher.h + UIControl+RACSignalSupportPrivate.h path - Classes/KWMatcher.h + ReactiveCocoaFramework/ReactiveCocoa/UIControl+RACSignalSupportPrivate.h sourceTree <group> - 59E845735CD54D7FB2D9E5CE + 3C60A4F5D75848F4B3143621 fileRef - 1D13657582A1438B8CB5826D + B6F9381577CC47BAAA6635EF isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 5A84C6B77EF4484F9A56CC17 - - fileRef - 4B8B175120404E38B5027587 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - - 5AA7ED306FAF4838B8648877 + 3C9CA71753B24B7ABD90EA0F + includeInIndex + 1 isa PBXFileReference lastKnownFileType - wrapper.framework + sourcecode.c.h name - Security.framework + RACStream+Private.h path - Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/Security.framework + ReactiveCocoaFramework/ReactiveCocoa/RACStream+Private.h sourceTree - DEVELOPER_DIR + <group> - 5AF707C5EEA8429EB99F07AE + 3CB3F226223343AB8FEF43D7 fileRef - 101DE15DDFD44EDAA0D2C31F + 3F493BA72B094F079106227B isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 5B0863B4A0AD42DAAEF3CA73 + 3CDEF60012744580A52C479A includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KiwiBlockMacros.h + KWEqualMatcher.m path - Classes/KiwiBlockMacros.h + Classes/KWEqualMatcher.m sourceTree <group> - 5B1EC67926F14E8CBE582734 - - fileRef - 0D01DC7FB6D04D7882069860 - isa - PBXBuildFile - - 5C3F85CBDE5E4B00B6BB9511 - - fileRef - 0BC66B4BDF7D418B9743BEA7 - isa - PBXBuildFile - - 5C4EA281D97F486CA91ED25B + 3CF499DF189A4D3DA2DBC640 includeInIndex 1 @@ -3020,32 +2871,27 @@ lastKnownFileType sourcecode.c.h name - NSProxy+KiwiVerifierAdditions.h + NSObject+RACKVOWrapper.h path - Classes/NSProxy+KiwiVerifierAdditions.h + ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACKVOWrapper.h sourceTree <group> - 5CB94DED3E4946F6AA490731 + 3CFD6A8ED87F44E99853BDB2 fileRef - 99F10C2BC336401B889BBC1C + 1CC4D0F1A48E4C3AAD362CF0 isa PBXBuildFile - 5DA8C85D49C94565839F05F4 + 3DBE40BB899B44738676B57D fileRef - 52320E04B7864854B86D7E04 + 747C20958ABB480B81B0121E isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - 5E5E6B2CFE2445379929C794 + 3E49E5458CE24350A76EAA4E includeInIndex 1 @@ -3054,49 +2900,28 @@ lastKnownFileType sourcecode.c.objc name - KWEqualMatcher.m + UICollectionViewCell+RACSignalSupport.m path - Classes/KWEqualMatcher.m + ReactiveCocoaFramework/ReactiveCocoa/UICollectionViewCell+RACSignalSupport.m sourceTree <group> - 5E747111A42F4CCCA55D7309 - - fileRef - 2170B8ABD2E947DAAC75C903 - isa - PBXBuildFile - - 5EC4AD4EF58C4385AD666A4D - - fileRef - D57E36F90B2C4ED198A60D7D - isa - PBXBuildFile - - 5EDADC32109A4467A3CCA870 + 3F3970F566EA49D7B1B1BCD0 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWUserDefinedMatcher.m + RACEvent.h path - Classes/KWUserDefinedMatcher.m + ReactiveCocoaFramework/ReactiveCocoa/RACEvent.h sourceTree <group> - 5F71308CB84748969FE89A34 - - fileRef - 27A412CBB1E04E7992863DB1 - isa - PBXBuildFile - - 5FC89F233C484D69867A73C5 + 3F3ACA76990D4EA6B902DD9C includeInIndex 1 @@ -3105,119 +2930,116 @@ lastKnownFileType sourcecode.c.objc name - KWCallSite.m + KWItNode.m path - Classes/KWCallSite.m + Classes/KWItNode.m sourceTree <group> - 608C824C392E4D6EBB95C62A + 3F493BA72B094F079106227B includeInIndex 1 isa PBXFileReference lastKnownFileType - text.script.sh + sourcecode.c.objc + name + KWFutureObject.m path - Pods-resources.sh + Classes/KWFutureObject.m sourceTree <group> - 60E95407C92A4251B39C0907 + 3FB8AD5CC6BC4FBFB3A96690 - fileRef - 9B571EB53ABA42F487FDF7E1 - isa - PBXBuildFile - settings + baseConfigurationReference + FFEE9EC9C65A46AD9B50D705 + buildSettings - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + NO + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-ReactiveCocoa-prefix.pch + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 5.0 + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + isa + XCBuildConfiguration + name + Debug - 60F7AA8398BD403F83486E6D + 3FE626FADFB64D1686D0FA38 fileRef - ED590E8646BB4A8A96ACF011 + 7454B58EA6AE4BC0B4EFA68D isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 611BECEF302D434B9D565C36 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWBeWithinMatcher.h - path - Classes/KWBeWithinMatcher.h - sourceTree - <group> - - 61FDDB3765BC40D8AD1CA677 - - buildConfigurationList - C0A9A5E7219049B1A83AFE0A - buildPhases - - 2039E9183C1B42ED89EBAE7A - CBFDB18403534B0E8121C3A5 - - buildRules - - dependencies - - EBC3533FED874BBDBFE81F12 - C7AB83A9B09C4209A17BCBA1 - - isa - PBXNativeTarget - name - Pods - productName - Pods - productReference - 0EBFE40558BC490F91DF77BC - productType - com.apple.product-type.library.static - - 628104BBD4DB470E8D574699 + 400DC0602AD64C8F84518D92 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - KWBeEmptyMatcher.m + text.xcconfig path - Classes/KWBeEmptyMatcher.m + Pods-specs-OHHTTPStubs.xcconfig sourceTree <group> - 62C6D9A3383D43448AE8D98D + 4014BB3BE56B4A7EBA32AC68 fileRef - B23124130A98430C90B9154F + 6124ED0C9838434A9F309EB9 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 6367B6F02A1840F7A43E2D9C + 403FED6E37CC4FCA95F1C9B9 includeInIndex 1 @@ -3226,13 +3048,13 @@ lastKnownFileType sourcecode.c.h name - KWAny.h + KWMessageTracker.h path - Classes/KWAny.h + Classes/KWMessageTracker.h sourceTree <group> - 64101EE568764E3EBAD29FA8 + 406A41651A7B4852B8D1E670 includeInIndex 1 @@ -3241,32 +3063,13 @@ lastKnownFileType sourcecode.c.objc name - OHHTTPStubs.m + RACStream.m path - OHHTTPStubs/OHHTTPStubs.m + ReactiveCocoaFramework/ReactiveCocoa/RACStream.m sourceTree <group> - 6513C68576DD40C4ADA9F9F2 - - fileRef - BDBF15DF2B694F6A9C4F3D14 - isa - PBXBuildFile - - 65947214110742B8A82DDDB8 - - fileRef - 90D6143BE00D4C9EA4D68B38 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - - 65990ABADFE749B7BA753D58 + 408C107D614240478A48FC45 includeInIndex 1 @@ -3275,214 +3078,179 @@ lastKnownFileType sourcecode.c.h name - KWContextNode.h + KWExpectationType.h path - Classes/KWContextNode.h + Classes/KWExpectationType.h sourceTree <group> - 66A5C98C0BF6436F960CD7E7 + 409BD228482340AEABE268DA - fileRef - 1C2C7AE386504CFEA89861A8 + includeInIndex + 1 isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + UIRefreshControl+RACCommandSupport.h + path + ReactiveCocoaFramework/ReactiveCocoa/UIRefreshControl+RACCommandSupport.h + sourceTree + <group> - 66C436D94B974886A55AE126 + 40ACDEF268194A7BAFAAD306 fileRef - F9EEAD8F5EAC4B4E9F497A28 + D1F816F4B434400AAF4FB7BA isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 68707D2853BA4964B0CA1C1A + 40AE3943EC5C430989E18A9E fileRef - 0DAEE9065B0A49F4A174501A + EAE64924340A463FB638A8C3 isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - 694774DB4D5C4626939E9F05 + 40E0717091884763B9782140 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWExampleSuite.h + NSNumber+KiwiAdditions.m path - Classes/KWExampleSuite.h + Classes/NSNumber+KiwiAdditions.m sourceTree <group> - 6A36015C0DE8407CA634E58A + 41091D882DDF45F2ACB211D8 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - NSValue+KiwiAdditions.h + UIRefreshControl+RACCommandSupport.m path - Classes/NSValue+KiwiAdditions.h + ReactiveCocoaFramework/ReactiveCocoa/UIRefreshControl+RACCommandSupport.m sourceTree <group> - 6A37838E74DC4EF0A86D86F6 + 4150AA24992C415BB41ED908 fileRef - 17E99F172BB04E7FA385D3B1 + 9007BF0487A94BC1B21E1E8C isa PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 6A4B6AA37C6A4A60AA618DE5 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.plist.xml - path - Pods-acknowledgements.plist - sourceTree - <group> - - 6A7B409622AB4481B3EF2324 + 41FE01A27BB045F797715312 - buildConfigurations - - 0BF201DFF8494CEAA23A4DA1 - 2A0628C4EB11469BAFFE5819 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release + fileRef + 8CD93E75662D4FA9A2E90455 isa - XCConfigurationList + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 6AA39E1AFBD54BF480FF6BED + 4262B7ABFEE34911B6C3A966 - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KiwiMacros.h - path - Classes/KiwiMacros.h - sourceTree - <group> - - 6BE06CB751AD4C64B3B3C084 - - includeInIndex - 1 + baseConfigurationReference + 2E03E503A6AF4E2DB66DE761 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + NO + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-Reachability-prefix.pch + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 5.0 + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + isa - PBXFileReference - lastKnownFileType - sourcecode.c.h + XCBuildConfiguration name - KWHaveValueMatcher.h - path - Classes/KWHaveValueMatcher.h - sourceTree - <group> + Debug - 6BFBA0F65DCB4AE78E414EBF + 427A693C18C544E6A9937E08 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWAfterAllNode.m + KWBlock.h path - Classes/KWAfterAllNode.m + Classes/KWBlock.h sourceTree <group> - 6C0C6181BBB847338DFFD051 - - fileRef - 3A7B3059C5104C918D94B22C - isa - PBXBuildFile - - 6C6C9D8575784112B85F541A + 42E315F8B6AC4611913652E8 fileRef - CE09F3BDE9EC4A75A2BA873A + F6084BC1A66C4EBBBD3BE4CD isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 6C6D482A6CD848CBAAB504BE - - fileRef - 6FE6DE09064343AF8D6C5C5C - isa - PBXBuildFile - - 6C7E5EB69385496B94455245 - - children - - 2FE81D78926C484D84643F64 - C1E952991CD04A79B97AA363 - C0F3A5829EA1439493DBCDE9 - 86C96E1C62EA4A7EBE76CCCC - - isa - PBXGroup - name - Pods - sourceTree - <group> - - 6CADAB6FF7E844F4B0FB86BA - - fileRef - 51CE02EBD0C24A5195D33FF3 - isa - PBXBuildFile - - 6CAF3F4E872A48BB90BBA5F9 - - fileRef - A81872A9D4564C6591140F8F - isa - PBXBuildFile - - 6D3299A50BC348AC87FCE9A4 + 42E6B0A1AA23414789BB67A5 includeInIndex 1 @@ -3491,38 +3259,43 @@ lastKnownFileType sourcecode.c.h name - KWMatchers.h + RACSubscriber+Private.h path - Classes/KWMatchers.h + ReactiveCocoaFramework/ReactiveCocoa/RACSubscriber+Private.h sourceTree <group> - 6D85F37568564FD58D7EA465 + 4435FFC749804BFD8110A0F8 + + fileRef + F3C4A814FFE74D42B8BBBE4F + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 4452D073C01046AAA29B7225 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - NSProxy+KiwiVerifierAdditions.m + KWBlockRaiseMatcher.h path - Classes/NSProxy+KiwiVerifierAdditions.m + Classes/KWBlockRaiseMatcher.h sourceTree <group> - 6F1DD6827A3C4241A139A5D9 - - fileRef - 07926D06ED154D638E71C495 - isa - PBXBuildFile - - 6F483306A39C43AC8D0DE18C + 44635FF6FD8C4A7CB4E8234B fileRef - 628104BBD4DB470E8D574699 + 01A88CE06E43421E81687AA6 isa PBXBuildFile settings @@ -3531,22 +3304,22 @@ -w -Xanalyzer -analyzer-disable-checker - 6FE6DE09064343AF8D6C5C5C + 44B18651C8BA4A84AF1F9231 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWHaveMatcher.h + KWAfterEachNode.m path - Classes/KWHaveMatcher.h + Classes/KWAfterEachNode.m sourceTree <group> - 7074542AAB8D443198B871D1 + 44CEE6C9BD4649AE810916B5 includeInIndex 1 @@ -3555,137 +3328,163 @@ lastKnownFileType sourcecode.c.objc name - KWConformToProtocolMatcher.m + KWWorkarounds.m path - Classes/KWConformToProtocolMatcher.m + Classes/KWWorkarounds.m sourceTree <group> - 7254F50075A145E8BB8E64C3 - - fileRef - D045CEF3EC0B400DB21E946B - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - - 728ED010349F4E4C9249209C + 44F15E5BE8AC46D49803B2C8 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWConformToProtocolMatcher.h + RACTargetQueueScheduler.m path - Classes/KWConformToProtocolMatcher.h + ReactiveCocoaFramework/ReactiveCocoa/RACTargetQueueScheduler.m sourceTree <group> - 729162EE598F4D65BFE3634D + 4511DAF6FDE64C53BF02689E + + fileRef + 28E7B4EA3CCB41A188767F75 + isa + PBXBuildFile + + 4514A9907D4E427BA03994A3 + explicitFileType + archive.ar includeInIndex - 1 + 0 isa PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSInvocation+OCMAdditions.m path - Classes/NSInvocation+OCMAdditions.m + libPods-specs-OHHTTPStubs.a sourceTree - <group> + BUILT_PRODUCTS_DIR + + 45CEA3C317384210950AFFD4 + + fileRef + A8A09B6BFF8E4A949004EA58 + isa + PBXBuildFile - 74A95A56C5F94720BBED48D2 + 45DEED1BF9614DB5B64B6227 fileRef - AAB93295F3CD4E85871EFEA1 + 3C3EE7F5AFF74E9F898B6254 isa PBXBuildFile settings COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 74CFBCE5012B402CAA3703C2 + 4664A96645EA431D8B7D947B includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc + name + RACScheduler.m path - Pods-specs-environment.h + ReactiveCocoaFramework/ReactiveCocoa/RACScheduler.m sourceTree <group> - 74E0C855E0CE42F1AA19A4DE + 46AA7648C8CF43D3AF534C2A - fileRef - 2055DC61B7024729929F295B + buildConfigurations + + 4262B7ABFEE34911B6C3A966 + 24C3DBF970F44A8F9D375763 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release isa - PBXBuildFile + XCConfigurationList - 75170BD32DD944139E99DA3B + 47674E64692242DA80252C38 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWHaveMatcher.m + KWBeNonNilMatcher.h path - Classes/KWHaveMatcher.m + Classes/KWBeNonNilMatcher.h sourceTree <group> - 76A0A952EB364167AE51D83E + 47C95EEEB43D479E9D0FB828 + + explicitFileType + archive.ar + includeInIndex + 0 + isa + PBXFileReference + path + libPods-specs-Kiwi.a + sourceTree + BUILT_PRODUCTS_DIR + + 47DE717D953A49748E480F8D + + buildActionMask + 2147483647 + files + + E9877AE0AC8E4D479DD89534 + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 47E5203D5CD7437D8C21E3D6 fileRef - 9FE41677EAC9448698D57AF2 + DD54F3CD1A5F4739B57D3DD2 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 76BF20B794CB429CBC47B8DA + 47FD1518AF45428A9939E291 - children - - 04AC5B12B1924BE0A2D9B018 - C7C8C44CDEE04061AECD9B3A - 532E269EEC5445FB9593929F - BB750892830E43E9A8AFE0F1 - + fileRef + 831677BB9AFD49F2BA6F3853 isa - PBXGroup - name - Support Files - sourceTree - SOURCE_ROOT + PBXBuildFile - 7771EC49085444BC8585347F + 482C8EFFDED24F2CAD8B0965 fileRef - A45B973FF3304AFDBEC54200 + DB92B986F814421097AC31B8 isa PBXBuildFile - 7793AD6003B94E13A30057BF + 482CE5400B8C4694970E64CD includeInIndex 1 @@ -3693,67 +3492,134 @@ PBXFileReference lastKnownFileType sourcecode.c.objc + name + NSArray+RACSequenceAdditions.m path - Reachability.m + ReactiveCocoaFramework/ReactiveCocoa/NSArray+RACSequenceAdditions.m sourceTree <group> - 78373B40FFD84906AEE77B16 + 48532157675748ABB547D50D fileRef - 8F4D7E1E163843DE9DBF6C23 + 47C95EEEB43D479E9D0FB828 isa PBXBuildFile - 78E6CC5D4930408A976FBCFC - - children - - 863F116C601848108F1DEA69 - 03B4A57C7A8D4450AC82D770 - 6A4B6AA37C6A4A60AA618DE5 - C73D78A31EED4D29A11362CC - 1E869704A40D46CE9BEF36C2 - 608C824C392E4D6EBB95C62A - - isa - PBXGroup - name - Pods - sourceTree - <group> - - 79594ECD1D924ACAA22259A3 + 486AD6BC8E084E4489E950F1 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - SRWebSocket.m + RACmetamacros.h path - SocketRocket/SRWebSocket.m + ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACmetamacros.h sourceTree <group> - 79BC30C23CDE4DA99835C8E5 + 48D979147BD14312945D14C5 buildActionMask 2147483647 files - FC15726807EB48968A2AF22F - D8F11F79DB1E47B4AA383102 - 34F91BD03C514E0799F3C231 + 1A2E78E1A99F45D293A979C2 + FF422B92EFEF40C69375FD1B + 750FF767CA1E4E1CAFCC6D34 + 64B285009A40470A8702A7D7 + C5496FF0699E41CEB31D4D7F + E3E15992F42E4D1FAFB8EAE7 + 0C2778DD16544965BE613972 + 4435FFC749804BFD8110A0F8 + 4150AA24992C415BB41ED908 + A74E170D326840CDA12E786A + 0AAA23E4769844409E164717 + A61DC31A04CF4A2588EA1702 + B206298413FF4A01865FDB24 + 91AC718C8A544A6AADA9AF60 + 14CB6CB5EEE34C9894A621C3 + E42B23214B834ECE83E8EF4D + BA976FE53B10488284FB1E18 + 5341ADC3E5DF4F8AB1C8AB2E + 9DDECA2D633043648676A1FD + B7EB1C75C7254D17ABBB72DB + 2330D4D14580411790B942EB + 304C97ED6FC44689842E8126 + 5855F3C6BD4C49E985E4C249 + 3FE626FADFB64D1686D0FA38 + 6B0DF5DC266A4D83A414B8B4 + C45ACC8C4F82435FB09DEC64 + 604CF2C9F0A3499CB9FA23B2 + 4D3FD4D71A6F4B418A981911 + 338EE28E93424A329B1BE41D + 389A6FDB7A914F93BE714E75 + F5AB7FB274A84B31898B11D6 + F3CC2B2178084527AAD26615 + C1052EB783924701BA35CDC5 + 052E094B207C4372B959E620 + A58892B2A24844E0815CC40F + CF13547E3D5A4A46AF86E77B + 41FE01A27BB045F797715312 + 4BC4EFAF6C2A4A35ACA8654D + 628616A9AC634F3B993A9713 + 4014BB3BE56B4A7EBA32AC68 + F591CFA0AC1E45C6B5A029AE + F66570DC6820480196AB504D + 6817D07DD0E7455AA376EAFB + E7C3BEF475E04E9BA065824C + ACF57E91F4FE4C6CB3DDDA57 + 95C5BCDFA2E6414AB7453F81 + FFBEDF51644D4EB98802152C + C352FBC2540B4CF391B8EC04 + BF02313BDDF94D7DBD78A195 + 5FED5A9FFE724FF99271908D + 25E4E934A2D54C969E2A7657 + 6510081C66B74A6A9246DD13 + 966169B31B484044BFC62A46 + C77D93F02CD44921A3B45645 + 4511DAF6FDE64C53BF02689E + B469F85D03D8489088863C52 + 354964B346D949F189E533DE + 204B040DE2F2428E9EDFF73C + CC998C2A0FCB446CA87E8D6F + 68E31BC53C5C42129B8B04BA + 2CF75CA115824843827AA589 + 253BAE184DBC4CD0B167AEEF + 4C924A5CBDA943AEBDDF38D4 + BB916C470E764D80ADFD745B + 5AACFAC3BF1D4CD5AAA3ABF8 + 12A11E6980B14F098D5D2FD9 + 42E315F8B6AC4611913652E8 + F7AC5AC816CA46BFA38108E0 + 9CB48D4C3663408C888BD73A + 40ACDEF268194A7BAFAAD306 + 1B0BCCC0AFF4465282D28997 + DC86FFE77D1244519B737AF9 + 09D8FBD4CBC34F718790D2D3 + D237C157B0AC4C9C8E3D91D2 + 45DEED1BF9614DB5B64B6227 + CDF3696E61634EF2AC858744 + E47E6AFC3F4344B3989412B4 + 16557A788BBC4A1DB8AFE695 + 7206A42B14C84570BAF28CD1 + 74E175C05E3C4AC1A565E7A1 + 9CDF01FCBAFC4847A01FF6DA + F23596A6B44347A8A74E28BB + 4BE75AE33D0442D9BDB3DF93 + B8C251E35AF84F1693BCAF72 + 9EDFB43655B149AFA573FE6E + 516F9A1D793F4E9FAB70DAEA isa - PBXHeadersBuildPhase + PBXSourcesBuildPhase runOnlyForDeploymentPostprocessing 0 - 79E64BB784CE4584A5410888 + 492299289A5046A7B1B722B3 includeInIndex 1 @@ -3762,113 +3628,53 @@ lastKnownFileType sourcecode.c.h name - KWCaptureSpy.h + KWVerifying.h path - Classes/KWCaptureSpy.h + Classes/KWVerifying.h sourceTree <group> - 7A0BFC99D1754829817C5823 + 497C093DAD454749A098D195 - fileRef - 49503502CA0D45EFA0D71FF1 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - - 7AB80B2C80CA44A2936CF0F9 - - includeInIndex - 1 + includeInIndex + 1 isa PBXFileReference lastKnownFileType sourcecode.c.objc name - KWExampleGroupBuilder.m + RACDelegateProxy.m path - Classes/KWExampleGroupBuilder.m + ReactiveCocoaFramework/ReactiveCocoa/RACDelegateProxy.m sourceTree <group> - 7AEE7246F18E4610B356DFBF - - fileRef - D08C3321806E4969BEF25D4F - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - - 7C99EF6B6936428FBC9E40A0 - - fileRef - AB605CA8305E474A8F4B18D3 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - - 7D544D0BDE0E4EE99E2DFA84 - - fileRef - A5955F94002043A2BBB63E23 - isa - PBXBuildFile - - 7ED13B5B29FB4489A7F9375F - - fileRef - F3C145405CBC4A00862AAED7 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - - 7F989206AFA94BBC94EC2B48 - - fileRef - B5D8AE281BA84EB0A11447AC - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - - 7FAAEAF439364840A8BF958D + 4992576032794EE1BD17268E includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWStringUtilities.m + KWBeBetweenMatcher.h path - Classes/KWStringUtilities.m + Classes/KWBeBetweenMatcher.h sourceTree <group> - 7FCF3FC612C64B0191802AB1 + 49ECE25D2A0D48DF975523B9 + + fileRef + 6608C5AAD046440C9228452D + isa + PBXBuildFile + + 4A13A074EC3C465AAAA998C6 baseConfigurationReference - FE5D2C2CBA92447DAFACD29C + 6A1A9B8DEC6447AFBFFCA440 buildSettings ALWAYS_SEARCH_USER_PATHS @@ -3886,7 +3692,7 @@ GCC_PRECOMPILE_PREFIX_HEADER YES GCC_PREFIX_HEADER - Pods-Reachability-prefix.pch + Pods-specs-OHHTTPStubs-prefix.pch GCC_PREPROCESSOR_DEFINITIONS DEBUG=1 @@ -3899,7 +3705,7 @@ INSTALL_PATH $(BUILT_PRODUCTS_DIR) IPHONEOS_DEPLOYMENT_TARGET - 4.0 + 5.0 OTHER_LDFLAGS PRODUCT_NAME @@ -3916,41 +3722,22 @@ name Debug - 7FE7D751F94245D987F2A50C - - fileRef - 29CC20FB4C3C4EC78A237345 - isa - PBXBuildFile - - 8035F6FB71494134AA09D4C4 - - fileRef - 28BE4156A6E4457EA0AB6301 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - - 80915F5DDFAA4A89A0559079 + 4A5864DA996E4A9D8D321BE2 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWBlockNode.m + RACGroupedSignal.h path - Classes/KWBlockNode.m + ReactiveCocoaFramework/ReactiveCocoa/RACGroupedSignal.h sourceTree <group> - 8106A3F641FE48AC8CFBE107 + 4A9FAE110505455A84BC3938 includeInIndex 1 @@ -3959,106 +3746,28 @@ lastKnownFileType sourcecode.c.objc path - Pods-specs-Kiwi-dummy.m - sourceTree - <group> - - 814B183C251C4643A08C4BF3 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWGenericMatchingAdditions.h - path - Classes/KWGenericMatchingAdditions.h + Pods-specs-dummy.m sourceTree <group> - 8287BF09029947B6AAFB4DC1 - - isa - PBXTargetDependency - target - 995F1D8F06324A69AC7ADD72 - targetProxy - A83BAE80D1534EFA9CC9774D - - 828CE22DF4604CB78E1E8FD6 + 4AA3752E415648629006D697 fileRef - 1DD726E13AF0433EB40BD89C + 08A1EF1724374DAE8DFAF285 isa PBXBuildFile - 82DCBD4F922644089A232368 + 4B21083B56F04631AE91623D fileRef - 4982B173575F45CBBB785B47 + 72B25C6C93604502824DA92F isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - - 8376554B9B6E4661AE7502E1 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWFutureObject.h - path - Classes/KWFutureObject.h - sourceTree - <group> - - 863F116C601848108F1DEA69 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods.xcconfig - sourceTree - <group> - - 86C96E1C62EA4A7EBE76CCCC - - children - - F139C2BE6E5C4487B58E0C79 - AAB93295F3CD4E85871EFEA1 - 03F05C358E854E8DA923970F - 79594ECD1D924ACAA22259A3 - E08626E0AE2F45A78D0E48A0 - D50EC4A6AB114D948A510707 - 4264DC13498E4DF9AE5F5BCC - - isa - PBXGroup - name - SocketRocket - path - SocketRocket - sourceTree - <group> - 871F490A59D84E52B75981D7 + 4B25BEDF657940339CF1BA00 fileRef - C370DE5C47884C4592EBA2B9 + 0EDD851F5BC24A55B4FB4F5B isa PBXBuildFile settings @@ -4067,181 +3776,140 @@ -w -Xanalyzer -analyzer-disable-checker - 87BD76B106A2436DA1BEAD12 + 4B660BFE5D0C4427ACE40C27 - includeInIndex - 1 + fileRef + 12C605A130B94D0896B7324E isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWSpec.h - path - Classes/KWSpec.h - sourceTree - <group> + PBXBuildFile - 885D15B67D0F40A790E56D66 + 4B7F9EFB25E148C980FB134D fileRef - C4067E08F10A4CED82E5D513 + B0D42FA1B4A34603826E7B56 isa PBXBuildFile - 887C8C47955141DB8E7CDA66 + 4BA64F0074C14710A9A090BD includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWBlockRaiseMatcher.m + NSObject+RACDeallocating.h path - Classes/KWBlockRaiseMatcher.m + ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACDeallocating.h sourceTree <group> - 8A584269B4744BCDBE97EF8A + 4BC4EFAF6C2A4A35ACA8654D fileRef - 031B6BA4066440EAAF7C395F + A307DA15F3574A019015BED8 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 8A76285BC583440486FABAA8 + 4BDF936788434A0892821DED + + fileRef + 7923AD5B65C742A4A35492D5 + isa + PBXBuildFile + + 4BE75AE33D0442D9BDB3DF93 fileRef - F01F77AD0DDF4A2E87244480 + A40A452120B2495698C18ED9 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 8AB698371FC54087AC4A5BE3 + 4C719763155E437C9FE068DF includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - KWAsyncVerifier.m + text.script.sh path - Classes/KWAsyncVerifier.m + Pods-resources.sh sourceTree <group> - 8ABD6E6739964423BA924C6A + 4C901C823ED44BF7A8C52366 - children - - 0EBFE40558BC490F91DF77BC - 58D89DE341D8424F9778003E - DD4C75E2AE684153A99B3AE3 - 28469D6B3C964842B64C09F0 - 17E99F172BB04E7FA385D3B1 - AC0F8A06DE804D9F8BFE2CD8 - + fileRef + E18E3DC5D03D41D195A7748F isa - PBXGroup - name - Products - sourceTree - <group> + PBXBuildFile - 8BE5BCC91D8746468415830C + 4C924A5CBDA943AEBDDF38D4 fileRef - 7793AD6003B94E13A30057BF + 44F15E5BE8AC46D49803B2C8 isa PBXBuildFile settings COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 8C7ABCAC9DB14B62A03029D7 + 4CC64734F9704B05A4D6309A fileRef - DB2C631DFE764E938AF04269 + 9A3B190754E1411FBD33CFFF isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 8CD183EA2D3E4A6B8D5761CE - - buildConfigurationList - 919D531A32354A43873423A0 - buildPhases - - FDEF8C78534E4DC29E833357 - B8BDC4103A3946E4B534AF3B - - buildRules - - dependencies - - 8287BF09029947B6AAFB4DC1 - 2E9C8CB3C258437A803DFBB8 - - isa - PBXNativeTarget - name - Pods-specs - productName - Pods-specs - productReference - 28469D6B3C964842B64C09F0 - productType - com.apple.product-type.library.static - - 8CDFB9978A914A6E8E289296 + 4CCD9D13DC4E4B6AA766B153 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - SenTestSuite+KiwiAdditions.h + NSObject+RACLifting.m path - Classes/SenTestSuite+KiwiAdditions.h + ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACLifting.m sourceTree <group> - 8D3739690F854DBCAAD3C1AC + 4D334D992B7548B1A71FEAF8 fileRef - 2D55C38164534F49A631E8F9 + 5A33FFF7CF464F59922BD03B isa PBXBuildFile - 8D49E21B5C094FD7BBCF9B67 + 4D3FD4D71A6F4B418A981911 fileRef - 35AAAED225E9468D9C02BF36 + DC1E4BC6BC8A4837B768E335 isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - 8D78F141C95141BE9A535384 + 4E2D33EF097A4DC18D358E76 includeInIndex 1 @@ -4249,29 +3917,27 @@ PBXFileReference lastKnownFileType sourcecode.c.h - name - KWReporting.h path - Classes/KWReporting.h + Pods-Reachability-prefix.pch sourceTree <group> - 8D79D2AEE6134607B9C42EED + 4E3440AC0456491A971AEAA1 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWAny.m + KWCaptureSpy.h path - Classes/KWAny.m + Classes/KWCaptureSpy.h sourceTree <group> - 8DB5CFD169084CDA8AD36554 + 4E5163BF49274B0FAC8F0A42 includeInIndex 1 @@ -4280,31 +3946,31 @@ lastKnownFileType sourcecode.c.h name - KWContainMatcher.h + NSObject+KiwiVerifierAdditions.h path - Classes/KWContainMatcher.h + Classes/NSObject+KiwiVerifierAdditions.h sourceTree <group> - 8DDBA4EB259941A9999709D8 + 4E66F6BC25A54F3CAE9C4140 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWMatchVerifier.h + KWInequalityMatcher.m path - Classes/KWMatchVerifier.h + Classes/KWInequalityMatcher.m sourceTree <group> - 8E1BAFC9F2A64EDBB13EEB67 + 4F141A3F9162423B8C01A9B1 fileRef - FE3DB58BF5034002BA9880D8 + 5B006951FFD44E42B883CA93 isa PBXBuildFile settings @@ -4313,32 +3979,27 @@ -w -Xanalyzer -analyzer-disable-checker - 8E4EBA6C393D4E669F393B84 + 4F2C8771A68749D1AA5D2CD5 - buildConfigurationList - ADEED1D2CD7146409E47EC2C - buildPhases + fileRef + 3C09F943F7AF4D76A10CA4B3 + isa + PBXBuildFile + + 4F7CB33FA6C743F5B18098D5 + + children - 3D6CD950BF214ADC86AF7F32 - 1743A09D6AFD46788C358B14 - 4E9B6F4E19504257A4F10A33 + F2D9A2153CD04B2F93E661E2 - buildRules - - dependencies - isa - PBXNativeTarget + PBXGroup name - Pods-specs-OHHTTPStubs - productName - Pods-specs-OHHTTPStubs - productReference - AC0F8A06DE804D9F8BFE2CD8 - productType - com.apple.product-type.library.static + Frameworks + sourceTree + <group> - 8E9F9F8062A54FE9874A7B56 + 4FEC1AA9762E404082803DED includeInIndex 1 @@ -4347,13 +4008,40 @@ lastKnownFileType sourcecode.c.objc name - KWHaveValueMatcher.m + UIStepper+RACSignalSupport.m path - Classes/KWHaveValueMatcher.m + ReactiveCocoaFramework/ReactiveCocoa/UIStepper+RACSignalSupport.m sourceTree <group> - 8F4D7E1E163843DE9DBF6C23 + 50361B87F1D24BE2BBE25201 + + fileRef + 1521FFD6F75A40DAB94ACE40 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 50A9715EBDC04E84BC2761B9 + + buildActionMask + 2147483647 + files + + E995638581A84DA5ADB7F1E8 + 48532157675748ABB547D50D + 36FD63E8A2A74E01A71C9AFA + + isa + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 50E826F43D0F4FD7B5D37294 includeInIndex 1 @@ -4362,188 +4050,127 @@ lastKnownFileType sourcecode.c.h name - KWCallSite.h + OHHTTPStubs.h path - Classes/KWCallSite.h + OHHTTPStubs/OHHTTPStubs.h sourceTree <group> - 90A7AC835622462E88360C24 + 50EE5E49F3EF446593877EC5 - includeInIndex - 1 + children + + 335ACBB103CF42D294441418 + 4F7CB33FA6C743F5B18098D5 + DE336D8C1FF141EF9986F539 + A0CE69363211446C86C94F98 + CE3930D6BD9144FBA882CD98 + isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - KWBeSubclassOfClassMatcher.m - path - Classes/KWBeSubclassOfClassMatcher.m + PBXGroup sourceTree <group> - 90D6143BE00D4C9EA4D68B38 + 5167ACA3B53F4A839874B1E3 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWPendingNode.m + NSString+RACKeyPathUtilities.h path - Classes/KWPendingNode.m + ReactiveCocoaFramework/ReactiveCocoa/NSString+RACKeyPathUtilities.h sourceTree <group> - 91066291B7E144D6827A0862 + 516F9A1D793F4E9FAB70DAEA fileRef - D6BC5A79F1F947EDBA79F086 + 13D58A1BA64A48858E2E49DD isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 911A5F9B865E4CA5910CED97 - - fileRef - 0EE143C221AC43C3A516AE9F - isa - PBXBuildFile - - 912F556C80EB4A01A9EDE526 + 51A12E0F74B54E21A875DA59 fileRef - 65990ABADFE749B7BA753D58 + EC145F306FC14C76979D0352 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 919D531A32354A43873423A0 - - buildConfigurations - - 9810303B754B4A26BE55143F - 02306DAF3AC449A0833E8330 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 91C847FC9A9D4BC78051552A + 523D92D0958140FEA4A15703 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - KWExampleSuite.m + sourcecode.c.h path - Classes/KWExampleSuite.m + Pods-SocketRocket-prefix.pch sourceTree <group> - 91DAEB0A48A349BC874897B8 - - buildActionMask - 2147483647 - files - - 911A5F9B865E4CA5910CED97 - - isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 93907A2127B64E32A9E73A34 + 5288BA5DA69B4CECAAD9724D isa PBXFileReference lastKnownFileType wrapper.framework name - SystemConfiguration.framework + Security.framework path - Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/SystemConfiguration.framework + Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/Security.framework sourceTree DEVELOPER_DIR - 962EC98421D24966A0E4C696 + 52DE7868CB574B438320C9A8 + + fileRef + EF94BEFE58CD415C8F2B12A0 + isa + PBXBuildFile + + 52F4BD4C69444DB7ADA94143 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWStringPrefixMatcher.h + KWFailure.m path - Classes/KWStringPrefixMatcher.h + Classes/KWFailure.m sourceTree <group> - 9810303B754B4A26BE55143F + 5341ADC3E5DF4F8AB1C8AB2E - baseConfigurationReference - 3B0F2646415548AD84525C6F - buildSettings + fileRef + 13811616FF3443FF8EB3000B + isa + PBXBuildFile + settings - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 4.0 - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - isa - XCBuildConfiguration - name - Debug - 985BCE1FE41D40A2B5EC00D8 + 53771B9206654B4B8D27FE87 includeInIndex 1 @@ -4552,13 +4179,13 @@ lastKnownFileType sourcecode.c.objc name - KWRespondToSelectorMatcher.m + KWContainMatcher.m path - Classes/KWRespondToSelectorMatcher.m + Classes/KWContainMatcher.m sourceTree <group> - 985D20D82D914C949D88A23A + 53ABEB7322CB47E8A0B0E73A includeInIndex 1 @@ -4567,38 +4194,28 @@ lastKnownFileType sourcecode.c.h name - Kiwi.h + NSOrderedSet+RACSequenceAdditions.h path - Classes/Kiwi.h + ReactiveCocoaFramework/ReactiveCocoa/NSOrderedSet+RACSequenceAdditions.h sourceTree <group> - 995F1D8F06324A69AC7ADD72 + 53E2E69EC8DE4A029FA08396 - buildConfigurationList - C884E558218C47229522B1F4 - buildPhases - - 41633299FEFB4BAE9BE21D2D - 29DF099C8A9C4E1FB05EE812 - CC1B8080648B4590BA8D4B90 - - buildRules - - dependencies - + includeInIndex + 1 isa - PBXNativeTarget + PBXFileReference + lastKnownFileType + sourcecode.c.h name - Pods-specs-Kiwi - productName - Pods-specs-Kiwi - productReference - 17E99F172BB04E7FA385D3B1 - productType - com.apple.product-type.library.static + KWInvocationCapturer.h + path + Classes/KWInvocationCapturer.h + sourceTree + <group> - 99EDF7C7A40A4345A4AC2A00 + 53F5158A9DE244498DD596D2 includeInIndex 1 @@ -4607,79 +4224,96 @@ lastKnownFileType sourcecode.c.objc name - KWTestCase.m + KWBeforeEachNode.m path - Classes/KWTestCase.m + Classes/KWBeforeEachNode.m sourceTree <group> - 99F10C2BC336401B889BBC1C + 544897CE916B485392CD2A4A + + fileRef + D3A2CB35F034400CB7329D1E + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 55998C1FB2F14DE5858D9D3A includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - NSMethodSignature+KiwiAdditions.h + RACReplaySubject.m path - Classes/NSMethodSignature+KiwiAdditions.h + ReactiveCocoaFramework/ReactiveCocoa/RACReplaySubject.m sourceTree <group> - 9A1D182D77104738BCBCDBA2 + 559BCBD1DB56401FBC55A38A - buildConfigurations - - 403488704D9146CC9BAC5C5D - 0F3E746C00904AB7B2AEFD60 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release + fileRef + CF48551A1FF743989A2D2E46 isa - XCConfigurationList + PBXBuildFile - 9A27C4CA2DC445D3A9FDDCD5 + 561301809AC7426A83DF9803 fileRef - 3A20B71BE63C450F84F5F622 + A9E27EB329B14D3D8964E65D isa PBXBuildFile - 9B3E0953C6D64767883CAC5C + 561C815A44094CDAAEEBB5A2 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWCountType.h + UISegmentedControl+RACSignalSupport.m path - Classes/KWCountType.h + ReactiveCocoaFramework/ReactiveCocoa/UISegmentedControl+RACSignalSupport.m sourceTree <group> - 9B571EB53ABA42F487FDF7E1 + 56876CC87CE746FF9904AD3D + + fileRef + 383D0AD29EEF48EBA03A1B6E + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 56FC5424BF3847E996EABCFB includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWBeNilMatcher.m + UIControl+RACSignalSupport.h path - Classes/KWBeNilMatcher.m + ReactiveCocoaFramework/ReactiveCocoa/UIControl+RACSignalSupport.h sourceTree <group> - 9B6F68AFEB3745FB9F3D32B2 + 572B588A0DD649089CF4C327 includeInIndex 1 @@ -4688,90 +4322,80 @@ lastKnownFileType sourcecode.c.h name - NSObject+KiwiMockAdditions.h + KWBeMemberOfClassMatcher.h path - Classes/NSObject+KiwiMockAdditions.h + Classes/KWBeMemberOfClassMatcher.h sourceTree <group> - 9B8D759A200549A3B661779B + 57D45EAD150A430AB32E2B39 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RACEmptySignal.m + path + ReactiveCocoaFramework/ReactiveCocoa/RACEmptySignal.m + sourceTree + <group> + + 57E430CB18DD4655AD697EE7 fileRef - 87BD76B106A2436DA1BEAD12 + 954DC9D05DE743A6B8671E3C isa PBXBuildFile - 9BF08495B75042328364FD38 - - buildActionMask - 2147483647 - files - - CF5699A1444F45B697DAB10F - 8BE5BCC91D8746468415830C - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 9E2AFA1C33AE4B819805F5C8 - - fileRef - 090196E35042422EACB1091F - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - - 9FE35D21B07B43E3A756B83B - - fileRef - AE467A73803847088E1E0707 - isa - PBXBuildFile - - 9FE41677EAC9448698D57AF2 + 58281E00E33A4B5C8FDA44B0 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWContainMatcher.m + NSObject+KiwiMockAdditions.h path - Classes/KWContainMatcher.m + Classes/NSObject+KiwiMockAdditions.h sourceTree <group> - A01C54233930461D816953A0 + 5831C3AECDA540AB8D4F1C0E - fileRef - AEB9B076F0724C63A76DF656 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + NSObject+RACSelectorSignal.h + path + ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACSelectorSignal.h + sourceTree + <group> - A01E4D115F2849D4A3A2C6E7 + 5855F3C6BD4C49E985E4C249 fileRef - 2E219F2E9C9A4B0CA08AAAD9 + 6CDC1066C5C44587BF0B6F4A isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - A0885C9E44AC4AC4959CAB5F + 5861A5F373294487AFFB8841 fileRef - EC370BCD987D43A7A1381C09 + 40E0717091884763B9782140 isa PBXBuildFile settings @@ -4780,55 +4404,42 @@ -w -Xanalyzer -analyzer-disable-checker - A10FEEC17D3E4CA19E4110BF - - fileRef - 694774DB4D5C4626939E9F05 - isa - PBXBuildFile - - A1AE93F94AC24445A524226F - - fileRef - 814B183C251C4643A08C4BF3 - isa - PBXBuildFile - - A32CD7A6721747FEB9F85245 + 58714FB86CBE459EB6A4961C - fileRef - 9B3E0953C6D64767883CAC5C + containerPortal + 3593DC205A284FA2958F1B80 isa - PBXBuildFile + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 9A6B6BFEB33144239FDB185C + remoteInfo + Pods-specs-OHHTTPStubs - A4157F1FDC144D338722F240 + 5880585F20314BAD81399FD4 fileRef - B65B974FF4CF4C3BB160D7D2 + 4992576032794EE1BD17268E isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - A45B973FF3304AFDBEC54200 + 58E7572CCDFE4E6686064537 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWChangeMatcher.h + KWBeZeroMatcher.m path - Classes/KWChangeMatcher.h + Classes/KWBeZeroMatcher.m sourceTree <group> - A5955F94002043A2BBB63E23 + 599721491B8D4DA8A733A7A8 includeInIndex 1 @@ -4837,67 +4448,40 @@ lastKnownFileType sourcecode.c.h name - KWNull.h + KWObjCUtilities.h path - Classes/KWNull.h + Classes/KWObjCUtilities.h sourceTree <group> - A64532500D0E44C5BC5A6C98 + 5997AE0A334744BBA7F9E093 - buildActionMask - 2147483647 - files - - BBC25647CB2646519CFEE44B - 40A3C3A05AA6404DB839D750 - + fileRef + D7EC89AB9CCE4EC59E00F682 isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - A778109E7D50436290127673 + 59A364D3BF8448C795798BCC includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWExampleGroupDelegate.h + KWAfterAllNode.m path - Classes/KWExampleGroupDelegate.h + Classes/KWAfterAllNode.m sourceTree <group> - A7D9977497BA4F6AB4A0889F - - buildConfigurationList - E9B5A6C339E44F5692B5BA24 - buildPhases - - 9BF08495B75042328364FD38 - A64532500D0E44C5BC5A6C98 - 91DAEB0A48A349BC874897B8 - - buildRules - - dependencies - - isa - PBXNativeTarget - name - Pods-Reachability - productName - Pods-Reachability - productReference - 58D89DE341D8424F9778003E - productType - com.apple.product-type.library.static - - A81872A9D4564C6591140F8F + 59C7020EE1434185B9029FC8 includeInIndex 1 @@ -4906,82 +4490,73 @@ lastKnownFileType sourcecode.c.h name - KWMessageTracker.h + KWBeNilMatcher.h path - Classes/KWMessageTracker.h + Classes/KWBeNilMatcher.h sourceTree <group> - A83BAE80D1534EFA9CC9774D - - containerPortal - CD9632B3B8EC456ABE0A7912 - isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - 995F1D8F06324A69AC7ADD72 - remoteInfo - Pods-specs-Kiwi - - A87A1F19A5E24961855B606A + 5A33FFF7CF464F59922BD03B - includeInIndex - 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + wrapper.framework name - KWBeforeEachNode.h + Foundation.framework path - Classes/KWBeforeEachNode.h + Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/Foundation.framework sourceTree - <group> + DEVELOPER_DIR - A897C81F7F8448EE8945E99C + 5A3A8742B8FD4F0D98E23A99 - fileRef - DFED1B5F445D40889D02EDA6 + explicitFileType + archive.ar + includeInIndex + 0 isa - PBXBuildFile + PBXFileReference + path + libPods-ReactiveCocoa.a + sourceTree + BUILT_PRODUCTS_DIR - A8AA10DCC15A40448D9209FF + 5AACFAC3BF1D4CD5AAA3ABF8 fileRef - 49FACA0C9F5749A992DBCABD + 33E7747595C64B30BC8EDD39 isa PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - A8E59E320A3B4435932F948C + 5B006951FFD44E42B883CA93 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWStub.h + KWContextNode.m path - Classes/KWStub.h + Classes/KWContextNode.m sourceTree <group> - A983B2E7AB4E4AFD849B3FCA + 5B6F4F5FE4074CF1B8D51958 fileRef - 80915F5DDFAA4A89A0559079 + 26BA8B42BF5249398A327A1C isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - A9C4CB0990804BE2BAFB88F1 + 5B7613B22BDB45B3989085B9 includeInIndex 1 @@ -4990,58 +4565,81 @@ lastKnownFileType sourcecode.c.h name - NSNumber+KiwiAdditions.h + KWTestCase.h path - Classes/NSNumber+KiwiAdditions.h + Classes/KWTestCase.h sourceTree <group> - AAB93295F3CD4E85871EFEA1 + 5BF559B20D784F7096C0D5FF + + buildConfigurationList + 72AAC7B782E14F44968EA42C + buildPhases + + 76D7FD0A9679464DB30242B8 + 85C4A25A7325412788949ADD + FAF7DE0F88A14EBBB5D08FB9 + + buildRules + + dependencies + + isa + PBXNativeTarget + name + Pods-SocketRocket + productName + Pods-SocketRocket + productReference + 354688651EC347BEA7E72F0E + productType + com.apple.product-type.library.static + + 5C3D6D948CA04864841525C5 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - NSData+SRB64Additions.m + text.xcconfig path - SocketRocket/NSData+SRB64Additions.m + Pods-Reachability.xcconfig sourceTree <group> - AB4A82823B0348B588BFA3E0 + 5C4F9736830A4E87807D3281 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWStub.m + NSObject+RACLifting.h path - Classes/KWStub.m + ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACLifting.h sourceTree <group> - AB605CA8305E474A8F4B18D3 + 5CFE18FBE3ED4163BC06E29A includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWIntercept.m + RACMulticastConnection+Private.h path - Classes/KWIntercept.m + ReactiveCocoaFramework/ReactiveCocoa/RACMulticastConnection+Private.h sourceTree <group> - AB79E86D533B4685BC091A9D + 5DD5F2579DEF4A5E87B5EB0F includeInIndex 1 @@ -5049,48 +4647,41 @@ PBXFileReference lastKnownFileType sourcecode.c.objc - name - KWBeforeEachNode.m path - Classes/KWBeforeEachNode.m + Pods-ReactiveCocoa-dummy.m sourceTree <group> - AC00C8D33F9D4472BB5E0C1B - - fileRef - 28F34795FB114FBDA7EC29F1 - isa - PBXBuildFile - - AC0F8A06DE804D9F8BFE2CD8 + 5E8B01CCEDA44A2ABBA85B7B - explicitFileType - archive.ar includeInIndex - 0 + 1 isa PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWMessageSpying.h path - libPods-specs-OHHTTPStubs.a + Classes/KWMessageSpying.h sourceTree - BUILT_PRODUCTS_DIR + <group> - AC68232DE8B34CAB8DB66448 + 5F2F215588894C228A278E7A fileRef - E5145671E6D54BEFBB2490C9 + 486AD6BC8E084E4489E950F1 isa PBXBuildFile - ACB1FA365FCD45CA9E085ACE + 5F5A715093444895AF74EB71 fileRef - 79E64BB784CE4584A5410888 + A7E83C7743A343359D196097 isa PBXBuildFile - ACC0458522D94F04BD12A80C + 5F84070DCCAD4C04995A4A98 includeInIndex 1 @@ -5099,27 +4690,13 @@ lastKnownFileType sourcecode.c.h name - KWPendingNode.h + KWBeforeEachNode.h path - Classes/KWPendingNode.h + Classes/KWBeforeEachNode.h sourceTree <group> - ACED28F81A714FED8A2C1765 - - fileRef - 8106A3F641FE48AC8CFBE107 - isa - PBXBuildFile - - AD1C906265314FB2A06595FC - - fileRef - B9CD9DBAAAE44EDD9F356FC5 - isa - PBXBuildFile - - AD6F4D23C0D84697AA90F5A5 + 5FAE1563B53947C1B6EFF64D includeInIndex 1 @@ -5128,27 +4705,13 @@ lastKnownFileType sourcecode.c.h name - KWValue.h + RACSignal.h path - Classes/KWValue.h + ReactiveCocoaFramework/ReactiveCocoa/RACSignal.h sourceTree <group> - ADEED1D2CD7146409E47EC2C - - buildConfigurations - - DEFF810FA2294A278F95BD92 - 212C08CD4C86497A8B6EAC23 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - AE467A73803847088E1E0707 + 5FD559D961704045A16F11DF includeInIndex 1 @@ -5157,62 +4720,98 @@ lastKnownFileType sourcecode.c.h name - KWContainStringMatcher.h + NSObject+KiwiSpyAdditions.h path - Classes/KWContainStringMatcher.h + Classes/NSObject+KiwiSpyAdditions.h sourceTree <group> - AE50333D66F64B509D588CF8 + 5FDDEB8A1B104F69B428A9CC fileRef - DD4C75E2AE684153A99B3AE3 + ACB20F6105C544A3A99F4E5E isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - AEB9B076F0724C63A76DF656 + 5FED5A9FFE724FF99271908D + fileRef + 8A2FAE7AEEB24BEFB68233F5 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 60232C08BDF24866A92B8AC2 + + includeInIndex + 1 isa PBXFileReference lastKnownFileType - wrapper.framework + sourcecode.c.h name - CFNetwork.framework + RACQueueScheduler.h path - Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/CFNetwork.framework + ReactiveCocoaFramework/ReactiveCocoa/RACQueueScheduler.h sourceTree - DEVELOPER_DIR + <group> - AFF9F31257644A1799C2CB5D + 6031188552FE4DACAE15BB72 - buildActionMask - 2147483647 - files - - A01C54233930461D816953A0 - 0C68169B77D04AECADAEFB45 - 166B6D77C59449F7A9113164 - + fileRef + C8C0707D5D744816B952B724 isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXBuildFile + + 604CF2C9F0A3499CB9FA23B2 + + fileRef + F222BE0640B54233990D85B5 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - B0653DBFFD1F47D5B0316BF2 + 60734572E744430B8D98C649 fileRef - 24244F9A273F43F8A4941C0F + B7A20EED90F54FDDB5585132 isa PBXBuildFile - B0E1EC3A3F63449B8166D176 + 6074DAE36A1C48789E35139C fileRef - FCF264B3CF2A49CE981915D1 + 5A33FFF7CF464F59922BD03B isa PBXBuildFile - B1AB0D401D5445A593F9B290 + 611CF489139649FD937F69F6 + + containerPortal + 3593DC205A284FA2958F1B80 + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 063659C829454C82A619E4F8 + remoteInfo + Pods-Reachability + + 6124ED0C9838434A9F309EB9 includeInIndex 1 @@ -5221,13 +4820,13 @@ lastKnownFileType sourcecode.c.objc name - KWBeWithinMatcher.m + RACImmediateScheduler.m path - Classes/KWBeWithinMatcher.m + ReactiveCocoaFramework/ReactiveCocoa/RACImmediateScheduler.m sourceTree <group> - B23124130A98430C90B9154F + 617EC9CE5F1E448D9707B41A includeInIndex 1 @@ -5236,20 +4835,20 @@ lastKnownFileType sourcecode.c.objc name - KWWorkarounds.m + KWExistVerifier.m path - Classes/KWWorkarounds.m + Classes/KWExistVerifier.m sourceTree <group> - B3823E30C7824D488C1413EA + 61C1B7F4E62645D28501B3D7 fileRef - 728ED010349F4E4C9249209C + 58281E00E33A4B5C8FDA44B0 isa PBXBuildFile - B42B66B2AB2C439B85DB6F3B + 61C656E59FCD4AA18D3299D3 includeInIndex 1 @@ -5258,35 +4857,62 @@ lastKnownFileType sourcecode.c.h name - KWBeNonNilMatcher.h + NSURLConnection+RACSupport.h path - Classes/KWBeNonNilMatcher.h + ReactiveCocoaFramework/ReactiveCocoa/NSURLConnection+RACSupport.h sourceTree <group> - B5622ACFBB874C119F2648AA + 6225B56BD454455692227279 fileRef - ACC0458522D94F04BD12A80C + D5E8695940A24B3B84C83D2A isa PBXBuildFile - B5D8AE281BA84EB0A11447AC + 625EF39BAD87424AA0259E42 - includeInIndex - 1 + fileRef + 993C884497BD4D88A59F95A0 isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc + PBXBuildFile + + 626B9AFFBE724DAB993B8741 + + children + + C343E0EF87404B9292EB0827 + FFEE9EC9C65A46AD9B50D705 + 5DD5F2579DEF4A5E87B5EB0F + 936A312AAF8340EFB01B8090 + + isa + PBXGroup name - KWSpec.m - path - Classes/KWSpec.m + Support Files sourceTree - <group> + SOURCE_ROOT + + 628616A9AC634F3B993A9713 + + fileRef + FDD86645CC714B85B8EB2472 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 62FA9CCA7C4B42BA924FA4AB + + fileRef + 8B17E5DF82F443A2A3FA0265 + isa + PBXBuildFile - B65B974FF4CF4C3BB160D7D2 + 6320E44CA0034C659743C0F0 includeInIndex 1 @@ -5295,43 +4921,225 @@ lastKnownFileType sourcecode.c.objc name - KWExample.m + KWBeNilMatcher.m path - Classes/KWExample.m + Classes/KWBeNilMatcher.m sourceTree <group> - B88CEEAE2E1F49A882FDF719 + 638F5E8E35794CC29940938B - includeInIndex - 1 + children + + E7DFBD82C01C4C638B832CC1 + 482CE5400B8C4694970E64CD + C8C0707D5D744816B952B724 + E15C15B7F66C4838B6635BE3 + 8766C2B7442040FDAAA372BB + 7D00F35831C94EF9A35BE949 + 6F819ABAD996486EB36E1162 + E833288A46074D58A7682D66 + D89B6EAB38B14B529251562D + 32B3D8CFC841489184670469 + 0907D7C22C3F4A0A857F3E38 + 0756253C4EE34A4CA3408E25 + 678D2FE8E56C46FDB8C21B16 + 1A513DA3413145C5AFC020AF + 4BA64F0074C14710A9A090BD + F3C4A814FFE74D42B8BBBE4F + ACE1A53016D348D49978BA2A + 9007BF0487A94BC1B21E1E8C + 3CF499DF189A4D3DA2DBC640 + 0549192BBCB34EA58BCF73C4 + 5C4F9736830A4E87807D3281 + 4CCD9D13DC4E4B6AA766B153 + A274A8CF4F2F4D65BA7F41DB + A305D6B310EB4378985BA67B + 5831C3AECDA540AB8D4F1C0E + 2BC9C86526404E9997BD3574 + 53ABEB7322CB47E8A0B0E73A + 729964D7AE3A4744B9133890 + 34FAF0DA2F954738B5CC0BF2 + CD88C965FD144077A9EA5996 + 5167ACA3B53F4A839874B1E3 + 90F0880D6A8D4882B20D487F + AE1AB8F8C0EA4935A1DEBA83 + 0F0099A8FFF44612BFF6FB5D + 791AF00BE6BB466D8C5B6342 + 13811616FF3443FF8EB3000B + 61C656E59FCD4AA18D3299D3 + C83C3A6C3B574E7A9C531CA5 + 960CFB3A34494C4AA012FBA9 + 08D62584CB044423B4FBA2C4 + 1CC4D0F1A48E4C3AAD362CF0 + 3C2C0C8FE4ED460F9D638876 + DA4953C078B445A3A1767F2A + 6CDC1066C5C44587BF0B6F4A + DB92B986F814421097AC31B8 + 7454B58EA6AE4BC0B4EFA68D + E3BD340A829E4D19AAA4D5BF + FB027FA86D6E44529D4F6E63 + 8EB43961DFF846BFAED288C1 + 78E53A190E66475F9051B412 + D796CCB4E88140E5A8A0B529 + F222BE0640B54233990D85B5 + DC1E4BC6BC8A4837B768E335 + A0B950953DB34E3DBEF78DD0 + 497C093DAD454749A098D195 + 2869F79ED35C4EA8844A27D4 + 7EF4653CE9CA4DAD9233D367 + 7119EB174A62410B8D5AFCDC + C84D6C4C08E2470B8D11D118 + F3F65FACF58D4DEA948F7A65 + 6F2601DEDFCA412287115CB9 + 831677BB9AFD49F2BA6F3853 + 3BBBEF9DDF2948B6BB1DAF1D + 0C66A6206848438B9317E3A7 + A3752E073EC845ABBC80F496 + 06136C9D62C147BFAFF3A6E7 + 84D1954B5074420691A31E3A + 1CA392F4FE0041718008A555 + 168903ABF9454B78954156F5 + E3F6DFF70DA348DCA2C18755 + 57D45EAD150A430AB32E2B39 + 12C605A130B94D0896B7324E + 8CD93E75662D4FA9A2E90455 + 3F3970F566EA49D7B1B1BCD0 + A307DA15F3574A019015BED8 + 4A5864DA996E4A9D8D321BE2 + FDD86645CC714B85B8EB2472 + 6FFBD09F24064481BDCEC632 + 6124ED0C9838434A9F309EB9 + 8F029FBAF7AD47028C590920 + 782ABE7106924070BB66F2FA + B376D8EF478B4819BBDA03E5 + 21C56824A0804A99A45C7942 + 068D9ED896A94AF2BF713D23 + 9956D4781A514DAC9087F6A3 + 5CFE18FBE3ED4163BC06E29A + 26BA8B42BF5249398A327A1C + 1921F3201B6C4F5FAC1A4ADF + 60232C08BDF24866A92B8AC2 + 2BAC182050CE474E8B4590CF + 9CCBB7419D6D4811A98D0700 + E6C3CC91C6F24E8DB479B8E1 + 55998C1FB2F14DE5858D9D3A + 2C0DF2DA739C41299DFBDC2F + B75F411132DA4DEF831D134A + 00FA74F1A9B844C0971B3F27 + 4664A96645EA431D8B7D947B + E277C3A8AFC34BACA28B4E3A + E18E3DC5D03D41D195A7748F + 8A2FAE7AEEB24BEFB68233F5 + BE157294E612407DB6D47D02 + BDF34832C2054D93ADCE35CE + 9B8CD4FF735340F0AFAB0D7D + A0F91802F50B41899581E79B + 5FAE1563B53947C1B6EFF64D + 6B8F61281AEE40B19705EFB4 + A9E27EB329B14D3D8964E65D + 02290D0240FD4719BD909556 + 28E7B4EA3CCB41A188767F75 + 747C20958ABB480B81B0121E + 316C7A35DFDE4BB197E706BB + 95FB0D58EE094DCAA6E5BB7B + 406A41651A7B4852B8D1E670 + 3C9CA71753B24B7ABD90EA0F + B1DFE1BB63F64A6486527788 + 1FF7249D3FA7430FB7CCC462 + D0804DA9D1C5422696461AAD + 87B6D3CB7B5D4D699789ABA2 + 938F977EA92046698CA65115 + FAB2736A54DC4C3D83898090 + 42E6B0A1AA23414789BB67A5 + DB74AC156BEB40569A576D32 + CC9E48D74B9D428ABB776918 + 0CC70054E0BD4E3AA5EC3EA0 + 1995B62678FE45A192A5AB24 + 954DC9D05DE743A6B8671E3C + 44F15E5BE8AC46D49803B2C8 + 6B3A51943C3A4205B90C0349 + 0799C3C8DF1C400D9BD56A7E + BB97D9561C0C4C4D80CFCAC5 + 33E7747595C64B30BC8EDD39 + A8A09B6BFF8E4A949004EA58 + DBF23712AD1341D79E414D00 + 236A1BFC99784F36BBAFCC75 + F6084BC1A66C4EBBBD3BE4CD + 81FC7D2E5B3945F9B70EB03C + CA01BF240E594B7FA18334EF + CE580522C4254B50996A6ACF + 649B611218504167A9396F6B + 486AD6BC8E084E4489E950F1 + 90D8685E644542C1811D4676 + 8DB3E706B957420C9D608C32 + D1F816F4B434400AAF4FB7BA + 3A891723BBB64F9EAE0F0C2F + C9988DAD30D24211A0D9B87E + 6608C5AAD046440C9228452D + A9EBB06972CC41BBB12D61A8 + 95623FB4CA774EA0BD57E3F1 + 981CC30D0F674C24826FFC3B + 72B25C6C93604502824DA92F + 3E49E5458CE24350A76EAA4E + 56FC5424BF3847E996EABCFB + 3C3EE7F5AFF74E9F898B6254 + 3C4E26096492433E9FD101C1 + 185F34A7C47140BD85EF19DD + EE7AEBCD93054EDD82A61DDE + A9BD7CA5D2064DEF8B675907 + BF674AC2E31D45F299ED92EC + 8D8B572537864D34AF142F4A + 409BD228482340AEABE268DA + 41091D882DDF45F2ACB211D8 + 08A1EF1724374DAE8DFAF285 + 561C815A44094CDAAEEBB5A2 + 3973542F01BB41F7AD0CA143 + 6F56F0D93172428BAC5778A4 + B58E6846E34C49D38677CD88 + 4FEC1AA9762E404082803DED + FA837F145D5142109E15FEC1 + A40A452120B2495698C18ED9 + B7A20EED90F54FDDB5585132 + 114BD20560BC429DA72A9C5C + 908ABEFAF1504908BBAA135D + D9BD1BFA14A6475FB9AF3DC3 + 3953D48BF0DC4C9EAA633932 + 13D58A1BA64A48858E2E49DD + isa - PBXFileReference - lastKnownFileType - sourcecode.c.h + PBXGroup name - KWWorkarounds.h - path - Classes/KWWorkarounds.h + Core sourceTree <group> - B8BDC4103A3946E4B534AF3B + 63DD62F1AC6E44F0B6D7C245 buildActionMask 2147483647 files - 23862FEDD85643588D2705B2 - 6A37838E74DC4EF0A86D86F6 - 1CB76CE981B04DBC82319348 + 4D334D992B7548B1A71FEAF8 isa PBXFrameworksBuildPhase runOnlyForDeploymentPostprocessing 0 - B91989E56498406E8FB4D35A + 6450F06EA0D3454B89429695 + + fileRef + AB4FA9729F764749ABEC0946 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 649B611218504167A9396F6B includeInIndex 1 @@ -5340,26 +5148,61 @@ lastKnownFileType sourcecode.c.objc name - KWMock.m + RACValueTransformer.m path - Classes/KWMock.m + ReactiveCocoaFramework/ReactiveCocoa/RACValueTransformer.m sourceTree <group> - B99D2982DD364339B4DE196A + 64B285009A40470A8702A7D7 + + fileRef + E833288A46074D58A7682D66 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 64ED7A9099474B44881384AB includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.h + name + KWPendingNode.h path - Pods-SocketRocket-Private.xcconfig + Classes/KWPendingNode.h sourceTree <group> - B9CD9DBAAAE44EDD9F356FC5 + 6510081C66B74A6A9246DD13 + + fileRef + A0F91802F50B41899581E79B + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 65ED8914703C4F9DB0EEE364 + + isa + PBXTargetDependency + target + 9A6B6BFEB33144239FDB185C + targetProxy + 58714FB86CBE459EB6A4961C + + 6608C5AAD046440C9228452D includeInIndex 1 @@ -5368,82 +5211,123 @@ lastKnownFileType sourcecode.c.h name - NSObject+KiwiVerifierAdditions.h + UIBarButtonItem+RACCommandSupport.h path - Classes/NSObject+KiwiVerifierAdditions.h + ReactiveCocoaFramework/ReactiveCocoa/UIBarButtonItem+RACCommandSupport.h sourceTree <group> - B9D24FC54D634AE192495BB8 + 66D8821F15DC4520818FF56B fileRef - 17237A26F10D450C8403F039 + 4E3440AC0456491A971AEAA1 isa PBXBuildFile - BAE78614D5674F4A90C954C9 + 678D2FE8E56C46FDB8C21B16 - fileRef - E7D1FC76CAB84EB9BB536038 + includeInIndex + 1 isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + NSNotificationCenter+RACSupport.h + path + ReactiveCocoaFramework/ReactiveCocoa/NSNotificationCenter+RACSupport.h + sourceTree + <group> - BB750892830E43E9A8AFE0F1 + 67914415DB2C404AAC41F1F5 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc + name + KWConformToProtocolMatcher.m path - Pods-specs-OHHTTPStubs-prefix.pch + Classes/KWConformToProtocolMatcher.m sourceTree <group> - BBC25647CB2646519CFEE44B + 679EAD34611A4E2DA208AEE4 + + fileRef + E7DFBD82C01C4C638B832CC1 + isa + PBXBuildFile + + 67ED98C8A5244A4EB4604FCC + + fileRef + C944708B69214F7C8A9A34E6 + isa + PBXBuildFile + + 6817D07DD0E7455AA376EAFB + + fileRef + 9956D4781A514DAC9087F6A3 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 682EB018E1BB4EF6B105107C fileRef - FCF264B3CF2A49CE981915D1 + 95623FB4CA774EA0BD57E3F1 isa PBXBuildFile - BC643AC9148A4262AFE6A65C + 683C5AD681124911B16AF15A includeInIndex 1 isa PBXFileReference - lastKnownFileType - sourcecode.c.objc name - OHHTTPStubsResponse.m + base64.c path - OHHTTPStubs/OHHTTPStubsResponse.m + SocketRocket/base64.c sourceTree <group> - BCCB43FD08904BA1B7FFA2FF + 68515E4D6C3140BB85AB3C7C includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWMatcherFactory.m + KWAfterAllNode.h path - Classes/KWMatcherFactory.m + Classes/KWAfterAllNode.h sourceTree <group> - BD20224CD09B411A8D593C28 + 68E31BC53C5C42129B8B04BA + + fileRef + FAB2736A54DC4C3D83898090 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 6957B89CE57D4A3C831D9A05 includeInIndex 1 @@ -5452,38 +5336,28 @@ lastKnownFileType sourcecode.c.h name - KWBeIdenticalToMatcher.h + KWProbe.h path - Classes/KWBeIdenticalToMatcher.h + Classes/KWProbe.h sourceTree <group> - BDBE7202A8214393ACF3E379 + 698FC9B1240A4993861F80B8 - buildConfigurationList - 6A7B409622AB4481B3EF2324 - buildPhases - - C19AE52D937F41DE97D1277C - AFF9F31257644A1799C2CB5D - 79BC30C23CDE4DA99835C8E5 - - buildRules - - dependencies - + includeInIndex + 1 isa - PBXNativeTarget + PBXFileReference + lastKnownFileType + sourcecode.c.h name - Pods-SocketRocket - productName - Pods-SocketRocket - productReference - DD4C75E2AE684153A99B3AE3 - productType - com.apple.product-type.library.static + SenTestSuite+KiwiAdditions.h + path + Classes/SenTestSuite+KiwiAdditions.h + sourceTree + <group> - BDBF15DF2B694F6A9C4F3D14 + 6A12D21AF21A40EB969AC736 includeInIndex 1 @@ -5492,118 +5366,45 @@ lastKnownFileType sourcecode.c.h name - KWVerifying.h + KWGenericMatchEvaluator.h path - Classes/KWVerifying.h + Classes/KWGenericMatchEvaluator.h sourceTree <group> - BF956684202046CD96D1D451 + 6A1A9B8DEC6447AFBFFCA440 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - KWAfterEachNode.m + text.xcconfig path - Classes/KWAfterEachNode.m + Pods-specs-OHHTTPStubs-Private.xcconfig sourceTree <group> - C00DBBADBF4D47D689FEF638 + 6B0DF5DC266A4D83A414B8B4 fileRef - 6D85F37568564FD58D7EA465 + FB027FA86D6E44529D4F6E63 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - C05EA06F58B6425E9A04FE02 + 6B175ED3832F4DCD996E0D4E fileRef - 42FACB98211A4A3DAA17F8B2 + 8717440518894A159A279A91 isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - C0A9A5E7219049B1A83AFE0A - - buildConfigurations - - F6F4DCC501A541948A42EBAC - DCEA85F980EF4923944795D7 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - C0F3A5829EA1439493DBCDE9 - - children - - 0EE143C221AC43C3A516AE9F - 7793AD6003B94E13A30057BF - C5E1C0091E0748888141AAD5 - - isa - PBXGroup - name - Reachability - path - Reachability - sourceTree - <group> - - C19AE52D937F41DE97D1277C - - buildActionMask - 2147483647 - files - - 74A95A56C5F94720BBED48D2 - 11253ED06B2941C999067601 - E9A6C856148E455497C7415D - F187827DC29D4F4AB6C61A86 - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - C1E952991CD04A79B97AA363 - - children - - D53A889F73AC4196A1141145 - 64101EE568764E3EBAD29FA8 - 24244F9A273F43F8A4941C0F - BC643AC9148A4262AFE6A65C - 76BF20B794CB429CBC47B8DA - - isa - PBXGroup - name - OHHTTPStubs - path - OHHTTPStubs - sourceTree - <group> - - C1F5B1CDE60B43B280ED49D6 + 6B3A51943C3A4205B90C0349 includeInIndex 1 @@ -5612,28 +5413,35 @@ lastKnownFileType sourcecode.c.h name - KWSymbolicator.h + RACTestScheduler.h path - Classes/KWSymbolicator.h + ReactiveCocoaFramework/ReactiveCocoa/RACTestScheduler.h sourceTree <group> - C2B4892303BC46B29BF170FF + 6B8F61281AEE40B19705EFB4 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWGenericMatchEvaluator.h + RACSignal.m path - Classes/KWGenericMatchEvaluator.h + ReactiveCocoaFramework/ReactiveCocoa/RACSignal.m sourceTree <group> - C370DE5C47884C4592EBA2B9 + 6BF3DDC1D3A04E179120E58D + + fileRef + 92700233ECA8495382C5CAFF + isa + PBXBuildFile + + 6C1E5330BB384D458541D7B3 includeInIndex 1 @@ -5642,35 +5450,82 @@ lastKnownFileType sourcecode.c.objc name - KWBlock.m + NSObject+KiwiVerifierAdditions.m path - Classes/KWBlock.m + Classes/NSObject+KiwiVerifierAdditions.m sourceTree <group> - C4067E08F10A4CED82E5D513 + 6C234832BFBE43F4960ED0FE + + fileRef + D989120ADDC34DA18AC3C8D1 + isa + PBXBuildFile + + 6C54A48F2DB2425EA22492A6 + + fileRef + 0D66EF14253D49378094C744 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 6CAA6E31029C41429D0B0213 + + buildConfigurationList + C6535D5C619441C6BE6FFD43 + buildPhases + + 47DE717D953A49748E480F8D + 6FE01351F54E41039BEAD872 + + buildRules + + dependencies + + 7C9EEF4F5ADD45F69683816D + C883587AFE81481DBA247877 + B446D2563FB2467A878D2F23 + + isa + PBXNativeTarget + name + Pods + productName + Pods + productReference + 3276F9627DB241BFA46C885F + productType + com.apple.product-type.library.static + + 6CDC1066C5C44587BF0B6F4A includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWExample.h + RACBehaviorSubject.m path - Classes/KWExample.h + ReactiveCocoaFramework/ReactiveCocoa/RACBehaviorSubject.m sourceTree <group> - C47B6DDE68B04311A7CE66FA + 6CF88D0ECC604E17BB182568 fileRef - 53371DB950A44FE2B08263D5 + 5A3A8742B8FD4F0D98E23A99 isa PBXBuildFile - C4E290F9834D4B04B8CA5963 + 6D507DE718D4412EB05F3A63 includeInIndex 1 @@ -5679,41 +5534,59 @@ lastKnownFileType sourcecode.c.objc name - KWFutureObject.m + KWBlockRaiseMatcher.m path - Classes/KWFutureObject.m + Classes/KWBlockRaiseMatcher.m sourceTree <group> - C5E1C0091E0748888141AAD5 + 6DC0DC0061AD4F4A8E9E9DAD + + buildConfigurations + + D7778E67F1BF48F2B656AB8E + DF0F0122AD7141369A55E781 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + 6EC913D9CBA5470DBB5D8765 children - 52A573B4E10E4065A98C488D - FE5D2C2CBA92447DAFACD29C - D1A2276FA50A465CA5B89876 - D0E33BE40D58494E94ADDAEE + FD2B3FFD2001497D87091861 + B6F9381577CC47BAAA6635EF + F185F41FBD404EE584D5A391 isa PBXGroup name - Support Files + Reachability + path + Reachability sourceTree - SOURCE_ROOT + <group> - C6B0D3EC209B44DFBDC97945 + 6F0924EABB7F450B8C90AC50 - fileRef - 7FAAEAF439364840A8BF958D + includeInIndex + 1 isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWBeTrueMatcher.m + path + Classes/KWBeTrueMatcher.m + sourceTree + <group> - C73D78A31EED4D29A11362CC + 6F2601DEDFCA412287115CB9 includeInIndex 1 @@ -5721,12 +5594,14 @@ PBXFileReference lastKnownFileType sourcecode.c.objc + name + RACDynamicSignal.m path - Pods-dummy.m + ReactiveCocoaFramework/ReactiveCocoa/RACDynamicSignal.m sourceTree <group> - C762FA623AD54994865A5C20 + 6F4AB966460546989FC86282 includeInIndex 1 @@ -5735,22 +5610,28 @@ lastKnownFileType sourcecode.c.objc name - KWGenericMatchEvaluator.m + KWSpec.m path - Classes/KWGenericMatchEvaluator.m + Classes/KWSpec.m sourceTree <group> - C7AB83A9B09C4209A17BCBA1 + 6F56F0D93172428BAC5778A4 + includeInIndex + 1 isa - PBXTargetDependency - target - BDBE7202A8214393ACF3E379 - targetProxy - 33027B252C0A47288538AB99 + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + UISlider+RACSignalSupport.m + path + ReactiveCocoaFramework/ReactiveCocoa/UISlider+RACSignalSupport.m + sourceTree + <group> - C7C8C44CDEE04061AECD9B3A + 6F6E1C8ED6084B9C881F2C50 includeInIndex 1 @@ -5759,45 +5640,57 @@ lastKnownFileType text.xcconfig path - Pods-specs-OHHTTPStubs-Private.xcconfig + Pods-specs-Kiwi.xcconfig sourceTree <group> - C884E558218C47229522B1F4 + 6F819ABAD996486EB36E1162 - buildConfigurations - - D775C52EE41245E999368F2C - 2CC5E4918BD342F29F909BF0 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release + includeInIndex + 1 isa - XCConfigurationList + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + NSEnumerator+RACSequenceAdditions.h + path + ReactiveCocoaFramework/ReactiveCocoa/NSEnumerator+RACSequenceAdditions.h + sourceTree + <group> - C8AF18EF3E7942D38FE7365C + 6F856A492D884897A8CF6AD1 - children - - F3E4AF03573F4785ADBB9227 - + includeInIndex + 1 isa - PBXGroup + PBXFileReference + lastKnownFileType + sourcecode.c.h name - Frameworks + KWRegisterMatchersNode.h + path + Classes/KWRegisterMatchersNode.h sourceTree <group> - C9D21AC45984496F9B851674 + 6FE01351F54E41039BEAD872 - fileRef - 6AA39E1AFBD54BF480FF6BED + buildActionMask + 2147483647 + files + + E9F8D76845B14C049EFC558B + 0789AB73B2DE41C987B95B02 + 6CF88D0ECC604E17BB182568 + FE150A43DAE840E387566D6E + isa - PBXBuildFile + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 - CA68B81544F441639A6C7FC2 + 6FFBD09F24064481BDCEC632 includeInIndex 1 @@ -5806,25 +5699,28 @@ lastKnownFileType sourcecode.c.h name - KWGenericMatcher.h + RACImmediateScheduler.h path - Classes/KWGenericMatcher.h + ReactiveCocoaFramework/ReactiveCocoa/RACImmediateScheduler.h sourceTree <group> - CA745C3B305B4F4090486E83 + 7119EB174A62410B8D5AFCDC - fileRef - B91989E56498406E8FB4D35A + includeInIndex + 1 isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACDynamicSequence.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACDynamicSequence.h + sourceTree + <group> - CAEC558939694D57B32F724A + 7136BFD4C2A946AFBFA72482 includeInIndex 1 @@ -5833,261 +5729,5306 @@ lastKnownFileType sourcecode.c.h name - KWBeBetweenMatcher.h + KWBeEmptyMatcher.h path - Classes/KWBeBetweenMatcher.h + Classes/KWBeEmptyMatcher.h sourceTree <group> - CB010741BE0540229D83AB23 + 71B4DEFBE95A4E9892A9CF42 + + fileRef + 9CCBB7419D6D4811A98D0700 + isa + PBXBuildFile + + 71DAB1957B6D4A4EBDF21323 + + fileRef + 281FFDE57E78449AA68CF521 + isa + PBXBuildFile + + 7206A42B14C84570BAF28CD1 fileRef - 433CE8D0403C40DE8F788617 + 41091D882DDF45F2ACB211D8 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - CBF38EC28FB941DE9FCEC1A5 + 729964D7AE3A4744B9133890 - children - - 3B0F2646415548AD84525C6F - 1E13303919A74B32946FE490 - 18E0BD8C1A7F416291A75D81 - DFED1B5F445D40889D02EDA6 - 74CFBCE5012B402CAA3703C2 - D15F8CC71CA74ACE98289C43 - + includeInIndex + 1 isa - PBXGroup + PBXFileReference + lastKnownFileType + sourcecode.c.objc name - Pods-specs + NSOrderedSet+RACSequenceAdditions.m + path + ReactiveCocoaFramework/ReactiveCocoa/NSOrderedSet+RACSequenceAdditions.m sourceTree <group> - CBFDB18403534B0E8121C3A5 + 72AAC7B782E14F44968EA42C - buildActionMask - 2147483647 - files + buildConfigurations - 502E0001F2A847BDA37F39C8 - 39825487BC7340BFB0EAF451 - AE50333D66F64B509D588CF8 + BFEFA557881F4EA6A680AE56 + 8A03BA2A4F2444FABA902ABF - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing + defaultConfigurationIsVisible 0 + defaultConfigurationName + Release + isa + XCConfigurationList - CC1B8080648B4590BA8D4B90 + 72B25C6C93604502824DA92F + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + UICollectionViewCell+RACSignalSupport.h + path + ReactiveCocoaFramework/ReactiveCocoa/UICollectionViewCell+RACSignalSupport.h + sourceTree + <group> + + 72F64FEE812F4C6D917EC590 + + containerPortal + 3593DC205A284FA2958F1B80 + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 5BF559B20D784F7096C0D5FF + remoteInfo + Pods-SocketRocket + + 730A28CA166A4F0AAC575BB4 + + fileRef + 5C4F9736830A4E87807D3281 + isa + PBXBuildFile + + 7319B89C4D7746629F7D3852 + + fileRef + F51CAAB6FD074BA78B43DA98 + isa + PBXBuildFile + + 734D8077780941C3A9B588EC + + fileRef + 38EFE9F2FD77459A8F46D694 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 73C23FD72BCB40B98E7E8A46 + + baseConfigurationReference + 2A4E80FD601C41D1B2127F15 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + NO + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-specs-Kiwi-prefix.pch + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 5.0 + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + + isa + XCBuildConfiguration + name + Debug + + 73C5DCE15DF8475A8304D4E2 + + fileRef + 698FC9B1240A4993861F80B8 + isa + PBXBuildFile + + 7445FFDF3B4644C39C64874B + + fileRef + 7C89D36525C44336A06DE90E + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 7454B58EA6AE4BC0B4EFA68D + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RACBlockTrampoline.m + path + ReactiveCocoaFramework/ReactiveCocoa/RACBlockTrampoline.m + sourceTree + <group> + + 747C20958ABB480B81B0121E + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACSignalSequence.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACSignalSequence.h + sourceTree + <group> + + 74ABAC1087974C01B4275B92 + + fileRef + 124EFA25229848358CE27175 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 74E175C05E3C4AC1A565E7A1 + + fileRef + 561C815A44094CDAAEEBB5A2 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 74E86158709945BD83B008FA + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + NSData+SRB64Additions.h + path + SocketRocket/NSData+SRB64Additions.h + sourceTree + <group> + + 750B585F80FE419393C403C7 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + Pods-specs-environment.h + sourceTree + <group> + + 750FF767CA1E4E1CAFCC6D34 + + fileRef + 7D00F35831C94EF9A35BE949 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 754AE8FC406D47B89E37D2A6 + + fileRef + 8E396125B92147E4A5795B30 + isa + PBXBuildFile + + 763851ADE7634BA8BBC34F3E + + fileRef + CE580522C4254B50996A6ACF + isa + PBXBuildFile + + 7654BA79B10446F7AC28FB01 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWAsyncVerifier.h + path + Classes/KWAsyncVerifier.h + sourceTree + <group> + + 7676ACA35D4546ADB316AB2C + + fileRef + 403FED6E37CC4FCA95F1C9B9 + isa + PBXBuildFile + + 76D7FD0A9679464DB30242B8 buildActionMask 2147483647 files - 5E747111A42F4CCCA55D7309 - 44B77F29E6494C38BE38903B - 3C6F530B048D4F21A218ECED - 42F4B24C94CE4905BF683ECF - 2F22EB111ADC42DE87A9457F - 480B01DBD2584CB582F8F9D2 - 2AD396FB74AF4206AA28707C - 8D3739690F854DBCAAD3C1AC - C47B6DDE68B04311A7CE66FA - 39034D5B3F194CD990AC513B - 052A27F9A84547CFA5D6CF71 - D68EEAA06F3847C3A57D7CF4 - F55E5C657C7B41BD92A40A1B - EEB93D97A1BC495291811E2B - B9D24FC54D634AE192495BB8 - A8AA10DCC15A40448D9209FF - 537B6023702D4F4EA0F8B0A5 - 1601B352B2AC4BF39B53901D - 7FE7D751F94245D987F2A50C - DC38DAD1A9004EAD8876A588 - 78373B40FFD84906AEE77B16 - ACB1FA365FCD45CA9E085ACE - 7771EC49085444BC8585347F - B3823E30C7824D488C1413EA - D4F269D024174C919CF18A4B - 9FE35D21B07B43E3A756B83B - 912F556C80EB4A01A9EDE526 - A32CD7A6721747FEB9F85245 - F531FF2C5A244689B884183F - 3F888701D26B4C87ABBC390A - 885D15B67D0F40A790E56D66 - F8B02FB71FA746CA9766C7FA - 4D07028604BA456D84A94849 - 828CE22DF4604CB78E1E8FD6 - 53A025F40F7D4DD5AE8D9984 - A10FEEC17D3E4CA19E4110BF - 14A17D430468457198C4232F - 5EC4AD4EF58C4385AD666A4D - 74E0C855E0CE42F1AA19A4DE - 6C0C6181BBB847338DFFD051 - 4FD45CA3C1EA4E05A610D789 - D2DDEF83B4374922AE828A8F - CCE3090F37D0458996480073 - A1AE93F94AC24445A524226F - 6C6D482A6CD848CBAAB504BE - 287564EBEA034300B6813967 - 3D99FBF576A4430DBF48EDC5 - AC00C8D33F9D4472BB5E0C1B - 0A9A0261E4ED4AE780EF9120 - 0ECF57D8D8614485A25BD387 - DDF2E56BB5D54EE7A479032F - CD756E5A8CBD4406AF32F979 - 10D1A08B264F48288C9D26DB - 10BFE4AD9B4146C1B2D0CFF7 - 309704F18AA041F692B94C5D - 9A27C4CA2DC445D3A9FDDCD5 - AC68232DE8B34CAB8DB66448 - 6CAF3F4E872A48BB90BBA5F9 - 6CADAB6FF7E844F4B0FB86BA - 7D544D0BDE0E4EE99E2DFA84 - 50E25ADAF1BE4AD3B6FFD0B3 - B5622ACFBB874C119F2648AA - DF7AE47998A840D8B6A3FDC5 - 10F30B15A5484BDCA0CBCEC5 - FEDD5642F29D4F11B2DF3E50 - 6F1DD6827A3C4241A139A5D9 - 5AF707C5EEA8429EB99F07AE - D7A8D82465574FB3865D8933 - 1101292040514398BF4DDA64 - 5C3F85CBDE5E4B00B6BB9511 - 9B8D759A200549A3B661779B - 8C7ABCAC9DB14B62A03029D7 - 09210E44857A4D7089A55805 - FF94E7F3CDFF4CA0BBD35AF0 - 4DD3923901304120927407F6 - E2DB16594B514BCBBE0E9408 - E3ABC2DD60654E5DABADECE0 - 5B1EC67926F14E8CBE582734 - 3007A43452214FE19D180C47 - 6513C68576DD40C4ADA9F9F2 - 4780FAA921314985AFBB5680 - 344ECD924B4549C185303BDE - 2DB272D6053C4807BC626964 - 5F71308CB84748969FE89A34 - C9D21AC45984496F9B851674 - 131A18BCC77C4878A5ADDE4B - 3BE44394C038473FB097DD0A - 5CB94DED3E4946F6AA490731 - D72FFFC6003F43CAA12201B6 - F84410D067E945A8BD4EB10E - E1D73F1C3FDB4DD195555A59 - 502F0A07B2C74B239EA14FC7 - AD1C906265314FB2A06595FC - 2FDADB7567BB43D6B2525A5B - 1A405738C62443209E636724 - 1480D3DD81F5482087E03701 + 47E5203D5CD7437D8C21E3D6 + 40AE3943EC5C430989E18A9E + AE1C602CF9FA40F087967EA6 + EC932628EE02412A80844F23 isa - PBXHeadersBuildPhase + PBXSourcesBuildPhase runOnlyForDeploymentPostprocessing 0 - CCE3090F37D0458996480073 + 76F85B1C29E04301A5BF8F14 fileRef - CA68B81544F441639A6C7FC2 + 5FAE1563B53947C1B6EFF64D isa PBXBuildFile - CD756E5A8CBD4406AF32F979 + 77277A4B9AEA443CAF11A53F fileRef - 594FA71E99454011B415C046 + 53ABEB7322CB47E8A0B0E73A isa PBXBuildFile - CD9632B3B8EC456ABE0A7912 + 77419DF5536445DA880C133C - attributes + fileRef + F0D765ED7D064C589B51A629 + isa + PBXBuildFile + settings - LastUpgradeCheck - 0500 + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker - buildConfigurationList - 9A1D182D77104738BCBCDBA2 - compatibilityVersion - Xcode 3.2 - developmentRegion - English - hasScannedForEncodings - 0 + + 774EC2DBF2E44BE1960E37A2 + + children + + C1F0907DC2724A54B83ECD36 + A4FC205D4F2B4689B6FA71FE + isa - PBXProject - knownRegions + PBXGroup + name + no-arc + sourceTree + <group> + + 7797FEDE1E314AC1899C5133 + + fileRef + FA8A8DB0C2CD41B9A8129B59 + isa + PBXBuildFile + + 782704BCEA674892841CB435 + + buildActionMask + 2147483647 + files - en + 820CD20F64D148C5855A4826 + A9872EBEBBE941EAA63D0D0E - mainGroup - 3E01AFF0C90A445E9C3CCE93 - productRefGroup - 8ABD6E6739964423BA924C6A - projectDirPath - - projectReferences + isa + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 782ABE7106924070BB66F2FA + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RACKVOChannel.m + path + ReactiveCocoaFramework/ReactiveCocoa/RACKVOChannel.m + sourceTree + <group> + + 78E53A190E66475F9051B412 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RACCommand.m + path + ReactiveCocoaFramework/ReactiveCocoa/RACCommand.m + sourceTree + <group> + + 791AF00BE6BB466D8C5B6342 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + NSString+RACSupport.h + path + ReactiveCocoaFramework/ReactiveCocoa/NSString+RACSupport.h + sourceTree + <group> + + 7923AD5B65C742A4A35492D5 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWValue.h + path + Classes/KWValue.h + sourceTree + <group> + + 7938CF4C96CF453A97FF67FB + + children + + 68515E4D6C3140BB85AB3C7C + 59A364D3BF8448C795798BCC + F8B581B3C16842C1BCD723EB + 44B18651C8BA4A84AF1F9231 + AF14715DFF9E412191C1FE8E + 34E5A24A6D20477D890F6BC6 + 7654BA79B10446F7AC28FB01 + 0B97546E56F6468492891F50 + 4992576032794EE1BD17268E + B6B83574A7AA454A96FC77B1 + 7136BFD4C2A946AFBFA72482 + 1CD756676E9241DD98F5B3D5 + A7E83C7743A343359D196097 + F0498385EB814E79B174C554 + C71CA4F8073E4B3FA8291299 + F9153CF185DE48B58AA0C7AC + 572B588A0DD649089CF4C327 + FD8E538DAE614D2FA8CC5A65 + 59C7020EE1434185B9029FC8 + 6320E44CA0034C659743C0F0 + 47674E64692242DA80252C38 + 34FC5AE89020407EABAF3874 + 072F4D5A159146A089344825 + 3415BFF012E446EEAD2FB457 + C944708B69214F7C8A9A34E6 + 6F0924EABB7F450B8C90AC50 + BCDF61EB1AE44EAAB66DE8A6 + 1E162C30F4F641AF89E36F33 + 1D301BD0BDEC47FB9FEC0305 + 58E7572CCDFE4E6686064537 + C48BFD32853148A6A50A8EF2 + 01A88CE06E43421E81687AA6 + 5F84070DCCAD4C04995A4A98 + 53F5158A9DE244498DD596D2 + 427A693C18C544E6A9937E08 + 02616A972EBA4ADE98ACA097 + 2D2862D4A2464AECB630CB7E + 0BC5D37D947E4D45A6D41886 + 4452D073C01046AAA29B7225 + 6D507DE718D4412EB05F3A63 + 8B17E5DF82F443A2A3FA0265 + D7EC89AB9CCE4EC59E00F682 + 4E3440AC0456491A971AEAA1 + A9DC09FF24FC4B2193AE7EB9 + 8E396125B92147E4A5795B30 + AFC0D4D407CD4AED96871E36 + F98668C4B8E24C36B5B93224 + 67914415DB2C404AAC41F1F5 + E4844758CBA24367B681A466 + 53771B9206654B4B8D27FE87 + A3D46253B6844726B7197239 + B537597C504E427B9DC86A48 + 0A6AD1F25F17462092E426E6 + 5B006951FFD44E42B883CA93 + 26AFAED530FE4A58A8D326B2 + BE8DDA98BFD24641B4B95C84 + 124EFA25229848358CE27175 + F10E406806C24894BB2E3BB1 + 3CDEF60012744580A52C479A + 2134AA12091647249B92798C + 0D66EF14253D49378094C744 + 9DDE5869C13D4FE68B64CC25 + 28319A8E00654DE9BC25931E + CF48551A1FF743989A2D2E46 + C61A973704EA4BC49CE42E0C + A8B9260B59324479AEC0BCCE + 9CB23E1A1FC441EBA16F7325 + 383D0AD29EEF48EBA03A1B6E + 12C64636FAC14868AE6DDA18 + 617EC9CE5F1E448D9707B41A + 408C107D614240478A48FC45 + C0762976D3384786BF00EE2A + 52F4BD4C69444DB7ADA94143 + 88D4665027FF470685D8FC26 + C3983C3A8F95453CBAAA9D8B + 17E3C735A53048C6A34198FE + 3F493BA72B094F079106227B + 6A12D21AF21A40EB969AC736 + 11CB839B9D3544B4A698BBDC + 90E0ABA829AD44249218F077 + EC145F306FC14C76979D0352 + D989120ADDC34DA18AC3C8D1 + 1E282BE0BD124CDA8E329714 + 38732CFA0E2548E1A75616FF + 7EC28D8C043C4CC7ADDDE4AF + 9270CBB8168D4B8AB915CBB7 + 9A3B190754E1411FBD33CFFF + 8717440518894A159A279A91 + 4E66F6BC25A54F3CAE9C4140 + 281FFDE57E78449AA68CF521 + AF9B2BFF860442A58C9EDBC8 + 53E2E69EC8DE4A029FA08396 + 011E23B0EC0447BAB81117BE + ED9C1A0EB76D4AA883AC26CA + 3F3ACA76990D4EA6B902DD9C + BE8FFCEC4DB04FF587B7A559 + 955EBB8F74B1407D9FAAC2FC + 3C12293BC71B4783AFFDDD47 + E4B9DD62B3994997BB9815EE + BD0A65A9D6C843FB8BC654CE + 2254FD044A9148C288495E76 + 8B6E23560B6F45D8B2BEE903 + 944A7C5DB1034EC681F67DA4 + AC4FE112AC644974ACDBB944 + 3C09F943F7AF4D76A10CA4B3 + ACB20F6105C544A3A99F4E5E + 5E8B01CCEDA44A2ABBA85B7B + 403FED6E37CC4FCA95F1C9B9 + 9D226A849CA440A996DC58EE + DDCB818C66D94E80935E19E2 + 162EACA552DA4EFDA0E61371 + 3061F1C7A2F9406CA98D21F9 + 0F80146C3286492786396D72 + 599721491B8D4DA8A733A7A8 + FFDD53DD78DE404084421DCA + 64ED7A9099474B44881384AB + 38EFE9F2FD77459A8F46D694 + 6957B89CE57D4A3C831D9A05 + 92700233ECA8495382C5CAFF + 1521FFD6F75A40DAB94ACE40 + 2D96B9FF873E4BC990447F8A + 826BD281ABB14A4B9902F1E9 + 187EC25AB69E4B98AD18572F + 0DE359521DB44B8BB58851F0 + 6F856A492D884897A8CF6AD1 + D3A2CB35F034400CB7329D1E + E0EAACA985414E8895420B07 + F0D765ED7D064C589B51A629 + EFD1CADF081E43698370A6EF + E6D66EACAA504DF3B9F8C747 + 9467E9DAA194434484DE371D + 02B72FB1BAE046F9A722326A + 6F4AB966460546989FC86282 + D5E8695940A24B3B84C83D2A + BBADDBBCF9C244FEAC12BD97 + 00EFCF0925324CB8BCAC1DD7 + FB1775ECF5FF4E55AA3342AD + C8C2A08C50104766BF652CA4 + F41F619BD821410BA2EDC64D + 993C884497BD4D88A59F95A0 + 0FE390E54A1D4F9B98A12B75 + 95B149BAEFFF4ED0B0F24B56 + 903B19BDD79F4A958A28E1E1 + 5B7613B22BDB45B3989085B9 + 8FE273511E764916A22F858C + E63CFE8DE5A042FEA0891E41 + A366688035054E879C7300D0 + 7923AD5B65C742A4A35492D5 + 1AF6555748A24DF8A242A662 + 492299289A5046A7B1B722B3 + FCFF00D13F5548E0A2923B9F + 44CEE6C9BD4649AE810916B5 + 909081FECD234CB4B538A63E + FA8A8DB0C2CD41B9A8129B59 + F51CAAB6FD074BA78B43DA98 + B0D42FA1B4A34603826E7B56 + 7BE69C7F20244315B3215BF9 + 37B559C7F9584E118EFCD905 + 0988090F73D54254A25F6DE1 + 0EDD851F5BC24A55B4FB4F5B + 871B340EBECF459A990AAFEC + B9DE1EEF40494B0D8AB9005A + BBFE64AE4E4D48339EE0E211 + 40E0717091884763B9782140 + 58281E00E33A4B5C8FDA44B0 + 194B85AAFB3D454BB50BC1CB + 5FD559D961704045A16F11DF + 3901E1175E2A4B8FA4AEC6F1 + B7A9226B4E094C7681E6AF96 + E1BA65D8FF3140BFA6E8F3EB + 4E5163BF49274B0FAC8F0A42 + 6C1E5330BB384D458541D7B3 + F644B3FD30394D7080BB6846 + AB4FA9729F764749ABEC0946 + 146E9DCCC1514DD283A458EC + 06A552ABA0EC48E6BE53E264 + 698FC9B1240A4993861F80B8 + D625095EC8EA4017A7E4D296 + 7EC9891F8E50455BACCCC8C3 + + isa + PBXGroup + name + Kiwi + path + Kiwi + sourceTree + <group> + + 79A8DF64515B40899AF5D6DD + + fileRef + 90E0ABA829AD44249218F077 + isa + PBXBuildFile + + 7AD738EBF41149E59D8BF6CB + + fileRef + 95FB0D58EE094DCAA6E5BB7B + isa + PBXBuildFile + + 7BDFC80EB86A4DF4B14D99F5 + + fileRef + EE7AEBCD93054EDD82A61DDE + isa + PBXBuildFile + + 7BE69C7F20244315B3215BF9 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + NSInvocation+KiwiAdditions.h + path + Classes/NSInvocation+KiwiAdditions.h + sourceTree + <group> + + 7C12CE55B5F34FBFAFC8CC90 + + fileRef + 6A12D21AF21A40EB969AC736 + isa + PBXBuildFile + + 7C84CA17823A4736BF501805 + + fileRef + 12C64636FAC14868AE6DDA18 + isa + PBXBuildFile + + 7C89D36525C44336A06DE90E + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + OHHTTPStubs.m + path + OHHTTPStubs/OHHTTPStubs.m + sourceTree + <group> + + 7C9EEF4F5ADD45F69683816D + + isa + PBXTargetDependency + target + 063659C829454C82A619E4F8 + targetProxy + 611CF489139649FD937F69F6 + + 7D00F35831C94EF9A35BE949 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + NSDictionary+RACSequenceAdditions.m + path + ReactiveCocoaFramework/ReactiveCocoa/NSDictionary+RACSequenceAdditions.m + sourceTree + <group> + + 7D65B9FB661147F599209F8B + + explicitFileType + archive.ar + includeInIndex + 0 + isa + PBXFileReference + path + libPods-Reachability.a + sourceTree + BUILT_PRODUCTS_DIR + + 7D95568EA4194115BD8D2664 + + fileRef + 95B149BAEFFF4ED0B0F24B56 + isa + PBXBuildFile + + 7E663A34776A4B5793292E74 + + fileRef + ED9C1A0EB76D4AA883AC26CA + isa + PBXBuildFile + + 7EC28D8C043C4CC7ADDDE4AF + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWHaveMatcher.m + path + Classes/KWHaveMatcher.m + sourceTree + <group> + + 7EC9891F8E50455BACCCC8C3 + + children + + 6F6E1C8ED6084B9C881F2C50 + 2A4E80FD601C41D1B2127F15 + 90EC1F5558F043DFB57B267B + 03D93B8DA9224BA0B3822BD8 + + isa + PBXGroup + name + Support Files + sourceTree + SOURCE_ROOT + + 7EF4653CE9CA4DAD9233D367 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RACDisposable.m + path + ReactiveCocoaFramework/ReactiveCocoa/RACDisposable.m + sourceTree + <group> + + 8024D3DAD4AE415E897DC585 + + buildConfigurationList + 6DC0DC0061AD4F4A8E9E9DAD + buildPhases + + 13F2D2D950854BEF917D776C + 50A9715EBDC04E84BC2761B9 + + buildRules - projectRoot - - targets + dependencies - 61FDDB3765BC40D8AD1CA677 - A7D9977497BA4F6AB4A0889F - BDBE7202A8214393ACF3E379 - 8CD183EA2D3E4A6B8D5761CE - 995F1D8F06324A69AC7ADD72 - 8E4EBA6C393D4E669F393B84 + 3A416DFC18E14002A647FD6B + 65ED8914703C4F9DB0EEE364 + isa + PBXNativeTarget + name + Pods-specs + productName + Pods-specs + productReference + 00FE4AA931F74A278E4AE20E + productType + com.apple.product-type.library.static + + 81CA47985A784972958FB7BE + + fileRef + C3983C3A8F95453CBAAA9D8B + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 81FC7D2E5B3945F9B70EB03C + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACUnit.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACUnit.h + sourceTree + <group> + + 820CD20F64D148C5855A4826 + + fileRef + 5A33FFF7CF464F59922BD03B + isa + PBXBuildFile + + 826BD281ABB14A4B9902F1E9 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWRaiseMatcher.m + path + Classes/KWRaiseMatcher.m + sourceTree + <group> + + 8287A6A3F7514C0A81F5B079 + + fileRef + 58E7572CCDFE4E6686064537 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 831677BB9AFD49F2BA6F3853 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACEXTKeyPathCoding.h + path + ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACEXTKeyPathCoding.h + sourceTree + <group> + + 833C2F6E5AD94C1283742A15 + + fileRef + A0B950953DB34E3DBEF78DD0 + isa + PBXBuildFile + + 8382C8089B354842A2A82DDC + + fileRef + 3953D48BF0DC4C9EAA633932 + isa + PBXBuildFile + + 83851F2B55F84F859C3405EE + + fileRef + A3752E073EC845ABBC80F496 + isa + PBXBuildFile + + 84D1954B5074420691A31E3A + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RACEagerSequence.m + path + ReactiveCocoaFramework/ReactiveCocoa/RACEagerSequence.m + sourceTree + <group> + + 85C4A25A7325412788949ADD + + buildActionMask + 2147483647 + files + + 9B8FD4F2BD29451BAF83EBB4 + D4585A635F494531887AC37E + 894CFDA90D634321B8FBE742 + + isa + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 86509165B64741048E14438B + + fileRef + 61C656E59FCD4AA18D3299D3 + isa + PBXBuildFile + + 869476F2CF494705BEDD8907 + + fileRef + BF674AC2E31D45F299ED92EC + isa + PBXBuildFile + + 8711D3E4ED944DCF8D824CDD + + fileRef + 0907D7C22C3F4A0A857F3E38 + isa + PBXBuildFile + + 8717440518894A159A279A91 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWInequalityMatcher.h + path + Classes/KWInequalityMatcher.h + sourceTree + <group> + + 871B340EBECF459A990AAFEC + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + NSMethodSignature+KiwiAdditions.h + path + Classes/NSMethodSignature+KiwiAdditions.h + sourceTree + <group> + + 8766C2B7442040FDAAA372BB + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + NSDictionary+RACSequenceAdditions.h + path + ReactiveCocoaFramework/ReactiveCocoa/NSDictionary+RACSequenceAdditions.h + sourceTree + <group> + + 87B6D3CB7B5D4D699789ABA2 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RACSubject.m + path + ReactiveCocoaFramework/ReactiveCocoa/RACSubject.m + sourceTree + <group> + + 881CE3A4E7724D1E8DB96B23 + + fileRef + DA4953C078B445A3A1767F2A + isa + PBXBuildFile + + 88D4665027FF470685D8FC26 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWFormatter.h + path + Classes/KWFormatter.h + sourceTree + <group> + + 894CFDA90D634321B8FBE742 + + fileRef + 5288BA5DA69B4CECAAD9724D + isa + PBXBuildFile + + 8A03BA2A4F2444FABA902ABF + + baseConfigurationReference + B15B1B188BA84C97ABDC5C42 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + YES + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-SocketRocket-prefix.pch + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 5.0 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + VALIDATE_PRODUCT + YES + + isa + XCBuildConfiguration + name + Release + + 8A2FAE7AEEB24BEFB68233F5 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RACScopedDisposable.m + path + ReactiveCocoaFramework/ReactiveCocoa/RACScopedDisposable.m + sourceTree + <group> + + 8B17E5DF82F443A2A3FA0265 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWCallSite.h + path + Classes/KWCallSite.h + sourceTree + <group> + + 8B6E23560B6F45D8B2BEE903 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWMatchers.h + path + Classes/KWMatchers.h + sourceTree + <group> + + 8CAB75BB4F524ADBB4B7AB7A + + fileRef + 90EC1F5558F043DFB57B267B + isa + PBXBuildFile + + 8CD93E75662D4FA9A2E90455 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RACErrorSignal.m + path + ReactiveCocoaFramework/ReactiveCocoa/RACErrorSignal.m + sourceTree + <group> + + 8D8B572537864D34AF142F4A + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + UIGestureRecognizer+RACSignalSupport.m + path + ReactiveCocoaFramework/ReactiveCocoa/UIGestureRecognizer+RACSignalSupport.m + sourceTree + <group> + + 8DB056FB13464533893CA986 + + fileRef + 5F84070DCCAD4C04995A4A98 + isa + PBXBuildFile + + 8DB3E706B957420C9D608C32 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + UIActionSheet+RACSignalSupport.h + path + ReactiveCocoaFramework/ReactiveCocoa/UIActionSheet+RACSignalSupport.h + sourceTree + <group> + + 8E0EA4010B7C4465A227D014 + + fileRef + 146E9DCCC1514DD283A458EC + isa + PBXBuildFile + + 8E3677E5E5B54620893C07EC + + fileRef + DDCB818C66D94E80935E19E2 + isa + PBXBuildFile + + 8E396125B92147E4A5795B30 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWChangeMatcher.h + path + Classes/KWChangeMatcher.h + sourceTree + <group> + + 8E7F7F35B1554583A0B0FEC8 + + fileRef + 6957B89CE57D4A3C831D9A05 + isa + PBXBuildFile + + 8EB43961DFF846BFAED288C1 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACCommand.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACCommand.h + sourceTree + <group> + + 8F029FBAF7AD47028C590920 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACKVOChannel.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACKVOChannel.h + sourceTree + <group> + + 8FE273511E764916A22F858C + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWTestCase.m + path + Classes/KWTestCase.m + sourceTree + <group> + + 900257F04C1645AE9BA25614 + + fileRef + 5831C3AECDA540AB8D4F1C0E + isa + PBXBuildFile + + 9007BF0487A94BC1B21E1E8C + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + NSObject+RACDescription.m + path + ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACDescription.m + sourceTree + <group> + + 903B19BDD79F4A958A28E1E1 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWSymbolicator.m + path + Classes/KWSymbolicator.m + sourceTree + <group> + + 908ABEFAF1504908BBAA135D + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + UITextField+RACSignalSupport.h + path + ReactiveCocoaFramework/ReactiveCocoa/UITextField+RACSignalSupport.h + sourceTree + <group> + + 909081FECD234CB4B538A63E + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + Kiwi.h + path + Classes/Kiwi.h + sourceTree + <group> + + 90D8685E644542C1811D4676 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + ReactiveCocoa.h + path + ReactiveCocoaFramework/ReactiveCocoa/ReactiveCocoa.h + sourceTree + <group> + + 90E0ABA829AD44249218F077 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWGenericMatcher.h + path + Classes/KWGenericMatcher.h + sourceTree + <group> + + 90E935556B1C4FA5B2B3113C + + fileRef + E1BA65D8FF3140BFA6E8F3EB + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 90EC1F5558F043DFB57B267B + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + Pods-specs-Kiwi-dummy.m + sourceTree + <group> + + 90F0880D6A8D4882B20D487F + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + NSString+RACKeyPathUtilities.m + path + ReactiveCocoaFramework/ReactiveCocoa/NSString+RACKeyPathUtilities.m + sourceTree + <group> + + 91AC718C8A544A6AADA9AF60 + + fileRef + 729964D7AE3A4744B9133890 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 91B27A47911E43088E99DA12 + + fileRef + 02B72FB1BAE046F9A722326A + isa + PBXBuildFile + + 92700233ECA8495382C5CAFF + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWProbePoller.h + path + Classes/KWProbePoller.h + sourceTree + <group> + + 9270CBB8168D4B8AB915CBB7 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWHaveValueMatcher.h + path + Classes/KWHaveValueMatcher.h + sourceTree + <group> + + 92AD94B23697460BB219BBE8 + + fileRef + 3BBBEF9DDF2948B6BB1DAF1D + isa + PBXBuildFile + + 92BA54DC718C4D67BDCE212D + + fileRef + 8766C2B7442040FDAAA372BB + isa + PBXBuildFile + + 930D71AB929347F887A00BDC + + fileRef + 06136C9D62C147BFAFF3A6E7 + isa + PBXBuildFile + + 931A5F5361714315A2043146 + + fileRef + 1E282BE0BD124CDA8E329714 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 936A312AAF8340EFB01B8090 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + Pods-ReactiveCocoa-prefix.pch + sourceTree + <group> + + 938F977EA92046698CA65115 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACSubscriber.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACSubscriber.h + sourceTree + <group> + + 942CAEB072AB43CEA819CE6D + + buildConfigurations + + DDC04031A201412DB7A7974B + A1B6097FFF6F467C88D23B66 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + 94342C5935474561A3C57D3B + + fileRef + BE8DDA98BFD24641B4B95C84 + isa + PBXBuildFile + + 944A7C5DB1034EC681F67DA4 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWMatchers.m + path + Classes/KWMatchers.m + sourceTree + <group> + + 946628973A29435FB44F6AAB + + fileRef + 53771B9206654B4B8D27FE87 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 9467E9DAA194434484DE371D + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWRespondToSelectorMatcher.m + path + Classes/KWRespondToSelectorMatcher.m + sourceTree + <group> + + 954DC9D05DE743A6B8671E3C + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACTargetQueueScheduler.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACTargetQueueScheduler.h + sourceTree + <group> + + 955EBB8F74B1407D9FAAC2FC + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWMatchVerifier.m + path + Classes/KWMatchVerifier.m + sourceTree + <group> + + 95623FB4CA774EA0BD57E3F1 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + UIButton+RACCommandSupport.h + path + ReactiveCocoaFramework/ReactiveCocoa/UIButton+RACCommandSupport.h + sourceTree + <group> + + 95B149BAEFFF4ED0B0F24B56 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWSymbolicator.h + path + Classes/KWSymbolicator.h + sourceTree + <group> + + 95C5BCDFA2E6414AB7453F81 + + fileRef + 2BAC182050CE474E8B4590CF + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 95FB0D58EE094DCAA6E5BB7B + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACStream.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACStream.h + sourceTree + <group> + + 960CFB3A34494C4AA012FBA9 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACArraySequence.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACArraySequence.h + sourceTree + <group> + + 966169B31B484044BFC62A46 + + fileRef + 02290D0240FD4719BD909556 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 96A6E6D8132140368F900950 + + fileRef + A9DC09FF24FC4B2193AE7EB9 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 96BDA716D2A244FDB6F49170 + + fileRef + D0804DA9D1C5422696461AAD + isa + PBXBuildFile + + 9780E584FCF24B219AE9BB45 + + fileRef + B9DE1EEF40494B0D8AB9005A + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + 97ADA9EFC603451FB00F0C11 + + fileRef + 5E8B01CCEDA44A2ABBA85B7B + isa + PBXBuildFile + + 97DA9C7A0C4C411BAE60F350 + + fileRef + 88D4665027FF470685D8FC26 + isa + PBXBuildFile + + 981CC30D0F674C24826FFC3B + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + UIButton+RACCommandSupport.m + path + ReactiveCocoaFramework/ReactiveCocoa/UIButton+RACCommandSupport.m + sourceTree + <group> + + 987E52EA6EAA4022B221B5D0 + + fileRef + 9DDE5869C13D4FE68B64CC25 + isa + PBXBuildFile + + 993C884497BD4D88A59F95A0 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWStub.h + path + Classes/KWStub.h + sourceTree + <group> + + 9956D4781A514DAC9087F6A3 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RACMulticastConnection.m + path + ReactiveCocoaFramework/ReactiveCocoa/RACMulticastConnection.m + sourceTree + <group> + + 99BAA8247D9646309F778D21 + + fileRef + F10E406806C24894BB2E3BB1 + isa + PBXBuildFile + + 9A3B190754E1411FBD33CFFF + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWHaveValueMatcher.m + path + Classes/KWHaveValueMatcher.m + sourceTree + <group> + + 9A6810B3BD934EAFB751AA91 + + buildActionMask + 2147483647 + files + + C4D9B00D69AE4D1FA0358AA1 + B5606C35E4C346C9BE2A7DE7 + 354DC08775164A0891005588 + 2942129614DF4666B230114C + 5880585F20314BAD81399FD4 + 0CF8701D50C54959BEE4367B + 5F5A715093444895AF74EB71 + 05271C08C02944D996DA8CD3 + 19727C1C40F943B4BEFBB132 + EDACDFB641CC4864BFA0E339 + E4F3DE4E95CF48A1A09BCC0F + 0128DC02ACC44D11B943F116 + 67ED98C8A5244A4EB4604FCC + B3ED38A7262247DAA20B28CF + CF033EB4DA914E0E81452BA8 + 13A38F574BB84912BE400C64 + 8DB056FB13464533893CA986 + 2281F279AAEE4A6C8AB47D32 + F1EC465D2D3B45A5921C220F + A41B3A021DF649B38FD7CD24 + 62FA9CCA7C4B42BA924FA4AB + 66D8821F15DC4520818FF56B + 754AE8FC406D47B89E37D2A6 + 0D8ED76004544CAA96154FCD + B1F7BF7B9B09468298F299F6 + C4AE918F504C459C85504032 + 00CDD16060B34B2AA072743A + 193015FEE23D4287A657FF8B + 94342C5935474561A3C57D3B + 99BAA8247D9646309F778D21 + 2A47736C24BE4F8E8F1B20C6 + 987E52EA6EAA4022B221B5D0 + 559BCBD1DB56401FBC55A38A + 1C2131814E3B49828C4D2392 + 1A70152110024A5590C0499D + C770BDBDE81140FD9D520C62 + 7C84CA17823A4736BF501805 + 083791F0A7264D4BBC61B52D + 1B198C97EA3145B8A104BC89 + 97DA9C7A0C4C411BAE60F350 + A525DED9BE284D13969BBD4E + 7C12CE55B5F34FBFAFC8CC90 + 79A8DF64515B40899AF5D6DD + 6C234832BFBE43F4960ED0FE + C939BFFD32D34B6EB5A5C575 + 1E16689B410E4F709845351C + 6B175ED3832F4DCD996E0D4E + 71DAB1957B6D4A4EBDF21323 + D8BBA1F2E43142068B8CBE03 + 7E663A34776A4B5793292E74 + 1A240A713E5E4D1EB0E25E16 + 2FB0F052111848489578A9CA + 9B4385C25EA046C19C150E5A + 180A4600FC7E44CCB1B33763 + 0E348C8D94804EBF9D4ED132 + 4F2C8771A68749D1AA5D2CD5 + 97ADA9EFC603451FB00F0C11 + 7676ACA35D4546ADB316AB2C + 8E3677E5E5B54620893C07EC + 2BDC4B9365114C1CB482BBC3 + F5CFD781BEF444B6949FC7C5 + F6E44FF9A81B452C975480CF + 8E7F7F35B1554583A0B0FEC8 + 6BF3DDC1D3A04E179120E58D + EC2DD60EDB874FB28EC57DE4 + 146E9B1E965E48FD9D306DC7 + A60F73858D44496992D3F0E1 + AC6165FFE10D4632A2AB5877 + A6397FB870A340EAB4A41ABC + B5EF75B97B9849C2A2038A52 + 91B27A47911E43088E99DA12 + 6225B56BD454455692227279 + 2CFE4A6340084832BE69FF43 + D7F51626EC8E4965A37F858F + 625EF39BAD87424AA0259E42 + 7D95568EA4194115BD8D2664 + B4308D6337934120ADB0BC6B + F30DFB11BD19430ABFCF13AD + 4BDF936788434A0892821DED + 36A28D6DBF4B4D0E8D4AA412 + DF3AEBAB6816496490375F20 + 337A474C4A5B4B4F97F82AE5 + 7797FEDE1E314AC1899C5133 + 7319B89C4D7746629F7D3852 + 4B7F9EFB25E148C980FB134D + 097EE9E3EA3A4CD8AF8D24A1 + 2541CF606A9C407BA6DAEC51 + A2FE380979D34DB4865224F8 + A4DA403C3A5E4E76824C5F0B + 61C1B7F4E62645D28501B3D7 + 1C14D87E220A4101A616F8F7 + B13D304F94624888B958244E + FE28E3D08FC6468AB5DAF810 + A44DF493B30D4A0E9E756E99 + 8E0EA4010B7C4465A227D014 + 73C5DCE15DF8475A8304D4E2 + + isa + PBXHeadersBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 9A6B6BFEB33144239FDB185C + + buildConfigurationList + FD7B04E88B7A4AABAFC34457 + buildPhases + + F0362A8F03EC496896397CB3 + FA04F25CCB9948EBACABB827 + CD6E0D7BEAD1496C931EEC8D + + buildRules + + dependencies + + isa + PBXNativeTarget + name + Pods-specs-OHHTTPStubs + productName + Pods-specs-OHHTTPStubs + productReference + 4514A9907D4E427BA03994A3 + productType + com.apple.product-type.library.static + + 9AA2D43948A44A738CFBC68E + + fileRef + B376D8EF478B4819BBDA03E5 + isa + PBXBuildFile + + 9B4385C25EA046C19C150E5A + + fileRef + BD0A65A9D6C843FB8BC654CE + isa + PBXBuildFile + + 9B8CD4FF735340F0AFAB0D7D + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACSerialDisposable.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACSerialDisposable.h + sourceTree + <group> + + 9B8FD4F2BD29451BAF83EBB4 + + fileRef + 322CB620A759410CA14308CA + isa + PBXBuildFile + + 9CB23E1A1FC441EBA16F7325 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWExampleSuite.h + path + Classes/KWExampleSuite.h + sourceTree + <group> + + 9CB48D4C3663408C888BD73A + + fileRef + 649B611218504167A9396F6B + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 9CCBB7419D6D4811A98D0700 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACQueueScheduler+Subclass.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACQueueScheduler+Subclass.h + sourceTree + <group> + + 9CDF01FCBAFC4847A01FF6DA + + fileRef + 6F56F0D93172428BAC5778A4 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 9D226A849CA440A996DC58EE + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWMessageTracker.m + path + Classes/KWMessageTracker.m + sourceTree + <group> + + 9DDE5869C13D4FE68B64CC25 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWExampleGroupBuilder.h + path + Classes/KWExampleGroupBuilder.h + sourceTree + <group> + + 9DDECA2D633043648676A1FD + + fileRef + C83C3A6C3B574E7A9C531CA5 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 9EDFB43655B149AFA573FE6E + + fileRef + D9BD1BFA14A6475FB9AF3DC3 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 9F497F4B641743868D8F7742 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + Pods-specs-OHHTTPStubs-dummy.m + sourceTree + <group> + + A06199B41C7A42869DBA4850 + + buildConfigurations + + 3FB8AD5CC6BC4FBFB3A96690 + DE718AF4DB0346F29B1624EA + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + A0B950953DB34E3DBEF78DD0 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACDelegateProxy.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACDelegateProxy.h + sourceTree + <group> + + A0CE69363211446C86C94F98 + + children + + 3276F9627DB241BFA46C885F + 7D65B9FB661147F599209F8B + 5A3A8742B8FD4F0D98E23A99 + 354688651EC347BEA7E72F0E + 00FE4AA931F74A278E4AE20E + 47C95EEEB43D479E9D0FB828 + 4514A9907D4E427BA03994A3 + + isa + PBXGroup + name + Products + sourceTree + <group> + + A0F91802F50B41899581E79B + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RACSerialDisposable.m + path + ReactiveCocoaFramework/ReactiveCocoa/RACSerialDisposable.m + sourceTree + <group> + + A1925C2AD6754CD6A6AFC27B + + fileRef + E6C3CC91C6F24E8DB479B8E1 + isa + PBXBuildFile + + A1B6097FFF6F467C88D23B66 + + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + CLANG_CXX_LANGUAGE_STANDARD + gnu++0x + CLANG_CXX_LIBRARY + libc++ + CLANG_ENABLE_MODULES + YES + CLANG_ENABLE_OBJC_ARC + NO + CLANG_WARN_BOOL_CONVERSION + YES + CLANG_WARN_CONSTANT_CONVERSION + YES + CLANG_WARN_DIRECT_OBJC_ISA_USAGE + YES_ERROR + CLANG_WARN_EMPTY_BODY + YES + CLANG_WARN_ENUM_CONVERSION + YES + CLANG_WARN_INT_CONVERSION + YES + CLANG_WARN_OBJC_ROOT_CLASS + YES_ERROR + COPY_PHASE_STRIP + NO + ENABLE_NS_ASSERTIONS + NO + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_WARN_64_TO_32_BIT_CONVERSION + YES + GCC_WARN_ABOUT_RETURN_TYPE + YES_ERROR + GCC_WARN_UNDECLARED_SELECTOR + YES + GCC_WARN_UNINITIALIZED_AUTOS + YES + GCC_WARN_UNUSED_FUNCTION + YES + GCC_WARN_UNUSED_VARIABLE + YES + IPHONEOS_DEPLOYMENT_TARGET + 5.0 + STRIP_INSTALLED_PRODUCT + NO + VALIDATE_PRODUCT + YES + + isa + XCBuildConfiguration + name + Release + + A1E36E97FC594AD093E5114F + + children + + AAC1F723C56E48E3A41EAC5F + 0ED4A9E80328433CB1DD4D8B + DE29C5B4F3024924AA4FB432 + 4A9FAE110505455A84BC3938 + 750B585F80FE419393C403C7 + F98E8E77A2F54437B2BA55EF + + isa + PBXGroup + name + Pods-specs + sourceTree + <group> + + A20F3B4EB0D4474CA1C68502 + + baseConfigurationReference + 1E2A4BFD472046B0A9DA68DC + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + YES + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 5.0 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + VALIDATE_PRODUCT + YES + + isa + XCBuildConfiguration + name + Release + + A244D89BC87345519751FD9F + + fileRef + 617EC9CE5F1E448D9707B41A + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + A274A8CF4F2F4D65BA7F41DB + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + NSObject+RACPropertySubscribing.h + path + ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACPropertySubscribing.h + sourceTree + <group> + + A2FE380979D34DB4865224F8 + + fileRef + 871B340EBECF459A990AAFEC + isa + PBXBuildFile + + A305D6B310EB4378985BA67B + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + NSObject+RACPropertySubscribing.m + path + ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACPropertySubscribing.m + sourceTree + <group> + + A307DA15F3574A019015BED8 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RACEvent.m + path + ReactiveCocoaFramework/ReactiveCocoa/RACEvent.m + sourceTree + <group> + + A366688035054E879C7300D0 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWUserDefinedMatcher.m + path + Classes/KWUserDefinedMatcher.m + sourceTree + <group> + + A3752E073EC845ABBC80F496 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACEXTScope.h + path + ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACEXTScope.h + sourceTree + <group> + + A3D46253B6844726B7197239 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWContainStringMatcher.h + path + Classes/KWContainStringMatcher.h + sourceTree + <group> + + A3F969241BD8420C9E169A55 + + containerPortal + 3593DC205A284FA2958F1B80 + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 0402D00C4DFB42199217841D + remoteInfo + Pods-ReactiveCocoa + + A40A452120B2495698C18ED9 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + UISwitch+RACSignalSupport.m + path + ReactiveCocoaFramework/ReactiveCocoa/UISwitch+RACSignalSupport.m + sourceTree + <group> + + A41B3A021DF649B38FD7CD24 + + fileRef + 4452D073C01046AAA29B7225 + isa + PBXBuildFile + + A44DF493B30D4A0E9E756E99 + + fileRef + F644B3FD30394D7080BB6846 + isa + PBXBuildFile + + A4DA403C3A5E4E76824C5F0B + + fileRef + BBFE64AE4E4D48339EE0E211 + isa + PBXBuildFile + + A4FC205D4F2B4689B6FA71FE + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RACObjCRuntime.m + path + ReactiveCocoaFramework/ReactiveCocoa/RACObjCRuntime.m + sourceTree + <group> + + A525DED9BE284D13969BBD4E + + fileRef + 17E3C735A53048C6A34198FE + isa + PBXBuildFile + + A5424E36D05D4656B5F480D5 + + isa + PBXFileReference + lastKnownFileType + wrapper.framework + name + SenTestingKit.framework + path + Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/SenTestingKit.framework + sourceTree + DEVELOPER_DIR + + A58892B2A24844E0815CC40F + + fileRef + 168903ABF9454B78954156F5 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + A60F73858D44496992D3F0E1 + + fileRef + 6F856A492D884897A8CF6AD1 + isa + PBXBuildFile + + A61DC31A04CF4A2588EA1702 + + fileRef + A305D6B310EB4378985BA67B + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + A6397FB870A340EAB4A41ABC + + fileRef + EFD1CADF081E43698370A6EF + isa + PBXBuildFile + + A74E170D326840CDA12E786A + + fileRef + 0549192BBCB34EA58BCF73C4 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + A7E83C7743A343359D196097 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWBeIdenticalToMatcher.h + path + Classes/KWBeIdenticalToMatcher.h + sourceTree + <group> + + A8A09B6BFF8E4A949004EA58 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACTupleSequence.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACTupleSequence.h + sourceTree + <group> + + A8B9260B59324479AEC0BCCE + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWExampleNodeVisitor.h + path + Classes/KWExampleNodeVisitor.h + sourceTree + <group> + + A9872EBEBBE941EAA63D0D0E + + fileRef + A5424E36D05D4656B5F480D5 + isa + PBXBuildFile + + A9BD7CA5D2064DEF8B675907 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + UIDatePicker+RACSignalSupport.m + path + ReactiveCocoaFramework/ReactiveCocoa/UIDatePicker+RACSignalSupport.m + sourceTree + <group> + + A9D6B7EAD3C646EAA11E163B + + fileRef + 34FAF0DA2F954738B5CC0BF2 + isa + PBXBuildFile + + A9DC09FF24FC4B2193AE7EB9 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWCaptureSpy.m + path + Classes/KWCaptureSpy.m + sourceTree + <group> + + A9E27EB329B14D3D8964E65D + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACSignal+Operations.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACSignal+Operations.h + sourceTree + <group> + + A9EBB06972CC41BBB12D61A8 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + UIBarButtonItem+RACCommandSupport.m + path + ReactiveCocoaFramework/ReactiveCocoa/UIBarButtonItem+RACCommandSupport.m + sourceTree + <group> + + AA4A6D90EDF7415FAE29763F + + fileRef + 0CC70054E0BD4E3AA5EC3EA0 + isa + PBXBuildFile + + AAC1F723C56E48E3A41EAC5F + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-specs.xcconfig + sourceTree + <group> + + AAD9CDA2FCED49969AAD85CC + + fileRef + E277C3A8AFC34BACA28B4E3A + isa + PBXBuildFile + + AB24FC1CEF824B8C9858D296 + + fileRef + E3BD340A829E4D19AAA4D5BF + isa + PBXBuildFile + + AB34F18E9BB94DD3BCA7942C + + buildConfigurations + + 73C23FD72BCB40B98E7E8A46 + 041407CDD2064CDFA000AC22 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + AB4FA9729F764749ABEC0946 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + NSProxy+KiwiVerifierAdditions.m + path + Classes/NSProxy+KiwiVerifierAdditions.m + sourceTree + <group> + + AC4FE112AC644974ACDBB944 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWMatching.h + path + Classes/KWMatching.h + sourceTree + <group> + + AC6165FFE10D4632A2AB5877 + + fileRef + E0EAACA985414E8895420B07 + isa + PBXBuildFile + + ACB20F6105C544A3A99F4E5E + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWMessagePattern.m + path + Classes/KWMessagePattern.m + sourceTree + <group> + + ACE1A53016D348D49978BA2A + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + NSObject+RACDescription.h + path + ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACDescription.h + sourceTree + <group> + + ACF57E91F4FE4C6CB3DDDA57 + + fileRef + 1921F3201B6C4F5FAC1A4ADF + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + AD9C55C4AED847FBBD16317D + + fileRef + 6F4AB966460546989FC86282 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + ADC8EF08711544E8803250E0 + + fileRef + B58E6846E34C49D38677CD88 + isa + PBXBuildFile + + AE1AB8F8C0EA4935A1DEBA83 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + NSString+RACSequenceAdditions.h + path + ReactiveCocoaFramework/ReactiveCocoa/NSString+RACSequenceAdditions.h + sourceTree + <group> + + AE1C602CF9FA40F087967EA6 + + fileRef + 10C30819C67B48638ACFB8F5 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + AE2CF56CF5314431AA2ED95E + + fileRef + BB97D9561C0C4C4D80CFCAC5 + isa + PBXBuildFile + + AE5BD0C78D984D5682163C03 + + buildActionMask + 2147483647 + files + + 679EAD34611A4E2DA208AEE4 + 6031188552FE4DACAE15BB72 + 92BA54DC718C4D67BDCE212D + 284CECC9F5A74ACE97DF1B29 + DEC7240806744FEFAAC19B2F + 8711D3E4ED944DCF8D824CDD + D8D22AB721DC4340ABB66208 + DBCAAAD6BAB6426E919DDE1C + D296151F13534C0E9873234C + CF3283261ECD438CA5724AAB + 730A28CA166A4F0AAC575BB4 + EAFAC05DAD3D4182872BB69E + 900257F04C1645AE9BA25614 + 77277A4B9AEA443CAF11A53F + A9D6B7EAD3C646EAA11E163B + 380887868DD5496990E34F1E + BA2FD68370874A9BBA58677E + C52FB3F1BC8C409697AC6643 + 86509165B64741048E14438B + D81605377E154FE8B3961D9C + 3CFD6A8ED87F44E99853BDB2 + 881CE3A4E7724D1E8DB96B23 + 482C8EFFDED24F2CAD8B0965 + AB24FC1CEF824B8C9858D296 + F2667EAC158A4C359374BCF8 + B6795717E61340F29D2C4BD2 + 833C2F6E5AD94C1283742A15 + 2A8FBEBD92944C319974F855 + C6EEAA2613CD4E119DC4D9A6 + 3AD4C381408243A8B3BA611B + 47FD1518AF45428A9939E291 + 92AD94B23697460BB219BBE8 + 83851F2B55F84F859C3405EE + 930D71AB929347F887A00BDC + 08521C9395CD4D08BECBBEB5 + 23A6E27104D64EE7972C0B3D + 4B660BFE5D0C4427ACE40C27 + C1AFA49AD9704754B4743B97 + BA6C1208B4C74E7BAC64AF8B + F0F9076E0C5143FE9497D321 + C28B9753ECA84EDFB9E5018C + 9AA2D43948A44A738CFBC68E + F794F245C1984FEB941987EE + 283BB8C504AF48B3A7185986 + 167F3C8E1D3143A1873C1E1B + 5B6F4F5FE4074CF1B8D51958 + 71B4DEFBE95A4E9892A9CF42 + FE94860AA5B94D758E6F2269 + A1925C2AD6754CD6A6AFC27B + B722862C0D2942209E084EAC + AAD9CDA2FCED49969AAD85CC + 018A4422F095460791593192 + 4C901C823ED44BF7A8C52366 + D6C432AD0AC74DC3B0BDF917 + F3C77F8A27A74243ADEEF3B6 + 561301809AC7426A83DF9803 + 76F85B1C29E04301A5BF8F14 + 3DBE40BB899B44738676B57D + 1A4CC88A702447E292FE2889 + 7AD738EBF41149E59D8BF6CB + F5B9E55E4AFD487AB65C7B50 + 96BDA716D2A244FDB6F49170 + 26330589E89147A5ADBE77F7 + 26EA2D348DF140A18732EF3F + 25FDD8BAE1874297B26ACE9B + AA4A6D90EDF7415FAE29763F + 57E430CB18DD4655AD697EE7 + F70488463AAF421083C580C1 + AE2CF56CF5314431AA2ED95E + 45CEA3C317384210950AFFD4 + B8A39F25DDDF4169A5C317C5 + E84E89ACC776469DA2612F04 + 763851ADE7634BA8BBC34F3E + 5F2F215588894C228A278E7A + E57C7649501E4A0DA2F8DA9D + BB014BDDD1474464BABCA402 + 33533C123DCB41A394181B46 + 49ECE25D2A0D48DF975523B9 + 682EB018E1BB4EF6B105107C + 4B21083B56F04631AE91623D + D458CDDBB9864735A3BE8E97 + 041E58F497624808B4848ED3 + 7BDFC80EB86A4DF4B14D99F5 + 869476F2CF494705BEDD8907 + DD0F177A494E446EB0EE0822 + 4AA3752E415648629006D697 + 312E4D9DE5C64FE092E8F0C3 + ADC8EF08711544E8803250E0 + 28601DC3D49B493D95A03317 + 60734572E744430B8D98C649 + D4A82211A16C429CAD8F04A4 + 8382C8089B354842A2A82DDC + + isa + PBXHeadersBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + AF14715DFF9E412191C1FE8E + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWAny.h + path + Classes/KWAny.h + sourceTree + <group> + + AF9B2BFF860442A58C9EDBC8 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWIntercept.m + path + Classes/KWIntercept.m + sourceTree + <group> + + AF9B98EE246D439EB9CE02A5 + + fileRef + 6F0924EABB7F450B8C90AC50 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + AFC0D4D407CD4AED96871E36 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWChangeMatcher.m + path + Classes/KWChangeMatcher.m + sourceTree + <group> + + B0194545625B4B2594B790D1 + + fileRef + 162EACA552DA4EFDA0E61371 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + B0CF1BACCB4C40B7AB8801DD + + fileRef + BBADDBBCF9C244FEAC12BD97 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + B0D42FA1B4A34603826E7B56 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KiwiMacros.h + path + Classes/KiwiMacros.h + sourceTree + <group> + + B0D59693D7DE4F02A9DF033E + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + base64.h + path + SocketRocket/base64.h + sourceTree + <group> + + B13D304F94624888B958244E + + fileRef + B7A9226B4E094C7681E6AF96 + isa + PBXBuildFile + + B15B1B188BA84C97ABDC5C42 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-SocketRocket-Private.xcconfig + sourceTree + <group> + + B1D2BC0EA6E64B0F9F4631CD + + fileRef + FB1775ECF5FF4E55AA3342AD + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + B1DFE1BB63F64A6486527788 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACStringSequence.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACStringSequence.h + sourceTree + <group> + + B1F7BF7B9B09468298F299F6 + + fileRef + E4844758CBA24367B681A466 + isa + PBXBuildFile + + B206298413FF4A01865FDB24 + + fileRef + 2BC9C86526404E9997BD3574 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + B376D8EF478B4819BBDA03E5 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACKVOTrampoline.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACKVOTrampoline.h + sourceTree + <group> + + B3ED38A7262247DAA20B28CF + + fileRef + BCDF61EB1AE44EAAB66DE8A6 + isa + PBXBuildFile + + B4308D6337934120ADB0BC6B + + fileRef + 5B7613B22BDB45B3989085B9 + isa + PBXBuildFile + + B446D2563FB2467A878D2F23 + + isa + PBXTargetDependency + target + 5BF559B20D784F7096C0D5FF + targetProxy + 72F64FEE812F4C6D917EC590 + + B469F85D03D8489088863C52 + + fileRef + 316C7A35DFDE4BB197E706BB + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + B537597C504E427B9DC86A48 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWContainStringMatcher.m + path + Classes/KWContainStringMatcher.m + sourceTree + <group> + + B5606C35E4C346C9BE2A7DE7 + + fileRef + F8B581B3C16842C1BCD723EB + isa + PBXBuildFile + + B58E6846E34C49D38677CD88 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + UIStepper+RACSignalSupport.h + path + ReactiveCocoaFramework/ReactiveCocoa/UIStepper+RACSignalSupport.h + sourceTree + <group> + + B5EF75B97B9849C2A2038A52 + + fileRef + E6D66EACAA504DF3B9F8C747 + isa + PBXBuildFile + + B6795717E61340F29D2C4BD2 + + fileRef + D796CCB4E88140E5A8A0B529 + isa + PBXBuildFile + + B6B83574A7AA454A96FC77B1 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWBeBetweenMatcher.m + path + Classes/KWBeBetweenMatcher.m + sourceTree + <group> + + B6EC80F31977440EBD3EEFB9 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + SRWebSocket.h + path + SocketRocket/SRWebSocket.h + sourceTree + <group> + + B6F9381577CC47BAAA6635EF + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + Reachability.m + sourceTree + <group> + + B70686788D1C4B0DA73EC94D + + fileRef + 955EBB8F74B1407D9FAAC2FC + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + B722862C0D2942209E084EAC + + fileRef + 2C0DF2DA739C41299DFBDC2F + isa + PBXBuildFile + + B75F411132DA4DEF831D134A + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RACReturnSignal.m + path + ReactiveCocoaFramework/ReactiveCocoa/RACReturnSignal.m + sourceTree + <group> + + B7A20EED90F54FDDB5585132 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + UITableViewCell+RACSignalSupport.h + path + ReactiveCocoaFramework/ReactiveCocoa/UITableViewCell+RACSignalSupport.h + sourceTree + <group> + + B7A9226B4E094C7681E6AF96 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + NSObject+KiwiStubAdditions.h + path + Classes/NSObject+KiwiStubAdditions.h + sourceTree + <group> + + B7EB1C75C7254D17ABBB72DB + + fileRef + 5DD5F2579DEF4A5E87B5EB0F + isa + PBXBuildFile + + B8248457F8BE4AAC8C2DA740 + + fileRef + B6B83574A7AA454A96FC77B1 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + B8A39F25DDDF4169A5C317C5 + + fileRef + 236A1BFC99784F36BBAFCC75 + isa + PBXBuildFile + + B8C251E35AF84F1693BCAF72 + + fileRef + 114BD20560BC429DA72A9C5C + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + B990E8D8EB6640AE9CFFD604 + + fileRef + 44CEE6C9BD4649AE810916B5 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + B9DE1EEF40494B0D8AB9005A + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + NSMethodSignature+KiwiAdditions.m + path + Classes/NSMethodSignature+KiwiAdditions.m + sourceTree + <group> + + BA2FD68370874A9BBA58677E + + fileRef + AE1AB8F8C0EA4935A1DEBA83 + isa + PBXBuildFile + + BA6C1208B4C74E7BAC64AF8B + + fileRef + 4A5864DA996E4A9D8D321BE2 + isa + PBXBuildFile + + BA976FE53B10488284FB1E18 + + fileRef + 0F0099A8FFF44612BFF6FB5D + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + BB014BDDD1474464BABCA402 + + fileRef + 8DB3E706B957420C9D608C32 + isa + PBXBuildFile + + BB3566BAB9A1489BB6ED6B9C + + fileRef + 3415BFF012E446EEAD2FB457 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + BB916C470E764D80ADFD745B + + fileRef + 0799C3C8DF1C400D9BD56A7E + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + BB97D9561C0C4C4D80CFCAC5 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACTuple.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACTuple.h + sourceTree + <group> + + BBADDBBCF9C244FEAC12BD97 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWStringContainsMatcher.m + path + Classes/KWStringContainsMatcher.m + sourceTree + <group> + + BBFE64AE4E4D48339EE0E211 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + NSNumber+KiwiAdditions.h + path + Classes/NSNumber+KiwiAdditions.h + sourceTree + <group> + + BC89064F796746F3AD7646FB + + fileRef + FD2B3FFD2001497D87091861 + isa + PBXBuildFile + + BCDF61EB1AE44EAAB66DE8A6 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWBeWithinMatcher.h + path + Classes/KWBeWithinMatcher.h + sourceTree + <group> + + BD0A65A9D6C843FB8BC654CE + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWMatcherFactory.h + path + Classes/KWMatcherFactory.h + sourceTree + <group> + + BDF34832C2054D93ADCE35CE + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RACSequence.m + path + ReactiveCocoaFramework/ReactiveCocoa/RACSequence.m + sourceTree + <group> + + BDFC5722A6FC44968D70D8F7 + + fileRef + 903B19BDD79F4A958A28E1E1 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + BE157294E612407DB6D47D02 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACSequence.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACSequence.h + sourceTree + <group> + + BE8DDA98BFD24641B4B95C84 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWDeviceInfo.h + path + Classes/KWDeviceInfo.h + sourceTree + <group> + + BE8FFCEC4DB04FF587B7A559 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWMatchVerifier.h + path + Classes/KWMatchVerifier.h + sourceTree + <group> + + BEA6F6706333451F8819733F + + fileRef + 826BD281ABB14A4B9902F1E9 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + BF02313BDDF94D7DBD78A195 + + fileRef + 4664A96645EA431D8B7D947B + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + BF34DF0698354AFF847CC556 + + fileRef + F41F619BD821410BA2EDC64D + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + BF674AC2E31D45F299ED92EC + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + UIGestureRecognizer+RACSignalSupport.h + path + ReactiveCocoaFramework/ReactiveCocoa/UIGestureRecognizer+RACSignalSupport.h + sourceTree + <group> + + BFEFA557881F4EA6A680AE56 + + baseConfigurationReference + B15B1B188BA84C97ABDC5C42 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + NO + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-SocketRocket-prefix.pch + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 5.0 + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + + isa + XCBuildConfiguration + name + Debug + + C0762976D3384786BF00EE2A + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWFailure.h + path + Classes/KWFailure.h + sourceTree + <group> + + C0913D4968CF4092BD5088C5 + + fileRef + 944A7C5DB1034EC681F67DA4 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + C1052EB783924701BA35CDC5 + + fileRef + 0C66A6206848438B9317E3A7 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + C19D96C06C8240A39B9C7A5F + + containerPortal + 3593DC205A284FA2958F1B80 + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + EA2B21702FD443F39A8DE00E + remoteInfo + Pods-specs-Kiwi + + C1AFA49AD9704754B4743B97 + + fileRef + 3F3970F566EA49D7B1B1BCD0 + isa + PBXBuildFile + + C1F0907DC2724A54B83ECD36 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACObjCRuntime.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACObjCRuntime.h + sourceTree + <group> + + C28B9753ECA84EDFB9E5018C + + fileRef + 8F029FBAF7AD47028C590920 + isa + PBXBuildFile + + C343E0EF87404B9292EB0827 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-ReactiveCocoa.xcconfig + sourceTree + <group> + + C352FBC2540B4CF391B8EC04 + + fileRef + B75F411132DA4DEF831D134A + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + C3983C3A8F95453CBAAA9D8B + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWFormatter.m + path + Classes/KWFormatter.m + sourceTree + <group> + + C419D736F80543DCB883C705 + + buildActionMask + 2147483647 + files + + CC13FB4DEB6043FDADD29B76 + 52DE7868CB574B438320C9A8 + + isa + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + C45ACC8C4F82435FB09DEC64 + + fileRef + 78E53A190E66475F9051B412 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + C48BFD32853148A6A50A8EF2 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWBeforeAllNode.h + path + Classes/KWBeforeAllNode.h + sourceTree + <group> + + C4AE918F504C459C85504032 + + fileRef + A3D46253B6844726B7197239 + isa + PBXBuildFile + + C4B9054E508C4291BA1A9FB6 + + fileRef + 4A9FAE110505455A84BC3938 + isa + PBXBuildFile + + C4D9B00D69AE4D1FA0358AA1 + + fileRef + 68515E4D6C3140BB85AB3C7C + isa + PBXBuildFile + + C516CD7E99A54E478B45CD59 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text + path + Pods-acknowledgements.markdown + sourceTree + <group> + + C52FB3F1BC8C409697AC6643 + + fileRef + 791AF00BE6BB466D8C5B6342 + isa + PBXBuildFile + + C5496FF0699E41CEB31D4D7F + + fileRef + 32B3D8CFC841489184670469 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + C61A973704EA4BC49CE42E0C + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWExampleNode.h + path + Classes/KWExampleNode.h + sourceTree + <group> + + C6535D5C619441C6BE6FFD43 + + buildConfigurations + + 2BD86D32521240479C54478A + A20F3B4EB0D4474CA1C68502 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + C6EEAA2613CD4E119DC4D9A6 + + fileRef + 7119EB174A62410B8D5AFCDC + isa + PBXBuildFile + + C71CA4F8073E4B3FA8291299 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWBeKindOfClassMatcher.h + path + Classes/KWBeKindOfClassMatcher.h + sourceTree + <group> + + C770BDBDE81140FD9D520C62 + + fileRef + 9CB23E1A1FC441EBA16F7325 + isa + PBXBuildFile + + C77D93F02CD44921A3B45645 + + fileRef + 6B8F61281AEE40B19705EFB4 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + C83C3A6C3B574E7A9C531CA5 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + NSURLConnection+RACSupport.m + path + ReactiveCocoaFramework/ReactiveCocoa/NSURLConnection+RACSupport.m + sourceTree + <group> + + C84D6C4C08E2470B8D11D118 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RACDynamicSequence.m + path + ReactiveCocoaFramework/ReactiveCocoa/RACDynamicSequence.m + sourceTree + <group> + + C883587AFE81481DBA247877 + + isa + PBXTargetDependency + target + 0402D00C4DFB42199217841D + targetProxy + A3F969241BD8420C9E169A55 + + C8C0707D5D744816B952B724 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + NSData+RACSupport.h + path + ReactiveCocoaFramework/ReactiveCocoa/NSData+RACSupport.h + sourceTree + <group> + + C8C2A08C50104766BF652CA4 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWStringUtilities.h + path + Classes/KWStringUtilities.h + sourceTree + <group> + + C939BFFD32D34B6EB5A5C575 + + fileRef + 38732CFA0E2548E1A75616FF + isa + PBXBuildFile + + C944708B69214F7C8A9A34E6 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWBeTrueMatcher.h + path + Classes/KWBeTrueMatcher.h + sourceTree + <group> + + C9988DAD30D24211A0D9B87E + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + UIAlertView+RACSignalSupport.m + path + ReactiveCocoaFramework/ReactiveCocoa/UIAlertView+RACSignalSupport.m + sourceTree + <group> + + CA01BF240E594B7FA18334EF + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RACUnit.m + path + ReactiveCocoaFramework/ReactiveCocoa/RACUnit.m + sourceTree + <group> + + CA314262696B45569EAB891D + + fileRef + 0F80146C3286492786396D72 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + CBA8780B4CFA472FB678ED7E + + fileRef + 3F3ACA76990D4EA6B902DD9C + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + CBB030F96BBC40729C22CFE5 + + fileRef + 34FC5AE89020407EABAF3874 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + CC13FB4DEB6043FDADD29B76 + + fileRef + 5A33FFF7CF464F59922BD03B + isa + PBXBuildFile + + CC998C2A0FCB446CA87E8D6F + + fileRef + 87B6D3CB7B5D4D699789ABA2 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + CC9E48D74B9D428ABB776918 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RACSubscriptingAssignmentTrampoline.m + path + ReactiveCocoaFramework/ReactiveCocoa/RACSubscriptingAssignmentTrampoline.m + sourceTree + <group> + + CD6E0D7BEAD1496C931EEC8D + + buildActionMask + 2147483647 + files + + 04A4146C17D141BD82049C73 + 2E47BE679DD14189A6A866A9 + + isa + PBXHeadersBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + CD88C965FD144077A9EA5996 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + NSSet+RACSequenceAdditions.m + path + ReactiveCocoaFramework/ReactiveCocoa/NSSet+RACSequenceAdditions.m + sourceTree + <group> + + CDF3696E61634EF2AC858744 + + fileRef + 185F34A7C47140BD85EF19DD + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + CE0A308E59EE4662A98B56B7 + + fileRef + 1CD756676E9241DD98F5B3D5 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + CE3930D6BD9144FBA882CD98 + + children + + D20160FA675C47B9A279B08A + A1E36E97FC594AD093E5114F + + isa + PBXGroup + name + Targets Support Files + sourceTree + <group> + + CE580522C4254B50996A6ACF + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACValueTransformer.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACValueTransformer.h + sourceTree + <group> + + CF033EB4DA914E0E81452BA8 + + fileRef + 1D301BD0BDEC47FB9FEC0305 + isa + PBXBuildFile + + CF13547E3D5A4A46AF86E77B + + fileRef + 57D45EAD150A430AB32E2B39 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + CF3283261ECD438CA5724AAB + + fileRef + 3CF499DF189A4D3DA2DBC640 + isa + PBXBuildFile + + CF48551A1FF743989A2D2E46 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWExampleGroupDelegate.h + path + Classes/KWExampleGroupDelegate.h + sourceTree + <group> + + CF5C970856A34DD881D44F2A + + fileRef + F9153CF185DE48B58AA0C7AC + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + D07343E36F9D4ADE9C8F0A9D + + fileRef + 9D226A849CA440A996DC58EE + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + D0804DA9D1C5422696461AAD + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACSubject.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACSubject.h + sourceTree + <group> + + D0F3C31F19DD4922BFA68DA8 + + fileRef + 3901E1175E2A4B8FA4AEC6F1 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + D1F816F4B434400AAF4FB7BA + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + UIActionSheet+RACSignalSupport.m + path + ReactiveCocoaFramework/ReactiveCocoa/UIActionSheet+RACSignalSupport.m + sourceTree + <group> + + D20160FA675C47B9A279B08A + + children + + 1E2A4BFD472046B0A9DA68DC + C516CD7E99A54E478B45CD59 + FA74EF4AA19443D68B7BA57B + 328144E6BE17458BBFF4C41B + 180D9CE0DCB846F39C434383 + 4C719763155E437C9FE068DF + + isa + PBXGroup + name + Pods + sourceTree + <group> + + D237C157B0AC4C9C8E3D91D2 + + fileRef + 3E49E5458CE24350A76EAA4E + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + D296151F13534C0E9873234C + + fileRef + ACE1A53016D348D49978BA2A + isa + PBXBuildFile + + D3A2CB35F034400CB7329D1E + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWRegisterMatchersNode.m + path + Classes/KWRegisterMatchersNode.m + sourceTree + <group> + + D4585A635F494531887AC37E + + fileRef + 5A33FFF7CF464F59922BD03B + isa + PBXBuildFile + + D458CDDBB9864735A3BE8E97 + + fileRef + 56FC5424BF3847E996EABCFB + isa + PBXBuildFile + + D4A82211A16C429CAD8F04A4 + + fileRef + 908ABEFAF1504908BBAA135D + isa + PBXBuildFile + + D5E8695940A24B3B84C83D2A + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWStringContainsMatcher.h + path + Classes/KWStringContainsMatcher.h + sourceTree + <group> + + D625095EC8EA4017A7E4D296 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + SenTestSuite+KiwiAdditions.m + path + Classes/SenTestSuite+KiwiAdditions.m + sourceTree + <group> + + D6C432AD0AC74DC3B0BDF917 + + fileRef + BE157294E612407DB6D47D02 + isa + PBXBuildFile + + D7778E67F1BF48F2B656AB8E + + baseConfigurationReference + AAC1F723C56E48E3A41EAC5F + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + NO + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 5.0 + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + + isa + XCBuildConfiguration + name + Debug + + D796CCB4E88140E5A8A0B529 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACCompoundDisposable.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACCompoundDisposable.h + sourceTree + <group> + + D7997246FF26491E8AA15738 + + fileRef + 9F497F4B641743868D8F7742 + isa + PBXBuildFile + + D7D3D4FFD56143FF8AE3F898 + + children + + 50E826F43D0F4FD7B5D37294 + 7C89D36525C44336A06DE90E + 0C9280FA086D45B789940A85 + 3A4D5B4C955A4A13983E8616 + 0A4F3C639DF7496FBE5DB8F9 + + isa + PBXGroup + name + OHHTTPStubs + path + OHHTTPStubs + sourceTree + <group> + + D7EC89AB9CCE4EC59E00F682 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWCallSite.m + path + Classes/KWCallSite.m + sourceTree + <group> + + D7F51626EC8E4965A37F858F + + fileRef + C8C2A08C50104766BF652CA4 + isa + PBXBuildFile + + D81605377E154FE8B3961D9C + + fileRef + 960CFB3A34494C4AA012FBA9 + isa + PBXBuildFile + + D89B6EAB38B14B529251562D + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + NSFileHandle+RACSupport.h + path + ReactiveCocoaFramework/ReactiveCocoa/NSFileHandle+RACSupport.h + sourceTree + <group> + + D8BBA1F2E43142068B8CBE03 + + fileRef + 53E2E69EC8DE4A029FA08396 + isa + PBXBuildFile + + D8D22AB721DC4340ABB66208 + + fileRef + 678D2FE8E56C46FDB8C21B16 + isa + PBXBuildFile + + D989120ADDC34DA18AC3C8D1 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWGenericMatchingAdditions.h + path + Classes/KWGenericMatchingAdditions.h + sourceTree + <group> + + D9BD1BFA14A6475FB9AF3DC3 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + UITextField+RACSignalSupport.m + path + ReactiveCocoaFramework/ReactiveCocoa/UITextField+RACSignalSupport.m + sourceTree + <group> + + DA4953C078B445A3A1767F2A + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACBehaviorSubject.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACBehaviorSubject.h + sourceTree + <group> + + DB2179E6CFC14E158426AFFA + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + Pods-Reachability-dummy.m + sourceTree + <group> + + DB74AC156BEB40569A576D32 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACSubscriptingAssignmentTrampoline.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACSubscriptingAssignmentTrampoline.h + sourceTree + <group> + + DB92B986F814421097AC31B8 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACBlockTrampoline.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACBlockTrampoline.h + sourceTree + <group> + + DBCAAAD6BAB6426E919DDE1C + + fileRef + 4BA64F0074C14710A9A090BD + isa + PBXBuildFile + + DBF23712AD1341D79E414D00 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RACTupleSequence.m + path + ReactiveCocoaFramework/ReactiveCocoa/RACTupleSequence.m + sourceTree + <group> + + DC1E4BC6BC8A4837B768E335 + + includeInIndex + 1 + isa + PBXFileReference + name + RACCompoundDisposableProvider.d + path + ReactiveCocoaFramework/ReactiveCocoa/RACCompoundDisposableProvider.d + sourceTree + <group> + + DC86FFE77D1244519B737AF9 + + fileRef + A9EBB06972CC41BBB12D61A8 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + DCBBC5AF2D36449DAA3A339B + + fileRef + 6D507DE718D4412EB05F3A63 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + DD0F177A494E446EB0EE0822 + + fileRef + 409BD228482340AEABE268DA + isa + PBXBuildFile + + DD54F3CD1A5F4739B57D3DD2 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + NSData+SRB64Additions.m + path + SocketRocket/NSData+SRB64Additions.m + sourceTree + <group> + + DDC04031A201412DB7A7974B + + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + CLANG_CXX_LANGUAGE_STANDARD + gnu++0x + CLANG_CXX_LIBRARY + libc++ + CLANG_ENABLE_MODULES + YES + CLANG_ENABLE_OBJC_ARC + NO + CLANG_WARN_BOOL_CONVERSION + YES + CLANG_WARN_CONSTANT_CONVERSION + YES + CLANG_WARN_DIRECT_OBJC_ISA_USAGE + YES_ERROR + CLANG_WARN_EMPTY_BODY + YES + CLANG_WARN_ENUM_CONVERSION + YES + CLANG_WARN_INT_CONVERSION + YES + CLANG_WARN_OBJC_ROOT_CLASS + YES_ERROR + COPY_PHASE_STRIP + YES + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_WARN_64_TO_32_BIT_CONVERSION + YES + GCC_WARN_ABOUT_RETURN_TYPE + YES_ERROR + GCC_WARN_UNDECLARED_SELECTOR + YES + GCC_WARN_UNINITIALIZED_AUTOS + YES + GCC_WARN_UNUSED_FUNCTION + YES + GCC_WARN_UNUSED_VARIABLE + YES + IPHONEOS_DEPLOYMENT_TARGET + 5.0 + ONLY_ACTIVE_ARCH + YES + STRIP_INSTALLED_PRODUCT + NO + + isa + XCBuildConfiguration + name + Debug + + DDCB818C66D94E80935E19E2 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWMock.h + path + Classes/KWMock.h + sourceTree + <group> + + DE29C5B4F3024924AA4FB432 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.plist.xml + path + Pods-specs-acknowledgements.plist + sourceTree + <group> + + DE336D8C1FF141EF9986F539 + + children + + 7938CF4C96CF453A97FF67FB + D7D3D4FFD56143FF8AE3F898 + 6EC913D9CBA5470DBB5D8765 + FF2B499296434B0CB5620E7A + FB1192FFEE0946A4A86B7BEF + + isa + PBXGroup + name + Pods + sourceTree + <group> + + DE718AF4DB0346F29B1624EA + + baseConfigurationReference + FFEE9EC9C65A46AD9B50D705 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + YES + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-ReactiveCocoa-prefix.pch + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 5.0 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + VALIDATE_PRODUCT + YES + + isa + XCBuildConfiguration + name + Release + + DEC7240806744FEFAAC19B2F + + fileRef + D89B6EAB38B14B529251562D + isa + PBXBuildFile + + DF01D3B770694C86823905AA + + fileRef + F0498385EB814E79B174C554 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + DF0F0122AD7141369A55E781 + + baseConfigurationReference + AAC1F723C56E48E3A41EAC5F + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + YES + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 5.0 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + VALIDATE_PRODUCT + YES + + isa + XCBuildConfiguration + name + Release + + DF3AEBAB6816496490375F20 + + fileRef + FCFF00D13F5548E0A2923B9F + isa + PBXBuildFile + + E0B7399A268A44BC88CE8E23 + + fileRef + 34E5A24A6D20477D890F6BC6 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + E0EAACA985414E8895420B07 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWRegularExpressionPatternMatcher.h + path + Classes/KWRegularExpressionPatternMatcher.h + sourceTree + <group> + + E15C15B7F66C4838B6635BE3 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + NSData+RACSupport.m + path + ReactiveCocoaFramework/ReactiveCocoa/NSData+RACSupport.m + sourceTree + <group> + + E18BEBF2F3284BB0882D6BB2 + + fileRef + 0BC5D37D947E4D45A6D41886 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + E18E3DC5D03D41D195A7748F + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACScopedDisposable.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACScopedDisposable.h + sourceTree + <group> + + E1BA65D8FF3140BFA6E8F3EB + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + NSObject+KiwiStubAdditions.m + path + Classes/NSObject+KiwiStubAdditions.m + sourceTree + <group> + + E1FAD63913384C7B851EE7B2 + + fileRef + 59A364D3BF8448C795798BCC + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + + + E277C3A8AFC34BACA28B4E3A + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACScheduler+Private.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACScheduler+Private.h + sourceTree + <group> + + E3BD340A829E4D19AAA4D5BF + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACChannel.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACChannel.h + sourceTree + <group> + + E3E15992F42E4D1FAFB8EAE7 + + fileRef + 0756253C4EE34A4CA3408E25 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + E3F6DFF70DA348DCA2C18755 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACEmptySignal.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACEmptySignal.h + sourceTree + <group> + + E42B23214B834ECE83E8EF4D + + fileRef + 90F0880D6A8D4882B20D487F + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - CDF76A42FEE946EE82A19B74 + E47E6AFC3F4344B3989412B4 fileRef - 5E5E6B2CFE2445379929C794 + A9BD7CA5D2064DEF8B675907 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - CE09F3BDE9EC4A75A2BA873A + E4844758CBA24367B681A466 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWMessagePattern.m + KWContainMatcher.h path - Classes/KWMessagePattern.m + Classes/KWContainMatcher.h sourceTree <group> - CE935C9D71AA4B01B465AB1C + E4B9DD62B3994997BB9815EE + includeInIndex + 1 isa PBXFileReference lastKnownFileType - wrapper.framework + sourcecode.c.objc name - SenTestingKit.framework + KWMatcher.m path - Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/SenTestingKit.framework + Classes/KWMatcher.m sourceTree - DEVELOPER_DIR + <group> + + E4F3DE4E95CF48A1A09BCC0F + + fileRef + 47674E64692242DA80252C38 + isa + PBXBuildFile + + E57C7649501E4A0DA2F8DA9D + + fileRef + 90D8685E644542C1811D4676 + isa + PBXBuildFile - CEAE6BFD13A6444BA369FEEB + E63CFE8DE5A042FEA0891E41 includeInIndex 1 @@ -6096,13 +11037,13 @@ lastKnownFileType sourcecode.c.h name - KWMatcherFactory.h + KWUserDefinedMatcher.h path - Classes/KWMatcherFactory.h + Classes/KWUserDefinedMatcher.h sourceTree <group> - CEBEC57FB3F64041B456877F + E6C3CC91C6F24E8DB479B8E1 includeInIndex 1 @@ -6111,76 +11052,238 @@ lastKnownFileType sourcecode.c.h name - KWMatching.h + RACReplaySubject.h path - Classes/KWMatching.h + ReactiveCocoaFramework/ReactiveCocoa/RACReplaySubject.h sourceTree <group> - CF5699A1444F45B697DAB10F - - fileRef - D1A2276FA50A465CA5B89876 - isa - PBXBuildFile - - D045CEF3EC0B400DB21E946B + E6D66EACAA504DF3B9F8C747 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWExistVerifier.m + KWRespondToSelectorMatcher.h path - Classes/KWExistVerifier.m + Classes/KWRespondToSelectorMatcher.h sourceTree <group> - D08C3321806E4969BEF25D4F + E7C3BEF475E04E9BA065824C + + fileRef + A4FC205D4F2B4689B6FA71FE + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + E7DFBD82C01C4C638B832CC1 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWFormatter.m + NSArray+RACSequenceAdditions.h path - Classes/KWFormatter.m + ReactiveCocoaFramework/ReactiveCocoa/NSArray+RACSequenceAdditions.h sourceTree <group> - D0E33BE40D58494E94ADDAEE + E833288A46074D58A7682D66 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc + name + NSEnumerator+RACSequenceAdditions.m path - Pods-Reachability-prefix.pch + ReactiveCocoaFramework/ReactiveCocoa/NSEnumerator+RACSequenceAdditions.m sourceTree <group> - D15F8CC71CA74ACE98289C43 + E84E89ACC776469DA2612F04 + + fileRef + 81FC7D2E5B3945F9B70EB03C + isa + PBXBuildFile + + E9877AE0AC8E4D479DD89534 + + fileRef + 328144E6BE17458BBFF4C41B + isa + PBXBuildFile + + E995638581A84DA5ADB7F1E8 + + fileRef + 5A33FFF7CF464F59922BD03B + isa + PBXBuildFile + + E9F8D76845B14C049EFC558B + + fileRef + 5A33FFF7CF464F59922BD03B + isa + PBXBuildFile + + EA2B21702FD443F39A8DE00E + + buildConfigurationList + AB34F18E9BB94DD3BCA7942C + buildPhases + + EB62A4B1170C44879AB212D5 + 782704BCEA674892841CB435 + 9A6810B3BD934EAFB751AA91 + + buildRules + + dependencies + + isa + PBXNativeTarget + name + Pods-specs-Kiwi + productName + Pods-specs-Kiwi + productReference + 47C95EEEB43D479E9D0FB828 + productType + com.apple.product-type.library.static + + EAE64924340A463FB638A8C3 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.script.sh + sourcecode.c.objc path - Pods-specs-resources.sh + Pods-SocketRocket-dummy.m sourceTree <group> - D1A2276FA50A465CA5B89876 + EAFAC05DAD3D4182872BB69E + + fileRef + A274A8CF4F2F4D65BA7F41DB + isa + PBXBuildFile + + EB62A4B1170C44879AB212D5 + + buildActionMask + 2147483647 + files + + E1FAD63913384C7B851EE7B2 + F0B5DDA45F0C40408638EA95 + E0B7399A268A44BC88CE8E23 + ED7102BB378C425E82B83D6F + B8248457F8BE4AAC8C2DA740 + CE0A308E59EE4662A98B56B7 + DF01D3B770694C86823905AA + CF5C970856A34DD881D44F2A + 0DBEC28C43A74AB2868061B7 + EC94AA6D5BB746A99B3D32F1 + CBB030F96BBC40729C22CFE5 + BB3566BAB9A1489BB6ED6B9C + AF9B98EE246D439EB9CE02A5 + 161BB060B93F42E8A985913A + 8287A6A3F7514C0A81F5B079 + 44635FF6FD8C4A7CB4E8234B + 3894254C6B4E483EA53C7DD9 + F1D1317C9A044DE3A5175DAF + E18BEBF2F3284BB0882D6BB2 + DCBBC5AF2D36449DAA3A339B + 5997AE0A334744BBA7F9E093 + 96A6E6D8132140368F900950 + 286964CE6C22428FB84182BF + F5163DFC81D9469ABB530B1D + 946628973A29435FB44F6AAB + 17C3EC31285D48CEB5B00367 + 4F141A3F9162423B8C01A9B1 + 74ABAC1087974C01B4275B92 + 30DEBB44CE0C4C49BBEE363E + 6C54A48F2DB2425EA22492A6 + 25A760E8262D445A9D0DAEFB + 56876CC87CE746FF9904AD3D + A244D89BC87345519751FD9F + FA711D67263347E5854B5ACF + 81CA47985A784972958FB7BE + 3CB3F226223343AB8FEF43D7 + 006505DCB63C49C6AC141116 + 51A12E0F74B54E21A875DA59 + 931A5F5361714315A2043146 + 2C5F2B679A0F44DF95CAAA01 + 4CC64734F9704B05A4D6309A + 1F0EE99EE23247CF8E8379BC + F92CBD69430748589E827DAF + 01109DFF02D046A8B33FDA28 + CBA8780B4CFA472FB678ED7E + B70686788D1C4B0DA73EC94D + 1C6AAA6D726649A28E867392 + 26A33DB591184055BDD1A692 + C0913D4968CF4092BD5088C5 + 5FDDEB8A1B104F69B428A9CC + D07343E36F9D4ADE9C8F0A9D + B0194545625B4B2594B790D1 + CA314262696B45569EAB891D + 28E56DDCB3C649D3817FDEA3 + 734D8077780941C3A9B588EC + 50361B87F1D24BE2BBE25201 + BEA6F6706333451F8819733F + 0A7C8CB648E34D22BA49DC67 + 544897CE916B485392CD2A4A + 77419DF5536445DA880C133C + FAE8ED9A8D784B6890626E93 + AD9C55C4AED847FBBD16317D + B0CF1BACCB4C40B7AB8801DD + B1D2BC0EA6E64B0F9F4631CD + BF34DF0698354AFF847CC556 + 0183B220EF7B49C68296319A + BDFC5722A6FC44968D70D8F7 + FEE10483E42544F8BEA531B8 + 3148B8563AB046918CE13DCD + 03F0B9797FFD47F18002FB94 + B990E8D8EB6640AE9CFFD604 + 2E0B5DA8E80D4F409E034AA8 + 4B25BEDF657940339CF1BA00 + 9780E584FCF24B219AE9BB45 + 5861A5F373294487AFFB8841 + F568CDBD191F4FCEBE9B922D + D0F3C31F19DD4922BFA68DA8 + 90E935556B1C4FA5B2B3113C + 20E0DFB114104027A960BB95 + 6450F06EA0D3454B89429695 + 172F92CFE1C345A0A5A58AC6 + 8CAB75BB4F524ADBB4B7AB7A + 29C232542CB14D1C8A3310D2 + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + EC145F306FC14C76979D0352 includeInIndex 1 @@ -6188,29 +11291,48 @@ PBXFileReference lastKnownFileType sourcecode.c.objc + name + KWGenericMatcher.m path - Pods-Reachability-dummy.m + Classes/KWGenericMatcher.m sourceTree <group> - D2DDEF83B4374922AE828A8F + EC2DD60EDB874FB28EC57DE4 + + fileRef + 2D96B9FF873E4BC990447F8A + isa + PBXBuildFile + + EC932628EE02412A80844F23 fileRef - C2B4892303BC46B29BF170FF + 683C5AD681124911B16AF15A isa PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - D4F269D024174C919CF18A4B + EC94AA6D5BB746A99B3D32F1 fileRef - 8DB5CFD169084CDA8AD36554 + 6320E44CA0034C659743C0F0 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - D4FB66DCAF1F49FE8D340FA5 + ED7102BB378C425E82B83D6F fileRef - B1AB0D401D5445A593F9B290 + 0B97546E56F6468492891F50 isa PBXBuildFile settings @@ -6219,7 +11341,7 @@ -w -Xanalyzer -analyzer-disable-checker - D50EC4A6AB114D948A510707 + ED9C1A0EB76D4AA883AC26CA includeInIndex 1 @@ -6228,13 +11350,20 @@ lastKnownFileType sourcecode.c.h name - base64.h + KWItNode.h path - SocketRocket/base64.h + Classes/KWItNode.h sourceTree <group> - D53A889F73AC4196A1141145 + EDACDFB641CC4864BFA0E339 + + fileRef + 59C7020EE1434185B9029FC8 + isa + PBXBuildFile + + EE7AEBCD93054EDD82A61DDE includeInIndex 1 @@ -6243,74 +11372,56 @@ lastKnownFileType sourcecode.c.h name - OHHTTPStubs.h + UIDatePicker+RACSignalSupport.h path - OHHTTPStubs/OHHTTPStubs.h + ReactiveCocoaFramework/ReactiveCocoa/UIDatePicker+RACSignalSupport.h sourceTree <group> - D57E36F90B2C4ED198A60D7D + EF94BEFE58CD415C8F2B12A0 - includeInIndex - 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + wrapper.framework name - KWExpectationType.h + SystemConfiguration.framework path - Classes/KWExpectationType.h + Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/SystemConfiguration.framework sourceTree - <group> + DEVELOPER_DIR - D631F7B436E4436DA877B4A5 + EFD1CADF081E43698370A6EF includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWBeIdenticalToMatcher.m + KWReporting.h path - Classes/KWBeIdenticalToMatcher.m + Classes/KWReporting.h sourceTree <group> - D636C2CC9FCC4135A468818B - - fileRef - 8AB698371FC54087AC4A5BE3 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - - D68EEAA06F3847C3A57D7CF4 + F0362A8F03EC496896397CB3 - fileRef - 12F77D49665540A999F08418 - isa - PBXBuildFile - - D6982AC860334EF99D7F9BEA - - fileRef - F8DA4285419B41DB83E6082E + buildActionMask + 2147483647 + files + + 7445FFDF3B4644C39C64874B + 0E19815BFEDE414781FC6560 + D7997246FF26491E8AA15738 + isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 - D6BC5A79F1F947EDBA79F086 + F0498385EB814E79B174C554 includeInIndex 1 @@ -6319,23 +11430,16 @@ lastKnownFileType sourcecode.c.objc name - SenTestSuite+KiwiAdditions.m + KWBeIdenticalToMatcher.m path - Classes/SenTestSuite+KiwiAdditions.m + Classes/KWBeIdenticalToMatcher.m sourceTree <group> - D72FFFC6003F43CAA12201B6 + F0B5DDA45F0C40408638EA95 fileRef - A9C4CB0990804BE2BAFB88F1 - isa - PBXBuildFile - - D7533F2E00BE47BC866F514F - - fileRef - 1EB52154FAA54382B9DE5774 + 44B18651C8BA4A84AF1F9231 isa PBXBuildFile settings @@ -6344,68 +11448,63 @@ -w -Xanalyzer -analyzer-disable-checker - D775C52EE41245E999368F2C + F0D765ED7D064C589B51A629 - baseConfigurationReference - 2846C072D3444C6B895F35AD - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Pods-specs-Kiwi-prefix.pch - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 4.0 - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - + includeInIndex + 1 isa - XCBuildConfiguration + PBXFileReference + lastKnownFileType + sourcecode.c.objc name - Debug + KWRegularExpressionPatternMatcher.m + path + Classes/KWRegularExpressionPatternMatcher.m + sourceTree + <group> - D7A8D82465574FB3865D8933 + F0F9076E0C5143FE9497D321 fileRef - F3C2F30562FD42ACA73225D0 + 6FFBD09F24064481BDCEC632 isa PBXBuildFile - D7F776B944054C1BBA954739 + F10E406806C24894BB2E3BB1 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWEqualMatcher.h + path + Classes/KWEqualMatcher.h + sourceTree + <group> + + F185F41FBD404EE584D5A391 + + children + + 5C3D6D948CA04864841525C5 + 2E03E503A6AF4E2DB66DE761 + DB2179E6CFC14E158426AFFA + 4E2D33EF097A4DC18D358E76 + + isa + PBXGroup + name + Support Files + sourceTree + SOURCE_ROOT + + F1D1317C9A044DE3A5175DAF fileRef - 75170BD32DD944139E99DA3B + 02616A972EBA4ADE98ACA097 isa PBXBuildFile settings @@ -6414,51 +11513,72 @@ -w -Xanalyzer -analyzer-disable-checker - D8F11F79DB1E47B4AA383102 + F1EC465D2D3B45A5921C220F fileRef - 03F05C358E854E8DA923970F + 2D2862D4A2464AECB630CB7E isa PBXBuildFile - DB2C631DFE764E938AF04269 + F222BE0640B54233990D85B5 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWStringContainsMatcher.h + RACCompoundDisposable.m path - Classes/KWStringContainsMatcher.h + ReactiveCocoaFramework/ReactiveCocoa/RACCompoundDisposable.m sourceTree <group> - DB532E7DD2C14E38BF0AA0AB + F23596A6B44347A8A74E28BB - includeInIndex - 1 + fileRef + 4FEC1AA9762E404082803DED isa - PBXFileReference - lastKnownFileType - sourcecode.c.h + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + F2667EAC158A4C359374BCF8 + + fileRef + 8EB43961DFF846BFAED288C1 + isa + PBXBuildFile + + F2D9A2153CD04B2F93E661E2 + + children + + 322CB620A759410CA14308CA + 5A33FFF7CF464F59922BD03B + 5288BA5DA69B4CECAAD9724D + A5424E36D05D4656B5F480D5 + EF94BEFE58CD415C8F2B12A0 + + isa + PBXGroup name - KWExistVerifier.h - path - Classes/KWExistVerifier.h + iOS sourceTree <group> - DC38DAD1A9004EAD8876A588 + F30DFB11BD19430ABFCF13AD fileRef - 21CFD7BD0A7A49D99591CCF2 + E63CFE8DE5A042FEA0891E41 isa PBXBuildFile - DCD6CA8377B3483FB50DA56F + F3C4A814FFE74D42B8BBBE4F includeInIndex 1 @@ -6467,16 +11587,23 @@ lastKnownFileType sourcecode.c.objc name - KWDeviceInfo.m + NSObject+RACDeallocating.m path - Classes/KWDeviceInfo.m + ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACDeallocating.m sourceTree <group> - DCEA85F980EF4923944795D7 + F3C77F8A27A74243ADEEF3B6 + + fileRef + 9B8CD4FF735340F0AFAB0D7D + isa + PBXBuildFile + + F3C825BF098A4FE9A1C6FA67 baseConfigurationReference - 863F116C601848108F1DEA69 + 6A1A9B8DEC6447AFBFFCA440 buildSettings ALWAYS_SEARCH_USER_PATHS @@ -6489,12 +11616,14 @@ gnu99 GCC_PRECOMPILE_PREFIX_HEADER YES + GCC_PREFIX_HEADER + Pods-specs-OHHTTPStubs-prefix.pch GCC_VERSION com.apple.compilers.llvm.clang.1_0 INSTALL_PATH $(BUILT_PRODUCTS_DIR) IPHONEOS_DEPLOYMENT_TARGET - 4.0 + 5.0 OTHER_CFLAGS -DNS_BLOCK_ASSERTIONS=1 @@ -6523,171 +11652,126 @@ name Release - DD4C75E2AE684153A99B3AE3 - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - path - libPods-SocketRocket.a - sourceTree - BUILT_PRODUCTS_DIR - - DDF2E56BB5D54EE7A479032F + F3CC2B2178084527AAD26615 fileRef - 8DDBA4EB259941A9999709D8 + 6F2601DEDFCA412287115CB9 isa PBXBuildFile - - DEFF810FA2294A278F95BD92 - - baseConfigurationReference - C7C8C44CDEE04061AECD9B3A - buildSettings + settings - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Pods-specs-OHHTTPStubs-prefix.pch - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 4.0 - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - isa - XCBuildConfiguration - name - Debug - DF7AE47998A840D8B6A3FDC5 - - fileRef - 4C2170171E2B4E01B5B62E1B - isa - PBXBuildFile - - DFED1B5F445D40889D02EDA6 + F3F65FACF58D4DEA948F7A65 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h + name + RACDynamicSignal.h path - Pods-specs-dummy.m + ReactiveCocoaFramework/ReactiveCocoa/RACDynamicSignal.h sourceTree <group> - E08626E0AE2F45A78D0E48A0 + F41F619BD821410BA2EDC64D includeInIndex 1 isa PBXFileReference + lastKnownFileType + sourcecode.c.objc name - base64.c + KWStringUtilities.m path - SocketRocket/base64.c + Classes/KWStringUtilities.m sourceTree <group> - E1D73F1C3FDB4DD195555A59 + F5163DFC81D9469ABB530B1D fileRef - F89312611E42485AAEF9F660 + 67914415DB2C404AAC41F1F5 isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - E2DB16594B514BCBBE0E9408 + F51CAAB6FD074BA78B43DA98 - fileRef - C1F5B1CDE60B43B280ED49D6 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KiwiConfiguration.h + path + Classes/KiwiConfiguration.h + sourceTree + <group> - E3ABC2DD60654E5DABADECE0 + F568CDBD191F4FCEBE9B922D fileRef - F157A7F4CB9A4C599B5328A5 + 194B85AAFB3D454BB50BC1CB isa PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - E3BD5F4B2173405C929825D9 + F591CFA0AC1E45C6B5A029AE fileRef - AB79E86D533B4685BC091A9D + 782ABE7106924070BB66F2FA isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - E4DBB433AA684B3897C1F767 + F5AB7FB274A84B31898B11D6 fileRef - 7AB80B2C80CA44A2936CF0F9 + C84D6C4C08E2470B8D11D118 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - E5145671E6D54BEFBB2490C9 + F5B9E55E4AFD487AB65C7B50 - includeInIndex - 1 + fileRef + B1DFE1BB63F64A6486527788 isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWMessageSpying.h - path - Classes/KWMessageSpying.h - sourceTree - <group> + PBXBuildFile + + F5CFD781BEF444B6949FC7C5 + + fileRef + 599721491B8D4DA8A733A7A8 + isa + PBXBuildFile - E7D1FC76CAB84EB9BB536038 + F6084BC1A66C4EBBBD3BE4CD includeInIndex 1 @@ -6696,13 +11780,13 @@ lastKnownFileType sourcecode.c.objc name - KWMatchers.m + RACUnarySequence.m path - Classes/KWMatchers.m + ReactiveCocoaFramework/ReactiveCocoa/RACUnarySequence.m sourceTree <group> - E97496D6E4684CC8AD20ABA6 + F644B3FD30394D7080BB6846 includeInIndex 1 @@ -6711,48 +11795,73 @@ lastKnownFileType sourcecode.c.h name - KWBeNilMatcher.h + NSProxy+KiwiVerifierAdditions.h path - Classes/KWBeNilMatcher.h + Classes/NSProxy+KiwiVerifierAdditions.h sourceTree <group> - E9A6C856148E455497C7415D + F66570DC6820480196AB504D fileRef - 79594ECD1D924ACAA22259A3 + 21C56824A0804A99A45C7942 isa PBXBuildFile settings COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - E9B5A6C339E44F5692B5BA24 + F6E44FF9A81B452C975480CF - buildConfigurations - - 7FCF3FC612C64B0191802AB1 - 345A68049CBA4882857C9C19 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release + fileRef + 64ED7A9099474B44881384AB isa - XCConfigurationList + PBXBuildFile - EBC3533FED874BBDBFE81F12 + F70488463AAF421083C580C1 + fileRef + 6B3A51943C3A4205B90C0349 isa - PBXTargetDependency - target - A7D9977497BA4F6AB4A0889F - targetProxy - 43DF4E7A028C430ABD224344 + PBXBuildFile + + F794F245C1984FEB941987EE + + fileRef + 5CFE18FBE3ED4163BC06E29A + isa + PBXBuildFile + + F7AC5AC816CA46BFA38108E0 + + fileRef + CA01BF240E594B7FA18334EF + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + F8B581B3C16842C1BCD723EB + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWAfterEachNode.h + path + Classes/KWAfterEachNode.h + sourceTree + <group> - EC370BCD987D43A7A1381C09 + F9153CF185DE48B58AA0C7AC includeInIndex 1 @@ -6761,16 +11870,16 @@ lastKnownFileType sourcecode.c.objc name - NSObject+KiwiMockAdditions.m + KWBeKindOfClassMatcher.m path - Classes/NSObject+KiwiMockAdditions.m + Classes/KWBeKindOfClassMatcher.m sourceTree <group> - ED3966A49AC3465D9F195D7A + F92CBD69430748589E827DAF fileRef - 04F8EDEA67CD47CFAB41A953 + AF9B2BFF860442A58C9EDBC8 isa PBXBuildFile settings @@ -6779,32 +11888,51 @@ -w -Xanalyzer -analyzer-disable-checker - ED590E8646BB4A8A96ACF011 + F98668C4B8E24C36B5B93224 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWCaptureSpy.m + KWConformToProtocolMatcher.h + path + Classes/KWConformToProtocolMatcher.h + sourceTree + <group> + + F98E8E77A2F54437B2BA55EF + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.script.sh path - Classes/KWCaptureSpy.m + Pods-specs-resources.sh sourceTree <group> - EEB93D97A1BC495291811E2B + FA04F25CCB9948EBACABB827 - fileRef - 611BECEF302D434B9D565C36 + buildActionMask + 2147483647 + files + + 6074DAE36A1C48789E35139C + isa - PBXBuildFile + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 - EFE7CE3B4F544058B0BF22BF + FA711D67263347E5854B5ACF fileRef - 5EDADC32109A4467A3CCA870 + 52F4BD4C69444DB7ADA94143 isa PBXBuildFile settings @@ -6813,22 +11941,20 @@ -w -Xanalyzer -analyzer-disable-checker - F01F77AD0DDF4A2E87244480 + FA74EF4AA19443D68B7BA57B includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - KWBeTrueMatcher.m + text.plist.xml path - Classes/KWBeTrueMatcher.m + Pods-acknowledgements.plist sourceTree <group> - F0C50DD325BC4FBE842F5C42 + FA837F145D5142109E15FEC1 includeInIndex 1 @@ -6837,13 +11963,13 @@ lastKnownFileType sourcecode.c.h name - KWAfterEachNode.h + UISwitch+RACSignalSupport.h path - Classes/KWAfterEachNode.h + ReactiveCocoaFramework/ReactiveCocoa/UISwitch+RACSignalSupport.h sourceTree <group> - F139C2BE6E5C4487B58E0C79 + FA8A8DB0C2CD41B9A8129B59 includeInIndex 1 @@ -6852,40 +11978,62 @@ lastKnownFileType sourcecode.c.h name - NSData+SRB64Additions.h + KiwiBlockMacros.h path - SocketRocket/NSData+SRB64Additions.h + Classes/KiwiBlockMacros.h sourceTree <group> - F157A7F4CB9A4C599B5328A5 + FAB2736A54DC4C3D83898090 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWTestCase.h + RACSubscriber.m path - Classes/KWTestCase.h + ReactiveCocoaFramework/ReactiveCocoa/RACSubscriber.m sourceTree <group> - F187827DC29D4F4AB6C61A86 + FADAC3F07F9646828D59AF07 + + fileRef + B6EC80F31977440EBD3EEFB9 + isa + PBXBuildFile + + FAE8ED9A8D784B6890626E93 fileRef - E08626E0AE2F45A78D0E48A0 + 9467E9DAA194434484DE371D isa PBXBuildFile settings COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + -w -Xanalyzer -analyzer-disable-checker - F23B93B5FC8C4F948DF61610 + FAF7DE0F88A14EBBB5D08FB9 + + buildActionMask + 2147483647 + files + + 157FA199DCD24618A85EED3F + FADAC3F07F9646828D59AF07 + 211DB2C5F4FF4CA2807938DD + + isa + PBXHeadersBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + FB027FA86D6E44529D4F6E63 includeInIndex 1 @@ -6894,13 +12042,34 @@ lastKnownFileType sourcecode.c.objc name - KWBeBetweenMatcher.m + RACChannel.m path - Classes/KWBeBetweenMatcher.m + ReactiveCocoaFramework/ReactiveCocoa/RACChannel.m sourceTree <group> - F24A12F6E2C64DADB97A429F + FB1192FFEE0946A4A86B7BEF + + children + + 74E86158709945BD83B008FA + DD54F3CD1A5F4739B57D3DD2 + B6EC80F31977440EBD3EEFB9 + 10C30819C67B48638ACFB8F5 + 683C5AD681124911B16AF15A + B0D59693D7DE4F02A9DF033E + 002213C66BFA43BC88E6C87C + + isa + PBXGroup + name + SocketRocket + path + SocketRocket + sourceTree + <group> + + FB1775ECF5FF4E55AA3342AD includeInIndex 1 @@ -6909,55 +12078,55 @@ lastKnownFileType sourcecode.c.objc name - NSNumber+KiwiAdditions.m + KWStringPrefixMatcher.m path - Classes/NSNumber+KiwiAdditions.m + Classes/KWStringPrefixMatcher.m sourceTree <group> - F3376D236AF94D0F90F29DF6 + FCFF00D13F5548E0A2923B9F includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWBeMemberOfClassMatcher.m + KWWorkarounds.h path - Classes/KWBeMemberOfClassMatcher.m + Classes/KWWorkarounds.h sourceTree <group> - F3454C9B803342A18B218796 + FD2B3FFD2001497D87091861 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - NSValue+KiwiAdditions.m + sourcecode.c.h path - Classes/NSValue+KiwiAdditions.m + Reachability.h sourceTree <group> - F3494B9C0587408EBEF65482 + FD7B04E88B7A4AABAFC34457 - fileRef - BF956684202046CD96D1D451 + buildConfigurations + + 4A13A074EC3C465AAAA998C6 + F3C825BF098A4FE9A1C6FA67 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - + XCConfigurationList - F3C145405CBC4A00862AAED7 + FD8E538DAE614D2FA8CC5A65 includeInIndex 1 @@ -6966,133 +12135,52 @@ lastKnownFileType sourcecode.c.objc name - KWContainStringMatcher.m + KWBeMemberOfClassMatcher.m path - Classes/KWContainStringMatcher.m + Classes/KWBeMemberOfClassMatcher.m sourceTree <group> - F3C2F30562FD42ACA73225D0 + FDD86645CC714B85B8EB2472 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWRegularExpressionPatternMatcher.h + RACGroupedSignal.m path - Classes/KWRegularExpressionPatternMatcher.h - sourceTree - <group> - - F3E4AF03573F4785ADBB9227 - - children - - AEB9B076F0724C63A76DF656 - FCF264B3CF2A49CE981915D1 - 5AA7ED306FAF4838B8648877 - CE935C9D71AA4B01B465AB1C - 93907A2127B64E32A9E73A34 - - isa - PBXGroup - name - iOS + ReactiveCocoaFramework/ReactiveCocoa/RACGroupedSignal.m sourceTree <group> - F531FF2C5A244689B884183F + FE150A43DAE840E387566D6E fileRef - 54CB8D6CA28E43659CE6DF8E + 354688651EC347BEA7E72F0E isa PBXBuildFile - F55E5C657C7B41BD92A40A1B + FE28E3D08FC6468AB5DAF810 fileRef - 17CC07321D9F4DD5A8B3E2BB + 4E5163BF49274B0FAC8F0A42 isa PBXBuildFile - F6F4DCC501A541948A42EBAC - - baseConfigurationReference - 863F116C601848108F1DEA69 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 4.0 - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Debug - - F84410D067E945A8BD4EB10E + FE94860AA5B94D758E6F2269 fileRef - 9B6F68AFEB3745FB9F3D32B2 + 60232C08BDF24866A92B8AC2 isa PBXBuildFile - F89312611E42485AAEF9F660 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSObject+KiwiSpyAdditions.h - path - Classes/NSObject+KiwiSpyAdditions.h - sourceTree - <group> - - F8A3DD7E62C6487FB1FD14B3 + FEE10483E42544F8BEA531B8 fileRef - DCD6CA8377B3483FB50DA56F + 8FE273511E764916A22F858C isa PBXBuildFile settings @@ -7101,101 +12189,48 @@ -w -Xanalyzer -analyzer-disable-checker - F8B02FB71FA746CA9766C7FA - - fileRef - 1F63D9A4933B46CFBE7147E3 - isa - PBXBuildFile - - F8DA4285419B41DB83E6082E + FF2B499296434B0CB5620E7A - includeInIndex - 1 + children + + 638F5E8E35794CC29940938B + 626B9AFFBE724DAB993B8741 + 774EC2DBF2E44BE1960E37A2 + isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc + PBXGroup name - KWStringPrefixMatcher.m + ReactiveCocoa path - Classes/KWStringPrefixMatcher.m + ReactiveCocoa sourceTree <group> - F92DB362259A4E5EAB44F2EB + FF422B92EFEF40C69375FD1B fileRef - 729162EE598F4D65BFE3634D + E15C15B7F66C4838B6635BE3 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - F9EEAD8F5EAC4B4E9F497A28 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - KWBeZeroMatcher.m - path - Classes/KWBeZeroMatcher.m - sourceTree - <group> - - FB9511A7CE8C4CB59457793C + FFBEDF51644D4EB98802152C fileRef - 8D79D2AEE6134607B9C42EED + 55998C1FB2F14DE5858D9D3A isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - FC15726807EB48968A2AF22F - - fileRef - F139C2BE6E5C4487B58E0C79 - isa - PBXBuildFile - - FCF264B3CF2A49CE981915D1 - - isa - PBXFileReference - lastKnownFileType - wrapper.framework - name - Foundation.framework - path - Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/Foundation.framework - sourceTree - DEVELOPER_DIR - - FDEF8C78534E4DC29E833357 - - buildActionMask - 2147483647 - files - - A897C81F7F8448EE8945E99C - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - FE3DB58BF5034002BA9880D8 + FFDD53DD78DE404084421DCA includeInIndex 1 @@ -7204,13 +12239,13 @@ lastKnownFileType sourcecode.c.objc name - NSInvocation+KiwiAdditions.m + KWObjCUtilities.m path - Classes/NSInvocation+KiwiAdditions.m + Classes/KWObjCUtilities.m sourceTree <group> - FE5D2C2CBA92447DAFACD29C + FFEE9EC9C65A46AD9B50D705 includeInIndex 1 @@ -7219,38 +12254,12 @@ lastKnownFileType text.xcconfig path - Pods-Reachability-Private.xcconfig + Pods-ReactiveCocoa-Private.xcconfig sourceTree <group> - FEDD5642F29D4F11B2DF3E50 - - fileRef - 02CE1847192D46CB99248DA7 - isa - PBXBuildFile - - FF94E7F3CDFF4CA0BBD35AF0 - - fileRef - 2289F5BE59054018BAACAEE8 - isa - PBXBuildFile - - FFADB713E0804ED2B518DA06 - - fileRef - BCCB43FD08904BA1B7FFA2FF - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - rootObject - CD9632B3B8EC456ABE0A7912 + 3593DC205A284FA2958F1B80 diff --git a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-Reachability.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-Reachability.xcscheme index d8106540..abd6b239 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-Reachability.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-Reachability.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> diff --git a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-ReactiveCocoa.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-ReactiveCocoa.xcscheme new file mode 100644 index 00000000..e621c222 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-ReactiveCocoa.xcscheme @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-SocketRocket.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-SocketRocket.xcscheme index 3d5f5c28..77698e0c 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-SocketRocket.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-SocketRocket.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> diff --git a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs-Kiwi.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs-Kiwi.xcscheme index 08f573d5..732dcd3b 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs-Kiwi.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs-Kiwi.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> diff --git a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs-OHHTTPStubs.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs-OHHTTPStubs.xcscheme index 85384bba..5b4b34d0 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs-OHHTTPStubs.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs-OHHTTPStubs.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> diff --git a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs.xcscheme index fd515f0c..f418d437 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> diff --git a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods.xcscheme index 30fa13d2..a5730d7b 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> diff --git a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/xcschememanagement.plist b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/xcschememanagement.plist index 872d41bf..dcae5f3e 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/xcschememanagement.plist @@ -9,6 +9,11 @@ isShown + Pods-ReactiveCocoa.xcscheme + + isShown + + Pods-SocketRocket.xcscheme isShown @@ -36,37 +41,6 @@ SuppressBuildableAutocreation - - 61FDDB3765BC40D8AD1CA677 - - primary - - - 8CD183EA2D3E4A6B8D5761CE - - primary - - - 8E4EBA6C393D4E669F393B84 - - primary - - - 995F1D8F06324A69AC7ADD72 - - primary - - - A7D9977497BA4F6AB4A0889F - - primary - - - BDBE7202A8214393ACF3E379 - - primary - - - + diff --git a/Pods/ReactiveCocoa/LICENSE.md b/Pods/ReactiveCocoa/LICENSE.md new file mode 100644 index 00000000..3325055b --- /dev/null +++ b/Pods/ReactiveCocoa/LICENSE.md @@ -0,0 +1,19 @@ +**Copyright (c) 2012 - 2013, GitHub, Inc.** +**All rights reserved.** + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Pods/ReactiveCocoa/README.md b/Pods/ReactiveCocoa/README.md new file mode 100644 index 00000000..429790c7 --- /dev/null +++ b/Pods/ReactiveCocoa/README.md @@ -0,0 +1,539 @@ +# ReactiveCocoa + +ReactiveCocoa (RAC) is an Objective-C framework for [Functional Reactive +Programming][]. It provides APIs for **composing and transforming streams of +values**. + +If you're already familiar with functional reactive programming or know the basic +premise of ReactiveCocoa, check out the [Documentation][] folder for a framework +overview and more in-depth information about how it all works in practice. + +## New to ReactiveCocoa? + +ReactiveCocoa is documented like crazy, and there's a wealth of introductory +material available to explain what RAC is and how you can use it. + +If you want to learn more, we recommend these resources, roughly in order: + + 1. [Introduction](#introduction) + 1. [When to use ReactiveCocoa](#when-to-use-reactivecocoa) + 1. [Framework Overview][] + 1. [Basic Operators][] + 1. [Header documentation](ReactiveCocoaFramework/ReactiveCocoa) + 1. Previously answered [Stack Overflow](https://github.com/ReactiveCocoa/ReactiveCocoa/wiki) + questions and [GitHub issues](https://github.com/ReactiveCocoa/ReactiveCocoa/issues?labels=question&state=closed) + 1. The rest of the [Documentation][] folder + +## Introduction + +ReactiveCocoa is an implementation of [functional reactive +programming](http://blog.maybeapps.com/post/42894317939/input-and-output). +Rather than using mutable variables which are replaced and modified in-place, +RAC provides signals (represented by `RACSignal`) that capture present and +future values. + +By chaining, combining, and reacting to signals, software can be written +declaratively, without the need for code that continually observes and updates +values. + +For example, a text field can be bound to the latest time, even as it changes, +instead of using additional code that watches the clock and updates the +text field every second. It works much like KVO, but with blocks instead of +overriding `-observeValueForKeyPath:ofObject:change:context:`. + +Signals can also represent asynchronous operations, much like [futures and +promises][]. This greatly simplifies asynchronous software, including networking +code. + +One of the major advantages of RAC is that it provides a single, unified +approach to dealing with asynchronous behaviors, including delegate methods, +callback blocks, target-action mechanisms, notifications, and KVO. + +Here's a simple example: + +```objc +// When self.username changes, log the new name to the console. +// +// RACObserve(self, username) creates a new RACSignal that sends the current +// value of self.username, then the new value whenever it changes. +// -subscribeNext: will execute the block whenever the signal sends a value. +[RACObserve(self, username) subscribeNext:^(NSString *newName) { + NSLog(@"%@", newName); +}]; +``` + +But unlike KVO notifications, signals can be chained together and operated on: + +```objc +// Only log names that start with "j". +// +// -filter returns a new RACSignal that only sends a new value when its block +// returns YES. +[[RACObserve(self, username) + filter:^(NSString *newName) { + return [newName hasPrefix:@"j"]; + }] + subscribeNext:^(NSString *newName) { + NSLog(@"%@", newName); + }]; +``` + +Signals can also be used to derive state. Instead of observing properties and +setting other properties in response to the new values, RAC makes it possible to +express properties in terms of signals and operations: + +```objc +// Create a one-way binding so that self.createEnabled will be +// true whenever self.password and self.passwordConfirmation +// are equal. +// +// RAC() is a macro that makes the binding look nicer. +// +// +combineLatest:reduce: takes an array of signals, executes the block with the +// latest value from each signal whenever any of them changes, and returns a new +// RACSignal that sends the return value of that block as values. +RAC(self, createEnabled) = [RACSignal + combineLatest:@[ RACObserve(self, password), RACObserve(self, passwordConfirmation) ] + reduce:^(NSString *password, NSString *passwordConfirm) { + return @([passwordConfirm isEqualToString:password]); + }]; +``` + +Signals can be built on any stream of values over time, not just KVO. For +example, they can also represent button presses: + +```objc +// Log a message whenever the button is pressed. +// +// RACCommand creates signals to represent UI actions. Each signal can +// represent a button press, for example, and have additional work associated +// with it. +// +// -rac_command is an addition to NSButton. The button will send itself on that +// command whenever it's pressed. +self.button.rac_command = [[RACCommand alloc] initWithSignalBlock:^(id _) { + NSLog(@"button was pressed!"); + return [RACSignal empty]; +}] +``` + +Or asynchronous network operations: + +```objc +// Hook up a "Log in" button to log in over the network. +// +// This block will be run whenever the login command is executed, starting +// the login process. +self.loginCommand = [[RACCommand alloc] initWithSignalBlock:^(id sender) { + // The hypothetical -logIn method returns a signal that sends a value when + // the network request finishes. + return [client logIn]; +}]; + +// -executionSignals returns a signal that includes the signals returned from +// the above block, one for each time the command is executed. +[self.loginCommand.executionSignals subscribeNext:^(RACSignal *loginSignal) { + // Log a message whenever we log in successfully. + [loginSignal subscribeCompleted:^(id _) { + NSLog(@"Logged in successfully!"); + }]; +}]; + +// Execute the login command when the button is pressed. +self.loginButton.rac_command = self.loginCommand; +``` + +Signals can also represent timers, other UI events, or anything else that +changes over time. + +Using signals for asynchronous operations makes it possible to build up more +complex behavior by chaining and transforming those signals. Work can easily be +trigged after a group of operations completes: + +```objc +// Perform 2 network operations and log a message to the console when they are +// both completed. +// +// +merge: takes an array of signals and returns a new RACSignal that passes +// through the values of all of the signals and completes when all of the +// signals complete. +// +// -subscribeCompleted: will execute the block when the signal completes. +[[RACSignal + merge:@[ [client fetchUserRepos], [client fetchOrgRepos] ]] + subscribeCompleted:^{ + NSLog(@"They're both done!"); + }]; +``` + +Signals can be chained to sequentially execute asynchronous operations, instead +of nesting callbacks with blocks. This is similar to how [futures and promises][] +are usually used: + +```objc +// Log in the user, then load any cached messages, then fetch the remaining +// messages from the server. After that's all done, log a message to the +// console. +// +// The hypothetical -logInUser methods returns a signal that completes after +// logging in. +// +// -flattenMap: will execute its block whenever the signal sends a value, and +// return a new RACSignal that merges all of the signals returned from the block +// into a single signal. +[[[[client + logInUser] + flattenMap:^(User *user) { + // Return a signal that loads cached messages for the user. + return [client loadCachedMessagesForUser:user]; + }] + flattenMap:^(NSArray *messages) { + // Return a signal that fetches any remaining messages. + return [client fetchMessagesAfterMessage:messages.lastObject]; + }] + subscribeNext:(NSArray *newMessages) { + NSLog(@"New messages: %@", newMessages); + } completed:^{ + NSLog(@"Fetched all messages."); + }]; +``` + +RAC even makes it easy to bind to the result of an asynchronous operation: + +```objc +// Create a one-way binding so that self.imageView.image will be set the user's +// avatar as soon as it's downloaded. +// +// The hypothetical -fetchUserWithUsername: method returns a signal which sends +// the user. +// +// -deliverOn: creates new signals that will do their work on other queues. In +// this example, it's used to move work to a background queue and then back to the main thread. +// +// -map: calls its block with each user that's fetched and returns a new +// RACSignal that sends values returned from the block. +RAC(self.imageView, image) = [[[[client + fetchUserWithUsername:@"joshaber"] + deliverOn:[RACScheduler scheduler]] + map:^(User *user) { + // Download the avatar (this is done on a background queue). + return [[NSImage alloc] initWithContentsOfURL:user.avatarURL]; + }] + // Now the assignment will be done on the main thread. + deliverOn:RACScheduler.mainThreadScheduler]; +``` + +That demonstrates some of what RAC can do, but it doesn't demonstrate why RAC is +so powerful. It's hard to appreciate RAC from README-sized examples, but it +makes it possible to write code with less state, less boilerplate, better code +locality, and better expression of intent. + +For more sample code, check out the [Mac][GHAPIDemo] or [iOS][RACiOSDemo] demos. +Additional information about RAC can be found in the [Documentation][] folder. + +## When to use ReactiveCocoa + +Upon first glance, ReactiveCocoa is very abstract, and it can be difficult to +understand how to apply it to concrete problems. + +Here are some of the use cases that RAC excels at. + +### Handling asynchronous or event-driven data sources + +Much of Cocoa programming is focused on reacting to user events or changes in +application state. Code that deals with such events can quickly become very +complex and spaghetti-like, with lots of callbacks and state variables to handle +ordering issues. + +Patterns that seem superficially different, like UI callbacks, network +responses, and KVO notifications, actually have a lot in common. [RACSignal][] +unifies all these different APIs so that they can be composed together and +manipulated in the same way. + +For example, the following code: + +```objc +- (void)viewDidLoad { + [super viewDidLoad]; + + [self.usernameTextField addTarget:self action:@selector(updateLogInButton) forControlEvents:UIControlEventEditingChanged]; + [self.passwordTextField addTarget:self action:@selector(updateLogInButton) forControlEvents:UIControlEventEditingChanged]; + [self.logInButton addTarget:self action:@selector(logInPressed:) forControlEvents:UIControlEventTouchUpInside]; +} + +- (void)updateLogInButton { + BOOL textFieldsNonEmpty = self.usernameTextField.text.length > 0 && self.passwordTextField.text.length > 0; + BOOL readyToLogIn = ![[LoginManager sharedManager] isLoggingIn] && !self.loggedIn; + self.logInButton.enabled = textFieldsNonEmpty && readyToLogIn; +} + +- (IBAction)logInPressed:(UIButton *)sender { + [[LoginManager sharedManager] + logInWithUsername:self.usernameTextField.text + password:self.passwordTextField.text + success:^{ + self.loggedIn = YES; + } failure:^(NSError *error) { + [self presentError:error]; + }]; +} + +- (void)loggedOut:(NSNotification *)notification { + self.loggedIn = NO; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { + if ([object isEqual:[LoginManager sharedManager]] && [keyPath isEqualToString:@"loggingIn"]) { + [self updateLogInButton]; + } +} +``` + +… could be expressed in RAC like so: + +```objc +- (void)viewDidLoad { + [super viewDidLoad]; + + @weakify(self); + + RAC(self.logInButton, enabled) = [RACSignal + combineLatest:@[ + self.usernameTextField.rac_textSignal, + self.passwordTextField.rac_textSignal, + RACObserve(LoginManager.sharedManager, loggingIn), + RACObserve(self, loggedIn) + ] reduce:^(NSString *username, NSString *password, NSNumber *loggingIn, NSNumber *loggedIn) { + return @(username.length > 0 && password.length > 0 && !loggingIn.boolValue && !loggedIn.boolValue); + }]; + + [[self.logInButton rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(UIButton *sender) { + @strongify(self); + + RACSignal *loginSignal = [[LoginManager sharedManager] + logInWithUsername:self.usernameTextField.text + password:self.passwordTextField.text]; + + [loginSignal subscribeError:^(NSError *error) { + @strongify(self); + [self presentError:error]; + } completed:^{ + @strongify(self); + self.loggedIn = YES; + }]; + }]; + + RAC(self, loggedIn) = [[NSNotificationCenter.defaultCenter + rac_addObserverForName:UserDidLogOutNotification object:nil] + mapReplace:@NO]; +} +``` + +### Chaining dependent operations + +Dependencies are most often found in network requests, where a previous request +to the server needs to complete before the next one can be constructed, and so +on: + +```objc +[client logInWithSuccess:^{ + [client loadCachedMessagesWithSuccess:^(NSArray *messages) { + [client fetchMessagesAfterMessage:messages.lastObject success:^(NSArray *nextMessages) { + NSLog(@"Fetched all messages."); + } failure:^(NSError *error) { + [self presentError:error]; + }]; + } failure:^(NSError *error) { + [self presentError:error]; + }]; +} failure:^(NSError *error) { + [self presentError:error]; +}]; +``` + +ReactiveCocoa makes this pattern particularly easy: + +```objc +[[[[client logIn] + sequenceNext:^{ + return [client loadCachedMessages]; + }] + flattenMap:^(NSArray *messages) { + return [client fetchMessagesAfterMessage:messages.lastObject]; + }] + subscribeError:^(NSError *error) { + [self presentError:error]; + } completed:^{ + NSLog(@"Fetched all messages."); + }]; +``` + +### Parallelizing independent work + +Working with independent data sets in parallel and then combining them into +a final result is non-trivial in Cocoa, and often involves a lot of +synchronization: + +```objc +__block NSArray *databaseObjects; +__block NSArray *fileContents; + +NSOperationQueue *backgroundQueue = [[NSOperationQueue alloc] init]; +NSBlockOperation *databaseOperation = [NSBlockOperation blockOperationWithBlock:^{ + databaseObjects = [databaseClient fetchObjectsMatchingPredicate:predicate]; +}]; + +NSBlockOperation *filesOperation = [NSBlockOperation blockOperationWithBlock:^{ + NSMutableArray *filesInProgress = [NSMutableArray array]; + for (NSString *path in files) { + [filesInProgress addObject:[NSData dataWithContentsOfFile:path]]; + } + + fileContents = [filesInProgress copy]; +}]; + +NSBlockOperation *finishOperation = [NSBlockOperation blockOperationWithBlock:^{ + [self finishProcessingDatabaseObjects:databaseObjects fileContents:fileContents]; + NSLog(@"Done processing"); +}]; + +[finishOperation addDependency:databaseOperation]; +[finishOperation addDependency:filesOperation]; +[backgroundQueue addOperation:databaseOperation]; +[backgroundQueue addOperation:filesOperation]; +[backgroundQueue addOperation:finishOperation]; +``` + +The above code can be cleaned up and optimized by simply composing signals: + +```objc +RACSignal *databaseSignal = [[databaseClient + fetchObjectsMatchingPredicate:predicate] + subscribeOn:[RACScheduler scheduler]]; + +RACSignal *fileSignal = [RACSignal startEagerlyWithScheduler:[RACScheduler scheduler] block:^(id subscriber) { + NSMutableArray *filesInProgress = [NSMutableArray array]; + for (NSString *path in files) { + [filesInProgress addObject:[NSData dataWithContentsOfFile:path]]; + } + + [subscriber sendNext:[filesInProgress copy]]; + [subscriber sendCompleted]; +}]; + +[[RACSignal + combineLatest:@[ databaseSignal, fileSignal ] + reduce:^ id (NSArray *databaseObjects, NSArray *fileContents) { + [self finishProcessingDatabaseObjects:databaseObjects fileContents:fileContents]; + return nil; + }] + subscribeCompleted:^{ + NSLog(@"Done processing"); + }]; +``` + +### Simplifying collection transformations + +Higher-order functions like `map`, `filter`, `fold`/`reduce` are sorely missing +from Foundation, leading to loop-focused code like this: + +```objc +NSMutableArray *results = [NSMutableArray array]; +for (NSString *str in strings) { + if (str.length < 2) { + continue; + } + + NSString *newString = [str stringByAppendingString:@"foobar"]; + [results addObject:newString]; +} +``` + +[RACSequence][] allows any Cocoa collection to be manipulated in a uniform and +declarative way: + +```objc +RACSequence *results = [[strings.rac_sequence + filter:^ BOOL (NSString *str) { + return str.length >= 2; + }] + map:^(NSString *str) { + return [str stringByAppendingString:@"foobar"]; + }]; +``` + +## System Requirements + +ReactiveCocoa supports OS X 10.7+ and iOS 5.0+. + +## Importing ReactiveCocoa + +To add RAC to your application: + + 1. Add the ReactiveCocoa repository as a submodule of your application's + repository. + 1. Run `script/bootstrap` from within the ReactiveCocoa folder. + 1. Drag and drop `ReactiveCocoaFramework/ReactiveCocoa.xcodeproj` into your + application's Xcode project or workspace. + 1. On the "Build Phases" tab of your application target, add RAC to the "Link + Binary With Libraries" phase. + * **On iOS**, add `libReactiveCocoa-iOS.a`. + * **On OS X**, add `ReactiveCocoa.framework`. RAC must also be added to any + "Copy Frameworks" build phase. If you don't already have one, simply add + a "Copy Files" build phase and target the "Frameworks" destination. + 1. Add `"$(BUILD_ROOT)/../IntermediateBuildFilesPath/UninstalledProducts/include" + $(inherited)` to the "Header Search Paths" build setting (this is only + necessary for archive builds, but it has no negative effect otherwise). + 1. **For iOS targets**, add `-ObjC` to the "Other Linker Flags" build setting. + 1. **If you added RAC to a project (not a workspace)**, you will also need to + add the appropriate RAC target to the "Target Dependencies" of your + application. + +If you would prefer to use [CocoaPods](http://cocoapods.org), there are some +[ReactiveCocoa +podspecs](https://github.com/CocoaPods/Specs/tree/master/ReactiveCocoa) that +have been generously contributed by third parties. + +To see a project already set up with RAC, check out the [Mac][GHAPIDemo] or +[iOS][RACiOSDemo] demos. + +## More Info + +ReactiveCocoa is based on .NET's [Reactive +Extensions](http://msdn.microsoft.com/en-us/data/gg577609) (Rx). Most of the +principles of Rx apply to RAC as well. There are some really good Rx resources +out there: + +* [Reactive Extensions MSDN entry](http://msdn.microsoft.com/en-us/library/hh242985.aspx) +* [Reactive Extensions for .NET Introduction](http://leecampbell.blogspot.com/2010/08/reactive-extensions-for-net.html) +* [Rx - Channel 9 videos](http://channel9.msdn.com/tags/Rx/) +* [Reactive Extensions wiki](http://rxwiki.wikidot.com/) +* [101 Rx Samples](http://rxwiki.wikidot.com/101samples) +* [Programming Reactive Extensions and LINQ](http://www.amazon.com/Programming-Reactive-Extensions-Jesse-Liberty/dp/1430237473) + +RAC and Rx are both implementations of functional reactive programming. Here are +some more resources for learning about FRP: + +* [What is FRP? - Elm Language](http://elm-lang.org/learn/What-is-FRP.elm) +* [What is Functional Reactive Programming - Stack Overflow](http://stackoverflow.com/questions/1028250/what-is-functional-reactive-programming/1030631#1030631) +* [Escape from Callback Hell](http://elm-lang.org/learn/Escape-from-Callback-Hell.elm) + +[Basic Operators]: Documentation/BasicOperators.md +[Documentation]: Documentation +[Framework Overview]: Documentation/FrameworkOverview.md +[Functional Reactive Programming]: http://en.wikipedia.org/wiki/Functional_reactive_programming +[GHAPIDemo]: https://github.com/ReactiveCocoa/GHAPIDemo +[Memory Management]: Documentation/MemoryManagement.md +[NSObject+RACLifting]: ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACLifting.h +[RACDisposable]: ReactiveCocoaFramework/ReactiveCocoa/RACDisposable.h +[RACEvent]: ReactiveCocoaFramework/ReactiveCocoa/RACEvent.h +[RACMulticastConnection]: ReactiveCocoaFramework/ReactiveCocoa/RACMulticastConnection.h +[RACScheduler]: ReactiveCocoaFramework/ReactiveCocoa/RACScheduler.h +[RACSequence]: ReactiveCocoaFramework/ReactiveCocoa/RACSequence.h +[RACSignal+Operations]: ReactiveCocoaFramework/ReactiveCocoa/RACSignal+Operations.h +[RACSignal]: ReactiveCocoaFramework/ReactiveCocoa/RACSignal.h +[RACStream]: ReactiveCocoaFramework/ReactiveCocoa/RACStream.h +[RACSubscriber]: ReactiveCocoaFramework/ReactiveCocoa/RACSubscriber.h +[RAC]: ReactiveCocoaFramework/ReactiveCocoa/RACSubscriptingAssignmentTrampoline.h +[RACiOSDemo]: https://github.com/ReactiveCocoa/RACiOSDemo +[futures and promises]: http://en.wikipedia.org/wiki/Futures_and_promises diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSArray+RACSequenceAdditions.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSArray+RACSequenceAdditions.h new file mode 100644 index 00000000..d2d0b3fe --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSArray+RACSequenceAdditions.h @@ -0,0 +1,20 @@ +// +// NSArray+RACSequenceAdditions.h +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2012-10-29. +// Copyright (c) 2012 GitHub. All rights reserved. +// + +#import + +@class RACSequence; + +@interface NSArray (RACSequenceAdditions) + +/// Creates and returns a sequence corresponding to the receiver. +/// +/// Mutating the receiver will not affect the sequence after it's been created. +@property (nonatomic, copy, readonly) RACSequence *rac_sequence; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSArray+RACSequenceAdditions.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSArray+RACSequenceAdditions.m new file mode 100644 index 00000000..ca2b9511 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSArray+RACSequenceAdditions.m @@ -0,0 +1,18 @@ +// +// NSArray+RACSequenceAdditions.m +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2012-10-29. +// Copyright (c) 2012 GitHub. All rights reserved. +// + +#import "NSArray+RACSequenceAdditions.h" +#import "RACArraySequence.h" + +@implementation NSArray (RACSequenceAdditions) + +- (RACSequence *)rac_sequence { + return [RACArraySequence sequenceWithArray:self offset:0]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSData+RACSupport.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSData+RACSupport.h new file mode 100644 index 00000000..42198a6b --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSData+RACSupport.h @@ -0,0 +1,22 @@ +// +// NSData+RACSupport.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 5/11/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import + +@class RACSignal; +@class RACScheduler; + +@interface NSData (RACSupport) + +// Read the data at the URL using -[NSData initWithContentsOfURL:options:error:]. +// Sends the data or the error. +// +// scheduler - cannot be nil. ++ (RACSignal *)rac_readContentsOfURL:(NSURL *)URL options:(NSDataReadingOptions)options scheduler:(RACScheduler *)scheduler; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSData+RACSupport.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSData+RACSupport.m new file mode 100644 index 00000000..227eb4de --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSData+RACSupport.m @@ -0,0 +1,35 @@ +// +// NSData+RACSupport.m +// ReactiveCocoa +// +// Created by Josh Abernathy on 5/11/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "NSData+RACSupport.h" +#import "RACReplaySubject.h" +#import "RACScheduler.h" + +@implementation NSData (RACSupport) + ++ (RACSignal *)rac_readContentsOfURL:(NSURL *)URL options:(NSDataReadingOptions)options scheduler:(RACScheduler *)scheduler { + NSCParameterAssert(scheduler != nil); + + RACReplaySubject *subject = [RACReplaySubject subject]; + [subject setNameWithFormat:@"+rac_readContentsOfURL: %@ options: %lu scheduler: %@", URL, (unsigned long)options, scheduler]; + + [scheduler schedule:^{ + NSError *error = nil; + NSData *data = [[NSData alloc] initWithContentsOfURL:URL options:options error:&error]; + if(data == nil) { + [subject sendError:error]; + } else { + [subject sendNext:data]; + [subject sendCompleted]; + } + }]; + + return subject; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSDictionary+RACSequenceAdditions.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSDictionary+RACSequenceAdditions.h new file mode 100644 index 00000000..4871fe72 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSDictionary+RACSequenceAdditions.h @@ -0,0 +1,31 @@ +// +// NSDictionary+RACSequenceAdditions.h +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2012-10-29. +// Copyright (c) 2012 GitHub. All rights reserved. +// + +#import + +@class RACSequence; + +@interface NSDictionary (RACSequenceAdditions) + +/// Creates and returns a sequence of RACTuple key/value pairs. The key will be +/// the first element in the tuple, and the value will be the second. +/// +/// Mutating the receiver will not affect the sequence after it's been created. +@property (nonatomic, copy, readonly) RACSequence *rac_sequence; + +/// Creates and returns a sequence corresponding to the keys in the receiver. +/// +/// Mutating the receiver will not affect the sequence after it's been created. +@property (nonatomic, copy, readonly) RACSequence *rac_keySequence; + +/// Creates and returns a sequence corresponding to the values in the receiver. +/// +/// Mutating the receiver will not affect the sequence after it's been created. +@property (nonatomic, copy, readonly) RACSequence *rac_valueSequence; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSDictionary+RACSequenceAdditions.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSDictionary+RACSequenceAdditions.m new file mode 100644 index 00000000..192e6fde --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSDictionary+RACSequenceAdditions.m @@ -0,0 +1,34 @@ +// +// NSDictionary+RACSequenceAdditions.m +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2012-10-29. +// Copyright (c) 2012 GitHub. All rights reserved. +// + +#import "NSDictionary+RACSequenceAdditions.h" +#import "NSArray+RACSequenceAdditions.h" +#import "RACSequence.h" +#import "RACTuple.h" + +@implementation NSDictionary (RACSequenceAdditions) + +- (RACSequence *)rac_sequence { + NSDictionary *immutableDict = [self copy]; + + // TODO: First class support for dictionary sequences. + return [immutableDict.allKeys.rac_sequence map:^(id key) { + id value = immutableDict[key]; + return [RACTuple tupleWithObjects:key, value, nil]; + }]; +} + +- (RACSequence *)rac_keySequence { + return self.allKeys.rac_sequence; +} + +- (RACSequence *)rac_valueSequence { + return self.allValues.rac_sequence; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSEnumerator+RACSequenceAdditions.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSEnumerator+RACSequenceAdditions.h new file mode 100644 index 00000000..1d8fc845 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSEnumerator+RACSequenceAdditions.h @@ -0,0 +1,20 @@ +// +// NSEnumerator+RACSequenceAdditions.h +// ReactiveCocoa +// +// Created by Uri Baghin on 07/01/2013. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import + +@class RACSequence; + +@interface NSEnumerator (RACSequenceAdditions) + +/// Creates and returns a sequence corresponding to the receiver. +/// +/// The receiver is exhausted lazily as the sequence is enumerated. +@property (nonatomic, copy, readonly) RACSequence *rac_sequence; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSEnumerator+RACSequenceAdditions.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSEnumerator+RACSequenceAdditions.m new file mode 100644 index 00000000..aa56eaaa --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSEnumerator+RACSequenceAdditions.m @@ -0,0 +1,22 @@ +// +// NSEnumerator+RACSequenceAdditions.m +// ReactiveCocoa +// +// Created by Uri Baghin on 07/01/2013. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "NSEnumerator+RACSequenceAdditions.h" +#import "RACSequence.h" + +@implementation NSEnumerator (RACSequenceAdditions) + +- (RACSequence *)rac_sequence { + return [RACSequence sequenceWithHeadBlock:^{ + return [self nextObject]; + } tailBlock:^{ + return self.rac_sequence; + }]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSFileHandle+RACSupport.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSFileHandle+RACSupport.h new file mode 100644 index 00000000..985398de --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSFileHandle+RACSupport.h @@ -0,0 +1,19 @@ +// +// NSFileHandle+RACSupport.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 5/10/12. +// Copyright (c) 2012 GitHub. All rights reserved. +// + +#import + +@class RACSignal; + +@interface NSFileHandle (RACSupport) + +// Read any available data in the background and send it. Completes when data +// length is <= 0. +- (RACSignal *)rac_readInBackground; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSFileHandle+RACSupport.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSFileHandle+RACSupport.m new file mode 100644 index 00000000..a258789d --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSFileHandle+RACSupport.m @@ -0,0 +1,39 @@ +// +// NSFileHandle+RACSupport.m +// ReactiveCocoa +// +// Created by Josh Abernathy on 5/10/12. +// Copyright (c) 2012 GitHub. All rights reserved. +// + +#import "NSFileHandle+RACSupport.h" +#import "NSNotificationCenter+RACSupport.h" +#import "RACReplaySubject.h" +#import "RACDisposable.h" + +@implementation NSFileHandle (RACSupport) + +- (RACSignal *)rac_readInBackground { + RACReplaySubject *subject = [RACReplaySubject subject]; + [subject setNameWithFormat:@"%@ -rac_readInBackground", self]; + + RACSignal *dataNotification = [[[NSNotificationCenter defaultCenter] rac_addObserverForName:NSFileHandleReadCompletionNotification object:self] map:^(NSNotification *note) { + return [note.userInfo objectForKey:NSFileHandleNotificationDataItem]; + }]; + + __block RACDisposable *subscription = [dataNotification subscribeNext:^(NSData *data) { + if(data.length > 0) { + [subject sendNext:data]; + [self readInBackgroundAndNotify]; + } else { + [subject sendCompleted]; + [subscription dispose]; + } + }]; + + [self readInBackgroundAndNotify]; + + return subject; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSInvocation+RACTypeParsing.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSInvocation+RACTypeParsing.h new file mode 100644 index 00000000..4f734908 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSInvocation+RACTypeParsing.h @@ -0,0 +1,55 @@ +// +// NSInvocation+RACTypeParsing.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 11/17/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import + +@class RACTuple; + +@interface NSInvocation (RACTypeParsing) + +/// Sets the argument for the invocation at the given index by unboxing the given +/// object based on the type signature of the argument. +/// +/// This does not support C arrays or unions. +/// +/// Note that calling this on a char * or const char * argument can cause all +/// arguments to be retained. +/// +/// object - The object to unbox and set as the argument. +/// index - The index of the argument to set. +- (void)rac_setArgument:(id)object atIndex:(NSUInteger)index; + +/// Gets the argument for the invocation at the given index based on the +/// invocation's method signature. The value is then wrapped in the appropriate +/// object type. +/// +/// This does not support C arrays or unions. +/// +/// index - The index of the argument to get. +/// +/// Returns the argument of the invocation, wrapped in an object. +- (id)rac_argumentAtIndex:(NSUInteger)index; + +/// Arguments tuple for the invocation. +/// +/// The arguments tuple excludes implicit variables `self` and `_cmd`. +/// +/// See -rac_argumentAtIndex: and -rac_setArgumentAtIndex: for further +/// description of the underlying behavior. +@property (nonatomic, copy) RACTuple *rac_argumentsTuple; + +/// Gets the return value from the invocation based on the invocation's method +/// signature. The value is then wrapped in the appropriate object type. +/// +/// This does not support C arrays or unions. +/// +/// Returns the return value of the invocation, wrapped in an object. Voids are +/// returned as `RACUnit.defaultUnit`. +- (id)rac_returnValue; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSInvocation+RACTypeParsing.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSInvocation+RACTypeParsing.m new file mode 100644 index 00000000..a5318e70 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSInvocation+RACTypeParsing.m @@ -0,0 +1,232 @@ +// +// NSInvocation+RACTypeParsing.m +// ReactiveCocoa +// +// Created by Josh Abernathy on 11/17/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "NSInvocation+RACTypeParsing.h" +#import "RACTuple.h" +#import "RACUnit.h" +#import + +@implementation NSInvocation (RACTypeParsing) + +- (void)rac_setArgument:(id)object atIndex:(NSUInteger)index { +#define PULL_AND_SET(type, selector) \ + do { \ + type val = [object selector]; \ + [self setArgument:&val atIndex:(NSInteger)index]; \ + } while(0) + + const char *argType = [self.methodSignature getArgumentTypeAtIndex:index]; + // Skip const type qualifier. + if (argType[0] == 'r') { + argType++; + } + + if (strcmp(argType, @encode(id)) == 0 || strcmp(argType, @encode(Class)) == 0) { + [self setArgument:&object atIndex:(NSInteger)index]; + } else if (strcmp(argType, @encode(char)) == 0) { + PULL_AND_SET(char, charValue); + } else if (strcmp(argType, @encode(int)) == 0) { + PULL_AND_SET(int, intValue); + } else if (strcmp(argType, @encode(short)) == 0) { + PULL_AND_SET(short, shortValue); + } else if (strcmp(argType, @encode(long)) == 0) { + PULL_AND_SET(long, longValue); + } else if (strcmp(argType, @encode(long long)) == 0) { + PULL_AND_SET(long long, longLongValue); + } else if (strcmp(argType, @encode(unsigned char)) == 0) { + PULL_AND_SET(unsigned char, unsignedCharValue); + } else if (strcmp(argType, @encode(unsigned int)) == 0) { + PULL_AND_SET(unsigned int, unsignedIntValue); + } else if (strcmp(argType, @encode(unsigned short)) == 0) { + PULL_AND_SET(unsigned short, unsignedShortValue); + } else if (strcmp(argType, @encode(unsigned long)) == 0) { + PULL_AND_SET(unsigned long, unsignedLongValue); + } else if (strcmp(argType, @encode(unsigned long long)) == 0) { + PULL_AND_SET(unsigned long long, unsignedLongLongValue); + } else if (strcmp(argType, @encode(float)) == 0) { + PULL_AND_SET(float, floatValue); + } else if (strcmp(argType, @encode(double)) == 0) { + PULL_AND_SET(double, doubleValue); + } else if (strcmp(argType, @encode(BOOL)) == 0) { + PULL_AND_SET(BOOL, boolValue); + } else if (strcmp(argType, @encode(char *)) == 0) { + const char *cString = [object UTF8String]; + [self setArgument:&cString atIndex:(NSInteger)index]; + [self retainArguments]; + } else if (strcmp(argType, @encode(void (^)(void))) == 0) { + [self setArgument:&object atIndex:(NSInteger)index]; + } else { + NSCParameterAssert([object isKindOfClass:NSValue.class]); + + NSUInteger valueSize = 0; + NSGetSizeAndAlignment([object objCType], &valueSize, NULL); + +#if DEBUG + NSUInteger argSize = 0; + NSGetSizeAndAlignment(argType, &argSize, NULL); + NSCAssert(valueSize == argSize, @"Value size does not match argument size in -rac_setArgument: %@ atIndex: %lu", object, (unsigned long)index); +#endif + + unsigned char valueBytes[valueSize]; + [object getValue:valueBytes]; + + [self setArgument:valueBytes atIndex:(NSInteger)index]; + } + +#undef PULL_AND_SET +} + +- (id)rac_argumentAtIndex:(NSUInteger)index { +#define WRAP_AND_RETURN(type) \ + do { \ + type val = 0; \ + [self getArgument:&val atIndex:(NSInteger)index]; \ + return @(val); \ + } while (0) + + const char *argType = [self.methodSignature getArgumentTypeAtIndex:index]; + // Skip const type qualifier. + if (argType[0] == 'r') { + argType++; + } + + if (strcmp(argType, @encode(id)) == 0 || strcmp(argType, @encode(Class)) == 0) { + __autoreleasing id returnObj; + [self getArgument:&returnObj atIndex:(NSInteger)index]; + return returnObj; + } else if (strcmp(argType, @encode(char)) == 0) { + WRAP_AND_RETURN(char); + } else if (strcmp(argType, @encode(int)) == 0) { + WRAP_AND_RETURN(int); + } else if (strcmp(argType, @encode(short)) == 0) { + WRAP_AND_RETURN(short); + } else if (strcmp(argType, @encode(long)) == 0) { + WRAP_AND_RETURN(long); + } else if (strcmp(argType, @encode(long long)) == 0) { + WRAP_AND_RETURN(long long); + } else if (strcmp(argType, @encode(unsigned char)) == 0) { + WRAP_AND_RETURN(unsigned char); + } else if (strcmp(argType, @encode(unsigned int)) == 0) { + WRAP_AND_RETURN(unsigned int); + } else if (strcmp(argType, @encode(unsigned short)) == 0) { + WRAP_AND_RETURN(unsigned short); + } else if (strcmp(argType, @encode(unsigned long)) == 0) { + WRAP_AND_RETURN(unsigned long); + } else if (strcmp(argType, @encode(unsigned long long)) == 0) { + WRAP_AND_RETURN(unsigned long long); + } else if (strcmp(argType, @encode(float)) == 0) { + WRAP_AND_RETURN(float); + } else if (strcmp(argType, @encode(double)) == 0) { + WRAP_AND_RETURN(double); + } else if (strcmp(argType, @encode(BOOL)) == 0) { + WRAP_AND_RETURN(BOOL); + } else if (strcmp(argType, @encode(char *)) == 0) { + WRAP_AND_RETURN(const char *); + } else if (strcmp(argType, @encode(void (^)(void))) == 0) { + __unsafe_unretained id block = nil; + [self getArgument:&block atIndex:(NSInteger)index]; + return [block copy]; + } else { + NSUInteger valueSize = 0; + NSGetSizeAndAlignment(argType, &valueSize, NULL); + + unsigned char valueBytes[valueSize]; + [self getArgument:valueBytes atIndex:(NSInteger)index]; + + return [NSValue valueWithBytes:valueBytes objCType:argType]; + } + + return nil; + +#undef WRAP_AND_RETURN +} + +- (RACTuple *)rac_argumentsTuple { + NSUInteger numberOfArguments = self.methodSignature.numberOfArguments; + NSMutableArray *argumentsArray = [NSMutableArray arrayWithCapacity:numberOfArguments - 2]; + for (NSUInteger index = 2; index < numberOfArguments; index++) { + [argumentsArray addObject:[self rac_argumentAtIndex:index] ?: RACTupleNil.tupleNil]; + } + + return [RACTuple tupleWithObjectsFromArray:argumentsArray]; +} + +- (void)setRac_argumentsTuple:(RACTuple *)arguments { + NSCAssert(arguments.count == self.methodSignature.numberOfArguments - 2, @"Number of supplied arguments (%lu), does not match the number expected by the signature (%lu)", (unsigned long)arguments.count, (unsigned long)self.methodSignature.numberOfArguments - 2); + + NSUInteger index = 2; + for (id arg in arguments) { + [self rac_setArgument:(arg == RACTupleNil.tupleNil ? nil : arg) atIndex:index]; + index++; + } +} + +- (id)rac_returnValue { +#define WRAP_AND_RETURN(type) \ + do { \ + type val = 0; \ + [self getReturnValue:&val]; \ + return @(val); \ + } while (0) + + const char *returnType = self.methodSignature.methodReturnType; + // Skip const type qualifier. + if (returnType[0] == 'r') { + returnType++; + } + + if (strcmp(returnType, @encode(id)) == 0 || strcmp(returnType, @encode(Class)) == 0 || strcmp(returnType, @encode(void (^)(void))) == 0) { + __autoreleasing id returnObj; + [self getReturnValue:&returnObj]; + return returnObj; + } else if (strcmp(returnType, @encode(char)) == 0) { + WRAP_AND_RETURN(char); + } else if (strcmp(returnType, @encode(int)) == 0) { + WRAP_AND_RETURN(int); + } else if (strcmp(returnType, @encode(short)) == 0) { + WRAP_AND_RETURN(short); + } else if (strcmp(returnType, @encode(long)) == 0) { + WRAP_AND_RETURN(long); + } else if (strcmp(returnType, @encode(long long)) == 0) { + WRAP_AND_RETURN(long long); + } else if (strcmp(returnType, @encode(unsigned char)) == 0) { + WRAP_AND_RETURN(unsigned char); + } else if (strcmp(returnType, @encode(unsigned int)) == 0) { + WRAP_AND_RETURN(unsigned int); + } else if (strcmp(returnType, @encode(unsigned short)) == 0) { + WRAP_AND_RETURN(unsigned short); + } else if (strcmp(returnType, @encode(unsigned long)) == 0) { + WRAP_AND_RETURN(unsigned long); + } else if (strcmp(returnType, @encode(unsigned long long)) == 0) { + WRAP_AND_RETURN(unsigned long long); + } else if (strcmp(returnType, @encode(float)) == 0) { + WRAP_AND_RETURN(float); + } else if (strcmp(returnType, @encode(double)) == 0) { + WRAP_AND_RETURN(double); + } else if (strcmp(returnType, @encode(BOOL)) == 0) { + WRAP_AND_RETURN(BOOL); + } else if (strcmp(returnType, @encode(char *)) == 0) { + WRAP_AND_RETURN(const char *); + } else if (strcmp(returnType, @encode(void)) == 0) { + return RACUnit.defaultUnit; + } else { + NSUInteger valueSize = 0; + NSGetSizeAndAlignment(returnType, &valueSize, NULL); + + unsigned char valueBytes[valueSize]; + [self getReturnValue:valueBytes]; + + return [NSValue valueWithBytes:valueBytes objCType:returnType]; + } + + return nil; + +#undef WRAP_AND_RETURN +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSNotificationCenter+RACSupport.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSNotificationCenter+RACSupport.h new file mode 100644 index 00000000..ddb3954d --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSNotificationCenter+RACSupport.h @@ -0,0 +1,18 @@ +// +// NSNotificationCenter+RACSupport.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 5/10/12. +// Copyright (c) 2012 GitHub. All rights reserved. +// + +#import + +@class RACSignal; + +@interface NSNotificationCenter (RACSupport) + +// Sends the NSNotification every time the notification is posted. +- (RACSignal *)rac_addObserverForName:(NSString *)notificationName object:(id)object; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSNotificationCenter+RACSupport.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSNotificationCenter+RACSupport.m new file mode 100644 index 00000000..4219ecd1 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSNotificationCenter+RACSupport.m @@ -0,0 +1,31 @@ +// +// NSNotificationCenter+RACSupport.m +// ReactiveCocoa +// +// Created by Josh Abernathy on 5/10/12. +// Copyright (c) 2012 GitHub. All rights reserved. +// + +#import "NSNotificationCenter+RACSupport.h" +#import "RACEXTScope.h" +#import "RACSignal.h" +#import "RACSubscriber.h" +#import "RACDisposable.h" + +@implementation NSNotificationCenter (RACSupport) + +- (RACSignal *)rac_addObserverForName:(NSString *)notificationName object:(id)object { + @unsafeify(object); + return [[RACSignal createSignal:^(id subscriber) { + @strongify(object); + id observer = [self addObserverForName:notificationName object:object queue:nil usingBlock:^(NSNotification *note) { + [subscriber sendNext:note]; + }]; + + return [RACDisposable disposableWithBlock:^{ + [self removeObserver:observer]; + }]; + }] setNameWithFormat:@"-rac_addObserverForName: %@ object: <%@: %p>", notificationName, [object class], object]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACDeallocating.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACDeallocating.h new file mode 100644 index 00000000..43196dfd --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACDeallocating.h @@ -0,0 +1,32 @@ +// +// NSObject+RACDeallocating.h +// ReactiveCocoa +// +// Created by Kazuo Koga on 2013/03/15. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import + +@class RACCompoundDisposable; +@class RACDisposable; +@class RACSignal; + +@interface NSObject (RACDeallocating) + +/// The compound disposable which will be disposed of when the receiver is +/// deallocated. +@property (atomic, readonly, strong) RACCompoundDisposable *rac_deallocDisposable; + +/// Returns a signal that will complete immediately before the receiver is fully deallocated. +- (RACSignal *)rac_willDeallocSignal; + +@end + +@interface NSObject (RACDeallocatingDeprecated) + +- (RACSignal *)rac_didDeallocSignal __attribute__((deprecated("Use -rac_willDeallocSignal"))); + +- (void)rac_addDeallocDisposable:(RACDisposable *)disposable __attribute__((deprecated("Add disposables to -rac_deallocDisposable instead"))); + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACDeallocating.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACDeallocating.m new file mode 100644 index 00000000..783ffcea --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACDeallocating.m @@ -0,0 +1,124 @@ +// +// NSObject+RACDeallocating.m +// ReactiveCocoa +// +// Created by Kazuo Koga on 2013/03/15. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "NSObject+RACDeallocating.h" +#import "RACCompoundDisposable.h" +#import "RACDisposable.h" +#import "RACSubject.h" +#import +#import + +static const void *RACObjectCompoundDisposable = &RACObjectCompoundDisposable; + +static NSMutableSet *swizzledClasses() { + static dispatch_once_t onceToken; + static NSMutableSet *swizzledClasses = nil; + dispatch_once(&onceToken, ^{ + swizzledClasses = [[NSMutableSet alloc] init]; + }); + + return swizzledClasses; +} + +static void swizzleDeallocIfNeeded(Class classToSwizzle) { + @synchronized (swizzledClasses()) { + NSString *className = NSStringFromClass(classToSwizzle); + if ([swizzledClasses() containsObject:className]) return; + + SEL deallocSelector = sel_registerName("dealloc"); + + __block void (*originalDealloc)(__unsafe_unretained id, SEL) = NULL; + + id newDealloc = ^(__unsafe_unretained id self) { + RACCompoundDisposable *compoundDisposable = objc_getAssociatedObject(self, RACObjectCompoundDisposable); + [compoundDisposable dispose]; + + if (originalDealloc == NULL) { + struct objc_super superInfo = { + .receiver = self, + .super_class = class_getSuperclass(classToSwizzle) + }; + + void (*msgSend)(struct objc_super *, SEL) = (__typeof__(msgSend))objc_msgSendSuper; + msgSend(&superInfo, deallocSelector); + } else { + originalDealloc(self, deallocSelector); + } + }; + + IMP newDeallocIMP = imp_implementationWithBlock(newDealloc); + + if (!class_addMethod(classToSwizzle, deallocSelector, newDeallocIMP, "v@:")) { + // The class already contains a method implementation. + Method deallocMethod = class_getInstanceMethod(classToSwizzle, deallocSelector); + + // We need to store original implementation before setting new implementation + // in case method is called at the time of setting. + originalDealloc = (__typeof__(originalDealloc))method_getImplementation(deallocMethod); + + // We need to store original implementation again, in case it just changed. + originalDealloc = (__typeof__(originalDealloc))method_setImplementation(deallocMethod, newDeallocIMP); + } + + [swizzledClasses() addObject:className]; + } +} + +@implementation NSObject (RACDeallocating) + +- (RACSignal *)rac_willDeallocSignal { + RACSubject *subject = [RACSubject subject]; + + [self.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ + [subject sendCompleted]; + }]]; + + return subject; +} + +- (RACCompoundDisposable *)rac_deallocDisposable { + @synchronized (self) { + RACCompoundDisposable *compoundDisposable = objc_getAssociatedObject(self, RACObjectCompoundDisposable); + if (compoundDisposable != nil) return compoundDisposable; + + swizzleDeallocIfNeeded(self.class); + + compoundDisposable = [RACCompoundDisposable compoundDisposable]; + objc_setAssociatedObject(self, RACObjectCompoundDisposable, compoundDisposable, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + + return compoundDisposable; + } +} + +@end + +@implementation NSObject (RACDeallocatingDeprecated) + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-implementations" + +- (RACSignal *)rac_didDeallocSignal { + RACSubject *subject = [RACSubject subject]; + + RACScopedDisposable *disposable = [[RACDisposable + disposableWithBlock:^{ + [subject sendCompleted]; + }] + asScopedDisposable]; + + objc_setAssociatedObject(self, (__bridge void *)disposable, disposable, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + return subject; +} + +- (void)rac_addDeallocDisposable:(RACDisposable *)disposable { + [self.rac_deallocDisposable addDisposable:disposable]; +} + +#pragma clang diagnostic pop + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACDescription.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACDescription.h new file mode 100644 index 00000000..ebb09aaa --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACDescription.h @@ -0,0 +1,20 @@ +// +// NSObject+RACDescription.h +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2013-05-13. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import + +@interface NSObject (RACDescription) + +/// A simplified description of the receiver for Debug builds, which does not +/// invoke -description (and thus should be much faster in many cases). +/// +/// This method will return a constant string in Release builds, skipping any +/// work. +- (NSString *)rac_description; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACDescription.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACDescription.m new file mode 100644 index 00000000..e281c63d --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACDescription.m @@ -0,0 +1,46 @@ +// +// NSObject+RACDescription.m +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2013-05-13. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "NSObject+RACDescription.h" +#import "RACTuple.h" + +@implementation NSObject (RACDescription) + +- (NSString *)rac_description { +#ifdef DEBUG + return [[NSString alloc] initWithFormat:@"<%@: %p>", self.class, self]; +#else + return @"(description skipped)"; +#endif +} + +@end + +@implementation NSValue (RACDescription) + +- (NSString *)rac_description { + return self.description; +} + +@end + +@implementation NSString (RACDescription) + +- (NSString *)rac_description { + return self.description; +} + +@end + +@implementation RACTuple (RACDescription) + +- (NSString *)rac_description { + return self.allObjects.description; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACKVOWrapper.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACKVOWrapper.h new file mode 100644 index 00000000..b06de905 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACKVOWrapper.h @@ -0,0 +1,55 @@ +// +// NSObject+RACKVOWrapper.h +// GitHub +// +// Created by Josh Abernathy on 10/11/11. +// Copyright (c) 2011 GitHub. All rights reserved. +// + +#import + + +/// RAC-specific KVO change dictionary key: Will be @YES if the change was caused +/// by the value at the key path or an intermediate value deallocating, @NO +/// otherwise. +extern NSString * const RACKeyValueChangeCausedByDeallocationKey; + +/// RAC-specific KVO change dictionary key: Will be @YES if the change only +/// affected the value of the last key path component leaving the values of the +/// intermediate key path components unaltered, @NO otherwise. +extern NSString * const RACKeyValueChangeAffectedOnlyLastComponentKey; + +@class RACDisposable, RACKVOTrampoline; + +@interface NSObject (RACKVOWrapper) + +/// Adds the given block as the callbacks for when the key path changes. +/// +/// Unlike direct KVO observation, this handles deallocation of `weak` properties +/// by generating an appropriate notification. This will only occur if there is +/// an `@property` declaration visible in the observed class, with the `weak` +/// memory management attribute. +/// +/// The observation does not need to be explicitly removed. It will be removed +/// when the observer or the receiver deallocate. +/// +/// keyPath - The key path to observe. Must not be nil. +/// options - The KVO observation options. +/// observer - The object that requested the observation. May be nil. +/// block - The block called when the value at the key path changes. It is +/// passed the current value of the key path and the extended KVO +/// change dictionary including RAC-specific keys and values. Must not +/// be nil. +/// +/// Returns a disposable that can be used to stop the observation. +- (RACDisposable *)rac_observeKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options observer:(NSObject *)observer block:(void (^)(id value, NSDictionary *change))block; + +@end + +typedef void (^RACKVOBlock)(id target, id observer, NSDictionary *change); + +@interface NSObject (RACKVOWrapperDeprecated) + +- (RACKVOTrampoline *)rac_addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options block:(RACKVOBlock)block __attribute((deprecated("Use rac_observeKeyPath:options:observer:block: instead."))); + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACKVOWrapper.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACKVOWrapper.m new file mode 100644 index 00000000..5275f98e --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACKVOWrapper.m @@ -0,0 +1,230 @@ +// +// NSObject+RACKVOWrapper.m +// GitHub +// +// Created by Josh Abernathy on 10/11/11. +// Copyright (c) 2011 GitHub. All rights reserved. +// + +#import "NSObject+RACKVOWrapper.h" +#import "RACEXTRuntimeExtensions.h" +#import "RACEXTScope.h" +#import "NSObject+RACDeallocating.h" +#import "NSString+RACKeyPathUtilities.h" +#import "RACCompoundDisposable.h" +#import "RACDisposable.h" +#import "RACKVOTrampoline.h" +#import "RACSerialDisposable.h" + +NSString * const RACKeyValueChangeCausedByDeallocationKey = @"RACKeyValueChangeCausedByDeallocationKey"; +NSString * const RACKeyValueChangeAffectedOnlyLastComponentKey = @"RACKeyValueChangeAffectedOnlyLastComponentKey"; + +@implementation NSObject (RACKVOWrapper) + +- (RACDisposable *)rac_observeKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options observer:(NSObject *)observer block:(void (^)(id, NSDictionary *))block { + NSCParameterAssert(block != nil); + NSCParameterAssert(keyPath.rac_keyPathComponents.count > 0); + + keyPath = [keyPath copy]; + + @unsafeify(observer); + + NSArray *keyPathComponents = keyPath.rac_keyPathComponents; + BOOL keyPathHasOneComponent = (keyPathComponents.count == 1); + NSString *keyPathHead = keyPathComponents[0]; + NSString *keyPathTail = keyPath.rac_keyPathByDeletingFirstKeyPathComponent; + + RACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable]; + + // The disposable that groups all disposal necessary to clean up the callbacks + // added to the value of the first key path component. + RACSerialDisposable *firstComponentSerialDisposable = [RACSerialDisposable serialDisposableWithDisposable:[RACCompoundDisposable compoundDisposable]]; + RACCompoundDisposable * (^firstComponentDisposable)(void) = ^{ + return (RACCompoundDisposable *)firstComponentSerialDisposable.disposable; + }; + + [disposable addDisposable:firstComponentSerialDisposable]; + + // Adds the callback block to the value's deallocation. Also adds the logic to + // clean up the callback to the firstComponentDisposable. + void (^addDeallocObserverToPropertyValue)(NSObject *, NSString *, NSObject *) = ^(NSObject *parent, NSString *propertyKey, NSObject *value) { + // If a key path value is the observer, commonly when a key path begins + // with "self", we prevent deallocation triggered callbacks for any such key + // path components. Thus, the observer's deallocation is not considered a + // change to the key path. + @strongify(observer); + if (value == observer) return; + + objc_property_t property = class_getProperty(object_getClass(parent), propertyKey.UTF8String); + if (property == NULL) { + // If we can't find an Objective-C property for this key, we assume + // that we don't need to observe its deallocation (thus matching + // vanilla KVO behavior). + // + // Even if we wanted to, there's not enough type information on + // ivars to figure out its memory management. + return; + } + + rac_propertyAttributes *attributes = rac_copyPropertyAttributes(property); + if (attributes == NULL) return; + + @onExit { + free(attributes); + }; + + if (attributes->objectClass == nil && strcmp(attributes->type, @encode(id)) != 0) { + // If this property isn't actually an object (or is a Class object), + // no point in observing the deallocation of the wrapper returned by + // KVC. + return; + } + + if (!attributes->weak) { + // If this property is an object, but not declared `weak`, we + // don't need to watch for it spontaneously being set to nil. + // + // Attempting to observe non-weak properties will result in + // broken behavior for dynamic getters, so don't even try. + return; + } + + NSDictionary *change = @{ + NSKeyValueChangeKindKey: @(NSKeyValueChangeSetting), + NSKeyValueChangeNewKey: NSNull.null, + RACKeyValueChangeCausedByDeallocationKey: @YES, + RACKeyValueChangeAffectedOnlyLastComponentKey: @(keyPathHasOneComponent) + }; + + RACCompoundDisposable *valueDisposable = value.rac_deallocDisposable; + RACDisposable *deallocDisposable = [RACDisposable disposableWithBlock:^{ + block(nil, change); + }]; + + [valueDisposable addDisposable:deallocDisposable]; + [firstComponentDisposable() addDisposable:[RACDisposable disposableWithBlock:^{ + [valueDisposable removeDisposable:deallocDisposable]; + }]]; + }; + + // Adds the callback block to the remaining path components on the value. Also + // adds the logic to clean up the callbacks to the firstComponentDisposable. + void (^addObserverToValue)(NSObject *) = ^(NSObject *value) { + @strongify(observer); + RACDisposable *observerDisposable = [value rac_observeKeyPath:keyPathTail options:(options & ~NSKeyValueObservingOptionInitial) observer:observer block:block]; + [firstComponentDisposable() addDisposable:observerDisposable]; + }; + + // Observe only the first key path component, when the value changes clean up + // the callbacks on the old value, add callbacks to the new value and call the + // callback block as needed. + // + // Note this does not use NSKeyValueObservingOptionInitial so this only + // handles changes to the value, callbacks to the initial value must be added + // separately. + NSKeyValueObservingOptions trampolineOptions = (options | NSKeyValueObservingOptionPrior) & ~NSKeyValueObservingOptionInitial; + RACKVOTrampoline *trampoline = [[RACKVOTrampoline alloc] initWithTarget:self observer:observer keyPath:keyPathHead options:trampolineOptions block:^(id trampolineTarget, id trampolineObserver, NSDictionary *change) { + // Prepare the change dictionary by adding the RAC specific keys + { + NSMutableDictionary *newChange = [change mutableCopy]; + newChange[RACKeyValueChangeCausedByDeallocationKey] = @NO; + newChange[RACKeyValueChangeAffectedOnlyLastComponentKey] = @(keyPathHasOneComponent); + change = newChange.copy; + } + + // If this is a prior notification, clean up all the callbacks added to the + // previous value and call the callback block. Everything else is deferred + // until after we get the notification after the change. + if ([change[NSKeyValueChangeNotificationIsPriorKey] boolValue]) { + [firstComponentDisposable() dispose]; + + if ((options & NSKeyValueObservingOptionPrior) != 0) { + block([trampolineTarget valueForKeyPath:keyPath], change); + } + + return; + } + + // From here the notification is not prior. + NSObject *value = [trampolineTarget valueForKey:keyPathHead]; + + // If the value has changed but is nil, there is no need to add callbacks to + // it, just call the callback block. + if (value == nil) { + block(nil, change); + return; + } + + // From here the notification is not prior and the value is not nil. + + // Create a new firstComponentDisposable while getting rid of the old one at + // the same time, in case this is being called concurrently. + RACDisposable *oldFirstComponentDisposable = [firstComponentSerialDisposable swapInDisposable:[RACCompoundDisposable compoundDisposable]]; + [oldFirstComponentDisposable dispose]; + + addDeallocObserverToPropertyValue(trampolineTarget, keyPathHead, value); + + // If there are no further key path components, there is no need to add the + // other callbacks, just call the callback block with the value itself. + if (keyPathHasOneComponent) { + block(value, change); + return; + } + + // The value has changed, is not nil, and there are more key path components + // to consider. Add the callbacks to the value for the remaining key path + // components and call the callback block with the current value of the full + // key path. + addObserverToValue(value); + block([value valueForKeyPath:keyPathTail], change); + }]; + + // Stop the KVO observation when this one is disposed of. + [disposable addDisposable:trampoline]; + + // Add the callbacks to the initial value if needed. + NSObject *value = [self valueForKey:keyPathHead]; + if (value != nil) { + addDeallocObserverToPropertyValue(self, keyPathHead, value); + + if (!keyPathHasOneComponent) { + addObserverToValue(value); + } + } + + // Call the block with the initial value if needed. + if ((options & NSKeyValueObservingOptionInitial) != 0) { + id initialValue = [self valueForKeyPath:keyPath]; + NSDictionary *initialChange = @{ + NSKeyValueChangeKindKey: @(NSKeyValueChangeSetting), + NSKeyValueChangeNewKey: initialValue ?: NSNull.null, + RACKeyValueChangeCausedByDeallocationKey: @NO, + RACKeyValueChangeAffectedOnlyLastComponentKey: @(keyPathHasOneComponent) + }; + block(initialValue, initialChange); + } + + + RACCompoundDisposable *observerDisposable = observer.rac_deallocDisposable; + RACCompoundDisposable *selfDisposable = self.rac_deallocDisposable; + // Dispose of this observation if the receiver or the observer deallocate. + [observerDisposable addDisposable:disposable]; + [selfDisposable addDisposable:disposable]; + + return disposable; +} + +@end + +@implementation NSObject (RACKVOWrapperDeprecated) + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-implementations" + +- (RACKVOTrampoline *)rac_addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options block:(RACKVOBlock)block { + return [[RACKVOTrampoline alloc] initWithTarget:self observer:observer keyPath:keyPath options:options block:block]; +} + +#pragma clang diagnostic pop + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACLifting.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACLifting.h new file mode 100644 index 00000000..0feb272d --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACLifting.h @@ -0,0 +1,55 @@ +// +// NSObject+RACLifting.h +// iOSDemo +// +// Created by Josh Abernathy on 10/13/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +@class RACSignal; + +@interface NSObject (RACLifting) + +/// Lifts the selector on the receiver into the reactive world. The selector will +/// be invoked whenever any signal argument sends a value, but only after each +/// signal has sent an initial value. +/// +/// It will replay the most recently sent value to new subscribers. +/// +/// This does not support C arrays or unions. +/// +/// selector - The selector on self to invoke. +/// firstSignal - The signal corresponding to the first method argument. This +/// must not be nil. +/// ... - A list of RACSignals corresponding to the remaining arguments. +/// There must be a non-nil signal for each method argument. +/// +/// Examples +/// +/// [button rac_liftSelector:@selector(setTitleColor:forState:) withSignals:textColorSignal, [RACSignal return:@(UIControlStateNormal)], nil]; +/// +/// Returns a signal which sends the return value from each invocation of the +/// selector. If the selector returns void, it instead sends RACUnit.defaultUnit. +/// It completes only after all the signal arguments complete. +- (RACSignal *)rac_liftSelector:(SEL)selector withSignals:(RACSignal *)firstSignal, ... NS_REQUIRES_NIL_TERMINATION; + +/// Like -rac_liftSelector:withSignals:, but accepts an array instead of +/// a variadic list of arguments. +- (RACSignal *)rac_liftSelector:(SEL)selector withSignalsFromArray:(NSArray *)signals; + +@end + +@interface NSObject (RACLiftingDeprecated) + +- (RACSignal *)rac_liftSelector:(SEL)selector withObjects:(id)arg, ... __attribute__((deprecated("Use -rac_liftSelector:withSignals: instead"))); +- (RACSignal *)rac_liftSelector:(SEL)selector withObjectsFromArray:(NSArray *)args __attribute__((deprecated("Use -rac_liftSelector:withSignalsFromArray: instead"))); +- (RACSignal *)rac_liftBlock:(id)block withArguments:(id)arg, ... NS_REQUIRES_NIL_TERMINATION __attribute__((deprecated("Use +combineLatest:reduce: instead"))); +- (RACSignal *)rac_liftBlock:(id)block withArgumentsFromArray:(NSArray *)args __attribute__((deprecated("Use +combineLatest:reduce: instead"))); + +@end + +@interface NSObject (RACLiftingUnavailable) + +- (instancetype)rac_lift __attribute__((unavailable("Use -rac_liftSelector:withSignals: instead"))); + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACLifting.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACLifting.m new file mode 100644 index 00000000..d9a28439 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACLifting.m @@ -0,0 +1,132 @@ +// +// NSObject+RACLifting.m +// iOSDemo +// +// Created by Josh Abernathy on 10/13/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "NSObject+RACLifting.h" +#import "RACEXTScope.h" +#import "NSInvocation+RACTypeParsing.h" +#import "NSObject+RACDeallocating.h" +#import "RACSignal+Operations.h" +#import "RACTuple.h" +#import "NSObject+RACDescription.h" + +@implementation NSObject (RACLifting) + +- (RACSignal *)rac_liftSelector:(SEL)selector withSignalsFromArray:(NSArray *)signals { + NSCParameterAssert(selector != NULL); + NSCParameterAssert(signals != nil); + NSCParameterAssert(signals.count > 0); + + NSMethodSignature *methodSignature = [self methodSignatureForSelector:selector]; + NSCAssert(methodSignature != nil, @"%@ does not respond to %@", self, NSStringFromSelector(selector)); + + NSUInteger numberOfArguments __attribute__((unused)) = methodSignature.numberOfArguments - 2; + NSCAssert(numberOfArguments == signals.count, @"Wrong number of signals for %@ (expected %lu, got %lu)", NSStringFromSelector(selector), (unsigned long)numberOfArguments, (unsigned long)signals.count); + + @unsafeify(self); + + return [[[[[RACSignal + combineLatest:signals] + takeUntil:self.rac_willDeallocSignal] + map:^(RACTuple *arguments) { + @strongify(self); + + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:methodSignature]; + invocation.selector = selector; + invocation.rac_argumentsTuple = arguments; + [invocation invokeWithTarget:self]; + + return invocation.rac_returnValue; + }] + replayLast] + setNameWithFormat:@"%@ -rac_liftSelector: %@ withSignalsFromArray: %@", [self rac_description], NSStringFromSelector(selector), signals]; +} + +- (RACSignal *)rac_liftSelector:(SEL)selector withSignals:(RACSignal *)firstSignal, ... { + NSCParameterAssert(firstSignal != nil); + + NSMutableArray *signals = [NSMutableArray array]; + + va_list args; + va_start(args, firstSignal); + for (id currentSignal = firstSignal; currentSignal != nil; currentSignal = va_arg(args, id)) { + NSCAssert([currentSignal isKindOfClass:RACSignal.class], @"Argument %@ is not a RACSignal", currentSignal); + + [signals addObject:currentSignal]; + } + va_end(args); + + return [[self + rac_liftSelector:selector withSignalsFromArray:signals] + setNameWithFormat:@"%@ -rac_liftSelector: %@ withSignals: %@", [self rac_description], NSStringFromSelector(selector), signals]; +} + +@end + +@implementation NSObject (RACLiftingDeprecated) + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-implementations" + +static NSArray *RACMapArgumentsToSignals(NSArray *args) { + NSMutableArray *mappedArgs = [NSMutableArray array]; + for (id arg in args) { + if ([arg isEqual:RACTupleNil.tupleNil]) { + [mappedArgs addObject:[RACSignal return:nil]]; + } else if ([arg isKindOfClass:RACSignal.class]) { + [mappedArgs addObject:arg]; + } else { + [mappedArgs addObject:[RACSignal return:arg]]; + } + } + + return mappedArgs; +} + +- (RACSignal *)rac_liftSelector:(SEL)selector withObjects:(id)arg, ... { + NSMethodSignature *methodSignature = [self methodSignatureForSelector:selector]; + NSMutableArray *arguments = [NSMutableArray array]; + + va_list args; + va_start(args, arg); + for (NSUInteger i = 2; i < methodSignature.numberOfArguments; i++) { + id currentObject = (i == 2 ? arg : va_arg(args, id)); + [arguments addObject:currentObject ?: RACTupleNil.tupleNil]; + } + + va_end(args); + return [self rac_liftSelector:selector withObjectsFromArray:arguments]; +} + +- (RACSignal *)rac_liftSelector:(SEL)selector withObjectsFromArray:(NSArray *)args { + return [self rac_liftSelector:selector withSignalsFromArray:RACMapArgumentsToSignals(args)]; +} + +- (RACSignal *)rac_liftBlock:(id)block withArguments:(id)arg, ... { + NSMutableArray *arguments = [NSMutableArray array]; + + va_list args; + va_start(args, arg); + for (id currentObject = arg; currentObject != nil; currentObject = va_arg(args, id)) { + [arguments addObject:currentObject]; + } + + va_end(args); + return [self rac_liftBlock:block withArgumentsFromArray:arguments]; +} + +- (RACSignal *)rac_liftBlock:(id)block withArgumentsFromArray:(NSArray *)args { + return [[[[RACSignal + combineLatest:RACMapArgumentsToSignals(args)] + reduceEach:block] + takeUntil:self.rac_willDeallocSignal] + replayLast]; +} + +#pragma clang diagnostic pop + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACPropertySubscribing.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACPropertySubscribing.h new file mode 100644 index 00000000..10bb68dd --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACPropertySubscribing.h @@ -0,0 +1,102 @@ +// +// NSObject+RACPropertySubscribing.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 3/2/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import +#import "RACEXTKeyPathCoding.h" +#import "RACmetamacros.h" + +/// Creates a signal which observes `KEYPATH` on `TARGET` for changes. +/// +/// In either case, the observation continues until `TARGET` _or self_ is +/// deallocated. If any intermediate object is deallocated instead, it will be +/// assumed to have been set to nil. +/// +/// Make sure to `@strongify(self)` when using this macro within a block! The +/// macro will _always_ reference `self`, which can silently introduce a retain +/// cycle within a block. As a result, you should make sure that `self` is a weak +/// reference (e.g., created by `@weakify` and `@strongify`) before the +/// expression that uses `RACObserve`. +/// +/// Examples +/// +/// // Observes self, and doesn't stop until self is deallocated. +/// RACSignal *selfSignal = RACObserve(self, arrayController.items); +/// +/// // Observes the array controller, and stops when self _or_ the array +/// // controller is deallocated. +/// RACSignal *arrayControllerSignal = RACObserve(self.arrayController, items); +/// +/// // Observes obj.arrayController, and stops when self _or_ the array +/// // controller is deallocated. +/// RACSignal *signal2 = RACObserve(obj.arrayController, items); +/// +/// @weakify(self); +/// RACSignal *signal3 = [anotherSignal flattenMap:^(NSArrayController *arrayController) { +/// // Avoids a retain cycle because of RACObserve implicitly referencing +/// // self. +/// @strongify(self); +/// return RACObserve(arrayController, items); +/// }]; +/// +/// Returns a signal which sends the current value of the key path on +/// subscription, then sends the new value every time it changes, and sends +/// completed if self or observer is deallocated. +#define RACObserve(TARGET, KEYPATH) \ + [(id)(TARGET) rac_valuesForKeyPath:@keypath(TARGET, KEYPATH) observer:self] + +@class RACDisposable; +@class RACSignal; + +@interface NSObject (RACPropertySubscribing) + +/// Creates a signal to observe the value at the given key path. +/// +/// The initial value is sent on subscription, the subsequent values are sent +/// from whichever thread the change occured on, even if it doesn't have a valid +/// scheduler. +/// +/// Returns a signal that immediately sends the receiver's current value at the +/// given keypath, then any changes thereafter. +- (RACSignal *)rac_valuesForKeyPath:(NSString *)keyPath observer:(NSObject *)observer; + +/// Creates a signal to observe the changes of the given key path. +/// +/// The initial value is sent on subscription, the subsequent values are sent +/// from whichever thread the change occured on, even if it doesn't have a valid +/// scheduler. +/// +/// Returns a signal that sends tuples containing the current value at the key +/// path and the change dictionary for each KVO callback. +- (RACSignal *)rac_valuesAndChangesForKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options observer:(NSObject *)observer; + +@end + +#define RACAble(...) \ + metamacro_if_eq(1, metamacro_argcount(__VA_ARGS__)) \ + (_RACAbleObject(self, __VA_ARGS__)) \ + (_RACAbleObject(__VA_ARGS__)) + +#define _RACAbleObject(object, property) [object rac_signalForKeyPath:@keypath(object, property) observer:self] + +#define RACAbleWithStart(...) \ + metamacro_if_eq(1, metamacro_argcount(__VA_ARGS__)) \ + (_RACAbleWithStartObject(self, __VA_ARGS__)) \ + (_RACAbleWithStartObject(__VA_ARGS__)) + +#define _RACAbleWithStartObject(object, property) [object rac_signalWithStartingValueForKeyPath:@keypath(object, property) observer:self] + +@interface NSObject (RACPropertySubscribingDeprecated) + ++ (RACSignal *)rac_signalFor:(NSObject *)object keyPath:(NSString *)keyPath observer:(NSObject *)observer __attribute__((deprecated("Use -rac_valuesForKeyPath:observer: or RACObserve() instead."))); ++ (RACSignal *)rac_signalWithStartingValueFor:(NSObject *)object keyPath:(NSString *)keyPath observer:(NSObject *)observer __attribute__((deprecated("Use -rac_valuesForKeyPath:observer: or RACObserve() instead."))); ++ (RACSignal *)rac_signalWithChangesFor:(NSObject *)object keyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options observer:(NSObject *)observer __attribute__((deprecated("Use -rac_valuesAndChangesForKeyPath:options:observer: instead."))); +- (RACSignal *)rac_signalForKeyPath:(NSString *)keyPath observer:(NSObject *)observer __attribute__((deprecated("Use -rac_valuesForKeyPath:observer: or RACObserve() instead."))); +- (RACSignal *)rac_signalWithStartingValueForKeyPath:(NSString *)keyPath observer:(NSObject *)observer __attribute__((deprecated("Use -rac_valuesForKeyPath:observer: or RACObserve() instead."))); +- (RACDisposable *)rac_deriveProperty:(NSString *)keyPath from:(RACSignal *)signal __attribute__((deprecated("Use -[RACSignal setKeyPath:onObject:] instead"))); + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACPropertySubscribing.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACPropertySubscribing.m new file mode 100644 index 00000000..9a158778 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACPropertySubscribing.m @@ -0,0 +1,145 @@ +// +// NSObject+RACPropertySubscribing.m +// ReactiveCocoa +// +// Created by Josh Abernathy on 3/2/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "NSObject+RACPropertySubscribing.h" +#import "RACEXTScope.h" +#import "NSObject+RACDeallocating.h" +#import "NSObject+RACDescription.h" +#import "NSObject+RACKVOWrapper.h" +#import "RACCompoundDisposable.h" +#import "RACDisposable.h" +#import "RACKVOTrampoline.h" +#import "RACSubscriber.h" +#import "RACSignal+Operations.h" +#import "RACTuple.h" +#import + +@implementation NSObject (RACPropertySubscribing) + +- (RACSignal *)rac_valuesForKeyPath:(NSString *)keyPath observer:(NSObject *)observer { + return [[[self rac_valuesAndChangesForKeyPath:keyPath options:NSKeyValueObservingOptionInitial observer:observer] reduceEach:^(id value, NSDictionary *change) { + return value; + }] setNameWithFormat:@"RACObserve(%@, %@)", self.rac_description, keyPath]; +} + +- (RACSignal *)rac_valuesAndChangesForKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options observer:(NSObject *)observer { + keyPath = [keyPath copy]; + + RACDisposable *deallocFlagDisposable = [[RACDisposable alloc] init]; + RACCompoundDisposable *observerDisposable = observer.rac_deallocDisposable; + RACCompoundDisposable *objectDisposable = self.rac_deallocDisposable; + [observerDisposable addDisposable:deallocFlagDisposable]; + [objectDisposable addDisposable:deallocFlagDisposable]; + + @unsafeify(self, observer); + return [RACSignal createSignal:^ RACDisposable * (id subscriber) { + if (deallocFlagDisposable.disposed) { + [subscriber sendCompleted]; + return nil; + } + + @strongify(self, observer); + + RACDisposable *observationDisposable = [self rac_observeKeyPath:keyPath options:options observer:observer block:^(id value, NSDictionary *change) { + [subscriber sendNext:RACTuplePack(value, change)]; + }]; + + RACDisposable *deallocDisposable = [RACDisposable disposableWithBlock:^{ + [observationDisposable dispose]; + [subscriber sendCompleted]; + }]; + + [observer.rac_deallocDisposable addDisposable:deallocDisposable]; + [self.rac_deallocDisposable addDisposable:deallocDisposable]; + + return [RACDisposable disposableWithBlock:^{ + [observerDisposable removeDisposable:deallocFlagDisposable]; + [objectDisposable removeDisposable:deallocFlagDisposable]; + [observerDisposable removeDisposable:deallocDisposable]; + [objectDisposable removeDisposable:deallocDisposable]; + [observationDisposable dispose]; + }]; + }]; +} + +@end + +static RACSignal *signalWithoutChangesFor(Class class, NSObject *object, NSString *keyPath, NSKeyValueObservingOptions options, NSObject *observer) { + NSCParameterAssert(object != nil); + NSCParameterAssert(keyPath != nil); + NSCParameterAssert(observer != nil); + + keyPath = [keyPath copy]; + + @unsafeify(object); + + return [[class + rac_signalWithChangesFor:object keyPath:keyPath options:options observer:observer] + map:^(NSDictionary *change) { + @strongify(object); + return [object valueForKeyPath:keyPath]; + }]; +} + +@implementation NSObject (RACPropertySubscribingDeprecated) + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-implementations" + ++ (RACSignal *)rac_signalFor:(NSObject *)object keyPath:(NSString *)keyPath observer:(NSObject *)observer { + return signalWithoutChangesFor(self, object, keyPath, 0, observer); +} + ++ (RACSignal *)rac_signalWithStartingValueFor:(NSObject *)object keyPath:(NSString *)keyPath observer:(NSObject *)observer { + return signalWithoutChangesFor(self, object, keyPath, NSKeyValueObservingOptionInitial, observer); +} + ++ (RACSignal *)rac_signalWithChangesFor:(NSObject *)object keyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options observer:(NSObject *)observer { + @unsafeify(observer, object); + return [[RACSignal createSignal:^(id subscriber) { + + @strongify(observer, object); + RACKVOTrampoline *KVOTrampoline = [object rac_addObserver:observer forKeyPath:keyPath options:options block:^(id target, id observer, NSDictionary *change) { + [subscriber sendNext:change]; + }]; + + @weakify(subscriber); + RACDisposable *deallocDisposable = [RACDisposable disposableWithBlock:^{ + @strongify(subscriber); + [KVOTrampoline dispose]; + [subscriber sendCompleted]; + }]; + + [observer.rac_deallocDisposable addDisposable:deallocDisposable]; + [object.rac_deallocDisposable addDisposable:deallocDisposable]; + + RACCompoundDisposable *observerDisposable = observer.rac_deallocDisposable; + RACCompoundDisposable *objectDisposable = object.rac_deallocDisposable; + return [RACDisposable disposableWithBlock:^{ + [observerDisposable removeDisposable:deallocDisposable]; + [objectDisposable removeDisposable:deallocDisposable]; + [KVOTrampoline dispose]; + }]; + }] setNameWithFormat:@"RACAble(%@, %@)", object.rac_description, keyPath]; +} + +- (RACSignal *)rac_signalForKeyPath:(NSString *)keyPath observer:(NSObject *)observer { + return [self.class rac_signalFor:self keyPath:keyPath observer:observer]; +} + +- (RACSignal *)rac_signalWithStartingValueForKeyPath:(NSString *)keyPath observer:(NSObject *)observer { + return [self.class rac_signalWithStartingValueFor:self keyPath:keyPath observer:observer]; +} + +- (RACDisposable *)rac_deriveProperty:(NSString *)keyPath from:(RACSignal *)signal { + return [signal setKeyPath:keyPath onObject:self]; +} + +#pragma clang diagnostic pop + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACSelectorSignal.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACSelectorSignal.h new file mode 100644 index 00000000..c6f3de5d --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACSelectorSignal.h @@ -0,0 +1,79 @@ +// +// NSObject+RACSelectorSignal.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 3/18/13. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import + +@class RACSignal; + +/// The domain for any errors originating from -rac_signalForSelector:. +extern NSString * const RACSelectorSignalErrorDomain; + +/// -rac_signalForSelector: was going to add a new method implementation for +/// `selector`, but another thread added an implementation before it was able to. +/// +/// This will _not_ occur for cases where a method implementation exists before +/// -rac_signalForSelector: is invoked. +extern const NSInteger RACSelectorSignalErrorMethodSwizzlingRace; + +@interface NSObject (RACSelectorSignal) + +/// Creates a signal associated with the receiver, which will send a tuple of the +/// method's arguments each time the given selector is invoked. +/// +/// If the selector is already implemented on the receiver, the existing +/// implementation will be invoked _before_ the signal fires. +/// +/// If the selector is not yet implemented on the receiver, the injected +/// implementation will have a `void` return type and accept only object +/// arguments. Invoking the added implementation with non-object values, or +/// expecting a return value, will result in undefined behavior. +/// +/// This is useful for changing an event or delegate callback into a signal. For +/// example, on an NSView: +/// +/// [[view rac_signalForSelector:@selector(mouseDown:)] subscribeNext:^(RACTuple *args) { +/// NSEvent *event = args.first; +/// NSLog(@"mouse button pressed: %@", event); +/// }]; +/// +/// selector - The selector for whose invocations are to be observed. If it +/// doesn't exist, it will be implemented to accept object arguments +/// and return void. This cannot have C arrays or unions as arguments +/// or C arrays, unions, structs, complex or vector types as return +/// type. +/// +/// Returns a signal which will send a tuple of arguments upon each invocation of +/// the selector, then completes when the receiver is deallocated. `next` events +/// will be sent synchronously from the thread that invoked the method. If +/// a runtime call fails, the signal will send an error in the +/// RACSelectorSignalErrorDomain. +- (RACSignal *)rac_signalForSelector:(SEL)selector; + +/// Behaves like -rac_signalForSelector:, but if the selector is not yet +/// implemented on the receiver, its method signature is looked up within +/// `protocol`, and may accept non-object arguments. +/// +/// If the selector is not yet implemented and has a return value, the injected +/// method will return all zero bits (equal to `nil`, `NULL`, 0, 0.0f, etc.). +/// +/// selector - The selector for whose invocations are to be observed. If it +/// doesn't exist, it will be implemented using information from +/// `protocol`, and may accept non-object arguments and return +/// a value. This cannot have C arrays or unions as arguments or +/// return type. +/// protocol - The protocol in which `selector` is declared. This will be used +/// for type information if the selector is not already implemented on +/// the receiver. This must not be `NULL`, and `selector` must exist +/// in this protocol. +/// +/// Returns a signal which will send a tuple of arguments on each invocation of +/// the selector, or an error in RACSelectorSignalErrorDomain if a runtime +/// call fails. +- (RACSignal *)rac_signalForSelector:(SEL)selector fromProtocol:(Protocol *)protocol; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACSelectorSignal.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACSelectorSignal.m new file mode 100644 index 00000000..83d03d46 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACSelectorSignal.m @@ -0,0 +1,276 @@ +// +// NSObject+RACSelectorSignal.m +// ReactiveCocoa +// +// Created by Josh Abernathy on 3/18/13. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "NSObject+RACSelectorSignal.h" +#import "RACEXTRuntimeExtensions.h" +#import "NSInvocation+RACTypeParsing.h" +#import "NSObject+RACDeallocating.h" +#import "RACCompoundDisposable.h" +#import "RACDisposable.h" +#import "RACObjCRuntime.h" +#import "RACSubject.h" +#import "RACTuple.h" +#import "NSObject+RACDescription.h" +#import +#import + +NSString * const RACSelectorSignalErrorDomain = @"RACSelectorSignalErrorDomain"; +const NSInteger RACSelectorSignalErrorMethodSwizzlingRace = 1; + +static NSString * const RACSignalForSelectorAliasPrefix = @"rac_alias_"; +static NSString * const RACSubclassSuffix = @"_RACSelectorSignal"; + +static NSMutableSet *swizzledClasses() { + static NSMutableSet *set; + static dispatch_once_t pred; + + dispatch_once(&pred, ^{ + set = [[NSMutableSet alloc] init]; + }); + + return set; +} + +@implementation NSObject (RACSelectorSignal) + +static BOOL RACForwardInvocation(id self, NSInvocation *invocation) { + SEL aliasSelector = RACAliasForSelector(invocation.selector); + RACSubject *subject = objc_getAssociatedObject(self, aliasSelector); + + Class class = object_getClass(invocation.target); + BOOL respondsToAlias = [class instancesRespondToSelector:aliasSelector]; + if (respondsToAlias) { + invocation.selector = aliasSelector; + [invocation invoke]; + } + + if (subject == nil) return respondsToAlias; + + [subject sendNext:invocation.rac_argumentsTuple]; + return YES; +} + +static void RACSwizzleForwardInvocation(Class class) { + SEL forwardInvocationSEL = @selector(forwardInvocation:); + Method forwardInvocationMethod = class_getInstanceMethod(class, forwardInvocationSEL); + + // Preserve any existing implementation of -forwardInvocation:. + void (*originalForwardInvocation)(id, SEL, NSInvocation *) = NULL; + if (forwardInvocationMethod != NULL) { + originalForwardInvocation = (__typeof__(originalForwardInvocation))method_getImplementation(forwardInvocationMethod); + } + + // Set up a new version of -forwardInvocation:. + // + // If the selector has been passed to -rac_signalForSelector:, invoke + // the aliased method, and forward the arguments to any attached signals. + // + // If the selector has not been passed to -rac_signalForSelector:, + // invoke any existing implementation of -forwardInvocation:. If there + // was no existing implementation, throw an unrecognized selector + // exception. + id newForwardInvocation = ^(id self, NSInvocation *invocation) { + BOOL matched = RACForwardInvocation(self, invocation); + if (matched) return; + + if (originalForwardInvocation == NULL) { + [self doesNotRecognizeSelector:invocation.selector]; + } else { + originalForwardInvocation(self, forwardInvocationSEL, invocation); + } + }; + + class_replaceMethod(class, forwardInvocationSEL, imp_implementationWithBlock(newForwardInvocation), "v@:@"); +} + +static void RACSwizzleRespondsToSelector(Class class) { + SEL respondsToSelectorSEL = @selector(respondsToSelector:); + + // Preserve existing implementation of -respondsToSelector:. + Method respondsToSelectorMethod = class_getInstanceMethod(class, respondsToSelectorSEL); + BOOL (*originalRespondsToSelector)(id, SEL, SEL) = (__typeof__(originalRespondsToSelector))method_getImplementation(respondsToSelectorMethod); + + // Set up a new version of -respondsToSelector: that returns YES for methods + // added by -rac_signalForSelector:. + // + // If the selector has a method defined on the receiver's actual class, and + // if that method's implementation is _objc_msgForward, then returns whether + // the instance has a signal for the selector. + // Otherwise, call the original -respondsToSelector:. + id newRespondsToSelector = ^ BOOL (id self, SEL selector) { + Method method = rac_getImmediateInstanceMethod(object_getClass(self), selector); + + if (method != NULL && method_getImplementation(method) == _objc_msgForward) { + SEL aliasSelector = RACAliasForSelector(selector); + return objc_getAssociatedObject(self, aliasSelector) != nil; + } + + return originalRespondsToSelector(self, respondsToSelectorSEL, selector); + }; + + class_replaceMethod(class, @selector(respondsToSelector:), imp_implementationWithBlock(newRespondsToSelector), method_getTypeEncoding(respondsToSelectorMethod)); +} + +// It's hard to tell which struct return types use _objc_msgForward, and +// which use _objc_msgForward_stret instead, so just exclude all struct, array, +// union, complex and vector return types. +static void RACCheckTypeEncoding(const char *typeEncoding) { +#if !NS_BLOCK_ASSERTIONS + // Some types, including vector types, are not encoded. In these cases the + // signature starts with the size of the argument frame. + NSCAssert(*typeEncoding < '1' || *typeEncoding > '9', @"unknown method return type not supported in type encoding: %s", typeEncoding); + NSCAssert(strstr(typeEncoding, "(") != typeEncoding, @"union method return type not supported"); + NSCAssert(strstr(typeEncoding, "{") != typeEncoding, @"struct method return type not supported"); + NSCAssert(strstr(typeEncoding, "[") != typeEncoding, @"array method return type not supported"); + NSCAssert(strstr(typeEncoding, @encode(_Complex float)) != typeEncoding, @"complex float method return type not supported"); + NSCAssert(strstr(typeEncoding, @encode(_Complex double)) != typeEncoding, @"complex double method return type not supported"); + NSCAssert(strstr(typeEncoding, @encode(_Complex long double)) != typeEncoding, @"complex long double method return type not supported"); + +#endif // !NS_BLOCK_ASSERTIONS +} + +static RACSignal *NSObjectRACSignalForSelector(NSObject *self, SEL selector, Protocol *protocol) { + SEL aliasSelector = RACAliasForSelector(selector); + + @synchronized (self) { + RACSubject *subject = objc_getAssociatedObject(self, aliasSelector); + if (subject != nil) return subject; + + Class class = RACSwizzleClass(self); + NSCAssert(class != nil, @"Could not swizzle class of %@", self); + + subject = [[RACSubject subject] setNameWithFormat:@"%@ -rac_signalForSelector: %@", self.rac_description, NSStringFromSelector(selector)]; + objc_setAssociatedObject(self, aliasSelector, subject, OBJC_ASSOCIATION_RETAIN); + + [self.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ + [subject sendCompleted]; + }]]; + + Method targetMethod = class_getInstanceMethod(class, selector); + if (targetMethod == NULL) { + const char *typeEncoding; + if (protocol == NULL) { + typeEncoding = RACSignatureForUndefinedSelector(selector); + } else { + // Look for the selector as an optional instance method. + struct objc_method_description methodDescription = protocol_getMethodDescription(protocol, selector, NO, YES); + + if (methodDescription.name == NULL) { + // Then fall back to looking for a required instance + // method. + methodDescription = protocol_getMethodDescription(protocol, selector, YES, YES); + NSCAssert(methodDescription.name != NULL, @"Selector %@ does not exist in <%s>", NSStringFromSelector(selector), protocol_getName(protocol)); + } + + typeEncoding = methodDescription.types; + } + + RACCheckTypeEncoding(typeEncoding); + + // Define the selector to call -forwardInvocation:. + if (!class_addMethod(class, selector, _objc_msgForward, typeEncoding)) { + NSDictionary *userInfo = @{ + NSLocalizedDescriptionKey: [NSString stringWithFormat:NSLocalizedString(@"A race condition occurred implementing %@ on class %@", nil), NSStringFromSelector(selector), class], + NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Invoke -rac_signalForSelector: again to override the implementation.", nil) + }; + + return [RACSignal error:[NSError errorWithDomain:RACSelectorSignalErrorDomain code:RACSelectorSignalErrorMethodSwizzlingRace userInfo:userInfo]]; + } + } else if (method_getImplementation(targetMethod) != _objc_msgForward) { + // Make a method alias for the existing method implementation. + const char *typeEncoding = method_getTypeEncoding(targetMethod); + + RACCheckTypeEncoding(typeEncoding); + + BOOL addedAlias __attribute__((unused)) = class_addMethod(class, aliasSelector, method_getImplementation(targetMethod), typeEncoding); + NSCAssert(addedAlias, @"Original implementation for %@ is already copied to %@ on %@", NSStringFromSelector(selector), NSStringFromSelector(aliasSelector), class); + + // Redefine the selector to call -forwardInvocation:. + class_replaceMethod(class, selector, _objc_msgForward, method_getTypeEncoding(targetMethod)); + } + + return subject; + } +} + +static SEL RACAliasForSelector(SEL originalSelector) { + NSString *selectorName = NSStringFromSelector(originalSelector); + return NSSelectorFromString([RACSignalForSelectorAliasPrefix stringByAppendingString:selectorName]); +} + +static const char *RACSignatureForUndefinedSelector(SEL selector) { + const char *name = sel_getName(selector); + NSMutableString *signature = [NSMutableString stringWithString:@"v@:"]; + + while ((name = strchr(name, ':')) != NULL) { + [signature appendString:@"@"]; + name++; + } + + return signature.UTF8String; +} + +static Class RACSwizzleClass(NSObject *self) { + Class statedClass = self.class; + Class baseClass = object_getClass(self); + NSString *className = NSStringFromClass(baseClass); + + if ([className hasSuffix:RACSubclassSuffix]) { + return baseClass; + } else if (statedClass != baseClass) { + // If the class is already lying about what it is, it's probably a KVO + // dynamic subclass or something else that we shouldn't subclass + // ourselves. + // + // Just swizzle -forwardInvocation: in-place. Since the object's class + // was almost certainly dynamically changed, we shouldn't see another of + // these classes in the hierarchy. + // + // Additionally, swizzle -respondsToSelector: because the default + // implementation may be ignorant of methods added to this class. + @synchronized (swizzledClasses()) { + if (![swizzledClasses() containsObject:className]) { + RACSwizzleForwardInvocation(baseClass); + RACSwizzleRespondsToSelector(baseClass); + [swizzledClasses() addObject:className]; + } + } + + return baseClass; + } + + const char *subclassName = [className stringByAppendingString:RACSubclassSuffix].UTF8String; + Class subclass = objc_getClass(subclassName); + + if (subclass == nil) { + subclass = [RACObjCRuntime createClass:subclassName inheritingFromClass:baseClass]; + if (subclass == nil) return nil; + + RACSwizzleForwardInvocation(subclass); + RACSwizzleRespondsToSelector(subclass); + objc_registerClassPair(subclass); + } + + object_setClass(self, subclass); + return subclass; +} + +- (RACSignal *)rac_signalForSelector:(SEL)selector { + NSCParameterAssert(selector != NULL); + + return NSObjectRACSignalForSelector(self, selector, NULL); +} + +- (RACSignal *)rac_signalForSelector:(SEL)selector fromProtocol:(Protocol *)protocol { + NSCParameterAssert(selector != NULL); + NSCParameterAssert(protocol != NULL); + + return NSObjectRACSignalForSelector(self, selector, protocol); +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSOrderedSet+RACSequenceAdditions.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSOrderedSet+RACSequenceAdditions.h new file mode 100644 index 00000000..8bea2db7 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSOrderedSet+RACSequenceAdditions.h @@ -0,0 +1,20 @@ +// +// NSOrderedSet+RACSequenceAdditions.h +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2012-10-29. +// Copyright (c) 2012 GitHub. All rights reserved. +// + +#import + +@class RACSequence; + +@interface NSOrderedSet (RACSequenceAdditions) + +/// Creates and returns a sequence corresponding to the receiver. +/// +/// Mutating the receiver will not affect the sequence after it's been created. +@property (nonatomic, copy, readonly) RACSequence *rac_sequence; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSOrderedSet+RACSequenceAdditions.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSOrderedSet+RACSequenceAdditions.m new file mode 100644 index 00000000..55dfd0b7 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSOrderedSet+RACSequenceAdditions.m @@ -0,0 +1,19 @@ +// +// NSOrderedSet+RACSequenceAdditions.m +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2012-10-29. +// Copyright (c) 2012 GitHub. All rights reserved. +// + +#import "NSOrderedSet+RACSequenceAdditions.h" +#import "NSArray+RACSequenceAdditions.h" + +@implementation NSOrderedSet (RACSequenceAdditions) + +- (RACSequence *)rac_sequence { + // TODO: First class support for ordered set sequences. + return self.array.rac_sequence; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSSet+RACSequenceAdditions.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSSet+RACSequenceAdditions.h new file mode 100644 index 00000000..66655016 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSSet+RACSequenceAdditions.h @@ -0,0 +1,20 @@ +// +// NSSet+RACSequenceAdditions.h +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2012-10-29. +// Copyright (c) 2012 GitHub. All rights reserved. +// + +#import + +@class RACSequence; + +@interface NSSet (RACSequenceAdditions) + +/// Creates and returns a sequence corresponding to the receiver. +/// +/// Mutating the receiver will not affect the sequence after it's been created. +@property (nonatomic, copy, readonly) RACSequence *rac_sequence; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSSet+RACSequenceAdditions.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSSet+RACSequenceAdditions.m new file mode 100644 index 00000000..cc07f75c --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSSet+RACSequenceAdditions.m @@ -0,0 +1,19 @@ +// +// NSSet+RACSequenceAdditions.m +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2012-10-29. +// Copyright (c) 2012 GitHub. All rights reserved. +// + +#import "NSSet+RACSequenceAdditions.h" +#import "NSArray+RACSequenceAdditions.h" + +@implementation NSSet (RACSequenceAdditions) + +- (RACSequence *)rac_sequence { + // TODO: First class support for set sequences. + return self.allObjects.rac_sequence; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSString+RACKeyPathUtilities.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSString+RACKeyPathUtilities.h new file mode 100644 index 00000000..7d163fad --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSString+RACKeyPathUtilities.h @@ -0,0 +1,33 @@ +// +// NSString+RACKeyPathUtilities.h +// ReactiveCocoa +// +// Created by Uri Baghin on 05/05/2013. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import + +@interface NSString (RACKeyPathUtilities) + +/// Returns an array of the components of the receiver. +/// +/// Calling this method on a string that isn't a key path is considered undefined +/// behavior. +- (NSArray *)rac_keyPathComponents; + +/// Returns a key path with all the components of the receiver except for the +/// last one. +/// +/// Calling this method on a string that isn't a key path is considered undefined +/// behavior. +- (NSString *)rac_keyPathByDeletingLastKeyPathComponent; + +/// Returns a key path with all the components of the receiver expect for the +/// first one. +/// +/// Calling this method on a string that isn't a key path is considered undefined +/// behavior. +- (NSString *)rac_keyPathByDeletingFirstKeyPathComponent; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSString+RACKeyPathUtilities.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSString+RACKeyPathUtilities.m new file mode 100644 index 00000000..63a100c6 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSString+RACKeyPathUtilities.m @@ -0,0 +1,36 @@ +// +// NSString+RACKeyPathUtilities.m +// ReactiveCocoa +// +// Created by Uri Baghin on 05/05/2013. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "NSString+RACKeyPathUtilities.h" + +@implementation NSString (RACKeyPathUtilities) + +- (NSArray *)rac_keyPathComponents { + if (self.length == 0) { + return nil; + } + return [self componentsSeparatedByString:@"."]; +} + +- (NSString *)rac_keyPathByDeletingLastKeyPathComponent { + NSUInteger lastDotIndex = [self rangeOfString:@"." options:NSBackwardsSearch].location; + if (lastDotIndex == NSNotFound) { + return nil; + } + return [self substringToIndex:lastDotIndex]; +} + +- (NSString *)rac_keyPathByDeletingFirstKeyPathComponent { + NSUInteger firstDotIndex = [self rangeOfString:@"."].location; + if (firstDotIndex == NSNotFound) { + return nil; + } + return [self substringFromIndex:firstDotIndex + 1]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSString+RACSequenceAdditions.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSString+RACSequenceAdditions.h new file mode 100644 index 00000000..0116231f --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSString+RACSequenceAdditions.h @@ -0,0 +1,21 @@ +// +// NSString+RACSequenceAdditions.h +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2012-10-29. +// Copyright (c) 2012 GitHub. All rights reserved. +// + +#import + +@class RACSequence; + +@interface NSString (RACSequenceAdditions) + +/// Creates and returns a sequence containing strings corresponding to each +/// composed character sequence in the receiver. +/// +/// Mutating the receiver will not affect the sequence after it's been created. +@property (nonatomic, copy, readonly) RACSequence *rac_sequence; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSString+RACSequenceAdditions.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSString+RACSequenceAdditions.m new file mode 100644 index 00000000..eb6a76ef --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSString+RACSequenceAdditions.m @@ -0,0 +1,18 @@ +// +// NSString+RACSequenceAdditions.m +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2012-10-29. +// Copyright (c) 2012 GitHub. All rights reserved. +// + +#import "NSString+RACSequenceAdditions.h" +#import "RACStringSequence.h" + +@implementation NSString (RACSequenceAdditions) + +- (RACSequence *)rac_sequence { + return [RACStringSequence sequenceWithString:self offset:0]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSString+RACSupport.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSString+RACSupport.h new file mode 100644 index 00000000..d904a4cf --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSString+RACSupport.h @@ -0,0 +1,22 @@ +// +// NSString+RACSupport.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 5/11/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import + +@class RACSignal; +@class RACScheduler; + +@interface NSString (RACSupport) + +// Reads in the contents of the file using +[NSString stringWithContentsOfURL:usedEncoding:error:]. +// Note that encoding won't be valid until the signal completes successfully. +// +// scheduler - cannot be nil. ++ (RACSignal *)rac_readContentsOfURL:(NSURL *)URL usedEncoding:(NSStringEncoding *)encoding scheduler:(RACScheduler *)scheduler; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSString+RACSupport.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSString+RACSupport.m new file mode 100644 index 00000000..c6ebe0b1 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSString+RACSupport.m @@ -0,0 +1,35 @@ +// +// NSString+RACSupport.m +// ReactiveCocoa +// +// Created by Josh Abernathy on 5/11/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "NSString+RACSupport.h" +#import "RACReplaySubject.h" +#import "RACScheduler.h" + +@implementation NSString (RACSupport) + ++ (RACSignal *)rac_readContentsOfURL:(NSURL *)URL usedEncoding:(NSStringEncoding *)encoding scheduler:(RACScheduler *)scheduler { + NSCParameterAssert(scheduler != nil); + + RACReplaySubject *subject = [RACReplaySubject subject]; + [subject setNameWithFormat:@"+rac_readContentsOfURL: %@ usedEncoding:scheduler: %@", URL, scheduler]; + + [scheduler schedule:^{ + NSError *error = nil; + NSString *string = [NSString stringWithContentsOfURL:URL usedEncoding:encoding error:&error]; + if(string == nil) { + [subject sendError:error]; + } else { + [subject sendNext:string]; + [subject sendCompleted]; + } + }]; + + return subject; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSURLConnection+RACSupport.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSURLConnection+RACSupport.h new file mode 100644 index 00000000..e9bf04f3 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSURLConnection+RACSupport.h @@ -0,0 +1,25 @@ +// +// NSURLConnection+RACSupport.h +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2013-10-01. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import + +@class RACSignal; + +@interface NSURLConnection (RACSupport) + +// Lazily loads data for the given request in the background. +// +// request - The URL request to load. This must not be nil. +// +// Returns a signal which will begin loading the request upon each subscription, +// then send a `RACTuple` of the received `NSURLResponse` and downloaded +// `NSData`, and complete on a background thread. If any errors occur, the +// returned signal will error out. ++ (RACSignal *)rac_sendAsynchronousRequest:(NSURLRequest *)request; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSURLConnection+RACSupport.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSURLConnection+RACSupport.m new file mode 100644 index 00000000..e6b7360e --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/NSURLConnection+RACSupport.m @@ -0,0 +1,47 @@ +// +// NSURLConnection+RACSupport.m +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2013-10-01. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "NSURLConnection+RACSupport.h" +#import "RACDisposable.h" +#import "RACSignal.h" +#import "RACSignal+Operations.h" +#import "RACSubscriber.h" +#import "RACTuple.h" + +@implementation NSURLConnection (RACSupport) + ++ (RACSignal *)rac_sendAsynchronousRequest:(NSURLRequest *)request { + NSCParameterAssert(request != nil); + + return [[RACSignal + createSignal:^ RACDisposable * (id subscriber) { + NSOperationQueue *queue = [[NSOperationQueue alloc] init]; + queue.name = @"com.github.ReactiveCocoa.NSURLConnectionRACSupport"; + + [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { + if (data == nil) { + [subscriber sendError:error]; + } else { + [subscriber sendNext:RACTuplePack(response, data)]; + [subscriber sendCompleted]; + } + }]; + + return [RACDisposable disposableWithBlock:^{ + // It's not clear if this will actually cancel the connection, + // but we can at least prevent _some_ unnecessary work -- + // without writing all the code for a proper delegate, which + // doesn't really belong in RAC. + queue.suspended = YES; + [queue cancelAllOperations]; + }]; + }] + setNameWithFormat:@"+rac_sendAsynchronousRequest: %@", request]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACArraySequence.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACArraySequence.h new file mode 100644 index 00000000..6936a0a8 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACArraySequence.h @@ -0,0 +1,18 @@ +// +// RACArraySequence.h +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2012-10-29. +// Copyright (c) 2012 GitHub. All rights reserved. +// + +#import "RACSequence.h" + +/// Private class that adapts an array to the RACSequence interface. +@interface RACArraySequence : RACSequence + +/// Returns a sequence for enumerating over the given array, starting from the +/// given offset. The array will be copied to prevent mutation. ++ (instancetype)sequenceWithArray:(NSArray *)array offset:(NSUInteger)offset; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACArraySequence.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACArraySequence.m new file mode 100644 index 00000000..f7ca69dd --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACArraySequence.m @@ -0,0 +1,125 @@ +// +// RACArraySequence.m +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2012-10-29. +// Copyright (c) 2012 GitHub. All rights reserved. +// + +#import "RACArraySequence.h" + +@interface RACArraySequence () + +// Redeclared from the superclass and marked deprecated to prevent using `array` +// where `backingArray` is intended. +@property (nonatomic, copy, readonly) NSArray *array __attribute__((deprecated)); + +// The array being sequenced. +@property (nonatomic, copy, readonly) NSArray *backingArray; + +// The index in the array from which the sequence starts. +@property (nonatomic, assign, readonly) NSUInteger offset; + +@end + +@implementation RACArraySequence + +#pragma mark Lifecycle + ++ (instancetype)sequenceWithArray:(NSArray *)array offset:(NSUInteger)offset { + NSCParameterAssert(offset <= array.count); + + if (offset == array.count) return self.empty; + + RACArraySequence *seq = [[self alloc] init]; + seq->_backingArray = [array copy]; + seq->_offset = offset; + return seq; +} + +#pragma mark RACSequence + +- (id)head { + return [self.backingArray objectAtIndex:self.offset]; +} + +- (RACSequence *)tail { + RACSequence *sequence = [self.class sequenceWithArray:self.backingArray offset:self.offset + 1]; + sequence.name = self.name; + return sequence; +} + +#pragma mark NSFastEnumeration + +- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(__unsafe_unretained id[])stackbuf count:(NSUInteger)len { + NSCParameterAssert(len > 0); + + if (state->state >= self.backingArray.count) { + // Enumeration has completed. + return 0; + } + + if (state->state == 0) { + state->state = self.offset; + + // Since a sequence doesn't mutate, this just needs to be set to + // something non-NULL. + state->mutationsPtr = state->extra; + } + + state->itemsPtr = stackbuf; + + NSUInteger startIndex = state->state; + NSUInteger index = 0; + + for (id value in self.backingArray) { + // Constructing an index set for -enumerateObjectsAtIndexes: can actually be + // slower than just skipping the items we don't care about. + if (index < startIndex) { + ++index; + continue; + } + + stackbuf[index - startIndex] = value; + + ++index; + if (index - startIndex >= len) break; + } + + NSCAssert(index > startIndex, @"Final index (%lu) should be greater than start index (%lu)", (unsigned long)index, (unsigned long)startIndex); + + state->state = index; + return index - startIndex; +} + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-implementations" +- (NSArray *)array { + return [self.backingArray subarrayWithRange:NSMakeRange(self.offset, self.backingArray.count - self.offset)]; +} +#pragma clang diagnostic pop + +#pragma mark NSCoding + +- (id)initWithCoder:(NSCoder *)coder { + self = [super initWithCoder:coder]; + if (self == nil) return nil; + + _backingArray = [coder decodeObjectForKey:@"array"]; + _offset = 0; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + // Encoding is handled in RACSequence. + [super encodeWithCoder:coder]; +} + +#pragma mark NSObject + +- (NSString *)description { + return [NSString stringWithFormat:@"<%@: %p>{ name = %@, array = %@ }", self.class, self, self.name, self.backingArray]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACBacktrace.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACBacktrace.h new file mode 100644 index 00000000..8588c802 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACBacktrace.h @@ -0,0 +1,70 @@ +// +// RACBacktrace.h +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2012-08-20. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#ifdef DEBUG + +extern void rac_dispatch_async(dispatch_queue_t queue, dispatch_block_t block); +extern void rac_dispatch_barrier_async(dispatch_queue_t queue, dispatch_block_t block); +extern void rac_dispatch_after(dispatch_time_t time, dispatch_queue_t queue, dispatch_block_t block); +extern void rac_dispatch_async_f(dispatch_queue_t queue, void *context, dispatch_function_t function); +extern void rac_dispatch_barrier_async_f(dispatch_queue_t queue, void *context, dispatch_function_t function); +extern void rac_dispatch_after_f(dispatch_time_t time, dispatch_queue_t queue, void *context, dispatch_function_t function); + +#define dispatch_async rac_dispatch_async +#define dispatch_barrier_async rac_dispatch_barrier_async +#define dispatch_after rac_dispatch_after +#define dispatch_async_f rac_dispatch_async_f +#define dispatch_barrier_async_f rac_dispatch_barrier_async_f +#define dispatch_after_f rac_dispatch_after_f + +/// Preserves backtraces across asynchronous calls. +/// +/// On OS X, you can enable the automatic capturing of asynchronous backtraces +/// (in Debug builds) by setting the `DYLD_INSERT_LIBRARIES` environment variable +/// to `@executable_path/../Frameworks/ReactiveCocoa.framework/ReactiveCocoa` in +/// your scheme's Run action settings. +/// +/// On iOS, your project and RAC will automatically use the `rac_` GCD functions +/// (declared above) for asynchronous work. Unfortunately, unlike OS X, it's +/// impossible to capture backtraces inside NSOperationQueue or other code +/// outside of your project. +/// +/// Once backtraces are being captured, you can `po [RACBacktrace backtrace]` in +/// the debugger to print them out at any time. You can even set up an alias in +/// ~/.lldbinit to do so: +/// +/// command alias racbt po [RACBacktrace backtrace] +/// +@interface RACBacktrace : NSObject + +/// The backtrace from any previous thread. +@property (nonatomic, strong, readonly) RACBacktrace *previousThreadBacktrace; + +/// The call stack of this backtrace's thread. +@property (nonatomic, copy, readonly) NSArray *callStackSymbols; + +/// Captures the current thread's backtrace, appending it to any backtrace from +/// a previous thread. ++ (instancetype)backtrace; + +/// Same as +backtrace, but omits the specified number of frames at the +/// top of the stack (in addition to this method itself). ++ (instancetype)backtraceIgnoringFrames:(NSUInteger)ignoreCount; + +@end + +#else + +#define rac_dispatch_async dispatch_async +#define rac_dispatch_barrier_async dispatch_barrier_async +#define rac_dispatch_after dispatch_after +#define rac_dispatch_async_f dispatch_async_f +#define rac_dispatch_barrier_async_f dispatch_barrier_async_f +#define rac_dispatch_after_f dispatch_after_f + +#endif diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACBacktrace.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACBacktrace.m new file mode 100644 index 00000000..a578e79e --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACBacktrace.m @@ -0,0 +1,244 @@ +// +// RACBacktrace.m +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2012-08-16. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import +#import +#import "RACBacktrace.h" + +#define RAC_BACKTRACE_MAX_CALL_STACK_FRAMES 128 + +#ifdef DEBUG + +// Undefine the macros that hide the real GCD functions. +#undef dispatch_async +#undef dispatch_barrier_async +#undef dispatch_after +#undef dispatch_async_f +#undef dispatch_barrier_async_f +#undef dispatch_after_f + +@interface RACBacktrace () { + void *_callStackAddresses[RAC_BACKTRACE_MAX_CALL_STACK_FRAMES]; + int _callStackSize; +} + +@property (nonatomic, strong, readwrite) RACBacktrace *previousThreadBacktrace; +@end + +@interface RACDispatchInfo : NSObject + +// The recorded backtrace. +@property (nonatomic, strong, readonly) RACBacktrace *backtrace; + +// The information for the original dispatch. +@property (nonatomic, readonly) dispatch_function_t function; +@property (nonatomic, readonly) void *context; +@property (nonatomic, readonly) dispatch_queue_t queue; + +- (id)initWithQueue:(dispatch_queue_t)queue function:(dispatch_function_t)function context:(void *)context; + +@end + +// Function for use with dispatch_async_f and friends, which will save the +// backtrace onto the current queue, then call through to the original dispatch. +static void RACTraceDispatch (void *ptr) { + // Balance out the retain necessary for async calls. + RACDispatchInfo *info __attribute__((objc_precise_lifetime)) = CFBridgingRelease(ptr); + + dispatch_queue_set_specific(info.queue, (void *)pthread_self(), (__bridge void *)info.backtrace, NULL); + info.function(info.context); + dispatch_queue_set_specific(info.queue, (void *)pthread_self(), NULL, NULL); +} + +// Always inline this function, for consistency in backtraces. +__attribute__((always_inline)) +static dispatch_block_t RACBacktraceBlock (dispatch_queue_t queue, dispatch_block_t block) { + RACBacktrace *backtrace = [RACBacktrace backtrace]; + + return [^{ + __autoreleasing RACBacktrace *backtraceKeptAlive = backtrace; + + dispatch_queue_set_specific(queue, (void *)pthread_self(), (__bridge void *)backtraceKeptAlive, NULL); + block(); + dispatch_queue_set_specific(queue, (void *)pthread_self(), NULL, NULL); + } copy]; +} + +void rac_dispatch_async(dispatch_queue_t queue, dispatch_block_t block) { + dispatch_async(queue, RACBacktraceBlock(queue, block)); +} + +void rac_dispatch_barrier_async(dispatch_queue_t queue, dispatch_block_t block) { + dispatch_barrier_async(queue, RACBacktraceBlock(queue, block)); +} + +void rac_dispatch_after(dispatch_time_t time, dispatch_queue_t queue, dispatch_block_t block) { + dispatch_after(time, queue, RACBacktraceBlock(queue, block)); +} + +void rac_dispatch_async_f(dispatch_queue_t queue, void *context, dispatch_function_t function) { + RACDispatchInfo *info = [[RACDispatchInfo alloc] initWithQueue:queue function:function context:context]; + dispatch_async_f(queue, (void *)CFBridgingRetain(info), &RACTraceDispatch); +} + +void rac_dispatch_barrier_async_f(dispatch_queue_t queue, void *context, dispatch_function_t function) { + RACDispatchInfo *info = [[RACDispatchInfo alloc] initWithQueue:queue function:function context:context]; + dispatch_barrier_async_f(queue, (void *)CFBridgingRetain(info), &RACTraceDispatch); +} + +void rac_dispatch_after_f(dispatch_time_t time, dispatch_queue_t queue, void *context, dispatch_function_t function) { + RACDispatchInfo *info = [[RACDispatchInfo alloc] initWithQueue:queue function:function context:context]; + dispatch_after_f(time, queue, (void *)CFBridgingRetain(info), &RACTraceDispatch); +} + +// This is what actually performs the injection. +// +// The DYLD_INSERT_LIBRARIES environment variable must include the RAC dynamic +// library in order for this to work. +__attribute__((used)) static struct { const void *replacement; const void *replacee; } interposers[] __attribute__((section("__DATA,__interpose"))) = { + { (const void *)&rac_dispatch_async, (const void *)&dispatch_async }, + { (const void *)&rac_dispatch_barrier_async, (const void *)&dispatch_barrier_async }, + { (const void *)&rac_dispatch_after, (const void *)&dispatch_after }, + { (const void *)&rac_dispatch_async_f, (const void *)&dispatch_async_f }, + { (const void *)&rac_dispatch_barrier_async_f, (const void *)&dispatch_barrier_async_f }, + { (const void *)&rac_dispatch_after_f, (const void *)&dispatch_after_f }, +}; + +static void RACSignalHandler (int sig) { + NSLog(@"Backtrace: %@", [RACBacktrace backtrace]); + fflush(stdout); + + // Restore the default action and raise the signal again. + signal(sig, SIG_DFL); + raise(sig); +} + +static void RACExceptionHandler (NSException *ex) { + NSLog(@"Uncaught exception %@", ex); + NSLog(@"Backtrace: %@", [RACBacktrace backtrace]); + fflush(stdout); +} + +@implementation RACBacktrace + +#pragma mark Properties + +- (NSArray *)callStackSymbols { + if (_callStackSize == 0) return @[]; + + char **symbols = backtrace_symbols(_callStackAddresses, _callStackSize); + NSMutableArray *array = [NSMutableArray arrayWithCapacity:(NSUInteger)_callStackSize]; + + for (int i = 0; i < _callStackSize; i++) { + NSString *str = @(symbols[i]); + [array addObject:str]; + } + + free(symbols); + return array; +} + +#pragma mark Initialization + ++ (void)load { + @autoreleasepool { + NSString *libraries = [[[NSProcessInfo processInfo] environment] objectForKey:@"DYLD_INSERT_LIBRARIES"]; + + // Don't install our handlers if we're not actually intercepting function + // calls. + if ([libraries rangeOfString:@"ReactiveCocoa"].length == 0) return; + + NSLog(@"*** Enabling asynchronous backtraces"); + + NSSetUncaughtExceptionHandler(&RACExceptionHandler); + } + + signal(SIGILL, &RACSignalHandler); + signal(SIGTRAP, &RACSignalHandler); + signal(SIGABRT, &RACSignalHandler); + signal(SIGFPE, &RACSignalHandler); + signal(SIGBUS, &RACSignalHandler); + signal(SIGSEGV, &RACSignalHandler); + signal(SIGSYS, &RACSignalHandler); + signal(SIGPIPE, &RACSignalHandler); +} + +#pragma mark Backtraces + ++ (instancetype)backtrace { + return [self backtraceIgnoringFrames:1]; +} + ++ (instancetype)backtraceIgnoringFrames:(NSUInteger)ignoreCount { + @autoreleasepool { + RACBacktrace *oldBacktrace = (__bridge id)dispatch_get_specific((void *)pthread_self()); + + RACBacktrace *newBacktrace = [[RACBacktrace alloc] init]; + newBacktrace.previousThreadBacktrace = oldBacktrace; + + int size = backtrace(newBacktrace->_callStackAddresses, RAC_BACKTRACE_MAX_CALL_STACK_FRAMES); + + // Omit this method plus however many others from the backtrace. + ++ignoreCount; + if ((NSUInteger)size > ignoreCount) { + memmove(newBacktrace->_callStackAddresses, newBacktrace->_callStackAddresses + ignoreCount, ((NSUInteger)size - ignoreCount) * sizeof(char *)); + size -= (int)ignoreCount; + } + + newBacktrace->_callStackSize = size; + return newBacktrace; + } +} + +#pragma mark NSObject + +- (NSString *)description { + NSString *str = [NSString stringWithFormat:@"%@", self.callStackSymbols]; + if (self.previousThreadBacktrace != nil) { + str = [str stringByAppendingFormat:@"\n\n... asynchronously invoked from: %@", self.previousThreadBacktrace]; + } + + return str; +} + +@end + +@implementation RACDispatchInfo + +#pragma mark Lifecycle + +- (id)initWithQueue:(dispatch_queue_t)queue function:(dispatch_function_t)function context:(void *)context { + @autoreleasepool { + NSCParameterAssert(queue != NULL); + NSCParameterAssert(function != NULL); + + self = [super init]; + if (self == nil) return nil; + + _backtrace = [RACBacktrace backtraceIgnoringFrames:1]; + + dispatch_retain(queue); + _queue = queue; + + _function = function; + _context = context; + + return self; + } +} + +- (void)dealloc { + if (_queue != NULL) { + dispatch_release(_queue); + _queue = NULL; + } +} + +@end + +#endif diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACBehaviorSubject.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACBehaviorSubject.h new file mode 100644 index 00000000..2f9e0dbc --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACBehaviorSubject.h @@ -0,0 +1,19 @@ +// +// RACBehaviorSubject.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 3/16/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACSubject.h" + + +/// A behavior subject sends the last value it received when it is subscribed to. +@interface RACBehaviorSubject : RACSubject + +/// Creates a new behavior subject with a default value. If it hasn't received +/// any values when it gets subscribed to, it sends the default value. ++ (instancetype)behaviorSubjectWithDefaultValue:(id)value; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACBehaviorSubject.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACBehaviorSubject.m new file mode 100644 index 00000000..dfda2ac0 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACBehaviorSubject.m @@ -0,0 +1,56 @@ +// +// RACBehaviorSubject.m +// ReactiveCocoa +// +// Created by Josh Abernathy on 3/16/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACBehaviorSubject.h" +#import "RACDisposable.h" +#import "RACScheduler+Private.h" + +@interface RACBehaviorSubject () + +// This property should only be used while synchronized on self. +@property (nonatomic, strong) id currentValue; + +@end + +@implementation RACBehaviorSubject + +#pragma mark Lifecycle + ++ (instancetype)behaviorSubjectWithDefaultValue:(id)value { + RACBehaviorSubject *subject = [self subject]; + subject.currentValue = value; + return subject; +} + +#pragma mark RACSignal + +- (RACDisposable *)subscribe:(id)subscriber { + RACDisposable *subscriptionDisposable = [super subscribe:subscriber]; + + RACDisposable *schedulingDisposable = [RACScheduler.subscriptionScheduler schedule:^{ + @synchronized (self) { + [subscriber sendNext:self.currentValue]; + } + }]; + + return [RACDisposable disposableWithBlock:^{ + [subscriptionDisposable dispose]; + [schedulingDisposable dispose]; + }]; +} + +#pragma mark RACSubscriber + +- (void)sendNext:(id)value { + @synchronized (self) { + self.currentValue = value; + [super sendNext:value]; + } +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACBlockTrampoline.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACBlockTrampoline.h new file mode 100644 index 00000000..01bf3c6f --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACBlockTrampoline.h @@ -0,0 +1,30 @@ +// +// RACBlockTrampoline.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 10/21/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import + +@class RACTuple; + +/// Allows a limited type of dynamic block invocation. +@interface RACBlockTrampoline : NSObject + +/// Invokes the given block with the given arguments. All of the block's +/// argument types must be objects and it must be typed to return an object. +/// +/// At this time, it only supports blocks that take up to 15 arguments. Any more +/// is just cray. +/// +/// block - The block to invoke. Must accept as many arguments as are given in +/// the arguments array. Cannot be nil. +/// arguments - The arguments with which to invoke the block. `RACTupleNil`s will +/// be passed as nils. +/// +/// Returns the return value of invoking the block. ++ (id)invokeBlock:(id)block withArguments:(RACTuple *)arguments; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACBlockTrampoline.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACBlockTrampoline.m new file mode 100644 index 00000000..07903dd9 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACBlockTrampoline.m @@ -0,0 +1,156 @@ +// +// RACBlockTrampoline.m +// ReactiveCocoa +// +// Created by Josh Abernathy on 10/21/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACBlockTrampoline.h" +#import "RACTuple.h" + +@interface RACBlockTrampoline () +@property (nonatomic, readonly, copy) id block; +@end + +@implementation RACBlockTrampoline + +#pragma mark API + +- (id)initWithBlock:(id)block { + self = [super init]; + if (self == nil) return nil; + + _block = [block copy]; + + return self; +} + ++ (id)invokeBlock:(id)block withArguments:(RACTuple *)arguments { + NSCParameterAssert(block != NULL); + + RACBlockTrampoline *trampoline = [[self alloc] initWithBlock:block]; + return [trampoline invokeWithArguments:arguments]; +} + +- (id)invokeWithArguments:(RACTuple *)arguments { + SEL selector = [self selectorForArgumentCount:arguments.count]; + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[self methodSignatureForSelector:selector]]; + invocation.selector = selector; + invocation.target = self; + + for (NSUInteger i = 0; i < arguments.count; i++) { + id arg = arguments[i]; + NSInteger argIndex = (NSInteger)(i + 2); + [invocation setArgument:&arg atIndex:argIndex]; + } + + [invocation invoke]; + + __unsafe_unretained id returnVal; + [invocation getReturnValue:&returnVal]; + return returnVal; +} + +- (SEL)selectorForArgumentCount:(NSUInteger)count { + NSCParameterAssert(count > 0); + + switch (count) { + case 0: return NULL; + case 1: return @selector(performWith:); + case 2: return @selector(performWith::); + case 3: return @selector(performWith:::); + case 4: return @selector(performWith::::); + case 5: return @selector(performWith:::::); + case 6: return @selector(performWith::::::); + case 7: return @selector(performWith:::::::); + case 8: return @selector(performWith::::::::); + case 9: return @selector(performWith:::::::::); + case 10: return @selector(performWith::::::::::); + case 11: return @selector(performWith:::::::::::); + case 12: return @selector(performWith::::::::::::); + case 13: return @selector(performWith:::::::::::::); + case 14: return @selector(performWith::::::::::::::); + case 15: return @selector(performWith:::::::::::::::); + } + + NSCAssert(NO, @"The argument count is too damn high! Only blocks of up to 15 arguments are currently supported."); + return NULL; +} + +- (id)performWith:(id)obj1 { + id (^block)(id) = self.block; + return block(obj1); +} + +- (id)performWith:(id)obj1 :(id)obj2 { + id (^block)(id, id) = self.block; + return block(obj1, obj2); +} + +- (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 { + id (^block)(id, id, id) = self.block; + return block(obj1, obj2, obj3); +} + +- (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 { + id (^block)(id, id, id, id) = self.block; + return block(obj1, obj2, obj3, obj4); +} + +- (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 :(id)obj5 { + id (^block)(id, id, id, id, id) = self.block; + return block(obj1, obj2, obj3, obj4, obj5); +} + +- (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 :(id)obj5 :(id)obj6 { + id (^block)(id, id, id, id, id, id) = self.block; + return block(obj1, obj2, obj3, obj4, obj5, obj6); +} + +- (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 :(id)obj5 :(id)obj6 :(id)obj7 { + id (^block)(id, id, id, id, id, id, id) = self.block; + return block(obj1, obj2, obj3, obj4, obj5, obj6, obj7); +} + +- (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 :(id)obj5 :(id)obj6 :(id)obj7 :(id)obj8 { + id (^block)(id, id, id, id, id, id, id, id) = self.block; + return block(obj1, obj2, obj3, obj4, obj5, obj6, obj7, obj8); +} + +- (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 :(id)obj5 :(id)obj6 :(id)obj7 :(id)obj8 :(id)obj9 { + id (^block)(id, id, id, id, id, id, id, id, id) = self.block; + return block(obj1, obj2, obj3, obj4, obj5, obj6, obj7, obj8, obj9); +} + +- (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 :(id)obj5 :(id)obj6 :(id)obj7 :(id)obj8 :(id)obj9 :(id)obj10 { + id (^block)(id, id, id, id, id, id, id, id, id, id) = self.block; + return block(obj1, obj2, obj3, obj4, obj5, obj6, obj7, obj8, obj9, obj10); +} + +- (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 :(id)obj5 :(id)obj6 :(id)obj7 :(id)obj8 :(id)obj9 :(id)obj10 :(id)obj11 { + id (^block)(id, id, id, id, id, id, id, id, id, id, id) = self.block; + return block(obj1, obj2, obj3, obj4, obj5, obj6, obj7, obj8, obj9, obj10, obj11); +} + +- (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 :(id)obj5 :(id)obj6 :(id)obj7 :(id)obj8 :(id)obj9 :(id)obj10 :(id)obj11 :(id)obj12 { + id (^block)(id, id, id, id, id, id, id, id, id, id, id, id) = self.block; + return block(obj1, obj2, obj3, obj4, obj5, obj6, obj7, obj8, obj9, obj10, obj11, obj12); +} + +- (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 :(id)obj5 :(id)obj6 :(id)obj7 :(id)obj8 :(id)obj9 :(id)obj10 :(id)obj11 :(id)obj12 :(id)obj13 { + id (^block)(id, id, id, id, id, id, id, id, id, id, id, id, id) = self.block; + return block(obj1, obj2, obj3, obj4, obj5, obj6, obj7, obj8, obj9, obj10, obj11, obj12, obj13); +} + +- (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 :(id)obj5 :(id)obj6 :(id)obj7 :(id)obj8 :(id)obj9 :(id)obj10 :(id)obj11 :(id)obj12 :(id)obj13 :(id)obj14 { + id (^block)(id, id, id, id, id, id, id, id, id, id, id, id, id, id) = self.block; + return block(obj1, obj2, obj3, obj4, obj5, obj6, obj7, obj8, obj9, obj10, obj11, obj12, obj13, obj14); +} + +- (id)performWith:(id)obj1 :(id)obj2 :(id)obj3 :(id)obj4 :(id)obj5 :(id)obj6 :(id)obj7 :(id)obj8 :(id)obj9 :(id)obj10 :(id)obj11 :(id)obj12 :(id)obj13 :(id)obj14 :(id)obj15 { + id (^block)(id, id, id, id, id, id, id, id, id, id, id, id, id, id, id) = self.block; + return block(obj1, obj2, obj3, obj4, obj5, obj6, obj7, obj8, obj9, obj10, obj11, obj12, obj13, obj14, obj15); +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACChannel.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACChannel.h new file mode 100644 index 00000000..ef1d6f1b --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACChannel.h @@ -0,0 +1,70 @@ +// +// RACChannel.h +// ReactiveCocoa +// +// Created by Uri Baghin on 01/01/2013. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "RACSignal.h" +#import "RACSubscriber.h" + +@class RACChannelTerminal; + +/// A two-way channel. +/// +/// Conceptually, RACChannel can be thought of as a bidirectional connection, +/// composed of two controllable signals that work in parallel. +/// +/// For example, when connecting between a view and a model: +/// +/// Model View +/// `leadingTerminal` ------> `followingTerminal` +/// `leadingTerminal` <------ `followingTerminal` +/// +/// The initial value of the model and all future changes to it are _sent on_ the +/// `leadingTerminal`, and _received by_ subscribers of the `followingTerminal`. +/// +/// Likewise, whenever the user changes the value of the view, that value is sent +/// on the `followingTerminal`, and received in the model from the +/// `leadingTerminal`. However, the initial value of the view is not received +/// from the `leadingTerminal` (only future changes). +@interface RACChannel : NSObject + +/// The terminal which "leads" the channel, by sending its latest value +/// immediately to new subscribers of the `followingTerminal`. +/// +/// New subscribers to this terminal will not receive a starting value, but will +/// receive all future values that are sent to the `followingTerminal`. +@property (nonatomic, strong, readonly) RACChannelTerminal *leadingTerminal; + +/// The terminal which "follows" the lead of the other terminal, only sending +/// _future_ values to the subscribers of the `leadingTerminal`. +/// +/// The latest value sent to the `leadingTerminal` (if any) will be sent +/// immediately to new subscribers of this terminal, and then all future values +/// as well. +@property (nonatomic, strong, readonly) RACChannelTerminal *followingTerminal; + +@end + +/// Represents one end of a RACChannel. +/// +/// An terminal is similar to a socket or pipe -- it represents one end of +/// a connection (the RACChannel, in this case). Values sent to this terminal +/// will _not_ be received by its subscribers. Instead, the values will be sent +/// to the subscribers of the RACChannel's _other_ terminal. +/// +/// For example, when using the `followingTerminal`, _sent_ values can only be +/// _received_ from the `leadingTerminal`, and vice versa. +/// +/// To make it easy to terminate a RACChannel, `error` and `completed` events +/// sent to either terminal will be received by the subscribers of _both_ +/// terminals. +/// +/// Do not instantiate this class directly. Create a RACChannel instead. +@interface RACChannelTerminal : RACSignal + +- (id)init __attribute__((unavailable("Instantiate a RACChannel instead"))); + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACChannel.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACChannel.m new file mode 100644 index 00000000..5aae48d5 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACChannel.m @@ -0,0 +1,91 @@ +// +// RACChannel.m +// ReactiveCocoa +// +// Created by Uri Baghin on 01/01/2013. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "RACChannel.h" +#import "RACDisposable.h" +#import "RACReplaySubject.h" +#import "RACSignal+Operations.h" +#import "RACUnit.h" + +@interface RACChannelTerminal () + +// The values for this terminal. +@property (nonatomic, strong, readonly) RACSignal *values; + +// A subscriber will will send values to the other terminal. +@property (nonatomic, strong, readonly) id otherTerminal; + +- (id)initWithValues:(RACSignal *)values otherTerminal:(id)otherTerminal; + +@end + +@implementation RACChannel + +- (id)init { + self = [super init]; + if (self == nil) return nil; + + // We don't want any starting value from the leadingSubject, but we do want + // error and completion to be replayed. + RACReplaySubject *leadingSubject = [[RACReplaySubject replaySubjectWithCapacity:0] setNameWithFormat:@"leadingSubject"]; + RACReplaySubject *followingSubject = [[RACReplaySubject replaySubjectWithCapacity:1] setNameWithFormat:@"followingSubject"]; + + // Propagate errors and completion to everything. + [[leadingSubject ignoreValues] subscribe:followingSubject]; + [[followingSubject ignoreValues] subscribe:leadingSubject]; + + _leadingTerminal = [[[RACChannelTerminal alloc] initWithValues:leadingSubject otherTerminal:followingSubject] setNameWithFormat:@"leadingTerminal"]; + _followingTerminal = [[[RACChannelTerminal alloc] initWithValues:followingSubject otherTerminal:leadingSubject] setNameWithFormat:@"followingTerminal"]; + + return self; +} + +@end + +@implementation RACChannelTerminal + +#pragma mark Lifecycle + +- (id)initWithValues:(RACSignal *)values otherTerminal:(id)otherTerminal { + NSCParameterAssert(values != nil); + NSCParameterAssert(otherTerminal != nil); + + self = [super init]; + if (self == nil) return nil; + + _values = values; + _otherTerminal = otherTerminal; + + return self; +} + +#pragma mark RACSignal + +- (RACDisposable *)subscribe:(id)subscriber { + return [self.values subscribe:subscriber]; +} + +#pragma mark + +- (void)sendNext:(id)value { + [self.otherTerminal sendNext:value]; +} + +- (void)sendError:(NSError *)error { + [self.otherTerminal sendError:error]; +} + +- (void)sendCompleted { + [self.otherTerminal sendCompleted]; +} + +- (void)didSubscribeWithDisposable:(RACDisposable *)disposable { + [self.otherTerminal didSubscribeWithDisposable:disposable]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACCommand.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACCommand.h new file mode 100644 index 00000000..6fefa6b1 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACCommand.h @@ -0,0 +1,123 @@ +// +// RACCommand.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 3/3/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import + +@class RACSignal; + +/// The domain for errors originating within `RACCommand`. +extern NSString * const RACCommandErrorDomain; + +/// -execute: was invoked while the command was disabled. +extern const NSInteger RACCommandErrorNotEnabled; + +/// A `userInfo` key for an error, associated with the `RACCommand` that the +/// error originated from. +/// +/// This is included only when the error code is `RACCommandErrorNotEnabled`. +extern NSString * const RACUnderlyingCommandErrorKey; + +/// A command is a signal triggered in response to some action, typically +/// UI-related. +@interface RACCommand : NSObject + +/// A signal of the signals returned by successful invocations of -execute: +/// (i.e., while the receiver is `enabled`). +/// +/// Errors will be automatically caught upon the inner signals, and sent upon +/// `errors` instead. If you _want_ to receive inner errors, use -execute: or +/// -[RACSignal materialize]. +/// +/// Only executions that begin _after_ subscription will be sent upon this +/// signal. All inner signals will arrive upon the main thread. +@property (nonatomic, strong, readonly) RACSignal *executionSignals; + +/// A signal of whether this command is currently executing. +/// +/// This will send YES whenever -execute: is invoked and the created signal has +/// not yet terminated. Once all executions have terminated, `executing` will +/// send NO. +/// +/// This signal will send its current value upon subscription, and then all +/// future values on the main thread. +@property (nonatomic, strong, readonly) RACSignal *executing; + +/// A signal of whether this command is able to execute. +/// +/// This will send NO if: +/// +/// - The command was created with an `enabledSignal`, and NO is sent upon that +/// signal, or +/// - `allowsConcurrentExecution` is NO and the command has started executing. +/// +/// Once the above conditions are no longer met, the signal will send YES. +/// +/// This signal will send its current value upon subscription, and then all +/// future values on the main thread. +@property (nonatomic, strong, readonly) RACSignal *enabled; + +/// Forwards any errors that occur within signals returned by -execute:. +/// +/// When an error occurs on a signal returned from -execute:, this signal will +/// send the associated NSError value as a `next` event (since an `error` event +/// would terminate the stream). +/// +/// After subscription, this signal will send all future errors on the main +/// thread. +@property (nonatomic, strong, readonly) RACSignal *errors; + +/// Whether the command allows multiple executions to proceed concurrently. +/// +/// The default value for this property is NO. +@property (atomic, assign) BOOL allowsConcurrentExecution; + +/// Invokes -initWithSignalBlock:enabled: with a nil `enabledSignal`. +- (id)initWithSignalBlock:(RACSignal * (^)(id input))signalBlock; + +/// Initializes a command that is conditionally enabled. +/// +/// This is the designated initializer for this class. +/// +/// enabledSignal - A signal of BOOLs which indicate whether the command should +/// be enabled. `enabled` will be based on the latest value sent +/// from this signal. Before any values are sent, `enabled` will +/// default to YES. This argument may be nil. +/// signalBlock - A block which will map each input value (passed to -execute:) +/// to a signal of work. The returned signal will be multicasted +/// to a replay subject, sent on `executionSignals`, then +/// subscribed to synchronously. Neither the block nor the +/// returned signal may be nil. +- (id)initWithEnabled:(RACSignal *)enabledSignal signalBlock:(RACSignal * (^)(id input))signalBlock; + +/// If the receiver is enabled, this method will: +/// +/// 1. Invoke the `signalBlock` given at the time of initialization. +/// 2. Multicast the returned signal to a RACReplaySubject. +/// 3. Send the multicasted signal on `executionSignals`. +/// 4. Subscribe (connect) to the original signal on the main thread. +/// +/// input - The input value to pass to the receiver's `signalBlock`. This may be +/// nil. +/// +/// Returns the multicasted signal, after subscription. If the receiver is not +/// enabled, returns a signal that will send an error with code +/// RACCommandErrorNotEnabled. +- (RACSignal *)execute:(id)input; + +@end + +@interface RACCommand (Unavailable) + +@property (atomic, readonly) BOOL canExecute __attribute__((unavailable("Use the 'enabled' signal instead"))); + ++ (instancetype)command __attribute__((unavailable("Use -initWithSignalBlock: instead"))); ++ (instancetype)commandWithCanExecuteSignal:(RACSignal *)canExecuteSignal __attribute__((unavailable("Use -initWithEnabled:signalBlock: instead"))); +- (id)initWithCanExecuteSignal:(RACSignal *)canExecuteSignal __attribute__((unavailable("Use -initWithEnabled:signalBlock: instead"))); +- (RACSignal *)addSignalBlock:(RACSignal * (^)(id value))signalBlock __attribute__((unavailable("Pass the signalBlock to -initWithSignalBlock: instead"))); + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACCommand.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACCommand.m new file mode 100644 index 00000000..36527b41 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACCommand.m @@ -0,0 +1,273 @@ +// +// RACCommand.m +// ReactiveCocoa +// +// Created by Josh Abernathy on 3/3/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACCommand.h" +#import "RACEXTScope.h" +#import "NSArray+RACSequenceAdditions.h" +#import "NSObject+RACDeallocating.h" +#import "NSObject+RACDescription.h" +#import "NSObject+RACPropertySubscribing.h" +#import "RACMulticastConnection.h" +#import "RACReplaySubject.h" +#import "RACScheduler.h" +#import "RACSequence.h" +#import "RACSerialDisposable.h" +#import "RACSignal+Operations.h" +#import + +NSString * const RACCommandErrorDomain = @"RACCommandErrorDomain"; +NSString * const RACUnderlyingCommandErrorKey = @"RACUnderlyingCommandErrorKey"; + +const NSInteger RACCommandErrorNotEnabled = 1; + +@interface RACCommand () { + // The mutable array backing `activeExecutionSignals`. + // + // This should only be used while synchronized on `self`. + NSMutableArray *_activeExecutionSignals; + + // Atomic backing variable for `allowsConcurrentExecution`. + volatile uint32_t _allowsConcurrentExecution; +} + +// An array of signals representing in-flight executions, in the order they +// began. +// +// This property is KVO-compliant. +@property (atomic, copy, readonly) NSArray *activeExecutionSignals; + +// `enabled`, but without a hop to the main thread. +// +// Values from this signal may arrive on any thread. +@property (nonatomic, strong, readonly) RACSignal *immediateEnabled; + +// The signal block that the receiver was initialized with. +@property (nonatomic, copy, readonly) RACSignal * (^signalBlock)(id input); + +// Improves the performance of KVO on the receiver. +// +// See the documentation for for more information. +@property (atomic) void *observationInfo; + +// Adds a signal to `activeExecutionSignals` and generates a KVO notification. +- (void)addActiveExecutionSignal:(RACSignal *)signal; + +// Removes a signal from `activeExecutionSignals` and generates a KVO +// notification. +- (void)removeActiveExecutionSignal:(RACSignal *)signal; + +@end + +@implementation RACCommand + +#pragma mark Properties + +- (BOOL)allowsConcurrentExecution { + return _allowsConcurrentExecution != 0; +} + +- (void)setAllowsConcurrentExecution:(BOOL)allowed { + [self willChangeValueForKey:@keypath(self.allowsConcurrentExecution)]; + + if (allowed) { + OSAtomicOr32Barrier(1, &_allowsConcurrentExecution); + } else { + OSAtomicAnd32Barrier(0, &_allowsConcurrentExecution); + } + + [self didChangeValueForKey:@keypath(self.allowsConcurrentExecution)]; +} + +- (NSArray *)activeExecutionSignals { + @synchronized (self) { + return [_activeExecutionSignals copy]; + } +} + +- (void)addActiveExecutionSignal:(RACSignal *)signal { + NSCParameterAssert([signal isKindOfClass:RACSignal.class]); + + @synchronized (self) { + // The KVO notification has to be generated while synchronized, because + // it depends on the index remaining consistent. + NSIndexSet *indexes = [NSIndexSet indexSetWithIndex:_activeExecutionSignals.count]; + [self willChange:NSKeyValueChangeInsertion valuesAtIndexes:indexes forKey:@keypath(self.activeExecutionSignals)]; + [_activeExecutionSignals addObject:signal]; + [self didChange:NSKeyValueChangeInsertion valuesAtIndexes:indexes forKey:@keypath(self.activeExecutionSignals)]; + } +} + +- (void)removeActiveExecutionSignal:(RACSignal *)signal { + NSCParameterAssert([signal isKindOfClass:RACSignal.class]); + + @synchronized (self) { + // The indexes have to be calculated and the notification generated + // while synchronized, because they depend on the indexes remaining + // consistent. + NSIndexSet *indexes = [_activeExecutionSignals indexesOfObjectsPassingTest:^ BOOL (RACSignal *obj, NSUInteger index, BOOL *stop) { + return obj == signal; + }]; + + if (indexes.count == 0) return; + + [self willChange:NSKeyValueChangeRemoval valuesAtIndexes:indexes forKey:@keypath(self.activeExecutionSignals)]; + [_activeExecutionSignals removeObjectsAtIndexes:indexes]; + [self didChange:NSKeyValueChangeRemoval valuesAtIndexes:indexes forKey:@keypath(self.activeExecutionSignals)]; + } +} + +#pragma mark Lifecycle + +- (id)init { + NSCAssert(NO, @"Use -initWithSignalBlock: instead"); + return nil; +} + +- (id)initWithSignalBlock:(RACSignal * (^)(id input))signalBlock { + return [self initWithEnabled:nil signalBlock:signalBlock]; +} + +- (id)initWithEnabled:(RACSignal *)enabledSignal signalBlock:(RACSignal * (^)(id input))signalBlock { + NSCParameterAssert(signalBlock != nil); + + self = [super init]; + if (self == nil) return nil; + + _activeExecutionSignals = [[NSMutableArray alloc] init]; + _signalBlock = [signalBlock copy]; + + // A signal of additions to `activeExecutionSignals`. + RACSignal *newActiveExecutionSignals = [[[[[self + rac_valuesAndChangesForKeyPath:@keypath(self.activeExecutionSignals) options:NSKeyValueObservingOptionNew observer:nil] + reduceEach:^(id _, NSDictionary *change) { + NSArray *signals = change[NSKeyValueChangeNewKey]; + if (signals == nil) return [RACSignal empty]; + + return [signals.rac_sequence signalWithScheduler:RACScheduler.immediateScheduler]; + }] + concat] + publish] + autoconnect]; + + _executionSignals = [[[newActiveExecutionSignals + map:^(RACSignal *signal) { + return [signal catchTo:[RACSignal empty]]; + }] + deliverOn:RACScheduler.mainThreadScheduler] + setNameWithFormat:@"%@ -executionSignals", self]; + + // `errors` needs to be multicasted so that it picks up all + // `activeExecutionSignals` that are added. + // + // In other words, if someone subscribes to `errors` _after_ an execution + // has started, it should still receive any error from that execution. + RACMulticastConnection *errorsConnection = [[[newActiveExecutionSignals + flattenMap:^(RACSignal *signal) { + return [[signal + ignoreValues] + catch:^(NSError *error) { + return [RACSignal return:error]; + }]; + }] + deliverOn:RACScheduler.mainThreadScheduler] + publish]; + + _errors = [errorsConnection.signal setNameWithFormat:@"%@ -errors", self]; + [errorsConnection connect]; + + RACSignal *immediateExecuting = [RACObserve(self, activeExecutionSignals) map:^(NSArray *activeSignals) { + return @(activeSignals.count > 0); + }]; + + _executing = [[[[[immediateExecuting + deliverOn:RACScheduler.mainThreadScheduler] + // This is useful before the first value arrives on the main thread. + startWith:@NO] + distinctUntilChanged] + replayLast] + setNameWithFormat:@"%@ -executing", self]; + + RACSignal *moreExecutionsAllowed = [RACSignal + if:RACObserve(self, allowsConcurrentExecution) + then:[RACSignal return:@YES] + else:[immediateExecuting not]]; + + if (enabledSignal == nil) { + enabledSignal = [RACSignal return:@YES]; + } else { + enabledSignal = [[[enabledSignal + startWith:@YES] + takeUntil:self.rac_willDeallocSignal] + replayLast]; + } + + _immediateEnabled = [[RACSignal + combineLatest:@[ enabledSignal, moreExecutionsAllowed ]] + and]; + + _enabled = [[[[[self.immediateEnabled + take:1] + concat:[[self.immediateEnabled skip:1] deliverOn:RACScheduler.mainThreadScheduler]] + distinctUntilChanged] + replayLast] + setNameWithFormat:@"%@ -enabled", self]; + + return self; +} + +#pragma mark Execution + +- (RACSignal *)execute:(id)input { + // `immediateEnabled` is guaranteed to send a value upon subscription, so + // -first is acceptable here. + BOOL enabled = [[self.immediateEnabled first] boolValue]; + if (!enabled) { + NSError *error = [NSError errorWithDomain:RACCommandErrorDomain code:RACCommandErrorNotEnabled userInfo:@{ + NSLocalizedDescriptionKey: NSLocalizedString(@"The command is disabled and cannot be executed", nil), + RACUnderlyingCommandErrorKey: self + }]; + + return [RACSignal error:error]; + } + + RACSignal *signal = self.signalBlock(input); + NSCAssert(signal != nil, @"nil signal returned from signal block for value: %@", input); + + // We subscribe to the signal on the main thread so that it occurs _after_ + // -addActiveExecutionSignal: completes below. + // + // This means that `executing` and `enabled` will send updated values before + // the signal actually starts performing work. + RACMulticastConnection *connection = [[signal + subscribeOn:RACScheduler.mainThreadScheduler] + multicast:[RACReplaySubject subject]]; + + @weakify(self); + + [self addActiveExecutionSignal:connection.signal]; + [connection.signal subscribeError:^(NSError *error) { + @strongify(self); + [self removeActiveExecutionSignal:connection.signal]; + } completed:^{ + @strongify(self); + [self removeActiveExecutionSignal:connection.signal]; + }]; + + [connection connect]; + return [connection.signal setNameWithFormat:@"%@ -execute: %@", self, [input rac_description]]; +} + +#pragma mark NSKeyValueObserving + ++ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key { + // Generate all KVO notifications manually to avoid the performance impact + // of unnecessary swizzling. + return NO; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACCompoundDisposable.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACCompoundDisposable.h new file mode 100644 index 00000000..bb25f7d2 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACCompoundDisposable.h @@ -0,0 +1,48 @@ +// +// RACCompoundDisposable.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 11/30/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACDisposable.h" + +/// A disposable of disposables. When it is disposed, it disposes of all its +/// contained disposables. +/// +/// If -addDisposable: is called after the compound disposable has been disposed +/// of, the given disposable is immediately disposed. This allows a compound +/// disposable to act as a stand-in for a disposable that will be delivered +/// asynchronously. +@interface RACCompoundDisposable : RACDisposable + +/// Creates and returns a new compound disposable. ++ (instancetype)compoundDisposable; + +/// Creates and returns a new compound disposable containing the given +/// disposables. ++ (instancetype)compoundDisposableWithDisposables:(NSArray *)disposables; + +/// Adds the given disposable. If the receiving disposable has already been +/// disposed of, the given disposable is disposed immediately. +/// +/// This method is thread-safe. +/// +/// disposable - The disposable to add. This may be nil, in which case nothing +/// happens. +- (void)addDisposable:(RACDisposable *)disposable; + +/// Removes the specified disposable from the compound disposable (regardless of +/// its disposed status), or does nothing if it's not in the compound disposable. +/// +/// This is mainly useful for limiting the memory usage of the compound +/// disposable for long-running operations. +/// +/// This method is thread-safe. +/// +/// disposable - The disposable to remove. This argument may be nil (to make the +/// use of weak references easier). +- (void)removeDisposable:(RACDisposable *)disposable; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACCompoundDisposable.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACCompoundDisposable.m new file mode 100644 index 00000000..3b0471cc --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACCompoundDisposable.m @@ -0,0 +1,239 @@ +// +// RACCompoundDisposable.m +// ReactiveCocoa +// +// Created by Josh Abernathy on 11/30/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACCompoundDisposable.h" +#import "RACCompoundDisposableProvider.h" +#import + +// The number of child disposables for which space will be reserved directly in +// `RACCompoundDisposable`. +// +// This number has been empirically determined to provide a good tradeoff +// between performance, memory usage, and `RACCompoundDisposable` instance size +// in a moderately complex GUI application. +// +// Profile any change! +#define RACCompoundDisposableInlineCount 2 + +static CFMutableArrayRef RACCreateDisposablesArray(void) { + // Compare values using only pointer equality. + CFArrayCallBacks callbacks = kCFTypeArrayCallBacks; + callbacks.equal = NULL; + + return CFArrayCreateMutable(NULL, 0, &callbacks); +} + +@interface RACCompoundDisposable () { + // Used for synchronization. + OSSpinLock _spinLock; + + #if RACCompoundDisposableInlineCount + // A fast array to the first N of the receiver's disposables. + // + // Once this is full, `_disposables` will be created and used for additional + // disposables. + // + // This array should only be manipulated while _spinLock is held. + RACDisposable *_inlineDisposables[RACCompoundDisposableInlineCount]; + #endif + + // Contains the receiver's disposables. + // + // This array should only be manipulated while _spinLock is held. If + // `_disposed` is YES, this may be NULL. + CFMutableArrayRef _disposables; + + // Whether the receiver has already been disposed. + // + // This ivar should only be accessed while _spinLock is held. + BOOL _disposed; +} + +@end + +@implementation RACCompoundDisposable + +#pragma mark Properties + +- (BOOL)isDisposed { + OSSpinLockLock(&_spinLock); + BOOL disposed = _disposed; + OSSpinLockUnlock(&_spinLock); + + return disposed; +} + +#pragma mark Lifecycle + ++ (instancetype)compoundDisposable { + return [[self alloc] initWithDisposables:nil]; +} + ++ (instancetype)compoundDisposableWithDisposables:(NSArray *)disposables { + return [[self alloc] initWithDisposables:disposables]; +} + +- (id)initWithDisposables:(NSArray *)otherDisposables { + self = [self init]; + if (self == nil) return nil; + + #if RACCompoundDisposableInlineCount + [otherDisposables enumerateObjectsUsingBlock:^(RACDisposable *disposable, NSUInteger index, BOOL *stop) { + _inlineDisposables[index] = disposable; + + // Stop after this iteration if we've reached the end of the inlined + // array. + if (index == RACCompoundDisposableInlineCount - 1) *stop = YES; + }]; + #endif + + if (otherDisposables.count > RACCompoundDisposableInlineCount) { + _disposables = RACCreateDisposablesArray(); + + CFRange range = CFRangeMake(RACCompoundDisposableInlineCount, (CFIndex)otherDisposables.count - RACCompoundDisposableInlineCount); + CFArrayAppendArray(_disposables, (__bridge CFArrayRef)otherDisposables, range); + } + + return self; +} + +- (id)initWithBlock:(void (^)(void))block { + RACDisposable *disposable = [RACDisposable disposableWithBlock:block]; + return [self initWithDisposables:@[ disposable ]]; +} + +- (void)dealloc { + #if RACCompoundDisposableInlineCount + for (unsigned i = 0; i < RACCompoundDisposableInlineCount; i++) { + _inlineDisposables[i] = nil; + } + #endif + + if (_disposables != NULL) { + CFRelease(_disposables); + _disposables = NULL; + } +} + +#pragma mark Addition and Removal + +- (void)addDisposable:(RACDisposable *)disposable { + NSCParameterAssert(disposable != self); + if (disposable == nil) return; + + BOOL shouldDispose = NO; + + OSSpinLockLock(&_spinLock); + { + if (_disposed) { + shouldDispose = YES; + } else { + #if RACCompoundDisposableInlineCount + for (unsigned i = 0; i < RACCompoundDisposableInlineCount; i++) { + if (_inlineDisposables[i] == nil) { + _inlineDisposables[i] = disposable; + goto foundSlot; + } + } + #endif + + if (_disposables == NULL) _disposables = RACCreateDisposablesArray(); + CFArrayAppendValue(_disposables, (__bridge void *)disposable); + + if (RACCOMPOUNDDISPOSABLE_ADDED_ENABLED()) { + RACCOMPOUNDDISPOSABLE_ADDED(self.description.UTF8String, disposable.description.UTF8String, CFArrayGetCount(_disposables) + RACCompoundDisposableInlineCount); + } + + #if RACCompoundDisposableInlineCount + foundSlot:; + #endif + } + } + OSSpinLockUnlock(&_spinLock); + + // Performed outside of the lock in case the compound disposable is used + // recursively. + if (shouldDispose) [disposable dispose]; +} + +- (void)removeDisposable:(RACDisposable *)disposable { + if (disposable == nil) return; + + OSSpinLockLock(&_spinLock); + { + if (!_disposed) { + #if RACCompoundDisposableInlineCount + for (unsigned i = 0; i < RACCompoundDisposableInlineCount; i++) { + if (_inlineDisposables[i] == disposable) _inlineDisposables[i] = nil; + } + #endif + + if (_disposables != NULL) { + CFIndex count = CFArrayGetCount(_disposables); + for (CFIndex i = count - 1; i >= 0; i--) { + const void *item = CFArrayGetValueAtIndex(_disposables, i); + if (item == (__bridge void *)disposable) { + CFArrayRemoveValueAtIndex(_disposables, i); + } + } + + if (RACCOMPOUNDDISPOSABLE_REMOVED_ENABLED()) { + RACCOMPOUNDDISPOSABLE_REMOVED(self.description.UTF8String, disposable.description.UTF8String, CFArrayGetCount(_disposables) + RACCompoundDisposableInlineCount); + } + } + } + } + OSSpinLockUnlock(&_spinLock); +} + +#pragma mark RACDisposable + +static void disposeEach(const void *value, void *context) { + RACDisposable *disposable = (__bridge id)value; + [disposable dispose]; +} + +- (void)dispose { + #if RACCompoundDisposableInlineCount + RACDisposable *inlineCopy[RACCompoundDisposableInlineCount]; + #endif + + CFArrayRef remainingDisposables = NULL; + + OSSpinLockLock(&_spinLock); + { + _disposed = YES; + + #if RACCompoundDisposableInlineCount + for (unsigned i = 0; i < RACCompoundDisposableInlineCount; i++) { + inlineCopy[i] = _inlineDisposables[i]; + _inlineDisposables[i] = nil; + } + #endif + + remainingDisposables = _disposables; + _disposables = NULL; + } + OSSpinLockUnlock(&_spinLock); + + #if RACCompoundDisposableInlineCount + // Dispose outside of the lock in case the compound disposable is used + // recursively. + for (unsigned i = 0; i < RACCompoundDisposableInlineCount; i++) { + [inlineCopy[i] dispose]; + } + #endif + + if (remainingDisposables == NULL) return; + + CFIndex count = CFArrayGetCount(remainingDisposables); + CFArrayApplyFunction(remainingDisposables, CFRangeMake(0, count), &disposeEach, NULL); + CFRelease(remainingDisposables); +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACCompoundDisposableProvider.d b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACCompoundDisposableProvider.d new file mode 100644 index 00000000..847db19b --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACCompoundDisposableProvider.d @@ -0,0 +1,4 @@ +provider RACCompoundDisposable { + probe added(char *compoundDisposable, char *disposable, long newTotal); + probe removed(char *compoundDisposable, char *disposable, long newTotal); +}; diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDelegateProxy.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDelegateProxy.h new file mode 100644 index 00000000..7278f2b0 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDelegateProxy.h @@ -0,0 +1,28 @@ +// +// RACDelegateProxy.h +// ReactiveCocoa +// +// Created by Cody Krieger on 5/19/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import + +@class RACSignal; + +/// A delegate object suitable for using -rac_signalForSelector:fromProtocol: +/// upon. +@interface RACDelegateProxy : NSObject + +/// The delegate to which messages should be forwarded if not handled by +/// any -signalForSelector: applications. +@property (nonatomic, unsafe_unretained) id rac_proxiedDelegate; + +/// Creates a delegate proxy capable of responding to selectors from `protocol`. +- (instancetype)initWithProtocol:(Protocol *)protocol; + +/// Calls -rac_signalForSelector:fromProtocol: using the `protocol` specified +/// during initialization. +- (RACSignal *)signalForSelector:(SEL)selector; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDelegateProxy.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDelegateProxy.m new file mode 100644 index 00000000..1d4fcbcd --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDelegateProxy.m @@ -0,0 +1,78 @@ +// +// RACDelegateProxy.m +// ReactiveCocoa +// +// Created by Cody Krieger on 5/19/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACDelegateProxy.h" +#import "RACSignal+Operations.h" +#import "NSObject+RACSelectorSignal.h" +#import "NSObject+RACDeallocating.h" +#import + +@interface RACDelegateProxy () { + // Declared as an ivar to avoid method naming conflicts. + Protocol *_protocol; +} + +@end + +@implementation RACDelegateProxy + +#pragma mark Lifecycle + +- (instancetype)initWithProtocol:(Protocol *)protocol { + NSCParameterAssert(protocol != NULL); + + self = [super init]; + if (self == nil) return nil; + + class_addProtocol(self.class, protocol); + + _protocol = protocol; + + return self; +} + +#pragma mark API + +- (RACSignal *)signalForSelector:(SEL)selector { + return [self rac_signalForSelector:selector fromProtocol:_protocol]; +} + +#pragma mark NSObject + +- (BOOL)isProxy { + return YES; +} + +- (void)forwardInvocation:(NSInvocation *)invocation { + [invocation invokeWithTarget:self.rac_proxiedDelegate]; +} + +- (NSMethodSignature *)methodSignatureForSelector:(SEL)selector { + // Look for the selector as an optional instance method. + struct objc_method_description methodDescription = protocol_getMethodDescription(_protocol, selector, NO, YES); + + if (methodDescription.name == NULL) { + // Then fall back to looking for a required instance + // method. + methodDescription = protocol_getMethodDescription(_protocol, selector, YES, YES); + if (methodDescription.name == NULL) return [super methodSignatureForSelector:selector]; + } + + return [NSMethodSignature signatureWithObjCTypes:methodDescription.types]; +} + +- (BOOL)respondsToSelector:(SEL)selector { + // Add the delegate to the autorelease pool, so it doesn't get deallocated + // between this method call and -forwardInvocation:. + __autoreleasing id delegate = self.rac_proxiedDelegate; + if ([delegate respondsToSelector:selector]) return YES; + + return [super respondsToSelector:selector]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDisposable.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDisposable.h new file mode 100644 index 00000000..c044fea6 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDisposable.h @@ -0,0 +1,36 @@ +// +// RACDisposable.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 3/16/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import + +@class RACScopedDisposable; + + +/// A disposable encapsulates the work necessary to tear down and cleanup a +/// subscription. +@interface RACDisposable : NSObject + +/// Whether the receiver has been disposed. +/// +/// Use of this property is discouraged, since it may be set to `YES` +/// concurrently at any time. +/// +/// This property is not KVO-compliant. +@property (atomic, assign, getter = isDisposed, readonly) BOOL disposed; + ++ (instancetype)disposableWithBlock:(void (^)(void))block; + +/// Performs the disposal work. Can be called multiple times, though sebsequent +/// calls won't do anything. +- (void)dispose; + +/// Returns a new disposable which will dispose of this disposable when it gets +/// dealloc'd. +- (RACScopedDisposable *)asScopedDisposable; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDisposable.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDisposable.m new file mode 100644 index 00000000..08eceb22 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDisposable.m @@ -0,0 +1,92 @@ +// +// RACDisposable.m +// ReactiveCocoa +// +// Created by Josh Abernathy on 3/16/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACDisposable.h" +#import "RACScopedDisposable.h" +#import + +@interface RACDisposable () { + // A copied block of type void (^)(void) containing the logic for disposal, + // a pointer to `self` if no logic should be performed upon disposal, or + // NULL if the receiver is already disposed. + // + // This should only be used atomically. + void * volatile _disposeBlock; +} + +@end + +@implementation RACDisposable + +#pragma mark Properties + +- (BOOL)isDisposed { + return _disposeBlock == NULL; +} + +#pragma mark Lifecycle + +- (id)init { + self = [super init]; + if (self == nil) return nil; + + _disposeBlock = (__bridge void *)self; + OSMemoryBarrier(); + + return self; +} + +- (id)initWithBlock:(void (^)(void))block { + NSCParameterAssert(block != nil); + + self = [super init]; + if (self == nil) return nil; + + _disposeBlock = (void *)CFBridgingRetain([block copy]); + OSMemoryBarrier(); + + return self; +} + ++ (instancetype)disposableWithBlock:(void (^)(void))block { + return [[self alloc] initWithBlock:block]; +} + +- (void)dealloc { + if (_disposeBlock == NULL || _disposeBlock == (__bridge void *)self) return; + + CFRelease(_disposeBlock); + _disposeBlock = NULL; +} + +#pragma mark Disposal + +- (void)dispose { + void (^disposeBlock)(void) = NULL; + + while (YES) { + void *blockPtr = _disposeBlock; + if (OSAtomicCompareAndSwapPtrBarrier(blockPtr, NULL, &_disposeBlock)) { + if (blockPtr != (__bridge void *)self) { + disposeBlock = CFBridgingRelease(blockPtr); + } + + break; + } + } + + if (disposeBlock != nil) disposeBlock(); +} + +#pragma mark Scoped Disposables + +- (RACScopedDisposable *)asScopedDisposable { + return [RACScopedDisposable scopedDisposableWithDisposable:self]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDynamicSequence.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDynamicSequence.h new file mode 100644 index 00000000..4bbe4d15 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDynamicSequence.h @@ -0,0 +1,20 @@ +// +// RACDynamicSequence.h +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2012-10-29. +// Copyright (c) 2012 GitHub. All rights reserved. +// + +#import "RACSequence.h" + +/// Private class that implements a sequence dynamically using blocks. +@interface RACDynamicSequence : RACSequence + +/// Returns a sequence which evaluates `dependencyBlock` only once, the first +/// time either `headBlock` or `tailBlock` is evaluated. The result of +/// `dependencyBlock` will be passed into `headBlock` and `tailBlock` when +/// invoked. ++ (RACSequence *)sequenceWithLazyDependency:(id (^)(void))dependencyBlock headBlock:(id (^)(id dependency))headBlock tailBlock:(RACSequence *(^)(id dependency))tailBlock; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDynamicSequence.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDynamicSequence.m new file mode 100644 index 00000000..48a977b8 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDynamicSequence.m @@ -0,0 +1,197 @@ +// +// RACDynamicSequence.m +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2012-10-29. +// Copyright (c) 2012 GitHub. All rights reserved. +// + +#import "RACDynamicSequence.h" +#import + +// Determines how RACDynamicSequences will be deallocated before the next one is +// shifted onto the autorelease pool. +// +// This avoids stack overflows when deallocating long chains of dynamic +// sequences. +#define DEALLOC_OVERFLOW_GUARD 100 + +@interface RACDynamicSequence () { + // The value for the "head" property, if it's been evaluated already. + // + // Because it's legal for head to be nil, this ivar is valid any time + // headBlock is nil. + // + // This ivar should only be accessed while synchronized on self. + id _head; + + // The value for the "tail" property, if it's been evaluated already. + // + // Because it's legal for tail to be nil, this ivar is valid any time + // tailBlock is nil. + // + // This ivar should only be accessed while synchronized on self. + RACSequence *_tail; + + // The result of an evaluated `dependencyBlock`. + // + // This ivar is valid any time `hasDependency` is YES and `dependencyBlock` + // is nil. + // + // This ivar should only be accessed while synchronized on self. + id _dependency; +} + +// A block used to evaluate head. This should be set to nil after `_head` has been +// initialized. +// +// This is marked `strong` instead of `copy` because of some bizarre block +// copying bug. See https://github.com/ReactiveCocoa/ReactiveCocoa/pull/506. +// +// The signature of this block varies based on the value of `hasDependency`: +// +// - If YES, this block is of type `id (^)(id)`. +// - If NO, this block is of type `id (^)(void)`. +// +// This property should only be accessed while synchronized on self. +@property (nonatomic, strong) id headBlock; + +// A block used to evaluate tail. This should be set to nil after `_tail` has been +// initialized. +// +// This is marked `strong` instead of `copy` because of some bizarre block +// copying bug. See https://github.com/ReactiveCocoa/ReactiveCocoa/pull/506. +// +// The signature of this block varies based on the value of `hasDependency`: +// +// - If YES, this block is of type `RACSequence * (^)(id)`. +// - If NO, this block is of type `RACSequence * (^)(void)`. +// +// This property should only be accessed while synchronized on self. +@property (nonatomic, strong) id tailBlock; + +// Whether the receiver was initialized with a `dependencyBlock`. +// +// This property should only be accessed while synchronized on self. +@property (nonatomic, assign) BOOL hasDependency; + +// A dependency which must be evaluated before `headBlock` and `tailBlock`. This +// should be set to nil after `_dependency` and `dependencyBlockExecuted` have +// been set. +// +// This is marked `strong` instead of `copy` because of some bizarre block +// copying bug. See https://github.com/ReactiveCocoa/ReactiveCocoa/pull/506. +// +// This property should only be accessed while synchronized on self. +@property (nonatomic, strong) id (^dependencyBlock)(void); + +@end + +@implementation RACDynamicSequence + +#pragma mark Lifecycle + ++ (RACSequence *)sequenceWithHeadBlock:(id (^)(void))headBlock tailBlock:(RACSequence *(^)(void))tailBlock { + NSCParameterAssert(headBlock != nil); + + RACDynamicSequence *seq = [[RACDynamicSequence alloc] init]; + seq.headBlock = [headBlock copy]; + seq.tailBlock = [tailBlock copy]; + seq.hasDependency = NO; + return seq; +} + ++ (RACSequence *)sequenceWithLazyDependency:(id (^)(void))dependencyBlock headBlock:(id (^)(id dependency))headBlock tailBlock:(RACSequence *(^)(id dependency))tailBlock { + NSCParameterAssert(dependencyBlock != nil); + NSCParameterAssert(headBlock != nil); + + RACDynamicSequence *seq = [[RACDynamicSequence alloc] init]; + seq.headBlock = [headBlock copy]; + seq.tailBlock = [tailBlock copy]; + seq.dependencyBlock = [dependencyBlock copy]; + seq.hasDependency = YES; + return seq; +} + +- (void)dealloc { + static volatile int32_t directDeallocCount = 0; + + if (OSAtomicIncrement32(&directDeallocCount) >= DEALLOC_OVERFLOW_GUARD) { + OSAtomicAdd32(-DEALLOC_OVERFLOW_GUARD, &directDeallocCount); + + // Put this sequence's tail onto the autorelease pool so we stop + // recursing. + __autoreleasing RACSequence *tail __attribute__((unused)) = _tail; + } + + _tail = nil; +} + +#pragma mark RACSequence + +- (id)head { + @synchronized (self) { + id untypedHeadBlock = self.headBlock; + if (untypedHeadBlock == nil) return _head; + + if (self.hasDependency) { + if (self.dependencyBlock != nil) { + _dependency = self.dependencyBlock(); + self.dependencyBlock = nil; + } + + id (^headBlock)(id) = untypedHeadBlock; + _head = headBlock(_dependency); + } else { + id (^headBlock)(void) = untypedHeadBlock; + _head = headBlock(); + } + + self.headBlock = nil; + return _head; + } +} + +- (RACSequence *)tail { + @synchronized (self) { + id untypedTailBlock = self.tailBlock; + if (untypedTailBlock == nil) return _tail; + + if (self.hasDependency) { + if (self.dependencyBlock != nil) { + _dependency = self.dependencyBlock(); + self.dependencyBlock = nil; + } + + RACSequence * (^tailBlock)(id) = untypedTailBlock; + _tail = tailBlock(_dependency); + } else { + RACSequence * (^tailBlock)(void) = untypedTailBlock; + _tail = tailBlock(); + } + + if (_tail.name == nil) _tail.name = self.name; + + self.tailBlock = nil; + return _tail; + } +} + +#pragma mark NSObject + +- (NSString *)description { + id head = @"(unresolved)"; + id tail = @"(unresolved)"; + + @synchronized (self) { + if (self.headBlock == nil) head = _head; + if (self.tailBlock == nil) { + tail = _tail; + if (tail == self) tail = @"(self)"; + } + } + + return [NSString stringWithFormat:@"<%@: %p>{ name = %@, head = %@, tail = %@ }", self.class, self, self.name, head, tail]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDynamicSignal.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDynamicSignal.h new file mode 100644 index 00000000..d98d486c --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDynamicSignal.h @@ -0,0 +1,17 @@ +// +// RACDynamicSignal.h +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2013-10-10. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import + +// A private `RACSignal` subclasses that implements its subscription behavior +// using a block. +@interface RACDynamicSignal : RACSignal + ++ (RACSignal *)createSignal:(RACDisposable * (^)(id subscriber))didSubscribe; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDynamicSignal.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDynamicSignal.m new file mode 100644 index 00000000..36cbf4bb --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACDynamicSignal.m @@ -0,0 +1,188 @@ +// +// RACDynamicSignal.m +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2013-10-10. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "RACDynamicSignal.h" +#import "RACEXTScope.h" +#import "RACPassthroughSubscriber.h" +#import "RACScheduler+Private.h" +#import "RACSubscriber.h" +#import + +// Retains dynamic signals while they wait for subscriptions. +// +// This set must only be used on the main thread. +static CFMutableSetRef RACActiveSignals = nil; + +// A linked list of RACDynamicSignals, used in RACActiveSignalsToCheck. +typedef struct RACSignalList { + CFTypeRef retainedSignal; + struct RACSignalList * restrict next; +} RACSignalList; + +// An atomic queue of signals to check for subscribers. If any signals with zero +// subscribers are found in this queue, they are removed from RACActiveSignals. +static OSQueueHead RACActiveSignalsToCheck = OS_ATOMIC_QUEUE_INIT; + +// Whether RACActiveSignalsToCheck will be enumerated on the next iteration on +// the main run loop. +static volatile uint32_t RACWillCheckActiveSignals = 0; + +@interface RACDynamicSignal () { + // Contains all subscribers to the receiver. + // + // All access to this array must be synchronized using `_subscribersLock`. + NSMutableArray *_subscribers; + + // Synchronizes access to `_subscribers`. + OSSpinLock _subscribersLock; +} + +// The block to invoke for each subscriber. +@property (nonatomic, copy, readonly) RACDisposable * (^didSubscribe)(id subscriber); + +@end + +@implementation RACDynamicSignal + +#pragma mark Lifecycle + ++ (void)initialize { + if (self != RACDynamicSignal.class) return; + + CFSetCallBacks callbacks = kCFTypeSetCallBacks; + + // Use pointer equality and hashes for membership testing. + callbacks.equal = NULL; + callbacks.hash = NULL; + + RACActiveSignals = CFSetCreateMutable(NULL, 0, &callbacks); +} + ++ (RACSignal *)createSignal:(RACDisposable * (^)(id subscriber))didSubscribe { + RACDynamicSignal *signal = [[self alloc] init]; + signal->_didSubscribe = [didSubscribe copy]; + return [signal setNameWithFormat:@"+createSignal:"]; +} + +- (instancetype)init { + self = [super init]; + if (self == nil) return nil; + + // As soon as we're created we're already trying to be released. Such is life. + [self invalidateGlobalRefIfNoNewSubscribersShowUp]; + + return self; +} + +static void RACCheckActiveSignals(void) { + // Clear this flag now, so another thread can re-dispatch to the main queue + // as needed. + OSAtomicAnd32Barrier(0, &RACWillCheckActiveSignals); + + RACSignalList * restrict elem; + + while ((elem = OSAtomicDequeue(&RACActiveSignalsToCheck, offsetof(RACSignalList, next))) != NULL) { + RACDynamicSignal *signal = CFBridgingRelease(elem->retainedSignal); + free(elem); + + if (signal.hasSubscribers) { + // We want to keep the signal around until all its subscribers are done + CFSetAddValue(RACActiveSignals, (__bridge void *)signal); + } else { + CFSetRemoveValue(RACActiveSignals, (__bridge void *)signal); + } + } +} + +- (void)invalidateGlobalRefIfNoNewSubscribersShowUp { + // If no one subscribes in one pass of the main run loop, then we're free to + // go. It's up to the caller to keep us alive if they still want us. + RACSignalList *elem = malloc(sizeof(*elem)); + + // This also serves to retain the signal until the next pass. + elem->retainedSignal = CFBridgingRetain(self); + OSAtomicEnqueue(&RACActiveSignalsToCheck, elem, offsetof(RACSignalList, next)); + + // Not using a barrier because duplicate scheduling isn't erroneous, just + // less optimized. + int32_t willCheck = OSAtomicOr32Orig(1, &RACWillCheckActiveSignals); + + // Only schedule a check if RACWillCheckActiveSignals was 0 before. + if (willCheck == 0) { + dispatch_async(dispatch_get_main_queue(), ^{ + RACCheckActiveSignals(); + }); + } +} + +#pragma mark Managing Subscribers + +- (BOOL)hasSubscribers { + OSSpinLockLock(&_subscribersLock); + BOOL hasSubscribers = _subscribers.count > 0; + OSSpinLockUnlock(&_subscribersLock); + + return hasSubscribers; +} + +- (RACDisposable *)subscribe:(id)subscriber { + NSCParameterAssert(subscriber != nil); + + RACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable]; + subscriber = [[RACPassthroughSubscriber alloc] initWithSubscriber:subscriber signal:self disposable:disposable]; + + OSSpinLockLock(&_subscribersLock); + if (_subscribers == nil) { + _subscribers = [NSMutableArray arrayWithObject:subscriber]; + } else { + [_subscribers addObject:subscriber]; + } + OSSpinLockUnlock(&_subscribersLock); + + @weakify(self); + RACDisposable *defaultDisposable = [RACDisposable disposableWithBlock:^{ + @strongify(self); + if (self == nil) return; + + BOOL stillHasSubscribers = YES; + + OSSpinLockLock(&_subscribersLock); + { + // Since newer subscribers are generally shorter-lived, search + // starting from the end of the list. + NSUInteger index = [_subscribers indexOfObjectWithOptions:NSEnumerationReverse passingTest:^ BOOL (id obj, NSUInteger index, BOOL *stop) { + return obj == subscriber; + }]; + + if (index != NSNotFound) { + [_subscribers removeObjectAtIndex:index]; + stillHasSubscribers = _subscribers.count > 0; + } + } + OSSpinLockUnlock(&_subscribersLock); + + if (!stillHasSubscribers) { + [self invalidateGlobalRefIfNoNewSubscribersShowUp]; + } + }]; + + [disposable addDisposable:defaultDisposable]; + + if (self.didSubscribe != NULL) { + RACDisposable *schedulingDisposable = [RACScheduler.subscriptionScheduler schedule:^{ + RACDisposable *innerDisposable = self.didSubscribe(subscriber); + [disposable addDisposable:innerDisposable]; + }]; + + [disposable addDisposable:schedulingDisposable]; + } + + return disposable; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEagerSequence.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEagerSequence.h new file mode 100644 index 00000000..ac513491 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEagerSequence.h @@ -0,0 +1,14 @@ +// +// RACEagerSequence.h +// ReactiveCocoa +// +// Created by Uri Baghin on 02/01/2013. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "RACArraySequence.h" + +/// Private class that implements an eager sequence. +@interface RACEagerSequence : RACArraySequence + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEagerSequence.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEagerSequence.m new file mode 100644 index 00000000..f12fbe94 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEagerSequence.m @@ -0,0 +1,66 @@ +// +// RACEagerSequence.m +// ReactiveCocoa +// +// Created by Uri Baghin on 02/01/2013. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "RACEagerSequence.h" +#import "NSObject+RACDescription.h" +#import "RACArraySequence.h" + +@implementation RACEagerSequence + +#pragma mark RACStream + ++ (instancetype)return:(id)value { + return [[self sequenceWithArray:@[ value ] offset:0] setNameWithFormat:@"+return: %@", [value rac_description]]; +} + +- (instancetype)bind:(RACStreamBindBlock (^)(void))block { + NSCParameterAssert(block != nil); + RACStreamBindBlock bindBlock = block(); + NSArray *currentArray = self.array; + NSMutableArray *resultArray = [NSMutableArray arrayWithCapacity:currentArray.count]; + + for (id value in currentArray) { + BOOL stop = NO; + RACSequence *boundValue = (id)bindBlock(value, &stop); + if (boundValue == nil) break; + + for (id x in boundValue) { + [resultArray addObject:x]; + } + + if (stop) break; + } + + return [[self.class sequenceWithArray:resultArray offset:0] setNameWithFormat:@"[%@] -bind:", self.name]; +} + +- (instancetype)concat:(RACSequence *)sequence { + NSCParameterAssert(sequence != nil); + NSCParameterAssert([sequence isKindOfClass:RACSequence.class]); + + NSArray *array = [self.array arrayByAddingObjectsFromArray:sequence.array]; + return [[self.class sequenceWithArray:array offset:0] setNameWithFormat:@"[%@] -concat: %@", self.name, sequence]; +} + +#pragma mark Extended methods + +- (RACSequence *)eagerSequence { + return self; +} + +- (RACSequence *)lazySequence { + return [RACArraySequence sequenceWithArray:self.array offset:0]; +} + +- (id)foldRightWithStart:(id)start reduce:(id (^)(id, RACSequence *rest))reduce { + return [super foldRightWithStart:start reduce:^(id first, RACSequence *rest) { + return reduce(first, rest.eagerSequence); + }]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEmptySequence.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEmptySequence.h new file mode 100644 index 00000000..664ba384 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEmptySequence.h @@ -0,0 +1,13 @@ +// +// RACEmptySequence.h +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2012-10-29. +// Copyright (c) 2012 GitHub. All rights reserved. +// + +#import "RACSequence.h" + +/// Private class representing an empty sequence. +@interface RACEmptySequence : RACSequence +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEmptySequence.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEmptySequence.m new file mode 100644 index 00000000..e4df1507 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEmptySequence.m @@ -0,0 +1,71 @@ +// +// RACEmptySequence.m +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2012-10-29. +// Copyright (c) 2012 GitHub. All rights reserved. +// + +#import "RACEmptySequence.h" + +@implementation RACEmptySequence + +#pragma mark Lifecycle + ++ (instancetype)empty { + static id singleton; + static dispatch_once_t pred; + + dispatch_once(&pred, ^{ + singleton = [[self alloc] init]; + }); + + return singleton; +} + +#pragma mark RACSequence + +- (id)head { + return nil; +} + +- (RACSequence *)tail { + return nil; +} + +- (RACSequence *)bind:(RACStreamBindBlock)bindBlock passingThroughValuesFromSequence:(RACSequence *)passthroughSequence { + return passthroughSequence ?: self; +} + +#pragma mark NSCoding + +- (Class)classForCoder { + // Empty sequences should be encoded as themselves, not array sequences. + return self.class; +} + +- (id)initWithCoder:(NSCoder *)coder { + // Return the singleton. + return self.class.empty; +} + +- (void)encodeWithCoder:(NSCoder *)coder { +} + +#pragma mark NSObject + +- (NSString *)description { + return [NSString stringWithFormat:@"<%@: %p>{ name = %@ }", self.class, self, self.name]; +} + +- (NSUInteger)hash { + // This hash isn't ideal, but it's better than -[RACSequence hash], which + // would just be zero because we have no head. + return (NSUInteger)(__bridge void *)self; +} + +- (BOOL)isEqual:(RACSequence *)seq { + return (self == seq); +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEmptySignal.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEmptySignal.h new file mode 100644 index 00000000..90b4f00a --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEmptySignal.h @@ -0,0 +1,17 @@ +// +// RACEmptySignal.h +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2013-10-10. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "RACSignal.h" + +// A private `RACSignal` subclasses that synchronously sends completed to any +// subscribers. +@interface RACEmptySignal : RACSignal + ++ (RACSignal *)empty; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEmptySignal.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEmptySignal.m new file mode 100644 index 00000000..8bc8f41e --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEmptySignal.m @@ -0,0 +1,62 @@ +// +// RACEmptySignal.m +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2013-10-10. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "RACEmptySignal.h" +#import "RACScheduler+Private.h" +#import "RACSubscriber.h" + +@implementation RACEmptySignal + +#pragma mark Properties + +// Only allow this signal's name to be customized in DEBUG, since it's +// a singleton in release builds (see +empty). +- (void)setName:(NSString *)name { +#ifdef DEBUG + [super setName:name]; +#endif +} + +- (NSString *)name { +#ifdef DEBUG + return super.name; +#else + return @"+empty"; +#endif +} + +#pragma mark Lifecycle + ++ (RACSignal *)empty { +#ifdef DEBUG + // Create multiple instances of this class in DEBUG so users can set custom + // names on each. + return [[[self alloc] init] setNameWithFormat:@"+empty"]; +#else + static id singleton; + static dispatch_once_t pred; + + dispatch_once(&pred, ^{ + singleton = [[self alloc] init]; + }); + + return singleton; +#endif +} + +#pragma mark Subscription + +- (RACDisposable *)subscribe:(id)subscriber { + NSCParameterAssert(subscriber != nil); + + return [RACScheduler.subscriptionScheduler schedule:^{ + [subscriber sendCompleted]; + }]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACErrorSignal.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACErrorSignal.h new file mode 100644 index 00000000..c942f9e3 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACErrorSignal.h @@ -0,0 +1,17 @@ +// +// RACErrorSignal.h +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2013-10-10. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "RACSignal.h" + +// A private `RACSignal` subclasses that synchronously sends an error to any +// subscribers. +@interface RACErrorSignal : RACSignal + ++ (RACSignal *)error:(NSError *)error; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACErrorSignal.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACErrorSignal.m new file mode 100644 index 00000000..fd6778cb --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACErrorSignal.m @@ -0,0 +1,47 @@ +// +// RACErrorSignal.m +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2013-10-10. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "RACErrorSignal.h" +#import "RACScheduler+Private.h" +#import "RACSubscriber.h" + +@interface RACErrorSignal () + +// The error to send upon subscription. +@property (nonatomic, strong, readonly) NSError *error; + +@end + +@implementation RACErrorSignal + +#pragma mark Lifecycle + ++ (RACSignal *)error:(NSError *)error { + RACErrorSignal *signal = [[self alloc] init]; + signal->_error = error; + +#ifdef DEBUG + [signal setNameWithFormat:@"+error: %@", error]; +#else + signal.name = @"+error:"; +#endif + + return signal; +} + +#pragma mark Subscription + +- (RACDisposable *)subscribe:(id)subscriber { + NSCParameterAssert(subscriber != nil); + + return [RACScheduler.subscriptionScheduler schedule:^{ + [subscriber sendError:self.error]; + }]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEvent.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEvent.h new file mode 100644 index 00000000..9e64e5a4 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEvent.h @@ -0,0 +1,51 @@ +// +// RACEvent.h +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2013-01-07. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import + +/// Describes the type of a RACEvent. +/// +/// RACEventTypeCompleted - A `completed` event. +/// RACEventTypeError - An `error` event. +/// RACEventTypeNext - A `next` event. +typedef enum : NSUInteger { + RACEventTypeCompleted, + RACEventTypeError, + RACEventTypeNext +} RACEventType; + +/// Represents an event sent by a RACSignal. +/// +/// This corresponds to the `Notification` class in Rx. +@interface RACEvent : NSObject + +/// Returns a singleton RACEvent representing the `completed` event. ++ (instancetype)completedEvent; + +/// Returns a new event of type RACEventTypeError, containing the given error. ++ (instancetype)eventWithError:(NSError *)error; + +/// Returns a new event of type RACEventTypeNext, containing the given value. ++ (instancetype)eventWithValue:(id)value; + +/// The type of event represented by the receiver. +@property (nonatomic, assign, readonly) RACEventType eventType; + +/// Returns whether the receiver is of type RACEventTypeCompleted or +/// RACEventTypeError. +@property (nonatomic, getter = isFinished, assign, readonly) BOOL finished; + +/// The error associated with an event of type RACEventTypeError. This will be +/// nil for all other event types. +@property (nonatomic, strong, readonly) NSError *error; + +/// The value associated with an event of type RACEventTypeNext. This will be +/// nil for all other event types. +@property (nonatomic, strong, readonly) id value; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEvent.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEvent.m new file mode 100644 index 00000000..270a95d7 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACEvent.m @@ -0,0 +1,113 @@ +// +// RACEvent.m +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2013-01-07. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "RACEvent.h" + +@interface RACEvent () + +// An object associated with this event. This will be used for the error and +// value properties. +@property (nonatomic, strong, readonly) id object; + +// Initializes the receiver with the given type and object. +- (id)initWithEventType:(RACEventType)type object:(id)object; + +@end + +@implementation RACEvent + +#pragma mark Properties + +- (BOOL)isFinished { + return self.eventType == RACEventTypeCompleted || self.eventType == RACEventTypeError; +} + +- (NSError *)error { + return (self.eventType == RACEventTypeError ? self.object : nil); +} + +- (id)value { + return (self.eventType == RACEventTypeNext ? self.object : nil); +} + +#pragma mark Lifecycle + ++ (instancetype)completedEvent { + static dispatch_once_t pred; + static id singleton; + + dispatch_once(&pred, ^{ + singleton = [[self alloc] initWithEventType:RACEventTypeCompleted object:nil]; + }); + + return singleton; +} + ++ (instancetype)eventWithError:(NSError *)error { + return [[self alloc] initWithEventType:RACEventTypeError object:error]; +} + ++ (instancetype)eventWithValue:(id)value { + return [[self alloc] initWithEventType:RACEventTypeNext object:value]; +} + +- (id)initWithEventType:(RACEventType)type object:(id)object { + self = [super init]; + if (self == nil) return nil; + + _eventType = type; + _object = object; + + return self; +} + +#pragma mark NSCopying + +- (id)copyWithZone:(NSZone *)zone { + return self; +} + +#pragma mark NSObject + +- (NSString *)description { + NSString *eventDescription = nil; + + switch (self.eventType) { + case RACEventTypeCompleted: + eventDescription = @"completed"; + break; + + case RACEventTypeError: + eventDescription = [NSString stringWithFormat:@"error = %@", self.object]; + break; + + case RACEventTypeNext: + eventDescription = [NSString stringWithFormat:@"next = %@", self.object]; + break; + + default: + NSCAssert(NO, @"Unrecognized event type: %i", (int)self.eventType); + } + + return [NSString stringWithFormat:@"<%@: %p>{ %@ }", self.class, self, eventDescription]; +} + +- (NSUInteger)hash { + return self.eventType ^ [self.object hash]; +} + +- (BOOL)isEqual:(id)event { + if (event == self) return YES; + if (![event isKindOfClass:RACEvent.class]) return NO; + if (self.eventType != [event eventType]) return NO; + + // Catches the nil case too. + return self.object == [event object] || [self.object isEqual:[event object]]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACGroupedSignal.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACGroupedSignal.h new file mode 100644 index 00000000..697d9221 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACGroupedSignal.h @@ -0,0 +1,20 @@ +// +// RACGroupedSignal.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 5/2/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACSubject.h" + + +/// A grouped signal is used by -[RACSignal groupBy:transform:]. +@interface RACGroupedSignal : RACSubject + +/// The key shared by the group. +@property (nonatomic, readonly, copy) id key; + ++ (instancetype)signalWithKey:(id)key; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACGroupedSignal.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACGroupedSignal.m new file mode 100644 index 00000000..00e03784 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACGroupedSignal.m @@ -0,0 +1,25 @@ +// +// RACGroupedSignal.m +// ReactiveCocoa +// +// Created by Josh Abernathy on 5/2/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACGroupedSignal.h" + +@interface RACGroupedSignal () +@property (nonatomic, copy) id key; +@end + +@implementation RACGroupedSignal + +#pragma mark API + ++ (instancetype)signalWithKey:(id)key { + RACGroupedSignal *subject = [self subject]; + subject.key = key; + return subject; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACImmediateScheduler.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACImmediateScheduler.h new file mode 100644 index 00000000..316e9f34 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACImmediateScheduler.h @@ -0,0 +1,14 @@ +// +// RACImmediateScheduler.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 11/30/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACScheduler.h" + +/// A scheduler which immediately executes its scheduled blocks. +@interface RACImmediateScheduler : RACScheduler + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACImmediateScheduler.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACImmediateScheduler.m new file mode 100644 index 00000000..f32eda3f --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACImmediateScheduler.m @@ -0,0 +1,44 @@ +// +// RACImmediateScheduler.m +// ReactiveCocoa +// +// Created by Josh Abernathy on 11/30/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACImmediateScheduler.h" +#import "RACScheduler+Private.h" + +@implementation RACImmediateScheduler + +#pragma mark Lifecycle + +- (id)init { + return [super initWithName:@"com.ReactiveCocoa.RACScheduler.immediateScheduler"]; +} + +#pragma mark RACScheduler + +- (RACDisposable *)schedule:(void (^)(void))block { + NSCParameterAssert(block != NULL); + + block(); + return nil; +} + +- (RACDisposable *)after:(NSDate *)date schedule:(void (^)(void))block { + NSCParameterAssert(date != nil); + NSCParameterAssert(block != NULL); + + [NSThread sleepUntilDate:date]; + block(); + + return nil; +} + +- (RACDisposable *)after:(NSDate *)date repeatingEvery:(NSTimeInterval)interval withLeeway:(NSTimeInterval)leeway schedule:(void (^)(void))block { + NSCAssert(NO, @"+[RACScheduler immediateScheduler] does not support %@.", NSStringFromSelector(_cmd)); + return nil; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACKVOChannel.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACKVOChannel.h new file mode 100644 index 00000000..060a4cc5 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACKVOChannel.h @@ -0,0 +1,97 @@ +// +// RACKVOChannel.h +// ReactiveCocoa +// +// Created by Uri Baghin on 27/12/2012. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACChannel.h" +#import "RACEXTKeyPathCoding.h" +#import "RACmetamacros.h" + +/// Creates a RACKVOChannel to the given key path. When the targeted object +/// deallocates, the channel will complete. +/// +/// If RACChannelTo() is used as an expression, it returns a RACChannelTerminal that +/// can be used to watch the specified property for changes, and set new values +/// for it. The terminal will start with the property's current value upon +/// subscription. +/// +/// If RACChannelTo() is used on the left-hand side of an assignment, there must a +/// RACChannelTerminal on the right-hand side of the assignment. The two will be +/// subscribed to one another: the property's value is immediately set to the +/// value of the channel terminal on the right-hand side, and subsequent changes +/// to either terminal will be reflected on the other. +/// +/// There are two different versions of this macro: +/// +/// - RACChannelTo(TARGET, KEYPATH, NILVALUE) will create a channel to the `KEYPATH` +/// of `TARGET`. If the terminal is ever sent a `nil` value, the property will +/// be set to `NILVALUE` instead. `NILVALUE` may itself be `nil` for object +/// properties, but an NSValue should be used for primitive properties, to +/// avoid an exception if `nil` is sent (which might occur if an intermediate +/// object is set to `nil`). +/// - RACChannelTo(TARGET, KEYPATH) is the same as the above, but `NILVALUE` defaults to +/// `nil`. +/// +/// Examples +/// +/// RACChannelTerminal *integerChannel = RACChannelTo(self, integerProperty, @42); +/// +/// // Sets self.integerProperty to 5. +/// [integerChannel sendNext:@5]; +/// +/// // Logs the current value of self.integerProperty, and all future changes. +/// [integerChannel subscribeNext:^(id value) { +/// NSLog(@"value: %@", value); +/// }]; +/// +/// // Binds properties to each other, taking the initial value from the right +/// side. +/// RACChannelTo(view, objectProperty) = RACChannelTo(model, objectProperty); +/// RACChannelTo(view, integerProperty, @2) = RACChannelTo(model, integerProperty, @10); +#define RACChannelTo(TARGET, ...) \ + metamacro_if_eq(1, metamacro_argcount(__VA_ARGS__)) \ + (RACChannelTo_(TARGET, __VA_ARGS__, nil)) \ + (RACChannelTo_(TARGET, __VA_ARGS__)) + +/// Do not use this directly. Use the RACChannelTo macro above. +#define RACChannelTo_(TARGET, KEYPATH, NILVALUE) \ + [[RACKVOChannel alloc] initWithTarget:(TARGET) keyPath:@keypath(TARGET, KEYPATH) nilValue:(NILVALUE)][@keypath(RACKVOChannel.new, followingTerminal)] + +/// A RACChannel that observes a KVO-compliant key path for changes. +@interface RACKVOChannel : RACChannel + +/// Initializes a channel that will observe the given object and key path. +/// +/// The current value of the key path, and future KVO notifications for the given +/// key path, will be sent to subscribers of the channel's `followingTerminal`. +/// Values sent to the `followingTerminal` will be set at the given key path using +/// key-value coding. +/// +/// When the target object deallocates, the channel will complete. Signal errors +/// are considered undefined behavior. +/// +/// This is the designated initializer for this class. +/// +/// target - The object to bind to. +/// keyPath - The key path to observe and set the value of. +/// nilValue - The value to set at the key path whenever a `nil` value is +/// received. This may be nil when connecting to object properties, but +/// an NSValue should be used for primitive properties, to avoid an +/// exception if `nil` is received (which might occur if an intermediate +/// object is set to `nil`). +- (id)initWithTarget:(NSObject *)target keyPath:(NSString *)keyPath nilValue:(id)nilValue; + +- (id)init __attribute__((unavailable("Use -initWithTarget:keyPath:nilValue: instead"))); + +@end + +/// Methods needed for the convenience macro. Do not call explicitly. +@interface RACKVOChannel (RACChannelTo) + +- (RACChannelTerminal *)objectForKeyedSubscript:(NSString *)key; +- (void)setObject:(RACChannelTerminal *)otherTerminal forKeyedSubscript:(NSString *)key; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACKVOChannel.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACKVOChannel.m new file mode 100644 index 00000000..e0d1a82d --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACKVOChannel.m @@ -0,0 +1,206 @@ +// +// RACKVOChannel.m +// ReactiveCocoa +// +// Created by Uri Baghin on 27/12/2012. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACKVOChannel.h" +#import "RACEXTScope.h" +#import "NSObject+RACDeallocating.h" +#import "NSObject+RACDescription.h" +#import "NSObject+RACKVOWrapper.h" +#import "NSObject+RACPropertySubscribing.h" +#import "NSString+RACKeyPathUtilities.h" +#import "RACChannel.h" +#import "RACCompoundDisposable.h" +#import "RACDisposable.h" +#import "RACReplaySubject.h" +#import "RACSignal+Operations.h" +#import "RACSubscriber+Private.h" +#import "RACSubject.h" + +// Key for the array of RACKVOChannel's additional thread local +// data in the thread dictionary. +static NSString * const RACKVOChannelDataDictionaryKey = @"RACKVOChannelKey"; + +// Wrapper class for additional thread local data. +@interface RACKVOChannelData : NSObject + +// The flag used to ignore updates the channel itself has triggered. +@property (nonatomic, assign) BOOL ignoreNextUpdate; + +// A pointer to the owner of the data. Only use this for pointer comparison, +// never as an object reference. +@property (nonatomic, assign) void *owner; + ++ (instancetype)dataForChannel:(RACKVOChannel *)channel; + +@end + +@interface RACKVOChannel () + +// The object whose key path the channel is wrapping. +@property (atomic, unsafe_unretained) NSObject *target; + +// The key path the channel is wrapping. +@property (nonatomic, copy, readonly) NSString *keyPath; + +// Returns the existing thread local data container or nil if none exists. +@property (nonatomic, strong, readonly) RACKVOChannelData *currentThreadData; + +// Creates the thread local data container for the channel. +- (void)createCurrentThreadData; + +// Destroy the thread local data container for the channel. +- (void)destroyCurrentThreadData; + +@end + +@implementation RACKVOChannel + +#pragma mark Properties + +- (RACKVOChannelData *)currentThreadData { + NSMutableArray *dataArray = NSThread.currentThread.threadDictionary[RACKVOChannelDataDictionaryKey]; + + for (RACKVOChannelData *data in dataArray) { + if (data.owner == (__bridge void *)self) return data; + } + + return nil; +} + +#pragma mark Lifecycle + +- (id)initWithTarget:(NSObject *)target keyPath:(NSString *)keyPath nilValue:(id)nilValue { + NSCParameterAssert(keyPath.rac_keyPathComponents.count > 0); + + self = [super init]; + if (self == nil) return nil; + + _target = target; + _keyPath = [keyPath copy]; + + [self.leadingTerminal setNameWithFormat:@"[-initWithTarget: %@ keyPath: %@ nilValue: %@] -leadingTerminal", target, keyPath, nilValue]; + [self.followingTerminal setNameWithFormat:@"[-initWithTarget: %@ keyPath: %@ nilValue: %@] -followingTerminal", target, keyPath, nilValue]; + + // Observe the key path on target for changes and forward the changes to the + // terminal. + // + // Intentionally capturing `self` strongly in the blocks below, so the + // channel object stays alive while observing. + RACDisposable *observationDisposable = [target rac_observeKeyPath:keyPath options:NSKeyValueObservingOptionInitial observer:nil block:^(id value, NSDictionary *change) { + // If the change wasn't triggered by deallocation, only affects the last + // path component, and ignoreNextUpdate is set, then it was triggered by + // this channel and should not be forwarded. + if (![change[RACKeyValueChangeCausedByDeallocationKey] boolValue] && [change[RACKeyValueChangeAffectedOnlyLastComponentKey] boolValue] && self.currentThreadData.ignoreNextUpdate) { + [self destroyCurrentThreadData]; + return; + } + + [self.leadingTerminal sendNext:value]; + }]; + + NSString *keyPathByDeletingLastKeyPathComponent = keyPath.rac_keyPathByDeletingLastKeyPathComponent; + NSArray *keyPathComponents = keyPath.rac_keyPathComponents; + NSUInteger keyPathComponentsCount = keyPathComponents.count; + NSString *lastKeyPathComponent = keyPathComponents.lastObject; + + // Update the value of the property with the values received. + [[self.leadingTerminal + finally:^{ + [observationDisposable dispose]; + }] + subscribeNext:^(id x) { + // Check the value of the second to last key path component. Since the + // channel can only update the value of a property on an object, and not + // update intermediate objects, it can only update the value of the whole + // key path if this object is not nil. + NSObject *object = (keyPathComponentsCount > 1 ? [self.target valueForKeyPath:keyPathByDeletingLastKeyPathComponent] : self.target); + if (object == nil) return; + + // Set the ignoreNextUpdate flag before setting the value so this channel + // ignores the value in the subsequent -didChangeValueForKey: callback. + [self createCurrentThreadData]; + self.currentThreadData.ignoreNextUpdate = YES; + + [object setValue:x ?: nilValue forKey:lastKeyPathComponent]; + } error:^(NSError *error) { + NSCAssert(NO, @"Received error in %@: %@", self, error); + + // Log the error if we're running with assertions disabled. + NSLog(@"Received error in %@: %@", self, error); + }]; + + // Capture `self` weakly for the target's deallocation disposable, so we can + // freely deallocate if we complete before then. + @weakify(self); + + [target.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ + @strongify(self); + [self.leadingTerminal sendCompleted]; + self.target = nil; + }]]; + + return self; +} + +- (void)createCurrentThreadData { + NSMutableArray *dataArray = NSThread.currentThread.threadDictionary[RACKVOChannelDataDictionaryKey]; + if (dataArray == nil) { + dataArray = [NSMutableArray array]; + NSThread.currentThread.threadDictionary[RACKVOChannelDataDictionaryKey] = dataArray; + [dataArray addObject:[RACKVOChannelData dataForChannel:self]]; + return; + } + + for (RACKVOChannelData *data in dataArray) { + if (data.owner == (__bridge void *)self) return; + } + + [dataArray addObject:[RACKVOChannelData dataForChannel:self]]; +} + +- (void)destroyCurrentThreadData { + NSMutableArray *dataArray = NSThread.currentThread.threadDictionary[RACKVOChannelDataDictionaryKey]; + NSUInteger index = [dataArray indexOfObjectPassingTest:^ BOOL (RACKVOChannelData *data, NSUInteger idx, BOOL *stop) { + return data.owner == (__bridge void *)self; + }]; + + if (index != NSNotFound) [dataArray removeObjectAtIndex:index]; +} + +@end + +@implementation RACKVOChannel (RACChannelTo) + +- (RACChannelTerminal *)objectForKeyedSubscript:(NSString *)key { + NSCParameterAssert(key != nil); + + RACChannelTerminal *terminal = [self valueForKey:key]; + NSCAssert([terminal isKindOfClass:RACChannelTerminal.class], @"Key \"%@\" does not identify a channel terminal", key); + + return terminal; +} + +- (void)setObject:(RACChannelTerminal *)otherTerminal forKeyedSubscript:(NSString *)key { + NSCParameterAssert(otherTerminal != nil); + + RACChannelTerminal *selfTerminal = [self objectForKeyedSubscript:key]; + [otherTerminal subscribe:selfTerminal]; + [[selfTerminal skip:1] subscribe:otherTerminal]; +} + +@end + +@implementation RACKVOChannelData + ++ (instancetype)dataForChannel:(RACKVOChannel *)channel { + RACKVOChannelData *data = [[self alloc] init]; + data->_owner = (__bridge void *)channel; + return data; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACKVOTrampoline.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACKVOTrampoline.h new file mode 100644 index 00000000..dab15c58 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACKVOTrampoline.h @@ -0,0 +1,31 @@ +// +// RACKVOTrampoline.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 1/15/13. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import +#import "NSObject+RACKVOWrapper.h" +#import "RACDisposable.h" + +/// The KVO trampoline object. Represents a KVO observation. +/// +/// Disposing of the trampoline will stop observation. +@interface RACKVOTrampoline : RACDisposable + +/// Initializes the receiver with the given parameters. +/// +/// target - The object whose key path should be observed. Cannot be nil. +/// observer - The object that gets notified when the value at the key path +/// changes. Can be nil. +/// keyPath - The key path on `target` to observe. Cannot be nil. +/// options - Any key value observing options to use in the observation. +/// block - The block to call when the value at the observed key path changes. +/// Cannot be nil. +/// +/// Returns the initialized object. +- (id)initWithTarget:(NSObject *)target observer:(NSObject *)observer keyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options block:(RACKVOBlock)block; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACKVOTrampoline.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACKVOTrampoline.m new file mode 100644 index 00000000..1e4feae9 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACKVOTrampoline.m @@ -0,0 +1,100 @@ +// +// RACKVOTrampoline.m +// ReactiveCocoa +// +// Created by Josh Abernathy on 1/15/13. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "RACKVOTrampoline.h" +#import "NSObject+RACDeallocating.h" +#import "RACCompoundDisposable.h" + +static void *RACKVOWrapperContext = &RACKVOWrapperContext; + +@interface RACKVOTrampoline () + +// The keypath which the trampoline is observing. +@property (nonatomic, readonly, copy) NSString *keyPath; + +// These properties should only be manipulated while synchronized on the +// receiver. +@property (nonatomic, readonly, copy) RACKVOBlock block; +@property (nonatomic, readonly, unsafe_unretained) NSObject *target; +@property (nonatomic, readonly, unsafe_unretained) NSObject *observer; + +@end + +@implementation RACKVOTrampoline + +#pragma mark Lifecycle + +- (id)initWithTarget:(NSObject *)target observer:(NSObject *)observer keyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options block:(RACKVOBlock)block { + NSCParameterAssert(target != nil); + NSCParameterAssert(keyPath != nil); + NSCParameterAssert(block != nil); + + self = [super init]; + if (self == nil) return nil; + + _keyPath = [keyPath copy]; + + _block = [block copy]; + _target = target; + _observer = observer; + + [self.target addObserver:self forKeyPath:self.keyPath options:options context:&RACKVOWrapperContext]; + [self.target.rac_deallocDisposable addDisposable:self]; + [self.observer.rac_deallocDisposable addDisposable:self]; + + return self; +} + +- (void)dealloc { + [self dispose]; +} + +#pragma mark Observation + +- (void)dispose { + NSObject *target; + NSObject *observer; + + @synchronized (self) { + _block = nil; + + target = self.target; + observer = self.observer; + + _target = nil; + _observer = nil; + } + + [target.rac_deallocDisposable removeDisposable:self]; + [observer.rac_deallocDisposable removeDisposable:self]; + + [target removeObserver:self forKeyPath:self.keyPath context:&RACKVOWrapperContext]; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { + if (context != &RACKVOWrapperContext) { + [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; + return; + } + + RACKVOBlock block; + id observer; + id target; + + @synchronized (self) { + block = self.block; + observer = self.observer; + target = self.target; + } + + if (block == nil) return; + + block(target, observer, change); +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACMulticastConnection+Private.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACMulticastConnection+Private.h new file mode 100644 index 00000000..43931f85 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACMulticastConnection+Private.h @@ -0,0 +1,17 @@ +// +// RACMulticastConnection+Private.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 4/11/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACMulticastConnection.h" + +@class RACSubject; + +@interface RACMulticastConnection () + +- (id)initWithSourceSignal:(RACSignal *)source subject:(RACSubject *)subject; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACMulticastConnection.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACMulticastConnection.h new file mode 100644 index 00000000..5361f5dd --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACMulticastConnection.h @@ -0,0 +1,46 @@ +// +// RACMulticastConnection.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 4/11/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +@class RACSignal; +@class RACDisposable; + +/// A multicast connection encapsulates the idea of sharing one subscription to a +/// signal to many subscribers. This is most often needed if the subscription to +/// the underlying signal involves side-effects or shouldn't be called more than +/// once. +/// +/// The multicasted signal is only subscribed to when +/// -[RACMulticastConnection connect] is called. Until that happens, no values +/// will be sent on `signal`. See -[RACMulticastConnection autoconnect] for how +/// -[RACMulticastConnection connect] can be called automatically. +/// +/// Note that you shouldn't create RACMulticastConnection manually. Instead use +/// -[RACSignal publish] or -[RACSignal multicast:]. +@interface RACMulticastConnection : NSObject + +/// The multicasted signal. +@property (nonatomic, strong, readonly) RACSignal *signal; + +/// Connect to the underlying signal by subscribing to it. Calling this multiple +/// times does nothing but return the existing connection's disposable. +/// +/// Returns the disposable for the subscription to the multicasted signal. +- (RACDisposable *)connect; + +/// Connects to the underlying signal when the returned signal is first +/// subscribed to, and disposes of the subscription to the multicasted signal +/// when the returned signal has no subscribers. +/// +/// If new subscribers show up after being disposed, they'll subscribe and then +/// be immediately disposed of. The returned signal will never re-connect to the +/// multicasted signal. +/// +/// Returns the autoconnecting signal. +- (RACSignal *)autoconnect; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACMulticastConnection.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACMulticastConnection.m new file mode 100644 index 00000000..1534d96f --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACMulticastConnection.m @@ -0,0 +1,85 @@ +// +// RACMulticastConnection.m +// ReactiveCocoa +// +// Created by Josh Abernathy on 4/11/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACMulticastConnection.h" +#import "RACMulticastConnection+Private.h" +#import "RACDisposable.h" +#import "RACSerialDisposable.h" +#import "RACSubject.h" +#import + +@interface RACMulticastConnection () { + RACSubject *_signal; + + // When connecting, a caller should attempt to atomically swap the value of this + // from `0` to `1`. + // + // If the swap is successful the caller is resposible for subscribing `_signal` + // to `sourceSignal` and storing the returned disposable in `serialDisposable`. + // + // If the swap is unsuccessful it means that `_sourceSignal` has already been + // connected and the caller has no action to take. + int32_t volatile _hasConnected; +} + +@property (nonatomic, readonly, strong) RACSignal *sourceSignal; +@property (strong) RACSerialDisposable *serialDisposable; +@end + +@implementation RACMulticastConnection + +#pragma mark Lifecycle + +- (id)initWithSourceSignal:(RACSignal *)source subject:(RACSubject *)subject { + NSCParameterAssert(source != nil); + NSCParameterAssert(subject != nil); + + self = [super init]; + if (self == nil) return nil; + + _sourceSignal = source; + _serialDisposable = [[RACSerialDisposable alloc] init]; + _signal = subject; + + return self; +} + +#pragma mark Connecting + +- (RACDisposable *)connect { + BOOL shouldConnect = OSAtomicCompareAndSwap32Barrier(0, 1, &_hasConnected); + + if (shouldConnect) { + self.serialDisposable.disposable = [self.sourceSignal subscribe:_signal]; + } + + return self.serialDisposable; +} + +- (RACSignal *)autoconnect { + __block volatile int32_t subscriberCount = 0; + + return [[RACSignal + createSignal:^(id subscriber) { + OSAtomicIncrement32Barrier(&subscriberCount); + + RACDisposable *subscriptionDisposable = [self.signal subscribe:subscriber]; + RACDisposable *connectionDisposable = [self connect]; + + return [RACDisposable disposableWithBlock:^{ + [subscriptionDisposable dispose]; + + if (OSAtomicDecrement32Barrier(&subscriberCount) == 0) { + [connectionDisposable dispose]; + } + }]; + }] + setNameWithFormat:@"[%@] -autoconnect", self.signal.name]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACObjCRuntime.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACObjCRuntime.h new file mode 100644 index 00000000..dc58fe53 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACObjCRuntime.h @@ -0,0 +1,16 @@ +// +// RACObjCRuntime.h +// ReactiveCocoa +// +// Created by Cody Krieger on 5/19/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import + +@interface RACObjCRuntime : NSObject + +/// Invokes objc_allocateClassPair(). Can be called from ARC code. ++ (Class)createClass:(const char *)className inheritingFromClass:(Class)superclass; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACObjCRuntime.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACObjCRuntime.m new file mode 100644 index 00000000..43cfc196 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACObjCRuntime.m @@ -0,0 +1,22 @@ +// +// RACObjCRuntime.m +// ReactiveCocoa +// +// Created by Cody Krieger on 5/19/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACObjCRuntime.h" +#import + +#if __has_feature(objc_arc) +#error "This file must be compiled without ARC." +#endif + +@implementation RACObjCRuntime + ++ (Class)createClass:(const char *)className inheritingFromClass:(Class)superclass { + return objc_allocateClassPair(superclass, className, 0); +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACPassthroughSubscriber.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACPassthroughSubscriber.h new file mode 100644 index 00000000..8c5b3b6a --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACPassthroughSubscriber.h @@ -0,0 +1,28 @@ +// +// RACPassthroughSubscriber.h +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2013-06-13. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import +#import "RACSubscriber.h" + +@class RACCompoundDisposable; +@class RACSignal; + +/// Passes through all events to another subscriber while not disposed. +@interface RACPassthroughSubscriber : NSObject + +/// Initializes the receiver to pass through events until disposed. +/// +/// subscriber - The subscriber to forward events to. This must not be nil. +/// signal - The signal that will be sending events to the receiver. +/// disposable - When this disposable is disposed, no more events will be +/// forwarded. This must not be nil. +/// +/// Returns an initialized passthrough subscriber. +- (instancetype)initWithSubscriber:(id)subscriber signal:(RACSignal *)signal disposable:(RACCompoundDisposable *)disposable; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACPassthroughSubscriber.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACPassthroughSubscriber.m new file mode 100644 index 00000000..c51d0b0b --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACPassthroughSubscriber.m @@ -0,0 +1,103 @@ +// +// RACPassthroughSubscriber.m +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2013-06-13. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "RACPassthroughSubscriber.h" +#import "RACCompoundDisposable.h" +#import "RACSignal.h" +#import "RACSignalProvider.h" + +static const char *cleanedDTraceString(NSString *original) { + return [original stringByReplacingOccurrencesOfString:@"\\s+" withString:@" " options:NSRegularExpressionSearch range:NSMakeRange(0, original.length)].UTF8String; +} + +static const char *cleanedSignalDescription(RACSignal *signal) { + NSString *desc = signal.description; + + NSRange range = [desc rangeOfString:@" name:"]; + if (range.location != NSNotFound) { + desc = [desc stringByReplacingCharactersInRange:range withString:@""]; + } + + return cleanedDTraceString(desc); +} + +@interface RACPassthroughSubscriber () + +// The subscriber to which events should be forwarded. +@property (nonatomic, strong, readonly) id innerSubscriber; + +// The signal sending events to this subscriber. +// +// This property isn't `weak` because it's only used for DTrace probes, so +// a zeroing weak reference would incur an unnecessary performance penalty in +// normal usage. +@property (nonatomic, unsafe_unretained, readonly) RACSignal *signal; + +// A disposable representing the subscription. When disposed, no further events +// should be sent to the `innerSubscriber`. +@property (nonatomic, strong, readonly) RACCompoundDisposable *disposable; + +@end + +@implementation RACPassthroughSubscriber + +#pragma mark Lifecycle + +- (instancetype)initWithSubscriber:(id)subscriber signal:(RACSignal *)signal disposable:(RACCompoundDisposable *)disposable { + NSCParameterAssert(subscriber != nil); + + self = [super init]; + if (self == nil) return nil; + + _innerSubscriber = subscriber; + _signal = signal; + _disposable = disposable; + + [self.innerSubscriber didSubscribeWithDisposable:self.disposable]; + return self; +} + +#pragma mark RACSubscriber + +- (void)sendNext:(id)value { + if (self.disposable.disposed) return; + + if (RACSIGNAL_NEXT_ENABLED()) { + RACSIGNAL_NEXT(cleanedSignalDescription(self.signal), cleanedDTraceString(self.innerSubscriber.description), cleanedDTraceString([value description])); + } + + [self.innerSubscriber sendNext:value]; +} + +- (void)sendError:(NSError *)error { + if (self.disposable.disposed) return; + + if (RACSIGNAL_ERROR_ENABLED()) { + RACSIGNAL_ERROR(cleanedSignalDescription(self.signal), cleanedDTraceString(self.innerSubscriber.description), cleanedDTraceString(error.description)); + } + + [self.innerSubscriber sendError:error]; +} + +- (void)sendCompleted { + if (self.disposable.disposed) return; + + if (RACSIGNAL_COMPLETED_ENABLED()) { + RACSIGNAL_COMPLETED(cleanedSignalDescription(self.signal), cleanedDTraceString(self.innerSubscriber.description)); + } + + [self.innerSubscriber sendCompleted]; +} + +- (void)didSubscribeWithDisposable:(RACDisposable *)disposable { + if (disposable != self.disposable) { + [self.disposable addDisposable:disposable]; + } +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACQueueScheduler+Subclass.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACQueueScheduler+Subclass.h new file mode 100644 index 00000000..48ef6366 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACQueueScheduler+Subclass.h @@ -0,0 +1,46 @@ +// +// RACQueueScheduler+Subclass.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 6/6/13. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "RACQueueScheduler.h" + +/// An interface for use by subclasses. +/// +/// Subclasses should use `-performAsCurrentScheduler:` to do the actual block +/// invocation so that +[RACScheduler currentScheduler] behaves as expected. +/// +/// **Note that RACSchedulers are expected to be serial**. Subclasses must honor +/// that contract. See `RACTargetQueueScheduler` for a queue-based scheduler +/// which will enforce the serialization guarantee. +@interface RACQueueScheduler () + +/// The queue on which blocks are enqueued. +@property (nonatomic, readonly) dispatch_queue_t queue; + +/// Initializes the receiver with the name of the scheduler and the queue which +/// the scheduler should use. +/// +/// name - The name of the scheduler. If nil, a default name will be used. +/// queue - The queue upon which the receiver should enqueue scheduled blocks. +/// This argument must not be NULL. +/// +/// Returns the initialized object. +- (id)initWithName:(NSString *)name queue:(dispatch_queue_t)queue; + +/// Performs the given block with the receiver as the current scheduler for +/// `queue`. This should only be called by subclasses to perform scheduled blocks +/// on their queue. +/// +/// block - The block to execute. Cannot be NULL. +- (void)performAsCurrentScheduler:(void (^)(void))block; + +/// Converts a date into a GCD time using dispatch_walltime(). +/// +/// date - The date to convert. This must not be nil. ++ (dispatch_time_t)wallTimeWithDate:(NSDate *)date; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACQueueScheduler.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACQueueScheduler.h new file mode 100644 index 00000000..ef42512f --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACQueueScheduler.h @@ -0,0 +1,18 @@ +// +// RACQueueScheduler.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 11/30/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACScheduler.h" + +/// An abstract scheduler which asynchronously enqueues all its work to a Grand +/// Central Dispatch queue. +/// +/// Because RACQueueScheduler is abstract, it should not be instantiated +/// directly. Create a subclass using the `RACQueueScheduler+Subclass.h` +/// interface and use that instead. +@interface RACQueueScheduler : RACScheduler +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACQueueScheduler.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACQueueScheduler.m new file mode 100644 index 00000000..7ae82026 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACQueueScheduler.m @@ -0,0 +1,120 @@ +// +// RACQueueScheduler.m +// ReactiveCocoa +// +// Created by Josh Abernathy on 11/30/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACQueueScheduler.h" +#import "RACBacktrace.h" +#import "RACDisposable.h" +#import "RACQueueScheduler+Subclass.h" +#import "RACScheduler+Private.h" + +@implementation RACQueueScheduler + +#pragma mark Lifecycle + +- (void)dealloc { + dispatch_release(_queue); +} + +- (id)initWithName:(NSString *)name queue:(dispatch_queue_t)queue { + NSCParameterAssert(queue != NULL); + + self = [super initWithName:name]; + if (self == nil) return nil; + + dispatch_retain(queue); + _queue = queue; + + return self; +} + +#pragma mark Date Conversions + ++ (dispatch_time_t)wallTimeWithDate:(NSDate *)date { + NSCParameterAssert(date != nil); + + double seconds = 0; + double frac = modf(date.timeIntervalSince1970, &seconds); + + struct timespec walltime = { + .tv_sec = (time_t)fmin(fmax(seconds, LONG_MIN), LONG_MAX), + .tv_nsec = (long)fmin(fmax(frac * NSEC_PER_SEC, LONG_MIN), LONG_MAX) + }; + + return dispatch_walltime(&walltime, 0); +} + +#pragma mark RACScheduler + +- (RACDisposable *)schedule:(void (^)(void))block { + NSCParameterAssert(block != NULL); + + RACDisposable *disposable = [[RACDisposable alloc] init]; + + dispatch_async(self.queue, ^{ + if (disposable.disposed) return; + [self performAsCurrentScheduler:block]; + }); + + return disposable; +} + +- (RACDisposable *)after:(NSDate *)date schedule:(void (^)(void))block { + NSCParameterAssert(date != nil); + NSCParameterAssert(block != NULL); + + RACDisposable *disposable = [[RACDisposable alloc] init]; + + dispatch_after([self.class wallTimeWithDate:date], self.queue, ^{ + if (disposable.disposed) return; + [self performAsCurrentScheduler:block]; + }); + + return disposable; +} + +- (RACDisposable *)after:(NSDate *)date repeatingEvery:(NSTimeInterval)interval withLeeway:(NSTimeInterval)leeway schedule:(void (^)(void))block { + NSCParameterAssert(date != nil); + NSCParameterAssert(interval > 0.0 && interval < INT64_MAX / NSEC_PER_SEC); + NSCParameterAssert(leeway >= 0.0 && leeway < INT64_MAX / NSEC_PER_SEC); + NSCParameterAssert(block != NULL); + + uint64_t intervalInNanoSecs = (uint64_t)(interval * NSEC_PER_SEC); + uint64_t leewayInNanoSecs = (uint64_t)(leeway * NSEC_PER_SEC); + + dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, self.queue); + dispatch_source_set_timer(timer, [self.class wallTimeWithDate:date], intervalInNanoSecs, leewayInNanoSecs); + dispatch_source_set_event_handler(timer, block); + dispatch_resume(timer); + + return [RACDisposable disposableWithBlock:^{ + dispatch_source_cancel(timer); + dispatch_release(timer); + }]; +} + +- (void)performAsCurrentScheduler:(void (^)(void))block { + NSCParameterAssert(block != NULL); + + // If we're using a concurrent queue, we could end up in here concurrently, + // in which case we *don't* want to clear the current scheduler immediately + // after our block is done executing, but only *after* all our concurrent + // invocations are done. + + RACScheduler *previousScheduler = RACScheduler.currentScheduler; + NSThread.currentThread.threadDictionary[RACSchedulerCurrentSchedulerKey] = self; + + block(); + + if (previousScheduler != nil) { + NSThread.currentThread.threadDictionary[RACSchedulerCurrentSchedulerKey] = previousScheduler; + } else { + [NSThread.currentThread.threadDictionary removeObjectForKey:RACSchedulerCurrentSchedulerKey]; + } +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACReplaySubject.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACReplaySubject.h new file mode 100644 index 00000000..cd6f2ecd --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACReplaySubject.h @@ -0,0 +1,23 @@ +// +// RACReplaySubject.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 3/14/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACSubject.h" + +extern const NSUInteger RACReplaySubjectUnlimitedCapacity; + + +/// A replay subject saves the values it is sent (up to its defined capacity) +/// and resends those to new subscribers. It will also replay an error or +/// completion. +@interface RACReplaySubject : RACSubject + +/// Creates a new replay subject with the given capacity. A capacity of +/// RACReplaySubjectUnlimitedCapacity means values are never trimmed. ++ (instancetype)replaySubjectWithCapacity:(NSUInteger)capacity; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACReplaySubject.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACReplaySubject.m new file mode 100644 index 00000000..bca008e6 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACReplaySubject.m @@ -0,0 +1,112 @@ +// +// RACReplaySubject.m +// ReactiveCocoa +// +// Created by Josh Abernathy on 3/14/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACReplaySubject.h" +#import "RACDisposable.h" +#import "RACScheduler+Private.h" +#import "RACSubscriber.h" +#import "RACTuple.h" +#import "RACCompoundDisposable.h" + +const NSUInteger RACReplaySubjectUnlimitedCapacity = NSUIntegerMax; + +@interface RACReplaySubject () + +@property (nonatomic, assign, readonly) NSUInteger capacity; + +// These properties should only be modified while synchronized on self. +@property (nonatomic, strong, readonly) NSMutableArray *valuesReceived; +@property (nonatomic, assign) BOOL hasCompleted; +@property (nonatomic, assign) BOOL hasError; +@property (nonatomic, strong) NSError *error; + +@end + + +@implementation RACReplaySubject + +#pragma mark Lifecycle + ++ (instancetype)replaySubjectWithCapacity:(NSUInteger)capacity { + return [[self alloc] initWithCapacity:capacity]; +} + +- (instancetype)init { + return [self initWithCapacity:RACReplaySubjectUnlimitedCapacity]; +} + +- (instancetype)initWithCapacity:(NSUInteger)capacity { + self = [super init]; + if (self == nil) return nil; + + _capacity = capacity; + _valuesReceived = (capacity == RACReplaySubjectUnlimitedCapacity ? [NSMutableArray array] : [NSMutableArray arrayWithCapacity:capacity]); + + return self; +} + +#pragma mark RACSignal + +- (RACDisposable *)subscribe:(id)subscriber { + RACCompoundDisposable *compoundDisposable = [RACCompoundDisposable compoundDisposable]; + + RACDisposable *schedulingDisposable = [RACScheduler.subscriptionScheduler schedule:^{ + @synchronized (self) { + for (id value in self.valuesReceived) { + if (compoundDisposable.disposed) return; + + [subscriber sendNext:([value isKindOfClass:RACTupleNil.class] ? nil : value)]; + } + + if (compoundDisposable.disposed) return; + + if (self.hasCompleted) { + [subscriber sendCompleted]; + } else if (self.hasError) { + [subscriber sendError:self.error]; + } else { + RACDisposable *subscriptionDisposable = [super subscribe:subscriber]; + [compoundDisposable addDisposable:subscriptionDisposable]; + } + } + }]; + + [compoundDisposable addDisposable:schedulingDisposable]; + + return compoundDisposable; +} + +#pragma mark RACSubscriber + +- (void)sendNext:(id)value { + @synchronized (self) { + [self.valuesReceived addObject:value ?: RACTupleNil.tupleNil]; + [super sendNext:value]; + + if (self.capacity != RACReplaySubjectUnlimitedCapacity && self.valuesReceived.count > self.capacity) { + [self.valuesReceived removeObjectsInRange:NSMakeRange(0, self.valuesReceived.count - self.capacity)]; + } + } +} + +- (void)sendCompleted { + @synchronized (self) { + self.hasCompleted = YES; + [super sendCompleted]; + } +} + +- (void)sendError:(NSError *)e { + @synchronized (self) { + self.hasError = YES; + self.error = e; + [super sendError:e]; + } +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACReturnSignal.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACReturnSignal.h new file mode 100644 index 00000000..73e56746 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACReturnSignal.h @@ -0,0 +1,17 @@ +// +// RACReturnSignal.h +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2013-10-10. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "RACSignal.h" + +// A private `RACSignal` subclasses that synchronously sends a value to any +// subscribers, then completes. +@interface RACReturnSignal : RACSignal + ++ (RACSignal *)return:(id)value; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACReturnSignal.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACReturnSignal.m new file mode 100644 index 00000000..30066345 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACReturnSignal.m @@ -0,0 +1,90 @@ +// +// RACReturnSignal.m +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2013-10-10. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "RACReturnSignal.h" +#import "RACScheduler+Private.h" +#import "RACSubscriber.h" +#import "RACUnit.h" + +@interface RACReturnSignal () + +// The value to send upon subscription. +@property (nonatomic, strong, readonly) id value; + +@end + +@implementation RACReturnSignal + +#pragma mark Properties + +// Only allow this signal's name to be customized in DEBUG, since it's +// potentially a singleton in release builds (see +return:). +- (void)setName:(NSString *)name { +#ifdef DEBUG + [super setName:name]; +#endif +} + +- (NSString *)name { +#ifdef DEBUG + return super.name; +#else + return @"+return:"; +#endif +} + +#pragma mark Lifecycle + ++ (RACSignal *)return:(id)value { +#ifndef DEBUG + // In release builds, use singletons for two very common cases. + if (value == RACUnit.defaultUnit) { + static RACReturnSignal *unitSingleton; + static dispatch_once_t unitPred; + + dispatch_once(&unitPred, ^{ + unitSingleton = [[self alloc] init]; + unitSingleton->_value = RACUnit.defaultUnit; + }); + + return unitSingleton; + } else if (value == nil) { + static RACReturnSignal *nilSingleton; + static dispatch_once_t nilPred; + + dispatch_once(&nilPred, ^{ + nilSingleton = [[self alloc] init]; + nilSingleton->_value = nil; + }); + + return nilSingleton; + } +#endif + + RACReturnSignal *signal = [[self alloc] init]; + signal->_value = value; + +#ifdef DEBUG + [signal setNameWithFormat:@"+return: %@", value]; +#endif + + return signal; +} + +#pragma mark Subscription + +- (RACDisposable *)subscribe:(id)subscriber { + NSCParameterAssert(subscriber != nil); + + return [RACScheduler.subscriptionScheduler schedule:^{ + [subscriber sendNext:self.value]; + [subscriber sendCompleted]; + }]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACScheduler+Private.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACScheduler+Private.h new file mode 100644 index 00000000..a73ddae4 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACScheduler+Private.h @@ -0,0 +1,34 @@ +// +// RACScheduler+Private.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 11/29/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACScheduler.h" + +/// The thread-specific current scheduler key. +extern NSString * const RACSchedulerCurrentSchedulerKey; + +/// A private interface for internal RAC use only. +@interface RACScheduler () + +/// A dedicated scheduler that fills two requirements: +/// +/// 1. By the time subscription happens, we need a valid +currentScheduler. +/// 2. Subscription should happen as soon as possible. +/// +/// To fulfill those two, if we already have a valid +currentScheduler, it +/// immediately executes scheduled blocks. If we don't, it will execute scheduled +/// blocks with a private background scheduler. ++ (instancetype)subscriptionScheduler; + +/// Initializes the receiver with the given name. +/// +/// name - The name of the scheduler. If nil, a default name will be used. +/// +/// Returns the initialized object. +- (id)initWithName:(NSString *)name; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACScheduler.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACScheduler.h new file mode 100644 index 00000000..ce1ee327 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACScheduler.h @@ -0,0 +1,148 @@ +// +// RACScheduler.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 4/16/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import + +/// The priority for the scheduler. +/// +/// RACSchedulerPriorityHigh - High priority. +/// RACSchedulerPriorityDefault - Default priority. +/// RACSchedulerPriorityLow - Low priority. +/// RACSchedulerPriorityBackground - Background priority. +typedef enum : long { + RACSchedulerPriorityHigh = DISPATCH_QUEUE_PRIORITY_HIGH, + RACSchedulerPriorityDefault = DISPATCH_QUEUE_PRIORITY_DEFAULT, + RACSchedulerPriorityLow = DISPATCH_QUEUE_PRIORITY_LOW, + RACSchedulerPriorityBackground = DISPATCH_QUEUE_PRIORITY_BACKGROUND, +} RACSchedulerPriority; + +/// Scheduled with -scheduleRecursiveBlock:, this type of block is passed a block +/// with which it can call itself recursively. +typedef void (^RACSchedulerRecursiveBlock)(void (^reschedule)(void)); + +@class RACDisposable; + +/// Schedulers are used to control when and where work is performed. +@interface RACScheduler : NSObject + +/// A singleton scheduler that immediately executes the blocks it is given. +/// +/// **Note:** Unlike most other schedulers, this does not set the current +/// scheduler. There may still be a valid +currentScheduler if this is used +/// within a block scheduled on a different scheduler. ++ (RACScheduler *)immediateScheduler; + +/// A singleton scheduler that executes blocks in the main thread. ++ (RACScheduler *)mainThreadScheduler; + +/// Creates and returns a new background scheduler with the given priority and +/// name. The name is for debug and instrumentation purposes only. +/// +/// Scheduler creation is cheap. It's unnecessary to save the result of this +/// method call unless you want to serialize some actions on the same background +/// scheduler. ++ (RACScheduler *)schedulerWithPriority:(RACSchedulerPriority)priority name:(NSString *)name; + +/// Invokes +schedulerWithPriority:name: with a default name. ++ (RACScheduler *)schedulerWithPriority:(RACSchedulerPriority)priority; + +/// Invokes +schedulerWithPriority: with RACSchedulerPriorityDefault. ++ (RACScheduler *)scheduler; + +/// The current scheduler. This will only be valid when used from within a +/// -[RACScheduler schedule:] block or when on the main thread. ++ (RACScheduler *)currentScheduler; + +/// Schedule the given block for execution on the scheduler. +/// +/// Scheduled blocks will be executed in the order in which they were scheduled. +/// +/// block - The block to schedule for execution. Cannot be nil. +/// +/// Returns a disposable which can be used to cancel the scheduled block before +/// it begins executing, or nil if cancellation is not supported. +- (RACDisposable *)schedule:(void (^)(void))block; + +/// Schedule the given block for execution on the scheduler at or after +/// a specific time. +/// +/// Note that blocks scheduled for a certain time will not preempt any other +/// scheduled work that is executing at the time. +/// +/// When invoked on the +immediateScheduler, the calling thread **will block** +/// until the specified time. +/// +/// date - The earliest time at which `block` should begin executing. The block +/// may not execute immediately at this time, whether due to system load +/// or another block on the scheduler currently being run. Cannot be nil. +/// block - The block to schedule for execution. Cannot be nil. +/// +/// Returns a disposable which can be used to cancel the scheduled block before +/// it begins executing, or nil if cancellation is not supported. +- (RACDisposable *)after:(NSDate *)date schedule:(void (^)(void))block; + +/// Schedule the given block for execution on the scheduler after the delay. +/// +/// Converts the delay into an NSDate, then invokes `-after:schedule:`. +- (RACDisposable *)afterDelay:(NSTimeInterval)delay schedule:(void (^)(void))block; + +/// Reschedule the given block at a particular interval, starting at a specific +/// time, and with a given leeway for deferral. +/// +/// Note that blocks scheduled for a certain time will not preempt any other +/// scheduled work that is executing at the time. +/// +/// Regardless of the value of `leeway`, the given block may not execute exactly +/// at `when` or exactly on successive intervals, whether due to system load or +/// because another block is currently being run on the scheduler. +/// +/// It is considered undefined behavior to invoke this method on the +/// +immediateScheduler. +/// +/// date - The earliest time at which `block` should begin executing. The +/// block may not execute immediately at this time, whether due to +/// system load or another block on the scheduler currently being +/// run. Cannot be nil. +/// interval - The interval at which the block should be rescheduled, starting +/// from `date`. This will use the system wall clock, to avoid +/// skew when the computer goes to sleep. +/// leeway - A hint to the system indicating the number of seconds that each +/// scheduling can be deferred. Note that this is just a hint, and +/// there may be some additional latency no matter what. +/// block - The block to repeatedly schedule for execution. Cannot be nil. +/// +/// Returns a disposable which can be used to cancel the automatic scheduling and +/// rescheduling, or nil if cancellation is not supported. +- (RACDisposable *)after:(NSDate *)date repeatingEvery:(NSTimeInterval)interval withLeeway:(NSTimeInterval)leeway schedule:(void (^)(void))block; + +/// Schedule the given recursive block for execution on the scheduler. The +/// scheduler will automatically flatten any recursive scheduling into iteration +/// instead, so this can be used without issue for blocks that may keep invoking +/// themselves forever. +/// +/// Scheduled blocks will be executed in the order in which they were scheduled. +/// +/// recursiveBlock - The block to schedule for execution. When invoked, the +/// recursive block will be passed a `void (^)(void)` block +/// which will reschedule the recursive block at the end of the +/// receiver's queue. This passed-in block will automatically +/// skip scheduling if the scheduling of the `recursiveBlock` +/// was disposed in the meantime. +/// +/// Returns a disposable which can be used to cancel the scheduled block before +/// it begins executing, or to stop it from rescheduling if it's already begun +/// execution. +- (RACDisposable *)scheduleRecursiveBlock:(RACSchedulerRecursiveBlock)recursiveBlock; + +@end + +@interface RACScheduler (Deprecated) + ++ (RACScheduler *)schedulerWithQueue:(dispatch_queue_t)queue name:(NSString *)name __attribute__((deprecated("Use -[RACScheduler initWithName:targetQueue:] instead."))); + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACScheduler.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACScheduler.m new file mode 100644 index 00000000..a55cacaa --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACScheduler.m @@ -0,0 +1,206 @@ +// +// RACScheduler.m +// ReactiveCocoa +// +// Created by Josh Abernathy on 4/16/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACScheduler.h" +#import "RACBacktrace.h" +#import "RACCompoundDisposable.h" +#import "RACDisposable.h" +#import "RACImmediateScheduler.h" +#import "RACScheduler+Private.h" +#import "RACSubscriptionScheduler.h" +#import "RACTargetQueueScheduler.h" + +// The key for the thread-specific current scheduler. +NSString * const RACSchedulerCurrentSchedulerKey = @"RACSchedulerCurrentSchedulerKey"; + +@interface RACScheduler () +@property (nonatomic, readonly, copy) NSString *name; +@end + +@implementation RACScheduler + +#pragma mark NSObject + +- (NSString *)description { + return [NSString stringWithFormat:@"<%@: %p> %@", self.class, self, self.name]; +} + +#pragma mark Initializers + +- (id)initWithName:(NSString *)name { + self = [super init]; + if (self == nil) return nil; + + if (name == nil) { + _name = [NSString stringWithFormat:@"com.ReactiveCocoa.%@.anonymousScheduler", self.class]; + } else { + _name = [name copy]; + } + + return self; +} + +#pragma mark Schedulers + ++ (instancetype)immediateScheduler { + static dispatch_once_t onceToken; + static RACScheduler *immediateScheduler; + dispatch_once(&onceToken, ^{ + immediateScheduler = [[RACImmediateScheduler alloc] init]; + }); + + return immediateScheduler; +} + ++ (instancetype)mainThreadScheduler { + static dispatch_once_t onceToken; + static RACScheduler *mainThreadScheduler; + dispatch_once(&onceToken, ^{ + mainThreadScheduler = [[RACTargetQueueScheduler alloc] initWithName:@"com.ReactiveCocoa.RACScheduler.mainThreadScheduler" targetQueue:dispatch_get_main_queue()]; + }); + + return mainThreadScheduler; +} + ++ (instancetype)schedulerWithPriority:(RACSchedulerPriority)priority name:(NSString *)name { + return [[RACTargetQueueScheduler alloc] initWithName:name targetQueue:dispatch_get_global_queue(priority, 0)]; +} + ++ (instancetype)schedulerWithPriority:(RACSchedulerPriority)priority { + return [self schedulerWithPriority:priority name:@"com.ReactiveCocoa.RACScheduler.backgroundScheduler"]; +} + ++ (instancetype)scheduler { + return [self schedulerWithPriority:RACSchedulerPriorityDefault]; +} + ++ (instancetype)subscriptionScheduler { + static dispatch_once_t onceToken; + static RACScheduler *subscriptionScheduler; + dispatch_once(&onceToken, ^{ + subscriptionScheduler = [[RACSubscriptionScheduler alloc] init]; + }); + + return subscriptionScheduler; +} + ++ (BOOL)isOnMainThread { + return [NSOperationQueue.currentQueue isEqual:NSOperationQueue.mainQueue] || [NSThread isMainThread]; +} + ++ (instancetype)currentScheduler { + RACScheduler *scheduler = NSThread.currentThread.threadDictionary[RACSchedulerCurrentSchedulerKey]; + if (scheduler != nil) return scheduler; + if ([self.class isOnMainThread]) return RACScheduler.mainThreadScheduler; + + return nil; +} + +#pragma mark Scheduling + +- (RACDisposable *)schedule:(void (^)(void))block { + NSCAssert(NO, @"%@ must be implemented by subclasses.", NSStringFromSelector(_cmd)); + return nil; +} + +- (RACDisposable *)after:(NSDate *)date schedule:(void (^)(void))block { + NSCAssert(NO, @"%@ must be implemented by subclasses.", NSStringFromSelector(_cmd)); + return nil; +} + +- (RACDisposable *)afterDelay:(NSTimeInterval)delay schedule:(void (^)(void))block { + return [self after:[NSDate dateWithTimeIntervalSinceNow:delay] schedule:block]; +} + +- (RACDisposable *)after:(NSDate *)date repeatingEvery:(NSTimeInterval)interval withLeeway:(NSTimeInterval)leeway schedule:(void (^)(void))block { + NSCAssert(NO, @"%@ must be implemented by subclasses.", NSStringFromSelector(_cmd)); + return nil; +} + +- (RACDisposable *)scheduleRecursiveBlock:(RACSchedulerRecursiveBlock)recursiveBlock { + RACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable]; + + [self scheduleRecursiveBlock:[recursiveBlock copy] addingToDisposable:disposable]; + return disposable; +} + +- (void)scheduleRecursiveBlock:(RACSchedulerRecursiveBlock)recursiveBlock addingToDisposable:(RACCompoundDisposable *)disposable { + @autoreleasepool { + RACCompoundDisposable *selfDisposable = [RACCompoundDisposable compoundDisposable]; + [disposable addDisposable:selfDisposable]; + + __weak RACDisposable *weakSelfDisposable = selfDisposable; + + RACDisposable *schedulingDisposable = [self schedule:^{ + @autoreleasepool { + // At this point, we've been invoked, so our disposable is now useless. + [disposable removeDisposable:weakSelfDisposable]; + } + + if (disposable.disposed) return; + + void (^reallyReschedule)(void) = ^{ + if (disposable.disposed) return; + [self scheduleRecursiveBlock:recursiveBlock addingToDisposable:disposable]; + }; + + // Protects the variables below. + // + // This doesn't actually need to be __block qualified, but Clang + // complains otherwise. :C + __block NSLock *lock = [[NSLock alloc] init]; + lock.name = [NSString stringWithFormat:@"%@ %@", self, NSStringFromSelector(_cmd)]; + + __block NSUInteger rescheduleCount = 0; + + // Set to YES once synchronous execution has finished. Further + // rescheduling should occur immediately (rather than being + // flattened). + __block BOOL rescheduleImmediately = NO; + + @autoreleasepool { + recursiveBlock(^{ + [lock lock]; + BOOL immediate = rescheduleImmediately; + if (!immediate) ++rescheduleCount; + [lock unlock]; + + if (immediate) reallyReschedule(); + }); + } + + [lock lock]; + NSUInteger synchronousCount = rescheduleCount; + rescheduleImmediately = YES; + [lock unlock]; + + for (NSUInteger i = 0; i < synchronousCount; i++) { + reallyReschedule(); + } + }]; + + [selfDisposable addDisposable:schedulingDisposable]; + } +} + +@end + +@implementation RACScheduler (Deprecated) + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-implementations" + ++ (instancetype)schedulerWithQueue:(dispatch_queue_t)queue name:(NSString *)name { + NSCParameterAssert(queue != NULL); + + return [[RACTargetQueueScheduler alloc] initWithName:name targetQueue:queue]; +} + +#pragma clang diagnostic pop + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACScopedDisposable.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACScopedDisposable.h new file mode 100644 index 00000000..03da6a27 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACScopedDisposable.h @@ -0,0 +1,19 @@ +// +// RACScopedDisposable.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 3/28/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACDisposable.h" + + +/// A disposable that calls its own -dispose when it is dealloc'd. +@interface RACScopedDisposable : RACDisposable + +/// Creates a new scoped disposable that will also dispose of the given +/// disposable when it is dealloc'd. ++ (instancetype)scopedDisposableWithDisposable:(RACDisposable *)disposable; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACScopedDisposable.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACScopedDisposable.m new file mode 100644 index 00000000..91115be5 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACScopedDisposable.m @@ -0,0 +1,32 @@ +// +// RACScopedDisposable.m +// ReactiveCocoa +// +// Created by Josh Abernathy on 3/28/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACScopedDisposable.h" + +@implementation RACScopedDisposable + +#pragma mark Lifecycle + ++ (instancetype)scopedDisposableWithDisposable:(RACDisposable *)disposable { + return [self disposableWithBlock:^{ + [disposable dispose]; + }]; +} + +- (void)dealloc { + [self dispose]; +} + +#pragma mark RACDisposable + +- (RACScopedDisposable *)asScopedDisposable { + // totally already are + return self; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSequence.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSequence.h new file mode 100644 index 00000000..a39f840a --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSequence.h @@ -0,0 +1,154 @@ +// +// RACSequence.h +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2012-10-29. +// Copyright (c) 2012 GitHub. All rights reserved. +// + +#import +#import "RACStream.h" + +@class RACScheduler; +@class RACSignal; + +/// Represents an immutable sequence of values. Unless otherwise specified, the +/// sequences' values are evaluated lazily on demand. Like Cocoa collections, +/// sequences cannot contain nil. +/// +/// Most inherited RACStream methods that accept a block will execute the block +/// _at most_ once for each value that is evaluated in the returned sequence. +/// Side effects are subject to the behavior described in +/// +sequenceWithHeadBlock:tailBlock:. +/// +/// Implemented as a class cluster. A minimal implementation for a subclass +/// consists simply of -head and -tail. +@interface RACSequence : RACStream + +/// The first object in the sequence, or nil if the sequence is empty. +/// +/// Subclasses must provide an implementation of this method. +@property (nonatomic, strong, readonly) id head; + +/// All but the first object in the sequence, or nil if the sequence is empty. +/// +/// Subclasses must provide an implementation of this method. +@property (nonatomic, strong, readonly) RACSequence *tail; + +/// Evaluates the full sequence to produce an equivalently-sized array. +@property (nonatomic, copy, readonly) NSArray *array; + +/// Returns an enumerator of all objects in the sequence. +@property (nonatomic, copy, readonly) NSEnumerator *objectEnumerator; + +/// Converts a sequence into an eager sequence. +/// +/// An eager sequence fully evaluates all of its values immediately. Sequences +/// derived from an eager sequence will also be eager. +/// +/// Returns a new eager sequence, or the receiver if the sequence is already +/// eager. +@property (nonatomic, copy, readonly) RACSequence *eagerSequence; + +/// Converts a sequence into a lazy sequence. +/// +/// A lazy sequence evaluates its values on demand, as they are accessed. +/// Sequences derived from a lazy sequence will also be lazy. +/// +/// Returns a new lazy sequence, or the receiver if the sequence is already lazy. +@property (nonatomic, copy, readonly) RACSequence *lazySequence; + +/// Invokes -signalWithScheduler: with a new RACScheduler. +- (RACSignal *)signal; + +/// Evaluates the full sequence on the given scheduler. +/// +/// Each item is evaluated in its own scheduled block, such that control of the +/// scheduler is yielded between each value. +/// +/// Returns a signal which sends the receiver's values on the given scheduler as +/// they're evaluated. +- (RACSignal *)signalWithScheduler:(RACScheduler *)scheduler; + +/// Applies a left fold to the sequence. +/// +/// This is the same as iterating the sequence along with a provided start value. +/// This uses a constant amount of memory. A left fold is left-associative so in +/// the sequence [1,2,3] the block would applied in the following order: +/// reduce(reduce(reduce(start, 1), 2), 3) +/// +/// start - The starting value for the fold. Used as `accumulator` for the +/// first fold. +/// reduce - The block used to combine the accumulated value and the next value. +/// Cannot be nil. +/// +/// Returns a reduced value. +- (id)foldLeftWithStart:(id)start reduce:(id (^)(id accumulator, id value))reduce; + +/// Applies a right fold to the sequence. +/// +/// A right fold is equivalent to recursion on the list. The block is evaluated +/// from the right to the left in list. It is right associative so it's applied +/// to the rightmost elements first. For example, in the sequence [1,2,3] the +/// block is applied in the order: +/// reduce(1, reduce(2, reduce(3, start))) +/// +/// start - The starting value for the fold. +/// reduce - The block used to combine the accumulated value and the next head. +/// The block is given the accumulated value and the value of the rest +/// of the computation (result of the recursion). This is computed when +/// you retrieve its value using `rest.head`. This allows you to +/// prevent unnecessary computation by not accessing `rest.head` if you +/// don't need to. +/// +/// Returns a reduced value. +- (id)foldRightWithStart:(id)start reduce:(id (^)(id first, RACSequence *rest))reduce; + +/// Check if any value in sequence passes the block. +/// +/// block - The block predicate used to check each item. Cannot be nil. +/// +/// Returns a boolean indiciating if any value in the sequence passed. +- (BOOL)any:(BOOL (^)(id value))block; + +/// Check if all values in the sequence pass the block. +/// +/// block - The block predicate used to check each item. Cannot be nil. +/// +/// Returns a boolean indicating if all values in the sequence passed. +- (BOOL)all:(BOOL (^)(id value))block; + +/// Returns the first object that passes the block. +/// +/// block - The block predicate used to check each item. Cannot be nil. +/// +/// Returns an object that passes the block or nil if no objects passed. +- (id)objectPassingTest:(BOOL (^)(id value))block; + +/// Creates a sequence that dynamically generates its values. +/// +/// headBlock - Invoked the first time -head is accessed. +/// tailBlock - Invoked the first time -tail is accessed. +/// +/// The results from each block are memoized, so each block will be invoked at +/// most once, no matter how many times the head and tail properties of the +/// sequence are accessed. +/// +/// Any side effects in `headBlock` or `tailBlock` should be thread-safe, since +/// the sequence may be evaluated at any time from any thread. Not only that, but +/// -tail may be accessed before -head, or both may be accessed simultaneously. +/// As noted above, side effects will only be triggered the _first_ time -head or +/// -tail is invoked. +/// +/// Returns a sequence that lazily invokes the given blocks to provide head and +/// tail. `headBlock` must not be nil. ++ (RACSequence *)sequenceWithHeadBlock:(id (^)(void))headBlock tailBlock:(RACSequence *(^)(void))tailBlock; + +@end + +@interface RACSequence (Deprecated) + +- (id)foldLeftWithStart:(id)start combine:(id (^)(id accumulator, id value))combine __attribute__((deprecated("Renamed to -foldLeftWithStart:reduce:"))); +- (id)foldRightWithStart:(id)start combine:(id (^)(id first, RACSequence *rest))combine __attribute__((deprecated("Renamed to -foldRightWithStart:reduce:"))); + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSequence.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSequence.m new file mode 100644 index 00000000..9567ea8d --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSequence.m @@ -0,0 +1,384 @@ +// +// RACSequence.m +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2012-10-29. +// Copyright (c) 2012 GitHub. All rights reserved. +// + +#import "RACSequence.h" +#import "RACArraySequence.h" +#import "RACDynamicSequence.h" +#import "RACEagerSequence.h" +#import "RACEmptySequence.h" +#import "RACScheduler.h" +#import "RACSignal.h" +#import "RACSubscriber.h" +#import "RACTuple.h" +#import "RACUnarySequence.h" + +// An enumerator over sequences. +@interface RACSequenceEnumerator : NSEnumerator + +// The sequence the enumerator is enumerating. +// +// This will change as the enumerator is exhausted. This property should only be +// accessed while synchronized on self. +@property (nonatomic, strong) RACSequence *sequence; + +@end + +@interface RACSequence () + +// Performs one iteration of lazy binding, passing through values from `current` +// until the sequence is exhausted, then recursively binding the remaining +// values in the receiver. +// +// Returns a new sequence which contains `current`, followed by the combined +// result of all applications of `block` to the remaining values in the receiver. +- (instancetype)bind:(RACStreamBindBlock)block passingThroughValuesFromSequence:(RACSequence *)current; + +@end + +@implementation RACSequenceEnumerator + +- (id)nextObject { + id object = nil; + + @synchronized (self) { + object = self.sequence.head; + self.sequence = self.sequence.tail; + } + + return object; +} + +@end + +@implementation RACSequence + +#pragma mark Lifecycle + ++ (RACSequence *)sequenceWithHeadBlock:(id (^)(void))headBlock tailBlock:(RACSequence *(^)(void))tailBlock { + return [[RACDynamicSequence sequenceWithHeadBlock:headBlock tailBlock:tailBlock] setNameWithFormat:@"+sequenceWithHeadBlock:tailBlock:"]; +} + +#pragma mark Class cluster primitives + +- (id)head { + NSCAssert(NO, @"%s must be overridden by subclasses", __func__); + return nil; +} + +- (RACSequence *)tail { + NSCAssert(NO, @"%s must be overridden by subclasses", __func__); + return nil; +} + +#pragma mark RACStream + ++ (instancetype)empty { + return RACEmptySequence.empty; +} + ++ (instancetype)return:(id)value { + return [RACUnarySequence return:value]; +} + +- (instancetype)bind:(RACStreamBindBlock (^)(void))block { + RACStreamBindBlock bindBlock = block(); + return [[self bind:bindBlock passingThroughValuesFromSequence:nil] setNameWithFormat:@"[%@] -bind:", self.name]; +} + +- (instancetype)bind:(RACStreamBindBlock)bindBlock passingThroughValuesFromSequence:(RACSequence *)passthroughSequence { + // Store values calculated in the dependency here instead, avoiding any kind + // of temporary collection and boxing. + // + // This relies on the implementation of RACDynamicSequence synchronizing + // access to its head, tail, and dependency, and we're only doing it because + // we really need the performance. + __block RACSequence *valuesSeq = self; + __block RACSequence *current = passthroughSequence; + __block BOOL stop = NO; + + RACSequence *sequence = [RACDynamicSequence sequenceWithLazyDependency:^ id { + while (current.head == nil) { + if (stop) return nil; + + // We've exhausted the current sequence, create a sequence from the + // next value. + id value = valuesSeq.head; + + if (value == nil) { + // We've exhausted all the sequences. + stop = YES; + return nil; + } + + current = (id)bindBlock(value, &stop); + if (current == nil) { + stop = YES; + return nil; + } + + valuesSeq = valuesSeq.tail; + } + + NSCAssert([current isKindOfClass:RACSequence.class], @"-bind: block returned an object that is not a sequence: %@", current); + return nil; + } headBlock:^(id _) { + return current.head; + } tailBlock:^ id (id _) { + if (stop) return nil; + + return [valuesSeq bind:bindBlock passingThroughValuesFromSequence:current.tail]; + }]; + + sequence.name = self.name; + return sequence; +} + +- (instancetype)concat:(RACStream *)stream { + NSCParameterAssert(stream != nil); + + return [[[RACArraySequence sequenceWithArray:@[ self, stream ] offset:0] + flatten] + setNameWithFormat:@"[%@] -concat: %@", self.name, stream]; +} + +- (instancetype)zipWith:(RACSequence *)sequence { + NSCParameterAssert(sequence != nil); + + return [[RACSequence + sequenceWithHeadBlock:^ id { + if (self.head == nil || sequence.head == nil) return nil; + return RACTuplePack(self.head, sequence.head); + } tailBlock:^ id { + if (self.tail == nil || [[RACSequence empty] isEqual:self.tail]) return nil; + if (sequence.tail == nil || [[RACSequence empty] isEqual:sequence.tail]) return nil; + + return [self.tail zipWith:sequence.tail]; + }] + setNameWithFormat:@"[%@] -zipWith: %@", self.name, sequence]; +} + +#pragma mark Extended methods + +- (NSArray *)array { + NSMutableArray *array = [NSMutableArray array]; + for (id obj in self) { + [array addObject:obj]; + } + + return [array copy]; +} + +- (NSEnumerator *)objectEnumerator { + RACSequenceEnumerator *enumerator = [[RACSequenceEnumerator alloc] init]; + enumerator.sequence = self; + return enumerator; +} + +- (RACSignal *)signal { + return [[self signalWithScheduler:[RACScheduler scheduler]] setNameWithFormat:@"[%@] -signal", self.name]; +} + +- (RACSignal *)signalWithScheduler:(RACScheduler *)scheduler { + return [[RACSignal createSignal:^(id subscriber) { + __block RACSequence *sequence = self; + + return [scheduler scheduleRecursiveBlock:^(void (^reschedule)(void)) { + if (sequence.head == nil) { + [subscriber sendCompleted]; + return; + } + + [subscriber sendNext:sequence.head]; + + sequence = sequence.tail; + reschedule(); + }]; + }] setNameWithFormat:@"[%@] -signalWithScheduler:", self.name]; +} + +- (id)foldLeftWithStart:(id)start reduce:(id (^)(id, id))reduce { + NSCParameterAssert(reduce != NULL); + + if (self.head == nil) return start; + + for (id value in self) { + start = reduce(start, value); + } + + return start; +} + +- (id)foldRightWithStart:(id)start reduce:(id (^)(id, RACSequence *))reduce { + NSCParameterAssert(reduce != NULL); + + if (self.head == nil) return start; + + RACSequence *rest = [RACSequence sequenceWithHeadBlock:^{ + return [self.tail foldRightWithStart:start reduce:reduce]; + } tailBlock:nil]; + + return reduce(self.head, rest); +} + +- (BOOL)any:(BOOL (^)(id))block { + NSCParameterAssert(block != NULL); + + return [self objectPassingTest:block] != nil; +} + +- (BOOL)all:(BOOL (^)(id))block { + NSCParameterAssert(block != NULL); + + NSNumber *result = [self foldLeftWithStart:@YES reduce:^(NSNumber *accumulator, id value) { + return @(accumulator.boolValue && block(value)); + }]; + + return result.boolValue; +} + +- (id)objectPassingTest:(BOOL (^)(id))block { + NSCParameterAssert(block != NULL); + + return [self filter:block].head; +} + +- (RACSequence *)eagerSequence { + return [RACEagerSequence sequenceWithArray:self.array offset:0]; +} + +- (RACSequence *)lazySequence { + return self; +} + +#pragma mark NSCopying + +- (id)copyWithZone:(NSZone *)zone { + return self; +} + +#pragma mark NSCoding + +- (Class)classForCoder { + // Most sequences should be archived as RACArraySequences. + return RACArraySequence.class; +} + +- (id)initWithCoder:(NSCoder *)coder { + if (![self isKindOfClass:RACArraySequence.class]) return [[RACArraySequence alloc] initWithCoder:coder]; + + // Decoding is handled in RACArraySequence. + return [super init]; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [coder encodeObject:self.array forKey:@"array"]; +} + +#pragma mark NSFastEnumeration + +- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(__unsafe_unretained id *)stackbuf count:(NSUInteger)len { + if (state->state == ULONG_MAX) { + // Enumeration has completed. + return 0; + } + + // We need to traverse the sequence itself on repeated calls to this + // method, so use the 'state' field to track the current head. + RACSequence *(^getSequence)(void) = ^{ + return (__bridge RACSequence *)(void *)state->state; + }; + + void (^setSequence)(RACSequence *) = ^(RACSequence *sequence) { + // Release the old sequence and retain the new one. + CFBridgingRelease((void *)state->state); + + state->state = (unsigned long)CFBridgingRetain(sequence); + }; + + void (^complete)(void) = ^{ + // Release any stored sequence. + setSequence(nil); + state->state = ULONG_MAX; + }; + + if (state->state == 0) { + // Since a sequence doesn't mutate, this just needs to be set to + // something non-NULL. + state->mutationsPtr = state->extra; + + setSequence(self); + } + + state->itemsPtr = stackbuf; + + NSUInteger enumeratedCount = 0; + while (enumeratedCount < len) { + RACSequence *seq = getSequence(); + + // Because the objects in a sequence may be generated lazily, we want to + // prevent them from being released until the enumerator's used them. + __autoreleasing id obj = seq.head; + if (obj == nil) { + complete(); + break; + } + + stackbuf[enumeratedCount++] = obj; + + if (seq.tail == nil) { + complete(); + break; + } + + setSequence(seq.tail); + } + + return enumeratedCount; +} + +#pragma mark NSObject + +- (NSUInteger)hash { + return [self.head hash]; +} + +- (BOOL)isEqual:(RACSequence *)seq { + if (self == seq) return YES; + if (![seq isKindOfClass:RACSequence.class]) return NO; + + for (id selfObj in self) { + id seqObj = seq.head; + + // Handles the nil case too. + if (![seqObj isEqual:selfObj]) return NO; + + seq = seq.tail; + } + + // self is now depleted -- the argument should be too. + return (seq.head == nil); +} + +@end + +@implementation RACSequence (Deprecated) + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-implementations" + +- (id)foldLeftWithStart:(id)start combine:(id (^)(id accumulator, id value))combine { + return [self foldLeftWithStart:start reduce:combine]; +} + +- (id)foldRightWithStart:(id)start combine:(id (^)(id first, RACSequence *rest))combine { + return [self foldRightWithStart:start reduce:combine]; +} + +#pragma clang diagnostic pop + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSerialDisposable.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSerialDisposable.h new file mode 100644 index 00000000..a3fc1d45 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSerialDisposable.h @@ -0,0 +1,43 @@ +// +// RACSerialDisposable.h +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2013-07-22. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "RACDisposable.h" + +/// A disposable that contains exactly one other disposable and allows it to be +/// swapped out atomically. +@interface RACSerialDisposable : RACDisposable + +/// The inner disposable managed by the serial disposable. +/// +/// This property is thread-safe for reading and writing. However, if you want to +/// read the current value _and_ write a new one atomically, use +/// -swapInDisposable: instead. +/// +/// Disposing of the receiver will also dispose of the current disposable set for +/// this property, then set the property to nil. If any new disposable is set +/// after the receiver is disposed, it will be disposed immediately and this +/// property will remain set to nil. +@property (atomic, strong) RACDisposable *disposable; + +/// Creates a serial disposable which will wrap the given disposable. +/// +/// disposable - The value to set for `disposable`. This may be nil. +/// +/// Returns a RACSerialDisposable, or nil if an error occurs. ++ (instancetype)serialDisposableWithDisposable:(RACDisposable *)disposable; + +/// Atomically swaps the receiver's `disposable` for `newDisposable`. +/// +/// newDisposable - The new value for `disposable`. If the receiver has already +/// been disposed, this disposable will be too, and `disposable` +/// will remain set to nil. This argument may be nil. +/// +/// Returns the previous value for the `disposable` property. +- (RACDisposable *)swapInDisposable:(RACDisposable *)newDisposable; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSerialDisposable.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSerialDisposable.m new file mode 100644 index 00000000..975afbfe --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSerialDisposable.m @@ -0,0 +1,133 @@ +// +// RACSerialDisposable.m +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2013-07-22. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "RACSerialDisposable.h" +#import + +@interface RACSerialDisposable () { + // A reference to the receiver's `disposable`. This variable must only be + // modified atomically. + // + // If this is `self`, no `disposable` has been set, but the receiver has not + // been disposed of yet. `self` is never stored retained. + // + // If this is `nil`, the receiver has been disposed. + // + // Otherwise, this is a retained reference to the inner disposable and the + // receiver has not been disposed of yet. + void * volatile _disposablePtr; +} + +@end + +@implementation RACSerialDisposable + +#pragma mark Properties + +- (BOOL)isDisposed { + return _disposablePtr == nil; +} + +- (RACDisposable *)disposable { + RACDisposable *disposable = (__bridge id)_disposablePtr; + return (disposable == self ? nil : disposable); +} + +- (void)setDisposable:(RACDisposable *)disposable { + [self swapInDisposable:disposable]; +} + +#pragma mark Lifecycle + ++ (instancetype)serialDisposableWithDisposable:(RACDisposable *)disposable { + RACSerialDisposable *serialDisposable = [[self alloc] init]; + serialDisposable.disposable = disposable; + return serialDisposable; +} + +- (id)init { + self = [super init]; + if (self == nil) return nil; + + _disposablePtr = (__bridge void *)self; + OSMemoryBarrier(); + + return self; +} + +- (id)initWithBlock:(void (^)(void))block { + self = [self init]; + if (self == nil) return nil; + + self.disposable = [RACDisposable disposableWithBlock:block]; + + return self; +} + +- (void)dealloc { + self.disposable = nil; +} + +#pragma mark Inner Disposable + +- (RACDisposable *)swapInDisposable:(RACDisposable *)newDisposable { + void * const selfPtr = (__bridge void *)self; + + // Only retain the new disposable if it's not `self`. + // Take ownership before attempting the swap so that a subsequent swap + // receives an owned reference. + void *newDisposablePtr = selfPtr; + if (newDisposable != nil) { + newDisposablePtr = (void *)CFBridgingRetain(newDisposable); + } + + void *existingDisposablePtr; + // Keep trying while we're not disposed. + while ((existingDisposablePtr = _disposablePtr) != NULL) { + if (!OSAtomicCompareAndSwapPtrBarrier(existingDisposablePtr, newDisposablePtr, &_disposablePtr)) { + continue; + } + + // Return nil if _disposablePtr was set to self. Otherwise, release + // the old value and return it as an object. + if (existingDisposablePtr == selfPtr) { + return nil; + } else { + return CFBridgingRelease(existingDisposablePtr); + } + } + + // At this point, we've found out that we were already disposed. + [newDisposable dispose]; + + // Failed to swap, clean up the ownership we took prior to the swap. + if (newDisposable != nil) { + CFRelease(newDisposablePtr); + } + + return nil; +} + +#pragma mark Disposal + +- (void)dispose { + void *existingDisposablePtr; + + while ((existingDisposablePtr = _disposablePtr) != NULL) { + if (OSAtomicCompareAndSwapPtrBarrier(existingDisposablePtr, NULL, &_disposablePtr)) { + if (existingDisposablePtr != (__bridge void *)self) { + RACDisposable *existingDisposable = CFBridgingRelease(existingDisposablePtr); + [existingDisposable dispose]; + } + + break; + } + } +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignal+Operations.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignal+Operations.h new file mode 100644 index 00000000..b5951dde --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignal+Operations.h @@ -0,0 +1,597 @@ +// +// RACSignal+Operations.h +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2012-09-06. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import +#import "RACSignal.h" + +/// The domain for errors originating in RACSignal operations. +extern NSString * const RACSignalErrorDomain; + +/// The error code used with -timeout:. +extern const NSInteger RACSignalErrorTimedOut; + +/// The error code used when a value passed into +switch:cases:default: does not +/// match any of the cases, and no default was given. +extern const NSInteger RACSignalErrorNoMatchingCase; + +@class RACMulticastConnection; +@class RACDisposable; +@class RACScheduler; +@class RACSequence; +@class RACSubject; +@class RACTuple; +@class RACCommand; +@protocol RACSubscriber; + +@interface RACSignal (Operations) + +/// Do the given block on `next`. This should be used to inject side effects into +/// the signal. +- (RACSignal *)doNext:(void (^)(id x))block; + +/// Do the given block on `error`. This should be used to inject side effects +/// into the signal. +- (RACSignal *)doError:(void (^)(NSError *error))block; + +/// Do the given block on `completed`. This should be used to inject side effects +/// into the signal. +- (RACSignal *)doCompleted:(void (^)(void))block; + +/// Send `next`s only if we don't receive another `next` in `interval` seconds. +/// +/// If a `next` is received, and then another `next` is received before +/// `interval` seconds have passed, the first value is discarded. +/// +/// After `interval` seconds have passed since the most recent `next` was sent, +/// the most recent `next` is forwarded on the scheduler that the value was +/// originally received on. If +[RACScheduler currentScheduler] was nil at the +/// time, a private background scheduler is used. +/// +/// Returns a signal which sends throttled and delayed `next` events. Completion +/// and errors are always forwarded immediately. +- (RACSignal *)throttle:(NSTimeInterval)interval; + +/// Throttles `next`s for which `predicate` returns YES. +/// +/// When `predicate` returns YES for a `next`: +/// +/// 1. If another `next` is received before `interval` seconds have passed, the +/// prior value is discarded. This happens regardless of whether the new +/// value will be throttled. +/// 2. After `interval` seconds have passed since the value was originally +/// received, it will be forwarded on the scheduler that it was received +/// upon. If +[RACScheduler currentScheduler] was nil at the time, a private +/// background scheduler is used. +/// +/// When `predicate` returns NO for a `next`, it is forwarded immediately, +/// without any throttling. +/// +/// interval - The number of seconds for which to buffer the latest value that +/// passes `predicate`. +/// predicate - Passed each `next` from the receiver, this block returns +/// whether the given value should be throttled. This argument must +/// not be nil. +/// +/// Returns a signal which sends `next` events, throttled when `predicate` +/// returns YES. Completion and errors are always forwarded immediately. +- (RACSignal *)throttle:(NSTimeInterval)interval valuesPassingTest:(BOOL (^)(id next))predicate; + +/// Forwards `next` and `completed` events after delaying for `interval` seconds +/// on the current scheduler (on which the events were delivered). +/// +/// If +[RACScheduler currentScheduler] is nil when `next` or `completed` is +/// received, a private background scheduler is used. +/// +/// Returns a signal which sends delayed `next` and `completed` events. Errors +/// are always forwarded immediately. +- (RACSignal *)delay:(NSTimeInterval)interval; + +/// Resubscribes when the signal completes. +- (RACSignal *)repeat; + +/// Execute the given block each time a subscription is created. +/// +/// block - A block which defines the subscription side effects. Cannot be `nil`. +/// +/// Example: +/// +/// // Write new file, with backup. +/// [[[[fileManager +/// rac_createFileAtPath:path contents:data] +/// initially:^{ +/// // 2. Second, backup current file +/// [fileManager moveItemAtPath:path toPath:backupPath error:nil]; +/// }] +/// initially:^{ +/// // 1. First, acquire write lock. +/// [writeLock lock]; +/// }] +/// finally:^{ +/// [writeLock unlock]; +/// }]; +/// +/// Returns a signal that passes through all events of the receiver, plus +/// introduces side effects which occur prior to any subscription side effects +/// of the receiver. +- (RACSignal *)initially:(void (^)(void))block; + +/// Execute the given block when the signal completes or errors. +- (RACSignal *)finally:(void (^)(void))block; + +/// Divides the receiver's `next`s into buffers which deliver every `interval` +/// seconds. +/// +/// interval - The interval in which values are grouped into one buffer. +/// scheduler - The scheduler upon which the returned signal will deliver its +/// values. This must not be nil or +[RACScheduler +/// immediateScheduler]. +/// +/// Returns a signal which sends RACTuples of the buffered values at each +/// interval on `scheduler`. When the receiver completes, any currently-buffered +/// values will be sent immediately. +- (RACSignal *)bufferWithTime:(NSTimeInterval)interval onScheduler:(RACScheduler *)scheduler; + +/// Collect all receiver's `next`s into a NSArray. nil values will be converted +/// to NSNull. +/// +/// This corresponds to the `ToArray` method in Rx. +/// +/// Returns a signal which sends a single NSArray when the receiver completes +/// successfully. +- (RACSignal *)collect; + +/// Takes the last `count` `next`s after the receiving signal completes. +- (RACSignal *)takeLast:(NSUInteger)count; + +/// Combines the latest values from the receiver and the given signal into +/// RACTuples, once both have sent at least one `next`. +/// +/// Any additional `next`s will result in a new RACTuple with the latest values +/// from both signals. +/// +/// signal - The signal to combine with. This argument must not be nil. +/// +/// Returns a signal which sends RACTuples of the combined values, forwards any +/// `error` events, and completes when both input signals complete. +- (RACSignal *)combineLatestWith:(RACSignal *)signal; + +/// Combines the latest values from the given signals into RACTuples, once all +/// the signals have sent at least one `next`. +/// +/// Any additional `next`s will result in a new RACTuple with the latest values +/// from all signals. +/// +/// signals - The signals to combine. If this collection is empty, the returned +/// signal will immediately complete upon subscription. +/// +/// Returns a signal which sends RACTuples of the combined values, forwards any +/// `error` events, and completes when all input signals complete. ++ (RACSignal *)combineLatest:(id)signals; + +/// Combines signals using +combineLatest:, then reduces the resulting tuples +/// into a single value using -reduceEach:. +/// +/// signals - The signals to combine. If this collection is empty, the +/// returned signal will immediately complete upon subscription. +/// reduceBlock - The block which reduces the latest values from all the +/// signals into one value. It must take as many arguments as the +/// number of signals given. Each argument will be an object +/// argument. The return value must be an object. This argument +/// must not be nil. +/// +/// Example: +/// +/// [RACSignal combineLatest:@[ stringSignal, intSignal ] reduce:^(NSString *string, NSNumber *number) { +/// return [NSString stringWithFormat:@"%@: %@", string, number]; +/// }]; +/// +/// Returns a signal which sends the results from each invocation of +/// `reduceBlock`. ++ (RACSignal *)combineLatest:(id)signals reduce:(id (^)())reduceBlock; + +/// Sends the latest `next` from any of the signals. +/// +/// Returns a signal that passes through values from each of the given signals, +/// and sends `completed` when all of them complete. If any signal sends an error, +/// the returned signal sends `error` immediately. ++ (RACSignal *)merge:(id)signals; + +/// Merges the signals sent by the receiver into a flattened signal, but only +/// subscribes to `maxConcurrent` number of signals at a time. New signals are +/// queued and subscribed to as other signals complete. +/// +/// If an error occurs on any of the signals, it is sent on the returned signal. +/// It completes only after the receiver and all sent signals have completed. +/// +/// This corresponds to `Merge(IObservable>, Int32)` +/// in Rx. +/// +/// maxConcurrent - the maximum number of signals to subscribe to at a +/// time. If 0, it subscribes to an unlimited number of +/// signals. +- (RACSignal *)flatten:(NSUInteger)maxConcurrent; + +/// Ignores all `next`s from the receiver, waits for the receiver to complete, +/// then subscribes to a new signal. +/// +/// block - A block which will create or obtain a new signal to subscribe to, +/// executed only after the receiver completes. This block must not be +/// nil, and it must not return a nil signal. +/// +/// Returns a signal which will pass through the events of the signal created in +/// `block`. If the receiver errors out, the returned signal will error as well. +- (RACSignal *)then:(RACSignal * (^)(void))block; + +/// Concats the inner signals of a signal of signals. +- (RACSignal *)concat; + +/// Aggregate `next`s with the given start and combination. +- (RACSignal *)aggregateWithStart:(id)start reduce:(id (^)(id running, id next))reduceBlock; + +/// Aggregate `next`s with the given start and combination. The start factory +/// block is called to get a new start object for each subscription. +- (RACSignal *)aggregateWithStartFactory:(id (^)(void))startFactory reduce:(id (^)(id running, id next))reduceBlock; + +/// Invokes -setKeyPath:onObject:nilValue: with `nil` for the nil value. +- (RACDisposable *)setKeyPath:(NSString *)keyPath onObject:(NSObject *)object; + +/// Binds the receiver to an object, automatically setting the given key path on +/// every `next`. When the signal completes, the binding is automatically +/// disposed of. +/// +/// Sending an error on the signal is considered undefined behavior, and will +/// generate an assertion failure in Debug builds. +/// +/// A given key on an object should only have one active signal bound to it at any +/// given time. Binding more than one signal to the same property is considered +/// undefined behavior. +/// +/// keyPath - The key path to update with `next`s from the receiver. +/// object - The object that `keyPath` is relative to. +/// nilValue - The value to set at the key path whenever `nil` is sent by the +/// receiver. This may be nil when binding to object properties, but +/// an NSValue should be used for primitive properties, to avoid an +/// exception if `nil` is sent (which might occur if an intermediate +/// object is set to `nil`). +/// +/// Returns a disposable which can be used to terminate the binding. +- (RACDisposable *)setKeyPath:(NSString *)keyPath onObject:(NSObject *)object nilValue:(id)nilValue; + +/// Sends NSDate.date every `interval` seconds. +/// +/// interval - The time interval in seconds at which the current time is sent. +/// scheduler - The scheduler upon which the current NSDate should be sent. This +/// must not be nil or +[RACScheduler immediateScheduler]. +/// +/// Returns a signal that sends the current date/time every `interval` on +/// `scheduler`. ++ (RACSignal *)interval:(NSTimeInterval)interval onScheduler:(RACScheduler *)scheduler; + +/// Sends NSDate.date at intervals of at least `interval` seconds, up to +/// approximately `interval` + `leeway` seconds. +/// +/// The created signal will defer sending each `next` for at least `interval` +/// seconds, and for an additional amount of time up to `leeway` seconds in the +/// interest of performance or power consumption. Note that some additional +/// latency is to be expected, even when specifying a `leeway` of 0. +/// +/// interval - The base interval between `next`s. +/// scheduler - The scheduler upon which the current NSDate should be sent. This +/// must not be nil or +[RACScheduler immediateScheduler]. +/// leeway - The maximum amount of additional time the `next` can be deferred. +/// +/// Returns a signal that sends the current date/time at intervals of at least +/// `interval seconds` up to approximately `interval` + `leeway` seconds on +/// `scheduler`. ++ (RACSignal *)interval:(NSTimeInterval)interval onScheduler:(RACScheduler *)scheduler withLeeway:(NSTimeInterval)leeway; + +/// Take `next`s until the `signalTrigger` sends `next` or `completed`. +/// +/// Returns a signal which passes through all events from the receiver until +/// `signalTrigger` sends `next` or `completed`, at which point the returned signal +/// will send `completed`. +- (RACSignal *)takeUntil:(RACSignal *)signalTrigger; + +/// Subscribe to the returned signal when an error occurs. +- (RACSignal *)catch:(RACSignal * (^)(NSError *error))catchBlock; + +/// Subscribe to the given signal when an error occurs. +- (RACSignal *)catchTo:(RACSignal *)signal; + +/// Runs `tryBlock` against each of the receiver's values, passing values +/// until `tryBlock` returns NO, or the receiver completes. +/// +/// tryBlock - An action to run against each of the receiver's values. +/// The block should return YES to indicate that the action was +/// successful. This block must not be nil. +/// +/// Example: +/// +/// // The returned signal will send an error if data values cannot be +/// // written to `someFileURL`. +/// [signal try:^(NSData *data, NSError **errorPtr) { +/// return [data writeToURL:someFileURL options:NSDataWritingAtomic error:errorPtr]; +/// }]; +/// +/// Returns a signal which passes through all the values of the receiver. If +/// `tryBlock` fails for any value, the returned signal will error using the +/// `NSError` passed out from the block. +- (RACSignal *)try:(BOOL (^)(id value, NSError **errorPtr))tryBlock; + +/// Runs `mapBlock` against each of the receiver's values, mapping values until +/// `mapBlock` returns nil, or the receiver completes. +/// +/// mapBlock - An action to map each of the receiver's values. The block should +/// return a non-nil value to indicate that the action was successful. +/// This block must not be nil. +/// +/// Example: +/// +/// // The returned signal will send an error if data cannot be read from +/// // `fileURL`. +/// [signal tryMap:^(NSURL *fileURL, NSError **errorPtr) { +/// return [NSData dataWithContentsOfURL:fileURL options:0 error:errorPtr]; +/// }]; +/// +/// Returns a signal which transforms all the values of the receiver. If +/// `mapBlock` returns nil for any value, the returned signal will error using +/// the `NSError` passed out from the block. +- (RACSignal *)tryMap:(id (^)(id value, NSError **errorPtr))mapBlock; + +/// Returns the first `next`. Note that this is a blocking call. +- (id)first; + +/// Returns the first `next` or `defaultValue` if the signal completes or errors +/// without sending a `next`. Note that this is a blocking call. +- (id)firstOrDefault:(id)defaultValue; + +/// Returns the first `next` or `defaultValue` if the signal completes or errors +/// without sending a `next`. If an error occurs success will be NO and error +/// will be populated. Note that this is a blocking call. +/// +/// Both success and error may be NULL. +- (id)firstOrDefault:(id)defaultValue success:(BOOL *)success error:(NSError **)error; + +/// Blocks the caller and waits for the signal to complete. +/// +/// error - If not NULL, set to any error that occurs. +/// +/// Returns whether the signal completed successfully. If NO, `error` will be set +/// to the error that occurred. +- (BOOL)waitUntilCompleted:(NSError **)error; + +/// Defer creation of a signal until the signal's actually subscribed to. +/// +/// This can be used to effectively turn a hot signal into a cold signal. ++ (RACSignal *)defer:(RACSignal * (^)(void))block; + +/// Every time the receiver sends a new RACSignal, subscribes and sends `next`s and +/// `error`s only for that signal. +/// +/// The receiver must be a signal of signals. +/// +/// Returns a signal which passes through `next`s and `error`s from the latest +/// signal sent by the receiver, and sends `completed` when both the receiver and +/// the last sent signal complete. +- (RACSignal *)switchToLatest; + +/// Switches between the signals in `cases` as well as `defaultSignal` based on +/// the latest value sent by `signal`. +/// +/// signal - A signal of objects used as keys in the `cases` dictionary. +/// This argument must not be nil. +/// cases - A dictionary that has signals as values. This argument must +/// not be nil. A RACTupleNil key in this dictionary will match +/// nil `next` events that are received on `signal`. +/// defaultSignal - The signal to pass through after `signal` sends a value for +/// which `cases` does not contain a signal. If nil, any +/// unmatched values will result in +/// a RACSignalErrorNoMatchingCase error. +/// +/// Returns a signal which passes through `next`s and `error`s from one of the +/// the signals in `cases` or `defaultSignal`, and sends `completed` when both +/// `signal` and the last used signal complete. If no `defaultSignal` is given, +/// an unmatched `next` will result in an error on the returned signal. ++ (RACSignal *)switch:(RACSignal *)signal cases:(NSDictionary *)cases default:(RACSignal *)defaultSignal; + +/// Switches between `trueSignal` and `falseSignal` based on the latest value +/// sent by `boolSignal`. +/// +/// boolSignal - A signal of BOOLs determining whether `trueSignal` or +/// `falseSignal` should be active. This argument must not be nil. +/// trueSignal - The signal to pass through after `boolSignal` has sent YES. +/// This argument must not be nil. +/// falseSignal - The signal to pass through after `boolSignal` has sent NO. This +/// argument must not be nil. +/// +/// Returns a signal which passes through `next`s and `error`s from `trueSignal` +/// and/or `falseSignal`, and sends `completed` when both `boolSignal` and the +/// last switched signal complete. ++ (RACSignal *)if:(RACSignal *)boolSignal then:(RACSignal *)trueSignal else:(RACSignal *)falseSignal; + +/// Add every `next` to an array. Nils are represented by NSNulls. Note that this +/// is a blocking call. +/// +/// **This is not the same as the `ToArray` method in Rx.** See -collect for +/// that behavior instead. +/// +/// Returns the array of `next` values, or nil if an error occurs. +- (NSArray *)toArray; + +/// Add every `next` to a sequence. Nils are represented by NSNulls. +/// +/// This corresponds to the `ToEnumerable` method in Rx. +/// +/// Returns a sequence which provides values from the signal as they're sent. +/// Trying to retrieve a value from the sequence which has not yet been sent will +/// block. +@property (nonatomic, strong, readonly) RACSequence *sequence; + +/// Creates and returns a multicast connection. This allows you to share a single +/// subscription to the underlying signal. +- (RACMulticastConnection *)publish; + +/// Creates and returns a multicast connection that pushes values into the given +/// subject. This allows you to share a single subscription to the underlying +/// signal. +- (RACMulticastConnection *)multicast:(RACSubject *)subject; + +/// Multicasts the signal to a RACReplaySubject of unlimited capacity, and +/// immediately connects to the resulting RACMulticastConnection. +/// +/// Returns the connected, multicasted signal. +- (RACSignal *)replay; + +/// Multicasts the signal to a RACReplaySubject of capacity 1, and immediately +/// connects to the resulting RACMulticastConnection. +/// +/// Returns the connected, multicasted signal. +- (RACSignal *)replayLast; + +/// Multicasts the signal to a RACReplaySubject of unlimited capacity, and +/// lazily connects to the resulting RACMulticastConnection. +/// +/// This means the returned signal will subscribe to the multicasted signal only +/// when the former receives its first subscription. +/// +/// Returns the lazily connected, multicasted signal. +- (RACSignal *)replayLazily; + +/// Sends an error after `interval` seconds if the source doesn't complete +/// before then. +/// +/// The error will be in the RACSignalErrorDomain and have a code of +/// RACSignalErrorTimedOut. +/// +/// interval - The number of seconds after which the signal should error out. +/// scheduler - The scheduler upon which any timeout error should be sent. This +/// must not be nil or +[RACScheduler immediateScheduler]. +/// +/// Returns a signal that passes through the receiver's events, until the stream +/// finishes or times out, at which point an error will be sent on `scheduler`. +- (RACSignal *)timeout:(NSTimeInterval)interval onScheduler:(RACScheduler *)scheduler; + +/// Creates and returns a signal that delivers its events on the given scheduler. +/// Any side effects of the receiver will still be performed on the original +/// thread. +/// +/// This is ideal when the signal already performs its work on the desired +/// thread, but you want to handle its events elsewhere. +/// +/// This corresponds to the `ObserveOn` method in Rx. +- (RACSignal *)deliverOn:(RACScheduler *)scheduler; + +/// Creates and returns a signal that executes its side effects and delivers its +/// events on the given scheduler. +/// +/// Use of this operator should be avoided whenever possible, because the +/// receiver's side effects may not be safe to run on another thread. If you just +/// want to receive the signal's events on `scheduler`, use -deliverOn: instead. +- (RACSignal *)subscribeOn:(RACScheduler *)scheduler; + +/// Groups each received object into a group, as determined by calling `keyBlock` +/// with that object. The object sent is transformed by calling `transformBlock` +/// with the object. If `transformBlock` is nil, it sends the original object. +/// +/// The returned signal is a signal of RACGroupedSignal. +- (RACSignal *)groupBy:(id (^)(id object))keyBlock transform:(id (^)(id object))transformBlock; + +/// Calls -[RACSignal groupBy:keyBlock transform:nil]. +- (RACSignal *)groupBy:(id (^)(id object))keyBlock; + +/// Sends an [NSNumber numberWithBool:YES] if the receiving signal sends any +/// objects. +- (RACSignal *)any; + +/// Sends an [NSNumber numberWithBool:YES] if the receiving signal sends any +/// objects that pass `predicateBlock`. +/// +/// predicateBlock - cannot be nil. +- (RACSignal *)any:(BOOL (^)(id object))predicateBlock; + +/// Sends an [NSNumber numberWithBool:YES] if all the objects the receiving +/// signal sends pass `predicateBlock`. +/// +/// predicateBlock - cannot be nil. +- (RACSignal *)all:(BOOL (^)(id object))predicateBlock; + +/// Resubscribes to the receiving signal if an error occurs, up until it has +/// retried the given number of times. +/// +/// retryCount - if 0, it keeps retrying until it completes. +- (RACSignal *)retry:(NSInteger)retryCount; + +/// Resubscribes to the receiving signal if an error occurs. +- (RACSignal *)retry; + +/// Sends the latest value from the receiver only when `sampler` sends a value. +/// The returned signal could repeat values if `sampler` fires more often than +/// the receiver. Values from `sampler` are ignored before the receiver sends +/// its first value. +/// +/// sampler - The signal that controls when the latest value from the receiver +/// is sent. Cannot be nil. +- (RACSignal *)sample:(RACSignal *)sampler; + +/// Ignores all `next`s from the receiver. +/// +/// Returns a signal which only passes through `error` or `completed` events from +/// the receiver. +- (RACSignal *)ignoreValues; + +/// Converts each of the receiver's events into a RACEvent object. +/// +/// Returns a signal which sends the receiver's events as RACEvents, and +/// completes after the receiver sends `completed` or `error`. +- (RACSignal *)materialize; + +/// Converts each RACEvent in the receiver back into "real" RACSignal events. +/// +/// Returns a signal which sends `next` for each value RACEvent, `error` for each +/// error RACEvent, and `completed` for each completed RACEvent. +- (RACSignal *)dematerialize; + +/// Inverts each NSNumber-wrapped BOOL sent by the receiver. It will assert if +/// the receiver sends anything other than NSNumbers. +/// +/// Returns a signal of inverted NSNumber-wrapped BOOLs. +- (RACSignal *)not; + +/// Performs a boolean AND on all of the RACTuple of NSNumbers in sent by the receiver. +/// +/// Asserts if the receiver sends anything other than a RACTuple of one or more NSNumbers. +/// +/// Returns a signal that applies AND to each NSNumber in the tuple. +- (RACSignal *)and; + +/// Performs a boolean OR on all of the RACTuple of NSNumbers in sent by the receiver. +/// +/// Asserts if the receiver sends anything other than a RACTuple of one or more NSNumbers. +/// +/// Returns a signal that applies OR to each NSNumber in the tuple. +- (RACSignal *)or; + +@end + +@interface RACSignal (OperationsDeprecated) + +- (RACSignal *)windowWithStart:(RACSignal *)openSignal close:(RACSignal * (^)(RACSignal *start))closeBlock __attribute__((deprecated("See https://github.com/ReactiveCocoa/ReactiveCocoa/issues/587"))); +- (RACSignal *)buffer:(NSUInteger)bufferCount __attribute__((deprecated("See https://github.com/ReactiveCocoa/ReactiveCocoa/issues/587"))); +- (RACSignal *)let:(RACSignal * (^)(RACSignal *sharedSignal))letBlock __attribute__((deprecated("Use -publish instead"))); ++ (RACSignal *)interval:(NSTimeInterval)interval __attribute__((deprecated("Use +interval:onScheduler: instead"))); ++ (RACSignal *)interval:(NSTimeInterval)interval withLeeway:(NSTimeInterval)leeway __attribute__((deprecated("Use +interval:onScheduler:withLeeway: instead"))); +- (RACSignal *)bufferWithTime:(NSTimeInterval)interval __attribute__((deprecated("Use -bufferWithTime:onScheduler: instead"))); +- (RACSignal *)timeout:(NSTimeInterval)interval __attribute__((deprecated("Use -timeout:onScheduler: instead"))); +- (RACDisposable *)toProperty:(NSString *)keyPath onObject:(NSObject *)object __attribute__((deprecated("Renamed to -setKeyPath:onObject:"))); +- (RACSignal *)ignoreElements __attribute__((deprecated("Renamed to -ignoreValues"))); +- (RACSignal *)sequenceNext:(RACSignal * (^)(void))block __attribute__((deprecated("Renamed to -then:"))); +- (RACSignal *)aggregateWithStart:(id)start combine:(id (^)(id running, id next))combineBlock __attribute__((deprecated("Renamed to -aggregateWithStart:reduce:"))); +- (RACSignal *)aggregateWithStartFactory:(id (^)(void))startFactory combine:(id (^)(id running, id next))combineBlock __attribute__((deprecated("Renamed to -aggregateWithStartFactory:reduce:"))); +- (RACDisposable *)executeCommand:(RACCommand *)command __attribute__((deprecated("Use -flattenMap: or -subscribeNext: instead"))); + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignal+Operations.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignal+Operations.m new file mode 100644 index 00000000..9f09fe63 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignal+Operations.m @@ -0,0 +1,1396 @@ +// +// RACSignal+Operations.m +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2012-09-06. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACSignal+Operations.h" +#import "NSObject+RACDeallocating.h" +#import "NSObject+RACDescription.h" +#import "RACCommand.h" +#import "RACCompoundDisposable.h" +#import "RACDisposable.h" +#import "RACEvent.h" +#import "RACGroupedSignal.h" +#import "RACMulticastConnection+Private.h" +#import "RACReplaySubject.h" +#import "RACScheduler+Private.h" +#import "RACScheduler.h" +#import "RACSerialDisposable.h" +#import "RACSignalSequence.h" +#import "RACStream+Private.h" +#import "RACSubject.h" +#import "RACSubscriber+Private.h" +#import "RACSubscriber.h" +#import "RACTuple.h" +#import "RACUnit.h" +#import +#import + +NSString * const RACSignalErrorDomain = @"RACSignalErrorDomain"; + +const NSInteger RACSignalErrorTimedOut = 1; +const NSInteger RACSignalErrorNoMatchingCase = 2; + +// Subscribes to the given signal with the given blocks. +// +// If the signal errors or completes, the corresponding block is invoked. If the +// disposable passed to the block is _not_ disposed, then the signal is +// subscribed to again. +static RACDisposable *subscribeForever (RACSignal *signal, void (^next)(id), void (^error)(NSError *, RACDisposable *), void (^completed)(RACDisposable *)) { + next = [next copy]; + error = [error copy]; + completed = [completed copy]; + + RACCompoundDisposable *compoundDisposable = [RACCompoundDisposable compoundDisposable]; + + RACSchedulerRecursiveBlock recursiveBlock = ^(void (^recurse)(void)) { + RACCompoundDisposable *selfDisposable = [RACCompoundDisposable compoundDisposable]; + [compoundDisposable addDisposable:selfDisposable]; + + __weak RACDisposable *weakSelfDisposable = selfDisposable; + + RACDisposable *subscriptionDisposable = [signal subscribeNext:next error:^(NSError *e) { + @autoreleasepool { + error(e, compoundDisposable); + [compoundDisposable removeDisposable:weakSelfDisposable]; + } + + recurse(); + } completed:^{ + @autoreleasepool { + completed(compoundDisposable); + [compoundDisposable removeDisposable:weakSelfDisposable]; + } + + recurse(); + }]; + + [selfDisposable addDisposable:subscriptionDisposable]; + }; + + // Subscribe once immediately, and then use recursive scheduling for any + // further resubscriptions. + recursiveBlock(^{ + RACScheduler *recursiveScheduler = RACScheduler.currentScheduler ?: [RACScheduler scheduler]; + + RACDisposable *schedulingDisposable = [recursiveScheduler scheduleRecursiveBlock:recursiveBlock]; + [compoundDisposable addDisposable:schedulingDisposable]; + }); + + return compoundDisposable; +} + +@implementation RACSignal (Operations) + +- (RACSignal *)doNext:(void (^)(id x))block { + NSCParameterAssert(block != NULL); + + return [[RACSignal createSignal:^(id subscriber) { + return [self subscribeNext:^(id x) { + block(x); + [subscriber sendNext:x]; + } error:^(NSError *error) { + [subscriber sendError:error]; + } completed:^{ + [subscriber sendCompleted]; + }]; + }] setNameWithFormat:@"[%@] -doNext:", self.name]; +} + +- (RACSignal *)doError:(void (^)(NSError *error))block { + NSCParameterAssert(block != NULL); + + return [[RACSignal createSignal:^(id subscriber) { + return [self subscribeNext:^(id x) { + [subscriber sendNext:x]; + } error:^(NSError *error) { + block(error); + [subscriber sendError:error]; + } completed:^{ + [subscriber sendCompleted]; + }]; + }] setNameWithFormat:@"[%@] -doError:", self.name]; +} + +- (RACSignal *)doCompleted:(void (^)(void))block { + NSCParameterAssert(block != NULL); + + return [[RACSignal createSignal:^(id subscriber) { + return [self subscribeNext:^(id x) { + [subscriber sendNext:x]; + } error:^(NSError *error) { + [subscriber sendError:error]; + } completed:^{ + block(); + [subscriber sendCompleted]; + }]; + }] setNameWithFormat:@"[%@] -doCompleted:", self.name]; +} + +- (RACSignal *)throttle:(NSTimeInterval)interval { + return [[self throttle:interval valuesPassingTest:^(id _) { + return YES; + }] setNameWithFormat:@"[%@] -throttle: %f", self.name, (double)interval]; +} + +- (RACSignal *)throttle:(NSTimeInterval)interval valuesPassingTest:(BOOL (^)(id next))predicate { + NSCParameterAssert(interval >= 0); + NSCParameterAssert(predicate != nil); + + return [[RACSignal createSignal:^(id subscriber) { + RACCompoundDisposable *compoundDisposable = [RACCompoundDisposable compoundDisposable]; + + // We may never use this scheduler, but we need to set it up ahead of + // time so that our scheduled blocks are run serially if we do. + RACScheduler *scheduler = [RACScheduler scheduler]; + + // Information about any currently-buffered `next` event. + __block id nextValue = nil; + __block BOOL hasNextValue = NO; + RACSerialDisposable *nextDisposable = [[RACSerialDisposable alloc] init]; + + void (^flushNext)(BOOL send) = ^(BOOL send) { + @synchronized (compoundDisposable) { + [nextDisposable.disposable dispose]; + + if (!hasNextValue) return; + if (send) [subscriber sendNext:nextValue]; + + nextValue = nil; + hasNextValue = NO; + } + }; + + RACDisposable *subscriptionDisposable = [self subscribeNext:^(id x) { + RACScheduler *delayScheduler = RACScheduler.currentScheduler ?: scheduler; + BOOL shouldThrottle = predicate(x); + + @synchronized (compoundDisposable) { + flushNext(NO); + if (!shouldThrottle) { + [subscriber sendNext:x]; + return; + } + + nextValue = x; + hasNextValue = YES; + nextDisposable.disposable = [delayScheduler afterDelay:interval schedule:^{ + flushNext(YES); + }]; + } + } error:^(NSError *error) { + [compoundDisposable dispose]; + [subscriber sendError:error]; + } completed:^{ + flushNext(YES); + [subscriber sendCompleted]; + }]; + + [compoundDisposable addDisposable:subscriptionDisposable]; + return compoundDisposable; + }] setNameWithFormat:@"[%@] -throttle: %f valuesPassingTest:", self.name, (double)interval]; +} + +- (RACSignal *)delay:(NSTimeInterval)interval { + return [[RACSignal createSignal:^(id subscriber) { + RACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable]; + + // We may never use this scheduler, but we need to set it up ahead of + // time so that our scheduled blocks are run serially if we do. + RACScheduler *scheduler = [RACScheduler scheduler]; + + void (^schedule)(dispatch_block_t) = ^(dispatch_block_t block) { + RACScheduler *delayScheduler = RACScheduler.currentScheduler ?: scheduler; + RACDisposable *schedulerDisposable = [delayScheduler afterDelay:interval schedule:block]; + [disposable addDisposable:schedulerDisposable]; + }; + + RACDisposable *subscriptionDisposable = [self subscribeNext:^(id x) { + schedule(^{ + [subscriber sendNext:x]; + }); + } error:^(NSError *error) { + [subscriber sendError:error]; + } completed:^{ + schedule(^{ + [subscriber sendCompleted]; + }); + }]; + + [disposable addDisposable:subscriptionDisposable]; + return disposable; + }] setNameWithFormat:@"[%@] -delay: %f", self.name, (double)interval]; +} + +- (RACSignal *)repeat { + return [[RACSignal createSignal:^(id subscriber) { + return subscribeForever(self, + ^(id x) { + [subscriber sendNext:x]; + }, + ^(NSError *error, RACDisposable *disposable) { + [disposable dispose]; + [subscriber sendError:error]; + }, + ^(RACDisposable *disposable) { + // Resubscribe. + }); + }] setNameWithFormat:@"[%@] -repeat", self.name]; +} + +- (RACSignal *)catch:(RACSignal * (^)(NSError *error))catchBlock { + NSCParameterAssert(catchBlock != NULL); + + return [[RACSignal createSignal:^(id subscriber) { + RACSerialDisposable *catchDisposable = [[RACSerialDisposable alloc] init]; + + RACDisposable *subscriptionDisposable = [self subscribeNext:^(id x) { + [subscriber sendNext:x]; + } error:^(NSError *error) { + RACSignal *signal = catchBlock(error); + NSCAssert(signal != nil, @"Expected non-nil signal from catch block on %@", self); + catchDisposable.disposable = [signal subscribe:subscriber]; + } completed:^{ + [subscriber sendCompleted]; + }]; + + return [RACDisposable disposableWithBlock:^{ + [catchDisposable dispose]; + [subscriptionDisposable dispose]; + }]; + }] setNameWithFormat:@"[%@] -catch:", self.name]; +} + +- (RACSignal *)catchTo:(RACSignal *)signal { + return [[self catch:^(NSError *error) { + return signal; + }] setNameWithFormat:@"[%@] -catchTo: %@", self.name, signal]; +} + +- (RACSignal *)try:(BOOL (^)(id value, NSError **errorPtr))tryBlock { + NSCParameterAssert(tryBlock != NULL); + + return [[self flattenMap:^(id value) { + NSError *error = nil; + BOOL passed = tryBlock(value, &error); + return (passed ? [RACSignal return:value] : [RACSignal error:error]); + }] setNameWithFormat:@"[%@] -try:", self.name]; +} + +- (RACSignal *)tryMap:(id (^)(id value, NSError **errorPtr))mapBlock { + NSCParameterAssert(mapBlock != NULL); + + return [[self flattenMap:^(id value) { + NSError *error = nil; + id mappedValue = mapBlock(value, &error); + return (mappedValue == nil ? [RACSignal error:error] : [RACSignal return:mappedValue]); + }] setNameWithFormat:@"[%@] -tryMap:", self.name]; +} + +- (RACSignal *)initially:(void (^)(void))block { + NSCParameterAssert(block != NULL); + + return [[RACSignal defer:^{ + block(); + return self; + }] setNameWithFormat:@"[%@] -initially:", self.name]; +} + +- (RACSignal *)finally:(void (^)(void))block { + NSCParameterAssert(block != NULL); + + return [[[self + doError:^(NSError *error) { + block(); + }] + doCompleted:^{ + block(); + }] + setNameWithFormat:@"[%@] -finally:", self.name]; +} + +- (RACSignal *)bufferWithTime:(NSTimeInterval)interval onScheduler:(RACScheduler *)scheduler { + NSCParameterAssert(scheduler != nil); + NSCParameterAssert(scheduler != RACScheduler.immediateScheduler); + + return [[RACSignal createSignal:^(id subscriber) { + RACSerialDisposable *timerDisposable = [[RACSerialDisposable alloc] init]; + NSMutableArray *values = [NSMutableArray array]; + + void (^flushValues)() = ^{ + @synchronized (values) { + [timerDisposable.disposable dispose]; + + if (values.count == 0) return; + + RACTuple *tuple = [RACTuple tupleWithObjectsFromArray:values convertNullsToNils:NO]; + [values removeAllObjects]; + [subscriber sendNext:tuple]; + } + }; + + RACDisposable *selfDisposable = [self subscribeNext:^(id x) { + @synchronized (values) { + if (values.count == 0) { + timerDisposable.disposable = [[[RACSignal + interval:interval onScheduler:scheduler] + take:1] + subscribeNext:^(id _) { + flushValues(); + }]; + } + + [values addObject:x]; + } + } error:^(NSError *error) { + [subscriber sendError:error]; + } completed:^{ + flushValues(); + [subscriber sendCompleted]; + }]; + + return [RACDisposable disposableWithBlock:^{ + [selfDisposable dispose]; + [timerDisposable dispose]; + }]; + }] setNameWithFormat:@"[%@] -bufferWithTime: %f", self.name, (double)interval]; +} + +- (RACSignal *)collect { + return [[self aggregateWithStartFactory:^{ + return [[NSMutableArray alloc] init]; + } reduce:^(NSMutableArray *collectedValues, id x) { + [collectedValues addObject:(x ?: NSNull.null)]; + return collectedValues; + }] setNameWithFormat:@"[%@] -collect", self.name]; +} + +- (RACSignal *)takeLast:(NSUInteger)count { + return [[RACSignal createSignal:^(id subscriber) { + NSMutableArray *valuesTaken = [NSMutableArray arrayWithCapacity:count]; + return [self subscribeNext:^(id x) { + [valuesTaken addObject:x ? : [RACTupleNil tupleNil]]; + + while(valuesTaken.count > count) { + [valuesTaken removeObjectAtIndex:0]; + } + } error:^(NSError *error) { + [subscriber sendError:error]; + } completed:^{ + for(id value in valuesTaken) { + [subscriber sendNext:[value isKindOfClass:[RACTupleNil class]] ? nil : value]; + } + + [subscriber sendCompleted]; + }]; + }] setNameWithFormat:@"[%@] -takeLast: %lu", self.name, (unsigned long)count]; +} + +- (RACSignal *)combineLatestWith:(RACSignal *)signal { + NSCParameterAssert(signal != nil); + + return [[RACSignal createSignal:^(id subscriber) { + RACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable]; + + __block id lastSelfValue = nil; + __block BOOL selfCompleted = NO; + + __block id lastOtherValue = nil; + __block BOOL otherCompleted = NO; + + void (^sendNext)(void) = ^{ + @synchronized (disposable) { + if (lastSelfValue == nil || lastOtherValue == nil) return; + [subscriber sendNext:[RACTuple tupleWithObjects:lastSelfValue, lastOtherValue, nil]]; + } + }; + + RACDisposable *selfDisposable = [self subscribeNext:^(id x) { + @synchronized (disposable) { + lastSelfValue = x ?: RACTupleNil.tupleNil; + sendNext(); + } + } error:^(NSError *error) { + [subscriber sendError:error]; + } completed:^{ + @synchronized (disposable) { + selfCompleted = YES; + if (otherCompleted) [subscriber sendCompleted]; + } + }]; + + [disposable addDisposable:selfDisposable]; + + RACDisposable *otherDisposable = [signal subscribeNext:^(id x) { + @synchronized (disposable) { + lastOtherValue = x ?: RACTupleNil.tupleNil; + sendNext(); + } + } error:^(NSError *error) { + [subscriber sendError:error]; + } completed:^{ + @synchronized (disposable) { + otherCompleted = YES; + if (selfCompleted) [subscriber sendCompleted]; + } + }]; + + [disposable addDisposable:otherDisposable]; + + return disposable; + }] setNameWithFormat:@"[%@] -combineLatestWith: %@", self.name, signal]; +} + ++ (RACSignal *)combineLatest:(id)signals { + return [[self join:signals block:^(RACSignal *left, RACSignal *right) { + return [left combineLatestWith:right]; + }] setNameWithFormat:@"+combineLatest: %@", signals]; +} + ++ (RACSignal *)combineLatest:(id)signals reduce:(id (^)())reduceBlock { + NSCParameterAssert(reduceBlock != nil); + + RACSignal *result = [self combineLatest:signals]; + + // Although we assert this condition above, older versions of this method + // supported this argument being nil. Avoid crashing Release builds of + // apps that depended on that. + if (reduceBlock != nil) result = [result reduceEach:reduceBlock]; + + return [result setNameWithFormat:@"+combineLatest: %@ reduce:", signals]; +} + ++ (RACSignal *)merge:(id)signals { + NSMutableArray *copiedSignals = [[NSMutableArray alloc] init]; + for (RACSignal *signal in signals) { + [copiedSignals addObject:signal]; + } + + return [[[RACSignal + createSignal:^ RACDisposable * (id subscriber) { + for (RACSignal *signal in copiedSignals) { + [subscriber sendNext:signal]; + } + + [subscriber sendCompleted]; + return nil; + }] + flatten] + setNameWithFormat:@"+merge: %@", copiedSignals]; +} + +- (RACSignal *)flatten:(NSUInteger)maxConcurrent { + return [[RACSignal createSignal:^(id subscriber) { + RACCompoundDisposable *compoundDisposable = [RACCompoundDisposable compoundDisposable]; + NSMutableSet *activeSignals = [NSMutableSet setWithObject:self]; + NSMutableArray *queuedSignals = [NSMutableArray array]; + + // Marks the given signal as completed. + // + // This block should only be accessed while synchronized on + // `compoundDisposable`. + __block void (^completeSignal)(RACSignal *) = nil; + + // Returns whether the signal should complete. + BOOL (^dequeueAndSubscribeIfAllowed)(void) = ^{ + RACSignal *signal; + @synchronized (compoundDisposable) { + BOOL completed = activeSignals.count < 1 && queuedSignals.count < 1; + if (completed) return YES; + + // We add one to maxConcurrent since self is an active + // signal at the start and we don't want that to count + // against the max. + NSUInteger maxIncludingSelf = maxConcurrent + ([activeSignals containsObject:self] ? 1 : 0); + if (activeSignals.count >= maxIncludingSelf && maxConcurrent != 0) return NO; + + if (queuedSignals.count < 1) return NO; + + signal = queuedSignals[0]; + [queuedSignals removeObjectAtIndex:0]; + + [activeSignals addObject:signal]; + } + + __block RACDisposable *disposable = [signal subscribeNext:^(id x) { + [subscriber sendNext:x]; + } error:^(NSError *error) { + [subscriber sendError:error]; + [compoundDisposable removeDisposable:disposable]; + } completed:^{ + @synchronized (compoundDisposable) { + completeSignal(signal); + } + + [compoundDisposable removeDisposable:disposable]; + }]; + + [compoundDisposable addDisposable:disposable]; + return NO; + }; + + completeSignal = ^(RACSignal *signal) { + [activeSignals removeObject:signal]; + + BOOL completed = dequeueAndSubscribeIfAllowed(); + if (completed) { + [subscriber sendCompleted]; + } + }; + + [compoundDisposable addDisposable:[RACDisposable disposableWithBlock:^{ + @synchronized (compoundDisposable) { + completeSignal = ^(RACSignal *signal) { + // Do nothing. We're just replacing this block to break the + // retain cycle. + }; + } + }]]; + + RACDisposable *disposable = [self subscribeNext:^(id x) { + NSCAssert([x isKindOfClass:RACSignal.class], @"The source must be a signal of signals. Instead, got %@", x); + + RACSignal *innerSignal = x; + @synchronized (compoundDisposable) { + [queuedSignals addObject:innerSignal]; + } + + dequeueAndSubscribeIfAllowed(); + } error:^(NSError *error) { + [subscriber sendError:error]; + } completed:^{ + @synchronized (compoundDisposable) { + completeSignal(self); + } + }]; + + [compoundDisposable addDisposable:disposable]; + return compoundDisposable; + }] setNameWithFormat:@"[%@] -flatten: %lu", self.name, (unsigned long)maxConcurrent]; +} + +- (RACSignal *)then:(RACSignal * (^)(void))block { + NSCParameterAssert(block != nil); + + return [[[self + ignoreValues] + concat:[RACSignal defer:block]] + setNameWithFormat:@"[%@] -then:", self.name]; +} + +- (RACSignal *)concat { + return [[self flatten:1] setNameWithFormat:@"[%@] -concat", self.name]; +} + +- (RACSignal *)aggregateWithStartFactory:(id (^)(void))startFactory reduce:(id (^)(id running, id next))reduceBlock { + NSCParameterAssert(startFactory != NULL); + NSCParameterAssert(reduceBlock != NULL); + + return [[RACSignal createSignal:^(id subscriber) { + __block id runningValue = startFactory(); + return [self subscribeNext:^(id x) { + runningValue = reduceBlock(runningValue, x); + } error:^(NSError *error) { + [subscriber sendError:error]; + } completed:^{ + [subscriber sendNext:runningValue]; + [subscriber sendCompleted]; + }]; + }] setNameWithFormat:@"[%@] -aggregateWithStartFactory:reduce:", self.name]; +} + +- (RACSignal *)aggregateWithStart:(id)start reduce:(id (^)(id running, id next))reduceBlock { + RACSignal *signal = [self aggregateWithStartFactory:^{ + return start; + } reduce:reduceBlock]; + + return [signal setNameWithFormat:@"[%@] -aggregateWithStart: %@ reduce:", self.name, [start rac_description]]; +} + +- (RACDisposable *)setKeyPath:(NSString *)keyPath onObject:(NSObject *)object { + return [self setKeyPath:keyPath onObject:object nilValue:nil]; +} + +- (RACDisposable *)setKeyPath:(NSString *)keyPath onObject:(NSObject *)object nilValue:(id)nilValue { + NSCParameterAssert(keyPath != nil); + NSCParameterAssert(object != nil); + + keyPath = [keyPath copy]; + + RACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable]; + + // Purposely not retaining 'object', since we want to tear down the binding + // when it deallocates normally. + __block void * volatile objectPtr = (__bridge void *)object; + + RACDisposable *subscriptionDisposable = [self subscribeNext:^(id x) { + NSObject *object = (__bridge id)objectPtr; + [object setValue:x ?: nilValue forKeyPath:keyPath]; + } error:^(NSError *error) { + NSObject *object = (__bridge id)objectPtr; + + NSCAssert(NO, @"Received error from %@ in binding for key path \"%@\" on %@: %@", self, keyPath, object, error); + + // Log the error if we're running with assertions disabled. + NSLog(@"Received error from %@ in binding for key path \"%@\" on %@: %@", self, keyPath, object, error); + + [disposable dispose]; + } completed:^{ + [disposable dispose]; + }]; + + [disposable addDisposable:subscriptionDisposable]; + + #if DEBUG + static void *bindingsKey = &bindingsKey; + NSMutableDictionary *bindings; + + @synchronized (object) { + bindings = objc_getAssociatedObject(object, bindingsKey); + if (bindings == nil) { + bindings = [NSMutableDictionary dictionary]; + objc_setAssociatedObject(object, bindingsKey, bindings, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + } + } + + @synchronized (bindings) { + NSCAssert(bindings[keyPath] == nil, @"Signal %@ is already bound to key path \"%@\" on object %@, adding signal %@ is undefined behavior", [bindings[keyPath] nonretainedObjectValue], keyPath, object, self); + + bindings[keyPath] = [NSValue valueWithNonretainedObject:self]; + } + #endif + + RACDisposable *clearPointerDisposable = [RACDisposable disposableWithBlock:^{ + #if DEBUG + @synchronized (bindings) { + [bindings removeObjectForKey:keyPath]; + } + #endif + + while (YES) { + void *ptr = objectPtr; + if (OSAtomicCompareAndSwapPtrBarrier(ptr, NULL, &objectPtr)) { + break; + } + } + }]; + + [disposable addDisposable:clearPointerDisposable]; + + [object.rac_deallocDisposable addDisposable:disposable]; + + RACCompoundDisposable *objectDisposable = object.rac_deallocDisposable; + return [RACDisposable disposableWithBlock:^{ + [objectDisposable removeDisposable:disposable]; + [disposable dispose]; + }]; +} + ++ (RACSignal *)interval:(NSTimeInterval)interval onScheduler:(RACScheduler *)scheduler { + return [[RACSignal interval:interval onScheduler:scheduler withLeeway:0.0] setNameWithFormat:@"+interval: %f onScheduler: %@", (double)interval, scheduler]; +} + ++ (RACSignal *)interval:(NSTimeInterval)interval onScheduler:(RACScheduler *)scheduler withLeeway:(NSTimeInterval)leeway { + NSCParameterAssert(scheduler != nil); + NSCParameterAssert(scheduler != RACScheduler.immediateScheduler); + + return [[RACSignal createSignal:^(id subscriber) { + return [scheduler after:[NSDate dateWithTimeIntervalSinceNow:interval] repeatingEvery:interval withLeeway:leeway schedule:^{ + [subscriber sendNext:[NSDate date]]; + }]; + }] setNameWithFormat:@"+interval: %f onScheduler: %@ withLeeway: %f", (double)interval, scheduler, (double)leeway]; +} + +- (RACSignal *)takeUntil:(RACSignal *)signalTrigger { + return [[RACSignal createSignal:^(id subscriber) { + RACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable]; + void (^triggerCompletion)(void) = ^{ + [disposable dispose]; + [subscriber sendCompleted]; + }; + + RACDisposable *triggerDisposable = [signalTrigger subscribeNext:^(id _) { + triggerCompletion(); + } completed:^{ + triggerCompletion(); + }]; + + [disposable addDisposable:triggerDisposable]; + + RACDisposable *selfDisposable = [self subscribeNext:^(id x) { + [subscriber sendNext:x]; + } error:^(NSError *error) { + [subscriber sendError:error]; + } completed:^{ + [disposable dispose]; + [subscriber sendCompleted]; + }]; + + [disposable addDisposable:selfDisposable]; + + return disposable; + }] setNameWithFormat:@"[%@] -takeUntil: %@", self.name, signalTrigger]; +} + +- (RACSignal *)switchToLatest { + return [[RACSignal createSignal:^(id subscriber) { + RACMulticastConnection *connection = [self publish]; + + RACDisposable *subscriptionDisposable = [[connection.signal + flattenMap:^(RACSignal *x) { + if (x == nil) return [RACSignal empty]; + + NSCAssert([x isKindOfClass:RACSignal.class], @"-switchToLatest requires that the source signal (%@) send signals. Instead we got: %@", self, x); + + // -concat:[RACSignal never] prevents completion of the receiver from + // prematurely terminating the inner signal. + return [x takeUntil:[connection.signal concat:[RACSignal never]]]; + }] + subscribe:subscriber]; + + RACDisposable *connectionDisposable = [connection connect]; + return [RACDisposable disposableWithBlock:^{ + [subscriptionDisposable dispose]; + [connectionDisposable dispose]; + }]; + }] setNameWithFormat:@"[%@] -switchToLatest", self.name]; +} + ++ (RACSignal *)switch:(RACSignal *)signal cases:(NSDictionary *)cases default:(RACSignal *)defaultSignal { + NSCParameterAssert(signal != nil); + NSCParameterAssert(cases != nil); + + for (id key in cases) { + id value __attribute__((unused)) = cases[key]; + NSCAssert([value isKindOfClass:RACSignal.class], @"Expected all cases to be RACSignals, %@ isn't", value); + } + + NSDictionary *copy = [cases copy]; + + return [[[signal + map:^(id key) { + if (key == nil) key = RACTupleNil.tupleNil; + + RACSignal *signal = copy[key] ?: defaultSignal; + if (signal == nil) { + NSString *description = [NSString stringWithFormat:NSLocalizedString(@"No matching signal found for value %@", @""), key]; + return [RACSignal error:[NSError errorWithDomain:RACSignalErrorDomain code:RACSignalErrorNoMatchingCase userInfo:@{ NSLocalizedDescriptionKey: description }]]; + } + + return signal; + }] + switchToLatest] + setNameWithFormat:@"+switch: %@ cases: %@ default: %@", signal, cases, defaultSignal]; +} + ++ (RACSignal *)if:(RACSignal *)boolSignal then:(RACSignal *)trueSignal else:(RACSignal *)falseSignal { + NSCParameterAssert(boolSignal != nil); + NSCParameterAssert(trueSignal != nil); + NSCParameterAssert(falseSignal != nil); + + return [[[boolSignal + map:^(NSNumber *value) { + NSCAssert([value isKindOfClass:NSNumber.class], @"Expected %@ to send BOOLs, not %@", boolSignal, value); + + return (value.boolValue ? trueSignal : falseSignal); + }] + switchToLatest] + setNameWithFormat:@"+if: %@ then: %@ else: %@", boolSignal, trueSignal, falseSignal]; +} + +- (id)first { + return [self firstOrDefault:nil]; +} + +- (id)firstOrDefault:(id)defaultValue { + return [self firstOrDefault:defaultValue success:NULL error:NULL]; +} + +- (id)firstOrDefault:(id)defaultValue success:(BOOL *)success error:(NSError **)error { + NSCondition *condition = [[NSCondition alloc] init]; + condition.name = [NSString stringWithFormat:@"[%@] -firstOrDefault: %@ success:error:", self.name, defaultValue]; + + __block id value = defaultValue; + __block BOOL done = NO; + + // Ensures that we don't pass values across thread boundaries by reference. + __block NSError *localError; + __block BOOL localSuccess; + + [[self take:1] subscribeNext:^(id x) { + [condition lock]; + + value = x; + localSuccess = YES; + + done = YES; + [condition broadcast]; + [condition unlock]; + } error:^(NSError *e) { + [condition lock]; + + if (!done) { + localSuccess = NO; + localError = e; + + done = YES; + [condition broadcast]; + } + + [condition unlock]; + } completed:^{ + [condition lock]; + + localSuccess = YES; + + done = YES; + [condition broadcast]; + [condition unlock]; + }]; + + [condition lock]; + while (!done) { + [condition wait]; + } + + if (success != NULL) *success = localSuccess; + if (error != NULL) *error = localError; + + [condition unlock]; + return value; +} + +- (BOOL)waitUntilCompleted:(NSError **)error { + BOOL success = NO; + + [[[self + ignoreValues] + setNameWithFormat:@"[%@] -waitUntilCompleted:", self.name] + firstOrDefault:nil success:&success error:error]; + + return success; +} + ++ (RACSignal *)defer:(RACSignal * (^)(void))block { + NSCParameterAssert(block != NULL); + + return [[RACSignal createSignal:^(id subscriber) { + return [block() subscribe:subscriber]; + }] setNameWithFormat:@"+defer:"]; +} + +- (NSArray *)toArray { + return [[[self collect] first] copy]; +} + +- (RACSequence *)sequence { + return [[RACSignalSequence sequenceWithSignal:self] setNameWithFormat:@"[%@] -sequence", self.name]; +} + +- (RACMulticastConnection *)publish { + RACSubject *subject = [[RACSubject subject] setNameWithFormat:@"[%@] -publish", self.name]; + RACMulticastConnection *connection = [self multicast:subject]; + return connection; +} + +- (RACMulticastConnection *)multicast:(RACSubject *)subject { + [subject setNameWithFormat:@"[%@] -multicast: %@", self.name, subject.name]; + RACMulticastConnection *connection = [[RACMulticastConnection alloc] initWithSourceSignal:self subject:subject]; + return connection; +} + +- (RACSignal *)replay { + RACReplaySubject *subject = [[RACReplaySubject subject] setNameWithFormat:@"[%@] -replay", self.name]; + + RACMulticastConnection *connection = [self multicast:subject]; + [connection connect]; + + return connection.signal; +} + +- (RACSignal *)replayLast { + RACReplaySubject *subject = [[RACReplaySubject replaySubjectWithCapacity:1] setNameWithFormat:@"[%@] -replayLast", self.name]; + + RACMulticastConnection *connection = [self multicast:subject]; + [connection connect]; + + return connection.signal; +} + +- (RACSignal *)replayLazily { + RACMulticastConnection *connection = [self multicast:[RACReplaySubject subject]]; + return [[RACSignal + defer:^{ + [connection connect]; + return connection.signal; + }] + setNameWithFormat:@"[%@] -replayLazily", self.name]; +} + +- (RACSignal *)timeout:(NSTimeInterval)interval onScheduler:(RACScheduler *)scheduler { + NSCParameterAssert(scheduler != nil); + NSCParameterAssert(scheduler != RACScheduler.immediateScheduler); + + return [[RACSignal createSignal:^(id subscriber) { + RACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable]; + + RACDisposable *timeoutDisposable = [[[RACSignal + interval:interval onScheduler:scheduler] + take:1] + subscribeNext:^(id _) { + [disposable dispose]; + [subscriber sendError:[NSError errorWithDomain:RACSignalErrorDomain code:RACSignalErrorTimedOut userInfo:nil]]; + }]; + + [disposable addDisposable:timeoutDisposable]; + + RACDisposable *subscriptionDisposable = [self subscribeNext:^(id x) { + [subscriber sendNext:x]; + } error:^(NSError *error) { + [disposable dispose]; + [subscriber sendError:error]; + } completed:^{ + [disposable dispose]; + [subscriber sendCompleted]; + }]; + + [disposable addDisposable:subscriptionDisposable]; + return disposable; + }] setNameWithFormat:@"[%@] -timeout: %f", self.name, (double)interval]; +} + +- (RACSignal *)deliverOn:(RACScheduler *)scheduler { + return [[RACSignal createSignal:^(id subscriber) { + return [self subscribeNext:^(id x) { + [scheduler schedule:^{ + [subscriber sendNext:x]; + }]; + } error:^(NSError *error) { + [scheduler schedule:^{ + [subscriber sendError:error]; + }]; + } completed:^{ + [scheduler schedule:^{ + [subscriber sendCompleted]; + }]; + }]; + }] setNameWithFormat:@"[%@] -deliverOn: %@", self.name, scheduler]; +} + +- (RACSignal *)subscribeOn:(RACScheduler *)scheduler { + return [[RACSignal createSignal:^(id subscriber) { + RACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable]; + + RACDisposable *schedulingDisposable = [scheduler schedule:^{ + RACDisposable *subscriptionDisposable = [self subscribeNext:^(id x) { + [subscriber sendNext:x]; + } error:^(NSError *error) { + [subscriber sendError:error]; + } completed:^{ + [subscriber sendCompleted]; + }]; + + [disposable addDisposable:subscriptionDisposable]; + }]; + + [disposable addDisposable:schedulingDisposable]; + return disposable; + }] setNameWithFormat:@"[%@] -subscribeOn: %@", self.name, scheduler]; +} + +- (RACSignal *)groupBy:(id (^)(id object))keyBlock transform:(id (^)(id object))transformBlock { + NSCParameterAssert(keyBlock != NULL); + + return [[RACSignal createSignal:^(id subscriber) { + NSMutableDictionary *groups = [NSMutableDictionary dictionary]; + + return [self subscribeNext:^(id x) { + id key = keyBlock(x); + RACGroupedSignal *groupSubject = nil; + @synchronized(groups) { + groupSubject = [groups objectForKey:key]; + if(groupSubject == nil) { + groupSubject = [RACGroupedSignal signalWithKey:key]; + [groups setObject:groupSubject forKey:key]; + [subscriber sendNext:groupSubject]; + } + } + + [groupSubject sendNext:transformBlock != NULL ? transformBlock(x) : x]; + } error:^(NSError *error) { + [subscriber sendError:error]; + + [groups.allValues makeObjectsPerformSelector:@selector(sendError:) withObject:error]; + } completed:^{ + [subscriber sendCompleted]; + + [groups.allValues makeObjectsPerformSelector:@selector(sendCompleted)]; + }]; + }] setNameWithFormat:@"[%@] -groupBy:transform:", self.name]; +} + +- (RACSignal *)groupBy:(id (^)(id object))keyBlock { + return [[self groupBy:keyBlock transform:nil] setNameWithFormat:@"[%@] -groupBy:", self.name]; +} + +- (RACSignal *)any { + return [[self any:^(id x) { + return YES; + }] setNameWithFormat:@"[%@] -any", self.name]; +} + +- (RACSignal *)any:(BOOL (^)(id object))predicateBlock { + NSCParameterAssert(predicateBlock != NULL); + + return [[[self materialize] bind:^{ + return ^(RACEvent *event, BOOL *stop) { + if (event.finished) { + *stop = YES; + return [RACSignal return:@NO]; + } + + if (predicateBlock(event.value)) { + *stop = YES; + return [RACSignal return:@YES]; + } + + return [RACSignal empty]; + }; + }] setNameWithFormat:@"[%@] -any:", self.name]; +} + +- (RACSignal *)all:(BOOL (^)(id object))predicateBlock { + NSCParameterAssert(predicateBlock != NULL); + + return [[[self materialize] bind:^{ + return ^(RACEvent *event, BOOL *stop) { + if (event.eventType == RACEventTypeCompleted) { + *stop = YES; + return [RACSignal return:@YES]; + } + + if (event.eventType == RACEventTypeError || !predicateBlock(event.value)) { + *stop = YES; + return [RACSignal return:@NO]; + } + + return [RACSignal empty]; + }; + }] setNameWithFormat:@"[%@] -all:", self.name]; +} + +- (RACSignal *)retry:(NSInteger)retryCount { + return [[RACSignal createSignal:^(id subscriber) { + __block NSInteger currentRetryCount = 0; + return subscribeForever(self, + ^(id x) { + [subscriber sendNext:x]; + }, + ^(NSError *error, RACDisposable *disposable) { + if (retryCount == 0 || currentRetryCount < retryCount) { + // Resubscribe. + currentRetryCount++; + return; + } + + [disposable dispose]; + [subscriber sendError:error]; + }, + ^(RACDisposable *disposable) { + [disposable dispose]; + [subscriber sendCompleted]; + }); + }] setNameWithFormat:@"[%@] -retry: %lu", self.name, (unsigned long)retryCount]; +} + +- (RACSignal *)retry { + return [[self retry:0] setNameWithFormat:@"[%@] -retry", self.name]; +} + +- (RACSignal *)sample:(RACSignal *)sampler { + NSCParameterAssert(sampler != nil); + + return [[RACSignal createSignal:^(id subscriber) { + NSLock *lock = [[NSLock alloc] init]; + __block id lastValue; + __block BOOL hasValue = NO; + + RACSerialDisposable *samplerDisposable = [[RACSerialDisposable alloc] init]; + RACDisposable *sourceDisposable = [self subscribeNext:^(id x) { + [lock lock]; + hasValue = YES; + lastValue = x; + [lock unlock]; + } error:^(NSError *error) { + [samplerDisposable dispose]; + [subscriber sendError:error]; + } completed:^{ + [samplerDisposable dispose]; + [subscriber sendCompleted]; + }]; + + samplerDisposable.disposable = [sampler subscribeNext:^(id _) { + BOOL shouldSend = NO; + id value; + [lock lock]; + shouldSend = hasValue; + value = lastValue; + [lock unlock]; + + if (shouldSend) { + [subscriber sendNext:value]; + } + } error:^(NSError *error) { + [sourceDisposable dispose]; + [subscriber sendError:error]; + } completed:^{ + [sourceDisposable dispose]; + [subscriber sendCompleted]; + }]; + + return [RACDisposable disposableWithBlock:^{ + [samplerDisposable dispose]; + [sourceDisposable dispose]; + }]; + }] setNameWithFormat:@"[%@] -sample: %@", self.name, sampler]; +} + +- (RACSignal *)ignoreValues { + return [[self filter:^(id _) { + return NO; + }] setNameWithFormat:@"[%@] -ignoreValues", self.name]; +} + +- (RACSignal *)materialize { + return [[RACSignal createSignal:^(id subscriber) { + return [self subscribeNext:^(id x) { + [subscriber sendNext:[RACEvent eventWithValue:x]]; + } error:^(NSError *error) { + [subscriber sendNext:[RACEvent eventWithError:error]]; + [subscriber sendCompleted]; + } completed:^{ + [subscriber sendNext:RACEvent.completedEvent]; + [subscriber sendCompleted]; + }]; + }] setNameWithFormat:@"[%@] -materialize", self.name]; +} + +- (RACSignal *)dematerialize { + return [[self bind:^{ + return ^(RACEvent *event, BOOL *stop) { + switch (event.eventType) { + case RACEventTypeCompleted: + *stop = YES; + return [RACSignal empty]; + + case RACEventTypeError: + *stop = YES; + return [RACSignal error:event.error]; + + case RACEventTypeNext: + return [RACSignal return:event.value]; + } + }; + }] setNameWithFormat:@"[%@] -dematerialize", self.name]; +} + +- (RACSignal *)not { + return [[self map:^(NSNumber *value) { + NSCAssert([value isKindOfClass:NSNumber.class], @"-not must only be used on a signal of NSNumbers. Instead, got: %@", value); + + return @(!value.boolValue); + }] setNameWithFormat:@"[%@] -not", self.name]; +} + +- (RACSignal *)and { + return [[self map:^(RACTuple *tuple) { + NSCAssert([tuple isKindOfClass:RACTuple.class], @"-and must only be used on a signal of RACTuples of NSNumbers. Instead, received: %@", tuple); + NSCAssert(tuple.count > 0, @"-and must only be used on a signal of RACTuples of NSNumbers, with at least 1 value in the tuple"); + + return @([tuple.rac_sequence all:^(NSNumber *number) { + NSCAssert([number isKindOfClass:NSNumber.class], @"-and must only be used on a signal of RACTuples of NSNumbers. Instead, tuple contains a non-NSNumber value: %@", tuple); + + return number.boolValue; + }]); + }] setNameWithFormat:@"[%@] -and", self.name]; +} + +- (RACSignal *)or { + return [[self map:^(RACTuple *tuple) { + NSCAssert([tuple isKindOfClass:RACTuple.class], @"-or must only be used on a signal of RACTuples of NSNumbers. Instead, received: %@", tuple); + NSCAssert(tuple.count > 0, @"-or must only be used on a signal of RACTuples of NSNumbers, with at least 1 value in the tuple"); + + return @([tuple.rac_sequence any:^(NSNumber *number) { + NSCAssert([number isKindOfClass:NSNumber.class], @"-or must only be used on a signal of RACTuples of NSNumbers. Instead, tuple contains a non-NSNumber value: %@", tuple); + + return number.boolValue; + }]); + }] setNameWithFormat:@"[%@] -or", self.name]; +} + +@end + +@implementation RACSignal (OperationsDeprecated) + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-implementations" + +- (RACSignal *)windowWithStart:(RACSignal *)openSignal close:(RACSignal * (^)(RACSignal *start))closeBlock { + NSCParameterAssert(openSignal != nil); + NSCParameterAssert(closeBlock != NULL); + + return [[RACSignal createSignal:^(id subscriber) { + __block RACSubject *currentWindow = nil; + __block RACSignal *currentCloseWindow = nil; + __block RACDisposable *closeObserverDisposable = NULL; + + void (^closeCurrentWindow)(void) = ^{ + [currentWindow sendCompleted]; + currentWindow = nil; + currentCloseWindow = nil; + [closeObserverDisposable dispose], closeObserverDisposable = nil; + }; + + RACDisposable *openObserverDisposable = [openSignal subscribe:[RACSubscriber subscriberWithNext:^(id x) { + if(currentWindow == nil) { + currentWindow = [RACSubject subject]; + [subscriber sendNext:currentWindow]; + + currentCloseWindow = closeBlock(currentWindow); + closeObserverDisposable = [currentCloseWindow subscribe:[RACSubscriber subscriberWithNext:^(id x) { + closeCurrentWindow(); + } error:^(NSError *error) { + closeCurrentWindow(); + } completed:^{ + closeCurrentWindow(); + }]]; + } + } error:^(NSError *error) { + + } completed:^{ + + }]]; + + RACDisposable *selfObserverDisposable = [self subscribeNext:^(id x) { + [currentWindow sendNext:x]; + } error:^(NSError *error) { + [subscriber sendError:error]; + } completed:^{ + [subscriber sendCompleted]; + }]; + + return [RACDisposable disposableWithBlock:^{ + [closeObserverDisposable dispose]; + [openObserverDisposable dispose]; + [selfObserverDisposable dispose]; + }]; + }] setNameWithFormat:@"[%@] -windowWithStart: %@ close:", self.name, openSignal]; +} + +- (RACSignal *)buffer:(NSUInteger)bufferCount { + NSCParameterAssert(bufferCount > 0); + return [[RACSignal createSignal:^(id subscriber) { + NSMutableArray *values = [NSMutableArray arrayWithCapacity:bufferCount]; + RACSubject *windowCloseSubject = [RACSubject subject]; + + RACDisposable *closeDisposable = [windowCloseSubject subscribeNext:^(id x) { + [subscriber sendNext:[RACTuple tupleWithObjectsFromArray:values convertNullsToNils:NO]]; + [values removeAllObjects]; + }]; + + __block RACDisposable *innerDisposable = nil; + RACDisposable *outerDisposable = [[self windowWithStart:self close:^(RACSignal *start) { + return windowCloseSubject; + }] subscribeNext:^(id x) { + innerDisposable = [x subscribeNext:^(id x) { + [values addObject:x ? : [RACTupleNil tupleNil]]; + if(values.count % bufferCount == 0) { + [windowCloseSubject sendNext:[RACUnit defaultUnit]]; + } + }]; + } error:^(NSError *error) { + [subscriber sendError:error]; + } completed:^{ + [subscriber sendCompleted]; + }]; + + return [RACDisposable disposableWithBlock:^{ + [innerDisposable dispose]; + [outerDisposable dispose]; + [closeDisposable dispose]; + }]; + }] setNameWithFormat:@"[%@] -buffer: %lu", self.name, (unsigned long)bufferCount]; +} + +- (RACSignal *)let:(RACSignal * (^)(RACSignal *sharedSignal))letBlock { + NSCParameterAssert(letBlock != NULL); + + return [[RACSignal createSignal:^(id subscriber) { + RACMulticastConnection *connection = [self publish]; + RACDisposable *finalDisposable = [letBlock(connection.signal) subscribeNext:^(id x) { + [subscriber sendNext:x]; + } error:^(NSError *error) { + [subscriber sendError:error]; + } completed:^{ + [subscriber sendCompleted]; + }]; + + RACDisposable *connectionDisposable = [connection connect]; + + return [RACDisposable disposableWithBlock:^{ + [connectionDisposable dispose]; + [finalDisposable dispose]; + }]; + }] setNameWithFormat:@"[%@] -let:", self.name]; +} + ++ (RACSignal *)interval:(NSTimeInterval)interval { + return [RACSignal interval:interval onScheduler:[RACScheduler schedulerWithPriority:RACSchedulerPriorityHigh]]; +} + ++ (RACSignal *)interval:(NSTimeInterval)interval withLeeway:(NSTimeInterval)leeway { + return [RACSignal interval:interval onScheduler:[RACScheduler schedulerWithPriority:RACSchedulerPriorityHigh] withLeeway:leeway]; +} + +- (RACSignal *)timeout:(NSTimeInterval)interval { + return [self timeout:interval onScheduler:[RACScheduler schedulerWithPriority:RACSchedulerPriorityHigh]]; +} + +- (RACSignal *)bufferWithTime:(NSTimeInterval)interval { + return [self bufferWithTime:interval onScheduler:[RACScheduler schedulerWithPriority:RACSchedulerPriorityHigh]]; +} + +- (RACDisposable *)toProperty:(NSString *)keyPath onObject:(NSObject *)object { + return [self setKeyPath:keyPath onObject:object]; +} + +- (RACSignal *)ignoreElements { + return [self ignoreValues]; +} + +- (RACSignal *)sequenceNext:(RACSignal * (^)(void))block { + return [self then:block]; +} + +- (RACSignal *)aggregateWithStart:(id)start combine:(id (^)(id running, id next))combineBlock { + return [self aggregateWithStart:start reduce:combineBlock]; +} + +- (RACSignal *)aggregateWithStartFactory:(id (^)(void))startFactory combine:(id (^)(id running, id next))combineBlock { + return [self aggregateWithStartFactory:startFactory reduce:combineBlock]; +} + +- (RACDisposable *)executeCommand:(RACCommand *)command { + NSCParameterAssert(command != nil); + + return [self subscribeNext:^(id x) { + [command execute:x]; + }]; +} + +#pragma clang diagnostic pop + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignal.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignal.h new file mode 100644 index 00000000..ed644cf0 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignal.h @@ -0,0 +1,219 @@ +// +// RACSignal.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 3/1/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import +#import "RACStream.h" + +@class RACDisposable; +@class RACScheduler; +@class RACSubject; +@protocol RACSubscriber; + +@interface RACSignal : RACStream + +/// Creates a new signal. This is the preferred way to create a new signal +/// operation or behavior. +/// +/// Events can be sent to new subscribers immediately in the `didSubscribe` +/// block, but the subscriber will not be able to dispose of the signal until +/// a RACDisposable is returned from `didSubscribe`. In the case of infinite +/// signals, this won't _ever_ happen if events are sent immediately. +/// +/// To ensure that the signal is disposable, events can be scheduled on the +/// +[RACScheduler currentScheduler] (so that they're deferred, not sent +/// immediately), or they can be sent in the background. The RACDisposable +/// returned by the `didSubscribe` block should cancel any such scheduling or +/// asynchronous work. +/// +/// didSubscribe - Called when the signal is subscribed to. The new subscriber is +/// passed in. You can then manually control the by +/// sending it -sendNext:, -sendError:, and -sendCompleted, +/// as defined by the operation you're implementing. This block +/// should return a RACDisposable which cancels any ongoing work +/// triggered by the subscription, and cleans up any resources or +/// disposables created as part of it. When the disposable is +/// disposed of, the signal must not send any more events to the +/// `subscriber`. If no cleanup is necessary, return nil. +/// +/// **Note:** The `didSubscribe` block is called every time a new subscriber +/// subscribes. Any side effects within the block will thus execute once for each +/// subscription, not necessarily on one thread, and possibly even +/// simultaneously! ++ (RACSignal *)createSignal:(RACDisposable * (^)(id subscriber))didSubscribe; + +/// Returns a signal that immediately sends the given error. ++ (RACSignal *)error:(NSError *)error; + +/// Returns a signal that never completes. ++ (RACSignal *)never; + +/// Immediately schedules the given block on the given scheduler. The block is +/// given a subscriber to which it can send events. +/// +/// scheduler - The scheduler on which `block` will be scheduled and results +/// delivered. Cannot be nil. +/// block - The block to invoke. Cannot be NULL. +/// +/// Returns a signal which will send all events sent on the subscriber given to +/// `block`. All events will be sent on `scheduler` and it will replay any missed +/// events to new subscribers. ++ (RACSignal *)startEagerlyWithScheduler:(RACScheduler *)scheduler block:(void (^)(id subscriber))block; + +/// Invokes the given block only on the first subscription. The block is given a +/// subscriber to which it can send events. +/// +/// Note that disposing of the subscription to the returned signal will *not* +/// dispose of the underlying subscription. If you need that behavior, see +/// -[RACMulticastConnection autoconnect]. The underlying subscription will never +/// be disposed of. Because of this, `block` should never return an infinite +/// signal since there would be no way of ending it. +/// +/// scheduler - The scheduler on which the block should be scheduled. Note that +/// if given +[RACScheduler immediateScheduler], the block will be +/// invoked synchronously on the first subscription. Cannot be nil. +/// block - The block to invoke on the first subscription. Cannot be NULL. +/// +/// Returns a signal which will pass through the events sent to the subscriber +/// given to `block` and replay any missed events to new subscribers. ++ (RACSignal *)startLazilyWithScheduler:(RACScheduler *)scheduler block:(void (^)(id subscriber))block; + +@end + +@interface RACSignal (RACStream) + +/// Returns a signal that immediately sends the given value and then completes. ++ (RACSignal *)return:(id)value; + +/// Returns a signal that immediately completes. ++ (RACSignal *)empty; + +/// Subscribes to `signal` when the source signal completes. +- (RACSignal *)concat:(RACSignal *)signal; + +/// Zips the values in the receiver with those of the given signal to create +/// RACTuples. +/// +/// The first `next` of each stream will be combined, then the second `next`, and +/// so forth, until either signal completes or errors. +/// +/// signal - The signal to zip with. This must not be `nil`. +/// +/// Returns a new signal of RACTuples, representing the combined values of the +/// two signals. Any error from one of the original signals will be forwarded on +/// the returned signal. +- (RACSignal *)zipWith:(RACSignal *)signal; + +@end + +@interface RACSignal (Subscription) + +/// Subscribes `subscriber` to changes on the receiver. The receiver defines which +/// events it actually sends and in what situations the events are sent. +/// +/// Subscription will always happen on a valid RACScheduler. If the +/// +[RACScheduler currentScheduler] cannot be determined at the time of +/// subscription (e.g., because the calling code is running on a GCD queue or +/// NSOperationQueue), subscription will occur on a private background scheduler. +/// On the main thread, subscriptions will always occur immediately, with a +/// +[RACScheduler currentScheduler] of +[RACScheduler mainThreadScheduler]. +/// +/// This method must be overridden by any subclasses. +/// +/// Returns nil or a disposable. You can call -[RACDisposable dispose] if you +/// need to end your subscription before it would "naturally" end, either by +/// completing or erroring. Once the disposable has been disposed, the subscriber +/// won't receive any more events from the subscription. +- (RACDisposable *)subscribe:(id)subscriber; + +/// Convenience method to subscribe to the `next` event. +/// +/// This corresponds to `IObserver.OnNext` in Rx. +- (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock; + +/// Convenience method to subscribe to the `next` and `completed` events. +- (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock completed:(void (^)(void))completedBlock; + +/// Convenience method to subscribe to the `next`, `completed`, and `error` events. +- (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock error:(void (^)(NSError *error))errorBlock completed:(void (^)(void))completedBlock; + +/// Convenience method to subscribe to `error` events. +/// +/// This corresponds to the `IObserver.OnError` in Rx. +- (RACDisposable *)subscribeError:(void (^)(NSError *error))errorBlock; + +/// Convenience method to subscribe to `completed` events. +/// +/// This corresponds to the `IObserver.OnCompleted` in Rx. +- (RACDisposable *)subscribeCompleted:(void (^)(void))completedBlock; + +/// Convenience method to subscribe to `next` and `error` events. +- (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock error:(void (^)(NSError *error))errorBlock; + +/// Convenience method to subscribe to `error` and `completed` events. +- (RACDisposable *)subscribeError:(void (^)(NSError *error))errorBlock completed:(void (^)(void))completedBlock; + +@end + +/// Additional methods to assist with debugging. +@interface RACSignal (Debugging) + +/// Logs all events that the receiver sends. +- (RACSignal *)logAll; + +/// Logs each `next` that the receiver sends. +- (RACSignal *)logNext; + +/// Logs any error that the receiver sends. +- (RACSignal *)logError; + +/// Logs any `completed` event that the receiver sends. +- (RACSignal *)logCompleted; + +@end + +/// Additional methods to assist with unit testing. +/// +/// **These methods should never ship in production code.** +@interface RACSignal (Testing) + +/// Spins the main run loop for a short while, waiting for the receiver to send a `next`. +/// +/// **Because this method executes the run loop recursively, it should only be used +/// on the main thread, and only from a unit test.** +/// +/// defaultValue - Returned if the receiver completes or errors before sending +/// a `next`, or if the method times out. This argument may be +/// nil. +/// success - If not NULL, set to whether the receiver completed +/// successfully. +/// error - If not NULL, set to any error that occurred. +/// +/// Returns the first value received, or `defaultValue` if no value is received +/// before the signal finishes or the method times out. +- (id)asynchronousFirstOrDefault:(id)defaultValue success:(BOOL *)success error:(NSError **)error; + +/// Spins the main run loop for a short while, waiting for the receiver to complete. +/// +/// **Because this method executes the run loop recursively, it should only be used +/// on the main thread, and only from a unit test.** +/// +/// error - If not NULL, set to any error that occurs. +/// +/// Returns whether the signal completed successfully before timing out. If NO, +/// `error` will be set to any error that occurred. +- (BOOL)asynchronouslyWaitUntilCompleted:(NSError **)error; + +@end + +@interface RACSignal (Deprecated) + ++ (RACSignal *)start:(id (^)(BOOL *success, NSError **error))block __attribute__((deprecated("Use +startEagerlyWithScheduler:block: instead"))); ++ (RACSignal *)startWithScheduler:(RACScheduler *)scheduler subjectBlock:(void (^)(RACSubject *subject))block __attribute__((deprecated("Use +startEagerlyWithScheduler:block: instead"))); ++ (RACSignal *)startWithScheduler:(RACScheduler *)scheduler block:(id (^)(BOOL *success, NSError **error))block __attribute__((deprecated("Use +startEagerlyWithScheduler:block: instead"))); + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignal.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignal.m new file mode 100644 index 00000000..69d9700c --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignal.m @@ -0,0 +1,447 @@ +// +// RACSignal.m +// ReactiveCocoa +// +// Created by Josh Abernathy on 3/15/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACSignal.h" +#import "RACCompoundDisposable.h" +#import "RACDisposable.h" +#import "RACDynamicSignal.h" +#import "RACEmptySignal.h" +#import "RACErrorSignal.h" +#import "RACMulticastConnection.h" +#import "RACReplaySubject.h" +#import "RACReturnSignal.h" +#import "RACScheduler.h" +#import "RACSerialDisposable.h" +#import "RACSignal+Operations.h" +#import "RACSubject.h" +#import "RACSubscriber+Private.h" +#import "RACTuple.h" + +@implementation RACSignal + +#pragma mark Lifecycle + ++ (RACSignal *)createSignal:(RACDisposable * (^)(id subscriber))didSubscribe { + return [RACDynamicSignal createSignal:didSubscribe]; +} + ++ (RACSignal *)error:(NSError *)error { + return [RACErrorSignal error:error]; +} + ++ (RACSignal *)never { + return [[self createSignal:^ RACDisposable * (id subscriber) { + return nil; + }] setNameWithFormat:@"+never"]; +} + ++ (RACSignal *)startEagerlyWithScheduler:(RACScheduler *)scheduler block:(void (^)(id subscriber))block { + NSCParameterAssert(scheduler != nil); + NSCParameterAssert(block != NULL); + + RACSignal *signal = [self startLazilyWithScheduler:scheduler block:block]; + // Subscribe to force the lazy signal to call its block. + [[signal publish] connect]; + return [signal setNameWithFormat:@"+startEagerlyWithScheduler:%@ block:", scheduler]; +} + ++ (RACSignal *)startLazilyWithScheduler:(RACScheduler *)scheduler block:(void (^)(id subscriber))block { + NSCParameterAssert(scheduler != nil); + NSCParameterAssert(block != NULL); + + RACMulticastConnection *connection = [[RACSignal + createSignal:^ id (id subscriber) { + block(subscriber); + return nil; + }] + multicast:[RACReplaySubject subject]]; + + return [[[RACSignal + createSignal:^ id (id subscriber) { + [connection.signal subscribe:subscriber]; + [connection connect]; + return nil; + }] + subscribeOn:scheduler] + setNameWithFormat:@"+startLazilyWithScheduler:%@ block:", scheduler]; +} + +#pragma mark NSObject + +- (NSString *)description { + return [NSString stringWithFormat:@"<%@: %p> name: %@", self.class, self, self.name]; +} + +@end + +@implementation RACSignal (RACStream) + ++ (RACSignal *)empty { + return [RACEmptySignal empty]; +} + ++ (RACSignal *)return:(id)value { + return [RACReturnSignal return:value]; +} + +- (RACSignal *)bind:(RACStreamBindBlock (^)(void))block { + NSCParameterAssert(block != NULL); + + /* + * -bind: should: + * + * 1. Subscribe to the original signal of values. + * 2. Any time the original signal sends a value, transform it using the binding block. + * 3. If the binding block returns a signal, subscribe to it, and pass all of its values through to the subscriber as they're received. + * 4. If the binding block asks the bind to terminate, complete the _original_ signal. + * 5. When _all_ signals complete, send completed to the subscriber. + * + * If any signal sends an error at any point, send that to the subscriber. + */ + + return [[RACSignal createSignal:^(id subscriber) { + RACStreamBindBlock bindingBlock = block(); + + NSMutableArray *signals = [NSMutableArray arrayWithObject:self]; + + RACCompoundDisposable *compoundDisposable = [RACCompoundDisposable compoundDisposable]; + + void (^completeSignal)(RACSignal *, RACDisposable *) = ^(RACSignal *signal, RACDisposable *finishedDisposable) { + BOOL removeDisposable = NO; + + @synchronized (signals) { + [signals removeObject:signal]; + + if (signals.count == 0) { + [subscriber sendCompleted]; + [compoundDisposable dispose]; + } else { + removeDisposable = YES; + } + } + + if (removeDisposable) [compoundDisposable removeDisposable:finishedDisposable]; + }; + + void (^addSignal)(RACSignal *) = ^(RACSignal *signal) { + @synchronized (signals) { + [signals addObject:signal]; + } + + RACSerialDisposable *selfDisposable = [[RACSerialDisposable alloc] init]; + [compoundDisposable addDisposable:selfDisposable]; + + RACDisposable *disposable = [signal subscribeNext:^(id x) { + [subscriber sendNext:x]; + } error:^(NSError *error) { + [compoundDisposable dispose]; + [subscriber sendError:error]; + } completed:^{ + @autoreleasepool { + completeSignal(signal, selfDisposable); + } + }]; + + selfDisposable.disposable = disposable; + }; + + @autoreleasepool { + RACSerialDisposable *selfDisposable = [[RACSerialDisposable alloc] init]; + [compoundDisposable addDisposable:selfDisposable]; + + RACDisposable *bindingDisposable = [self subscribeNext:^(id x) { + BOOL stop = NO; + id signal = bindingBlock(x, &stop); + + @autoreleasepool { + if (signal != nil) addSignal(signal); + if (signal == nil || stop) { + [selfDisposable dispose]; + completeSignal(self, selfDisposable); + } + } + } error:^(NSError *error) { + [compoundDisposable dispose]; + [subscriber sendError:error]; + } completed:^{ + @autoreleasepool { + completeSignal(self, selfDisposable); + } + }]; + + selfDisposable.disposable = bindingDisposable; + } + + return compoundDisposable; + }] setNameWithFormat:@"[%@] -bind:", self.name]; +} + +- (RACSignal *)concat:(RACSignal *)signal { + return [[RACSignal createSignal:^(id subscriber) { + RACSerialDisposable *serialDisposable = [[RACSerialDisposable alloc] init]; + + RACDisposable *sourceDisposable = [self subscribeNext:^(id x) { + [subscriber sendNext:x]; + } error:^(NSError *error) { + [subscriber sendError:error]; + } completed:^{ + RACDisposable *concattedDisposable = [signal subscribe:subscriber]; + serialDisposable.disposable = concattedDisposable; + }]; + + serialDisposable.disposable = sourceDisposable; + return serialDisposable; + }] setNameWithFormat:@"[%@] -concat: %@", self.name, signal]; +} + +- (RACSignal *)zipWith:(RACSignal *)signal { + NSCParameterAssert(signal != nil); + + return [[RACSignal createSignal:^(id subscriber) { + __block BOOL selfCompleted = NO; + NSMutableArray *selfValues = [NSMutableArray array]; + + __block BOOL otherCompleted = NO; + NSMutableArray *otherValues = [NSMutableArray array]; + + void (^sendCompletedIfNecessary)(void) = ^{ + @synchronized (selfValues) { + BOOL selfEmpty = (selfCompleted && selfValues.count == 0); + BOOL otherEmpty = (otherCompleted && otherValues.count == 0); + if (selfEmpty || otherEmpty) [subscriber sendCompleted]; + } + }; + + void (^sendNext)(void) = ^{ + @synchronized (selfValues) { + if (selfValues.count == 0) return; + if (otherValues.count == 0) return; + + RACTuple *tuple = [RACTuple tupleWithObjects:selfValues[0], otherValues[0], nil]; + [selfValues removeObjectAtIndex:0]; + [otherValues removeObjectAtIndex:0]; + + [subscriber sendNext:tuple]; + sendCompletedIfNecessary(); + } + }; + + RACDisposable *selfDisposable = [self subscribeNext:^(id x) { + @synchronized (selfValues) { + [selfValues addObject:x ?: RACTupleNil.tupleNil]; + sendNext(); + } + } error:^(NSError *error) { + [subscriber sendError:error]; + } completed:^{ + @synchronized (selfValues) { + selfCompleted = YES; + sendCompletedIfNecessary(); + } + }]; + + RACDisposable *otherDisposable = [signal subscribeNext:^(id x) { + @synchronized (selfValues) { + [otherValues addObject:x ?: RACTupleNil.tupleNil]; + sendNext(); + } + } error:^(NSError *error) { + [subscriber sendError:error]; + } completed:^{ + @synchronized (selfValues) { + otherCompleted = YES; + sendCompletedIfNecessary(); + } + }]; + + return [RACDisposable disposableWithBlock:^{ + [selfDisposable dispose]; + [otherDisposable dispose]; + }]; + }] setNameWithFormat:@"[%@] -zipWith: %@", self.name, signal]; +} + +@end + +@implementation RACSignal (Subscription) + +- (RACDisposable *)subscribe:(id)subscriber { + NSCAssert(NO, @"This method must be overridden by subclasses"); + return nil; +} + +- (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock { + NSCParameterAssert(nextBlock != NULL); + + RACSubscriber *o = [RACSubscriber subscriberWithNext:nextBlock error:NULL completed:NULL]; + return [self subscribe:o]; +} + +- (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock completed:(void (^)(void))completedBlock { + NSCParameterAssert(nextBlock != NULL); + NSCParameterAssert(completedBlock != NULL); + + RACSubscriber *o = [RACSubscriber subscriberWithNext:nextBlock error:NULL completed:completedBlock]; + return [self subscribe:o]; +} + +- (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock error:(void (^)(NSError *error))errorBlock completed:(void (^)(void))completedBlock { + NSCParameterAssert(nextBlock != NULL); + NSCParameterAssert(errorBlock != NULL); + NSCParameterAssert(completedBlock != NULL); + + RACSubscriber *o = [RACSubscriber subscriberWithNext:nextBlock error:errorBlock completed:completedBlock]; + return [self subscribe:o]; +} + +- (RACDisposable *)subscribeError:(void (^)(NSError *error))errorBlock { + NSCParameterAssert(errorBlock != NULL); + + RACSubscriber *o = [RACSubscriber subscriberWithNext:NULL error:errorBlock completed:NULL]; + return [self subscribe:o]; +} + +- (RACDisposable *)subscribeCompleted:(void (^)(void))completedBlock { + NSCParameterAssert(completedBlock != NULL); + + RACSubscriber *o = [RACSubscriber subscriberWithNext:NULL error:NULL completed:completedBlock]; + return [self subscribe:o]; +} + +- (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock error:(void (^)(NSError *error))errorBlock { + NSCParameterAssert(nextBlock != NULL); + NSCParameterAssert(errorBlock != NULL); + + RACSubscriber *o = [RACSubscriber subscriberWithNext:nextBlock error:errorBlock completed:NULL]; + return [self subscribe:o]; +} + +- (RACDisposable *)subscribeError:(void (^)(NSError *))errorBlock completed:(void (^)(void))completedBlock { + NSCParameterAssert(completedBlock != NULL); + NSCParameterAssert(errorBlock != NULL); + + RACSubscriber *o = [RACSubscriber subscriberWithNext:NULL error:errorBlock completed:completedBlock]; + return [self subscribe:o]; +} + +@end + +@implementation RACSignal (Debugging) + +- (RACSignal *)logAll { + return [[[self logNext] logError] logCompleted]; +} + +- (RACSignal *)logNext { + return [[self doNext:^(id x) { + NSLog(@"%@ next: %@", self, x); + }] setNameWithFormat:@"%@", self.name]; +} + +- (RACSignal *)logError { + return [[self doError:^(NSError *error) { + NSLog(@"%@ error: %@", self, error); + }] setNameWithFormat:@"%@", self.name]; +} + +- (RACSignal *)logCompleted { + return [[self doCompleted:^{ + NSLog(@"%@ completed", self); + }] setNameWithFormat:@"%@", self.name]; +} + +@end + +@implementation RACSignal (Testing) + +static const NSTimeInterval RACSignalAsynchronousWaitTimeout = 10; + +- (id)asynchronousFirstOrDefault:(id)defaultValue success:(BOOL *)success error:(NSError **)error { + NSCAssert([NSThread isMainThread], @"%s should only be used from the main thread", __func__); + + __block id result = defaultValue; + __block BOOL done = NO; + + // Ensures that we don't pass values across thread boundaries by reference. + __block NSError *localError; + __block BOOL localSuccess = YES; + + [[[[self + take:1] + timeout:RACSignalAsynchronousWaitTimeout onScheduler:[RACScheduler scheduler]] + deliverOn:RACScheduler.mainThreadScheduler] + subscribeNext:^(id x) { + result = x; + done = YES; + } error:^(NSError *e) { + if (!done) { + localSuccess = NO; + localError = e; + done = YES; + } + } completed:^{ + done = YES; + }]; + + do { + [NSRunLoop.mainRunLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; + } while (!done); + + if (success != NULL) *success = localSuccess; + if (error != NULL) *error = localError; + + return result; +} + +- (BOOL)asynchronouslyWaitUntilCompleted:(NSError **)error { + BOOL success = NO; + [[self ignoreValues] asynchronousFirstOrDefault:nil success:&success error:error]; + return success; +} + +@end + +@implementation RACSignal (Deprecated) + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-implementations" + ++ (RACSignal *)startWithScheduler:(RACScheduler *)scheduler subjectBlock:(void (^)(RACSubject *subject))block { + NSCParameterAssert(block != NULL); + + RACReplaySubject *subject = [[RACReplaySubject subject] setNameWithFormat:@"+startWithScheduler:subjectBlock:"]; + + [scheduler schedule:^{ + block(subject); + }]; + + return subject; +} + ++ (RACSignal *)start:(id (^)(BOOL *success, NSError **error))block { + return [[self startWithScheduler:[RACScheduler scheduler] block:block] setNameWithFormat:@"+start:"]; +} + ++ (RACSignal *)startWithScheduler:(RACScheduler *)scheduler block:(id (^)(BOOL *success, NSError **error))block { + return [[self startWithScheduler:scheduler subjectBlock:^(id subscriber) { + BOOL success = YES; + NSError *error = nil; + id returned = block(&success, &error); + + if (!success) { + [subscriber sendError:error]; + } else { + [subscriber sendNext:returned]; + [subscriber sendCompleted]; + } + }] setNameWithFormat:@"+startWithScheduler:block:"]; +} + +#pragma clang diagnostic pop + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignalProvider.d b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignalProvider.d new file mode 100644 index 00000000..8add9a10 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignalProvider.d @@ -0,0 +1,5 @@ +provider RACSignal { + probe next(char *signal, char *subscriber, char *valueDescription); + probe completed(char *signal, char *subscriber); + probe error(char *signal, char *subscriber, char *errorDescription); +}; diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignalSequence.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignalSequence.h new file mode 100644 index 00000000..9666285d --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignalSequence.h @@ -0,0 +1,19 @@ +// +// RACSignalSequence.h +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2012-11-09. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACSequence.h" + +@class RACSignal; + +/// Private class that adapts a RACSignal to the RACSequence interface. +@interface RACSignalSequence : RACSequence + +/// Returns a sequence for enumerating over the given signal. ++ (RACSequence *)sequenceWithSignal:(RACSignal *)signal; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignalSequence.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignalSequence.m new file mode 100644 index 00000000..52ea1b91 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignalSequence.m @@ -0,0 +1,79 @@ +// +// RACSignalSequence.m +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2012-11-09. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACSignalSequence.h" +#import "RACDisposable.h" +#import "RACReplaySubject.h" +#import "RACSignal+Operations.h" + +@interface RACSignalSequence () + +// Replays the signal given on initialization. +@property (nonatomic, strong, readonly) RACReplaySubject *subject; + +@end + +@implementation RACSignalSequence + +#pragma mark Lifecycle + ++ (RACSequence *)sequenceWithSignal:(RACSignal *)signal { + RACSignalSequence *seq = [[self alloc] init]; + + RACReplaySubject *subject = [RACReplaySubject subject]; + [signal subscribeNext:^(id value) { + [subject sendNext:value]; + } error:^(NSError *error) { + [subject sendError:error]; + } completed:^{ + [subject sendCompleted]; + }]; + + seq->_subject = subject; + return seq; +} + +#pragma mark RACSequence + +- (id)head { + id value = [self.subject firstOrDefault:self]; + + if (value == self) { + return nil; + } else { + return value ?: NSNull.null; + } +} + +- (RACSequence *)tail { + RACSequence *sequence = [self.class sequenceWithSignal:[self.subject skip:1]]; + sequence.name = self.name; + return sequence; +} + +- (NSArray *)array { + return self.subject.toArray; +} + +#pragma mark NSObject + +- (NSString *)description { + // Synchronously accumulate the values that have been sent so far. + NSMutableArray *values = [NSMutableArray array]; + RACDisposable *disposable = [self.subject subscribeNext:^(id value) { + @synchronized (values) { + [values addObject:value ?: NSNull.null]; + } + }]; + + [disposable dispose]; + + return [NSString stringWithFormat:@"<%@: %p>{ name = %@, values = %@ … }", self.class, self, self.name, values]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACStream+Private.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACStream+Private.h new file mode 100644 index 00000000..41e63697 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACStream+Private.h @@ -0,0 +1,23 @@ +// +// RACStream+Private.h +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2013-07-22. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "RACStream.h" + +@interface RACStream () + +/// Combines a list of streams using the logic of the given block. +/// +/// streams - The streams to combine. +/// block - An operator that combines two streams and returns a new one. The +/// returned stream should contain 2-tuples of the streams' combined +/// values. +/// +/// Returns a combined stream. ++ (instancetype)join:(id)streams block:(RACStream * (^)(id, id))block; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACStream.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACStream.h new file mode 100644 index 00000000..da7f39c2 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACStream.h @@ -0,0 +1,320 @@ +// +// RACStream.h +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2012-10-31. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import + +@class RACStream; + +/// A block which accepts a value from a RACStream and returns a new instance +/// of the same stream class. +/// +/// Setting `stop` to `YES` will cause the bind to terminate after the returned +/// value. Returning `nil` will result in immediate termination. +typedef RACStream * (^RACStreamBindBlock)(id value, BOOL *stop); + +/// An abstract class representing any stream of values. +/// +/// This class represents a monad, upon which many stream-based operations can +/// be built. +/// +/// When subclassing RACStream, only the methods in the main @interface body need +/// to be overridden. +@interface RACStream : NSObject + +/// Returns an empty stream. ++ (instancetype)empty; + +/// Lifts `value` into the stream monad. +/// +/// Returns a stream containing only the given value. ++ (instancetype)return:(id)value; + +/// Lazily binds a block to the values in the receiver. +/// +/// This should only be used if you need to terminate the bind early, or close +/// over some state. -flattenMap: is more appropriate for all other cases. +/// +/// block - A block returning a RACStreamBindBlock. This block will be invoked +/// each time the bound stream is re-evaluated. This block must not be +/// nil or return nil. +/// +/// Returns a new stream which represents the combined result of all lazy +/// applications of `block`. +- (instancetype)bind:(RACStreamBindBlock (^)(void))block; + +/// Appends the values of `stream` to the values in the receiver. +/// +/// stream - A stream to concatenate. This must be an instance of the same +/// concrete class as the receiver, and should not be `nil`. +/// +/// Returns a new stream representing the receiver followed by `stream`. +- (instancetype)concat:(RACStream *)stream; + +/// Zips the values in the receiver with those of the given stream to create +/// RACTuples. +/// +/// The first value of each stream will be combined, then the second value, and +/// so forth, until at least one of the streams is exhausted. +/// +/// stream - The stream to zip with. This must be an instance of the same +/// concrete class as the receiver, and should not be `nil`. +/// +/// Returns a new stream of RACTuples, representing the zipped values of the +/// two streams. +- (instancetype)zipWith:(RACStream *)stream; + +@end + +/// This extension contains functionality to support naming streams for +/// debugging. +/// +/// Subclasses do not need to override the methods here. +@interface RACStream () + +/// The name of the stream. This is for debugging/human purposes only. +@property (copy) NSString *name; + +/// Sets the name of the receiver to the given format string. +/// +/// This is for debugging purposes only, and won't do anything unless the DEBUG +/// preprocessor macro is defined. +/// +/// Returns the receiver, for easy method chaining. +- (instancetype)setNameWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1, 2); + +@end + +/// Operations built on the RACStream primitives. +/// +/// These methods do not need to be overridden, although subclasses may +/// occasionally gain better performance from doing so. +@interface RACStream (Operations) + +/// Maps `block` across the values in the receiver and flattens the result. +/// +/// Note that operators applied _after_ -flattenMap: behave differently from +/// operators _within_ -flattenMap:. See the Examples section below. +/// +/// This corresponds to the `SelectMany` method in Rx. +/// +/// block - A block which accepts the values in the receiver and returns a new +/// instance of the receiver's class. This block should not return `nil`. +/// +/// Examples +/// +/// [signal flattenMap:^(id x) { +/// // Logs each time a returned signal completes. +/// return [[RACSignal return:x] logCompleted]; +/// }]; +/// +/// [[signal +/// flattenMap:^(id x) { +/// return [RACSignal return:x]; +/// }] +/// // Logs only once, when all of the signals complete. +/// logCompleted]; +/// +/// Returns a new stream which represents the combined streams resulting from +/// mapping `block`. +- (instancetype)flattenMap:(RACStream * (^)(id value))block; + +/// Flattens a stream of streams. +/// +/// This corresponds to the `Merge` method in Rx. +/// +/// Returns a stream consisting of the combined streams obtained from the +/// receiver. +- (instancetype)flatten; + +/// Maps `block` across the values in the receiver. +/// +/// This corresponds to the `Select` method in Rx. +/// +/// Returns a new stream with the mapped values. +- (instancetype)map:(id (^)(id value))block; + +/// Replace each value in the receiver with the given object. +/// +/// Returns a new stream which includes the given object once for each value in +/// the receiver. +- (instancetype)mapReplace:(id)object; + +/// Filters out values in the receiver that don't pass the given test. +/// +/// This corresponds to the `Where` method in Rx. +/// +/// Returns a new stream with only those values that passed. +- (instancetype)filter:(BOOL (^)(id value))block; + +/// Filters out values in the receiver that equal (via -isEqual:) the provided value. +/// +/// value - The value can be `nil`, in which case it ignores `nil` values. +/// +/// Returns a new stream containing only the values which did not compare equal +/// to `value`. +- (instancetype)ignore:(id)value; + +/// Unpacks each RACTuple in the receiver and maps the values to a new value. +/// +/// reduceBlock - The block which reduces each RACTuple's values into one value. +/// It must take as many arguments as the number of tuple elements +/// to process. Each argument will be an object argument. The +/// return value must be an object. This argument cannot be nil. +/// +/// Returns a new stream of reduced tuple values. +- (instancetype)reduceEach:(id (^)())reduceBlock; + +/// Returns a stream consisting of `value`, followed by the values in the +/// receiver. +- (instancetype)startWith:(id)value; + +/// Skips the first `skipCount` values in the receiver. +/// +/// Returns the receiver after skipping the first `skipCount` values. If +/// `skipCount` is greater than the number of values in the stream, an empty +/// stream is returned. +- (instancetype)skip:(NSUInteger)skipCount; + +/// Returns a stream of the first `count` values in the receiver. If `count` is +/// greater than or equal to the number of values in the stream, a stream +/// equivalent to the receiver is returned. +- (instancetype)take:(NSUInteger)count; + +/// Zips the values in the given streams to create RACTuples. +/// +/// The first value of each stream will be combined, then the second value, and +/// so forth, until at least one of the streams is exhausted. +/// +/// streams - The streams to combine. These must all be instances of the same +/// concrete class implementing the protocol. If this collection is +/// empty, the returned stream will be empty. +/// +/// Returns a new stream containing RACTuples of the zipped values from the +/// streams. ++ (instancetype)zip:(id)streams; + +/// Zips streams using +zip:, then reduces the resulting tuples into a single +/// value using -reduceEach: +/// +/// streams - The streams to combine. These must all be instances of the +/// same concrete class implementing the protocol. If this +/// collection is empty, the returned stream will be empty. +/// reduceBlock - The block which reduces the values from all the streams +/// into one value. It must take as many arguments as the +/// number of streams given. Each argument will be an object +/// argument. The return value must be an object. This argument +/// must not be nil. +/// +/// Example: +/// +/// [RACStream zip:@[ stringSignal, intSignal ] reduce:^(NSString *string, NSNumber *number) { +/// return [NSString stringWithFormat:@"%@: %@", string, number]; +/// }]; +/// +/// Returns a new stream containing the results from each invocation of +/// `reduceBlock`. ++ (instancetype)zip:(id)streams reduce:(id (^)())reduceBlock; + +/// Returns a stream obtained by concatenating `streams` in order. ++ (instancetype)concat:(id)streams; + +/// Combines values in the receiver from left to right using the given block. +/// +/// The algorithm proceeds as follows: +/// +/// 1. `startingValue` is passed into the block as the `running` value, and the +/// first element of the receiver is passed into the block as the `next` value. +/// 2. The result of the invocation is added to the returned stream. +/// 3. The result of the invocation (`running`) and the next element of the +/// receiver (`next`) is passed into `block`. +/// 4. Steps 2 and 3 are repeated until all values have been processed. +/// +/// startingValue - The value to be combined with the first element of the +/// receiver. This value may be `nil`. +/// block - A block that describes how to combine values of the +/// receiver. If the receiver is empty, this block will never be +/// invoked. +/// +/// Examples +/// +/// RACSequence *numbers = @[ @1, @2, @3, @4 ].rac_sequence; +/// +/// // Contains 1, 3, 6, 10 +/// RACSequence *sums = [numbers scanWithStart:@0 reduce:^(NSNumber *sum, NSNumber *next) { +/// return @(sum.integerValue + next.integerValue); +/// }]; +/// +/// Returns a new stream that consists of each application of `block`. If the +/// receiver is empty, an empty stream is returned. +- (instancetype)scanWithStart:(id)startingValue reduce:(id (^)(id running, id next))block; + +/// Combines each previous and current value into one object. +/// +/// This method is similar to -scanWithStart:reduce:, but only ever operates on +/// the previous and current values (instead of the whole stream), and does not +/// pass the return value of `reduceBlock` into the next invocation of it. +/// +/// start - The value passed into `reduceBlock` as `previous` for the +/// first value. +/// reduceBlock - The block that combines the previous value and the current +/// value to create the reduced value. Cannot be nil. +/// +/// Examples +/// +/// RACSequence *numbers = @[ @1, @2, @3, @4 ].rac_sequence; +/// +/// // Contains 1, 3, 5, 7 +/// RACSequence *sums = [numbers combinePreviousWithStart:@0 reduce:^(NSNumber *previous, NSNumber *next) { +/// return @(previous.integerValue + next.integerValue); +/// }]; +/// +/// Returns a new stream consisting of the return values from each application of +/// `reduceBlock`. +- (instancetype)combinePreviousWithStart:(id)start reduce:(id (^)(id previous, id current))reduceBlock; + +/// Takes values until the given block returns `YES`. +/// +/// Returns a stream of the initial values in the receiver that fail `predicate`. +/// If `predicate` never returns `YES`, a stream equivalent to the receiver is +/// returned. +- (instancetype)takeUntilBlock:(BOOL (^)(id x))predicate; + +/// Takes values until the given block returns `NO`. +/// +/// Returns a stream of the initial values in the receiver that pass `predicate`. +/// If `predicate` never returns `NO`, a stream equivalent to the receiver is +/// returned. +- (instancetype)takeWhileBlock:(BOOL (^)(id x))predicate; + +/// Skips values until the given block returns `YES`. +/// +/// Returns a stream containing the values of the receiver that follow any +/// initial values failing `predicate`. If `predicate` never returns `YES`, +/// an empty stream is returned. +- (instancetype)skipUntilBlock:(BOOL (^)(id x))predicate; + +/// Skips values until the given block returns `NO`. +/// +/// Returns a stream containing the values of the receiver that follow any +/// initial values passing `predicate`. If `predicate` never returns `NO`, an +/// empty stream is returned. +- (instancetype)skipWhileBlock:(BOOL (^)(id x))predicate; + +/// Returns a stream of values for which -isEqual: returns NO when compared to the +/// previous value. +- (instancetype)distinctUntilChanged; + +@end + +@interface RACStream (Deprecated) + +- (instancetype)sequenceMany:(RACStream * (^)(void))block __attribute__((deprecated("Use -flattenMap: instead"))); +- (instancetype)scanWithStart:(id)startingValue combine:(id (^)(id running, id next))block __attribute__((deprecated("Renamed to -scanWithStart:reduce:"))); +- (instancetype)mapPreviousWithStart:(id)start reduce:(id (^)(id previous, id current))combineBlock __attribute__((deprecated("Renamed to -combinePreviousWithStart:reduce:"))); + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACStream.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACStream.m new file mode 100644 index 00000000..791a5ccd --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACStream.m @@ -0,0 +1,359 @@ +// +// RACStream.m +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2012-10-31. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACStream.h" +#import "NSObject+RACDescription.h" +#import "RACBlockTrampoline.h" +#import "RACTuple.h" + +@implementation RACStream + +#pragma mark Lifecycle + +- (id)init { + self = [super init]; + if (self == nil) return nil; + + self.name = @""; + return self; +} + +#pragma mark Abstract methods + ++ (instancetype)empty { + return nil; +} + +- (instancetype)bind:(RACStreamBindBlock (^)(void))block { + return nil; +} + ++ (instancetype)return:(id)value { + return nil; +} + +- (instancetype)concat:(RACStream *)stream { + return nil; +} + +- (instancetype)zipWith:(RACStream *)stream { + return nil; +} + +#pragma mark Naming + +- (instancetype)setNameWithFormat:(NSString *)format, ... { +#ifdef DEBUG + NSCParameterAssert(format != nil); + + va_list args; + va_start(args, format); + + NSString *str = [[NSString alloc] initWithFormat:format arguments:args]; + va_end(args); + + self.name = str; +#endif + + return self; +} + +@end + +@implementation RACStream (Operations) + +- (instancetype)flattenMap:(RACStream * (^)(id value))block { + return [[self bind:^{ + return ^(id value, BOOL *stop) { + return block(value); + }; + }] setNameWithFormat:@"[%@] -flattenMap:", self.name]; +} + +- (instancetype)flatten { + __weak RACStream *stream __attribute__((unused)) = self; + return [[self flattenMap:^(id value) { + NSCAssert([value isKindOfClass:RACStream.class], @"Stream %@ being flattened contains an object that is not a stream: %@", stream, value); + return value; + }] setNameWithFormat:@"[%@] -flatten", self.name]; +} + +- (instancetype)map:(id (^)(id value))block { + NSCParameterAssert(block != nil); + + Class class = self.class; + + return [[self flattenMap:^(id value) { + return [class return:block(value)]; + }] setNameWithFormat:@"[%@] -map:", self.name]; +} + +- (instancetype)mapReplace:(id)object { + return [[self map:^(id _) { + return object; + }] setNameWithFormat:@"[%@] -mapReplace: %@", self.name, [object rac_description]]; +} + +- (instancetype)combinePreviousWithStart:(id)start reduce:(id (^)(id previous, id next))reduceBlock { + NSCParameterAssert(reduceBlock != NULL); + return [[[self + scanWithStart:[RACTuple tupleWithObjects:start, nil] + reduce:^(RACTuple *previousTuple, id next) { + id value = reduceBlock(previousTuple[0], next); + return [RACTuple tupleWithObjects:next ?: RACTupleNil.tupleNil, value ?: RACTupleNil.tupleNil, nil]; + }] + map:^(RACTuple *tuple) { + return tuple[1]; + }] + setNameWithFormat:@"[%@] -combinePreviousWithStart: %@ reduce:", self.name, [start rac_description]]; +} + +- (instancetype)filter:(BOOL (^)(id value))block { + NSCParameterAssert(block != nil); + + Class class = self.class; + + return [[self flattenMap:^ id (id value) { + if (block(value)) { + return [class return:value]; + } else { + return class.empty; + } + }] setNameWithFormat:@"[%@] -filter:", self.name]; +} + +- (instancetype)ignore:(id)value { + return [[self filter:^ BOOL (id innerValue) { + return innerValue != value && ![innerValue isEqual:value]; + }] setNameWithFormat:@"[%@] -ignore: %@", self.name, [value rac_description]]; +} + +- (instancetype)reduceEach:(id (^)())reduceBlock { + NSCParameterAssert(reduceBlock != nil); + + __weak RACStream *stream __attribute__((unused)) = self; + return [[self map:^(RACTuple *t) { + NSCAssert([t isKindOfClass:RACTuple.class], @"Value from stream %@ is not a tuple: %@", stream, t); + return [RACBlockTrampoline invokeBlock:reduceBlock withArguments:t]; + }] setNameWithFormat:@"[%@] -reduceEach:", self.name]; +} + +- (instancetype)startWith:(id)value { + return [[[self.class return:value] + concat:self] + setNameWithFormat:@"[%@] -startWith: %@", self.name, [value rac_description]]; +} + +- (instancetype)skip:(NSUInteger)skipCount { + Class class = self.class; + + return [[self bind:^{ + __block NSUInteger skipped = 0; + + return ^(id value, BOOL *stop) { + if (skipped >= skipCount) return [class return:value]; + + skipped++; + return class.empty; + }; + }] setNameWithFormat:@"[%@] -skip: %lu", self.name, (unsigned long)skipCount]; +} + +- (instancetype)take:(NSUInteger)count { + Class class = self.class; + + return [[self bind:^{ + __block NSUInteger taken = 0; + + return ^ id (id value, BOOL *stop) { + RACStream *result = class.empty; + + if (taken < count) result = [class return:value]; + if (++taken >= count) *stop = YES; + + return result; + }; + }] setNameWithFormat:@"[%@] -take: %lu", self.name, (unsigned long)count]; +} + ++ (instancetype)join:(id)streams block:(RACStream * (^)(id, id))block { + RACStream *current = nil; + + // Creates streams of successively larger tuples by combining the input + // streams one-by-one. + for (RACStream *stream in streams) { + // For the first stream, just wrap its values in a RACTuple. That way, + // if only one stream is given, the result is still a stream of tuples. + if (current == nil) { + current = [stream map:^(id x) { + return RACTuplePack(x); + }]; + + continue; + } + + current = block(current, stream); + } + + if (current == nil) return [self empty]; + + return [current map:^(RACTuple *xs) { + // Right now, each value is contained in its own tuple, sorta like: + // + // (((1), 2), 3) + // + // We need to unwrap all the layers and create a tuple out of the result. + NSMutableArray *values = [[NSMutableArray alloc] init]; + + while (xs != nil) { + [values insertObject:xs.last ?: RACTupleNil.tupleNil atIndex:0]; + xs = (xs.count > 1 ? xs.first : nil); + } + + return [RACTuple tupleWithObjectsFromArray:values]; + }]; +} + ++ (instancetype)zip:(id)streams { + return [[self join:streams block:^(RACStream *left, RACStream *right) { + return [left zipWith:right]; + }] setNameWithFormat:@"+zip: %@", streams]; +} + ++ (instancetype)zip:(id)streams reduce:(id (^)())reduceBlock { + NSCParameterAssert(reduceBlock != nil); + + RACStream *result = [self zip:streams]; + + // Although we assert this condition above, older versions of this method + // supported this argument being nil. Avoid crashing Release builds of + // apps that depended on that. + if (reduceBlock != nil) result = [result reduceEach:reduceBlock]; + + return [result setNameWithFormat:@"+zip: %@ reduce:", streams]; +} + ++ (instancetype)concat:(id)streams { + RACStream *result = self.empty; + for (RACStream *stream in streams) { + result = [result concat:stream]; + } + + return [result setNameWithFormat:@"+concat: %@", streams]; +} + +- (instancetype)scanWithStart:(id)startingValue reduce:(id (^)(id running, id next))block { + NSCParameterAssert(block != nil); + + Class class = self.class; + + return [[self bind:^{ + __block id running = startingValue; + + return ^(id value, BOOL *stop) { + running = block(running, value); + return [class return:running]; + }; + }] setNameWithFormat:@"[%@] -scanWithStart: %@ reduce:", self.name, [startingValue rac_description]]; +} + +- (instancetype)takeUntilBlock:(BOOL (^)(id x))predicate { + NSCParameterAssert(predicate != nil); + + Class class = self.class; + + return [[self bind:^{ + return ^ id (id value, BOOL *stop) { + if (predicate(value)) return nil; + + return [class return:value]; + }; + }] setNameWithFormat:@"[%@] -takeUntilBlock:", self.name]; +} + +- (instancetype)takeWhileBlock:(BOOL (^)(id x))predicate { + NSCParameterAssert(predicate != nil); + + return [[self takeUntilBlock:^ BOOL (id x) { + return !predicate(x); + }] setNameWithFormat:@"[%@] -takeWhileBlock:", self.name]; +} + +- (instancetype)skipUntilBlock:(BOOL (^)(id x))predicate { + NSCParameterAssert(predicate != nil); + + Class class = self.class; + + return [[self bind:^{ + __block BOOL skipping = YES; + + return ^ id (id value, BOOL *stop) { + if (skipping) { + if (predicate(value)) { + skipping = NO; + } else { + return class.empty; + } + } + + return [class return:value]; + }; + }] setNameWithFormat:@"[%@] -skipUntilBlock:", self.name]; +} + +- (instancetype)skipWhileBlock:(BOOL (^)(id x))predicate { + NSCParameterAssert(predicate != nil); + + return [[self skipUntilBlock:^ BOOL (id x) { + return !predicate(x); + }] setNameWithFormat:@"[%@] -skipUntilBlock:", self.name]; +} + +- (instancetype)distinctUntilChanged { + Class class = self.class; + + return [[self bind:^{ + __block id lastValue = nil; + __block BOOL initial = YES; + + return ^(id x, BOOL *stop) { + if (!initial && (lastValue == x || [x isEqual:lastValue])) return [class empty]; + + initial = NO; + lastValue = x; + return [class return:x]; + }; + }] setNameWithFormat:@"[%@] -distinctUntilChanged", self.name]; +} + +@end + +@implementation RACStream (Deprecated) + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-implementations" + +- (instancetype)sequenceMany:(RACStream * (^)(void))block { + NSCParameterAssert(block != NULL); + + return [[self flattenMap:^(id _) { + return block(); + }] setNameWithFormat:@"[%@] -sequenceMany:", self.name]; +} + +- (instancetype)scanWithStart:(id)startingValue combine:(id (^)(id running, id next))block { + return [self scanWithStart:startingValue reduce:block]; +} + +- (instancetype)mapPreviousWithStart:(id)start reduce:(id (^)(id previous, id current))combineBlock { + return [self combinePreviousWithStart:start reduce:combineBlock]; +} + +#pragma clang diagnostic pop + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACStringSequence.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACStringSequence.h new file mode 100644 index 00000000..0d121e0e --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACStringSequence.h @@ -0,0 +1,18 @@ +// +// RACStringSequence.h +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2012-10-29. +// Copyright (c) 2012 GitHub. All rights reserved. +// + +#import "RACSequence.h" + +/// Private class that adapts a string to the RACSequence interface. +@interface RACStringSequence : RACSequence + +/// Returns a sequence for enumerating over the given string, starting from the +/// given character offset. The string will be copied to prevent mutation. ++ (RACSequence *)sequenceWithString:(NSString *)string offset:(NSUInteger)offset; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACStringSequence.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACStringSequence.m new file mode 100644 index 00000000..dd10f3c3 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACStringSequence.m @@ -0,0 +1,65 @@ +// +// RACStringSequence.m +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2012-10-29. +// Copyright (c) 2012 GitHub. All rights reserved. +// + +#import "RACStringSequence.h" + +@interface RACStringSequence () + +// The string being sequenced. +@property (nonatomic, copy, readonly) NSString *string; + +// The index in the string from which the sequence starts. +@property (nonatomic, assign, readonly) NSUInteger offset; + +@end + +@implementation RACStringSequence + +#pragma mark Lifecycle + ++ (RACSequence *)sequenceWithString:(NSString *)string offset:(NSUInteger)offset { + NSCParameterAssert(offset <= string.length); + + if (offset == string.length) return self.empty; + + RACStringSequence *seq = [[self alloc] init]; + seq->_string = [string copy]; + seq->_offset = offset; + return seq; +} + +#pragma mark RACSequence + +- (id)head { + return [self.string substringWithRange:NSMakeRange(self.offset, 1)]; +} + +- (RACSequence *)tail { + RACSequence *sequence = [self.class sequenceWithString:self.string offset:self.offset + 1]; + sequence.name = self.name; + return sequence; +} + +- (NSArray *)array { + NSUInteger substringLength = self.string.length - self.offset; + NSMutableArray *array = [NSMutableArray arrayWithCapacity:substringLength]; + + [self.string enumerateSubstringsInRange:NSMakeRange(self.offset, substringLength) options:NSStringEnumerationByComposedCharacterSequences usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) { + [array addObject:substring]; + }]; + + return [array copy]; +} + +#pragma mark NSObject + +- (NSString *)description { + return [NSString stringWithFormat:@"<%@: %p>{ name = %@, string = %@ }", self.class, self, self.name, [self.string substringFromIndex:self.offset]]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubject.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubject.h new file mode 100644 index 00000000..30c100bf --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubject.h @@ -0,0 +1,22 @@ +// +// RACSubject.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 3/9/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACSignal.h" +#import "RACSubscriber.h" + +/// A subject can be thought of as a signal that you can manually control by +/// sending next, completed, and error. +/// +/// They're most helpful in bridging the non-RAC world to RAC, since they let you +/// manually control the sending of events. +@interface RACSubject : RACSignal + +/// Returns a new subject. ++ (instancetype)subject; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubject.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubject.m new file mode 100644 index 00000000..9bae48be --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubject.m @@ -0,0 +1,117 @@ +// +// RACSubject.m +// ReactiveCocoa +// +// Created by Josh Abernathy on 3/9/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACSubject.h" +#import "RACEXTScope.h" +#import "RACCompoundDisposable.h" +#import "RACPassthroughSubscriber.h" + +@interface RACSubject () + +// Contains all current subscribers to the receiver. +// +// This should only be used while synchronized on `self`. +@property (nonatomic, strong, readonly) NSMutableArray *subscribers; + +// Contains all of the receiver's subscriptions to other signals. +@property (nonatomic, strong, readonly) RACCompoundDisposable *disposable; + +// Enumerates over each of the receiver's `subscribers` and invokes `block` for +// each. +- (void)enumerateSubscribersUsingBlock:(void (^)(id subscriber))block; + +@end + +@implementation RACSubject + +#pragma mark Lifecycle + ++ (instancetype)subject { + return [[self alloc] init]; +} + +- (id)init { + self = [super init]; + if (self == nil) return nil; + + _disposable = [RACCompoundDisposable compoundDisposable]; + _subscribers = [[NSMutableArray alloc] initWithCapacity:1]; + + return self; +} + +- (void)dealloc { + [self.disposable dispose]; +} + +#pragma mark Subscription + +- (RACDisposable *)subscribe:(id)subscriber { + NSCParameterAssert(subscriber != nil); + + RACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable]; + subscriber = [[RACPassthroughSubscriber alloc] initWithSubscriber:subscriber signal:self disposable:disposable]; + + NSMutableArray *subscribers = self.subscribers; + @synchronized (subscribers) { + [subscribers addObject:subscriber]; + } + + return [RACDisposable disposableWithBlock:^{ + @synchronized (subscribers) { + // Since newer subscribers are generally shorter-lived, search + // starting from the end of the list. + NSUInteger index = [subscribers indexOfObjectWithOptions:NSEnumerationReverse passingTest:^ BOOL (id obj, NSUInteger index, BOOL *stop) { + return obj == subscriber; + }]; + + if (index != NSNotFound) [subscribers removeObjectAtIndex:index]; + } + }]; +} + +- (void)enumerateSubscribersUsingBlock:(void (^)(id subscriber))block { + NSArray *subscribers; + @synchronized (self.subscribers) { + subscribers = [self.subscribers copy]; + } + + for (id subscriber in subscribers) { + block(subscriber); + } +} + +#pragma mark RACSubscriber + +- (void)sendNext:(id)value { + [self enumerateSubscribersUsingBlock:^(id subscriber) { + [subscriber sendNext:value]; + }]; +} + +- (void)sendError:(NSError *)error { + [self.disposable dispose]; + + [self enumerateSubscribersUsingBlock:^(id subscriber) { + [subscriber sendError:error]; + }]; +} + +- (void)sendCompleted { + [self.disposable dispose]; + + [self enumerateSubscribersUsingBlock:^(id subscriber) { + [subscriber sendCompleted]; + }]; +} + +- (void)didSubscribeWithDisposable:(RACDisposable *)d { + [self.disposable addDisposable:d]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriber+Private.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriber+Private.h new file mode 100644 index 00000000..2c3cedc9 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriber+Private.h @@ -0,0 +1,17 @@ +// +// RACSubscriber+Private.h +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2013-06-13. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "RACSubscriber.h" + +/// A simple block-based subscriber. +@interface RACSubscriber : NSObject + +/// Creates a new subscriber with the given blocks. ++ (instancetype)subscriberWithNext:(void (^)(id x))next error:(void (^)(NSError *error))error completed:(void (^)(void))completed; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriber.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriber.h new file mode 100644 index 00000000..34826e6c --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriber.h @@ -0,0 +1,51 @@ +// +// RACSubscriber.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 3/1/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import + +@class RACDisposable; + +/// Represents any object which can directly receive values from a RACSignal. +/// +/// You generally shouldn't need to implement this protocol. +[RACSignal +/// createSignal:], RACSignal's subscription methods, or RACSubject should work +/// for most uses. +/// +/// Implementors of this protocol may receive messages and values from multiple +/// threads simultaneously, and so should be thread-safe. Subscribers will also +/// be weakly referenced so implementations must allow that. +@protocol RACSubscriber +@required + +/// Send the next value to subscribers. +/// +/// value - The value to send. This can be `nil`. +- (void)sendNext:(id)value; + +/// Send the error to subscribers. +/// +/// error - The error to send. This can be `nil`. +/// +/// This terminates the subscription, and invalidates the subscriber (such that +/// it cannot subscribe to anything else in the future). +- (void)sendError:(NSError *)error; + +/// Send completed to subscribers. +/// +/// This terminates the subscription, and invalidates the subscriber (such that +/// it cannot subscribe to anything else in the future). +- (void)sendCompleted; + +/// Sends the subscriber a disposable that represents one of its subscriptions. +/// +/// A subscriber may receive multiple disposables if it gets subscribed to +/// multiple signals; however, any error or completed events must terminate _all_ +/// subscriptions. +- (void)didSubscribeWithDisposable:(RACDisposable *)disposable; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriber.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriber.m new file mode 100644 index 00000000..6e912194 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriber.m @@ -0,0 +1,101 @@ +// +// RACSubscriber.m +// ReactiveCocoa +// +// Created by Josh Abernathy on 3/1/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACSubscriber.h" +#import "RACSubscriber+Private.h" +#import "RACEXTScope.h" +#import "RACCompoundDisposable.h" + +@interface RACSubscriber () + +// These callbacks should only be accessed while synchronized on self. +@property (nonatomic, copy) void (^next)(id value); +@property (nonatomic, copy) void (^error)(NSError *error); +@property (nonatomic, copy) void (^completed)(void); + +@property (nonatomic, strong, readonly) RACCompoundDisposable *disposable; + +@end + +@implementation RACSubscriber + +#pragma mark Lifecycle + ++ (instancetype)subscriberWithNext:(void (^)(id x))next error:(void (^)(NSError *error))error completed:(void (^)(void))completed { + RACSubscriber *subscriber = [[self alloc] init]; + + subscriber->_next = [next copy]; + subscriber->_error = [error copy]; + subscriber->_completed = [completed copy]; + + return subscriber; +} + +- (id)init { + self = [super init]; + if (self == nil) return nil; + + @weakify(self); + + RACDisposable *selfDisposable = [RACDisposable disposableWithBlock:^{ + @strongify(self); + if (self == nil) return; + + @synchronized (self) { + self.next = nil; + self.error = nil; + self.completed = nil; + } + }]; + + _disposable = [RACCompoundDisposable compoundDisposable]; + [_disposable addDisposable:selfDisposable]; + + return self; +} + +- (void)dealloc { + [self.disposable dispose]; +} + +#pragma mark RACSubscriber + +- (void)sendNext:(id)value { + @synchronized (self) { + void (^nextBlock)(id) = [self.next copy]; + if (nextBlock == nil) return; + + nextBlock(value); + } +} + +- (void)sendError:(NSError *)e { + @synchronized (self) { + void (^errorBlock)(NSError *) = [self.error copy]; + [self.disposable dispose]; + + if (errorBlock == nil) return; + errorBlock(e); + } +} + +- (void)sendCompleted { + @synchronized (self) { + void (^completedBlock)(void) = [self.completed copy]; + [self.disposable dispose]; + + if (completedBlock == nil) return; + completedBlock(); + } +} + +- (void)didSubscribeWithDisposable:(RACDisposable *)d { + [self.disposable addDisposable:d]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriptingAssignmentTrampoline.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriptingAssignmentTrampoline.h new file mode 100644 index 00000000..5c8467ae --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriptingAssignmentTrampoline.h @@ -0,0 +1,51 @@ +// +// RACSubscriptingAssignmentTrampoline.h +// iOSDemo +// +// Created by Josh Abernathy on 9/24/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import +#import "RACEXTKeyPathCoding.h" + +@class RACSignal; + +/// Assigns a signal to an object property, automatically setting the given key +/// path on every `next`. When the signal completes, the binding is automatically +/// disposed of. +/// +/// There are two different versions of this macro: +/// +/// - RAC(TARGET, KEYPATH, NILVALUE) will bind the `KEYPATH` of `TARGET` to the +/// given signal. If the signal ever sends a `nil` value, the property will be +/// set to `NILVALUE` instead. `NILVALUE` may itself be `nil` for object +/// properties, but an NSValue should be used for primitive properties, to +/// avoid an exception if `nil` is sent (which might occur if an intermediate +/// object is set to `nil`). +/// - RAC(TARGET, KEYPATH) is the same as the above, but `NILVALUE` defaults to +/// `nil`. +/// +/// See -[RACSignal setKeyPath:onObject:nilValue:] for more information about the +/// binding's semantics. +/// +/// Examples +/// +/// RAC(self, objectProperty) = objectSignal; +/// RAC(self, stringProperty, @"foobar") = stringSignal; +/// RAC(self, integerProperty, @42) = integerSignal; +#define RAC(TARGET, ...) \ + metamacro_if_eq(1, metamacro_argcount(__VA_ARGS__)) \ + (RAC_(TARGET, __VA_ARGS__, nil)) \ + (RAC_(TARGET, __VA_ARGS__)) + +/// Do not use this directly. Use the RAC macro above. +#define RAC_(TARGET, KEYPATH, NILVALUE) \ + [[RACSubscriptingAssignmentTrampoline alloc] initWithTarget:(TARGET) nilValue:(NILVALUE)][@keypath(TARGET, KEYPATH)] + +@interface RACSubscriptingAssignmentTrampoline : NSObject + +- (id)initWithTarget:(id)target nilValue:(id)nilValue; +- (void)setObject:(RACSignal *)signal forKeyedSubscript:(NSString *)keyPath; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriptingAssignmentTrampoline.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriptingAssignmentTrampoline.m new file mode 100644 index 00000000..2ab8cd3d --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriptingAssignmentTrampoline.m @@ -0,0 +1,42 @@ +// +// RACSubscriptingAssignmentTrampoline.m +// iOSDemo +// +// Created by Josh Abernathy on 9/24/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACSubscriptingAssignmentTrampoline.h" +#import "RACSignal+Operations.h" + +@interface RACSubscriptingAssignmentTrampoline () + +// The object to bind to. +@property (nonatomic, strong, readonly) id target; + +// A value to use when `nil` is sent on the bound signal. +@property (nonatomic, strong, readonly) id nilValue; + +@end + +@implementation RACSubscriptingAssignmentTrampoline + +- (id)initWithTarget:(id)target nilValue:(id)nilValue { + // This is often a programmer error, but this prevents crashes if the target + // object has unexpectedly deallocated. + if (target == nil) return nil; + + self = [super init]; + if (self == nil) return nil; + + _target = target; + _nilValue = nilValue; + + return self; +} + +- (void)setObject:(RACSignal *)signal forKeyedSubscript:(NSString *)keyPath { + [signal setKeyPath:keyPath onObject:self.target nilValue:self.nilValue]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriptionScheduler.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriptionScheduler.h new file mode 100644 index 00000000..b333ec62 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriptionScheduler.h @@ -0,0 +1,14 @@ +// +// RACSubscriptionScheduler.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 11/30/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACScheduler.h" + +/// A private scheduler used only for subscriptions. See the private +/// +[RACScheduler subscriptionScheduler] method for more information. +@interface RACSubscriptionScheduler : RACScheduler +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriptionScheduler.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriptionScheduler.m new file mode 100644 index 00000000..2aab9c3e --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSubscriptionScheduler.m @@ -0,0 +1,54 @@ +// +// RACSubscriptionScheduler.m +// ReactiveCocoa +// +// Created by Josh Abernathy on 11/30/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACSubscriptionScheduler.h" +#import "RACScheduler+Private.h" + +@interface RACSubscriptionScheduler () + +// A private background scheduler on which to subscribe if the +currentScheduler +// is unknown. +@property (nonatomic, strong, readonly) RACScheduler *backgroundScheduler; + +@end + +@implementation RACSubscriptionScheduler + +#pragma mark Lifecycle + +- (id)init { + self = [super initWithName:@"com.ReactiveCocoa.RACScheduler.subscriptionScheduler"]; + if (self == nil) return nil; + + _backgroundScheduler = [RACScheduler scheduler]; + + return self; +} + +#pragma mark RACScheduler + +- (RACDisposable *)schedule:(void (^)(void))block { + NSCParameterAssert(block != NULL); + + if (RACScheduler.currentScheduler == nil) return [self.backgroundScheduler schedule:block]; + + block(); + return nil; +} + +- (RACDisposable *)after:(NSDate *)date schedule:(void (^)(void))block { + RACScheduler *scheduler = RACScheduler.currentScheduler ?: self.backgroundScheduler; + return [scheduler after:date schedule:block]; +} + +- (RACDisposable *)after:(NSDate *)date repeatingEvery:(NSTimeInterval)interval withLeeway:(NSTimeInterval)leeway schedule:(void (^)(void))block { + RACScheduler *scheduler = RACScheduler.currentScheduler ?: self.backgroundScheduler; + return [scheduler after:date repeatingEvery:interval withLeeway:leeway schedule:block]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTargetQueueScheduler.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTargetQueueScheduler.h new file mode 100644 index 00000000..429e5955 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTargetQueueScheduler.h @@ -0,0 +1,24 @@ +// +// RACTargetQueueScheduler.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 6/6/13. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "RACQueueScheduler.h" + +/// A scheduler that enqueues blocks on a private serial queue, targeting an +/// arbitrary GCD queue. +@interface RACTargetQueueScheduler : RACQueueScheduler + +/// Initializes the receiver with a serial queue that will target the given +/// `targetQueue`. +/// +/// name - The name of the scheduler. If nil, a default name will be used. +/// targetQueue - The queue to target. Cannot be NULL. +/// +/// Returns the initialized object. +- (id)initWithName:(NSString *)name targetQueue:(dispatch_queue_t)targetQueue; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTargetQueueScheduler.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTargetQueueScheduler.m new file mode 100644 index 00000000..65114d3c --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTargetQueueScheduler.m @@ -0,0 +1,37 @@ +// +// RACTargetQueueScheduler.m +// ReactiveCocoa +// +// Created by Josh Abernathy on 6/6/13. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "RACTargetQueueScheduler.h" +#import "RACBacktrace.h" +#import "RACQueueScheduler+Subclass.h" + +@implementation RACTargetQueueScheduler + +#pragma mark Lifecycle + +- (id)initWithName:(NSString *)name targetQueue:(dispatch_queue_t)targetQueue { + NSCParameterAssert(targetQueue != NULL); + + if (name == nil) { + name = [NSString stringWithFormat:@"com.ReactiveCocoa.RACTargetQueueScheduler(%s)", dispatch_queue_get_label(targetQueue)]; + } + + dispatch_queue_t queue = dispatch_queue_create(name.UTF8String, DISPATCH_QUEUE_SERIAL); + if (queue == NULL) return nil; + + dispatch_set_target_queue(queue, targetQueue); + + self = [super initWithName:name queue:queue]; + if (self == nil) return nil; + + dispatch_release(queue); + + return self; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTestScheduler.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTestScheduler.h new file mode 100644 index 00000000..a790f5bb --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTestScheduler.h @@ -0,0 +1,42 @@ +// +// RACTestScheduler.h +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2013-07-06. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "RACScheduler.h" + +/// A special kind of scheduler that steps through virtualized time. +/// +/// This scheduler class can be used in unit tests to verify asynchronous +/// behaviors without spending significant time waiting. +/// +/// This class can be used from multiple threads, but only one thread can `step` +/// through the enqueued actions at a time. Other threads will wait while the +/// scheduled blocks are being executed. +@interface RACTestScheduler : RACScheduler + +/// Initializes a new test scheduler. +- (instancetype)init; + +/// Executes the next scheduled block, if any. +/// +/// This method will block until the scheduled action has completed. +- (void)step; + +/// Executes up to the next `ticks` scheduled blocks. +/// +/// This method will block until the scheduled actions have completed. +/// +/// ticks - The number of scheduled blocks to execute. If there aren't this many +/// blocks enqueued, all scheduled blocks are executed. +- (void)step:(NSUInteger)ticks; + +/// Executes all of the scheduled blocks on the receiver. +/// +/// This method will block until the scheduled actions have completed. +- (void)stepAll; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTestScheduler.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTestScheduler.m new file mode 100644 index 00000000..374fbe24 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTestScheduler.m @@ -0,0 +1,223 @@ +// +// RACTestScheduler.m +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2013-07-06. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "RACTestScheduler.h" +#import "RACEXTScope.h" +#import "RACCompoundDisposable.h" +#import "RACDisposable.h" +#import "RACScheduler+Private.h" + +@interface RACTestSchedulerAction : NSObject + +// The date at which the action should be executed. +// +// This absolute time will not actually be honored. This date is only used for +// comparison, to determine which block should be run _next_. +@property (nonatomic, copy, readonly) NSDate *date; + +// The scheduled block. +@property (nonatomic, copy, readonly) void (^block)(void); + +// A disposable for this action. +// +// When disposed, the action should not start executing if it hasn't already. +@property (nonatomic, strong, readonly) RACDisposable *disposable; + +// Initializes a new scheduler action. +- (id)initWithDate:(NSDate *)date block:(void (^)(void))block; + +@end + +static CFComparisonResult RACCompareScheduledActions(const void *ptr1, const void *ptr2, void *info) { + RACTestSchedulerAction *action1 = (__bridge id)ptr1; + RACTestSchedulerAction *action2 = (__bridge id)ptr2; + return CFDateCompare((__bridge CFDateRef)action1.date, (__bridge CFDateRef)action2.date, NULL); +} + +static const void *RACRetainScheduledAction(CFAllocatorRef allocator, const void *ptr) { + return CFRetain(ptr); +} + +static void RACReleaseScheduledAction(CFAllocatorRef allocator, const void *ptr) { + CFRelease(ptr); +} + +@interface RACTestScheduler () + +// All of the RACTestSchedulerActions that have been enqueued and not yet +// executed. +// +// The minimum value in the heap represents the action to execute next. +// +// This property should only be used while synchronized on self. +@property (nonatomic, assign, readonly) CFBinaryHeapRef scheduledActions; + +// The number of blocks that have been directly enqueued with -schedule: so +// far. +// +// This is used to ensure unique dates when two blocks are enqueued +// simultaneously. +// +// This property should only be used while synchronized on self. +@property (nonatomic, assign) NSUInteger numberOfDirectlyScheduledBlocks; + +@end + +@implementation RACTestScheduler + +#pragma mark Lifecycle + +- (instancetype)init { + self = [super initWithName:@"com.github.ReactiveCocoa.RACTestScheduler"]; + if (self == nil) return nil; + + CFBinaryHeapCallBacks callbacks = (CFBinaryHeapCallBacks){ + .version = 0, + .retain = &RACRetainScheduledAction, + .release = &RACReleaseScheduledAction, + .copyDescription = &CFCopyDescription, + .compare = &RACCompareScheduledActions + }; + + _scheduledActions = CFBinaryHeapCreate(NULL, 0, &callbacks, NULL); + return self; +} + +- (void)dealloc { + [self stepAll]; + + if (_scheduledActions != NULL) { + CFRelease(_scheduledActions); + _scheduledActions = NULL; + } +} + +#pragma mark Execution + +- (void)step { + [self step:1]; +} + +- (void)step:(NSUInteger)ticks { + @synchronized (self) { + for (NSUInteger i = 0; i < ticks; i++) { + const void *actionPtr = NULL; + if (!CFBinaryHeapGetMinimumIfPresent(self.scheduledActions, &actionPtr)) break; + + RACTestSchedulerAction *action = (__bridge id)actionPtr; + CFBinaryHeapRemoveMinimumValue(self.scheduledActions); + + if (action.disposable.disposed) continue; + + RACScheduler *previousScheduler = RACScheduler.currentScheduler; + NSThread.currentThread.threadDictionary[RACSchedulerCurrentSchedulerKey] = self; + + action.block(); + + if (previousScheduler != nil) { + NSThread.currentThread.threadDictionary[RACSchedulerCurrentSchedulerKey] = previousScheduler; + } else { + [NSThread.currentThread.threadDictionary removeObjectForKey:RACSchedulerCurrentSchedulerKey]; + } + } + } +} + +- (void)stepAll { + [self step:NSUIntegerMax]; +} + +#pragma mark RACScheduler + +- (RACDisposable *)schedule:(void (^)(void))block { + NSCParameterAssert(block != nil); + + @synchronized (self) { + NSDate *uniqueDate = [NSDate dateWithTimeIntervalSinceReferenceDate:self.numberOfDirectlyScheduledBlocks]; + self.numberOfDirectlyScheduledBlocks++; + + RACTestSchedulerAction *action = [[RACTestSchedulerAction alloc] initWithDate:uniqueDate block:block]; + CFBinaryHeapAddValue(self.scheduledActions, (__bridge void *)action); + + return action.disposable; + } +} + +- (RACDisposable *)after:(NSDate *)date schedule:(void (^)(void))block { + NSCParameterAssert(date != nil); + NSCParameterAssert(block != nil); + + @synchronized (self) { + RACTestSchedulerAction *action = [[RACTestSchedulerAction alloc] initWithDate:date block:block]; + CFBinaryHeapAddValue(self.scheduledActions, (__bridge void *)action); + + return action.disposable; + } +} + +- (RACDisposable *)after:(NSDate *)date repeatingEvery:(NSTimeInterval)interval withLeeway:(NSTimeInterval)leeway schedule:(void (^)(void))block { + NSCParameterAssert(date != nil); + NSCParameterAssert(block != nil); + NSCParameterAssert(interval >= 0); + NSCParameterAssert(leeway >= 0); + + RACCompoundDisposable *compoundDisposable = [RACCompoundDisposable compoundDisposable]; + + @weakify(self); + @synchronized (self) { + __block RACDisposable *thisDisposable = nil; + + void (^reschedulingBlock)(void) = ^{ + @strongify(self); + + [compoundDisposable removeDisposable:thisDisposable]; + + // Schedule the next interval. + RACDisposable *schedulingDisposable = [self after:[date dateByAddingTimeInterval:interval] repeatingEvery:interval withLeeway:leeway schedule:block]; + [compoundDisposable addDisposable:schedulingDisposable]; + + block(); + }; + + RACTestSchedulerAction *action = [[RACTestSchedulerAction alloc] initWithDate:date block:reschedulingBlock]; + CFBinaryHeapAddValue(self.scheduledActions, (__bridge void *)action); + + thisDisposable = action.disposable; + [compoundDisposable addDisposable:thisDisposable]; + } + + return compoundDisposable; +} + +@end + +@implementation RACTestSchedulerAction + +#pragma mark Lifecycle + +- (id)initWithDate:(NSDate *)date block:(void (^)(void))block { + NSCParameterAssert(date != nil); + NSCParameterAssert(block != nil); + + self = [super init]; + if (self == nil) return nil; + + _date = [date copy]; + _block = [block copy]; + _disposable = [[RACDisposable alloc] init]; + + return self; +} + +#pragma mark NSObject + +- (NSString *)description { + return [NSString stringWithFormat:@"<%@: %p>{ date: %@ }", self.class, self, self.date]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTuple.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTuple.h new file mode 100644 index 00000000..c364630d --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTuple.h @@ -0,0 +1,159 @@ +// +// RACTuple.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 4/12/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import +#import "RACmetamacros.h" + +@class RACSequence; + +/// Creates a new tuple with the given values. At least one value must be given. +/// Values can be nil. +#define RACTuplePack(...) \ + RACTuplePack_(__VA_ARGS__) + +/// Declares new object variables and unpacks a RACTuple into them. +/// +/// This macro should be used on the left side of an assignment, with the +/// tuple on the right side. Nothing else should appear on the same line, and the +/// macro should not be the only statement in a conditional or loop body. +/// +/// If the tuple has more values than there are variables listed, the excess +/// values are ignored. +/// +/// If the tuple has fewer values than there are variables listed, the excess +/// variables are initialized to nil. +/// +/// Examples +/// +/// RACTupleUnpack(NSString *string, NSNumber *num) = [RACTuple tupleWithObjects:@"foo", @5, nil]; +/// NSLog(@"string: %@", string); +/// NSLog(@"num: %@", num); +/// +/// /* The above is equivalent to: */ +/// RACTuple *t = [RACTuple tupleWithObjects:@"foo", @5, nil]; +/// NSString *string = t[0]; +/// NSNumber *num = t[1]; +/// NSLog(@"string: %@", string); +/// NSLog(@"num: %@", num); +#define RACTupleUnpack(...) \ + RACTupleUnpack_(__VA_ARGS__) + +/// A sentinel object that represents nils in the tuple. +/// +/// It should never be necessary to create a tuple nil yourself. Just use +/// +tupleNil. +@interface RACTupleNil : NSObject +/// A singleton instance. ++ (RACTupleNil *)tupleNil; +@end + + +/// A tuple is an ordered collection of objects. It may contain nils, represented +/// by RACTupleNil. +@interface RACTuple : NSObject + +@property (nonatomic, readonly) NSUInteger count; + +/// These properties all return the object at that index or nil if the number of +/// objects is less than the index. +@property (nonatomic, readonly) id first; +@property (nonatomic, readonly) id second; +@property (nonatomic, readonly) id third; +@property (nonatomic, readonly) id fourth; +@property (nonatomic, readonly) id fifth; +@property (nonatomic, readonly) id last; + +/// Creates a new tuple out of the array. Does not convert nulls to nils. ++ (instancetype)tupleWithObjectsFromArray:(NSArray *)array; + +/// Creates a new tuple out of the array. If `convert` is YES, it also converts +/// every NSNull to RACTupleNil. ++ (instancetype)tupleWithObjectsFromArray:(NSArray *)array convertNullsToNils:(BOOL)convert; + +/// Creates a new tuple with the given objects. Use RACTupleNil to represent +/// nils. ++ (instancetype)tupleWithObjects:(id)object, ... NS_REQUIRES_NIL_TERMINATION; + +/// Returns the object at `index` or nil if the object is a RACTupleNil. Unlike +/// NSArray and friends, it's perfectly fine to ask for the object at an index +/// past the tuple's count - 1. It will simply return nil. +- (id)objectAtIndex:(NSUInteger)index; + +/// Returns an array of all the objects. RACTupleNils are converted to NSNulls. +- (NSArray *)allObjects; + +/// Appends `obj` to the receiver. +/// +/// obj - The object to add to the tuple. This argument may be nil. +/// +/// Returns a new tuple. +- (instancetype)tupleByAddingObject:(id)obj; + +@end + +@interface RACTuple (RACSequenceAdditions) + +/// Returns a sequence of all the objects. RACTupleNils are converted to NSNulls. +@property (nonatomic, copy, readonly) RACSequence *rac_sequence; + +@end + +@interface RACTuple (ObjectSubscripting) +/// Returns the object at that index or nil if the number of objects is less +/// than the index. +- (id)objectAtIndexedSubscript:(NSUInteger)idx; +@end + +/// This and everything below is for internal use only. +/// +/// See RACTuplePack() and RACTupleUnpack() instead. +#define RACTuplePack_(...) \ + ([RACTuple tupleWithObjectsFromArray:@[ metamacro_foreach(RACTuplePack_object_or_ractuplenil,, __VA_ARGS__) ]]) + +#define RACTuplePack_object_or_ractuplenil(INDEX, ARG) \ + (ARG) ?: RACTupleNil.tupleNil, + +#define RACTupleUnpack_(...) \ + metamacro_foreach(RACTupleUnpack_decl,, __VA_ARGS__) \ + \ + int RACTupleUnpack_state = 0; \ + \ + RACTupleUnpack_after: \ + ; \ + metamacro_foreach(RACTupleUnpack_assign,, __VA_ARGS__) \ + if (RACTupleUnpack_state != 0) RACTupleUnpack_state = 2; \ + \ + while (RACTupleUnpack_state != 2) \ + if (RACTupleUnpack_state == 1) { \ + goto RACTupleUnpack_after; \ + } else \ + for (; RACTupleUnpack_state != 1; RACTupleUnpack_state = 1) \ + [RACTupleUnpackingTrampoline trampoline][ @[ metamacro_foreach(RACTupleUnpack_value,, __VA_ARGS__) ] ] + +#define RACTupleUnpack_state metamacro_concat(RACTupleUnpack_state, __LINE__) +#define RACTupleUnpack_after metamacro_concat(RACTupleUnpack_after, __LINE__) +#define RACTupleUnpack_loop metamacro_concat(RACTupleUnpack_loop, __LINE__) + +#define RACTupleUnpack_decl_name(INDEX) \ + metamacro_concat(metamacro_concat(RACTupleUnpack, __LINE__), metamacro_concat(_var, INDEX)) + +#define RACTupleUnpack_decl(INDEX, ARG) \ + __strong id RACTupleUnpack_decl_name(INDEX); + +#define RACTupleUnpack_assign(INDEX, ARG) \ + __strong ARG = RACTupleUnpack_decl_name(INDEX); + +#define RACTupleUnpack_value(INDEX, ARG) \ + [NSValue valueWithPointer:&RACTupleUnpack_decl_name(INDEX)], + +@interface RACTupleUnpackingTrampoline : NSObject + ++ (instancetype)trampoline; +- (void)setObject:(RACTuple *)tuple forKeyedSubscript:(NSArray *)variables; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTuple.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTuple.m new file mode 100644 index 00000000..c3e979c0 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTuple.m @@ -0,0 +1,252 @@ +// +// RACTuple.m +// ReactiveCocoa +// +// Created by Josh Abernathy on 4/12/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACTuple.h" +#import "RACEXTKeyPathCoding.h" +#import "RACTupleSequence.h" + +@implementation RACTupleNil + ++ (RACTupleNil *)tupleNil { + static dispatch_once_t onceToken; + static RACTupleNil *tupleNil = nil; + dispatch_once(&onceToken, ^{ + tupleNil = [[self alloc] init]; + }); + + return tupleNil; +} + +#pragma mark NSCopying + +- (id)copyWithZone:(NSZone *)zone { + return self; +} + +#pragma mark NSCoding + +- (id)initWithCoder:(NSCoder *)coder { + // Always return the singleton. + return self.class.tupleNil; +} + +- (void)encodeWithCoder:(NSCoder *)coder { +} + +@end + + +@interface RACTuple () +@property (nonatomic, strong) NSArray *backingArray; +@end + + +@implementation RACTuple + +- (instancetype)init { + self = [super init]; + if (self == nil) return nil; + + self.backingArray = [NSArray array]; + + return self; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"<%@: %p> %@", self.class, self, self.allObjects]; +} + +- (BOOL)isEqual:(RACTuple *)object { + if (object == self) return YES; + if (![object isKindOfClass:self.class]) return NO; + + return [self.backingArray isEqual:object.backingArray]; +} + +- (NSUInteger)hash { + return self.backingArray.hash; +} + + +#pragma mark NSFastEnumeration + +- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id __unsafe_unretained [])buffer count:(NSUInteger)len { + return [self.backingArray countByEnumeratingWithState:state objects:buffer count:len]; +} + + +#pragma mark NSCopying + +- (instancetype)copyWithZone:(NSZone *)zone { + // we're immutable, bitches! + return self; +} + + +#pragma mark NSCoding + +- (id)initWithCoder:(NSCoder *)coder { + self = [self init]; + if (self == nil) return nil; + + self.backingArray = [coder decodeObjectForKey:@keypath(self.backingArray)]; + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + if (self.backingArray != nil) [coder encodeObject:self.backingArray forKey:@keypath(self.backingArray)]; +} + + +#pragma mark API + ++ (instancetype)tupleWithObjectsFromArray:(NSArray *)array { + return [self tupleWithObjectsFromArray:array convertNullsToNils:NO]; +} + ++ (instancetype)tupleWithObjectsFromArray:(NSArray *)array convertNullsToNils:(BOOL)convert { + RACTuple *tuple = [[self alloc] init]; + + if (convert) { + NSMutableArray *newArray = [NSMutableArray arrayWithCapacity:array.count]; + for (id object in array) { + [newArray addObject:(object == NSNull.null ? RACTupleNil.tupleNil : object)]; + } + + tuple.backingArray = newArray; + } else { + tuple.backingArray = [array copy]; + } + + return tuple; +} + ++ (instancetype)tupleWithObjects:(id)object, ... { + RACTuple *tuple = [[self alloc] init]; + + va_list args; + va_start(args, object); + + NSUInteger count = 0; + for (id currentObject = object; currentObject != nil; currentObject = va_arg(args, id)) { + ++count; + } + + va_end(args); + + if (count == 0) { + tuple.backingArray = @[]; + return tuple; + } + + NSMutableArray *objects = [[NSMutableArray alloc] initWithCapacity:count]; + + va_start(args, object); + for (id currentObject = object; currentObject != nil; currentObject = va_arg(args, id)) { + [objects addObject:currentObject]; + } + + va_end(args); + + tuple.backingArray = objects; + return tuple; +} + +- (id)objectAtIndex:(NSUInteger)index { + if (index >= self.count) return nil; + + id object = [self.backingArray objectAtIndex:index]; + return (object == RACTupleNil.tupleNil ? nil : object); +} + +- (NSArray *)allObjects { + NSMutableArray *newArray = [NSMutableArray arrayWithCapacity:self.backingArray.count]; + for (id object in self.backingArray) { + [newArray addObject:(object == RACTupleNil.tupleNil ? NSNull.null : object)]; + } + + return newArray; +} + +- (instancetype)tupleByAddingObject:(id)obj { + NSArray *newArray = [self.backingArray arrayByAddingObject:obj ?: RACTupleNil.tupleNil]; + return [self.class tupleWithObjectsFromArray:newArray convertNullsToNils:NO]; +} + +- (NSUInteger)count { + return self.backingArray.count; +} + +- (id)first { + return [self objectAtIndex:0]; +} + +- (id)second { + return [self objectAtIndex:1]; +} + +- (id)third { + return [self objectAtIndex:2]; +} + +- (id)fourth { + return [self objectAtIndex:3]; +} + +- (id)fifth { + return [self objectAtIndex:4]; +} + +- (id)last { + return [self objectAtIndex:self.count - 1]; +} + +@end + + +@implementation RACTuple (RACSequenceAdditions) + +- (RACSequence *)rac_sequence { + return [RACTupleSequence sequenceWithTupleBackingArray:self.backingArray offset:0]; +} + +@end + +@implementation RACTuple (ObjectSubscripting) + +- (id)objectAtIndexedSubscript:(NSUInteger)idx { + return [self objectAtIndex:idx]; +} + +@end + + +@implementation RACTupleUnpackingTrampoline + +#pragma mark Lifecycle + ++ (instancetype)trampoline { + static dispatch_once_t onceToken; + static id trampoline = nil; + dispatch_once(&onceToken, ^{ + trampoline = [[self alloc] init]; + }); + + return trampoline; +} + +- (void)setObject:(RACTuple *)tuple forKeyedSubscript:(NSArray *)variables { + NSCParameterAssert(variables != nil); + + [variables enumerateObjectsUsingBlock:^(NSValue *value, NSUInteger index, BOOL *stop) { + __strong id *ptr = (__strong id *)value.pointerValue; + *ptr = tuple[index]; + }]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTupleSequence.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTupleSequence.h new file mode 100644 index 00000000..6d1bd506 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTupleSequence.h @@ -0,0 +1,18 @@ +// +// RACTupleSequence.h +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2013-05-01. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "RACSequence.h" + +/// Private class that adapts a RACTuple to the RACSequence interface. +@interface RACTupleSequence : RACSequence + +/// Returns a sequence for enumerating over the given backing array (from +/// a RACTuple), starting from the given offset. ++ (instancetype)sequenceWithTupleBackingArray:(NSArray *)backingArray offset:(NSUInteger)offset; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTupleSequence.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTupleSequence.m new file mode 100644 index 00000000..ba268f5d --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACTupleSequence.m @@ -0,0 +1,68 @@ +// +// RACTupleSequence.m +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2013-05-01. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "RACTupleSequence.h" +#import "RACTuple.h" + +@interface RACTupleSequence () + +// The array being sequenced, as taken from RACTuple.backingArray. +@property (nonatomic, strong, readonly) NSArray *tupleBackingArray; + +// The index in the array from which the sequence starts. +@property (nonatomic, assign, readonly) NSUInteger offset; + +@end + +@implementation RACTupleSequence + +#pragma mark Lifecycle + ++ (instancetype)sequenceWithTupleBackingArray:(NSArray *)backingArray offset:(NSUInteger)offset { + NSCParameterAssert(offset <= backingArray.count); + + if (offset == backingArray.count) return self.empty; + + RACTupleSequence *seq = [[self alloc] init]; + seq->_tupleBackingArray = backingArray; + seq->_offset = offset; + return seq; +} + +#pragma mark RACSequence + +- (id)head { + id object = [self.tupleBackingArray objectAtIndex:self.offset]; + return (object == RACTupleNil.tupleNil ? NSNull.null : object); +} + +- (RACSequence *)tail { + RACSequence *sequence = [self.class sequenceWithTupleBackingArray:self.tupleBackingArray offset:self.offset + 1]; + sequence.name = self.name; + return sequence; +} + +- (NSArray *)array { + NSRange range = NSMakeRange(self.offset, self.tupleBackingArray.count - self.offset); + NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:range.length]; + + [self.tupleBackingArray enumerateObjectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:range] options:0 usingBlock:^(id object, NSUInteger index, BOOL *stop) { + id mappedObject = (object == RACTupleNil.tupleNil ? NSNull.null : object); + [array addObject:mappedObject]; + }]; + + return array; +} + +#pragma mark NSObject + +- (NSString *)description { + return [NSString stringWithFormat:@"<%@: %p>{ name = %@, tuple = %@ }", self.class, self, self.name, self.tupleBackingArray]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACUnarySequence.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACUnarySequence.h new file mode 100644 index 00000000..74192adb --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACUnarySequence.h @@ -0,0 +1,13 @@ +// +// RACUnarySequence.h +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2013-05-01. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "RACSequence.h" + +/// Private class representing a sequence of exactly one value. +@interface RACUnarySequence : RACSequence +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACUnarySequence.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACUnarySequence.m new file mode 100644 index 00000000..fefca84e --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACUnarySequence.m @@ -0,0 +1,81 @@ +// +// RACUnarySequence.m +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2013-05-01. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "RACUnarySequence.h" +#import "RACEXTKeyPathCoding.h" +#import "NSObject+RACDescription.h" + +@interface RACUnarySequence () + +// The single value stored in this sequence. +@property (nonatomic, strong, readwrite) id head; + +@end + +@implementation RACUnarySequence + +#pragma mark Properties + +@synthesize head = _head; + +#pragma mark Lifecycle + ++ (instancetype)return:(id)value { + RACUnarySequence *sequence = [[self alloc] init]; + sequence.head = value; + return [sequence setNameWithFormat:@"+return: %@", [value rac_description]]; +} + +#pragma mark RACSequence + +- (RACSequence *)tail { + return nil; +} + +- (instancetype)bind:(RACStreamBindBlock (^)(void))block { + RACStreamBindBlock bindBlock = block(); + BOOL stop = NO; + + RACSequence *result = (id)[bindBlock(self.head, &stop) setNameWithFormat:@"[%@] -bind:", self.name]; + return result ?: self.class.empty; +} + +#pragma mark NSCoding + +- (Class)classForCoder { + // Unary sequences should be encoded as themselves, not array sequences. + return self.class; +} + +- (id)initWithCoder:(NSCoder *)coder { + id value = [coder decodeObjectForKey:@keypath(self.head)]; + return [self.class return:value]; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + if (self.head != nil) [coder encodeObject:self.head forKey:@keypath(self.head)]; +} + +#pragma mark NSObject + +- (NSString *)description { + return [NSString stringWithFormat:@"<%@: %p>{ name = %@, head = %@ }", self.class, self, self.name, self.head]; +} + +- (NSUInteger)hash { + return [self.head hash]; +} + +- (BOOL)isEqual:(RACUnarySequence *)seq { + if (self == seq) return YES; + if (![seq isKindOfClass:RACUnarySequence.class]) return NO; + + return self.head == seq.head || [(NSObject *)self.head isEqual:seq.head]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACUnit.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACUnit.h new file mode 100644 index 00000000..7713e1dd --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACUnit.h @@ -0,0 +1,20 @@ +// +// RACUnit.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 3/27/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import + + +/// A unit represents an empty value. +/// +/// It should never be necessary to create a unit yourself. Just use +defaultUnit. +@interface RACUnit : NSObject + +/// A singleton instance. ++ (RACUnit *)defaultUnit; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACUnit.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACUnit.m new file mode 100644 index 00000000..76b8425c --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACUnit.m @@ -0,0 +1,27 @@ +// +// RACUnit.m +// ReactiveCocoa +// +// Created by Josh Abernathy on 3/27/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACUnit.h" + + +@implementation RACUnit + + +#pragma mark API + ++ (RACUnit *)defaultUnit { + static dispatch_once_t onceToken; + static RACUnit *defaultUnit = nil; + dispatch_once(&onceToken, ^{ + defaultUnit = [[self alloc] init]; + }); + + return defaultUnit; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACValueTransformer.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACValueTransformer.h new file mode 100644 index 00000000..9b078457 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACValueTransformer.h @@ -0,0 +1,16 @@ +// +// RACValueTransformer.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 3/6/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import + + +@interface RACValueTransformer : NSValueTransformer + ++ (instancetype)transformerWithBlock:(id (^)(id value))block; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACValueTransformer.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACValueTransformer.m new file mode 100644 index 00000000..ccec07d4 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACValueTransformer.m @@ -0,0 +1,42 @@ +// +// RACValueTransformer.m +// ReactiveCocoa +// +// Created by Josh Abernathy on 3/6/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACValueTransformer.h" + +@interface RACValueTransformer () +@property (nonatomic, copy) id (^transformBlock)(id value); +@end + + +@implementation RACValueTransformer + + +#pragma mark NSValueTransformer + ++ (BOOL)allowsReverseTransformation { + return NO; +} + +- (id)transformedValue:(id)value { + return self.transformBlock(value); +} + + +#pragma mark API + +@synthesize transformBlock; + ++ (instancetype)transformerWithBlock:(id (^)(id value))block { + NSCParameterAssert(block != NULL); + + RACValueTransformer *transformer = [[self alloc] init]; + transformer.transformBlock = block; + return transformer; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/ReactiveCocoa.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/ReactiveCocoa.h new file mode 100644 index 00000000..df0d4a92 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/ReactiveCocoa.h @@ -0,0 +1,71 @@ +// +// ReactiveCocoa.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 3/5/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "RACEXTKeyPathCoding.h" +#import "NSArray+RACSequenceAdditions.h" +#import "NSData+RACSupport.h" +#import "NSDictionary+RACSequenceAdditions.h" +#import "NSEnumerator+RACSequenceAdditions.h" +#import "NSFileHandle+RACSupport.h" +#import "NSNotificationCenter+RACSupport.h" +#import "NSObject+RACDeallocating.h" +#import "NSObject+RACLifting.h" +#import "NSObject+RACPropertySubscribing.h" +#import "NSObject+RACSelectorSignal.h" +#import "NSOrderedSet+RACSequenceAdditions.h" +#import "NSSet+RACSequenceAdditions.h" +#import "NSString+RACSequenceAdditions.h" +#import "NSString+RACSupport.h" +#import "NSURLConnection+RACSupport.h" +#import "RACBehaviorSubject.h" +#import "RACChannel.h" +#import "RACCommand.h" +#import "RACCompoundDisposable.h" +#import "RACDisposable.h" +#import "RACEvent.h" +#import "RACGroupedSignal.h" +#import "RACKVOChannel.h" +#import "RACMulticastConnection.h" +#import "RACQueueScheduler.h" +#import "RACReplaySubject.h" +#import "RACScheduler.h" +#import "RACScopedDisposable.h" +#import "RACSequence.h" +#import "RACSerialDisposable.h" +#import "RACSignal+Operations.h" +#import "RACSignal.h" +#import "RACStream.h" +#import "RACSubject.h" +#import "RACSubscriber.h" +#import "RACSubscriptingAssignmentTrampoline.h" +#import "RACTargetQueueScheduler.h" +#import "RACTestScheduler.h" +#import "RACTuple.h" +#import "RACUnit.h" + +#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED + #import "UIActionSheet+RACSignalSupport.h" + #import "UIAlertView+RACSignalSupport.h" + #import "UIBarButtonItem+RACCommandSupport.h" + #import "UIButton+RACCommandSupport.h" + #import "UIControl+RACSignalSupport.h" + #import "UIDatePicker+RACSignalSupport.h" + #import "UIGestureRecognizer+RACSignalSupport.h" + #import "UISegmentedControl+RACSignalSupport.h" + #import "UISlider+RACSignalSupport.h" + #import "UIStepper+RACSignalSupport.h" + #import "UISwitch+RACSignalSupport.h" + #import "UITableViewCell+RACSignalSupport.h" + #import "UITextField+RACSignalSupport.h" + #import "UITextView+RACSignalSupport.h" +#elif TARGET_OS_MAC + #import "NSControl+RACCommandSupport.h" + #import "NSControl+RACTextSignalSupport.h" + #import "NSObject+RACAppKitBindings.h" + #import "NSText+RACSignalSupport.h" +#endif diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIActionSheet+RACSignalSupport.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIActionSheet+RACSignalSupport.h new file mode 100644 index 00000000..3d667e95 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIActionSheet+RACSignalSupport.h @@ -0,0 +1,32 @@ +// +// UIActionSheet+RACSignalSupport.h +// ReactiveCocoa +// +// Created by Dave Lee on 2013-06-22. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import + +@class RACDelegateProxy; +@class RACSignal; + +@interface UIActionSheet (RACSignalSupport) + +/// A delegate proxy which will be set as the receiver's delegate when any of the +/// methods in this category are used. +@property (nonatomic, strong, readonly) RACDelegateProxy *rac_delegateProxy; + +/// Creates a signal for button clicks on the receiver. +/// +/// When this method is invoked, the `rac_delegateProxy` will become the +/// receiver's delegate. Any previous delegate will become the -[RACDelegateProxy +/// rac_proxiedDelegate], so that it receives any messages that the proxy doesn't +/// know how to handle. Setting the receiver's `delegate` afterward is +/// considered undefined behavior. +/// +/// Returns a signal which will send the index of the specific button clicked. +/// The signal will complete when the receiver is deallocated. +- (RACSignal *)rac_buttonClickedSignal; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIActionSheet+RACSignalSupport.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIActionSheet+RACSignalSupport.m new file mode 100644 index 00000000..6198797a --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIActionSheet+RACSignalSupport.m @@ -0,0 +1,50 @@ +// +// UIActionSheet+RACSignalSupport.m +// ReactiveCocoa +// +// Created by Dave Lee on 2013-06-22. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "UIActionSheet+RACSignalSupport.h" +#import "RACDelegateProxy.h" +#import "RACSignal+Operations.h" +#import "NSObject+RACDeallocating.h" +#import "RACTuple.h" +#import "NSObject+RACDescription.h" +#import + +@implementation UIActionSheet (RACSignalSupport) + +static void RACUseDelegateProxy(UIActionSheet *self) { + if (self.delegate == self.rac_delegateProxy) return; + + self.rac_delegateProxy.rac_proxiedDelegate = self.delegate; + self.delegate = (id)self.rac_delegateProxy; +} + +- (RACDelegateProxy *)rac_delegateProxy { + RACDelegateProxy *proxy = objc_getAssociatedObject(self, _cmd); + if (proxy == nil) { + proxy = [[RACDelegateProxy alloc] initWithProtocol:@protocol(UIActionSheetDelegate)]; + objc_setAssociatedObject(self, _cmd, proxy, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + } + + return proxy; +} + +- (RACSignal *)rac_buttonClickedSignal { + RACSignal *signal = [[[[self.rac_delegateProxy + signalForSelector:@selector(actionSheet:clickedButtonAtIndex:)] + reduceEach:^(UIActionSheet *actionSheet, NSNumber *buttonIndex) { + return buttonIndex; + }] + takeUntil:self.rac_willDeallocSignal] + setNameWithFormat:@"%@ -rac_buttonClickedSignal", [self rac_description]]; + + RACUseDelegateProxy(self); + + return signal; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIAlertView+RACSignalSupport.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIAlertView+RACSignalSupport.h new file mode 100644 index 00000000..45864606 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIAlertView+RACSignalSupport.h @@ -0,0 +1,32 @@ +// +// UIAlertView+RACSignalSupport.h +// ReactiveCocoa +// +// Created by Henrik Hodne on 6/16/13. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import + +@class RACDelegateProxy; +@class RACSignal; + +@interface UIAlertView (RACSignalSupport) + +/// A delegate proxy which will be set as the receiver's delegate when any of the +/// methods in this category are used. +@property (nonatomic, strong, readonly) RACDelegateProxy *rac_delegateProxy; + +/// Creates a signal for button clicks on the receiver. +/// +/// When this method is invoked, the `rac_delegateProxy` will become the +/// receiver's delegate. Any previous delegate will become the -[RACDelegateProxy +/// rac_proxiedDelegate], so that it receives any messages that the proxy doesn't +/// know how to handle. Setting the receiver's `delegate` afterward is considered +/// undefined behavior. +/// +/// Returns a signal which will send the index of the specific button clicked. +/// The signal will complete itself when the receiver is deallocated. +- (RACSignal *)rac_buttonClickedSignal; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIAlertView+RACSignalSupport.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIAlertView+RACSignalSupport.m new file mode 100644 index 00000000..bf15b27a --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIAlertView+RACSignalSupport.m @@ -0,0 +1,50 @@ +// +// UIAlertView+RACSignalSupport.m +// ReactiveCocoa +// +// Created by Henrik Hodne on 6/16/13. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "UIAlertView+RACSignalSupport.h" +#import "RACDelegateProxy.h" +#import "RACSignal+Operations.h" +#import "NSObject+RACDeallocating.h" +#import "NSObject+RACDescription.h" +#import "RACTuple.h" +#import + +@implementation UIAlertView (RACSignalSupport) + +static void RACUseDelegateProxy(UIAlertView *self) { + if (self.delegate == self.rac_delegateProxy) return; + + self.rac_delegateProxy.rac_proxiedDelegate = self.delegate; + self.delegate = (id)self.rac_delegateProxy; +} + +- (RACDelegateProxy *)rac_delegateProxy { + RACDelegateProxy *proxy = objc_getAssociatedObject(self, _cmd); + if (proxy == nil) { + proxy = [[RACDelegateProxy alloc] initWithProtocol:@protocol(UIAlertViewDelegate)]; + objc_setAssociatedObject(self, _cmd, proxy, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + } + + return proxy; +} + +- (RACSignal *)rac_buttonClickedSignal { + RACSignal *signal = [[[[self.rac_delegateProxy + signalForSelector:@selector(alertView:clickedButtonAtIndex:)] + reduceEach:^(UIAlertView *alertView, NSNumber *buttonIndex) { + return buttonIndex; + }] + takeUntil:self.rac_willDeallocSignal] + setNameWithFormat:@"%@ -rac_buttonClickedSignal", [self rac_description]]; + + RACUseDelegateProxy(self); + + return signal; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIBarButtonItem+RACCommandSupport.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIBarButtonItem+RACCommandSupport.h new file mode 100644 index 00000000..c04648af --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIBarButtonItem+RACCommandSupport.h @@ -0,0 +1,22 @@ +// +// UIBarButtonItem+RACCommandSupport.h +// ReactiveCocoa +// +// Created by Kyle LeNeau on 3/27/13. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import + +@class RACCommand; + +@interface UIBarButtonItem (RACCommandSupport) + +/// Sets the control's command. When the control is clicked, the command is +/// executed with the sender of the event. The control's enabledness is bound +/// to the command's `canExecute`. +/// +/// Note: this will reset the control's target and action. +@property (nonatomic, strong) RACCommand *rac_command; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIBarButtonItem+RACCommandSupport.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIBarButtonItem+RACCommandSupport.m new file mode 100644 index 00000000..7370af2e --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIBarButtonItem+RACCommandSupport.m @@ -0,0 +1,55 @@ +// +// UIBarButtonItem+RACCommandSupport.m +// ReactiveCocoa +// +// Created by Kyle LeNeau on 3/27/13. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "UIBarButtonItem+RACCommandSupport.h" +#import "RACEXTKeyPathCoding.h" +#import "NSObject+RACPropertySubscribing.h" +#import "RACCommand.h" +#import "RACDisposable.h" +#import "RACSignal+Operations.h" +#import + +static void *UIControlRACCommandKey = &UIControlRACCommandKey; +static void *UIControlEnabledDisposableKey = &UIControlEnabledDisposableKey; + +@implementation UIBarButtonItem (RACCommandSupport) + +- (RACCommand *)rac_command { + return objc_getAssociatedObject(self, UIControlRACCommandKey); +} + +- (void)setRac_command:(RACCommand *)command { + objc_setAssociatedObject(self, UIControlRACCommandKey, command, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + + // Check for stored signal in order to remove it and add a new one + RACDisposable *disposable = objc_getAssociatedObject(self, UIControlEnabledDisposableKey); + [disposable dispose]; + + if (command == nil) return; + + disposable = [command.enabled setKeyPath:@keypath(self.enabled) onObject:self]; + objc_setAssociatedObject(self, UIControlEnabledDisposableKey, disposable, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + + [self rac_hijackActionAndTargetIfNeeded]; +} + +- (void)rac_hijackActionAndTargetIfNeeded { + SEL hijackSelector = @selector(rac_commandPerformAction:); + if (self.target == self && self.action == hijackSelector) return; + + if (self.target != nil) NSLog(@"WARNING: UIBarButtonItem.rac_command hijacks the control's existing target and action."); + + self.target = self; + self.action = hijackSelector; +} + +- (void)rac_commandPerformAction:(id)sender { + [self.rac_command execute:sender]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIButton+RACCommandSupport.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIButton+RACCommandSupport.h new file mode 100644 index 00000000..642ba8e5 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIButton+RACCommandSupport.h @@ -0,0 +1,20 @@ +// +// UIButton+RACCommandSupport.h +// ReactiveCocoa +// +// Created by Ash Furrow on 2013-06-06. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import + +@class RACCommand; + +@interface UIButton (RACCommandSupport) + +/// Sets the button's command. When the button is clicked, the command is +/// executed with the sender of the event. The button's enabledness is bound +/// to the command's `canExecute`. +@property (nonatomic, strong) RACCommand *rac_command; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIButton+RACCommandSupport.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIButton+RACCommandSupport.m new file mode 100644 index 00000000..38fd470f --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIButton+RACCommandSupport.m @@ -0,0 +1,57 @@ +// +// UIButton+RACCommandSupport.m +// ReactiveCocoa +// +// Created by Ash Furrow on 2013-06-06. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "UIButton+RACCommandSupport.h" +#import "RACEXTKeyPathCoding.h" +#import "NSObject+RACPropertySubscribing.h" +#import "RACCommand.h" +#import "RACDisposable.h" +#import "RACSignal+Operations.h" +#import + +static void *UIButtonRACCommandKey = &UIButtonRACCommandKey; +static void *UIButtonEnabledDisposableKey = &UIButtonEnabledDisposableKey; + +@implementation UIButton (RACCommandSupport) + +- (RACCommand *)rac_command { + return objc_getAssociatedObject(self, UIButtonRACCommandKey); +} + +- (void)setRac_command:(RACCommand *)command { + objc_setAssociatedObject(self, UIButtonRACCommandKey, command, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + + // Check for stored signal in order to remove it and add a new one + RACDisposable *disposable = objc_getAssociatedObject(self, UIButtonEnabledDisposableKey); + [disposable dispose]; + + if (command == nil) return; + + disposable = [command.enabled setKeyPath:@keypath(self.enabled) onObject:self]; + objc_setAssociatedObject(self, UIButtonEnabledDisposableKey, disposable, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + + [self rac_hijackActionAndTargetIfNeeded]; +} + +- (void)rac_hijackActionAndTargetIfNeeded { + SEL hijackSelector = @selector(rac_commandPerformAction:); + + for (NSString *selector in [self actionsForTarget:self forControlEvent:UIControlEventTouchUpInside]) { + if (hijackSelector == NSSelectorFromString(selector)) { + return; + } + } + + [self addTarget:self action:hijackSelector forControlEvents:UIControlEventTouchUpInside]; +} + +- (void)rac_commandPerformAction:(id)sender { + [self.rac_command execute:sender]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UICollectionViewCell+RACSignalSupport.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UICollectionViewCell+RACSignalSupport.h new file mode 100644 index 00000000..0e3d3898 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UICollectionViewCell+RACSignalSupport.h @@ -0,0 +1,29 @@ +// +// UICollectionViewCell+RACSignalSupport.h +// ReactiveCocoa +// +// Created by Kent Wong on 2013-10-04. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import + +@class RACSignal; + +// This category is only applicable to iOS >= 6.0. +@interface UICollectionViewCell (RACSignalSupport) + +/// A signal which will send a RACUnit whenever -prepareForReuse is invoked upon +/// the receiver. +/// +/// Examples +/// +/// [[[self.cancelButton +/// rac_signalForControlEvents:UIControlEventTouchUpInside] +/// takeUntil:self.rac_prepareForReuseSignal] +/// subscribeNext:^(UIButton *x) { +/// // do other things +/// }]; +@property (nonatomic, strong, readonly) RACSignal *rac_prepareForReuseSignal; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UICollectionViewCell+RACSignalSupport.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UICollectionViewCell+RACSignalSupport.m new file mode 100644 index 00000000..a3600a0a --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UICollectionViewCell+RACSignalSupport.m @@ -0,0 +1,31 @@ +// +// UICollectionViewCell+RACSignalSupport.m +// ReactiveCocoa +// +// Created by Kent Wong on 2013-10-04. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "UICollectionViewCell+RACSignalSupport.h" +#import "NSObject+RACDescription.h" +#import "NSObject+RACSelectorSignal.h" +#import "RACSignal+Operations.h" +#import "RACUnit.h" +#import + +@implementation UICollectionViewCell (RACSignalSupport) + +- (RACSignal *)rac_prepareForReuseSignal { + RACSignal *signal = objc_getAssociatedObject(self, _cmd); + if (signal != nil) return signal; + + signal = [[[self + rac_signalForSelector:@selector(prepareForReuse)] + mapReplace:RACUnit.defaultUnit] + setNameWithFormat:@"%@ -rac_prepareForReuseSignal", self.rac_description]; + + objc_setAssociatedObject(self, _cmd, signal, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + return signal; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIControl+RACSignalSupport.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIControl+RACSignalSupport.h new file mode 100644 index 00000000..2de86cf8 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIControl+RACSignalSupport.h @@ -0,0 +1,19 @@ +// +// UIControl+RACSignalSupport.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 4/17/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import + +@class RACSignal; + +@interface UIControl (RACSignalSupport) + +/// Creates and returns a signal that sends the sender of the control event +/// whenever one of the control events is triggered. +- (RACSignal *)rac_signalForControlEvents:(UIControlEvents)controlEvents; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIControl+RACSignalSupport.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIControl+RACSignalSupport.m new file mode 100644 index 00000000..3cc503ec --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIControl+RACSignalSupport.m @@ -0,0 +1,41 @@ +// +// UIControl+RACSignalSupport.m +// ReactiveCocoa +// +// Created by Josh Abernathy on 4/17/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "UIControl+RACSignalSupport.h" +#import "RACEXTScope.h" +#import "RACCompoundDisposable.h" +#import "RACDisposable.h" +#import "RACSignal.h" +#import "RACSignal+Operations.h" +#import "RACSubscriber+Private.h" +#import "NSObject+RACDeallocating.h" +#import "NSObject+RACDescription.h" + +@implementation UIControl (RACSignalSupport) + +- (RACSignal *)rac_signalForControlEvents:(UIControlEvents)controlEvents { + @weakify(self); + + return [[RACSignal + createSignal:^(id subscriber) { + @strongify(self); + + [self addTarget:subscriber action:@selector(sendNext:) forControlEvents:controlEvents]; + [self.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ + [subscriber sendCompleted]; + }]]; + + return [RACDisposable disposableWithBlock:^{ + @strongify(self); + [self removeTarget:subscriber action:@selector(sendNext:) forControlEvents:controlEvents]; + }]; + }] + setNameWithFormat:@"%@ -rac_signalForControlEvents: %lx", [self rac_description], (unsigned long)controlEvents]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIControl+RACSignalSupportPrivate.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIControl+RACSignalSupportPrivate.h new file mode 100644 index 00000000..6ba91d08 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIControl+RACSignalSupportPrivate.h @@ -0,0 +1,29 @@ +// +// UIControl+RACSignalSupportPrivate.h +// ReactiveCocoa +// +// Created by Uri Baghin on 06/08/2013. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import + +@class RACChannelTerminal; + +@interface UIControl (RACSignalSupportPrivate) + +/// Adds a RACChannel-based interface to the receiver for the given +/// UIControlEvents and exposes it. +/// +/// controlEvents - A mask of UIControlEvents on which to send new values. +/// key - The key whose value should be read and set when a control +/// event fires and when a value is sent to the +/// RACChannelTerminal respectively. +/// nilValue - The value to be assigned to the key when `nil` is sent to the +/// RACChannelTerminal. +/// +/// Returns a RACChannelTerminal which will send future values from the receiver, +/// and update the receiver when values are sent to the terminal. +- (RACChannelTerminal *)rac_channelForControlEvents:(UIControlEvents)controlEvents key:(NSString *)key nilValue:(id)nilValue; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIControl+RACSignalSupportPrivate.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIControl+RACSignalSupportPrivate.m new file mode 100644 index 00000000..df5c505a --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIControl+RACSignalSupportPrivate.m @@ -0,0 +1,50 @@ +// +// UIControl+RACSignalSupportPrivate.m +// ReactiveCocoa +// +// Created by Uri Baghin on 06/08/2013. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "UIControl+RACSignalSupportPrivate.h" +#import "RACEXTScope.h" +#import "NSInvocation+RACTypeParsing.h" +#import "NSObject+RACDeallocating.h" +#import "NSObject+RACLifting.h" +#import "RACChannel.h" +#import "RACCompoundDisposable.h" +#import "RACDisposable.h" +#import "RACSignal+Operations.h" +#import "UIControl+RACSignalSupport.h" + +@implementation UIControl (RACSignalSupportPrivate) + +- (RACChannelTerminal *)rac_channelForControlEvents:(UIControlEvents)controlEvents key:(NSString *)key nilValue:(id)nilValue { + NSCParameterAssert(key.length > 0); + key = [key copy]; + RACChannel *channel = [[RACChannel alloc] init]; + + [self.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ + [channel.followingTerminal sendCompleted]; + }]]; + + RACSignal *eventSignal = [[[self + rac_signalForControlEvents:controlEvents] + mapReplace:key] + takeUntil:[[channel.followingTerminal + ignoreValues] + catchTo:RACSignal.empty]]; + [[self + rac_liftSelector:@selector(valueForKey:) withSignals:eventSignal, nil] + subscribe:channel.followingTerminal]; + + RACSignal *valuesSignal = [channel.followingTerminal + map:^(id value) { + return value ?: nilValue; + }]; + [self rac_liftSelector:@selector(setValue:forKey:) withSignals:valuesSignal, [RACSignal return:key], nil]; + + return channel.leadingTerminal; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIDatePicker+RACSignalSupport.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIDatePicker+RACSignalSupport.h new file mode 100644 index 00000000..e620dfc3 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIDatePicker+RACSignalSupport.h @@ -0,0 +1,24 @@ +// +// UIDatePicker+RACSignalSupport.h +// ReactiveCocoa +// +// Created by Uri Baghin on 20/07/2013. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import + +@class RACChannelTerminal; + +@interface UIDatePicker (RACSignalSupport) + +/// Creates a new RACChannel-based binding to the receiver. +/// +/// nilValue - The date to set when the terminal receives `nil`. +/// +/// Returns a RACChannelTerminal that sends the receiver's date whenever the +/// UIControlEventValueChanged control event is fired, and sets the date to the +/// values it receives. +- (RACChannelTerminal *)rac_newDateChannelWithNilValue:(NSDate *)nilValue; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIDatePicker+RACSignalSupport.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIDatePicker+RACSignalSupport.m new file mode 100644 index 00000000..1c110662 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIDatePicker+RACSignalSupport.m @@ -0,0 +1,20 @@ +// +// UIDatePicker+RACSignalSupport.m +// ReactiveCocoa +// +// Created by Uri Baghin on 20/07/2013. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "UIDatePicker+RACSignalSupport.h" +#import "RACEXTKeyPathCoding.h" +#import "UIControl+RACSignalSupport.h" +#import "UIControl+RACSignalSupportPrivate.h" + +@implementation UIDatePicker (RACSignalSupport) + +- (RACChannelTerminal *)rac_newDateChannelWithNilValue:(NSDate *)nilValue { + return [self rac_channelForControlEvents:UIControlEventValueChanged key:@keypath(self.date) nilValue:nilValue]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIGestureRecognizer+RACSignalSupport.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIGestureRecognizer+RACSignalSupport.h new file mode 100644 index 00000000..ee774fea --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIGestureRecognizer+RACSignalSupport.h @@ -0,0 +1,18 @@ +// +// UIGestureRecognizer+RACSignalSupport.h +// Talks +// +// Created by Josh Vera on 5/5/13. +// Copyright (c) 2013 GitHub. All rights reserved. +// + +#import + +@class RACSignal; + +@interface UIGestureRecognizer (RACSignalSupport) + +/// Returns a signal that sends the receiver when its gesture occurs. +- (RACSignal *)rac_gestureSignal; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIGestureRecognizer+RACSignalSupport.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIGestureRecognizer+RACSignalSupport.m new file mode 100644 index 00000000..510d3bad --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIGestureRecognizer+RACSignalSupport.m @@ -0,0 +1,40 @@ +// +// UIGestureRecognizer+RACSignalSupport.m +// Talks +// +// Created by Josh Vera on 5/5/13. +// Copyright (c) 2013 GitHub. All rights reserved. +// + +#import "UIGestureRecognizer+RACSignalSupport.h" +#import "RACEXTScope.h" +#import "NSObject+RACDeallocating.h" +#import "RACCompoundDisposable.h" +#import "RACDisposable.h" +#import "RACSignal.h" +#import "RACSubscriber.h" +#import "NSObject+RACDescription.h" + +@implementation UIGestureRecognizer (RACSignalSupport) + +- (RACSignal *)rac_gestureSignal { + @weakify(self); + + return [[RACSignal + createSignal:^(id subscriber) { + @strongify(self); + + [self addTarget:subscriber action:@selector(sendNext:)]; + [self.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ + [subscriber sendCompleted]; + }]]; + + return [RACDisposable disposableWithBlock:^{ + @strongify(self); + [self removeTarget:subscriber action:@selector(sendNext:)]; + }]; + }] + setNameWithFormat:@"%@ -rac_gestureSignal", [self rac_description]]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIRefreshControl+RACCommandSupport.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIRefreshControl+RACCommandSupport.h new file mode 100644 index 00000000..0bd1bf1b --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIRefreshControl+RACCommandSupport.h @@ -0,0 +1,22 @@ +// +// UIRefreshControl+RACCommandSupport.h +// ReactiveCocoa +// +// Created by Dave Lee on 2013-10-17. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import + +@class RACCommand; + +@interface UIRefreshControl (RACCommandSupport) + +/// Manipulate the RACCommand property associated with this refresh control. +/// +/// When this refresh control is activated by the user, the command will be +/// executed. Upon completion or error of the execution signal, -endRefreshing +/// will be invoked. +@property (nonatomic, strong) RACCommand *rac_command; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIRefreshControl+RACCommandSupport.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIRefreshControl+RACCommandSupport.m new file mode 100644 index 00000000..2b7d7a4f --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIRefreshControl+RACCommandSupport.m @@ -0,0 +1,59 @@ +// +// UIRefreshControl+RACCommandSupport.m +// ReactiveCocoa +// +// Created by Dave Lee on 2013-10-17. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "UIRefreshControl+RACCommandSupport.h" +#import "RACEXTKeyPathCoding.h" +#import "NSObject+RACSelectorSignal.h" +#import "RACDisposable.h" +#import "RACCommand.h" +#import "RACCompoundDisposable.h" +#import "RACSignal.h" +#import "RACSignal+Operations.h" +#import "UIControl+RACSignalSupport.h" +#import + +static void *UIRefreshControlRACCommandKey = &UIRefreshControlRACCommandKey; +static void *UIRefreshControlDisposableKey = &UIRefreshControlDisposableKey; + +@implementation UIRefreshControl (RACCommandSupport) + +- (RACCommand *)rac_command { + return objc_getAssociatedObject(self, UIRefreshControlRACCommandKey); +} + +- (void)setRac_command:(RACCommand *)command { + objc_setAssociatedObject(self, UIRefreshControlRACCommandKey, command, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + + // Dispose of any active command associations. + [objc_getAssociatedObject(self, UIRefreshControlDisposableKey) dispose]; + + if (command == nil) return; + + // Like RAC(self, enabled) = command.enabled; but with access to disposable. + RACDisposable *enabledDisposable = [command.enabled setKeyPath:@keypath(self.enabled) onObject:self]; + + RACDisposable *executionDisposable = [[[[self + rac_signalForControlEvents:UIControlEventValueChanged] + map:^(UIRefreshControl *x) { + return [[[command + execute:x] + catchTo:[RACSignal empty]] + then:^{ + return [RACSignal return:x]; + }]; + }] + concat] + subscribeNext:^(UIRefreshControl *x) { + [x endRefreshing]; + }]; + + RACDisposable *commandDisposable = [RACCompoundDisposable compoundDisposableWithDisposables:@[ enabledDisposable, executionDisposable ]]; + objc_setAssociatedObject(self, UIRefreshControlDisposableKey, commandDisposable, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UISegmentedControl+RACSignalSupport.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UISegmentedControl+RACSignalSupport.h new file mode 100644 index 00000000..2d3c3e7a --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UISegmentedControl+RACSignalSupport.h @@ -0,0 +1,24 @@ +// +// UISegmentedControl+RACSignalSupport.h +// ReactiveCocoa +// +// Created by Uri Baghin on 20/07/2013. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import + +@class RACChannelTerminal; + +@interface UISegmentedControl (RACSignalSupport) + +/// Creates a new RACChannel-based binding to the receiver. +/// +/// nilValue - The segment to select when the terminal receives `nil`. +/// +/// Returns a RACChannelTerminal that sends the receiver's currently selected +/// segment's index whenever the UIControlEventValueChanged control event is +/// fired, and sets the selected segment index to the values it receives. +- (RACChannelTerminal *)rac_newSelectedSegmentIndexChannelWithNilValue:(NSNumber *)nilValue; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UISegmentedControl+RACSignalSupport.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UISegmentedControl+RACSignalSupport.m new file mode 100644 index 00000000..96ea5563 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UISegmentedControl+RACSignalSupport.m @@ -0,0 +1,20 @@ +// +// UISegmentedControl+RACSignalSupport.m +// ReactiveCocoa +// +// Created by Uri Baghin on 20/07/2013. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "UISegmentedControl+RACSignalSupport.h" +#import "RACEXTKeyPathCoding.h" +#import "UIControl+RACSignalSupport.h" +#import "UIControl+RACSignalSupportPrivate.h" + +@implementation UISegmentedControl (RACSignalSupport) + +- (RACChannelTerminal *)rac_newSelectedSegmentIndexChannelWithNilValue:(NSNumber *)nilValue { + return [self rac_channelForControlEvents:UIControlEventValueChanged key:@keypath(self.selectedSegmentIndex) nilValue:nilValue]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UISlider+RACSignalSupport.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UISlider+RACSignalSupport.h new file mode 100644 index 00000000..75626ad9 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UISlider+RACSignalSupport.h @@ -0,0 +1,24 @@ +// +// UISlider+RACSignalSupport.h +// ReactiveCocoa +// +// Created by Uri Baghin on 20/07/2013. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import + +@class RACChannelTerminal; + +@interface UISlider (RACSignalSupport) + +/// Creates a new RACChannel-based binding to the receiver. +/// +/// nilValue - The value to set when the terminal receives `nil`. +/// +/// Returns a RACChannelTerminal that sends the receiver's value whenever the +/// UIControlEventValueChanged control event is fired, and sets the value to the +/// values it receives. +- (RACChannelTerminal *)rac_newValueChannelWithNilValue:(NSNumber *)nilValue; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UISlider+RACSignalSupport.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UISlider+RACSignalSupport.m new file mode 100644 index 00000000..1643f46d --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UISlider+RACSignalSupport.m @@ -0,0 +1,20 @@ +// +// UISlider+RACSignalSupport.m +// ReactiveCocoa +// +// Created by Uri Baghin on 20/07/2013. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "UISlider+RACSignalSupport.h" +#import "RACEXTKeyPathCoding.h" +#import "UIControl+RACSignalSupport.h" +#import "UIControl+RACSignalSupportPrivate.h" + +@implementation UISlider (RACSignalSupport) + +- (RACChannelTerminal *)rac_newValueChannelWithNilValue:(NSNumber *)nilValue { + return [self rac_channelForControlEvents:UIControlEventValueChanged key:@keypath(self.value) nilValue:nilValue]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIStepper+RACSignalSupport.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIStepper+RACSignalSupport.h new file mode 100644 index 00000000..da6d97b5 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIStepper+RACSignalSupport.h @@ -0,0 +1,24 @@ +// +// UIStepper+RACSignalSupport.h +// ReactiveCocoa +// +// Created by Uri Baghin on 20/07/2013. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import + +@class RACChannelTerminal; + +@interface UIStepper (RACSignalSupport) + +/// Creates a new RACChannel-based binding to the receiver. +/// +/// nilValue - The value to set when the terminal receives `nil`. +/// +/// Returns a RACChannelTerminal that sends the receiver's value whenever the +/// UIControlEventValueChanged control event is fired, and sets the value to the +/// values it receives. +- (RACChannelTerminal *)rac_newValueChannelWithNilValue:(NSNumber *)nilValue; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIStepper+RACSignalSupport.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIStepper+RACSignalSupport.m new file mode 100644 index 00000000..c7dc6ea0 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UIStepper+RACSignalSupport.m @@ -0,0 +1,20 @@ +// +// UIStepper+RACSignalSupport.m +// ReactiveCocoa +// +// Created by Uri Baghin on 20/07/2013. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "UIStepper+RACSignalSupport.h" +#import "RACEXTKeyPathCoding.h" +#import "UIControl+RACSignalSupport.h" +#import "UIControl+RACSignalSupportPrivate.h" + +@implementation UIStepper (RACSignalSupport) + +- (RACChannelTerminal *)rac_newValueChannelWithNilValue:(NSNumber *)nilValue { + return [self rac_channelForControlEvents:UIControlEventValueChanged key:@keypath(self.value) nilValue:nilValue]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UISwitch+RACSignalSupport.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UISwitch+RACSignalSupport.h new file mode 100644 index 00000000..1313a2c4 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UISwitch+RACSignalSupport.h @@ -0,0 +1,22 @@ +// +// UISwitch+RACSignalSupport.h +// ReactiveCocoa +// +// Created by Uri Baghin on 20/07/2013. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import + +@class RACChannelTerminal; + +@interface UISwitch (RACSignalSupport) + +/// Creates a new RACChannel-based binding to the receiver. +/// +/// Returns a RACChannelTerminal that sends whether the receiver is on whenever +/// the UIControlEventValueChanged control event is fired, and sets it on or off +/// when it receives @YES or @NO respectively. +- (RACChannelTerminal *)rac_newOnChannel; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UISwitch+RACSignalSupport.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UISwitch+RACSignalSupport.m new file mode 100644 index 00000000..81465076 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UISwitch+RACSignalSupport.m @@ -0,0 +1,20 @@ +// +// UISwitch+RACSignalSupport.m +// ReactiveCocoa +// +// Created by Uri Baghin on 20/07/2013. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "UISwitch+RACSignalSupport.h" +#import "RACEXTKeyPathCoding.h" +#import "UIControl+RACSignalSupport.h" +#import "UIControl+RACSignalSupportPrivate.h" + +@implementation UISwitch (RACSignalSupport) + +- (RACChannelTerminal *)rac_newOnChannel { + return [self rac_channelForControlEvents:UIControlEventValueChanged key:@keypath(self.on) nilValue:@NO]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UITableViewCell+RACSignalSupport.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UITableViewCell+RACSignalSupport.h new file mode 100644 index 00000000..c29d47cd --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UITableViewCell+RACSignalSupport.h @@ -0,0 +1,28 @@ +// +// UITableViewCell+RACSignalSupport.h +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2013-07-22. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import + +@class RACSignal; + +@interface UITableViewCell (RACSignalSupport) + +/// A signal which will send a RACUnit whenever -prepareForReuse is invoked upon +/// the receiver. +/// +/// Examples +/// +/// [[[self.cancelButton +/// rac_signalForControlEvents:UIControlEventTouchUpInside] +/// takeUntil:self.rac_prepareForReuseSignal] +/// subscribeNext:^(UIButton *x) { +/// // do other things +/// }]; +@property (nonatomic, strong, readonly) RACSignal *rac_prepareForReuseSignal; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UITableViewCell+RACSignalSupport.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UITableViewCell+RACSignalSupport.m new file mode 100644 index 00000000..8a81c30a --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UITableViewCell+RACSignalSupport.m @@ -0,0 +1,31 @@ +// +// UITableViewCell+RACSignalSupport.m +// ReactiveCocoa +// +// Created by Justin Spahr-Summers on 2013-07-22. +// Copyright (c) 2013 GitHub, Inc. All rights reserved. +// + +#import "UITableViewCell+RACSignalSupport.h" +#import "NSObject+RACDescription.h" +#import "NSObject+RACSelectorSignal.h" +#import "RACSignal+Operations.h" +#import "RACUnit.h" +#import + +@implementation UITableViewCell (RACSignalSupport) + +- (RACSignal *)rac_prepareForReuseSignal { + RACSignal *signal = objc_getAssociatedObject(self, _cmd); + if (signal != nil) return signal; + + signal = [[[self + rac_signalForSelector:@selector(prepareForReuse)] + mapReplace:RACUnit.defaultUnit] + setNameWithFormat:@"%@ -rac_prepareForReuseSignal", self.rac_description]; + + objc_setAssociatedObject(self, _cmd, signal, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + return signal; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UITextField+RACSignalSupport.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UITextField+RACSignalSupport.h new file mode 100644 index 00000000..99dbe345 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UITextField+RACSignalSupport.h @@ -0,0 +1,27 @@ +// +// UITextField+RACSignalSupport.h +// ReactiveCocoa +// +// Created by Josh Abernathy on 4/17/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import + +@class RACSignal, RACChannelTerminal; + +@interface UITextField (RACSignalSupport) + +/// Creates and returns a signal for the text of the field. It always starts with +/// the current text. The signal sends next when the UIControlEventEditingChanged +/// control event is fired on the control. +- (RACSignal *)rac_textSignal; + +/// Creates a new RACChannel-based binding to the receiver. +/// +/// Returns a RACChannelTerminal that sends the receiver's text whenever the +/// UIControlEventEditingChanged control event is fired, and sets the text to the +/// values it receives. +- (RACChannelTerminal *)rac_newTextChannel; + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UITextField+RACSignalSupport.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UITextField+RACSignalSupport.m new file mode 100644 index 00000000..0105ff2b --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UITextField+RACSignalSupport.m @@ -0,0 +1,39 @@ +// +// UITextField+RACSignalSupport.m +// ReactiveCocoa +// +// Created by Josh Abernathy on 4/17/12. +// Copyright (c) 2012 GitHub, Inc. All rights reserved. +// + +#import "UITextField+RACSignalSupport.h" +#import "RACEXTKeyPathCoding.h" +#import "RACEXTScope.h" +#import "NSObject+RACDeallocating.h" +#import "NSObject+RACDescription.h" +#import "RACSignal+Operations.h" +#import "UIControl+RACSignalSupport.h" +#import "UIControl+RACSignalSupportPrivate.h" + +@implementation UITextField (RACSignalSupport) + +- (RACSignal *)rac_textSignal { + @weakify(self); + return [[[[[RACSignal + defer:^{ + @strongify(self); + return [RACSignal return:self]; + }] + concat:[self rac_signalForControlEvents:UIControlEventEditingChanged]] + map:^(UITextField *x) { + return x.text; + }] + takeUntil:self.rac_willDeallocSignal] + setNameWithFormat:@"%@ -rac_textSignal", [self rac_description]]; +} + +- (RACChannelTerminal *)rac_newTextChannel { + return [self rac_channelForControlEvents:UIControlEventEditingChanged key:@keypath(self.text) nilValue:@""]; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UITextView+RACSignalSupport.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UITextView+RACSignalSupport.h new file mode 100644 index 00000000..174b1bac --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UITextView+RACSignalSupport.h @@ -0,0 +1,39 @@ +// +// UITextView+RACSignalSupport.h +// ReactiveCocoa +// +// Created by Cody Krieger on 5/18/12. +// Copyright (c) 2012 Cody Krieger. All rights reserved. +// + +#import + +@class RACDelegateProxy; +@class RACSignal; + +@interface UITextView (RACSignalSupport) + +/// A delegate proxy which will be set as the receiver's delegate when any of the +/// methods in this category are used. +@property (nonatomic, strong, readonly) RACDelegateProxy *rac_delegateProxy; + +/// Creates a signal for the text of the receiver. +/// +/// When this method is invoked, the `rac_delegateProxy` will become the +/// receiver's delegate. Any previous delegate will become the -[RACDelegateProxy +/// rac_proxiedDelegate], so that it receives any messages that the proxy doesn't +/// know how to handle. Setting the receiver's `delegate` afterward is +/// considered undefined behavior. +/// +/// Returns a signal which will send the current text upon subscription, then +/// again whenever the receiver's text is changed. The signal will complete when +/// the receiver is deallocated. +- (RACSignal *)rac_textSignal; + +@end + +@interface UITextView (RACSignalSupportUnavailable) + +- (RACSignal *)rac_signalForDelegateMethod:(SEL)method __attribute__((unavailable("Use -rac_signalForSelector:fromProtocol: instead"))); + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UITextView+RACSignalSupport.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UITextView+RACSignalSupport.m new file mode 100644 index 00000000..72086988 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/UITextView+RACSignalSupport.m @@ -0,0 +1,56 @@ +// +// UITextView+RACSignalSupport.m +// ReactiveCocoa +// +// Created by Cody Krieger on 5/18/12. +// Copyright (c) 2012 Cody Krieger. All rights reserved. +// + +#import "UITextView+RACSignalSupport.h" +#import "RACEXTScope.h" +#import "NSObject+RACDeallocating.h" +#import "RACDelegateProxy.h" +#import "RACSignal+Operations.h" +#import "RACTuple.h" +#import "NSObject+RACDescription.h" +#import + +@implementation UITextView (RACSignalSupport) + +static void RACUseDelegateProxy(UITextView *self) { + if (self.delegate == self.rac_delegateProxy) return; + + self.rac_delegateProxy.rac_proxiedDelegate = self.delegate; + self.delegate = (id)self.rac_delegateProxy; +} + +- (RACDelegateProxy *)rac_delegateProxy { + RACDelegateProxy *proxy = objc_getAssociatedObject(self, _cmd); + if (proxy == nil) { + proxy = [[RACDelegateProxy alloc] initWithProtocol:@protocol(UITextViewDelegate)]; + objc_setAssociatedObject(self, _cmd, proxy, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + } + + return proxy; +} + +- (RACSignal *)rac_textSignal { + @weakify(self); + RACSignal *signal = [[[[[RACSignal + defer:^{ + @strongify(self); + return [RACSignal return:RACTuplePack(self)]; + }] + concat:[self.rac_delegateProxy signalForSelector:@selector(textViewDidChange:)]] + reduceEach:^(UITextView *x) { + return x.text; + }] + takeUntil:self.rac_willDeallocSignal] + setNameWithFormat:@"%@ -rac_textSignal", [self rac_description]]; + + RACUseDelegateProxy(self); + + return signal; +} + +@end diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACEXTKeyPathCoding.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACEXTKeyPathCoding.h new file mode 100644 index 00000000..01063196 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACEXTKeyPathCoding.h @@ -0,0 +1,68 @@ +// +// EXTKeyPathCoding.h +// extobjc +// +// Created by Justin Spahr-Summers on 19.06.12. +// Copyright (C) 2012 Justin Spahr-Summers. +// Released under the MIT license. +// + +#import +#import "RACmetamacros.h" + +/** + * \@keypath allows compile-time verification of key paths. Given a real object + * receiver and key path: + * + * @code + +NSString *UTF8StringPath = @keypath(str.lowercaseString.UTF8String); +// => @"lowercaseString.UTF8String" + +NSString *versionPath = @keypath(NSObject, version); +// => @"version" + +NSString *lowercaseStringPath = @keypath(NSString.new, lowercaseString); +// => @"lowercaseString" + + * @endcode + * + * ... the macro returns an \c NSString containing all but the first path + * component or argument (e.g., @"lowercaseString.UTF8String", @"version"). + * + * In addition to simply creating a key path, this macro ensures that the key + * path is valid at compile-time (causing a syntax error if not), and supports + * refactoring, such that changing the name of the property will also update any + * uses of \@keypath. + */ +#define keypath(...) \ + metamacro_if_eq(1, metamacro_argcount(__VA_ARGS__))(keypath1(__VA_ARGS__))(keypath2(__VA_ARGS__)) + +#define keypath1(PATH) \ + (((void)(NO && ((void)PATH, NO)), strchr(# PATH, '.') + 1)) + +#define keypath2(OBJ, PATH) \ + (((void)(NO && ((void)OBJ.PATH, NO)), # PATH)) + +/** + * \@collectionKeypath allows compile-time verification of key paths across collections NSArray/NSSet etc. Given a real object + * receiver, collection object receiver and related keypaths: + * + * @code + + NSString *employessFirstNamePath = @collectionKeypath(department.employees, Employee.new, firstName) + // => @"employees.firstName" + + NSString *employessFirstNamePath = @collectionKeypath(Department.new, employees, Employee.new, firstName) + // => @"employees.firstName" + + * @endcode + * + */ +#define collectionKeypath(...) \ + metamacro_if_eq(3, metamacro_argcount(__VA_ARGS__))(collectionKeypath3(__VA_ARGS__))(collectionKeypath4(__VA_ARGS__)) + +#define collectionKeypath3(PATH, COLLECTION_OBJECT, COLLECTION_PATH) ([[NSString stringWithFormat:@"%s.%s",keypath(PATH), keypath(COLLECTION_OBJECT, COLLECTION_PATH)] UTF8String]) + +#define collectionKeypath4(OBJ, PATH, COLLECTION_OBJECT, COLLECTION_PATH) ([[NSString stringWithFormat:@"%s.%s",keypath(OBJ, PATH), keypath(COLLECTION_OBJECT, COLLECTION_PATH)] UTF8String]) + diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACEXTRuntimeExtensions.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACEXTRuntimeExtensions.h new file mode 100644 index 00000000..ab4e11d0 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACEXTRuntimeExtensions.h @@ -0,0 +1,122 @@ +// +// EXTRuntimeExtensions.h +// extobjc +// +// Created by Justin Spahr-Summers on 2011-03-05. +// Copyright (C) 2012 Justin Spahr-Summers. +// Released under the MIT license. +// + +#import + +/** + * Describes the memory management policy of a property. + */ +typedef enum { + /** + * The value is assigned. + */ + rac_propertyMemoryManagementPolicyAssign = 0, + + /** + * The value is retained. + */ + rac_propertyMemoryManagementPolicyRetain, + + /** + * The value is copied. + */ + rac_propertyMemoryManagementPolicyCopy +} rac_propertyMemoryManagementPolicy; + +/** + * Describes the attributes and type information of a property. + */ +typedef struct { + /** + * Whether this property was declared with the \c readonly attribute. + */ + BOOL readonly; + + /** + * Whether this property was declared with the \c nonatomic attribute. + */ + BOOL nonatomic; + + /** + * Whether the property is a weak reference. + */ + BOOL weak; + + /** + * Whether the property is eligible for garbage collection. + */ + BOOL canBeCollected; + + /** + * Whether this property is defined with \c \@dynamic. + */ + BOOL dynamic; + + /** + * The memory management policy for this property. This will always be + * #rac_propertyMemoryManagementPolicyAssign if #readonly is \c YES. + */ + rac_propertyMemoryManagementPolicy memoryManagementPolicy; + + /** + * The selector for the getter of this property. This will reflect any + * custom \c getter= attribute provided in the property declaration, or the + * inferred getter name otherwise. + */ + SEL getter; + + /** + * The selector for the setter of this property. This will reflect any + * custom \c setter= attribute provided in the property declaration, or the + * inferred setter name otherwise. + * + * @note If #readonly is \c YES, this value will represent what the setter + * \e would be, if the property were writable. + */ + SEL setter; + + /** + * The backing instance variable for this property, or \c NULL if \c + * \c @synthesize was not used, and therefore no instance variable exists. This + * would also be the case if the property is implemented dynamically. + */ + const char *ivar; + + /** + * If this property is defined as being an instance of a specific class, + * this will be the class object representing it. + * + * This will be \c nil if the property was defined as type \c id, if the + * property is not of an object type, or if the class could not be found at + * runtime. + */ + Class objectClass; + + /** + * The type encoding for the value of this property. This is the type as it + * would be returned by the \c \@encode() directive. + */ + char type[]; +} rac_propertyAttributes; + +/** + * Finds the instance method named \a aSelector on \a aClass and returns it, or + * returns \c NULL if no such instance method exists. Unlike \c + * class_getInstanceMethod(), this does not search superclasses. + * + * @note To get class methods in this manner, use a metaclass for \a aClass. + */ +Method rac_getImmediateInstanceMethod (Class aClass, SEL aSelector); + +/** + * Returns a pointer to a structure containing information about \a property. + * You must \c free() the returned pointer. Returns \c NULL if there is an error + * obtaining information from \a property. + */ +rac_propertyAttributes *rac_copyPropertyAttributes (objc_property_t property); diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACEXTRuntimeExtensions.m b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACEXTRuntimeExtensions.m new file mode 100644 index 00000000..2d2010ec --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACEXTRuntimeExtensions.m @@ -0,0 +1,232 @@ +// +// EXTRuntimeExtensions.m +// extobjc +// +// Created by Justin Spahr-Summers on 2011-03-05. +// Copyright (C) 2012 Justin Spahr-Summers. +// Released under the MIT license. +// + +#import "RACEXTRuntimeExtensions.h" +#import +#import +#import +#import +#import +#import +#import + +rac_propertyAttributes *rac_copyPropertyAttributes (objc_property_t property) { + const char * const attrString = property_getAttributes(property); + if (!attrString) { + fprintf(stderr, "ERROR: Could not get attribute string from property %s\n", property_getName(property)); + return NULL; + } + + if (attrString[0] != 'T') { + fprintf(stderr, "ERROR: Expected attribute string \"%s\" for property %s to start with 'T'\n", attrString, property_getName(property)); + return NULL; + } + + const char *typeString = attrString + 1; + const char *next = NSGetSizeAndAlignment(typeString, NULL, NULL); + if (!next) { + fprintf(stderr, "ERROR: Could not read past type in attribute string \"%s\" for property %s\n", attrString, property_getName(property)); + return NULL; + } + + size_t typeLength = (size_t)(next - typeString); + if (!typeLength) { + fprintf(stderr, "ERROR: Invalid type in attribute string \"%s\" for property %s\n", attrString, property_getName(property)); + return NULL; + } + + // allocate enough space for the structure and the type string (plus a NUL) + rac_propertyAttributes *attributes = calloc(1, sizeof(rac_propertyAttributes) + typeLength + 1); + if (!attributes) { + fprintf(stderr, "ERROR: Could not allocate rac_propertyAttributes structure for attribute string \"%s\" for property %s\n", attrString, property_getName(property)); + return NULL; + } + + // copy the type string + strncpy(attributes->type, typeString, typeLength); + attributes->type[typeLength] = '\0'; + + // if this is an object type, and immediately followed by a quoted string... + if (typeString[0] == *(@encode(id)) && typeString[1] == '"') { + // we should be able to extract a class name + const char *className = typeString + 2; + next = strchr(className, '"'); + + if (!next) { + fprintf(stderr, "ERROR: Could not read class name in attribute string \"%s\" for property %s\n", attrString, property_getName(property)); + return NULL; + } + + if (className != next) { + size_t classNameLength = (size_t)(next - className); + char trimmedName[classNameLength + 1]; + + strncpy(trimmedName, className, classNameLength); + trimmedName[classNameLength] = '\0'; + + // attempt to look up the class in the runtime + attributes->objectClass = objc_getClass(trimmedName); + } + } + + if (*next != '\0') { + // skip past any junk before the first flag + next = strchr(next, ','); + } + + while (next && *next == ',') { + char flag = next[1]; + next += 2; + + switch (flag) { + case '\0': + break; + + case 'R': + attributes->readonly = YES; + break; + + case 'C': + attributes->memoryManagementPolicy = rac_propertyMemoryManagementPolicyCopy; + break; + + case '&': + attributes->memoryManagementPolicy = rac_propertyMemoryManagementPolicyRetain; + break; + + case 'N': + attributes->nonatomic = YES; + break; + + case 'G': + case 'S': + { + const char *nextFlag = strchr(next, ','); + SEL name = NULL; + + if (!nextFlag) { + // assume that the rest of the string is the selector + const char *selectorString = next; + next = ""; + + name = sel_registerName(selectorString); + } else { + size_t selectorLength = (size_t)(nextFlag - next); + if (!selectorLength) { + fprintf(stderr, "ERROR: Found zero length selector name in attribute string \"%s\" for property %s\n", attrString, property_getName(property)); + goto errorOut; + } + + char selectorString[selectorLength + 1]; + + strncpy(selectorString, next, selectorLength); + selectorString[selectorLength] = '\0'; + + name = sel_registerName(selectorString); + next = nextFlag; + } + + if (flag == 'G') + attributes->getter = name; + else + attributes->setter = name; + } + + break; + + case 'D': + attributes->dynamic = YES; + attributes->ivar = NULL; + break; + + case 'V': + // assume that the rest of the string (if present) is the ivar name + if (*next == '\0') { + // if there's nothing there, let's assume this is dynamic + attributes->ivar = NULL; + } else { + attributes->ivar = next; + next = ""; + } + + break; + + case 'W': + attributes->weak = YES; + break; + + case 'P': + attributes->canBeCollected = YES; + break; + + case 't': + fprintf(stderr, "ERROR: Old-style type encoding is unsupported in attribute string \"%s\" for property %s\n", attrString, property_getName(property)); + + // skip over this type encoding + while (*next != ',' && *next != '\0') + ++next; + + break; + + default: + fprintf(stderr, "ERROR: Unrecognized attribute string flag '%c' in attribute string \"%s\" for property %s\n", flag, attrString, property_getName(property)); + } + } + + if (next && *next != '\0') { + fprintf(stderr, "Warning: Unparsed data \"%s\" in attribute string \"%s\" for property %s\n", next, attrString, property_getName(property)); + } + + if (!attributes->getter) { + // use the property name as the getter by default + attributes->getter = sel_registerName(property_getName(property)); + } + + if (!attributes->setter) { + const char *propertyName = property_getName(property); + size_t propertyNameLength = strlen(propertyName); + + // we want to transform the name to setProperty: style + size_t setterLength = propertyNameLength + 4; + + char setterName[setterLength + 1]; + strncpy(setterName, "set", 3); + strncpy(setterName + 3, propertyName, propertyNameLength); + + // capitalize property name for the setter + setterName[3] = (char)toupper(setterName[3]); + + setterName[setterLength - 1] = ':'; + setterName[setterLength] = '\0'; + + attributes->setter = sel_registerName(setterName); + } + + return attributes; + +errorOut: + free(attributes); + return NULL; +} + +Method rac_getImmediateInstanceMethod (Class aClass, SEL aSelector) { + unsigned methodCount = 0; + Method *methods = class_copyMethodList(aClass, &methodCount); + Method foundMethod = NULL; + + for (unsigned methodIndex = 0;methodIndex < methodCount;++methodIndex) { + if (method_getName(methods[methodIndex]) == aSelector) { + foundMethod = methods[methodIndex]; + break; + } + } + + free(methods); + return foundMethod; +} diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACEXTScope.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACEXTScope.h new file mode 100644 index 00000000..da24c149 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACEXTScope.h @@ -0,0 +1,101 @@ +// +// EXTScope.h +// extobjc +// +// Created by Justin Spahr-Summers on 2011-05-04. +// Copyright (C) 2012 Justin Spahr-Summers. +// Released under the MIT license. +// + +#import "RACmetamacros.h" + +/** + * \@onExit defines some code to be executed when the current scope exits. The + * code must be enclosed in braces and terminated with a semicolon, and will be + * executed regardless of how the scope is exited, including from exceptions, + * \c goto, \c return, \c break, and \c continue. + * + * Provided code will go into a block to be executed later. Keep this in mind as + * it pertains to memory management, restrictions on assignment, etc. Because + * the code is used within a block, \c return is a legal (though perhaps + * confusing) way to exit the cleanup block early. + * + * Multiple \@onExit statements in the same scope are executed in reverse + * lexical order. This helps when pairing resource acquisition with \@onExit + * statements, as it guarantees teardown in the opposite order of acquisition. + * + * @note This statement cannot be used within scopes defined without braces + * (like a one line \c if). In practice, this is not an issue, since \@onExit is + * a useless construct in such a case anyways. + */ +#define onExit \ + try {} @finally {} \ + __strong rac_cleanupBlock_t metamacro_concat(rac_exitBlock_, __LINE__) __attribute__((cleanup(rac_executeCleanupBlock), unused)) = ^ + +/** + * Creates \c __weak shadow variables for each of the variables provided as + * arguments, which can later be made strong again with #strongify. + * + * This is typically used to weakly reference variables in a block, but then + * ensure that the variables stay alive during the actual execution of the block + * (if they were live upon entry). + * + * See #strongify for an example of usage. + */ +#define weakify(...) \ + try {} @finally {} \ + metamacro_foreach_cxt(rac_weakify_,, __weak, __VA_ARGS__) + +/** + * Like #weakify, but uses \c __unsafe_unretained instead, for targets or + * classes that do not support weak references. + */ +#define unsafeify(...) \ + try {} @finally {} \ + metamacro_foreach_cxt(rac_weakify_,, __unsafe_unretained, __VA_ARGS__) + +/** + * Strongly references each of the variables provided as arguments, which must + * have previously been passed to #weakify. + * + * The strong references created will shadow the original variable names, such + * that the original names can be used without issue (and a significantly + * reduced risk of retain cycles) in the current scope. + * + * @code + + id foo = [[NSObject alloc] init]; + id bar = [[NSObject alloc] init]; + + @weakify(foo, bar); + + // this block will not keep 'foo' or 'bar' alive + BOOL (^matchesFooOrBar)(id) = ^ BOOL (id obj){ + // but now, upon entry, 'foo' and 'bar' will stay alive until the block has + // finished executing + @strongify(foo, bar); + + return [foo isEqual:obj] || [bar isEqual:obj]; + }; + + * @endcode + */ +#define strongify(...) \ + try {} @finally {} \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wshadow\"") \ + metamacro_foreach(rac_strongify_,, __VA_ARGS__) \ + _Pragma("clang diagnostic pop") + +/*** implementation details follow ***/ +typedef void (^rac_cleanupBlock_t)(); + +static inline void rac_executeCleanupBlock (__strong rac_cleanupBlock_t *block) { + (*block)(); +} + +#define rac_weakify_(INDEX, CONTEXT, VAR) \ + CONTEXT __typeof__(VAR) metamacro_concat(VAR, _weak_) = (VAR); + +#define rac_strongify_(INDEX, VAR) \ + __strong __typeof__(VAR) VAR = metamacro_concat(VAR, _weak_); diff --git a/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACmetamacros.h b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACmetamacros.h new file mode 100644 index 00000000..dc741009 --- /dev/null +++ b/Pods/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACmetamacros.h @@ -0,0 +1,670 @@ +/** + * Macros for metaprogramming + * ExtendedC + * + * Copyright (C) 2012 Justin Spahr-Summers + * Released under the MIT license + */ + +#ifndef EXTC_METAMACROS_H +#define EXTC_METAMACROS_H + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +/** + * Executes one or more expressions (which may have a void type, such as a call + * to a function that returns no value) and always returns true. + */ +#define metamacro_exprify(...) \ + ((__VA_ARGS__), true) + +/** + * Returns a string representation of VALUE after full macro expansion. + */ +#define metamacro_stringify(VALUE) \ + metamacro_stringify_(VALUE) + +/** + * Returns A and B concatenated after full macro expansion. + */ +#define metamacro_concat(A, B) \ + metamacro_concat_(A, B) + +/** + * Returns the Nth variadic argument (starting from zero). At least + * N + 1 variadic arguments must be given. N must be between zero and twenty, + * inclusive. + */ +#define metamacro_at(N, ...) \ + metamacro_concat(metamacro_at, N)(__VA_ARGS__) + +/** + * Returns the number of arguments (up to twenty) provided to the macro. At + * least one argument must be provided. + * + * Inspired by P99: http://p99.gforge.inria.fr + */ +#define metamacro_argcount(...) \ + metamacro_at(20, __VA_ARGS__, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1) + +/** + * Identical to #metamacro_foreach_cxt, except that no CONTEXT argument is + * given. Only the index and current argument will thus be passed to MACRO. + */ +#define metamacro_foreach(MACRO, SEP, ...) \ + metamacro_foreach_cxt(metamacro_foreach_iter, SEP, MACRO, __VA_ARGS__) + +/** + * For each consecutive variadic argument (up to twenty), MACRO is passed the + * zero-based index of the current argument, CONTEXT, and then the argument + * itself. The results of adjoining invocations of MACRO are then separated by + * SEP. + * + * Inspired by P99: http://p99.gforge.inria.fr + */ +#define metamacro_foreach_cxt(MACRO, SEP, CONTEXT, ...) \ + metamacro_concat(metamacro_foreach_cxt, metamacro_argcount(__VA_ARGS__))(MACRO, SEP, CONTEXT, __VA_ARGS__) + +/** + * Identical to #metamacro_foreach_cxt. This can be used when the former would + * fail due to recursive macro expansion. + */ +#define metamacro_foreach_cxt_recursive(MACRO, SEP, CONTEXT, ...) \ + metamacro_concat(metamacro_foreach_cxt_recursive, metamacro_argcount(__VA_ARGS__))(MACRO, SEP, CONTEXT, __VA_ARGS__) + +/** + * In consecutive order, appends each variadic argument (up to twenty) onto + * BASE. The resulting concatenations are then separated by SEP. + * + * This is primarily useful to manipulate a list of macro invocations into instead + * invoking a different, possibly related macro. + */ +#define metamacro_foreach_concat(BASE, SEP, ...) \ + metamacro_foreach_cxt(metamacro_foreach_concat_iter, SEP, BASE, __VA_ARGS__) + +/** + * Iterates COUNT times, each time invoking MACRO with the current index + * (starting at zero) and CONTEXT. The results of adjoining invocations of MACRO + * are then separated by SEP. + * + * COUNT must be an integer between zero and twenty, inclusive. + */ +#define metamacro_for_cxt(COUNT, MACRO, SEP, CONTEXT) \ + metamacro_concat(metamacro_for_cxt, COUNT)(MACRO, SEP, CONTEXT) + +/** + * Returns the first argument given. At least one argument must be provided. + * + * This is useful when implementing a variadic macro, where you may have only + * one variadic argument, but no way to retrieve it (for example, because \c ... + * always needs to match at least one argument). + * + * @code + +#define varmacro(...) \ + metamacro_head(__VA_ARGS__) + + * @endcode + */ +#define metamacro_head(...) \ + metamacro_head_(__VA_ARGS__, 0) + +/** + * Returns every argument except the first. At least two arguments must be + * provided. + */ +#define metamacro_tail(...) \ + metamacro_tail_(__VA_ARGS__) + +/** + * Returns the first N (up to twenty) variadic arguments as a new argument list. + * At least N variadic arguments must be provided. + */ +#define metamacro_take(N, ...) \ + metamacro_concat(metamacro_take, N)(__VA_ARGS__) + +/** + * Removes the first N (up to twenty) variadic arguments from the given argument + * list. At least N variadic arguments must be provided. + */ +#define metamacro_drop(N, ...) \ + metamacro_concat(metamacro_drop, N)(__VA_ARGS__) + +/** + * Decrements VAL, which must be a number between zero and twenty, inclusive. + * + * This is primarily useful when dealing with indexes and counts in + * metaprogramming. + */ +#define metamacro_dec(VAL) \ + metamacro_at(VAL, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19) + +/** + * Increments VAL, which must be a number between zero and twenty, inclusive. + * + * This is primarily useful when dealing with indexes and counts in + * metaprogramming. + */ +#define metamacro_inc(VAL) \ + metamacro_at(VAL, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21) + +/** + * If A is equal to B, the next argument list is expanded; otherwise, the + * argument list after that is expanded. A and B must be numbers between zero + * and twenty, inclusive. Additionally, B must be greater than or equal to A. + * + * @code + +// expands to true +metamacro_if_eq(0, 0)(true)(false) + +// expands to false +metamacro_if_eq(0, 1)(true)(false) + + * @endcode + * + * This is primarily useful when dealing with indexes and counts in + * metaprogramming. + */ +#define metamacro_if_eq(A, B) \ + metamacro_concat(metamacro_if_eq, A)(B) + +/** + * Identical to #metamacro_if_eq. This can be used when the former would fail + * due to recursive macro expansion. + */ +#define metamacro_if_eq_recursive(A, B) \ + metamacro_concat(metamacro_if_eq_recursive, A)(B) + +/** + * Returns 1 if N is an even number, or 0 otherwise. N must be between zero and + * twenty, inclusive. + * + * For the purposes of this test, zero is considered even. + */ +#define metamacro_is_even(N) \ + metamacro_at(N, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1) + +/** + * Returns the logical NOT of B, which must be the number zero or one. + */ +#define metamacro_not(B) \ + metamacro_at(B, 1, 0) + +// IMPLEMENTATION DETAILS FOLLOW! +// Do not write code that depends on anything below this line. +#define metamacro_stringify_(VALUE) # VALUE +#define metamacro_concat_(A, B) A ## B +#define metamacro_foreach_iter(INDEX, MACRO, ARG) MACRO(INDEX, ARG) +#define metamacro_head_(FIRST, ...) FIRST +#define metamacro_tail_(FIRST, ...) __VA_ARGS__ +#define metamacro_consume_(...) +#define metamacro_expand_(...) __VA_ARGS__ + +// implemented from scratch so that metamacro_concat() doesn't end up nesting +#define metamacro_foreach_concat_iter(INDEX, BASE, ARG) metamacro_foreach_concat_iter_(BASE, ARG) +#define metamacro_foreach_concat_iter_(BASE, ARG) BASE ## ARG + +// metamacro_at expansions +#define metamacro_at0(...) metamacro_head(__VA_ARGS__) +#define metamacro_at1(_0, ...) metamacro_head(__VA_ARGS__) +#define metamacro_at2(_0, _1, ...) metamacro_head(__VA_ARGS__) +#define metamacro_at3(_0, _1, _2, ...) metamacro_head(__VA_ARGS__) +#define metamacro_at4(_0, _1, _2, _3, ...) metamacro_head(__VA_ARGS__) +#define metamacro_at5(_0, _1, _2, _3, _4, ...) metamacro_head(__VA_ARGS__) +#define metamacro_at6(_0, _1, _2, _3, _4, _5, ...) metamacro_head(__VA_ARGS__) +#define metamacro_at7(_0, _1, _2, _3, _4, _5, _6, ...) metamacro_head(__VA_ARGS__) +#define metamacro_at8(_0, _1, _2, _3, _4, _5, _6, _7, ...) metamacro_head(__VA_ARGS__) +#define metamacro_at9(_0, _1, _2, _3, _4, _5, _6, _7, _8, ...) metamacro_head(__VA_ARGS__) +#define metamacro_at10(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, ...) metamacro_head(__VA_ARGS__) +#define metamacro_at11(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, ...) metamacro_head(__VA_ARGS__) +#define metamacro_at12(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, ...) metamacro_head(__VA_ARGS__) +#define metamacro_at13(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, ...) metamacro_head(__VA_ARGS__) +#define metamacro_at14(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, ...) metamacro_head(__VA_ARGS__) +#define metamacro_at15(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, ...) metamacro_head(__VA_ARGS__) +#define metamacro_at16(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, ...) metamacro_head(__VA_ARGS__) +#define metamacro_at17(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, ...) metamacro_head(__VA_ARGS__) +#define metamacro_at18(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, ...) metamacro_head(__VA_ARGS__) +#define metamacro_at19(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, ...) metamacro_head(__VA_ARGS__) +#define metamacro_at20(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, ...) metamacro_head(__VA_ARGS__) + +// metamacro_foreach_cxt expansions +#define metamacro_foreach_cxt0(MACRO, SEP, CONTEXT) +#define metamacro_foreach_cxt1(MACRO, SEP, CONTEXT, _0) MACRO(0, CONTEXT, _0) + +#define metamacro_foreach_cxt2(MACRO, SEP, CONTEXT, _0, _1) \ + metamacro_foreach_cxt1(MACRO, SEP, CONTEXT, _0) \ + SEP \ + MACRO(1, CONTEXT, _1) + +#define metamacro_foreach_cxt3(MACRO, SEP, CONTEXT, _0, _1, _2) \ + metamacro_foreach_cxt2(MACRO, SEP, CONTEXT, _0, _1) \ + SEP \ + MACRO(2, CONTEXT, _2) + +#define metamacro_foreach_cxt4(MACRO, SEP, CONTEXT, _0, _1, _2, _3) \ + metamacro_foreach_cxt3(MACRO, SEP, CONTEXT, _0, _1, _2) \ + SEP \ + MACRO(3, CONTEXT, _3) + +#define metamacro_foreach_cxt5(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4) \ + metamacro_foreach_cxt4(MACRO, SEP, CONTEXT, _0, _1, _2, _3) \ + SEP \ + MACRO(4, CONTEXT, _4) + +#define metamacro_foreach_cxt6(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5) \ + metamacro_foreach_cxt5(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4) \ + SEP \ + MACRO(5, CONTEXT, _5) + +#define metamacro_foreach_cxt7(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6) \ + metamacro_foreach_cxt6(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5) \ + SEP \ + MACRO(6, CONTEXT, _6) + +#define metamacro_foreach_cxt8(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7) \ + metamacro_foreach_cxt7(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6) \ + SEP \ + MACRO(7, CONTEXT, _7) + +#define metamacro_foreach_cxt9(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8) \ + metamacro_foreach_cxt8(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7) \ + SEP \ + MACRO(8, CONTEXT, _8) + +#define metamacro_foreach_cxt10(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9) \ + metamacro_foreach_cxt9(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8) \ + SEP \ + MACRO(9, CONTEXT, _9) + +#define metamacro_foreach_cxt11(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) \ + metamacro_foreach_cxt10(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9) \ + SEP \ + MACRO(10, CONTEXT, _10) + +#define metamacro_foreach_cxt12(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) \ + metamacro_foreach_cxt11(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) \ + SEP \ + MACRO(11, CONTEXT, _11) + +#define metamacro_foreach_cxt13(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) \ + metamacro_foreach_cxt12(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) \ + SEP \ + MACRO(12, CONTEXT, _12) + +#define metamacro_foreach_cxt14(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) \ + metamacro_foreach_cxt13(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) \ + SEP \ + MACRO(13, CONTEXT, _13) + +#define metamacro_foreach_cxt15(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) \ + metamacro_foreach_cxt14(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) \ + SEP \ + MACRO(14, CONTEXT, _14) + +#define metamacro_foreach_cxt16(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) \ + metamacro_foreach_cxt15(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) \ + SEP \ + MACRO(15, CONTEXT, _15) + +#define metamacro_foreach_cxt17(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16) \ + metamacro_foreach_cxt16(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) \ + SEP \ + MACRO(16, CONTEXT, _16) + +#define metamacro_foreach_cxt18(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17) \ + metamacro_foreach_cxt17(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16) \ + SEP \ + MACRO(17, CONTEXT, _17) + +#define metamacro_foreach_cxt19(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18) \ + metamacro_foreach_cxt18(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17) \ + SEP \ + MACRO(18, CONTEXT, _18) + +#define metamacro_foreach_cxt20(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19) \ + metamacro_foreach_cxt19(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18) \ + SEP \ + MACRO(19, CONTEXT, _19) + +// metamacro_foreach_cxt_recursive expansions +#define metamacro_foreach_cxt_recursive0(MACRO, SEP, CONTEXT) +#define metamacro_foreach_cxt_recursive1(MACRO, SEP, CONTEXT, _0) MACRO(0, CONTEXT, _0) + +#define metamacro_foreach_cxt_recursive2(MACRO, SEP, CONTEXT, _0, _1) \ + metamacro_foreach_cxt_recursive1(MACRO, SEP, CONTEXT, _0) \ + SEP \ + MACRO(1, CONTEXT, _1) + +#define metamacro_foreach_cxt_recursive3(MACRO, SEP, CONTEXT, _0, _1, _2) \ + metamacro_foreach_cxt_recursive2(MACRO, SEP, CONTEXT, _0, _1) \ + SEP \ + MACRO(2, CONTEXT, _2) + +#define metamacro_foreach_cxt_recursive4(MACRO, SEP, CONTEXT, _0, _1, _2, _3) \ + metamacro_foreach_cxt_recursive3(MACRO, SEP, CONTEXT, _0, _1, _2) \ + SEP \ + MACRO(3, CONTEXT, _3) + +#define metamacro_foreach_cxt_recursive5(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4) \ + metamacro_foreach_cxt_recursive4(MACRO, SEP, CONTEXT, _0, _1, _2, _3) \ + SEP \ + MACRO(4, CONTEXT, _4) + +#define metamacro_foreach_cxt_recursive6(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5) \ + metamacro_foreach_cxt_recursive5(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4) \ + SEP \ + MACRO(5, CONTEXT, _5) + +#define metamacro_foreach_cxt_recursive7(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6) \ + metamacro_foreach_cxt_recursive6(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5) \ + SEP \ + MACRO(6, CONTEXT, _6) + +#define metamacro_foreach_cxt_recursive8(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7) \ + metamacro_foreach_cxt_recursive7(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6) \ + SEP \ + MACRO(7, CONTEXT, _7) + +#define metamacro_foreach_cxt_recursive9(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8) \ + metamacro_foreach_cxt_recursive8(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7) \ + SEP \ + MACRO(8, CONTEXT, _8) + +#define metamacro_foreach_cxt_recursive10(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9) \ + metamacro_foreach_cxt_recursive9(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8) \ + SEP \ + MACRO(9, CONTEXT, _9) + +#define metamacro_foreach_cxt_recursive11(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) \ + metamacro_foreach_cxt_recursive10(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9) \ + SEP \ + MACRO(10, CONTEXT, _10) + +#define metamacro_foreach_cxt_recursive12(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) \ + metamacro_foreach_cxt_recursive11(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) \ + SEP \ + MACRO(11, CONTEXT, _11) + +#define metamacro_foreach_cxt_recursive13(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) \ + metamacro_foreach_cxt_recursive12(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) \ + SEP \ + MACRO(12, CONTEXT, _12) + +#define metamacro_foreach_cxt_recursive14(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) \ + metamacro_foreach_cxt_recursive13(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) \ + SEP \ + MACRO(13, CONTEXT, _13) + +#define metamacro_foreach_cxt_recursive15(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) \ + metamacro_foreach_cxt_recursive14(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) \ + SEP \ + MACRO(14, CONTEXT, _14) + +#define metamacro_foreach_cxt_recursive16(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) \ + metamacro_foreach_cxt_recursive15(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) \ + SEP \ + MACRO(15, CONTEXT, _15) + +#define metamacro_foreach_cxt_recursive17(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16) \ + metamacro_foreach_cxt_recursive16(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) \ + SEP \ + MACRO(16, CONTEXT, _16) + +#define metamacro_foreach_cxt_recursive18(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17) \ + metamacro_foreach_cxt_recursive17(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16) \ + SEP \ + MACRO(17, CONTEXT, _17) + +#define metamacro_foreach_cxt_recursive19(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18) \ + metamacro_foreach_cxt_recursive18(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17) \ + SEP \ + MACRO(18, CONTEXT, _18) + +#define metamacro_foreach_cxt_recursive20(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19) \ + metamacro_foreach_cxt_recursive19(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18) \ + SEP \ + MACRO(19, CONTEXT, _19) + +// metamacro_for_cxt expansions +#define metamacro_for_cxt0(MACRO, SEP, CONTEXT) +#define metamacro_for_cxt1(MACRO, SEP, CONTEXT) MACRO(0, CONTEXT) + +#define metamacro_for_cxt2(MACRO, SEP, CONTEXT) \ + metamacro_for_cxt1(MACRO, SEP, CONTEXT) \ + SEP \ + MACRO(1, CONTEXT) + +#define metamacro_for_cxt3(MACRO, SEP, CONTEXT) \ + metamacro_for_cxt2(MACRO, SEP, CONTEXT) \ + SEP \ + MACRO(2, CONTEXT) + +#define metamacro_for_cxt4(MACRO, SEP, CONTEXT) \ + metamacro_for_cxt3(MACRO, SEP, CONTEXT) \ + SEP \ + MACRO(3, CONTEXT) + +#define metamacro_for_cxt5(MACRO, SEP, CONTEXT) \ + metamacro_for_cxt4(MACRO, SEP, CONTEXT) \ + SEP \ + MACRO(4, CONTEXT) + +#define metamacro_for_cxt6(MACRO, SEP, CONTEXT) \ + metamacro_for_cxt5(MACRO, SEP, CONTEXT) \ + SEP \ + MACRO(5, CONTEXT) + +#define metamacro_for_cxt7(MACRO, SEP, CONTEXT) \ + metamacro_for_cxt6(MACRO, SEP, CONTEXT) \ + SEP \ + MACRO(6, CONTEXT) + +#define metamacro_for_cxt8(MACRO, SEP, CONTEXT) \ + metamacro_for_cxt7(MACRO, SEP, CONTEXT) \ + SEP \ + MACRO(7, CONTEXT) + +#define metamacro_for_cxt9(MACRO, SEP, CONTEXT) \ + metamacro_for_cxt8(MACRO, SEP, CONTEXT) \ + SEP \ + MACRO(8, CONTEXT) + +#define metamacro_for_cxt10(MACRO, SEP, CONTEXT) \ + metamacro_for_cxt9(MACRO, SEP, CONTEXT) \ + SEP \ + MACRO(9, CONTEXT) + +#define metamacro_for_cxt11(MACRO, SEP, CONTEXT) \ + metamacro_for_cxt10(MACRO, SEP, CONTEXT) \ + SEP \ + MACRO(10, CONTEXT) + +#define metamacro_for_cxt12(MACRO, SEP, CONTEXT) \ + metamacro_for_cxt11(MACRO, SEP, CONTEXT) \ + SEP \ + MACRO(11, CONTEXT) + +#define metamacro_for_cxt13(MACRO, SEP, CONTEXT) \ + metamacro_for_cxt12(MACRO, SEP, CONTEXT) \ + SEP \ + MACRO(12, CONTEXT) + +#define metamacro_for_cxt14(MACRO, SEP, CONTEXT) \ + metamacro_for_cxt13(MACRO, SEP, CONTEXT) \ + SEP \ + MACRO(13, CONTEXT) + +#define metamacro_for_cxt15(MACRO, SEP, CONTEXT) \ + metamacro_for_cxt14(MACRO, SEP, CONTEXT) \ + SEP \ + MACRO(14, CONTEXT) + +#define metamacro_for_cxt16(MACRO, SEP, CONTEXT) \ + metamacro_for_cxt15(MACRO, SEP, CONTEXT) \ + SEP \ + MACRO(15, CONTEXT) + +#define metamacro_for_cxt17(MACRO, SEP, CONTEXT) \ + metamacro_for_cxt16(MACRO, SEP, CONTEXT) \ + SEP \ + MACRO(16, CONTEXT) + +#define metamacro_for_cxt18(MACRO, SEP, CONTEXT) \ + metamacro_for_cxt17(MACRO, SEP, CONTEXT) \ + SEP \ + MACRO(17, CONTEXT) + +#define metamacro_for_cxt19(MACRO, SEP, CONTEXT) \ + metamacro_for_cxt18(MACRO, SEP, CONTEXT) \ + SEP \ + MACRO(18, CONTEXT) + +#define metamacro_for_cxt20(MACRO, SEP, CONTEXT) \ + metamacro_for_cxt19(MACRO, SEP, CONTEXT) \ + SEP \ + MACRO(19, CONTEXT) + +// metamacro_if_eq expansions +#define metamacro_if_eq0(VALUE) \ + metamacro_concat(metamacro_if_eq0_, VALUE) + +#define metamacro_if_eq0_0(...) __VA_ARGS__ metamacro_consume_ +#define metamacro_if_eq0_1(...) metamacro_expand_ +#define metamacro_if_eq0_2(...) metamacro_expand_ +#define metamacro_if_eq0_3(...) metamacro_expand_ +#define metamacro_if_eq0_4(...) metamacro_expand_ +#define metamacro_if_eq0_5(...) metamacro_expand_ +#define metamacro_if_eq0_6(...) metamacro_expand_ +#define metamacro_if_eq0_7(...) metamacro_expand_ +#define metamacro_if_eq0_8(...) metamacro_expand_ +#define metamacro_if_eq0_9(...) metamacro_expand_ +#define metamacro_if_eq0_10(...) metamacro_expand_ +#define metamacro_if_eq0_11(...) metamacro_expand_ +#define metamacro_if_eq0_12(...) metamacro_expand_ +#define metamacro_if_eq0_13(...) metamacro_expand_ +#define metamacro_if_eq0_14(...) metamacro_expand_ +#define metamacro_if_eq0_15(...) metamacro_expand_ +#define metamacro_if_eq0_16(...) metamacro_expand_ +#define metamacro_if_eq0_17(...) metamacro_expand_ +#define metamacro_if_eq0_18(...) metamacro_expand_ +#define metamacro_if_eq0_19(...) metamacro_expand_ +#define metamacro_if_eq0_20(...) metamacro_expand_ + +#define metamacro_if_eq1(VALUE) metamacro_if_eq0(metamacro_dec(VALUE)) +#define metamacro_if_eq2(VALUE) metamacro_if_eq1(metamacro_dec(VALUE)) +#define metamacro_if_eq3(VALUE) metamacro_if_eq2(metamacro_dec(VALUE)) +#define metamacro_if_eq4(VALUE) metamacro_if_eq3(metamacro_dec(VALUE)) +#define metamacro_if_eq5(VALUE) metamacro_if_eq4(metamacro_dec(VALUE)) +#define metamacro_if_eq6(VALUE) metamacro_if_eq5(metamacro_dec(VALUE)) +#define metamacro_if_eq7(VALUE) metamacro_if_eq6(metamacro_dec(VALUE)) +#define metamacro_if_eq8(VALUE) metamacro_if_eq7(metamacro_dec(VALUE)) +#define metamacro_if_eq9(VALUE) metamacro_if_eq8(metamacro_dec(VALUE)) +#define metamacro_if_eq10(VALUE) metamacro_if_eq9(metamacro_dec(VALUE)) +#define metamacro_if_eq11(VALUE) metamacro_if_eq10(metamacro_dec(VALUE)) +#define metamacro_if_eq12(VALUE) metamacro_if_eq11(metamacro_dec(VALUE)) +#define metamacro_if_eq13(VALUE) metamacro_if_eq12(metamacro_dec(VALUE)) +#define metamacro_if_eq14(VALUE) metamacro_if_eq13(metamacro_dec(VALUE)) +#define metamacro_if_eq15(VALUE) metamacro_if_eq14(metamacro_dec(VALUE)) +#define metamacro_if_eq16(VALUE) metamacro_if_eq15(metamacro_dec(VALUE)) +#define metamacro_if_eq17(VALUE) metamacro_if_eq16(metamacro_dec(VALUE)) +#define metamacro_if_eq18(VALUE) metamacro_if_eq17(metamacro_dec(VALUE)) +#define metamacro_if_eq19(VALUE) metamacro_if_eq18(metamacro_dec(VALUE)) +#define metamacro_if_eq20(VALUE) metamacro_if_eq19(metamacro_dec(VALUE)) + +// metamacro_if_eq_recursive expansions +#define metamacro_if_eq_recursive0(VALUE) \ + metamacro_concat(metamacro_if_eq_recursive0_, VALUE) + +#define metamacro_if_eq_recursive0_0(...) __VA_ARGS__ metamacro_consume_ +#define metamacro_if_eq_recursive0_1(...) metamacro_expand_ +#define metamacro_if_eq_recursive0_2(...) metamacro_expand_ +#define metamacro_if_eq_recursive0_3(...) metamacro_expand_ +#define metamacro_if_eq_recursive0_4(...) metamacro_expand_ +#define metamacro_if_eq_recursive0_5(...) metamacro_expand_ +#define metamacro_if_eq_recursive0_6(...) metamacro_expand_ +#define metamacro_if_eq_recursive0_7(...) metamacro_expand_ +#define metamacro_if_eq_recursive0_8(...) metamacro_expand_ +#define metamacro_if_eq_recursive0_9(...) metamacro_expand_ +#define metamacro_if_eq_recursive0_10(...) metamacro_expand_ +#define metamacro_if_eq_recursive0_11(...) metamacro_expand_ +#define metamacro_if_eq_recursive0_12(...) metamacro_expand_ +#define metamacro_if_eq_recursive0_13(...) metamacro_expand_ +#define metamacro_if_eq_recursive0_14(...) metamacro_expand_ +#define metamacro_if_eq_recursive0_15(...) metamacro_expand_ +#define metamacro_if_eq_recursive0_16(...) metamacro_expand_ +#define metamacro_if_eq_recursive0_17(...) metamacro_expand_ +#define metamacro_if_eq_recursive0_18(...) metamacro_expand_ +#define metamacro_if_eq_recursive0_19(...) metamacro_expand_ +#define metamacro_if_eq_recursive0_20(...) metamacro_expand_ + +#define metamacro_if_eq_recursive1(VALUE) metamacro_if_eq_recursive0(metamacro_dec(VALUE)) +#define metamacro_if_eq_recursive2(VALUE) metamacro_if_eq_recursive1(metamacro_dec(VALUE)) +#define metamacro_if_eq_recursive3(VALUE) metamacro_if_eq_recursive2(metamacro_dec(VALUE)) +#define metamacro_if_eq_recursive4(VALUE) metamacro_if_eq_recursive3(metamacro_dec(VALUE)) +#define metamacro_if_eq_recursive5(VALUE) metamacro_if_eq_recursive4(metamacro_dec(VALUE)) +#define metamacro_if_eq_recursive6(VALUE) metamacro_if_eq_recursive5(metamacro_dec(VALUE)) +#define metamacro_if_eq_recursive7(VALUE) metamacro_if_eq_recursive6(metamacro_dec(VALUE)) +#define metamacro_if_eq_recursive8(VALUE) metamacro_if_eq_recursive7(metamacro_dec(VALUE)) +#define metamacro_if_eq_recursive9(VALUE) metamacro_if_eq_recursive8(metamacro_dec(VALUE)) +#define metamacro_if_eq_recursive10(VALUE) metamacro_if_eq_recursive9(metamacro_dec(VALUE)) +#define metamacro_if_eq_recursive11(VALUE) metamacro_if_eq_recursive10(metamacro_dec(VALUE)) +#define metamacro_if_eq_recursive12(VALUE) metamacro_if_eq_recursive11(metamacro_dec(VALUE)) +#define metamacro_if_eq_recursive13(VALUE) metamacro_if_eq_recursive12(metamacro_dec(VALUE)) +#define metamacro_if_eq_recursive14(VALUE) metamacro_if_eq_recursive13(metamacro_dec(VALUE)) +#define metamacro_if_eq_recursive15(VALUE) metamacro_if_eq_recursive14(metamacro_dec(VALUE)) +#define metamacro_if_eq_recursive16(VALUE) metamacro_if_eq_recursive15(metamacro_dec(VALUE)) +#define metamacro_if_eq_recursive17(VALUE) metamacro_if_eq_recursive16(metamacro_dec(VALUE)) +#define metamacro_if_eq_recursive18(VALUE) metamacro_if_eq_recursive17(metamacro_dec(VALUE)) +#define metamacro_if_eq_recursive19(VALUE) metamacro_if_eq_recursive18(metamacro_dec(VALUE)) +#define metamacro_if_eq_recursive20(VALUE) metamacro_if_eq_recursive19(metamacro_dec(VALUE)) + +// metamacro_take expansions +#define metamacro_take0(...) +#define metamacro_take1(...) metamacro_head(__VA_ARGS__) +#define metamacro_take2(...) metamacro_head(__VA_ARGS__), metamacro_take1(metamacro_tail(__VA_ARGS__)) +#define metamacro_take3(...) metamacro_head(__VA_ARGS__), metamacro_take2(metamacro_tail(__VA_ARGS__)) +#define metamacro_take4(...) metamacro_head(__VA_ARGS__), metamacro_take3(metamacro_tail(__VA_ARGS__)) +#define metamacro_take5(...) metamacro_head(__VA_ARGS__), metamacro_take4(metamacro_tail(__VA_ARGS__)) +#define metamacro_take6(...) metamacro_head(__VA_ARGS__), metamacro_take5(metamacro_tail(__VA_ARGS__)) +#define metamacro_take7(...) metamacro_head(__VA_ARGS__), metamacro_take6(metamacro_tail(__VA_ARGS__)) +#define metamacro_take8(...) metamacro_head(__VA_ARGS__), metamacro_take7(metamacro_tail(__VA_ARGS__)) +#define metamacro_take9(...) metamacro_head(__VA_ARGS__), metamacro_take8(metamacro_tail(__VA_ARGS__)) +#define metamacro_take10(...) metamacro_head(__VA_ARGS__), metamacro_take9(metamacro_tail(__VA_ARGS__)) +#define metamacro_take11(...) metamacro_head(__VA_ARGS__), metamacro_take10(metamacro_tail(__VA_ARGS__)) +#define metamacro_take12(...) metamacro_head(__VA_ARGS__), metamacro_take11(metamacro_tail(__VA_ARGS__)) +#define metamacro_take13(...) metamacro_head(__VA_ARGS__), metamacro_take12(metamacro_tail(__VA_ARGS__)) +#define metamacro_take14(...) metamacro_head(__VA_ARGS__), metamacro_take13(metamacro_tail(__VA_ARGS__)) +#define metamacro_take15(...) metamacro_head(__VA_ARGS__), metamacro_take14(metamacro_tail(__VA_ARGS__)) +#define metamacro_take16(...) metamacro_head(__VA_ARGS__), metamacro_take15(metamacro_tail(__VA_ARGS__)) +#define metamacro_take17(...) metamacro_head(__VA_ARGS__), metamacro_take16(metamacro_tail(__VA_ARGS__)) +#define metamacro_take18(...) metamacro_head(__VA_ARGS__), metamacro_take17(metamacro_tail(__VA_ARGS__)) +#define metamacro_take19(...) metamacro_head(__VA_ARGS__), metamacro_take18(metamacro_tail(__VA_ARGS__)) +#define metamacro_take20(...) metamacro_head(__VA_ARGS__), metamacro_take19(metamacro_tail(__VA_ARGS__)) + +// metamacro_drop expansions +#define metamacro_drop0(...) __VA_ARGS__ +#define metamacro_drop1(...) metamacro_tail(__VA_ARGS__) +#define metamacro_drop2(...) metamacro_drop1(metamacro_tail(__VA_ARGS__)) +#define metamacro_drop3(...) metamacro_drop2(metamacro_tail(__VA_ARGS__)) +#define metamacro_drop4(...) metamacro_drop3(metamacro_tail(__VA_ARGS__)) +#define metamacro_drop5(...) metamacro_drop4(metamacro_tail(__VA_ARGS__)) +#define metamacro_drop6(...) metamacro_drop5(metamacro_tail(__VA_ARGS__)) +#define metamacro_drop7(...) metamacro_drop6(metamacro_tail(__VA_ARGS__)) +#define metamacro_drop8(...) metamacro_drop7(metamacro_tail(__VA_ARGS__)) +#define metamacro_drop9(...) metamacro_drop8(metamacro_tail(__VA_ARGS__)) +#define metamacro_drop10(...) metamacro_drop9(metamacro_tail(__VA_ARGS__)) +#define metamacro_drop11(...) metamacro_drop10(metamacro_tail(__VA_ARGS__)) +#define metamacro_drop12(...) metamacro_drop11(metamacro_tail(__VA_ARGS__)) +#define metamacro_drop13(...) metamacro_drop12(metamacro_tail(__VA_ARGS__)) +#define metamacro_drop14(...) metamacro_drop13(metamacro_tail(__VA_ARGS__)) +#define metamacro_drop15(...) metamacro_drop14(metamacro_tail(__VA_ARGS__)) +#define metamacro_drop16(...) metamacro_drop15(metamacro_tail(__VA_ARGS__)) +#define metamacro_drop17(...) metamacro_drop16(metamacro_tail(__VA_ARGS__)) +#define metamacro_drop18(...) metamacro_drop17(metamacro_tail(__VA_ARGS__)) +#define metamacro_drop19(...) metamacro_drop18(metamacro_tail(__VA_ARGS__)) +#define metamacro_drop20(...) metamacro_drop19(metamacro_tail(__VA_ARGS__)) + +#endif diff --git a/libPusher.xcodeproj/project.pbxproj b/libPusher.xcodeproj/project.pbxproj index 6e2d6259..e235e940 100755 --- a/libPusher.xcodeproj/project.pbxproj +++ b/libPusher.xcodeproj/project.pbxproj @@ -54,6 +54,8 @@ A37E167414E572C900DCA3A6 /* PTPusherMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = A37E167314E572C900DCA3A6 /* PTPusherMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; A394E6F118451CD3004C70A2 /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A3A9F9591496E96100F83617 /* SenTestingKit.framework */; }; A394E6F218451CFE004C70A2 /* PTPusherSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = A394E6EF18451C99004C70A2 /* PTPusherSpec.m */; }; + A394E6F918463DFA004C70A2 /* PTPusherChannel+ReactiveExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = A394E6F718463DFA004C70A2 /* PTPusherChannel+ReactiveExtensions.h */; }; + A394E6FA18463DFA004C70A2 /* PTPusherChannel+ReactiveExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = A394E6F818463DFA004C70A2 /* PTPusherChannel+ReactiveExtensions.m */; }; A39E238913F7E6AB0083CAD7 /* PusherPresenceEventsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A39E238813F7E6AB0083CAD7 /* PusherPresenceEventsViewController.m */; }; A3A1A149115814F7001EF877 /* OCHamcrest.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = A3A1A111115814D0001EF877 /* OCHamcrest.framework */; }; A3A1A20111581782001EF877 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A3D1D0B51157CCDE009A12AD /* CFNetwork.framework */; }; @@ -171,6 +173,8 @@ A37E160714E4C87500DCA3A6 /* libicucore.dylib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "compiled.mach-o.dylib"; name = libicucore.dylib; path = usr/lib/libicucore.dylib; sourceTree = SDKROOT; }; A37E167314E572C900DCA3A6 /* PTPusherMacros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTPusherMacros.h; sourceTree = ""; }; A394E6EF18451C99004C70A2 /* PTPusherSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PTPusherSpec.m; sourceTree = ""; }; + A394E6F718463DFA004C70A2 /* PTPusherChannel+ReactiveExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "PTPusherChannel+ReactiveExtensions.h"; sourceTree = ""; }; + A394E6F818463DFA004C70A2 /* PTPusherChannel+ReactiveExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "PTPusherChannel+ReactiveExtensions.m"; sourceTree = ""; }; A39E238613F7E3FD0083CAD7 /* PTPusherErrors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTPusherErrors.h; sourceTree = ""; }; A39E238713F7E6AB0083CAD7 /* PusherPresenceEventsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PusherPresenceEventsViewController.h; sourceTree = ""; }; A39E238813F7E6AB0083CAD7 /* PusherPresenceEventsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PusherPresenceEventsViewController.m; sourceTree = ""; }; @@ -327,6 +331,7 @@ isa = PBXGroup; children = ( A3D1D2711157F961009A12AD /* Sample Application */, + A394E6F318463D9C004C70A2 /* ReactiveExtensions */, 080E96DDFE201D6D7F000001 /* Library */, A3A19FB211580DC8001EF877 /* Specs */, A3A9F95D1496E96100F83617 /* Functional Specs */, @@ -402,6 +407,15 @@ name = "REST API Client"; sourceTree = ""; }; + A394E6F318463D9C004C70A2 /* ReactiveExtensions */ = { + isa = PBXGroup; + children = ( + A394E6F718463DFA004C70A2 /* PTPusherChannel+ReactiveExtensions.h */, + A394E6F818463DFA004C70A2 /* PTPusherChannel+ReactiveExtensions.m */, + ); + path = ReactiveExtensions; + sourceTree = ""; + }; A3A19FB211580DC8001EF877 /* Specs */ = { isa = PBXGroup; children = ( @@ -513,6 +527,7 @@ A3D1D2C911580162009A12AD /* PTPusher.h in Headers */, A3D1D2CB11580162009A12AD /* PTPusherEvent.h in Headers */, A3FE429E11811EEE009CF5D7 /* NSString+Hashing.h in Headers */, + A394E6F918463DFA004C70A2 /* PTPusherChannel+ReactiveExtensions.h in Headers */, A35281D013F721A8000687C0 /* PTPusherConnection.h in Headers */, A35281D313F72E03000687C0 /* PTPusherEventPublisher.h in Headers */, A35281D613F736DF000687C0 /* PTPusherEventDispatcher.h in Headers */, @@ -868,6 +883,7 @@ buildActionMask = 2147483647; files = ( A3FE44E71181C3C5009CF5D7 /* NSDictionary+QueryString.m in Sources */, + A394E6FA18463DFA004C70A2 /* PTPusherChannel+ReactiveExtensions.m in Sources */, A3D1D2CA11580162009A12AD /* PTPusher.m in Sources */, A3D1D2CC11580162009A12AD /* PTPusherEvent.m in Sources */, A3FE429F11811EEE009CF5D7 /* NSString+Hashing.m in Sources */, From 761d807f66c0c37f658e6f69d052c1ac9333c866 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Wed, 27 Nov 2013 15:01:48 +0000 Subject: [PATCH 65/88] Add retina launch image to sample app. --- Default-568h@2x.png | Bin 0 -> 18594 bytes .../xcschemes/xcschememanagement.plist | 38 +++++++++++++++++- libPusher.xcodeproj/project.pbxproj | 4 ++ 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 Default-568h@2x.png diff --git a/Default-568h@2x.png b/Default-568h@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0891b7aabfcf3422423b109c8beed2bab838c607 GIT binary patch literal 18594 zcmeI4X;f257Jx&9fS`ixvS;&$x8J@slQFSel)6zJN=?13FB7H(lQjRkSy8x_-S~tvu2gzn1oS+dLcF#eqtq$ z%tf9TTvX?`)R@}3uBI;jzS-=ZR-Td&MHaS&;!0?Ni*#$#`n*~CcQK)Q9vAQ~TUpnI!j)a2biYK^R)M~A5wUDZhx?ULMX z3x1P&qt=trOY6P2U67L=m=U?F|5#Uj(eCueNTZaHs_ceWiHeET+j+tp3Jt9g(ekqP z2WOvfR{qV+9r+o4J5?qK>7;;^+I7tGv-i)es$X_D=EoKF+S?zsyj^oRFElP}c}JT< zd8SUs-?O?}2YD#ngKbnHgzHBcboxK_2r9l(?eNCl-pEzkJm}fY?WC*jnS?VBE4EpY zO$fEejz6fU;W2Kl>JeQBZBl-%Irg`obSlg*@4QB;Dd1H7^Oi5wvt4d{RZ!8Og?^aE z)k0$1g+V3fd(gdQ3d&q2q-FL*uy#}|bc^=VhFsl0jBgUGJ+-s3U8MK9A!YJJMxpci z5hJ%|{DwV48fZn0{n5l$N_KcSb#NKE4plB`9I6Zt=Z!~-zw0{9tg$L&Ju1F0X)Cy8 zKF;(&lJ>x)Jw(=;p~sF(Sd9VWGwFE2rnyS9!f^DZ8+aCLq zQ};>lcJ1GDLqjm6Hd>|Eabno@P`~Bn(~6^aD_#yoEH(a?Nm1S<;S+hSxI5d16^<1lEM3NPFi zkqPrpL)+ zgnseFikg`gJVBha1&7C4;O6>h=dt~`ND+;Zd?W(4v2JIb7Pt>Td42%M-Ju-XAH#Pns762L}K3 zDhvsRqN0Ni(1UrishD2YvV?4*h2iFj$+&N||Fn$4n|^NSU+o?~jq`0jVQt8T9l{7b zXiwwODFh2V!Q6sqP9S>WH$oOf$N~=d0-bqTlD61!=`&0eAP-F>XN?*|gtOXX{ zQVTWyYo4ZK0GAw!GHf|pz9`D;-bbb*5LBX*{bnz|+)$@&P9|ORM2o?95{;ejvo&r- zq8cBhTN6nn)7~W>54U)%-F_-b?YKdfk5I8MHcuzBD5)!;yv#Z&R&^y=@=>VTIMy#r zX&U<=BsPkdqcMe<_}2+>H%XKyrr5ZR8_KVe>ZqYN z^=^~TFD};;rHJ$U;{~w^hYojl4hRI@SH$^K{YEo=sg)WY87r!*7blQK&qnpDo0`Vn zkl)9u9g=mCh&ZCJS(L4yN3k0kQ zuvg$h2KEEk51T+O0JQ+r0`R>g{jvqM0Mr6d3qUOZwE!?PI7HY@CE|dr sfw?Q;rAv?G4&^^8-z_>&sWXMxvD*gPOU4CBe-*@OtE+wfmVJNyHv)PfH~;_u literal 0 HcmV?d00001 diff --git a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/xcschememanagement.plist b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/xcschememanagement.plist index dcae5f3e..99b5e2c9 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/xcschememanagement.plist @@ -41,6 +41,42 @@ SuppressBuildableAutocreation - + + 0402D00C4DFB42199217841D + + primary + + + 063659C829454C82A619E4F8 + + primary + + + 5BF559B20D784F7096C0D5FF + + primary + + + 6CAA6E31029C41429D0B0213 + + primary + + + 8024D3DAD4AE415E897DC585 + + primary + + + 9A6B6BFEB33144239FDB185C + + primary + + + EA2B21702FD443F39A8DE00E + + primary + + + diff --git a/libPusher.xcodeproj/project.pbxproj b/libPusher.xcodeproj/project.pbxproj index e235e940..06e33e86 100755 --- a/libPusher.xcodeproj/project.pbxproj +++ b/libPusher.xcodeproj/project.pbxproj @@ -93,6 +93,7 @@ A3D1D2CA11580162009A12AD /* PTPusher.m in Sources */ = {isa = PBXBuildFile; fileRef = A3D1D28F1157FA4C009A12AD /* PTPusher.m */; }; A3D1D2CB11580162009A12AD /* PTPusherEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = A3D1D2901157FA4C009A12AD /* PTPusherEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; A3D1D2CC11580162009A12AD /* PTPusherEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = A3D1D2911157FA4C009A12AD /* PTPusherEvent.m */; }; + A3E5CBF5184640C3006A54DD /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = A3E5CBF4184640C3006A54DD /* Default-568h@2x.png */; }; A3F032471822CC8A00976DA0 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F700C4637DC43EFA335D40F /* libPods.a */; }; A3FE41CB11811161009CF5D7 /* NewEventViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A3FE41C911811161009CF5D7 /* NewEventViewController.m */; }; A3FE41CC11811161009CF5D7 /* NewEventViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = A3FE41CA11811161009CF5D7 /* NewEventViewController.xib */; }; @@ -216,6 +217,7 @@ A3D1D2911157FA4C009A12AD /* PTPusherEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PTPusherEvent.m; sourceTree = ""; }; A3D1D29B1157FA80009A12AD /* libPusher-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "libPusher-Info.plist"; sourceTree = ""; }; A3D1D2B71158013F009A12AD /* libPusher.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPusher.a; sourceTree = BUILT_PRODUCTS_DIR; }; + A3E5CBF4184640C3006A54DD /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; A3FE41C811811161009CF5D7 /* NewEventViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NewEventViewController.h; sourceTree = ""; }; A3FE41C911811161009CF5D7 /* NewEventViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NewEventViewController.m; sourceTree = ""; }; A3FE41CA11811161009CF5D7 /* NewEventViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = NewEventViewController.xib; path = Sample/Classes/NewEventViewController.xib; sourceTree = ""; }; @@ -330,6 +332,7 @@ 29B97314FDCFA39411CA2CEA /* CustomTemplate */ = { isa = PBXGroup; children = ( + A3E5CBF4184640C3006A54DD /* Default-568h@2x.png */, A3D1D2711157F961009A12AD /* Sample Application */, A394E6F318463D9C004C70A2 /* ReactiveExtensions */, 080E96DDFE201D6D7F000001 /* Library */, @@ -669,6 +672,7 @@ buildActionMask = 2147483647; files = ( A3D1D2891157FA30009A12AD /* MainWindow.xib in Resources */, + A3E5CBF5184640C3006A54DD /* Default-568h@2x.png in Resources */, A3D1D28B1157FA30009A12AD /* PusherEventsViewController.xib in Resources */, A3FE41CC11811161009CF5D7 /* NewEventViewController.xib in Resources */, ); From 899c5884ec853c19e74c7ca2ee4139f2fe9cb038 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Wed, 27 Nov 2013 15:03:02 +0000 Subject: [PATCH 66/88] Fix deprecated API calls. --- Sample/Classes/NewEventViewController.m | 2 +- Sample/Classes/PusherEventsViewController.m | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Sample/Classes/NewEventViewController.m b/Sample/Classes/NewEventViewController.m index 9a923f84..ee316a4e 100644 --- a/Sample/Classes/NewEventViewController.m +++ b/Sample/Classes/NewEventViewController.m @@ -44,7 +44,7 @@ - (IBAction)sendEvent:(id)sender; - (IBAction)cancel:(id)sender { - [self dismissModalViewControllerAnimated:YES]; + [self dismissViewControllerAnimated:YES completion:nil]; } @end diff --git a/Sample/Classes/PusherEventsViewController.m b/Sample/Classes/PusherEventsViewController.m index db20f90e..001106c7 100644 --- a/Sample/Classes/PusherEventsViewController.m +++ b/Sample/Classes/PusherEventsViewController.m @@ -73,7 +73,7 @@ - (void)presentNewEventScreen; { NewEventViewController *newEventController = [[NewEventViewController alloc] init]; newEventController.delegate = self; - [self presentModalViewController:newEventController animated:YES]; + [self presentViewController:newEventController animated:YES completion:nil]; } - (void)sendEventWithMessage:(NSString *)message; @@ -83,7 +83,7 @@ - (void)sendEventWithMessage:(NSString *)message; // send the event after a short delay, wait for modal view to disappear [self performSelector:@selector(sendEvent:) withObject:payload afterDelay:0.3]; - [self dismissModalViewControllerAnimated:YES]; + [self dismissViewControllerAnimated:YES completion:nil]; } - (void)sendEvent:(id)payload; From 662d172eb42da03a7d076e963e38441334fcc6df Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Wed, 27 Nov 2013 15:23:05 +0000 Subject: [PATCH 67/88] Reactive extensions for channels - vend signals for events. --- .../PTPusherChannel+ReactiveExtensions.h | 16 +++++++++++ .../PTPusherChannel+ReactiveExtensions.m | 28 +++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 ReactiveExtensions/PTPusherChannel+ReactiveExtensions.h create mode 100644 ReactiveExtensions/PTPusherChannel+ReactiveExtensions.m diff --git a/ReactiveExtensions/PTPusherChannel+ReactiveExtensions.h b/ReactiveExtensions/PTPusherChannel+ReactiveExtensions.h new file mode 100644 index 00000000..e762a184 --- /dev/null +++ b/ReactiveExtensions/PTPusherChannel+ReactiveExtensions.h @@ -0,0 +1,16 @@ +// +// PTPusherChannel+ReactiveExtensions.h +// libPusher +// +// Created by Luke Redpath on 27/11/2013. +// +// + +#import +#import + +@interface PTPusherChannel (ReactiveExtensions) + +- (RACSignal *)eventsOfType:(NSString *)eventName; + +@end diff --git a/ReactiveExtensions/PTPusherChannel+ReactiveExtensions.m b/ReactiveExtensions/PTPusherChannel+ReactiveExtensions.m new file mode 100644 index 00000000..0f5a255b --- /dev/null +++ b/ReactiveExtensions/PTPusherChannel+ReactiveExtensions.m @@ -0,0 +1,28 @@ +// +// PTPusherChannel+ReactiveExtensions.m +// libPusher +// +// Created by Luke Redpath on 27/11/2013. +// +// + +#import "PTPusherChannel+ReactiveExtensions.h" +#import "PTPusherEventPublisher.h" + +@implementation PTPusherChannel (ReactiveExtensions) + +- (RACSignal *)eventsOfType:(NSString *)eventName +{ + return [[RACSignal createSignal:^RACDisposable *(id subscriber) { + PTPusherEventBinding *binding = [self bindToEventNamed:eventName handleWithBlock:^(PTPusherEvent *event) { + [subscriber sendNext:event]; + }]; + + return [RACDisposable disposableWithBlock:^{ + [self removeBinding:binding]; + }]; + + }] setNameWithFormat:@"-eventsOfType:%@ onChannel:%@", eventName, self.name]; +} + +@end From b6b8aa77f203ad2178ff3b0d7e5dff66b4551ea1 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Wed, 27 Nov 2013 15:23:17 +0000 Subject: [PATCH 68/88] A very simple example that uses ReactiveExtensions and signal binding. --- .../Classes/PusherExampleMenuViewController.m | 6 ++ Sample/Classes/ReactiveEventsViewController.h | 17 +++++ Sample/Classes/ReactiveEventsViewController.m | 50 ++++++++++++++ Sample/ReactiveEventsViewController.xib | 67 +++++++++++++++++++ libPusher.xcodeproj/project.pbxproj | 10 +++ 5 files changed, 150 insertions(+) create mode 100644 Sample/Classes/ReactiveEventsViewController.h create mode 100644 Sample/Classes/ReactiveEventsViewController.m create mode 100644 Sample/ReactiveEventsViewController.xib diff --git a/Sample/Classes/PusherExampleMenuViewController.m b/Sample/Classes/PusherExampleMenuViewController.m index ff3a2dfc..a7e93504 100644 --- a/Sample/Classes/PusherExampleMenuViewController.m +++ b/Sample/Classes/PusherExampleMenuViewController.m @@ -28,6 +28,12 @@ - (void)awakeFromNib [exampleTwo setObject:@"PusherPresenceEventsViewController" forKey:@"controllerClass"]; [options addObject:exampleTwo]; + NSMutableDictionary *exampleThree = [NSMutableDictionary dictionary]; + [exampleThree setObject:@"Reactive events" forKey:@"name"]; + [exampleThree setObject:@"Demonstrates using the ReactiveExtensions API." forKey:@"description"]; + [exampleThree setObject:@"ReactiveEventsViewController" forKey:@"controllerClass"]; + [options addObject:exampleThree]; + menuOptions = [options copy]; } diff --git a/Sample/Classes/ReactiveEventsViewController.h b/Sample/Classes/ReactiveEventsViewController.h new file mode 100644 index 00000000..cc7d1693 --- /dev/null +++ b/Sample/Classes/ReactiveEventsViewController.h @@ -0,0 +1,17 @@ +// +// ReactiveEventsViewController.h +// libPusher +// +// Created by Luke Redpath on 27/11/2013. +// +// + +#import + +@class PTPusher; + +@interface ReactiveEventsViewController : UIViewController + +@property (nonatomic) PTPusher *pusher; + +@end diff --git a/Sample/Classes/ReactiveEventsViewController.m b/Sample/Classes/ReactiveEventsViewController.m new file mode 100644 index 00000000..623dd7ec --- /dev/null +++ b/Sample/Classes/ReactiveEventsViewController.m @@ -0,0 +1,50 @@ +// +// ReactiveEventsViewController.m +// libPusher +// +// Created by Luke Redpath on 27/11/2013. +// +// + +#import "ReactiveEventsViewController.h" +#import "PTPusherAPI.h" +#import "Constants.h" +#import "PTPusherChannel+ReactiveExtensions.h" + +#define UIColorFromRGBHexValue(rgbValue) [UIColor \ +colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 \ +green:((float)((rgbValue & 0xFF00) >> 8))/255.0 \ +blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0] + +@interface ReactiveEventsViewController () +@property (nonatomic, weak) IBOutlet UITextField *textField; +@property (nonatomic, strong) PTPusherAPI *api; +@end + +@implementation ReactiveEventsViewController + +- (void)viewDidLoad +{ + [super viewDidLoad]; + + self.api = [[PTPusherAPI alloc] initWithKey:PUSHER_API_KEY appID:PUSHER_APP_ID secretKey:PUSHER_API_SECRET]; + + /* Create a signal by mapping a channel events to a UIColor, converting the color string then a UIColor value */ + RACSignal *colorSignal = [[[self.pusher subscribeToChannelNamed:@"colors"] eventsOfType:@"color"] map:^id(PTPusherEvent *event) { + NSScanner *scanner = [NSScanner scannerWithString:event.data[@"color"]]; + unsigned long long hexValue; + [scanner scanHexLongLong:&hexValue]; + return UIColorFromRGBHexValue(hexValue); + }]; + + /* Bind the view's background color to colors as the arrive */ + RAC(self.view, backgroundColor) = colorSignal; +} + +- (IBAction)tappedSendButton:(id)sender +{ + // we set the socket ID to nil here as we want to receive our own events + [self.api triggerEvent:@"color" onChannel:@"colors" data:@{@"color": self.textField.text} socketID:nil]; +} + +@end diff --git a/Sample/ReactiveEventsViewController.xib b/Sample/ReactiveEventsViewController.xib new file mode 100644 index 00000000..4c9db76a --- /dev/null +++ b/Sample/ReactiveEventsViewController.xib @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/libPusher.xcodeproj/project.pbxproj b/libPusher.xcodeproj/project.pbxproj index 06e33e86..a99f883c 100755 --- a/libPusher.xcodeproj/project.pbxproj +++ b/libPusher.xcodeproj/project.pbxproj @@ -94,6 +94,8 @@ A3D1D2CB11580162009A12AD /* PTPusherEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = A3D1D2901157FA4C009A12AD /* PTPusherEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; A3D1D2CC11580162009A12AD /* PTPusherEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = A3D1D2911157FA4C009A12AD /* PTPusherEvent.m */; }; A3E5CBF5184640C3006A54DD /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = A3E5CBF4184640C3006A54DD /* Default-568h@2x.png */; }; + A3E5CBF818464164006A54DD /* ReactiveEventsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A3E5CBF718464164006A54DD /* ReactiveEventsViewController.m */; }; + A3E5CBFA18464227006A54DD /* ReactiveEventsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = A3E5CBF918464227006A54DD /* ReactiveEventsViewController.xib */; }; A3F032471822CC8A00976DA0 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F700C4637DC43EFA335D40F /* libPods.a */; }; A3FE41CB11811161009CF5D7 /* NewEventViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A3FE41C911811161009CF5D7 /* NewEventViewController.m */; }; A3FE41CC11811161009CF5D7 /* NewEventViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = A3FE41CA11811161009CF5D7 /* NewEventViewController.xib */; }; @@ -218,6 +220,9 @@ A3D1D29B1157FA80009A12AD /* libPusher-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "libPusher-Info.plist"; sourceTree = ""; }; A3D1D2B71158013F009A12AD /* libPusher.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPusher.a; sourceTree = BUILT_PRODUCTS_DIR; }; A3E5CBF4184640C3006A54DD /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; + A3E5CBF618464164006A54DD /* ReactiveEventsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReactiveEventsViewController.h; sourceTree = ""; }; + A3E5CBF718464164006A54DD /* ReactiveEventsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ReactiveEventsViewController.m; sourceTree = ""; }; + A3E5CBF918464227006A54DD /* ReactiveEventsViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = ReactiveEventsViewController.xib; path = Sample/ReactiveEventsViewController.xib; sourceTree = ""; }; A3FE41C811811161009CF5D7 /* NewEventViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NewEventViewController.h; sourceTree = ""; }; A3FE41C911811161009CF5D7 /* NewEventViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NewEventViewController.m; sourceTree = ""; }; A3FE41CA11811161009CF5D7 /* NewEventViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = NewEventViewController.xib; path = Sample/Classes/NewEventViewController.xib; sourceTree = ""; }; @@ -488,6 +493,8 @@ A3698FED13FF0868005CF130 /* NSMutableURLRequest+BasicAuth.m */, A3698FFD13FF200C005CF130 /* NSData+Base64.h */, A3698FFE13FF200C005CF130 /* NSData+Base64.m */, + A3E5CBF618464164006A54DD /* ReactiveEventsViewController.h */, + A3E5CBF718464164006A54DD /* ReactiveEventsViewController.m */, ); path = Classes; sourceTree = ""; @@ -498,6 +505,7 @@ A3FE41CA11811161009CF5D7 /* NewEventViewController.xib */, A3D1D2831157FA30009A12AD /* MainWindow.xib */, A3D1D2851157FA30009A12AD /* PusherEventsViewController.xib */, + A3E5CBF918464227006A54DD /* ReactiveEventsViewController.xib */, ); name = Resources; path = ..; @@ -671,6 +679,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + A3E5CBFA18464227006A54DD /* ReactiveEventsViewController.xib in Resources */, A3D1D2891157FA30009A12AD /* MainWindow.xib in Resources */, A3E5CBF5184640C3006A54DD /* Default-568h@2x.png in Resources */, A3D1D28B1157FA30009A12AD /* PusherEventsViewController.xib in Resources */, @@ -850,6 +859,7 @@ A39E238913F7E6AB0083CAD7 /* PusherPresenceEventsViewController.m in Sources */, A3698FF213FF0A7A005CF130 /* NSMutableURLRequest+BasicAuth.m in Sources */, A3698FFF13FF200C005CF130 /* NSData+Base64.m in Sources */, + A3E5CBF818464164006A54DD /* ReactiveEventsViewController.m in Sources */, A37E15EA14E4BBBA00DCA3A6 /* PusherExampleMenuViewController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; From 43e1c66d3fb5b37ec1d57d6f32f5b6e908dfc8e9 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Wed, 27 Nov 2013 15:32:28 +0000 Subject: [PATCH 69/88] Add Reactive bindings support to the client. --- .../PTPusher+ReactiveExtensions.h | 34 +++++++++++++++++++ .../PTPusher+ReactiveExtensions.m | 33 ++++++++++++++++++ .../PTPusherChannel+ReactiveExtensions.h | 2 ++ .../PTPusherChannel+ReactiveExtensions.m | 13 ++----- libPusher.xcodeproj/project.pbxproj | 8 +++++ 5 files changed, 79 insertions(+), 11 deletions(-) create mode 100644 ReactiveExtensions/PTPusher+ReactiveExtensions.h create mode 100644 ReactiveExtensions/PTPusher+ReactiveExtensions.m diff --git a/ReactiveExtensions/PTPusher+ReactiveExtensions.h b/ReactiveExtensions/PTPusher+ReactiveExtensions.h new file mode 100644 index 00000000..7e21a4d2 --- /dev/null +++ b/ReactiveExtensions/PTPusher+ReactiveExtensions.h @@ -0,0 +1,34 @@ +// +// PTPusher+ReactiveExtensions.h +// libPusher +// +// Created by Luke Redpath on 27/11/2013. +// +// + +#import +#import +#import "PTPusherChannel+ReactiveExtensions.h" + +/** Reactive extensions for Pusher provide an alternative means of binding to events, + * using ReactiveCocoa signals. + * + * Each call to eventsOfType: returns a new RACSignal - you can keep a reference to a single + * signal and re-use safely. + * + * Internally, an event binding (PTPusherEventBinding) is created per-subscriber. The binding + * will be safely removed when the subscription is disposed of. + * + * Warning: if you are using ReactiveExtensions, you should be careful when using the method + * removeAllBindings as this will remove any underlying bindings being used by the signal, + * which means the signal will no longer emit events. + */ +@interface PTPusher (ReactiveExtensions) + ++ (RACSignal *)signalForEvents:(NSString *)eventName onBindable:(id)bindable; + +/** Returns a signal that emits events as they arrive on any channel. + */ +- (RACSignal *)eventsOfType:(NSString *)eventName; + +@end diff --git a/ReactiveExtensions/PTPusher+ReactiveExtensions.m b/ReactiveExtensions/PTPusher+ReactiveExtensions.m new file mode 100644 index 00000000..4aa9a075 --- /dev/null +++ b/ReactiveExtensions/PTPusher+ReactiveExtensions.m @@ -0,0 +1,33 @@ +// +// PTPusher+ReactiveExtensions.m +// libPusher +// +// Created by Luke Redpath on 27/11/2013. +// +// + +#import "PTPusher+ReactiveExtensions.h" + +@implementation PTPusher (ReactiveExtensions) + ++ (RACSignal *)signalForEvents:(NSString *)eventName onBindable:(id)bindable +{ + return [[RACSignal createSignal:^RACDisposable *(id subscriber) { + PTPusherEventBinding *binding = [bindable bindToEventNamed:eventName handleWithBlock:^(PTPusherEvent *event) { + [subscriber sendNext:event]; + }]; + + return [RACDisposable disposableWithBlock:^{ + [bindable removeBinding:binding]; + }]; + + }] setNameWithFormat:@"-eventsOfType:%@ onBindable:%@", eventName, bindable]; + +} + +- (RACSignal *)eventsOfType:(NSString *)eventName +{ + return [[self class] signalForEvents:eventName onBindable:self]; +} + +@end diff --git a/ReactiveExtensions/PTPusherChannel+ReactiveExtensions.h b/ReactiveExtensions/PTPusherChannel+ReactiveExtensions.h index e762a184..7fa5b57d 100644 --- a/ReactiveExtensions/PTPusherChannel+ReactiveExtensions.h +++ b/ReactiveExtensions/PTPusherChannel+ReactiveExtensions.h @@ -11,6 +11,8 @@ @interface PTPusherChannel (ReactiveExtensions) +/** Returns a signal that emits events as they arrive this channel. + */ - (RACSignal *)eventsOfType:(NSString *)eventName; @end diff --git a/ReactiveExtensions/PTPusherChannel+ReactiveExtensions.m b/ReactiveExtensions/PTPusherChannel+ReactiveExtensions.m index 0f5a255b..5176b3dd 100644 --- a/ReactiveExtensions/PTPusherChannel+ReactiveExtensions.m +++ b/ReactiveExtensions/PTPusherChannel+ReactiveExtensions.m @@ -7,22 +7,13 @@ // #import "PTPusherChannel+ReactiveExtensions.h" -#import "PTPusherEventPublisher.h" +#import "PTPusher+ReactiveExtensions.h" @implementation PTPusherChannel (ReactiveExtensions) - (RACSignal *)eventsOfType:(NSString *)eventName { - return [[RACSignal createSignal:^RACDisposable *(id subscriber) { - PTPusherEventBinding *binding = [self bindToEventNamed:eventName handleWithBlock:^(PTPusherEvent *event) { - [subscriber sendNext:event]; - }]; - - return [RACDisposable disposableWithBlock:^{ - [self removeBinding:binding]; - }]; - - }] setNameWithFormat:@"-eventsOfType:%@ onChannel:%@", eventName, self.name]; + return [PTPusher signalForEvents:eventName onBindable:self]; } @end diff --git a/libPusher.xcodeproj/project.pbxproj b/libPusher.xcodeproj/project.pbxproj index a99f883c..5558c3e4 100755 --- a/libPusher.xcodeproj/project.pbxproj +++ b/libPusher.xcodeproj/project.pbxproj @@ -96,6 +96,8 @@ A3E5CBF5184640C3006A54DD /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = A3E5CBF4184640C3006A54DD /* Default-568h@2x.png */; }; A3E5CBF818464164006A54DD /* ReactiveEventsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A3E5CBF718464164006A54DD /* ReactiveEventsViewController.m */; }; A3E5CBFA18464227006A54DD /* ReactiveEventsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = A3E5CBF918464227006A54DD /* ReactiveEventsViewController.xib */; }; + A3E5CBFD1846461A006A54DD /* PTPusher+ReactiveExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = A3E5CBFB1846461A006A54DD /* PTPusher+ReactiveExtensions.h */; }; + A3E5CBFE1846461A006A54DD /* PTPusher+ReactiveExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = A3E5CBFC1846461A006A54DD /* PTPusher+ReactiveExtensions.m */; }; A3F032471822CC8A00976DA0 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F700C4637DC43EFA335D40F /* libPods.a */; }; A3FE41CB11811161009CF5D7 /* NewEventViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A3FE41C911811161009CF5D7 /* NewEventViewController.m */; }; A3FE41CC11811161009CF5D7 /* NewEventViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = A3FE41CA11811161009CF5D7 /* NewEventViewController.xib */; }; @@ -223,6 +225,8 @@ A3E5CBF618464164006A54DD /* ReactiveEventsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReactiveEventsViewController.h; sourceTree = ""; }; A3E5CBF718464164006A54DD /* ReactiveEventsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ReactiveEventsViewController.m; sourceTree = ""; }; A3E5CBF918464227006A54DD /* ReactiveEventsViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = ReactiveEventsViewController.xib; path = Sample/ReactiveEventsViewController.xib; sourceTree = ""; }; + A3E5CBFB1846461A006A54DD /* PTPusher+ReactiveExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "PTPusher+ReactiveExtensions.h"; sourceTree = ""; }; + A3E5CBFC1846461A006A54DD /* PTPusher+ReactiveExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "PTPusher+ReactiveExtensions.m"; sourceTree = ""; }; A3FE41C811811161009CF5D7 /* NewEventViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NewEventViewController.h; sourceTree = ""; }; A3FE41C911811161009CF5D7 /* NewEventViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NewEventViewController.m; sourceTree = ""; }; A3FE41CA11811161009CF5D7 /* NewEventViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = NewEventViewController.xib; path = Sample/Classes/NewEventViewController.xib; sourceTree = ""; }; @@ -420,6 +424,8 @@ children = ( A394E6F718463DFA004C70A2 /* PTPusherChannel+ReactiveExtensions.h */, A394E6F818463DFA004C70A2 /* PTPusherChannel+ReactiveExtensions.m */, + A3E5CBFB1846461A006A54DD /* PTPusher+ReactiveExtensions.h */, + A3E5CBFC1846461A006A54DD /* PTPusher+ReactiveExtensions.m */, ); path = ReactiveExtensions; sourceTree = ""; @@ -552,6 +558,7 @@ A3B2931F14D8D96900C6B79F /* PTPusherPresenceChannelDelegate.h in Headers */, A3382DE41525C3FA0025550D /* PTJSON.h in Headers */, A3CA666914D96814003E2F1E /* PTPusherChannel.h in Headers */, + A3E5CBFD1846461A006A54DD /* PTPusher+ReactiveExtensions.h in Headers */, A3CA670E14DBBAA1003E2F1E /* PTPusherErrors.h in Headers */, A3CA671514DBBAE1003E2F1E /* NSDictionary+QueryString.h in Headers */, A37E167414E572C900DCA3A6 /* PTPusherMacros.h in Headers */, @@ -906,6 +913,7 @@ A35281D713F736DF000687C0 /* PTPusherEventDispatcher.m in Sources */, A35281DC13F73C54000687C0 /* PTTargetActionEventListener.m in Sources */, A35281E513F75010000687C0 /* PTBlockEventListener.m in Sources */, + A3E5CBFE1846461A006A54DD /* PTPusher+ReactiveExtensions.m in Sources */, A35281EA13F75265000687C0 /* PTPusherAPI.m in Sources */, A3AC28B713F75530001C4808 /* PTURLRequestOperation.m in Sources */, A3AC28C413F76C51001C4808 /* PTPusherChannelAuthorizationOperation.m in Sources */, From df72c9c078e7da11379d2b9c9fb3af60273b32df Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Wed, 27 Nov 2013 15:57:24 +0000 Subject: [PATCH 70/88] Provide signals for *all* events on a client or channel. There are important memory management caveats here due to the signal being based on notifications, which are infinite signals. --- .../PTPusher+ReactiveExtensions.h | 33 ++++++++++++++----- .../PTPusher+ReactiveExtensions.m | 24 ++++++++++++-- .../PTPusher+ReactiveExtensions_Internal.h | 17 ++++++++++ .../PTPusherChannel+ReactiveExtensions.h | 4 +++ .../PTPusherChannel+ReactiveExtensions.m | 7 +++- libPusher.xcodeproj/project.pbxproj | 8 +++-- 6 files changed, 78 insertions(+), 15 deletions(-) create mode 100644 ReactiveExtensions/PTPusher+ReactiveExtensions_Internal.h diff --git a/ReactiveExtensions/PTPusher+ReactiveExtensions.h b/ReactiveExtensions/PTPusher+ReactiveExtensions.h index 7e21a4d2..a9aa3971 100644 --- a/ReactiveExtensions/PTPusher+ReactiveExtensions.h +++ b/ReactiveExtensions/PTPusher+ReactiveExtensions.h @@ -13,22 +13,37 @@ /** Reactive extensions for Pusher provide an alternative means of binding to events, * using ReactiveCocoa signals. * - * Each call to eventsOfType: returns a new RACSignal - you can keep a reference to a single - * signal and re-use safely. - * - * Internally, an event binding (PTPusherEventBinding) is created per-subscriber. The binding - * will be safely removed when the subscription is disposed of. - * * Warning: if you are using ReactiveExtensions, you should be careful when using the method * removeAllBindings as this will remove any underlying bindings being used by the signal, * which means the signal will no longer emit events. */ @interface PTPusher (ReactiveExtensions) -+ (RACSignal *)signalForEvents:(NSString *)eventName onBindable:(id)bindable; - -/** Returns a signal that emits events as they arrive on any channel. +/** Returns a signal that emits events of the given type as they arrive on any channel. + * + * Each call to eventsOfType: returns a new RACSignal - you can keep a reference to a single + * signal and re-use it. + * + * Internally, an event binding (PTPusherEventBinding) is created per-subscriber. The binding + * will be safely removed when the subscription is disposed of. */ - (RACSignal *)eventsOfType:(NSString *)eventName; +/** Returns a signal that emits all events on any channel. + * + * IMPORTANT NOTE: the allEvents signal is based on notifications that are fired by the + * Pusher client. Because notification signals are inifinite (i.e. they do not complete), + * there is no way for subscriptions to be disposed of automatically. + * + * If you use this method, you are responsible for keeping track of any disposables when + * subscribing and disposing of them. + * + * If you simply wish to subscribe to events until the object that owns the subscription + * is deallocated (e.g. a view controller), you could use takeUntil: and the dealloc signal, + * for example: + * + * [[[channel allEvents] takeUntil:[self rac_deallocSignal]] subscribeNext:...] + */ +- (RACSignal *)allEvents; + @end diff --git a/ReactiveExtensions/PTPusher+ReactiveExtensions.m b/ReactiveExtensions/PTPusher+ReactiveExtensions.m index 4aa9a075..f1460dfa 100644 --- a/ReactiveExtensions/PTPusher+ReactiveExtensions.m +++ b/ReactiveExtensions/PTPusher+ReactiveExtensions.m @@ -7,9 +7,24 @@ // #import "PTPusher+ReactiveExtensions.h" +#import "PTPusher+ReactiveExtensions_Internal.h" @implementation PTPusher (ReactiveExtensions) +- (RACSignal *)eventsOfType:(NSString *)eventName +{ + return [[self class] signalForEvents:eventName onBindable:self]; +} + +- (RACSignal *)allEvents +{ + return [[self class] signalForAllEventsOnBindable:self]; +} + +@end + +@implementation PTPusher (ReactiveExtensionsInternal) + + (RACSignal *)signalForEvents:(NSString *)eventName onBindable:(id)bindable { return [[RACSignal createSignal:^RACDisposable *(id subscriber) { @@ -22,12 +37,15 @@ + (RACSignal *)signalForEvents:(NSString *)eventName onBindable:(id)bindable { - return [[self class] signalForEvents:eventName onBindable:self]; + RACSignal *notifications = [[NSNotificationCenter defaultCenter] rac_addObserverForName:PTPusherEventReceivedNotification object:bindable]; + + return [[notifications map:^id(NSNotification *note) { + return note.userInfo[PTPusherEventUserInfoKey]; + }] setNameWithFormat:@"-allEvents onBindable:%@", bindable]; } @end diff --git a/ReactiveExtensions/PTPusher+ReactiveExtensions_Internal.h b/ReactiveExtensions/PTPusher+ReactiveExtensions_Internal.h new file mode 100644 index 00000000..f1208832 --- /dev/null +++ b/ReactiveExtensions/PTPusher+ReactiveExtensions_Internal.h @@ -0,0 +1,17 @@ +// +// PTPusherChannel_PTPusher_ReactiveExtensions_Internal_h.h +// libPusher +// +// Created by Luke Redpath on 27/11/2013. +// +// + +#import +#import + +@interface PTPusher (ReactiveExtensionsInternal) + ++ (RACSignal *)signalForEvents:(NSString *)eventName onBindable:(id)bindable; ++ (RACSignal *)signalForAllEventsOnBindable:(id)bindable; + +@end diff --git a/ReactiveExtensions/PTPusherChannel+ReactiveExtensions.h b/ReactiveExtensions/PTPusherChannel+ReactiveExtensions.h index 7fa5b57d..c3d2b221 100644 --- a/ReactiveExtensions/PTPusherChannel+ReactiveExtensions.h +++ b/ReactiveExtensions/PTPusherChannel+ReactiveExtensions.h @@ -15,4 +15,8 @@ */ - (RACSignal *)eventsOfType:(NSString *)eventName; +/** Returns a signal that emits all events on this channel. + */ +- (RACSignal *)allEvents; + @end diff --git a/ReactiveExtensions/PTPusherChannel+ReactiveExtensions.m b/ReactiveExtensions/PTPusherChannel+ReactiveExtensions.m index 5176b3dd..05ec512c 100644 --- a/ReactiveExtensions/PTPusherChannel+ReactiveExtensions.m +++ b/ReactiveExtensions/PTPusherChannel+ReactiveExtensions.m @@ -7,7 +7,7 @@ // #import "PTPusherChannel+ReactiveExtensions.h" -#import "PTPusher+ReactiveExtensions.h" +#import "PTPusher+ReactiveExtensions_Internal.h" @implementation PTPusherChannel (ReactiveExtensions) @@ -16,4 +16,9 @@ - (RACSignal *)eventsOfType:(NSString *)eventName return [PTPusher signalForEvents:eventName onBindable:self]; } +- (RACSignal *)allEvents +{ + return [PTPusher signalForAllEventsOnBindable:self]; +} + @end diff --git a/libPusher.xcodeproj/project.pbxproj b/libPusher.xcodeproj/project.pbxproj index 5558c3e4..e7d38e95 100755 --- a/libPusher.xcodeproj/project.pbxproj +++ b/libPusher.xcodeproj/project.pbxproj @@ -54,7 +54,7 @@ A37E167414E572C900DCA3A6 /* PTPusherMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = A37E167314E572C900DCA3A6 /* PTPusherMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; A394E6F118451CD3004C70A2 /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A3A9F9591496E96100F83617 /* SenTestingKit.framework */; }; A394E6F218451CFE004C70A2 /* PTPusherSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = A394E6EF18451C99004C70A2 /* PTPusherSpec.m */; }; - A394E6F918463DFA004C70A2 /* PTPusherChannel+ReactiveExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = A394E6F718463DFA004C70A2 /* PTPusherChannel+ReactiveExtensions.h */; }; + A394E6F918463DFA004C70A2 /* PTPusherChannel+ReactiveExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = A394E6F718463DFA004C70A2 /* PTPusherChannel+ReactiveExtensions.h */; settings = {ATTRIBUTES = (Public, ); }; }; A394E6FA18463DFA004C70A2 /* PTPusherChannel+ReactiveExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = A394E6F818463DFA004C70A2 /* PTPusherChannel+ReactiveExtensions.m */; }; A39E238913F7E6AB0083CAD7 /* PusherPresenceEventsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A39E238813F7E6AB0083CAD7 /* PusherPresenceEventsViewController.m */; }; A3A1A149115814F7001EF877 /* OCHamcrest.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = A3A1A111115814D0001EF877 /* OCHamcrest.framework */; }; @@ -96,8 +96,9 @@ A3E5CBF5184640C3006A54DD /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = A3E5CBF4184640C3006A54DD /* Default-568h@2x.png */; }; A3E5CBF818464164006A54DD /* ReactiveEventsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A3E5CBF718464164006A54DD /* ReactiveEventsViewController.m */; }; A3E5CBFA18464227006A54DD /* ReactiveEventsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = A3E5CBF918464227006A54DD /* ReactiveEventsViewController.xib */; }; - A3E5CBFD1846461A006A54DD /* PTPusher+ReactiveExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = A3E5CBFB1846461A006A54DD /* PTPusher+ReactiveExtensions.h */; }; + A3E5CBFD1846461A006A54DD /* PTPusher+ReactiveExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = A3E5CBFB1846461A006A54DD /* PTPusher+ReactiveExtensions.h */; settings = {ATTRIBUTES = (Public, ); }; }; A3E5CBFE1846461A006A54DD /* PTPusher+ReactiveExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = A3E5CBFC1846461A006A54DD /* PTPusher+ReactiveExtensions.m */; }; + A3E5CC0218464959006A54DD /* PTPusher+ReactiveExtensions_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = A3E5CC0118464959006A54DD /* PTPusher+ReactiveExtensions_Internal.h */; }; A3F032471822CC8A00976DA0 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F700C4637DC43EFA335D40F /* libPods.a */; }; A3FE41CB11811161009CF5D7 /* NewEventViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A3FE41C911811161009CF5D7 /* NewEventViewController.m */; }; A3FE41CC11811161009CF5D7 /* NewEventViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = A3FE41CA11811161009CF5D7 /* NewEventViewController.xib */; }; @@ -227,6 +228,7 @@ A3E5CBF918464227006A54DD /* ReactiveEventsViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = ReactiveEventsViewController.xib; path = Sample/ReactiveEventsViewController.xib; sourceTree = ""; }; A3E5CBFB1846461A006A54DD /* PTPusher+ReactiveExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "PTPusher+ReactiveExtensions.h"; sourceTree = ""; }; A3E5CBFC1846461A006A54DD /* PTPusher+ReactiveExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "PTPusher+ReactiveExtensions.m"; sourceTree = ""; }; + A3E5CC0118464959006A54DD /* PTPusher+ReactiveExtensions_Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "PTPusher+ReactiveExtensions_Internal.h"; sourceTree = ""; }; A3FE41C811811161009CF5D7 /* NewEventViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NewEventViewController.h; sourceTree = ""; }; A3FE41C911811161009CF5D7 /* NewEventViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NewEventViewController.m; sourceTree = ""; }; A3FE41CA11811161009CF5D7 /* NewEventViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = NewEventViewController.xib; path = Sample/Classes/NewEventViewController.xib; sourceTree = ""; }; @@ -426,6 +428,7 @@ A394E6F818463DFA004C70A2 /* PTPusherChannel+ReactiveExtensions.m */, A3E5CBFB1846461A006A54DD /* PTPusher+ReactiveExtensions.h */, A3E5CBFC1846461A006A54DD /* PTPusher+ReactiveExtensions.m */, + A3E5CC0118464959006A54DD /* PTPusher+ReactiveExtensions_Internal.h */, ); path = ReactiveExtensions; sourceTree = ""; @@ -554,6 +557,7 @@ A3D1D2C711580162009A12AD /* PTEventListener.h in Headers */, A3AC28B613F75530001C4808 /* PTURLRequestOperation.h in Headers */, A32EE793184364D800E3B072 /* PTPusherChannel_Private.h in Headers */, + A3E5CC0218464959006A54DD /* PTPusher+ReactiveExtensions_Internal.h in Headers */, A3AC28C313F76C51001C4808 /* PTPusherChannelAuthorizationOperation.h in Headers */, A3B2931F14D8D96900C6B79F /* PTPusherPresenceChannelDelegate.h in Headers */, A3382DE41525C3FA0025550D /* PTJSON.h in Headers */, From e5375d4e32c9992ff1d53f78f42d6df14708eb61 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Wed, 27 Nov 2013 15:57:46 +0000 Subject: [PATCH 71/88] Switch from notifications to allEvents signals and demonstrate how to safely dispose of a subscription to this signal. --- Sample/Classes/PusherEventsAppDelegate.m | 19 ++++--------------- Sample/Classes/ReactiveEventsViewController.m | 15 ++++++++++++--- 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/Sample/Classes/PusherEventsAppDelegate.m b/Sample/Classes/PusherEventsAppDelegate.m index 33188d44..963180d8 100644 --- a/Sample/Classes/PusherEventsAppDelegate.m +++ b/Sample/Classes/PusherEventsAppDelegate.m @@ -11,6 +11,7 @@ #import "Pusher.h" #import "NSMutableURLRequest+BasicAuth.h" #import "Reachability.h" +#import "PTPusher+ReactiveExtensions.h" // All events will be logged #define kLOG_ALL_EVENTS @@ -29,11 +30,9 @@ - (void)applicationDidFinishLaunching:(UIApplication *)application self.pusherClient = [PTPusher pusherWithKey:PUSHER_API_KEY delegate:self encrypted:YES]; // log all events received, regardless of which channel they come from - [[NSNotificationCenter defaultCenter] - addObserver:self - selector:@selector(handlePusherEvent:) - name:PTPusherEventReceivedNotification - object:self.pusherClient]; + [[self.pusherClient allEvents] subscribeNext:^(PTPusherEvent *event) { + NSLog(@"[pusher] Received event %@", event); + }]; self.menuViewController.pusher = self.pusherClient; self.window.rootViewController = self.navigationController; @@ -43,16 +42,6 @@ - (void)applicationDidFinishLaunching:(UIApplication *)application [self.pusherClient connect]; } -#pragma mark - Event notifications - -- (void)handlePusherEvent:(NSNotification *)note -{ -#ifdef kLOG_ALL_EVENTS - PTPusherEvent *event = [note.userInfo objectForKey:PTPusherEventUserInfoKey]; - NSLog(@"[pusher] Received event %@", event); -#endif -} - #pragma mark - Reachability - (void)startReachabilityCheck diff --git a/Sample/Classes/ReactiveEventsViewController.m b/Sample/Classes/ReactiveEventsViewController.m index 623dd7ec..920e577b 100644 --- a/Sample/Classes/ReactiveEventsViewController.m +++ b/Sample/Classes/ReactiveEventsViewController.m @@ -29,16 +29,25 @@ - (void)viewDidLoad self.api = [[PTPusherAPI alloc] initWithKey:PUSHER_API_KEY appID:PUSHER_APP_ID secretKey:PUSHER_API_SECRET]; - /* Create a signal by mapping a channel events to a UIColor, converting the color string then a UIColor value */ - RACSignal *colorSignal = [[[self.pusher subscribeToChannelNamed:@"colors"] eventsOfType:@"color"] map:^id(PTPusherEvent *event) { + // subscribe to the channel + PTPusherChannel *colorChannel = [self.pusher subscribeToChannelNamed:@"colors"]; + + // Create a signal by mapping a channel events to a UIColor, converting the color string then a UIColor value + RACSignal *colorSignal = [[colorChannel eventsOfType:@"color"] map:^id(PTPusherEvent *event) { NSScanner *scanner = [NSScanner scannerWithString:event.data[@"color"]]; unsigned long long hexValue; [scanner scanHexLongLong:&hexValue]; return UIColorFromRGBHexValue(hexValue); }]; - /* Bind the view's background color to colors as the arrive */ + // Bind the view's background color to colors as the arrivecol RAC(self.view, backgroundColor) = colorSignal; + + + // log all events received on the channel using the allEvents signal + [[[colorChannel allEvents] takeUntil:[self rac_willDeallocSignal]] subscribeNext:^(PTPusherEvent *event) { + NSLog(@"[pusher] Received color event %@", event); + }]; } - (IBAction)tappedSendButton:(id)sender From c48df9ce04a332d4ca793fec23127c573156889d Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Wed, 27 Nov 2013 18:06:13 +0000 Subject: [PATCH 72/88] Define a sub-spec for ReactiveExtensions. The Core sub spec is set as the default as we do not want to include ReactiveExtensions by default. --- .../PTPusher+ReactiveExtensions.h | 2 +- .../PTPusher+ReactiveExtensions_Internal.h | 2 +- .../PTPusherChannel+ReactiveExtensions.h | 2 +- libPusher.podspec | 56 ++++++++++++------- 4 files changed, 39 insertions(+), 23 deletions(-) diff --git a/ReactiveExtensions/PTPusher+ReactiveExtensions.h b/ReactiveExtensions/PTPusher+ReactiveExtensions.h index a9aa3971..ef1510ff 100644 --- a/ReactiveExtensions/PTPusher+ReactiveExtensions.h +++ b/ReactiveExtensions/PTPusher+ReactiveExtensions.h @@ -6,8 +6,8 @@ // // -#import #import +#import "PTPusher.h" #import "PTPusherChannel+ReactiveExtensions.h" /** Reactive extensions for Pusher provide an alternative means of binding to events, diff --git a/ReactiveExtensions/PTPusher+ReactiveExtensions_Internal.h b/ReactiveExtensions/PTPusher+ReactiveExtensions_Internal.h index f1208832..ee017a5a 100644 --- a/ReactiveExtensions/PTPusher+ReactiveExtensions_Internal.h +++ b/ReactiveExtensions/PTPusher+ReactiveExtensions_Internal.h @@ -6,8 +6,8 @@ // // -#import #import +#import "PTPusher.h" @interface PTPusher (ReactiveExtensionsInternal) diff --git a/ReactiveExtensions/PTPusherChannel+ReactiveExtensions.h b/ReactiveExtensions/PTPusherChannel+ReactiveExtensions.h index c3d2b221..f2015aa2 100644 --- a/ReactiveExtensions/PTPusherChannel+ReactiveExtensions.h +++ b/ReactiveExtensions/PTPusherChannel+ReactiveExtensions.h @@ -6,8 +6,8 @@ // // -#import #import +#import "PTPusherChannel.h" @interface PTPusherChannel (ReactiveExtensions) diff --git a/libPusher.podspec b/libPusher.podspec index dceef5a8..0a7d52ef 100644 --- a/libPusher.podspec +++ b/libPusher.podspec @@ -1,22 +1,38 @@ Pod::Spec.new do |s| - s.name = 'libPusher' - s.version = '1.5' - s.license = 'MIT' - s.summary = 'An Objective-C client for the Pusher.com service' - s.homepage = 'https://github.com/lukeredpath/libPusher' - s.author = 'Luke Redpath' - s.source = { :git => 'https://github.com/lukeredpath/libPusher.git', :tag => 'v1.4' } - s.source_files = 'Library/*' - s.private_header_files = %w( - PTJSON.h - PTJSONParser.h - NSString+Hashing.h - NSDictionary+QueryString.h - PTPusherChannel_Private.h - ) - s.requires_arc = true - s.dependency 'SocketRocket', "0.2" - s.compiler_flags = '-Wno-arc-performSelector-leaks', '-Wno-format' - s.xcconfig = { 'GCC_PREPROCESSOR_DEFINITIONS' => 'kPTPusherClientLibraryVersion=@\"1.5\"' } - s.header_dir = 'Pusher' + s.name = 'libPusher' + s.version = '1.5' + s.license = 'MIT' + s.summary = 'An Objective-C client for the Pusher.com service' + s.homepage = 'https://github.com/lukeredpath/libPusher' + s.author = 'Luke Redpath' + s.source = { :git => 'https://github.com/lukeredpath/libPusher.git', :tag => 'v1.5' } + s.requires_arc = true + s.header_dir = 'Pusher' + s.default_subspec = 'Core' + + s.ios.deployment_target = '5.0' + s.osx.deployment_target = '10.8' + + s.subspec 'Core' do |subspec| + subspec.dependency 'SocketRocket', "0.2" + + subspec.source_files = 'Library/*' + subspec.private_header_files = *%w( + PTJSON.h + PTJSONParser.h + NSString+Hashing.h + NSDictionary+QueryString.h + PTPusherChannel_Private.h + ) + subspec.xcconfig = { + 'GCC_PREPROCESSOR_DEFINITIONS' => 'kPTPusherClientLibraryVersion=@\"1.5\"' + } + end + + s.subspec 'ReactiveExtensions' do |subspec| + subspec.dependency 'ReactiveCocoa', '2.1.7' + + subspec.source_files = 'ReactiveExtensions/*' + subspec.private_header_files = '*_Internal.h' + end end From 5c6c8b16183f3a71b362c3f13a64da668240e928 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Wed, 27 Nov 2013 18:06:24 +0000 Subject: [PATCH 73/88] Split ReactiveExtensions out into a separate static library. --- Podfile | 12 +- Sample/Classes/ReactiveEventsViewController.m | 1 + libPusher.xcodeproj/project.pbxproj | 210 +++++++++++++++++- .../libPusher+ReactiveExtensions.xcscheme | 59 +++++ 4 files changed, 269 insertions(+), 13 deletions(-) create mode 100644 libPusher.xcodeproj/xcshareddata/xcschemes/libPusher+ReactiveExtensions.xcscheme diff --git a/Podfile b/Podfile index 8fc2d6fb..c0ab2602 100644 --- a/Podfile +++ b/Podfile @@ -1,10 +1,16 @@ +# This podfile is intended for development on libPusher. +# +# If you are working on libPusher, you do not need to have CocoaPods installed +# unless you want to install new development dependencies as the Pods directory +# is part of the source tree. +# platform :ios, :deployment_target => '5.0' inhibit_all_warnings! -pod 'Reachability' -pod 'SocketRocket', :head -pod 'ReactiveCocoa' +pod 'Reachability', '3.1.1' +pod 'SocketRocket', :head # FIXME: we need a tagged dependency +pod 'ReactiveCocoa', '2.1.7' post_install do |installer| # we don't want to link static lib to the icucore dylib or it will fail to build diff --git a/Sample/Classes/ReactiveEventsViewController.m b/Sample/Classes/ReactiveEventsViewController.m index 920e577b..11110e6b 100644 --- a/Sample/Classes/ReactiveEventsViewController.m +++ b/Sample/Classes/ReactiveEventsViewController.m @@ -9,6 +9,7 @@ #import "ReactiveEventsViewController.h" #import "PTPusherAPI.h" #import "Constants.h" +#import "Pusher.h" #import "PTPusherChannel+ReactiveExtensions.h" #define UIColorFromRGBHexValue(rgbValue) [UIColor \ diff --git a/libPusher.xcodeproj/project.pbxproj b/libPusher.xcodeproj/project.pbxproj index e7d38e95..da4d54ca 100755 --- a/libPusher.xcodeproj/project.pbxproj +++ b/libPusher.xcodeproj/project.pbxproj @@ -54,8 +54,6 @@ A37E167414E572C900DCA3A6 /* PTPusherMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = A37E167314E572C900DCA3A6 /* PTPusherMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; A394E6F118451CD3004C70A2 /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A3A9F9591496E96100F83617 /* SenTestingKit.framework */; }; A394E6F218451CFE004C70A2 /* PTPusherSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = A394E6EF18451C99004C70A2 /* PTPusherSpec.m */; }; - A394E6F918463DFA004C70A2 /* PTPusherChannel+ReactiveExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = A394E6F718463DFA004C70A2 /* PTPusherChannel+ReactiveExtensions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A394E6FA18463DFA004C70A2 /* PTPusherChannel+ReactiveExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = A394E6F818463DFA004C70A2 /* PTPusherChannel+ReactiveExtensions.m */; }; A39E238913F7E6AB0083CAD7 /* PusherPresenceEventsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A39E238813F7E6AB0083CAD7 /* PusherPresenceEventsViewController.m */; }; A3A1A149115814F7001EF877 /* OCHamcrest.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = A3A1A111115814D0001EF877 /* OCHamcrest.framework */; }; A3A1A20111581782001EF877 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A3D1D0B51157CCDE009A12AD /* CFNetwork.framework */; }; @@ -96,9 +94,35 @@ A3E5CBF5184640C3006A54DD /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = A3E5CBF4184640C3006A54DD /* Default-568h@2x.png */; }; A3E5CBF818464164006A54DD /* ReactiveEventsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A3E5CBF718464164006A54DD /* ReactiveEventsViewController.m */; }; A3E5CBFA18464227006A54DD /* ReactiveEventsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = A3E5CBF918464227006A54DD /* ReactiveEventsViewController.xib */; }; - A3E5CBFD1846461A006A54DD /* PTPusher+ReactiveExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = A3E5CBFB1846461A006A54DD /* PTPusher+ReactiveExtensions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A3E5CBFE1846461A006A54DD /* PTPusher+ReactiveExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = A3E5CBFC1846461A006A54DD /* PTPusher+ReactiveExtensions.m */; }; - A3E5CC0218464959006A54DD /* PTPusher+ReactiveExtensions_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = A3E5CC0118464959006A54DD /* PTPusher+ReactiveExtensions_Internal.h */; }; + A3E5CC0518466879006A54DD /* PTPusherDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = A3A1A41611582DC3001EF877 /* PTPusherDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A3E5CC0618466879006A54DD /* PTPusher.h in Headers */ = {isa = PBXBuildFile; fileRef = A3D1D28E1157FA4C009A12AD /* PTPusher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A3E5CC0718466879006A54DD /* PTPusherEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = A3D1D2901157FA4C009A12AD /* PTPusherEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A3E5CC0818466879006A54DD /* NSString+Hashing.h in Headers */ = {isa = PBXBuildFile; fileRef = A3FE429B11811EE8009CF5D7 /* NSString+Hashing.h */; }; + A3E5CC0918466879006A54DD /* PTPusherChannel+ReactiveExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = A394E6F718463DFA004C70A2 /* PTPusherChannel+ReactiveExtensions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A3E5CC0A18466879006A54DD /* PTPusherConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = A35281CE13F721A8000687C0 /* PTPusherConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A3E5CC0B18466879006A54DD /* PTPusherEventPublisher.h in Headers */ = {isa = PBXBuildFile; fileRef = A35281D213F72E03000687C0 /* PTPusherEventPublisher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A3E5CC0C18466879006A54DD /* PTPusherEventDispatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = A35281D413F736DF000687C0 /* PTPusherEventDispatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A3E5CC0D18466879006A54DD /* PTTargetActionEventListener.h in Headers */ = {isa = PBXBuildFile; fileRef = A35281D913F73C54000687C0 /* PTTargetActionEventListener.h */; }; + A3E5CC0E18466879006A54DD /* PTBlockEventListener.h in Headers */ = {isa = PBXBuildFile; fileRef = A35281E213F75010000687C0 /* PTBlockEventListener.h */; }; + A3E5CC0F18466879006A54DD /* PTPusherAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = A35281E713F75265000687C0 /* PTPusherAPI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A3E5CC1018466879006A54DD /* PTEventListener.h in Headers */ = {isa = PBXBuildFile; fileRef = A3D1D28C1157FA4C009A12AD /* PTEventListener.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A3E5CC1118466879006A54DD /* PTURLRequestOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A3AC28B413F75530001C4808 /* PTURLRequestOperation.h */; }; + A3E5CC1218466879006A54DD /* PTPusherChannel_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A32EE792184364D800E3B072 /* PTPusherChannel_Private.h */; }; + A3E5CC1318466879006A54DD /* PTPusher+ReactiveExtensions_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = A3E5CC0118464959006A54DD /* PTPusher+ReactiveExtensions_Internal.h */; }; + A3E5CC1418466879006A54DD /* PTPusherChannelAuthorizationOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A3AC28C113F76C50001C4808 /* PTPusherChannelAuthorizationOperation.h */; }; + A3E5CC1518466879006A54DD /* PTPusherPresenceChannelDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = A39E238A13F7E85C0083CAD7 /* PTPusherPresenceChannelDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A3E5CC1618466879006A54DD /* PTJSON.h in Headers */ = {isa = PBXBuildFile; fileRef = A30950111525C272008F695B /* PTJSON.h */; }; + A3E5CC1718466879006A54DD /* PTPusherChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = A3FE42181181173B009CF5D7 /* PTPusherChannel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A3E5CC1818466879006A54DD /* PTPusher+ReactiveExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = A3E5CBFB1846461A006A54DD /* PTPusher+ReactiveExtensions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A3E5CC1918466879006A54DD /* PTPusherErrors.h in Headers */ = {isa = PBXBuildFile; fileRef = A39E238613F7E3FD0083CAD7 /* PTPusherErrors.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A3E5CC1A18466879006A54DD /* NSDictionary+QueryString.h in Headers */ = {isa = PBXBuildFile; fileRef = A3FE42FF11812541009CF5D7 /* NSDictionary+QueryString.h */; }; + A3E5CC1B18466879006A54DD /* PTPusherMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = A37E167314E572C900DCA3A6 /* PTPusherMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A3E5CC1C18466879006A54DD /* PTPusher+Testing.h in Headers */ = {isa = PBXBuildFile; fileRef = A317375D155D38C4007E4BBA /* PTPusher+Testing.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A3E5CC1D18466879006A54DD /* PTPusherMockConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = A3173758155D2D21007E4BBA /* PTPusherMockConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A3E5CC1E18466879006A54DD /* Pusher.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D81597E1712C6CA0013A485 /* Pusher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A3E5CC2118466879006A54DD /* PTPusherChannel+ReactiveExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = A394E6F818463DFA004C70A2 /* PTPusherChannel+ReactiveExtensions.m */; }; + A3E5CC2A18466879006A54DD /* PTPusher+ReactiveExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = A3E5CBFC1846461A006A54DD /* PTPusher+ReactiveExtensions.m */; }; + A3E5CC3818466915006A54DD /* libPusher_ReactiveExtensions.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A3E5CC3718466879006A54DD /* libPusher_ReactiveExtensions.a */; }; A3F032471822CC8A00976DA0 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F700C4637DC43EFA335D40F /* libPods.a */; }; A3FE41CB11811161009CF5D7 /* NewEventViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A3FE41C911811161009CF5D7 /* NewEventViewController.m */; }; A3FE41CC11811161009CF5D7 /* NewEventViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = A3FE41CA11811161009CF5D7 /* NewEventViewController.xib */; }; @@ -116,6 +140,13 @@ remoteGlobalIDString = A3D1D2B61158013F009A12AD; remoteInfo = libPusher; }; + A3E5CC3918466956006A54DD /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = A3E5CC0318466879006A54DD; + remoteInfo = libPusher_ReactiveExtensions.a; + }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -229,6 +260,7 @@ A3E5CBFB1846461A006A54DD /* PTPusher+ReactiveExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "PTPusher+ReactiveExtensions.h"; sourceTree = ""; }; A3E5CBFC1846461A006A54DD /* PTPusher+ReactiveExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "PTPusher+ReactiveExtensions.m"; sourceTree = ""; }; A3E5CC0118464959006A54DD /* PTPusher+ReactiveExtensions_Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "PTPusher+ReactiveExtensions_Internal.h"; sourceTree = ""; }; + A3E5CC3718466879006A54DD /* libPusher_ReactiveExtensions.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPusher_ReactiveExtensions.a; sourceTree = BUILT_PRODUCTS_DIR; }; A3FE41C811811161009CF5D7 /* NewEventViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NewEventViewController.h; sourceTree = ""; }; A3FE41C911811161009CF5D7 /* NewEventViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NewEventViewController.m; sourceTree = ""; }; A3FE41CA11811161009CF5D7 /* NewEventViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = NewEventViewController.xib; path = Sample/Classes/NewEventViewController.xib; sourceTree = ""; }; @@ -251,6 +283,7 @@ 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */, 288765A50DF7441C002DB57D /* CoreGraphics.framework in Frameworks */, A3D1D0B61157CCDE009A12AD /* CFNetwork.framework in Frameworks */, + A3E5CC3818466915006A54DD /* libPusher_ReactiveExtensions.a in Frameworks */, A3A297DB17368BE200BD956D /* libPusher.a in Frameworks */, 5D5C4E7E0F2A4C92B9D85932 /* libPods.a in Frameworks */, ); @@ -296,6 +329,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + A3E5CC3118466879006A54DD /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -336,6 +376,7 @@ A3D1D2B71158013F009A12AD /* libPusher.a */, A3A1A0EB115813E2001EF877 /* UnitTests.octest */, A3A9F9581496E96100F83617 /* Functional Specs.octest */, + A3E5CC3718466879006A54DD /* libPusher_ReactiveExtensions.a */, ); name = Products; sourceTree = ""; @@ -547,7 +588,6 @@ A3D1D2C911580162009A12AD /* PTPusher.h in Headers */, A3D1D2CB11580162009A12AD /* PTPusherEvent.h in Headers */, A3FE429E11811EEE009CF5D7 /* NSString+Hashing.h in Headers */, - A394E6F918463DFA004C70A2 /* PTPusherChannel+ReactiveExtensions.h in Headers */, A35281D013F721A8000687C0 /* PTPusherConnection.h in Headers */, A35281D313F72E03000687C0 /* PTPusherEventPublisher.h in Headers */, A35281D613F736DF000687C0 /* PTPusherEventDispatcher.h in Headers */, @@ -557,12 +597,10 @@ A3D1D2C711580162009A12AD /* PTEventListener.h in Headers */, A3AC28B613F75530001C4808 /* PTURLRequestOperation.h in Headers */, A32EE793184364D800E3B072 /* PTPusherChannel_Private.h in Headers */, - A3E5CC0218464959006A54DD /* PTPusher+ReactiveExtensions_Internal.h in Headers */, A3AC28C313F76C51001C4808 /* PTPusherChannelAuthorizationOperation.h in Headers */, A3B2931F14D8D96900C6B79F /* PTPusherPresenceChannelDelegate.h in Headers */, A3382DE41525C3FA0025550D /* PTJSON.h in Headers */, A3CA666914D96814003E2F1E /* PTPusherChannel.h in Headers */, - A3E5CBFD1846461A006A54DD /* PTPusher+ReactiveExtensions.h in Headers */, A3CA670E14DBBAA1003E2F1E /* PTPusherErrors.h in Headers */, A3CA671514DBBAE1003E2F1E /* NSDictionary+QueryString.h in Headers */, A37E167414E572C900DCA3A6 /* PTPusherMacros.h in Headers */, @@ -572,6 +610,39 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + A3E5CC0418466879006A54DD /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + A3E5CC0518466879006A54DD /* PTPusherDelegate.h in Headers */, + A3E5CC0618466879006A54DD /* PTPusher.h in Headers */, + A3E5CC0718466879006A54DD /* PTPusherEvent.h in Headers */, + A3E5CC0818466879006A54DD /* NSString+Hashing.h in Headers */, + A3E5CC0918466879006A54DD /* PTPusherChannel+ReactiveExtensions.h in Headers */, + A3E5CC0A18466879006A54DD /* PTPusherConnection.h in Headers */, + A3E5CC0B18466879006A54DD /* PTPusherEventPublisher.h in Headers */, + A3E5CC0C18466879006A54DD /* PTPusherEventDispatcher.h in Headers */, + A3E5CC0D18466879006A54DD /* PTTargetActionEventListener.h in Headers */, + A3E5CC0E18466879006A54DD /* PTBlockEventListener.h in Headers */, + A3E5CC0F18466879006A54DD /* PTPusherAPI.h in Headers */, + A3E5CC1018466879006A54DD /* PTEventListener.h in Headers */, + A3E5CC1118466879006A54DD /* PTURLRequestOperation.h in Headers */, + A3E5CC1218466879006A54DD /* PTPusherChannel_Private.h in Headers */, + A3E5CC1318466879006A54DD /* PTPusher+ReactiveExtensions_Internal.h in Headers */, + A3E5CC1418466879006A54DD /* PTPusherChannelAuthorizationOperation.h in Headers */, + A3E5CC1518466879006A54DD /* PTPusherPresenceChannelDelegate.h in Headers */, + A3E5CC1618466879006A54DD /* PTJSON.h in Headers */, + A3E5CC1718466879006A54DD /* PTPusherChannel.h in Headers */, + A3E5CC1818466879006A54DD /* PTPusher+ReactiveExtensions.h in Headers */, + A3E5CC1918466879006A54DD /* PTPusherErrors.h in Headers */, + A3E5CC1A18466879006A54DD /* NSDictionary+QueryString.h in Headers */, + A3E5CC1B18466879006A54DD /* PTPusherMacros.h in Headers */, + A3E5CC1C18466879006A54DD /* PTPusher+Testing.h in Headers */, + A3E5CC1D18466879006A54DD /* PTPusherMockConnection.h in Headers */, + A3E5CC1E18466879006A54DD /* Pusher.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ @@ -591,6 +662,7 @@ buildRules = ( ); dependencies = ( + A3E5CC3A18466956006A54DD /* PBXTargetDependency */, A3D1D3031158029F009A12AD /* PBXTargetDependency */, ); name = SampleApp; @@ -658,6 +730,25 @@ productReference = A3D1D2B71158013F009A12AD /* libPusher.a */; productType = "com.apple.product-type.library.static"; }; + A3E5CC0318466879006A54DD /* libPusher_ReactiveExtensions.a */ = { + isa = PBXNativeTarget; + buildConfigurationList = A3E5CC3418466879006A54DD /* Build configuration list for PBXNativeTarget "libPusher_ReactiveExtensions.a" */; + buildPhases = ( + A3E5CC0418466879006A54DD /* Headers */, + A3E5CC1F18466879006A54DD /* Sources */, + A3E5CC3118466879006A54DD /* Frameworks */, + A3E5CC3218466879006A54DD /* Copy Pods Resources */, + A3E5CC3318466879006A54DD /* Just here to export ENV for Rake */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = libPusher_ReactiveExtensions.a; + productName = libPusher; + productReference = A3E5CC3718466879006A54DD /* libPusher_ReactiveExtensions.a */; + productType = "com.apple.product-type.library.static"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -679,6 +770,7 @@ targets = ( 1D6058900D05DD3D006BFB54 /* SampleApp */, A3D1D2B61158013F009A12AD /* libPusher */, + A3E5CC0318466879006A54DD /* libPusher_ReactiveExtensions.a */, A3A1A0EA115813E2001EF877 /* UnitTests */, A3A9F9571496E96100F83617 /* Functional Specs */, ); @@ -856,6 +948,35 @@ shellPath = /bin/sh; shellScript = ""; }; + A3E5CC3218466879006A54DD /* Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Pods-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + A3E5CC3318466879006A54DD /* Just here to export ENV for Rake */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Just here to export ENV for Rake"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = ""; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -908,7 +1029,6 @@ buildActionMask = 2147483647; files = ( A3FE44E71181C3C5009CF5D7 /* NSDictionary+QueryString.m in Sources */, - A394E6FA18463DFA004C70A2 /* PTPusherChannel+ReactiveExtensions.m in Sources */, A3D1D2CA11580162009A12AD /* PTPusher.m in Sources */, A3D1D2CC11580162009A12AD /* PTPusherEvent.m in Sources */, A3FE429F11811EEE009CF5D7 /* NSString+Hashing.m in Sources */, @@ -917,7 +1037,6 @@ A35281D713F736DF000687C0 /* PTPusherEventDispatcher.m in Sources */, A35281DC13F73C54000687C0 /* PTTargetActionEventListener.m in Sources */, A35281E513F75010000687C0 /* PTBlockEventListener.m in Sources */, - A3E5CBFE1846461A006A54DD /* PTPusher+ReactiveExtensions.m in Sources */, A35281EA13F75265000687C0 /* PTPusherAPI.m in Sources */, A3AC28B713F75530001C4808 /* PTURLRequestOperation.m in Sources */, A3AC28C413F76C51001C4808 /* PTPusherChannelAuthorizationOperation.m in Sources */, @@ -927,6 +1046,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + A3E5CC1F18466879006A54DD /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A3E5CC2118466879006A54DD /* PTPusherChannel+ReactiveExtensions.m in Sources */, + A3E5CC2A18466879006A54DD /* PTPusher+ReactiveExtensions.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ @@ -935,6 +1063,11 @@ target = A3D1D2B61158013F009A12AD /* libPusher */; targetProxy = A3D1D3021158029F009A12AD /* PBXContainerItemProxy */; }; + A3E5CC3A18466956006A54DD /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = A3E5CC0318466879006A54DD /* libPusher_ReactiveExtensions.a */; + targetProxy = A3E5CC3918466956006A54DD /* PBXContainerItemProxy */; + }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ @@ -1152,6 +1285,54 @@ }; name = Release; }; + A3E5CC3518466879006A54DD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_OBJC_ARC = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1.5; + DSTROOT = /tmp/xcodeproj.dst; + DYLIB_CURRENT_VERSION = "$(CURRENT_PROJECT_VERSION)"; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = libPusher_Prefix.pch; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "kPTPusherClientLibraryVersion=@\"$(CURRENT_PROJECT_VERSION)\"", + ); + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + OTHER_LDFLAGS = "$(inherited)"; + PRODUCT_NAME = Pusher_ReactiveExtensions; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + A3E5CC3618466879006A54DD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_OBJC_ARC = YES; + COPY_PHASE_STRIP = YES; + CURRENT_PROJECT_VERSION = 1.5; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DSTROOT = /tmp/xcodeproj.dst; + DYLIB_CURRENT_VERSION = "$(CURRENT_PROJECT_VERSION)"; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = libPusher_Prefix.pch; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "kPTPusherClientLibraryVersion=@\"$(CURRENT_PROJECT_VERSION)\"", + ); + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + OTHER_LDFLAGS = "$(inherited)"; + PRODUCT_NAME = Pusher_ReactiveExtensions; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + ZERO_LINK = NO; + }; + name = Release; + }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = A315780A14D0751C000136A9 /* Pods.xcconfig */; @@ -1233,6 +1414,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + A3E5CC3418466879006A54DD /* Build configuration list for PBXNativeTarget "libPusher_ReactiveExtensions.a" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A3E5CC3518466879006A54DD /* Debug */, + A3E5CC3618466879006A54DD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; C01FCF4E08A954540054247B /* Build configuration list for PBXProject "libPusher" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/libPusher.xcodeproj/xcshareddata/xcschemes/libPusher+ReactiveExtensions.xcscheme b/libPusher.xcodeproj/xcshareddata/xcschemes/libPusher+ReactiveExtensions.xcscheme new file mode 100644 index 00000000..e49840d3 --- /dev/null +++ b/libPusher.xcodeproj/xcshareddata/xcschemes/libPusher+ReactiveExtensions.xcscheme @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + From 4c4711dcb6a8218ee354bdd5941b07ce00688d3a Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Wed, 27 Nov 2013 18:33:09 +0000 Subject: [PATCH 74/88] Correctly exclude private headers. --- .../NSDictionary+QueryString.h | 0 .../{ => Private Headers}/NSString+Hashing.h | 0 .../PTBlockEventListener.h | 0 Library/{ => Private Headers}/PTJSON.h | 0 .../PTPusherChannelAuthorizationOperation.h | 0 .../PTPusherChannel_Private.h | 0 .../PTTargetActionEventListener.h | 0 .../PTURLRequestOperation.h | 0 libPusher.podspec | 10 +-- libPusher.xcodeproj/project.pbxproj | 88 +++++++++---------- 10 files changed, 42 insertions(+), 56 deletions(-) rename Library/{ => Private Headers}/NSDictionary+QueryString.h (100%) rename Library/{ => Private Headers}/NSString+Hashing.h (100%) rename Library/{ => Private Headers}/PTBlockEventListener.h (100%) rename Library/{ => Private Headers}/PTJSON.h (100%) rename Library/{ => Private Headers}/PTPusherChannelAuthorizationOperation.h (100%) rename Library/{ => Private Headers}/PTPusherChannel_Private.h (100%) rename Library/{ => Private Headers}/PTTargetActionEventListener.h (100%) rename Library/{ => Private Headers}/PTURLRequestOperation.h (100%) diff --git a/Library/NSDictionary+QueryString.h b/Library/Private Headers/NSDictionary+QueryString.h similarity index 100% rename from Library/NSDictionary+QueryString.h rename to Library/Private Headers/NSDictionary+QueryString.h diff --git a/Library/NSString+Hashing.h b/Library/Private Headers/NSString+Hashing.h similarity index 100% rename from Library/NSString+Hashing.h rename to Library/Private Headers/NSString+Hashing.h diff --git a/Library/PTBlockEventListener.h b/Library/Private Headers/PTBlockEventListener.h similarity index 100% rename from Library/PTBlockEventListener.h rename to Library/Private Headers/PTBlockEventListener.h diff --git a/Library/PTJSON.h b/Library/Private Headers/PTJSON.h similarity index 100% rename from Library/PTJSON.h rename to Library/Private Headers/PTJSON.h diff --git a/Library/PTPusherChannelAuthorizationOperation.h b/Library/Private Headers/PTPusherChannelAuthorizationOperation.h similarity index 100% rename from Library/PTPusherChannelAuthorizationOperation.h rename to Library/Private Headers/PTPusherChannelAuthorizationOperation.h diff --git a/Library/PTPusherChannel_Private.h b/Library/Private Headers/PTPusherChannel_Private.h similarity index 100% rename from Library/PTPusherChannel_Private.h rename to Library/Private Headers/PTPusherChannel_Private.h diff --git a/Library/PTTargetActionEventListener.h b/Library/Private Headers/PTTargetActionEventListener.h similarity index 100% rename from Library/PTTargetActionEventListener.h rename to Library/Private Headers/PTTargetActionEventListener.h diff --git a/Library/PTURLRequestOperation.h b/Library/Private Headers/PTURLRequestOperation.h similarity index 100% rename from Library/PTURLRequestOperation.h rename to Library/Private Headers/PTURLRequestOperation.h diff --git a/libPusher.podspec b/libPusher.podspec index 0a7d52ef..10497750 100644 --- a/libPusher.podspec +++ b/libPusher.podspec @@ -16,14 +16,8 @@ Pod::Spec.new do |s| s.subspec 'Core' do |subspec| subspec.dependency 'SocketRocket', "0.2" - subspec.source_files = 'Library/*' - subspec.private_header_files = *%w( - PTJSON.h - PTJSONParser.h - NSString+Hashing.h - NSDictionary+QueryString.h - PTPusherChannel_Private.h - ) + subspec.source_files = 'Library/**/*.{h,m}' + subspec.private_header_files = 'Library/Private Headers/*' subspec.xcconfig = { 'GCC_PREPROCESSOR_DEFINITIONS' => 'kPTPusherClientLibraryVersion=@\"1.5\"' } diff --git a/libPusher.xcodeproj/project.pbxproj b/libPusher.xcodeproj/project.pbxproj index da4d54ca..c47e413a 100755 --- a/libPusher.xcodeproj/project.pbxproj +++ b/libPusher.xcodeproj/project.pbxproj @@ -21,17 +21,13 @@ A317375F155D38C4007E4BBA /* PTPusher+Testing.h in Headers */ = {isa = PBXBuildFile; fileRef = A317375D155D38C4007E4BBA /* PTPusher+Testing.h */; settings = {ATTRIBUTES = (Public, ); }; }; A3173760155D38C4007E4BBA /* PTPusher+Testing.m in Sources */ = {isa = PBXBuildFile; fileRef = A317375E155D38C4007E4BBA /* PTPusher+Testing.m */; }; A3226317155D481C00A46067 /* PTPusherMockConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = A3173758155D2D21007E4BBA /* PTPusherMockConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A32EE793184364D800E3B072 /* PTPusherChannel_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A32EE792184364D800E3B072 /* PTPusherChannel_Private.h */; }; A3382DE31525C3F70025550D /* PTJSON.m in Sources */ = {isa = PBXBuildFile; fileRef = A30950121525C272008F695B /* PTJSON.m */; }; - A3382DE41525C3FA0025550D /* PTJSON.h in Headers */ = {isa = PBXBuildFile; fileRef = A30950111525C272008F695B /* PTJSON.h */; }; A35281D013F721A8000687C0 /* PTPusherConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = A35281CE13F721A8000687C0 /* PTPusherConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; A35281D113F721A8000687C0 /* PTPusherConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = A35281CF13F721A8000687C0 /* PTPusherConnection.m */; }; A35281D313F72E03000687C0 /* PTPusherEventPublisher.h in Headers */ = {isa = PBXBuildFile; fileRef = A35281D213F72E03000687C0 /* PTPusherEventPublisher.h */; settings = {ATTRIBUTES = (Public, ); }; }; A35281D613F736DF000687C0 /* PTPusherEventDispatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = A35281D413F736DF000687C0 /* PTPusherEventDispatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; A35281D713F736DF000687C0 /* PTPusherEventDispatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = A35281D513F736DF000687C0 /* PTPusherEventDispatcher.m */; }; - A35281DB13F73C54000687C0 /* PTTargetActionEventListener.h in Headers */ = {isa = PBXBuildFile; fileRef = A35281D913F73C54000687C0 /* PTTargetActionEventListener.h */; }; A35281DC13F73C54000687C0 /* PTTargetActionEventListener.m in Sources */ = {isa = PBXBuildFile; fileRef = A35281DA13F73C54000687C0 /* PTTargetActionEventListener.m */; }; - A35281E413F75010000687C0 /* PTBlockEventListener.h in Headers */ = {isa = PBXBuildFile; fileRef = A35281E213F75010000687C0 /* PTBlockEventListener.h */; }; A35281E513F75010000687C0 /* PTBlockEventListener.m in Sources */ = {isa = PBXBuildFile; fileRef = A35281E313F75010000687C0 /* PTBlockEventListener.m */; }; A35281E913F75265000687C0 /* PTPusherAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = A35281E713F75265000687C0 /* PTPusherAPI.h */; settings = {ATTRIBUTES = (Public, ); }; }; A35281EA13F75265000687C0 /* PTPusherAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = A35281E813F75265000687C0 /* PTPusherAPI.m */; }; @@ -70,16 +66,13 @@ A3A9FA491496EC0C00F83617 /* BasicEventHandlingSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = A3A9F96A1496E9C300F83617 /* BasicEventHandlingSpec.m */; }; A3A9FA4D1496EEB300F83617 /* SpecHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = A3A9F96D1496E9E500F83617 /* SpecHelper.m */; }; A3A9FA4F1496EEE000F83617 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A3D1D0B51157CCDE009A12AD /* CFNetwork.framework */; }; - A3AC28B613F75530001C4808 /* PTURLRequestOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A3AC28B413F75530001C4808 /* PTURLRequestOperation.h */; }; A3AC28B713F75530001C4808 /* PTURLRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = A3AC28B513F75530001C4808 /* PTURLRequestOperation.m */; }; - A3AC28C313F76C51001C4808 /* PTPusherChannelAuthorizationOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A3AC28C113F76C50001C4808 /* PTPusherChannelAuthorizationOperation.h */; }; A3AC28C413F76C51001C4808 /* PTPusherChannelAuthorizationOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = A3AC28C213F76C50001C4808 /* PTPusherChannelAuthorizationOperation.m */; }; A3B2931F14D8D96900C6B79F /* PTPusherPresenceChannelDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = A39E238A13F7E85C0083CAD7 /* PTPusherPresenceChannelDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; A3B7E4EB1581672A00CDA6DA /* ClientEventsSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = A3B7E4EA1581672A00CDA6DA /* ClientEventsSpec.m */; }; A3C32D9B14D083C10017FAED /* PTPusherEventSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = A3C32D9A14D083C10017FAED /* PTPusherEventSpec.m */; }; A3CA666914D96814003E2F1E /* PTPusherChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = A3FE42181181173B009CF5D7 /* PTPusherChannel.h */; settings = {ATTRIBUTES = (Public, ); }; }; A3CA670E14DBBAA1003E2F1E /* PTPusherErrors.h in Headers */ = {isa = PBXBuildFile; fileRef = A39E238613F7E3FD0083CAD7 /* PTPusherErrors.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A3CA671514DBBAE1003E2F1E /* NSDictionary+QueryString.h in Headers */ = {isa = PBXBuildFile; fileRef = A3FE42FF11812541009CF5D7 /* NSDictionary+QueryString.h */; }; A3D1D0B61157CCDE009A12AD /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A3D1D0B51157CCDE009A12AD /* CFNetwork.framework */; }; A3D1D2861157FA30009A12AD /* PusherEventsAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A3D1D27E1157FA30009A12AD /* PusherEventsAppDelegate.m */; }; A3D1D2871157FA30009A12AD /* PusherEventsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A3D1D2801157FA30009A12AD /* PusherEventsViewController.m */; }; @@ -97,25 +90,17 @@ A3E5CC0518466879006A54DD /* PTPusherDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = A3A1A41611582DC3001EF877 /* PTPusherDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; A3E5CC0618466879006A54DD /* PTPusher.h in Headers */ = {isa = PBXBuildFile; fileRef = A3D1D28E1157FA4C009A12AD /* PTPusher.h */; settings = {ATTRIBUTES = (Public, ); }; }; A3E5CC0718466879006A54DD /* PTPusherEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = A3D1D2901157FA4C009A12AD /* PTPusherEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A3E5CC0818466879006A54DD /* NSString+Hashing.h in Headers */ = {isa = PBXBuildFile; fileRef = A3FE429B11811EE8009CF5D7 /* NSString+Hashing.h */; }; A3E5CC0918466879006A54DD /* PTPusherChannel+ReactiveExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = A394E6F718463DFA004C70A2 /* PTPusherChannel+ReactiveExtensions.h */; settings = {ATTRIBUTES = (Public, ); }; }; A3E5CC0A18466879006A54DD /* PTPusherConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = A35281CE13F721A8000687C0 /* PTPusherConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; A3E5CC0B18466879006A54DD /* PTPusherEventPublisher.h in Headers */ = {isa = PBXBuildFile; fileRef = A35281D213F72E03000687C0 /* PTPusherEventPublisher.h */; settings = {ATTRIBUTES = (Public, ); }; }; A3E5CC0C18466879006A54DD /* PTPusherEventDispatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = A35281D413F736DF000687C0 /* PTPusherEventDispatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A3E5CC0D18466879006A54DD /* PTTargetActionEventListener.h in Headers */ = {isa = PBXBuildFile; fileRef = A35281D913F73C54000687C0 /* PTTargetActionEventListener.h */; }; - A3E5CC0E18466879006A54DD /* PTBlockEventListener.h in Headers */ = {isa = PBXBuildFile; fileRef = A35281E213F75010000687C0 /* PTBlockEventListener.h */; }; A3E5CC0F18466879006A54DD /* PTPusherAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = A35281E713F75265000687C0 /* PTPusherAPI.h */; settings = {ATTRIBUTES = (Public, ); }; }; A3E5CC1018466879006A54DD /* PTEventListener.h in Headers */ = {isa = PBXBuildFile; fileRef = A3D1D28C1157FA4C009A12AD /* PTEventListener.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A3E5CC1118466879006A54DD /* PTURLRequestOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A3AC28B413F75530001C4808 /* PTURLRequestOperation.h */; }; - A3E5CC1218466879006A54DD /* PTPusherChannel_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A32EE792184364D800E3B072 /* PTPusherChannel_Private.h */; }; A3E5CC1318466879006A54DD /* PTPusher+ReactiveExtensions_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = A3E5CC0118464959006A54DD /* PTPusher+ReactiveExtensions_Internal.h */; }; - A3E5CC1418466879006A54DD /* PTPusherChannelAuthorizationOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A3AC28C113F76C50001C4808 /* PTPusherChannelAuthorizationOperation.h */; }; A3E5CC1518466879006A54DD /* PTPusherPresenceChannelDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = A39E238A13F7E85C0083CAD7 /* PTPusherPresenceChannelDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A3E5CC1618466879006A54DD /* PTJSON.h in Headers */ = {isa = PBXBuildFile; fileRef = A30950111525C272008F695B /* PTJSON.h */; }; A3E5CC1718466879006A54DD /* PTPusherChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = A3FE42181181173B009CF5D7 /* PTPusherChannel.h */; settings = {ATTRIBUTES = (Public, ); }; }; A3E5CC1818466879006A54DD /* PTPusher+ReactiveExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = A3E5CBFB1846461A006A54DD /* PTPusher+ReactiveExtensions.h */; settings = {ATTRIBUTES = (Public, ); }; }; A3E5CC1918466879006A54DD /* PTPusherErrors.h in Headers */ = {isa = PBXBuildFile; fileRef = A39E238613F7E3FD0083CAD7 /* PTPusherErrors.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A3E5CC1A18466879006A54DD /* NSDictionary+QueryString.h in Headers */ = {isa = PBXBuildFile; fileRef = A3FE42FF11812541009CF5D7 /* NSDictionary+QueryString.h */; }; A3E5CC1B18466879006A54DD /* PTPusherMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = A37E167314E572C900DCA3A6 /* PTPusherMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; A3E5CC1C18466879006A54DD /* PTPusher+Testing.h in Headers */ = {isa = PBXBuildFile; fileRef = A317375D155D38C4007E4BBA /* PTPusher+Testing.h */; settings = {ATTRIBUTES = (Public, ); }; }; A3E5CC1D18466879006A54DD /* PTPusherMockConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = A3173758155D2D21007E4BBA /* PTPusherMockConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -123,10 +108,17 @@ A3E5CC2118466879006A54DD /* PTPusherChannel+ReactiveExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = A394E6F818463DFA004C70A2 /* PTPusherChannel+ReactiveExtensions.m */; }; A3E5CC2A18466879006A54DD /* PTPusher+ReactiveExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = A3E5CBFC1846461A006A54DD /* PTPusher+ReactiveExtensions.m */; }; A3E5CC3818466915006A54DD /* libPusher_ReactiveExtensions.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A3E5CC3718466879006A54DD /* libPusher_ReactiveExtensions.a */; }; + A3E5CC4518466CD5006A54DD /* NSDictionary+QueryString.h in Headers */ = {isa = PBXBuildFile; fileRef = A3E5CC3D18466CD5006A54DD /* NSDictionary+QueryString.h */; }; + A3E5CC4618466CD5006A54DD /* NSString+Hashing.h in Headers */ = {isa = PBXBuildFile; fileRef = A3E5CC3E18466CD5006A54DD /* NSString+Hashing.h */; }; + A3E5CC4718466CD5006A54DD /* PTBlockEventListener.h in Headers */ = {isa = PBXBuildFile; fileRef = A3E5CC3F18466CD5006A54DD /* PTBlockEventListener.h */; }; + A3E5CC4818466CD5006A54DD /* PTJSON.h in Headers */ = {isa = PBXBuildFile; fileRef = A3E5CC4018466CD5006A54DD /* PTJSON.h */; }; + A3E5CC4918466CD5006A54DD /* PTPusherChannel_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A3E5CC4118466CD5006A54DD /* PTPusherChannel_Private.h */; }; + A3E5CC4A18466CD5006A54DD /* PTPusherChannelAuthorizationOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A3E5CC4218466CD5006A54DD /* PTPusherChannelAuthorizationOperation.h */; }; + A3E5CC4B18466CD5006A54DD /* PTTargetActionEventListener.h in Headers */ = {isa = PBXBuildFile; fileRef = A3E5CC4318466CD5006A54DD /* PTTargetActionEventListener.h */; }; + A3E5CC4C18466CD5006A54DD /* PTURLRequestOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A3E5CC4418466CD5006A54DD /* PTURLRequestOperation.h */; }; A3F032471822CC8A00976DA0 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F700C4637DC43EFA335D40F /* libPods.a */; }; A3FE41CB11811161009CF5D7 /* NewEventViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A3FE41C911811161009CF5D7 /* NewEventViewController.m */; }; A3FE41CC11811161009CF5D7 /* NewEventViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = A3FE41CA11811161009CF5D7 /* NewEventViewController.xib */; }; - A3FE429E11811EEE009CF5D7 /* NSString+Hashing.h in Headers */ = {isa = PBXBuildFile; fileRef = A3FE429B11811EE8009CF5D7 /* NSString+Hashing.h */; }; A3FE429F11811EEE009CF5D7 /* NSString+Hashing.m in Sources */ = {isa = PBXBuildFile; fileRef = A3FE429C11811EE8009CF5D7 /* NSString+Hashing.m */; }; A3FE44761181B7FE009CF5D7 /* PTPusherChannel.m in Sources */ = {isa = PBXBuildFile; fileRef = A3FE42191181173B009CF5D7 /* PTPusherChannel.m */; }; A3FE44E71181C3C5009CF5D7 /* NSDictionary+QueryString.m in Sources */ = {isa = PBXBuildFile; fileRef = A3FE430011812541009CF5D7 /* NSDictionary+QueryString.m */; }; @@ -175,7 +167,6 @@ A304895E1667A8A6009511CB /* PTPusherChannelAuthorizationOperationSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PTPusherChannelAuthorizationOperationSpec.m; sourceTree = ""; }; A30575CE15233C1200DA19BD /* PTPusherPresenceChannelSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PTPusherPresenceChannelSpec.m; sourceTree = ""; }; A30790D911583B7200EBFFF8 /* Constants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Constants.h; sourceTree = ""; }; - A30950111525C272008F695B /* PTJSON.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTJSON.h; sourceTree = ""; }; A30950121525C272008F695B /* PTJSON.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PTJSON.m; sourceTree = ""; }; A31577F714D0731B000136A9 /* Pods-specs.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Pods-specs.xcconfig"; path = "Pods/Pods-specs.xcconfig"; sourceTree = ""; }; A315780A14D0751C000136A9 /* Pods.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Pods.xcconfig; path = Pods/Pods.xcconfig; sourceTree = ""; }; @@ -184,15 +175,12 @@ A3173759155D2D21007E4BBA /* PTPusherMockConnection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PTPusherMockConnection.m; sourceTree = ""; }; A317375D155D38C4007E4BBA /* PTPusher+Testing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "PTPusher+Testing.h"; sourceTree = ""; }; A317375E155D38C4007E4BBA /* PTPusher+Testing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "PTPusher+Testing.m"; sourceTree = ""; }; - A32EE792184364D800E3B072 /* PTPusherChannel_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTPusherChannel_Private.h; sourceTree = ""; }; A35281CE13F721A8000687C0 /* PTPusherConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTPusherConnection.h; sourceTree = ""; }; A35281CF13F721A8000687C0 /* PTPusherConnection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PTPusherConnection.m; sourceTree = ""; }; A35281D213F72E03000687C0 /* PTPusherEventPublisher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTPusherEventPublisher.h; sourceTree = ""; }; A35281D413F736DF000687C0 /* PTPusherEventDispatcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTPusherEventDispatcher.h; sourceTree = ""; }; A35281D513F736DF000687C0 /* PTPusherEventDispatcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PTPusherEventDispatcher.m; sourceTree = ""; }; - A35281D913F73C54000687C0 /* PTTargetActionEventListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTTargetActionEventListener.h; sourceTree = ""; }; A35281DA13F73C54000687C0 /* PTTargetActionEventListener.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PTTargetActionEventListener.m; sourceTree = ""; }; - A35281E213F75010000687C0 /* PTBlockEventListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTBlockEventListener.h; sourceTree = ""; }; A35281E313F75010000687C0 /* PTBlockEventListener.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PTBlockEventListener.m; sourceTree = ""; }; A35281E713F75265000687C0 /* PTPusherAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTPusherAPI.h; sourceTree = ""; }; A35281E813F75265000687C0 /* PTPusherAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PTPusherAPI.m; sourceTree = ""; }; @@ -229,11 +217,9 @@ A3A9F96A1496E9C300F83617 /* BasicEventHandlingSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BasicEventHandlingSpec.m; sourceTree = ""; }; A3A9F96C1496E9E500F83617 /* SpecHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpecHelper.h; sourceTree = ""; }; A3A9F96D1496E9E500F83617 /* SpecHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SpecHelper.m; sourceTree = ""; }; - A3AC28B413F75530001C4808 /* PTURLRequestOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTURLRequestOperation.h; sourceTree = ""; }; A3AC28B513F75530001C4808 /* PTURLRequestOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PTURLRequestOperation.m; sourceTree = ""; }; A3AC28BC13F75BF1001C4808 /* PusherExampleMenuViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PusherExampleMenuViewController.h; sourceTree = ""; }; A3AC28BD13F75BF1001C4808 /* PusherExampleMenuViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PusherExampleMenuViewController.m; sourceTree = ""; }; - A3AC28C113F76C50001C4808 /* PTPusherChannelAuthorizationOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTPusherChannelAuthorizationOperation.h; sourceTree = ""; }; A3AC28C213F76C50001C4808 /* PTPusherChannelAuthorizationOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PTPusherChannelAuthorizationOperation.m; sourceTree = ""; }; A3B7E4EA1581672A00CDA6DA /* ClientEventsSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ClientEventsSpec.m; sourceTree = ""; }; A3C32D9A14D083C10017FAED /* PTPusherEventSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PTPusherEventSpec.m; sourceTree = ""; }; @@ -261,14 +247,20 @@ A3E5CBFC1846461A006A54DD /* PTPusher+ReactiveExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "PTPusher+ReactiveExtensions.m"; sourceTree = ""; }; A3E5CC0118464959006A54DD /* PTPusher+ReactiveExtensions_Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "PTPusher+ReactiveExtensions_Internal.h"; sourceTree = ""; }; A3E5CC3718466879006A54DD /* libPusher_ReactiveExtensions.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPusher_ReactiveExtensions.a; sourceTree = BUILT_PRODUCTS_DIR; }; + A3E5CC3D18466CD5006A54DD /* NSDictionary+QueryString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+QueryString.h"; sourceTree = ""; }; + A3E5CC3E18466CD5006A54DD /* NSString+Hashing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+Hashing.h"; sourceTree = ""; }; + A3E5CC3F18466CD5006A54DD /* PTBlockEventListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTBlockEventListener.h; sourceTree = ""; }; + A3E5CC4018466CD5006A54DD /* PTJSON.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTJSON.h; sourceTree = ""; }; + A3E5CC4118466CD5006A54DD /* PTPusherChannel_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTPusherChannel_Private.h; sourceTree = ""; }; + A3E5CC4218466CD5006A54DD /* PTPusherChannelAuthorizationOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTPusherChannelAuthorizationOperation.h; sourceTree = ""; }; + A3E5CC4318466CD5006A54DD /* PTTargetActionEventListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTTargetActionEventListener.h; sourceTree = ""; }; + A3E5CC4418466CD5006A54DD /* PTURLRequestOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTURLRequestOperation.h; sourceTree = ""; }; A3FE41C811811161009CF5D7 /* NewEventViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NewEventViewController.h; sourceTree = ""; }; A3FE41C911811161009CF5D7 /* NewEventViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NewEventViewController.m; sourceTree = ""; }; A3FE41CA11811161009CF5D7 /* NewEventViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = NewEventViewController.xib; path = Sample/Classes/NewEventViewController.xib; sourceTree = ""; }; A3FE42181181173B009CF5D7 /* PTPusherChannel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTPusherChannel.h; sourceTree = ""; }; A3FE42191181173B009CF5D7 /* PTPusherChannel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PTPusherChannel.m; sourceTree = ""; }; - A3FE429B11811EE8009CF5D7 /* NSString+Hashing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+Hashing.h"; sourceTree = ""; }; A3FE429C11811EE8009CF5D7 /* NSString+Hashing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+Hashing.m"; sourceTree = ""; }; - A3FE42FF11812541009CF5D7 /* NSDictionary+QueryString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+QueryString.h"; sourceTree = ""; }; A3FE430011812541009CF5D7 /* NSDictionary+QueryString.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDictionary+QueryString.m"; sourceTree = ""; }; F1A8F1FD27B9464DAC1AADB5 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ @@ -342,6 +334,7 @@ 080E96DDFE201D6D7F000001 /* Library */ = { isa = PBXGroup; children = ( + A3E5CC3C18466CD5006A54DD /* Private Headers */, A3173757155D2D12007E4BBA /* Testing */, A35281E613F7524C000687C0 /* REST API Client */, A35281D813F73C42000687C0 /* Event Listeners */, @@ -358,13 +351,11 @@ A3A1A41611582DC3001EF877 /* PTPusherDelegate.h */, A3FE42181181173B009CF5D7 /* PTPusherChannel.h */, A3FE42191181173B009CF5D7 /* PTPusherChannel.m */, - A3AC28C113F76C50001C4808 /* PTPusherChannelAuthorizationOperation.h */, A3AC28C213F76C50001C4808 /* PTPusherChannelAuthorizationOperation.m */, A35281CE13F721A8000687C0 /* PTPusherConnection.h */, A35281CF13F721A8000687C0 /* PTPusherConnection.m */, A39E238613F7E3FD0083CAD7 /* PTPusherErrors.h */, A39E238A13F7E85C0083CAD7 /* PTPusherPresenceChannelDelegate.h */, - A32EE792184364D800E3B072 /* PTPusherChannel_Private.h */, ); path = Library; sourceTree = ""; @@ -445,9 +436,7 @@ A35281D813F73C42000687C0 /* Event Listeners */ = { isa = PBXGroup; children = ( - A35281D913F73C54000687C0 /* PTTargetActionEventListener.h */, A35281DA13F73C54000687C0 /* PTTargetActionEventListener.m */, - A35281E213F75010000687C0 /* PTBlockEventListener.h */, A35281E313F75010000687C0 /* PTBlockEventListener.m */, ); name = "Event Listeners"; @@ -549,6 +538,21 @@ path = Classes; sourceTree = ""; }; + A3E5CC3C18466CD5006A54DD /* Private Headers */ = { + isa = PBXGroup; + children = ( + A3E5CC3D18466CD5006A54DD /* NSDictionary+QueryString.h */, + A3E5CC3E18466CD5006A54DD /* NSString+Hashing.h */, + A3E5CC3F18466CD5006A54DD /* PTBlockEventListener.h */, + A3E5CC4018466CD5006A54DD /* PTJSON.h */, + A3E5CC4118466CD5006A54DD /* PTPusherChannel_Private.h */, + A3E5CC4218466CD5006A54DD /* PTPusherChannelAuthorizationOperation.h */, + A3E5CC4318466CD5006A54DD /* PTTargetActionEventListener.h */, + A3E5CC4418466CD5006A54DD /* PTURLRequestOperation.h */, + ); + path = "Private Headers"; + sourceTree = ""; + }; A3FE41CD1181116C009CF5D7 /* Resources */ = { isa = PBXGroup; children = ( @@ -564,13 +568,9 @@ A3FE429311811ED6009CF5D7 /* Utility */ = { isa = PBXGroup; children = ( - A3AC28B413F75530001C4808 /* PTURLRequestOperation.h */, A3AC28B513F75530001C4808 /* PTURLRequestOperation.m */, - A30950111525C272008F695B /* PTJSON.h */, A30950121525C272008F695B /* PTJSON.m */, - A3FE429B11811EE8009CF5D7 /* NSString+Hashing.h */, A3FE429C11811EE8009CF5D7 /* NSString+Hashing.m */, - A3FE42FF11812541009CF5D7 /* NSDictionary+QueryString.h */, A3FE430011812541009CF5D7 /* NSDictionary+QueryString.m */, A37E167314E572C900DCA3A6 /* PTPusherMacros.h */, ); @@ -584,29 +584,29 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( + A3E5CC4B18466CD5006A54DD /* PTTargetActionEventListener.h in Headers */, + A3E5CC4A18466CD5006A54DD /* PTPusherChannelAuthorizationOperation.h in Headers */, A3A1A42A11582F26001EF877 /* PTPusherDelegate.h in Headers */, A3D1D2C911580162009A12AD /* PTPusher.h in Headers */, + A3E5CC4618466CD5006A54DD /* NSString+Hashing.h in Headers */, + A3E5CC4818466CD5006A54DD /* PTJSON.h in Headers */, A3D1D2CB11580162009A12AD /* PTPusherEvent.h in Headers */, - A3FE429E11811EEE009CF5D7 /* NSString+Hashing.h in Headers */, A35281D013F721A8000687C0 /* PTPusherConnection.h in Headers */, A35281D313F72E03000687C0 /* PTPusherEventPublisher.h in Headers */, A35281D613F736DF000687C0 /* PTPusherEventDispatcher.h in Headers */, - A35281DB13F73C54000687C0 /* PTTargetActionEventListener.h in Headers */, - A35281E413F75010000687C0 /* PTBlockEventListener.h in Headers */, + A3E5CC4C18466CD5006A54DD /* PTURLRequestOperation.h in Headers */, + A3E5CC4718466CD5006A54DD /* PTBlockEventListener.h in Headers */, A35281E913F75265000687C0 /* PTPusherAPI.h in Headers */, A3D1D2C711580162009A12AD /* PTEventListener.h in Headers */, - A3AC28B613F75530001C4808 /* PTURLRequestOperation.h in Headers */, - A32EE793184364D800E3B072 /* PTPusherChannel_Private.h in Headers */, - A3AC28C313F76C51001C4808 /* PTPusherChannelAuthorizationOperation.h in Headers */, A3B2931F14D8D96900C6B79F /* PTPusherPresenceChannelDelegate.h in Headers */, - A3382DE41525C3FA0025550D /* PTJSON.h in Headers */, A3CA666914D96814003E2F1E /* PTPusherChannel.h in Headers */, + A3E5CC4918466CD5006A54DD /* PTPusherChannel_Private.h in Headers */, A3CA670E14DBBAA1003E2F1E /* PTPusherErrors.h in Headers */, - A3CA671514DBBAE1003E2F1E /* NSDictionary+QueryString.h in Headers */, A37E167414E572C900DCA3A6 /* PTPusherMacros.h in Headers */, A317375F155D38C4007E4BBA /* PTPusher+Testing.h in Headers */, A3226317155D481C00A46067 /* PTPusherMockConnection.h in Headers */, 4D81597F1712C6CA0013A485 /* Pusher.h in Headers */, + A3E5CC4518466CD5006A54DD /* NSDictionary+QueryString.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -617,25 +617,17 @@ A3E5CC0518466879006A54DD /* PTPusherDelegate.h in Headers */, A3E5CC0618466879006A54DD /* PTPusher.h in Headers */, A3E5CC0718466879006A54DD /* PTPusherEvent.h in Headers */, - A3E5CC0818466879006A54DD /* NSString+Hashing.h in Headers */, A3E5CC0918466879006A54DD /* PTPusherChannel+ReactiveExtensions.h in Headers */, A3E5CC0A18466879006A54DD /* PTPusherConnection.h in Headers */, A3E5CC0B18466879006A54DD /* PTPusherEventPublisher.h in Headers */, A3E5CC0C18466879006A54DD /* PTPusherEventDispatcher.h in Headers */, - A3E5CC0D18466879006A54DD /* PTTargetActionEventListener.h in Headers */, - A3E5CC0E18466879006A54DD /* PTBlockEventListener.h in Headers */, A3E5CC0F18466879006A54DD /* PTPusherAPI.h in Headers */, A3E5CC1018466879006A54DD /* PTEventListener.h in Headers */, - A3E5CC1118466879006A54DD /* PTURLRequestOperation.h in Headers */, - A3E5CC1218466879006A54DD /* PTPusherChannel_Private.h in Headers */, A3E5CC1318466879006A54DD /* PTPusher+ReactiveExtensions_Internal.h in Headers */, - A3E5CC1418466879006A54DD /* PTPusherChannelAuthorizationOperation.h in Headers */, A3E5CC1518466879006A54DD /* PTPusherPresenceChannelDelegate.h in Headers */, - A3E5CC1618466879006A54DD /* PTJSON.h in Headers */, A3E5CC1718466879006A54DD /* PTPusherChannel.h in Headers */, A3E5CC1818466879006A54DD /* PTPusher+ReactiveExtensions.h in Headers */, A3E5CC1918466879006A54DD /* PTPusherErrors.h in Headers */, - A3E5CC1A18466879006A54DD /* NSDictionary+QueryString.h in Headers */, A3E5CC1B18466879006A54DD /* PTPusherMacros.h in Headers */, A3E5CC1C18466879006A54DD /* PTPusher+Testing.h in Headers */, A3E5CC1D18466879006A54DD /* PTPusherMockConnection.h in Headers */, From b4d9ebe33773314ddece31a9b8e88ea0437f6197 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Wed, 27 Nov 2013 18:36:50 +0000 Subject: [PATCH 75/88] Re-add private headers to OSX project --- .../libPusher-OSX.xcodeproj/project.pbxproj | 69 +++++++++++-------- 1 file changed, 41 insertions(+), 28 deletions(-) diff --git a/libPusher-OSX/libPusher-OSX.xcodeproj/project.pbxproj b/libPusher-OSX/libPusher-OSX.xcodeproj/project.pbxproj index 51e5566c..334423a0 100644 --- a/libPusher-OSX/libPusher-OSX.xcodeproj/project.pbxproj +++ b/libPusher-OSX/libPusher-OSX.xcodeproj/project.pbxproj @@ -8,7 +8,6 @@ /* Begin PBXBuildFile section */ A3141C4A176F2F4A008330D7 /* Pusher.h in Headers */ = {isa = PBXBuildFile; fileRef = A3141C49176F2F4A008330D7 /* Pusher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A3382DFE1525D0C90025550D /* PTJSON.h in Headers */ = {isa = PBXBuildFile; fileRef = A3382DFB1525D0C90025550D /* PTJSON.h */; }; A3382DFF1525D0C90025550D /* PTJSON.m in Sources */ = {isa = PBXBuildFile; fileRef = A3382DFC1525D0C90025550D /* PTJSON.m */; }; A373A2831562D3B000BFAECE /* PTPusher+Testing.h in Headers */ = {isa = PBXBuildFile; fileRef = A373A2811562D3B000BFAECE /* PTPusher+Testing.h */; settings = {ATTRIBUTES = (Public, ); }; }; A373A2841562D3B000BFAECE /* PTPusher+Testing.m in Sources */ = {isa = PBXBuildFile; fileRef = A373A2821562D3B000BFAECE /* PTPusher+Testing.m */; }; @@ -24,11 +23,8 @@ A37E168214E5736300DCA3A6 /* PTPusherMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = A37E168114E5736300DCA3A6 /* PTPusherMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; A3CA675914DBCB2D003E2F1E /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A3CA675814DBCB2D003E2F1E /* Cocoa.framework */; }; A3CA676314DBCB2D003E2F1E /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = A3CA676114DBCB2D003E2F1E /* InfoPlist.strings */; }; - A3CA678C14DBCB95003E2F1E /* NSDictionary+QueryString.h in Headers */ = {isa = PBXBuildFile; fileRef = A3CA676D14DBCB94003E2F1E /* NSDictionary+QueryString.h */; }; A3CA678D14DBCB95003E2F1E /* NSDictionary+QueryString.m in Sources */ = {isa = PBXBuildFile; fileRef = A3CA676E14DBCB94003E2F1E /* NSDictionary+QueryString.m */; }; - A3CA678E14DBCB95003E2F1E /* NSString+Hashing.h in Headers */ = {isa = PBXBuildFile; fileRef = A3CA676F14DBCB94003E2F1E /* NSString+Hashing.h */; }; A3CA678F14DBCB95003E2F1E /* NSString+Hashing.m in Sources */ = {isa = PBXBuildFile; fileRef = A3CA677014DBCB94003E2F1E /* NSString+Hashing.m */; }; - A3CA679014DBCB95003E2F1E /* PTBlockEventListener.h in Headers */ = {isa = PBXBuildFile; fileRef = A3CA677114DBCB94003E2F1E /* PTBlockEventListener.h */; }; A3CA679114DBCB95003E2F1E /* PTBlockEventListener.m in Sources */ = {isa = PBXBuildFile; fileRef = A3CA677214DBCB94003E2F1E /* PTBlockEventListener.m */; }; A3CA679214DBCB95003E2F1E /* PTEventListener.h in Headers */ = {isa = PBXBuildFile; fileRef = A3CA677314DBCB95003E2F1E /* PTEventListener.h */; settings = {ATTRIBUTES = (Public, ); }; }; A3CA679314DBCB95003E2F1E /* PTPusher.h in Headers */ = {isa = PBXBuildFile; fileRef = A3CA677414DBCB95003E2F1E /* PTPusher.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -37,7 +33,6 @@ A3CA679614DBCB95003E2F1E /* PTPusherAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = A3CA677714DBCB95003E2F1E /* PTPusherAPI.m */; }; A3CA679714DBCB95003E2F1E /* PTPusherChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = A3CA677814DBCB95003E2F1E /* PTPusherChannel.h */; settings = {ATTRIBUTES = (Public, ); }; }; A3CA679814DBCB95003E2F1E /* PTPusherChannel.m in Sources */ = {isa = PBXBuildFile; fileRef = A3CA677914DBCB95003E2F1E /* PTPusherChannel.m */; }; - A3CA679914DBCB95003E2F1E /* PTPusherChannelAuthorizationOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A3CA677A14DBCB95003E2F1E /* PTPusherChannelAuthorizationOperation.h */; }; A3CA679A14DBCB95003E2F1E /* PTPusherChannelAuthorizationOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = A3CA677B14DBCB95003E2F1E /* PTPusherChannelAuthorizationOperation.m */; }; A3CA679B14DBCB95003E2F1E /* PTPusherConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = A3CA677C14DBCB95003E2F1E /* PTPusherConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; A3CA679C14DBCB95003E2F1E /* PTPusherConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = A3CA677D14DBCB95003E2F1E /* PTPusherConnection.m */; }; @@ -49,15 +44,20 @@ A3CA67A414DBCB95003E2F1E /* PTPusherEventDispatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = A3CA678514DBCB95003E2F1E /* PTPusherEventDispatcher.m */; }; A3CA67A514DBCB95003E2F1E /* PTPusherEventPublisher.h in Headers */ = {isa = PBXBuildFile; fileRef = A3CA678614DBCB95003E2F1E /* PTPusherEventPublisher.h */; settings = {ATTRIBUTES = (Public, ); }; }; A3CA67A614DBCB95003E2F1E /* PTPusherPresenceChannelDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = A3CA678714DBCB95003E2F1E /* PTPusherPresenceChannelDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A3CA67A714DBCB95003E2F1E /* PTTargetActionEventListener.h in Headers */ = {isa = PBXBuildFile; fileRef = A3CA678814DBCB95003E2F1E /* PTTargetActionEventListener.h */; }; A3CA67A814DBCB95003E2F1E /* PTTargetActionEventListener.m in Sources */ = {isa = PBXBuildFile; fileRef = A3CA678914DBCB95003E2F1E /* PTTargetActionEventListener.m */; }; - A3CA67A914DBCB95003E2F1E /* PTURLRequestOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A3CA678A14DBCB95003E2F1E /* PTURLRequestOperation.h */; }; A3CA67AA14DBCB95003E2F1E /* PTURLRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = A3CA678B14DBCB95003E2F1E /* PTURLRequestOperation.m */; }; + A3E5CC5618467337006A54DD /* NSDictionary+QueryString.h in Headers */ = {isa = PBXBuildFile; fileRef = A3E5CC4E18467337006A54DD /* NSDictionary+QueryString.h */; }; + A3E5CC5718467337006A54DD /* NSString+Hashing.h in Headers */ = {isa = PBXBuildFile; fileRef = A3E5CC4F18467337006A54DD /* NSString+Hashing.h */; }; + A3E5CC5818467337006A54DD /* PTBlockEventListener.h in Headers */ = {isa = PBXBuildFile; fileRef = A3E5CC5018467337006A54DD /* PTBlockEventListener.h */; }; + A3E5CC5918467337006A54DD /* PTJSON.h in Headers */ = {isa = PBXBuildFile; fileRef = A3E5CC5118467337006A54DD /* PTJSON.h */; }; + A3E5CC5A18467337006A54DD /* PTPusherChannel_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A3E5CC5218467337006A54DD /* PTPusherChannel_Private.h */; }; + A3E5CC5B18467337006A54DD /* PTPusherChannelAuthorizationOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A3E5CC5318467337006A54DD /* PTPusherChannelAuthorizationOperation.h */; }; + A3E5CC5C18467337006A54DD /* PTTargetActionEventListener.h in Headers */ = {isa = PBXBuildFile; fileRef = A3E5CC5418467337006A54DD /* PTTargetActionEventListener.h */; }; + A3E5CC5D18467337006A54DD /* PTURLRequestOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A3E5CC5518467337006A54DD /* PTURLRequestOperation.h */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ A3141C49176F2F4A008330D7 /* Pusher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Pusher.h; sourceTree = ""; }; - A3382DFB1525D0C90025550D /* PTJSON.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PTJSON.h; path = ../../Library/PTJSON.h; sourceTree = ""; }; A3382DFC1525D0C90025550D /* PTJSON.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PTJSON.m; path = ../../Library/PTJSON.m; sourceTree = ""; }; A373A2811562D3B000BFAECE /* PTPusher+Testing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "PTPusher+Testing.h"; path = "../../Library/PTPusher+Testing.h"; sourceTree = ""; }; A373A2821562D3B000BFAECE /* PTPusher+Testing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "PTPusher+Testing.m"; path = "../../Library/PTPusher+Testing.m"; sourceTree = ""; }; @@ -76,11 +76,8 @@ A3CA676014DBCB2D003E2F1E /* libPusher-OSX-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "libPusher-OSX-Info.plist"; sourceTree = ""; }; A3CA676214DBCB2D003E2F1E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; A3CA676414DBCB2D003E2F1E /* libPusher-OSX-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "libPusher-OSX-Prefix.pch"; sourceTree = ""; }; - A3CA676D14DBCB94003E2F1E /* NSDictionary+QueryString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+QueryString.h"; path = "../../Library/NSDictionary+QueryString.h"; sourceTree = ""; }; A3CA676E14DBCB94003E2F1E /* NSDictionary+QueryString.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+QueryString.m"; path = "../../Library/NSDictionary+QueryString.m"; sourceTree = ""; }; - A3CA676F14DBCB94003E2F1E /* NSString+Hashing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSString+Hashing.h"; path = "../../Library/NSString+Hashing.h"; sourceTree = ""; }; A3CA677014DBCB94003E2F1E /* NSString+Hashing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSString+Hashing.m"; path = "../../Library/NSString+Hashing.m"; sourceTree = ""; }; - A3CA677114DBCB94003E2F1E /* PTBlockEventListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PTBlockEventListener.h; path = ../../Library/PTBlockEventListener.h; sourceTree = ""; }; A3CA677214DBCB94003E2F1E /* PTBlockEventListener.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PTBlockEventListener.m; path = ../../Library/PTBlockEventListener.m; sourceTree = ""; }; A3CA677314DBCB95003E2F1E /* PTEventListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PTEventListener.h; path = ../../Library/PTEventListener.h; sourceTree = ""; }; A3CA677414DBCB95003E2F1E /* PTPusher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PTPusher.h; path = ../../Library/PTPusher.h; sourceTree = ""; }; @@ -89,7 +86,6 @@ A3CA677714DBCB95003E2F1E /* PTPusherAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PTPusherAPI.m; path = ../../Library/PTPusherAPI.m; sourceTree = ""; }; A3CA677814DBCB95003E2F1E /* PTPusherChannel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PTPusherChannel.h; path = ../../Library/PTPusherChannel.h; sourceTree = ""; }; A3CA677914DBCB95003E2F1E /* PTPusherChannel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PTPusherChannel.m; path = ../../Library/PTPusherChannel.m; sourceTree = ""; }; - A3CA677A14DBCB95003E2F1E /* PTPusherChannelAuthorizationOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PTPusherChannelAuthorizationOperation.h; path = ../../Library/PTPusherChannelAuthorizationOperation.h; sourceTree = ""; }; A3CA677B14DBCB95003E2F1E /* PTPusherChannelAuthorizationOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PTPusherChannelAuthorizationOperation.m; path = ../../Library/PTPusherChannelAuthorizationOperation.m; sourceTree = ""; }; A3CA677C14DBCB95003E2F1E /* PTPusherConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PTPusherConnection.h; path = ../../Library/PTPusherConnection.h; sourceTree = ""; }; A3CA677D14DBCB95003E2F1E /* PTPusherConnection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PTPusherConnection.m; path = ../../Library/PTPusherConnection.m; sourceTree = ""; }; @@ -101,10 +97,16 @@ A3CA678514DBCB95003E2F1E /* PTPusherEventDispatcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PTPusherEventDispatcher.m; path = ../../Library/PTPusherEventDispatcher.m; sourceTree = ""; }; A3CA678614DBCB95003E2F1E /* PTPusherEventPublisher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PTPusherEventPublisher.h; path = ../../Library/PTPusherEventPublisher.h; sourceTree = ""; }; A3CA678714DBCB95003E2F1E /* PTPusherPresenceChannelDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PTPusherPresenceChannelDelegate.h; path = ../../Library/PTPusherPresenceChannelDelegate.h; sourceTree = ""; }; - A3CA678814DBCB95003E2F1E /* PTTargetActionEventListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PTTargetActionEventListener.h; path = ../../Library/PTTargetActionEventListener.h; sourceTree = ""; }; A3CA678914DBCB95003E2F1E /* PTTargetActionEventListener.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PTTargetActionEventListener.m; path = ../../Library/PTTargetActionEventListener.m; sourceTree = ""; }; - A3CA678A14DBCB95003E2F1E /* PTURLRequestOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PTURLRequestOperation.h; path = ../../Library/PTURLRequestOperation.h; sourceTree = ""; }; A3CA678B14DBCB95003E2F1E /* PTURLRequestOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PTURLRequestOperation.m; path = ../../Library/PTURLRequestOperation.m; sourceTree = ""; }; + A3E5CC4E18467337006A54DD /* NSDictionary+QueryString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+QueryString.h"; sourceTree = ""; }; + A3E5CC4F18467337006A54DD /* NSString+Hashing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+Hashing.h"; sourceTree = ""; }; + A3E5CC5018467337006A54DD /* PTBlockEventListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTBlockEventListener.h; sourceTree = ""; }; + A3E5CC5118467337006A54DD /* PTJSON.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTJSON.h; sourceTree = ""; }; + A3E5CC5218467337006A54DD /* PTPusherChannel_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTPusherChannel_Private.h; sourceTree = ""; }; + A3E5CC5318467337006A54DD /* PTPusherChannelAuthorizationOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTPusherChannelAuthorizationOperation.h; sourceTree = ""; }; + A3E5CC5418467337006A54DD /* PTTargetActionEventListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTTargetActionEventListener.h; sourceTree = ""; }; + A3E5CC5518467337006A54DD /* PTURLRequestOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTURLRequestOperation.h; sourceTree = ""; }; A3F203CA14DEF36C0093C793 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; A3F203CB14DEF36C0093C793 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; A3F203CC14DEF36C0093C793 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; @@ -157,10 +159,10 @@ A3CA675E14DBCB2D003E2F1E /* libPusher-OSX */ = { isa = PBXGroup; children = ( + A3E5CC4D18467337006A54DD /* Private Headers */, A3141C49176F2F4A008330D7 /* Pusher.h */, A373A2811562D3B000BFAECE /* PTPusher+Testing.h */, A373A2821562D3B000BFAECE /* PTPusher+Testing.m */, - A3382DFB1525D0C90025550D /* PTJSON.h */, A3382DFC1525D0C90025550D /* PTJSON.m */, A37E168114E5736300DCA3A6 /* PTPusherMacros.h */, A37E160B14E4C95B00DCA3A6 /* base64.c */, @@ -169,11 +171,8 @@ A37E160E14E4C95C00DCA3A6 /* NSData+SRB64Additions.m */, A37E161014E4C95C00DCA3A6 /* SRWebSocket.h */, A37E161114E4C95C00DCA3A6 /* SRWebSocket.m */, - A3CA676D14DBCB94003E2F1E /* NSDictionary+QueryString.h */, A3CA676E14DBCB94003E2F1E /* NSDictionary+QueryString.m */, - A3CA676F14DBCB94003E2F1E /* NSString+Hashing.h */, A3CA677014DBCB94003E2F1E /* NSString+Hashing.m */, - A3CA677114DBCB94003E2F1E /* PTBlockEventListener.h */, A3CA677214DBCB94003E2F1E /* PTBlockEventListener.m */, A3CA677314DBCB95003E2F1E /* PTEventListener.h */, A3CA677414DBCB95003E2F1E /* PTPusher.h */, @@ -182,7 +181,6 @@ A3CA677714DBCB95003E2F1E /* PTPusherAPI.m */, A3CA677814DBCB95003E2F1E /* PTPusherChannel.h */, A3CA677914DBCB95003E2F1E /* PTPusherChannel.m */, - A3CA677A14DBCB95003E2F1E /* PTPusherChannelAuthorizationOperation.h */, A3CA677B14DBCB95003E2F1E /* PTPusherChannelAuthorizationOperation.m */, A3CA677C14DBCB95003E2F1E /* PTPusherConnection.h */, A3CA677D14DBCB95003E2F1E /* PTPusherConnection.m */, @@ -194,9 +192,7 @@ A3CA678514DBCB95003E2F1E /* PTPusherEventDispatcher.m */, A3CA678614DBCB95003E2F1E /* PTPusherEventPublisher.h */, A3CA678714DBCB95003E2F1E /* PTPusherPresenceChannelDelegate.h */, - A3CA678814DBCB95003E2F1E /* PTTargetActionEventListener.h */, A3CA678914DBCB95003E2F1E /* PTTargetActionEventListener.m */, - A3CA678A14DBCB95003E2F1E /* PTURLRequestOperation.h */, A3CA678B14DBCB95003E2F1E /* PTURLRequestOperation.m */, A3CA675F14DBCB2D003E2F1E /* Supporting Files */, ); @@ -213,6 +209,22 @@ name = "Supporting Files"; sourceTree = ""; }; + A3E5CC4D18467337006A54DD /* Private Headers */ = { + isa = PBXGroup; + children = ( + A3E5CC4E18467337006A54DD /* NSDictionary+QueryString.h */, + A3E5CC4F18467337006A54DD /* NSString+Hashing.h */, + A3E5CC5018467337006A54DD /* PTBlockEventListener.h */, + A3E5CC5118467337006A54DD /* PTJSON.h */, + A3E5CC5218467337006A54DD /* PTPusherChannel_Private.h */, + A3E5CC5318467337006A54DD /* PTPusherChannelAuthorizationOperation.h */, + A3E5CC5418467337006A54DD /* PTTargetActionEventListener.h */, + A3E5CC5518467337006A54DD /* PTURLRequestOperation.h */, + ); + name = "Private Headers"; + path = "../../Library/Private Headers"; + sourceTree = ""; + }; A3F203C914DEF36C0093C793 /* Other Frameworks */ = { isa = PBXGroup; children = ( @@ -230,29 +242,30 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - A3CA678C14DBCB95003E2F1E /* NSDictionary+QueryString.h in Headers */, - A3CA678E14DBCB95003E2F1E /* NSString+Hashing.h in Headers */, - A3CA679014DBCB95003E2F1E /* PTBlockEventListener.h in Headers */, A3CA679214DBCB95003E2F1E /* PTEventListener.h in Headers */, A3CA679314DBCB95003E2F1E /* PTPusher.h in Headers */, A3CA679514DBCB95003E2F1E /* PTPusherAPI.h in Headers */, + A3E5CC5B18467337006A54DD /* PTPusherChannelAuthorizationOperation.h in Headers */, + A3E5CC5C18467337006A54DD /* PTTargetActionEventListener.h in Headers */, A3CA679714DBCB95003E2F1E /* PTPusherChannel.h in Headers */, - A3CA679914DBCB95003E2F1E /* PTPusherChannelAuthorizationOperation.h in Headers */, A3CA679B14DBCB95003E2F1E /* PTPusherConnection.h in Headers */, + A3E5CC5918467337006A54DD /* PTJSON.h in Headers */, A3CA679F14DBCB95003E2F1E /* PTPusherDelegate.h in Headers */, A373A2831562D3B000BFAECE /* PTPusher+Testing.h in Headers */, + A3E5CC5618467337006A54DD /* NSDictionary+QueryString.h in Headers */, A3CA67A014DBCB95003E2F1E /* PTPusherErrors.h in Headers */, A3CA67A114DBCB95003E2F1E /* PTPusherEvent.h in Headers */, A3141C4A176F2F4A008330D7 /* Pusher.h in Headers */, A3CA67A314DBCB95003E2F1E /* PTPusherEventDispatcher.h in Headers */, + A3E5CC5D18467337006A54DD /* PTURLRequestOperation.h in Headers */, A3CA67A514DBCB95003E2F1E /* PTPusherEventPublisher.h in Headers */, A3CA67A614DBCB95003E2F1E /* PTPusherPresenceChannelDelegate.h in Headers */, - A3CA67A714DBCB95003E2F1E /* PTTargetActionEventListener.h in Headers */, A37E161714E4C95C00DCA3A6 /* SRWebSocket.h in Headers */, - A3382DFE1525D0C90025550D /* PTJSON.h in Headers */, - A3CA67A914DBCB95003E2F1E /* PTURLRequestOperation.h in Headers */, + A3E5CC5818467337006A54DD /* PTBlockEventListener.h in Headers */, + A3E5CC5A18467337006A54DD /* PTPusherChannel_Private.h in Headers */, A37E161314E4C95C00DCA3A6 /* base64.h in Headers */, A37E161414E4C95C00DCA3A6 /* NSData+SRB64Additions.h in Headers */, + A3E5CC5718467337006A54DD /* NSString+Hashing.h in Headers */, A37E168214E5736300DCA3A6 /* PTPusherMacros.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; From 4ac36fe953f8d5cd031083862dfc2303301cdf2d Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Wed, 27 Nov 2013 19:13:48 +0000 Subject: [PATCH 76/88] Updated changelog for 1.5 --- CHANGES.md | 63 ++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 56 insertions(+), 7 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 2df54ed2..bf336647 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,13 +1,62 @@ -# 1.5 - May 2013 +# 1.5 - December 2013 + +This release contains some significant bug fixes and API changes. All deprecated API in this release will be removed in the next release after this one. + +## Upgrade notes + +This is a summary of the changes in this release and notes on how to upgrade. The recommended way of installing libPusher is to use CocoaPods. + +As of this version, support for iOS < 5.0 and OSX < 10.8 has been dropped. + +### Improvements to disconnection handling + +`PTPusher` now goes to great lengths to ensure it remains connected whenever possible, including correctly handling error codes returned by the Pusher service (see http://pusher.com/docs/pusher_protocol#error-codes). + +In most cases where the connection fails or disconnects, Pusher will attempt to reconnect either immediately or after a configured delay (which defaults to 5s and can still be customised using the `reconnectDelay` property. + +In the case where Pusher returns a 4100 error code (over capacity), reconnection attempts will be attempted using a linear back-off delay. In all cases, Pusher will limit reconnection attempts to a maximum of three attempts before giving up. + +There are two circumstances in which the client will not reconnect automatically: + + * The client disconnects with an error code in the 4000-4099 range, which generally indicates a client misconfiguration. + * The client is not able to connect in the first place (i.e. it fails on it's first attempt), which normally indicates that there is no network connection or there is a server-side issue. + +A new delegate method, `pusher:connection:didDisconnectWithError:willAttemptReconnect:` will be called when Pusher disconnects. The `willAttemptReconnect:` parameter will indicate to clients that `PTPusher` will automatically reconnect. If this is `NO`, clients should decide how they want to proceed (e.g. you may want to check network reachability and manually reconnect when reachability changes). + +These changes should ensure that libPusher is much more reliable. You no longer need to explicitly disconnect and reconnect the client when going to the background or when the device is locked - in these situations the client will automatically reconnect when the app returns to the foreground or the device is unlocked. + +The delegate methods `pusher:connection:didDisconnectWithError` and `pusher:connection:didDisconnect:` are now deprecated and will be removed in the next release. + +Additionally, the `reconnectAutomatically` property of `PTPusher` has been deprecated. Setting this will not affect the automatic reconnection behaviour of `PTPusher`. If you need to take control of the auto-reconnect behaviour, a new delegate method is provided, `pusher:connectionWillAutomaticallyReconnect:afterDelay:`. Returning `NO` from this method will prevent the automatic reconnection attempt from happening. You will be responsible for manually reconnecting the client. + +Pusher can be prevented from connecting *at any time* by returning `NO` from another new delegate method, `pusher:connectionWillConnect:`. + +### Changes to presence channel members API + +The API for accessing members of a channel has been brought in line with the JavaScript client. + +Presence channels have a property `members`, which returns a instance of `PTPusherChannelMembers`, which is an unordered collection of members. Members can be retrieved by ID using the `memberWithID:` method. Members are represented by instances of the class `PTPusherChannelMember` rather than `NSDictionary` - see the headers for more information. There is also a property, `me`, which returns your own member object. + +### Experimental ReactiveExtensions + +This release contains some extensions that allow binding to events using ReactiveCocoa signals. These extensions are bundled as a separate library and if you're using CocoaPods, a sub-spec that is excluded from the default spec. These are still experimental so proceed with caution. You can add them to your project by adding `libPusher/ReactiveExtensions` to your `Podfile`. + +### Bug Fixes + +* There have been numerous bug fixes around connection handling and Pusher should generally be more stable and remain connected in most cases where you have network connectivity. +* libPusher now uses socket-native ping/pong and also sends client-side pings to keep the connection alive. +* Removed an assertion that would cause a crash if trying to send a client-send event when not connected. +* Calling `unsubscribe` on a channel while disconnected works as expected, with the channel being removed from the channels list and all bindings removed. + +### Other enhancements and changes -* Deprecated `reconnectAutomatically`, which is now ignored. Pusher will now try and reconnect automatically whenever possible by default, based on the error code returned by Pusher as defined in the latest Pusher protocol. -* Generally improved reconnection strategy. -* Added a global Pusher.h header file to reduce the number of imports needed -* Added `pusher:connectionWillConnect:` delegate method. -* Deprecated `pusher:willAuthorizeChannelWithRequest:` delegate method, replaced with pusher:willAuthorizeChannel:withRequest:. * Bumped Pusher protocol to version 6. -* Removed support for iOS4. * Switched to latest SocketRocket backend, improved threading issues +* Removed private headers from CocoaPod specification +* Moved fatal protocol errors that disallow reconnection into a new `PTPusherFatalErrorDomain` error domain. +* Fixed 64bit warnings. +* Removed JSONKit support. +* Log warnings when calling deprecated delegate methods. # 1.4 - October 2012 From 52f91b1e5f50f671d7df87ba405089223c0c0fd6 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Wed, 27 Nov 2013 19:14:16 +0000 Subject: [PATCH 77/88] This was the wrong type --- Library/PTPusherChannel.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Library/PTPusherChannel.h b/Library/PTPusherChannel.h index 16ba03ba..15511ee2 100644 --- a/Library/PTPusherChannel.h +++ b/Library/PTPusherChannel.h @@ -205,7 +205,7 @@ @property (nonatomic, readonly) NSInteger count; @property (nonatomic, copy, readonly) NSString *myID; -@property (nonatomic, readonly) NSDictionary *me; +@property (nonatomic, readonly) PTPusherChannelMember *me; - (PTPusherChannelMember *)memberWithID:(NSString *)userID; - (void)enumerateObjectsUsingBlock:(void (^)(id obj, BOOL *stop))block; From e93227ca776ed94216826bb91ff6622c47859a61 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Thu, 28 Nov 2013 14:27:44 +0000 Subject: [PATCH 78/88] Added a note about automatic connection behaviour. Putting this first in the change log as it's quite a vital change. --- CHANGES.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index bf336647..f6c67b89 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -8,6 +8,12 @@ This is a summary of the changes in this release and notes on how to upgrade. Th As of this version, support for iOS < 5.0 and OSX < 10.8 has been dropped. +### Initial connection is no longer automatic + +`PTPusher` will no longer connect automatically on initialisation and all methods that accept a connect `connectAutomatically` parameter (including the initialiser and all factory methods) are deprecated. + +You should now explicitly call `connect` when you are ready to connect. + ### Improvements to disconnection handling `PTPusher` now goes to great lengths to ensure it remains connected whenever possible, including correctly handling error codes returned by the Pusher service (see http://pusher.com/docs/pusher_protocol#error-codes). From 60e6d55bb521fad01a0788e12a7429e91f5e747d Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Thu, 28 Nov 2013 15:19:05 +0000 Subject: [PATCH 79/88] Various README improvements: * Use correct syntax highlighting * Added notes on channel lifecycle * Added notes on memory management with block-based event listeners --- README.md | 186 ++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 124 insertions(+), 62 deletions(-) diff --git a/README.md b/README.md index d1e0257b..dfd6d6f0 100644 --- a/README.md +++ b/README.md @@ -12,11 +12,11 @@ The libPusher API mirrors the Pusher Javascript client as closely as possible, w Subscribe to the ```chat``` channel and bind to the ```new-message``` event. ``` -// _client is a strong instance variable of class PTPusher -_client = [PTPusher pusherWithKey:@"YOUR_API_KEY" delegate:self encrypted:YES]; +// self.client is a strong instance variable of class PTPusher +self.client = [PTPusher pusherWithKey:@"YOUR_API_KEY" delegate:self encrypted:YES]; // subscribe to channel and bind to event -PTPusherChannel *channel = [_client subscribeToChannelNamed:@"chat"]; +PTPusherChannel *channel = [self.client subscribeToChannelNamed:@"chat"]; [channel bindToEventNamed:@"new-message" handleWithBlock:^(PTPusherEvent *channelEvent) { // channelEvent.data is a NSDictianary of the JSON object received NSString *message = [channelEvent.data objectForKey:@"text"]; @@ -26,41 +26,33 @@ PTPusherChannel *channel = [_client subscribeToChannelNamed:@"chat"]; ## Installation -Install using CocoaPods. +Install using CocoaPods is recommended. -``` -pod 'libPusher', '~> 1.4' +```ruby +pod 'libPusher', '~> 1.5' ``` Import Pusher into the class that wants to make use of the library. +```objc +#import ``` -#import -``` -A step-by-step guide on how to [install and setup CocoaPods]() to use libPusher is available on the wiki. +A step-by-step guide on how to [install and setup CocoaPods]() to use libPusher without using CocoaPods is available on the wiki. ## Usage -**Note**: in the following examples, ```_client``` is a strong instance variable. The instance returned by the```pusherWithKey:*:``` methods will be auto-released, according to standard Objective-C return conventions. You must retain the client otherwise it will be auto-released before anything useful happens causing silent failures and unexpected behaviour. +**Note**: in the following examples, ```client``` is a strong property. The instance returned by the ```pusherWithKey:*:``` methods will be auto-released, according to standard Objective-C return conventions. You must retain the client otherwise it will be auto-released before anything useful happens causing silent failures and unexpected behaviour. +### Create a client and connecting -### Create a connection +```objc +self.client = [PTPusher pusherWithKey:@"YOUR_API_KEY" delegate:self encrypted:YES]; +[self.client connect]; ``` -_client = [PTPusher pusherWithKey:@"YOUR_API_KEY" delegate:self encrypted:YES]; -``` -When calling the above method, the connection will be established immediately. -If you want to defer connection, you can do so: -``` -_client = [PTPusher pusherWithKey:@"YOUR_API_KEY" connectAutomatically:NO encrypted:YES]; -``` -When you are ready to connect, call - -``` -[_client connect] -``` +Note that client's do not connect automatically (as of version 1.5) - you are responsible for calling connect as needed. It is recommended to implement the PTPusherDelegate protocol in order to be notified when significant connection events happen such as connection errors, disconnects and retries. @@ -74,8 +66,8 @@ There is no need to wait for the client to establish a connection before subscri #### Subscribing to public channels -``` -PTPusherChannel *channel = [_client subscribeToChannelNamed:@"chat"]; +```objc +PTPusherChannel *channel = [self.client subscribeToChannelNamed:@"chat"]; ``` #### Subscribing to private channels @@ -84,9 +76,9 @@ This method will add the appropriate ```private-``` prefix to the channel name f Subscribing to private channels needs server-side authorisation. See section [Channel Authorisation](#channel-auth) for details. -``` -// subsribe to private-chat channel -PTPusherPrivateChannel *private = [_client subscribeToPrivateChannelNamed:@"chat"]; +```objc +// subscribe to private-chat channel +PTPusherPrivateChannel *private = [self.client subscribeToPrivateChannelNamed:@"chat"]; ``` #### Subscribing to presence channels @@ -95,20 +87,38 @@ This method will add the appropriate ```presence-``` prefix to the channel name Subscribing to presence channels needs server-side authorisation. See section [Channel Authorisation](#channel-auth) for details. -``` -// subsribe to presence-chat channel +```objc +// subscribe to presence-chat channel PTPusherPresenceChannel *presence = [client subscribeToPresenceChannelNamed:@"chat" delegate:self]; ``` It is recommended to implement ```PTPusherPresenceChannelDelegate``` protocol, to receive notifications for members subscribing or unsubscribing from the presence channel. +### Accessing subscribed channels + +You can use the `channelNamed:` method to retrieve an existing subscribed channel. If you have not subscribed to the requested channel, it will return `nil`. + +```objc +// get the 'chat' channel that you've already subscribed to +PTPusherChannel *channel = [self.client channelNamed:@"chat"]; +``` + ### Unsubscribe from channels If you no longer want to receive event over a channel, you can unsubscribe. +```objc +PTPusherChannel *channel = [self.client channelNamed:@"chat"]; +[channel unsubscribe]; ``` -[_client unsubscribeFromChannel:channel]; -``` + +### Channel object lifetime + +When the Pusher client disconnects, all subscribed channels are implicitly unsubscribed (`isSubscribed` will return NO), however the channel objects will persist and so will any event bindings. + +When the client reconnects, all previously subscribed channels will be resubcribed (which might involve another authentication request for any private/presence channels) and your existing event bindings will continue working as they did prior to the disconnection. + +If you explicitly unsubscribe from a channel, **all event bindings will be removed and the client will remove the channel object from it's list of subscribed channels**. If no other code has a strong reference to the channel object, it will be deallocated. If you resubscribe to the channel, a new channel object will be created. You should bear this in mind if you maintain any strong references to a channel object in your application code. ### Channel authorisation @@ -118,48 +128,49 @@ Private and presence channels require server-side authorisation before they can In order to connect to a private or presence channel, you first need to configure your server authorisation URL. -``` -_client.authorizationURL = [NSURL URLWithString:@"http://www.yourserver.com/authorise"]; +```objc +self.client.authorizationURL = [NSURL URLWithString:@"http://www.yourserver.com/authorise"]; ``` -When you attempt to connect to a private or presence channel, libPusher will make a form-encoded POST request to the above URL, passing along the ```socket_id``` and ```channel_name``` as parameters. Prior to sending the request, the Pusher delegate will be notified, passing in the NSMutableURLRequest instance that will be sent. +When you attempt to connect to a private or presence channel, libPusher will make a form-encoded POST request to the above URL, passing along the ```socket_id``` and ```channel_name``` as parameters. Prior to sending the request, the Pusher delegate will be notified, passing in the channel and the NSMutableURLRequest instance that will be sent. Its up to you to configure the request to handle whatever authentication mechanism you are using. In this example, we simply set a custom header with a token which the server will use to authenticate the user before proceeding with authorisation. -``` -- (void)pusher:(PTPusher *)pusher willAuthorizeChannelWithRequest:(NSMutableURLRequest *)request +```objc +- (void)pusher:(PTPusher *)pusher willAuthorizeChannel:(PTPusherChannel *)channel withRequest:(NSMutableURLRequest *)request { [request setValue:@"some-authentication-token" forHTTPHeaderField:@"X-MyCustom-AuthTokenHeader"]; } ``` - ---------- ### Binding to events -There are generally two ways to bind to events: Binding to an event on the PTPusher client itself or binding to a specific channel. +There are generally two ways to bind to events: Binding to an event on the PTPusher client itself or binding to a specific channel. + +Two types of direct binding are supported: target/action and block-based bindings. The examples below using block-based bindings. #### Binding to a channel -Once you have created an instance of PTPusherChannel, you can set up event bindings. There is no need to wait for the PTPusher client connection to be established. + +Once you have created an instance of PTPusherChannel, you can set up event bindings. There is no need to wait for the PTPusher client connection to be established or the channel to be subscribed. When you bind to events on a single channel, you will only receive events with that name if they are sent over this channel. -``` -PTPusherChannel *channel = [_client subscribeToChannelNamed:@"chat"]; +```objc +PTPusherChannel *channel = [self.client subscribeToChannelNamed:@"chat"]; [channel bindToEventNamed:@"new-message" handleWithBlock:^(PTPusherEvent *channelEvent) { - // channelEvent.data is a NSDictianary of the JSON object received + // channelEvent.data is a NSDictionary of the JSON object received }]; ``` #### Binding directly to the client -Once you have created an instance of the PTPusher client, you can set up event bindings. There is no need to wait for the connection to be established. When you bind to events on the client, you will receive all events with that name, regardless of the channel from which they originated. -``` -[_client bindToEventNamed:@"new-message" handleWithBlock:^(PTPusherEvent *event) { - // event.data is a NSDictianary of the JSON object received +```objc +[self.client bindToEventNamed:@"new-message" handleWithBlock:^(PTPusherEvent *event) { + // event.data is a NSDictionary of the JSON object received }]; ``` @@ -167,12 +178,63 @@ When you bind to events on the client, you will receive all events with that nam If you no longer want to receive events with a specific name, you can remove the binding. Removing a binding is as simple as storing a reference to the binding object, then passing that as an argument to ```removeBinding:``` at a later point. +**Note:** Binding objects are owned by the client or channel that they relate to and will exist for the lifetime of the binding. For this reason, you generally only need to store a weak reference to the binding object in order to remove the binding. In the event that something else removes the binding (perhaps as a result of calling `removeAllBindings` or explicitly unsubscribing from the channel), the weak reference will ensure that the binding object will become nil, so you should check this before calling `removeBinding:`. + +```objc +// _binding is a weak reference +_binding = [self.client bindToEventNamed:@"new-message" target:self action:@selector(handleEvent:)]; + +// check that nothing else has removed the binding already +if (_binding) { + [self.client removeBinding:_binding]; +} ``` -_binding = [_client bindToEventNamed:@"new-message" target:self action:@selector(handleEvent:)]; -// later -[_client removeBinding:_binding]; -``` +#### Memory management considerations for block-based bindings + +Similar caveats apply to block-based bindings as they do to using block based `NSNotificationCenter` observers, i.e. when referencing `self` in your event handler block, it is possible in some situations to create retain cycles or prevent `self` from being deallocated. + +When you reference `self` in your event handler block, the block will retain a strong reference to `self`. This means that `self` will never be deallocated until the binding (and in turn the event handler block) is destroyed by removing the binding. For this reason, you should be wary about removing event bindings in `dealloc` methods as `dealloc` will never be called if the binding references `self`. + +For example, you might push a `UIViewController` on to a `UINavigationController` stack, then create an event binding in that view controller's `viewDidAppear:` method: + +```objc +- (void)viewDidAppear:(BOOL)animated +{ + // _binding is a weak instance variable + _binding = [self.client bindToEventNamed:@"new-message" handleWithBlock:^(PTPusherEvent *event) { + [self doSomethingWithEvent:event]; + }]; +} +``` + +If you were to then pop that view controller off the navigation stack without removing the event binding, because the binding block has a strong reference to `self`, the view controller will never be deallocated and you will have a memory leak. + +You can handle this in one of two ways. The first is to ensure you remove the binding when in the corresponding `viewDidDisappear:` + +```objc +- (void)viewDidDisappear:(BOOL)animated +{ + [self.client removeBinding:_binding]; +} +``` + +The second, is to prevent a strong reference to `self` being captured in the first place: + +````objc +- (void)viewDidAppear:(BOOL)animated +{ + __weak typeof(self) weakSelf = self; + + // _binding is a weak instance variable + _binding = [self.client bindToEventNamed:@"new-message" handleWithBlock:^(PTPusherEvent *event) { + __strong typeof(weakSelf) strongSelf = weakSelf; + [strongSelf doSomethingWithEvent:event]; + }]; +} +``` + +Finally, if you reference `self` in a block and store a *strong* reference to the binding object, you will create a retain cycle (`self` -> `binding` -> `block` -> `self`). You should avoid keeping strong references to binding objects but if you really need to, you should ensure you only capture a weak reference to `self` in the block as in the above example. #### Binding to all events @@ -181,19 +243,19 @@ libPusher will publish a ```NSNotification``` for every event received. You can Binding to all events using NSNotificationCenter: -``` +```objc [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveEventNotification:) name:PTPusherEventReceivedNotification - object:_client]; + object:self.client]; ``` Bind to all events on a single channel: -``` +```objc // get chat channel -PTPusherChannel *channel = [_client channelNamed:@"chat"]; +PTPusherChannel *channel = [self.client channelNamed:@"chat"]; [[NSNotificationCenter defaultCenter] addObserver:self @@ -220,9 +282,9 @@ The following examples use Apple's Reachability class (version 2.2) to check the You can configure libPusher to automatically try and re-connect if it disconnects or it initially fails to connect. ``` -_client = [PTPusher pusherWithKey:@"YOUR_API_KEY" delegate:self encrypted:YES]; -_client.reconnectAutomatically = YES; -_client.reconnectDelay = 30; // defaults to 5 seconds +self.client = [PTPusher pusherWithKey:@"YOUR_API_KEY" delegate:self encrypted:YES]; +self.client.reconnectAutomatically = YES; +self.client.reconnectDelay = 30; // defaults to 5 seconds ``` What you don't want to do is keep on blindly trying to reconnect if there is no available network and therefore no possible way a connection could be successful. You should implement the ```PTPusherDelegate``` methods ```pusher:connectionDidDisconnect:``` and ```pusher:connection:didFailWithError:```. @@ -234,7 +296,7 @@ What you don't want to do is keep on blindly trying to reconnect if there is no if ([reachability currentReachabilityStatus] == NotReachable) { // there is no point in trying to reconnect at this point - _client.reconnectAutomatically = NO; + self.client.reconnectAutomatically = NO; // start observing the reachability status to see when we come back online [[NSNotificationCenter defaultCenter] @@ -259,14 +321,14 @@ Now you simply need to wait for the network to become reachable again. There is if ([reachability currentReachabilityStatus] != NotReachable) { // we seem to have some kind of network reachability, try to connect again - [_client connect]; + [self.client connect]; // we can stop observing reachability changes now [[NSNotificationCenter defaultCenter] removeObserver:self]; [reachability stopNotifier]; // re-enable auto-reconnect - _client.reconnectAutomatically = YES; + self.client.reconnectAutomatically = YES; } } ``` @@ -276,7 +338,7 @@ Finally, you may prefer to not turn on automatic reconnection immediately, but i ``` - (void)pusher:(PTPusher *)client connectionDidConnect:(PTPusherConnection *)connection { - _client.reconnectAutomatically = YES; + self.client.reconnectAutomatically = YES; } ``` From b8d6a21638ce6ffc4af3feaeea84c55a20bf3e44 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Thu, 28 Nov 2013 15:43:50 +0000 Subject: [PATCH 80/88] Revised notes on handling disconnections. --- README.md | 127 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 78 insertions(+), 49 deletions(-) diff --git a/README.md b/README.md index dfd6d6f0..77fcb9ae 100644 --- a/README.md +++ b/README.md @@ -277,76 +277,105 @@ The event can be retrieved in your callback from the notification's userInfo dic The nature of a mobile device is that connections will come and go. There are a number of things you can do do ensure that your Pusher connection remains active for as long as you have a network connection and reconnects after network connectivity has been re-established. -The following examples use Apple's Reachability class (version 2.2) to check the network reachability status. Apple recommends that in most circumstances, you do not do any pre-flight checks and simply try and open a connection. This example follows this advice. +### Automatic reconnection behaviour -You can configure libPusher to automatically try and re-connect if it disconnects or it initially fails to connect. +Pusher will generally try and do it's best to keep you connected in most cases: -``` -self.client = [PTPusher pusherWithKey:@"YOUR_API_KEY" delegate:self encrypted:YES]; -self.client.reconnectAutomatically = YES; -self.client.reconnectDelay = 30; // defaults to 5 seconds -``` +* If the connection fails having been previously connected, the client will try and reconnect immediately. +* If the connection disconnects with a Pusher error code in the range 4200-4299, the client will try and reconnect immediately. +* If the connection disconnects with a Pusher error code in the range 4100-4199, the client will try and reconnect with a linear back-off delay. +* If the connection disconnects for an unknown reason, the client will try and reconnect after a configured delay (defaults to 5 seconds and can be changed using the `reconnectDelay` property). -What you don't want to do is keep on blindly trying to reconnect if there is no available network and therefore no possible way a connection could be successful. You should implement the ```PTPusherDelegate``` methods ```pusher:connectionDidDisconnect:``` and ```pusher:connection:didFailWithError:```. +All automatic reconnection attempts will be repeated up to a maximum limit before giving up. -``` -- (void)pusher:(PTPusher *)client connectionDidDisconnect:(PTPusherConnection *)connection -{ - Reachability *reachability = [Reachability reachabilityForInternetConnection]; +Automatic reconnection will not happen in the following situations: - if ([reachability currentReachabilityStatus] == NotReachable) { - // there is no point in trying to reconnect at this point - self.client.reconnectAutomatically = NO; +* The connection fails on the initial attempt (i.e. not previously connected) +* The connection disconnects with a Pusher error code in the range 4000-4099 (indicating a client error, normally a misconfiguration) +* The maximum number of automatic reconnection attempts have been reached - // start observing the reachability status to see when we come back online - [[NSNotificationCenter defaultCenter] - addObserver:self - selector:@selector(reachabilityChanged:) - name:kReachabilityChangedNotification] - object:reachability]; +An error code in the range 4000-4099 generally indicates a client misconfiguration (e.g. invalid API key) or rate limiting. See the [Pusher protocol documentation](http://pusher.com/docs/pusher_protocol) for more information. - [reachability startNotifier]; - } -} -``` +The other scenarios generally indicate that it is not currently possible to connect to the Pusher service - this might be because of an issue with the service but more likely is that there simply isn't an internet connection. -The implementation of ```pusher:connection:didFailWithError:``` will look similar to the above although you may wish to do some further checking of the error. +### Handling disconnections -Now you simply need to wait for the network to become reachable again. There is no guarantee that you will be able to establish a connection but it is an indicator that it would be reasonable to try again. +If the client fails to connect at all, the delegate method `pusher:connection:failedWithError:` will be called and no automatic reconnection will be attempted. -``` -- (void)reachabilityChanged:(NSNotification *)notification -{ - Reachability *reachability = notification.object; +If the client disconnects, the delegate method `pusher:connection:didDisconnectWithError:willAttemptReconnect:` will be called. If `willAttemptReconnect` is `YES`, you don't have any further work to do. - if ([reachability currentReachabilityStatus] != NotReachable) { - // we seem to have some kind of network reachability, try to connect again - [self.client connect]; +If `willAttemptReconnect` is `NO`, you should first check the error to see if there is a client misconfiguration. If the client is refusing to automatically reconnect due to a Pusher error code, the `NSError` will have a domain of `PTPusherFatalErrorDomain`. - // we can stop observing reachability changes now - [[NSNotificationCenter defaultCenter] removeObserver:self]; - [reachability stopNotifier]; +How you handle disconnections is up to you, but the general idea is to check if there is network connectivity and if there is not, wait until there is before reconnecting. - // re-enable auto-reconnect - self.client.reconnectAutomatically = YES; - } -} -``` +The following examples use Apple's Reachability class (version 2.2) to check the network reachability status. Apple recommends that in most circumstances, you do not do any pre-flight checks and simply try and open a connection. This example follows this advice. -Finally, you may prefer to not turn on automatic reconnection immediately, but instead wait until you've successfully connected. You could do this by implementing the ```pusher:connectionDidConnect:``` delegate method: +#### Example: handling disconnections using the Reachability library -``` -- (void)pusher:(PTPusher *)client connectionDidConnect:(PTPusherConnection *)connection +In this example, we first check for any fatal Pusher errors, before using Reachability to wait for an internet connection to become available before manually reconnecting. + +```objc +- (void)pusher:(PTPusher *)pusher connection:(PTPusherConnection *)connection failedWithError:(NSError *)error +{ + [self handleDisconnectionWithError:error]; +} + +- (void)pusher:(PTPusher *)pusher connection:(PTPusherConnection *)connection didDisconnectWithError:(NSError *)error willAttemptReconnect:(BOOL)willAttemptReconnect { - self.client.reconnectAutomatically = YES; + if (!willAttemptReconnect) { + [self handleDisconnectionWithError:error]; + } } ``` -Doing it this way means you do not need to re-enable auto-reconnect in your Reachability notification handler as it will happen automatically once you have connected. +The implementation of `handleDisconnectionWithError` performs the error check and waits for Reachability to change: -If Pusher disconnects but Reachability indicates that the network is reachable, it is possible that there is a problem with the Pusher service or something is interfering with the connection. In this situation, you would be advised to simply allow libPusher to try and reconnect automatically (if you have enabled this). +```objc +- (void)handleDisconnectionWithError:(NSError *)error +{ + Reachability *reachability = [Reachability reachabilityWithHostname:self.client.connection.URL.host]; + + if (error && [error.domain isEqualToString:PTPusherFatalErrorDomain]) { + NSLog(@"FATAL PUSHER ERROR, COULD NOT CONNECT! %@", error); + } + else { + if ([reachability isReachable]) { + // we do have reachability so let's wait for a set delay before trying again + [self.client performSelector:@selector(connect) withObject:nil afterDelay:5]; + } + else { + // we need to wait for reachability to change + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(_reachabilityChanged:) + name:kReachabilityChangedNotification + object:reachability]; + + [reachability startNotifier]; + } + } +} -You may want to implement the ```pusher:connectionWillReconnect:afterDelay:``` delegate method and keep track of the number of retry attempts and gradually back off your retry attempts by increasing the reconnect delay after a number of retry attempts have failed. This stops you from constantly trying to connect to Pusher while it is experiencing issues. +- (void)_reachabilityChanged:(NSNotification *note) +{ + Reachability *reachability = [note object]; + + if ([reachability isReachable]) { + // we're reachable, we can try and reconnect, otherwise keep waiting + [self.client connect]; + + // stop watching for reachability changes + [reachability stopNotifier]; + + [[NSNotificationCenter defaultCenter] + removeObserver:self + name:kReachabilityChangedNotification + object:reachability]; + } +} +``` + +For a more sophisticated implementation of handling client disconnections and to see how this integrates with a real application, you could take a look at the `ClientDisconnectionHandler` class in the [official Pusher iOS Diagnostics app](https://github.com/pusher/pusher-test-iOS/). ## License + All code is licensed under the MIT license. See the LICENSE file for more details. From 9cc5d370b3d1725fa08b6c64d3074ca0e270c55a Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Thu, 28 Nov 2013 15:53:34 +0000 Subject: [PATCH 81/88] This is not relevant --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 77fcb9ae..a616662a 100644 --- a/README.md +++ b/README.md @@ -308,8 +308,6 @@ If `willAttemptReconnect` is `NO`, you should first check the error to see if th How you handle disconnections is up to you, but the general idea is to check if there is network connectivity and if there is not, wait until there is before reconnecting. -The following examples use Apple's Reachability class (version 2.2) to check the network reachability status. Apple recommends that in most circumstances, you do not do any pre-flight checks and simply try and open a connection. This example follows this advice. - #### Example: handling disconnections using the Reachability library In this example, we first check for any fatal Pusher errors, before using Reachability to wait for an internet connection to become available before manually reconnecting. From 814b2e41da0866557df24625fb7557cbba0ab588 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Fri, 6 Dec 2013 15:49:53 +0000 Subject: [PATCH 82/88] Link directly to error code documentation --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a616662a..8526190a 100644 --- a/README.md +++ b/README.md @@ -294,7 +294,7 @@ Automatic reconnection will not happen in the following situations: * The connection disconnects with a Pusher error code in the range 4000-4099 (indicating a client error, normally a misconfiguration) * The maximum number of automatic reconnection attempts have been reached -An error code in the range 4000-4099 generally indicates a client misconfiguration (e.g. invalid API key) or rate limiting. See the [Pusher protocol documentation](http://pusher.com/docs/pusher_protocol) for more information. +An error code in the range 4000-4099 generally indicates a client misconfiguration (e.g. invalid API key) or rate limiting. See the [Pusher protocol documentation](http://pusher.com/docs/pusher_protocol#error-codes) for more information. The other scenarios generally indicate that it is not currently possible to connect to the Pusher service - this might be because of an issue with the service but more likely is that there simply isn't an internet connection. From ec94ad95b56b646a6b789b9a3a44932397221ac2 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Fri, 6 Dec 2013 15:51:20 +0000 Subject: [PATCH 83/88] libPUsher, not PUsher --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8526190a..7b73f256 100644 --- a/README.md +++ b/README.md @@ -279,7 +279,7 @@ The nature of a mobile device is that connections will come and go. There are a ### Automatic reconnection behaviour -Pusher will generally try and do it's best to keep you connected in most cases: +libPusher will generally try and do it's best to keep you connected in most cases: * If the connection fails having been previously connected, the client will try and reconnect immediately. * If the connection disconnects with a Pusher error code in the range 4200-4299, the client will try and reconnect immediately. From cc400bdda125cf19c6e6f32b956a795bb06d4ad6 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Fri, 6 Dec 2013 16:03:28 +0000 Subject: [PATCH 84/88] Update Podfile to use versioned dependencies. --- Functional Specs/SpecHelper.m | 5 +- Podfile | 10 +- Podfile.lock | 32 +- Pods/BuildHeaders/Kiwi/KWAfterAllNode.h | 2 +- Pods/BuildHeaders/Kiwi/KWAfterEachNode.h | 2 +- Pods/BuildHeaders/Kiwi/KWAny.h | 2 +- Pods/BuildHeaders/Kiwi/KWAsyncVerifier.h | 2 +- Pods/BuildHeaders/Kiwi/KWBeBetweenMatcher.h | 2 +- Pods/BuildHeaders/Kiwi/KWBeEmptyMatcher.h | 2 +- .../Kiwi/KWBeIdenticalToMatcher.h | 2 +- .../Kiwi/KWBeKindOfClassMatcher.h | 2 +- .../Kiwi/KWBeMemberOfClassMatcher.h | 2 +- Pods/BuildHeaders/Kiwi/KWBeNilMatcher.h | 1 - Pods/BuildHeaders/Kiwi/KWBeNonNilMatcher.h | 1 - .../Kiwi/KWBeSubclassOfClassMatcher.h | 2 +- Pods/BuildHeaders/Kiwi/KWBeTrueMatcher.h | 2 +- Pods/BuildHeaders/Kiwi/KWBeWithinMatcher.h | 2 +- Pods/BuildHeaders/Kiwi/KWBeZeroMatcher.h | 2 +- Pods/BuildHeaders/Kiwi/KWBeforeAllNode.h | 2 +- Pods/BuildHeaders/Kiwi/KWBeforeEachNode.h | 2 +- Pods/BuildHeaders/Kiwi/KWBlock.h | 2 +- Pods/BuildHeaders/Kiwi/KWBlockNode.h | 2 +- Pods/BuildHeaders/Kiwi/KWBlockRaiseMatcher.h | 2 +- Pods/BuildHeaders/Kiwi/KWCallSite.h | 2 +- Pods/BuildHeaders/Kiwi/KWCaptureSpy.h | 2 +- Pods/BuildHeaders/Kiwi/KWChangeMatcher.h | 2 +- .../Kiwi/KWConformToProtocolMatcher.h | 2 +- Pods/BuildHeaders/Kiwi/KWContainMatcher.h | 2 +- .../Kiwi/KWContainStringMatcher.h | 2 +- Pods/BuildHeaders/Kiwi/KWContextNode.h | 2 +- Pods/BuildHeaders/Kiwi/KWCountType.h | 2 +- Pods/BuildHeaders/Kiwi/KWDeviceInfo.h | 2 +- Pods/BuildHeaders/Kiwi/KWEqualMatcher.h | 2 +- Pods/BuildHeaders/Kiwi/KWExample.h | 2 +- Pods/BuildHeaders/Kiwi/KWExampleDelegate.h | 1 + .../BuildHeaders/Kiwi/KWExampleGroupBuilder.h | 1 - .../Kiwi/KWExampleGroupDelegate.h | 1 - Pods/BuildHeaders/Kiwi/KWExampleNode.h | 2 +- Pods/BuildHeaders/Kiwi/KWExampleNodeVisitor.h | 2 +- Pods/BuildHeaders/Kiwi/KWExampleSuite.h | 2 +- .../BuildHeaders/Kiwi/KWExampleSuiteBuilder.h | 1 + Pods/BuildHeaders/Kiwi/KWExistVerifier.h | 2 +- Pods/BuildHeaders/Kiwi/KWExpectationType.h | 2 +- Pods/BuildHeaders/Kiwi/KWFailure.h | 2 +- Pods/BuildHeaders/Kiwi/KWFormatter.h | 2 +- Pods/BuildHeaders/Kiwi/KWFutureObject.h | 2 +- .../Kiwi/KWGenericMatchEvaluator.h | 2 +- Pods/BuildHeaders/Kiwi/KWGenericMatcher.h | 2 +- .../Kiwi/KWGenericMatchingAdditions.h | 2 +- Pods/BuildHeaders/Kiwi/KWHaveMatcher.h | 2 +- Pods/BuildHeaders/Kiwi/KWHaveValueMatcher.h | 2 +- Pods/BuildHeaders/Kiwi/KWInequalityMatcher.h | 2 +- Pods/BuildHeaders/Kiwi/KWIntercept.h | 2 +- Pods/BuildHeaders/Kiwi/KWInvocationCapturer.h | 2 +- Pods/BuildHeaders/Kiwi/KWItNode.h | 2 +- Pods/BuildHeaders/Kiwi/KWMatchVerifier.h | 2 +- Pods/BuildHeaders/Kiwi/KWMatcher.h | 2 +- Pods/BuildHeaders/Kiwi/KWMatcherFactory.h | 2 +- Pods/BuildHeaders/Kiwi/KWMatchers.h | 2 +- Pods/BuildHeaders/Kiwi/KWMatching.h | 2 +- Pods/BuildHeaders/Kiwi/KWMessagePattern.h | 2 +- Pods/BuildHeaders/Kiwi/KWMessageSpying.h | 2 +- Pods/BuildHeaders/Kiwi/KWMessageTracker.h | 2 +- Pods/BuildHeaders/Kiwi/KWMock.h | 2 +- Pods/BuildHeaders/Kiwi/KWNilMatcher.h | 1 + Pods/BuildHeaders/Kiwi/KWNull.h | 2 +- Pods/BuildHeaders/Kiwi/KWObjCUtilities.h | 2 +- Pods/BuildHeaders/Kiwi/KWPendingNode.h | 2 +- Pods/BuildHeaders/Kiwi/KWProbe.h | 2 +- Pods/BuildHeaders/Kiwi/KWProbePoller.h | 2 +- Pods/BuildHeaders/Kiwi/KWRaiseMatcher.h | 2 +- Pods/BuildHeaders/Kiwi/KWReceiveMatcher.h | 2 +- .../Kiwi/KWRegisterMatchersNode.h | 2 +- .../Kiwi/KWRegularExpressionPatternMatcher.h | 2 +- Pods/BuildHeaders/Kiwi/KWReporting.h | 2 +- .../Kiwi/KWRespondToSelectorMatcher.h | 2 +- Pods/BuildHeaders/Kiwi/KWSpec.h | 2 +- .../Kiwi/KWStringContainsMatcher.h | 2 +- .../BuildHeaders/Kiwi/KWStringPrefixMatcher.h | 2 +- Pods/BuildHeaders/Kiwi/KWStringUtilities.h | 2 +- Pods/BuildHeaders/Kiwi/KWStub.h | 2 +- Pods/BuildHeaders/Kiwi/KWSymbolicator.h | 2 +- Pods/BuildHeaders/Kiwi/KWTestCase.h | 1 - Pods/BuildHeaders/Kiwi/KWUserDefinedMatcher.h | 2 +- Pods/BuildHeaders/Kiwi/KWValue.h | 2 +- Pods/BuildHeaders/Kiwi/KWVerifying.h | 2 +- Pods/BuildHeaders/Kiwi/KWWorkarounds.h | 2 +- Pods/BuildHeaders/Kiwi/Kiwi.h | 2 +- Pods/BuildHeaders/Kiwi/KiwiBlockMacros.h | 2 +- Pods/BuildHeaders/Kiwi/KiwiConfiguration.h | 2 +- Pods/BuildHeaders/Kiwi/KiwiMacros.h | 2 +- .../Kiwi/NSInvocation+KiwiAdditions.h | 2 +- .../Kiwi/NSInvocation+OCMAdditions.h | 2 +- .../Kiwi/NSMethodSignature+KiwiAdditions.h | 2 +- .../Kiwi/NSNumber+KiwiAdditions.h | 2 +- .../Kiwi/NSObject+KiwiMockAdditions.h | 2 +- .../Kiwi/NSObject+KiwiSpyAdditions.h | 2 +- .../Kiwi/NSObject+KiwiStubAdditions.h | 2 +- .../Kiwi/NSObject+KiwiVerifierAdditions.h | 2 +- .../Kiwi/NSProxy+KiwiVerifierAdditions.h | 2 +- .../BuildHeaders/Kiwi/NSValue+KiwiAdditions.h | 2 +- .../Kiwi/SenTestSuite+KiwiAdditions.h | 2 +- Pods/BuildHeaders/OHHTTPStubs/OHHTTPStubs.h | 2 +- .../OHHTTPStubsResponse+HTTPMessage.h | 1 + .../OHHTTPStubs/OHHTTPStubsResponse+JSON.h | 1 + .../OHHTTPStubs/OHHTTPStubsResponse.h | 2 +- Pods/Headers/Kiwi/KWAfterAllNode.h | 2 +- Pods/Headers/Kiwi/KWAfterEachNode.h | 2 +- Pods/Headers/Kiwi/KWAny.h | 2 +- Pods/Headers/Kiwi/KWAsyncVerifier.h | 2 +- Pods/Headers/Kiwi/KWBeBetweenMatcher.h | 2 +- Pods/Headers/Kiwi/KWBeEmptyMatcher.h | 2 +- Pods/Headers/Kiwi/KWBeIdenticalToMatcher.h | 2 +- Pods/Headers/Kiwi/KWBeKindOfClassMatcher.h | 2 +- Pods/Headers/Kiwi/KWBeMemberOfClassMatcher.h | 2 +- Pods/Headers/Kiwi/KWBeNilMatcher.h | 1 - Pods/Headers/Kiwi/KWBeNonNilMatcher.h | 1 - .../Headers/Kiwi/KWBeSubclassOfClassMatcher.h | 2 +- Pods/Headers/Kiwi/KWBeTrueMatcher.h | 2 +- Pods/Headers/Kiwi/KWBeWithinMatcher.h | 2 +- Pods/Headers/Kiwi/KWBeZeroMatcher.h | 2 +- Pods/Headers/Kiwi/KWBeforeAllNode.h | 2 +- Pods/Headers/Kiwi/KWBeforeEachNode.h | 2 +- Pods/Headers/Kiwi/KWBlock.h | 2 +- Pods/Headers/Kiwi/KWBlockNode.h | 2 +- Pods/Headers/Kiwi/KWBlockRaiseMatcher.h | 2 +- Pods/Headers/Kiwi/KWCallSite.h | 2 +- Pods/Headers/Kiwi/KWCaptureSpy.h | 2 +- Pods/Headers/Kiwi/KWChangeMatcher.h | 2 +- .../Headers/Kiwi/KWConformToProtocolMatcher.h | 2 +- Pods/Headers/Kiwi/KWContainMatcher.h | 2 +- Pods/Headers/Kiwi/KWContainStringMatcher.h | 2 +- Pods/Headers/Kiwi/KWContextNode.h | 2 +- Pods/Headers/Kiwi/KWCountType.h | 2 +- Pods/Headers/Kiwi/KWDeviceInfo.h | 2 +- Pods/Headers/Kiwi/KWEqualMatcher.h | 2 +- Pods/Headers/Kiwi/KWExample.h | 2 +- Pods/Headers/Kiwi/KWExampleDelegate.h | 1 + Pods/Headers/Kiwi/KWExampleGroupBuilder.h | 1 - Pods/Headers/Kiwi/KWExampleGroupDelegate.h | 1 - Pods/Headers/Kiwi/KWExampleNode.h | 2 +- Pods/Headers/Kiwi/KWExampleNodeVisitor.h | 2 +- Pods/Headers/Kiwi/KWExampleSuite.h | 2 +- Pods/Headers/Kiwi/KWExampleSuiteBuilder.h | 1 + Pods/Headers/Kiwi/KWExistVerifier.h | 2 +- Pods/Headers/Kiwi/KWExpectationType.h | 2 +- Pods/Headers/Kiwi/KWFailure.h | 2 +- Pods/Headers/Kiwi/KWFormatter.h | 2 +- Pods/Headers/Kiwi/KWFutureObject.h | 2 +- Pods/Headers/Kiwi/KWGenericMatchEvaluator.h | 2 +- Pods/Headers/Kiwi/KWGenericMatcher.h | 2 +- .../Headers/Kiwi/KWGenericMatchingAdditions.h | 2 +- Pods/Headers/Kiwi/KWHaveMatcher.h | 2 +- Pods/Headers/Kiwi/KWHaveValueMatcher.h | 2 +- Pods/Headers/Kiwi/KWInequalityMatcher.h | 2 +- Pods/Headers/Kiwi/KWIntercept.h | 2 +- Pods/Headers/Kiwi/KWInvocationCapturer.h | 2 +- Pods/Headers/Kiwi/KWItNode.h | 2 +- Pods/Headers/Kiwi/KWMatchVerifier.h | 2 +- Pods/Headers/Kiwi/KWMatcher.h | 2 +- Pods/Headers/Kiwi/KWMatcherFactory.h | 2 +- Pods/Headers/Kiwi/KWMatchers.h | 2 +- Pods/Headers/Kiwi/KWMatching.h | 2 +- Pods/Headers/Kiwi/KWMessagePattern.h | 2 +- Pods/Headers/Kiwi/KWMessageSpying.h | 2 +- Pods/Headers/Kiwi/KWMessageTracker.h | 2 +- Pods/Headers/Kiwi/KWMock.h | 2 +- Pods/Headers/Kiwi/KWNilMatcher.h | 1 + Pods/Headers/Kiwi/KWNull.h | 2 +- Pods/Headers/Kiwi/KWObjCUtilities.h | 2 +- Pods/Headers/Kiwi/KWPendingNode.h | 2 +- Pods/Headers/Kiwi/KWProbe.h | 2 +- Pods/Headers/Kiwi/KWProbePoller.h | 2 +- Pods/Headers/Kiwi/KWRaiseMatcher.h | 2 +- Pods/Headers/Kiwi/KWReceiveMatcher.h | 2 +- Pods/Headers/Kiwi/KWRegisterMatchersNode.h | 2 +- .../Kiwi/KWRegularExpressionPatternMatcher.h | 2 +- Pods/Headers/Kiwi/KWReporting.h | 2 +- .../Headers/Kiwi/KWRespondToSelectorMatcher.h | 2 +- Pods/Headers/Kiwi/KWSpec.h | 2 +- Pods/Headers/Kiwi/KWStringContainsMatcher.h | 2 +- Pods/Headers/Kiwi/KWStringPrefixMatcher.h | 2 +- Pods/Headers/Kiwi/KWStringUtilities.h | 2 +- Pods/Headers/Kiwi/KWStub.h | 2 +- Pods/Headers/Kiwi/KWSymbolicator.h | 2 +- Pods/Headers/Kiwi/KWTestCase.h | 1 - Pods/Headers/Kiwi/KWUserDefinedMatcher.h | 2 +- Pods/Headers/Kiwi/KWValue.h | 2 +- Pods/Headers/Kiwi/KWVerifying.h | 2 +- Pods/Headers/Kiwi/KWWorkarounds.h | 2 +- Pods/Headers/Kiwi/Kiwi.h | 2 +- Pods/Headers/Kiwi/KiwiBlockMacros.h | 2 +- Pods/Headers/Kiwi/KiwiConfiguration.h | 2 +- Pods/Headers/Kiwi/KiwiMacros.h | 2 +- .../Headers/Kiwi/NSInvocation+KiwiAdditions.h | 2 +- Pods/Headers/Kiwi/NSInvocation+OCMAdditions.h | 2 +- .../Kiwi/NSMethodSignature+KiwiAdditions.h | 2 +- Pods/Headers/Kiwi/NSNumber+KiwiAdditions.h | 2 +- .../Headers/Kiwi/NSObject+KiwiMockAdditions.h | 2 +- Pods/Headers/Kiwi/NSObject+KiwiSpyAdditions.h | 2 +- .../Headers/Kiwi/NSObject+KiwiStubAdditions.h | 2 +- .../Kiwi/NSObject+KiwiVerifierAdditions.h | 2 +- .../Kiwi/NSProxy+KiwiVerifierAdditions.h | 2 +- Pods/Headers/Kiwi/NSValue+KiwiAdditions.h | 2 +- .../Headers/Kiwi/SenTestSuite+KiwiAdditions.h | 2 +- Pods/Headers/OHHTTPStubs/OHHTTPStubs.h | 2 +- .../OHHTTPStubsResponse+HTTPMessage.h | 1 + .../OHHTTPStubs/OHHTTPStubsResponse+JSON.h | 1 + .../Headers/OHHTTPStubs/OHHTTPStubsResponse.h | 2 +- Pods/Kiwi/Classes/{ => Core}/KWAny.h | 0 Pods/Kiwi/Classes/Core/KWAny.m | 23 + Pods/Kiwi/Classes/{ => Core}/KWBlock.h | 10 +- Pods/Kiwi/Classes/Core/KWBlock.m | 50 + Pods/Kiwi/Classes/{ => Core}/KWCallSite.h | 0 Pods/Kiwi/Classes/{ => Core}/KWCallSite.m | 19 +- Pods/Kiwi/Classes/{ => Core}/KWCaptureSpy.h | 6 +- Pods/Kiwi/Classes/{ => Core}/KWCaptureSpy.m | 54 +- Pods/Kiwi/Classes/{ => Core}/KWCountType.h | 0 Pods/Kiwi/Classes/{ => Core}/KWDeviceInfo.h | 0 Pods/Kiwi/Classes/{ => Core}/KWDeviceInfo.m | 0 Pods/Kiwi/Classes/{ => Core}/KWExample.h | 44 +- Pods/Kiwi/Classes/Core/KWExample.m | 376 + .../KWExampleDelegate.h} | 0 .../Classes/{ => Core}/KWExampleNodeVisitor.h | 0 Pods/Kiwi/Classes/{ => Core}/KWExampleSuite.h | 0 Pods/Kiwi/Classes/Core/KWExampleSuite.m | 86 + .../KWExampleSuiteBuilder.h} | 26 +- .../KWExampleSuiteBuilder.m} | 136 +- .../Classes/{ => Core}/KWExpectationType.h | 0 Pods/Kiwi/Classes/{ => Core}/KWFailure.h | 2 +- Pods/Kiwi/Classes/{ => Core}/KWFailure.m | 32 +- Pods/Kiwi/Classes/{ => Core}/KWFormatter.h | 1 + Pods/Kiwi/Classes/{ => Core}/KWFormatter.m | 10 +- Pods/Kiwi/Classes/{ => Core}/KWFutureObject.h | 0 Pods/Kiwi/Classes/Core/KWFutureObject.m | 40 + .../Classes/{ => Core}/KWInvocationCapturer.h | 4 +- .../Classes/{ => Core}/KWInvocationCapturer.m | 8 +- Pods/Kiwi/Classes/{ => Core}/KWMatcher.h | 7 +- Pods/Kiwi/Classes/{ => Core}/KWMatcher.m | 19 +- .../Classes/{ => Core}/KWMatcherFactory.h | 0 .../Classes/{ => Core}/KWMatcherFactory.m | 40 +- Pods/Kiwi/Classes/{ => Core}/KWMatchers.h | 0 Pods/Kiwi/Classes/{ => Core}/KWMatchers.m | 11 +- Pods/Kiwi/Classes/{ => Core}/KWMatching.h | 1 + .../Kiwi/Classes/{ => Core}/KWMessageSpying.h | 0 .../Classes/{ => Core}/KWMessageTracker.h | 0 .../Classes/{ => Core}/KWMessageTracker.m | 31 +- Pods/Kiwi/Classes/{ => Core}/KWNull.h | 0 Pods/Kiwi/Classes/Core/KWNull.m | 25 + .../Kiwi/Classes/{ => Core}/KWObjCUtilities.h | 3 +- .../Kiwi/Classes/{ => Core}/KWObjCUtilities.m | 9 +- Pods/Kiwi/Classes/{ => Core}/KWProbe.h | 0 Pods/Kiwi/Classes/{ => Core}/KWProbePoller.h | 0 Pods/Kiwi/Classes/Core/KWProbePoller.m | 72 + Pods/Kiwi/Classes/{ => Core}/KWReporting.h | 0 Pods/Kiwi/Classes/{ => Core}/KWSpec.h | 6 +- Pods/Kiwi/Classes/Core/KWSpec.m | 156 + .../Classes/{ => Core}/KWStringUtilities.h | 1 + .../Classes/{ => Core}/KWStringUtilities.m | 4 + Pods/Kiwi/Classes/{ => Core}/KWValue.h | 0 Pods/Kiwi/Classes/{ => Core}/KWValue.m | 9 +- Pods/Kiwi/Classes/{ => Core}/KWWorkarounds.h | 0 Pods/Kiwi/Classes/{ => Core}/KWWorkarounds.m | 4 +- Pods/Kiwi/Classes/{ => Core}/Kiwi.h | 6 +- .../Kiwi/Classes/{ => Core}/KiwiBlockMacros.h | 0 .../Classes/{ => Core}/KiwiConfiguration.h | 10 - Pods/Kiwi/Classes/{ => Core}/KiwiMacros.h | 6 +- .../{ => Core}/NSInvocation+KiwiAdditions.h | 0 .../{ => Core}/NSInvocation+KiwiAdditions.m | 0 .../{ => Core}/NSInvocation+OCMAdditions.h | 0 .../{ => Core}/NSInvocation+OCMAdditions.m | 14 +- .../NSMethodSignature+KiwiAdditions.h | 0 .../NSMethodSignature+KiwiAdditions.m | 0 .../{ => Core}/NSNumber+KiwiAdditions.h | 0 .../{ => Core}/NSNumber+KiwiAdditions.m | 0 .../{ => Core}/NSObject+KiwiSpyAdditions.h | 0 .../{ => Core}/NSObject+KiwiSpyAdditions.m | 8 +- .../NSObject+KiwiVerifierAdditions.h | 0 .../NSObject+KiwiVerifierAdditions.m | 0 .../NSProxy+KiwiVerifierAdditions.h | 0 .../NSProxy+KiwiVerifierAdditions.m | 0 .../{ => Core}/NSValue+KiwiAdditions.h | 0 .../{ => Core}/NSValue+KiwiAdditions.m | 0 Pods/Kiwi/Classes/KWAny.m | 46 - Pods/Kiwi/Classes/KWAsyncVerifier.m | 100 - Pods/Kiwi/Classes/KWBeNilMatcher.m | 69 - Pods/Kiwi/Classes/KWBeNonNilMatcher.h | 19 - Pods/Kiwi/Classes/KWBeNonNilMatcher.m | 65 - Pods/Kiwi/Classes/KWBlock.m | 58 - Pods/Kiwi/Classes/KWBlockNode.m | 47 - Pods/Kiwi/Classes/KWExample.m | 392 - Pods/Kiwi/Classes/KWExampleSuite.m | 93 - Pods/Kiwi/Classes/KWFutureObject.m | 47 - Pods/Kiwi/Classes/KWHaveValueMatcher.m | 148 - Pods/Kiwi/Classes/KWNull.m | 46 - Pods/Kiwi/Classes/KWProbePoller.m | 79 - Pods/Kiwi/Classes/KWSpec.m | 143 - Pods/Kiwi/Classes/KWStringContainsMatcher.m | 49 - Pods/Kiwi/Classes/KWTestCase.h | 37 - Pods/Kiwi/Classes/KWTestCase.m | 182 - .../{ => Matchers}/KWBeBetweenMatcher.h | 6 +- .../{ => Matchers}/KWBeBetweenMatcher.m | 22 +- .../Classes/{ => Matchers}/KWBeEmptyMatcher.h | 0 .../Classes/{ => Matchers}/KWBeEmptyMatcher.m | 9 +- .../{ => Matchers}/KWBeIdenticalToMatcher.h | 0 .../{ => Matchers}/KWBeIdenticalToMatcher.m | 18 +- .../{ => Matchers}/KWBeKindOfClassMatcher.h | 0 .../{ => Matchers}/KWBeKindOfClassMatcher.m | 13 +- .../{ => Matchers}/KWBeMemberOfClassMatcher.h | 0 .../{ => Matchers}/KWBeMemberOfClassMatcher.m | 13 +- .../KWBeSubclassOfClassMatcher.h | 0 .../KWBeSubclassOfClassMatcher.m | 9 +- .../Classes/{ => Matchers}/KWBeTrueMatcher.h | 0 .../Classes/{ => Matchers}/KWBeTrueMatcher.m | 19 +- .../{ => Matchers}/KWBeWithinMatcher.h | 0 .../{ => Matchers}/KWBeWithinMatcher.m | 24 +- .../Classes/{ => Matchers}/KWBeZeroMatcher.h | 0 .../Classes/{ => Matchers}/KWBeZeroMatcher.m | 0 .../{ => Matchers}/KWBlockRaiseMatcher.h | 0 .../{ => Matchers}/KWBlockRaiseMatcher.m | 24 +- .../Classes/{ => Matchers}/KWChangeMatcher.h | 0 .../Classes/{ => Matchers}/KWChangeMatcher.m | 11 - .../KWConformToProtocolMatcher.h | 0 .../KWConformToProtocolMatcher.m | 13 +- .../Classes/{ => Matchers}/KWContainMatcher.h | 0 .../Classes/{ => Matchers}/KWContainMatcher.m | 20 +- .../{ => Matchers}/KWContainStringMatcher.h | 0 .../{ => Matchers}/KWContainStringMatcher.m | 0 .../Classes/{ => Matchers}/KWEqualMatcher.h | 0 .../Classes/{ => Matchers}/KWEqualMatcher.m | 14 +- .../{ => Matchers}/KWGenericMatchEvaluator.h | 0 .../{ => Matchers}/KWGenericMatchEvaluator.m | 10 +- .../Classes/{ => Matchers}/KWGenericMatcher.h | 8 +- .../Classes/{ => Matchers}/KWGenericMatcher.m | 12 +- .../KWGenericMatchingAdditions.h | 0 .../KWGenericMatchingAdditions.m | 15 +- .../Classes/{ => Matchers}/KWHaveMatcher.h | 6 +- .../Classes/{ => Matchers}/KWHaveMatcher.m | 37 +- .../{ => Matchers}/KWHaveValueMatcher.h | 0 .../Classes/Matchers/KWHaveValueMatcher.m | 128 + .../{ => Matchers}/KWInequalityMatcher.h | 9 - .../{ => Matchers}/KWInequalityMatcher.m | 26 +- .../KWNilMatcher.h} | 9 +- Pods/Kiwi/Classes/Matchers/KWNilMatcher.m | 112 + .../Classes/{ => Matchers}/KWRaiseMatcher.h | 0 .../Classes/{ => Matchers}/KWRaiseMatcher.m | 25 +- .../Classes/{ => Matchers}/KWReceiveMatcher.h | 0 .../Classes/{ => Matchers}/KWReceiveMatcher.m | 25 +- .../KWRegularExpressionPatternMatcher.h | 0 .../KWRegularExpressionPatternMatcher.m | 4 - .../KWRespondToSelectorMatcher.h | 0 .../KWRespondToSelectorMatcher.m | 11 +- .../{ => Matchers}/KWStringContainsMatcher.h | 3 +- .../Matchers/KWStringContainsMatcher.m | 42 + .../{ => Matchers}/KWStringPrefixMatcher.h | 0 .../{ => Matchers}/KWStringPrefixMatcher.m | 25 +- .../{ => Matchers}/KWUserDefinedMatcher.h | 5 +- .../{ => Matchers}/KWUserDefinedMatcher.m | 59 +- Pods/Kiwi/Classes/{ => Mocking}/KWMock.h | 12 +- Pods/Kiwi/Classes/{ => Mocking}/KWMock.m | 93 +- .../NSObject+KiwiMockAdditions.h | 0 .../NSObject+KiwiMockAdditions.m | 0 .../Kiwi/Classes/{ => Nodes}/KWAfterAllNode.h | 2 +- .../Kiwi/Classes/{ => Nodes}/KWAfterAllNode.m | 4 +- .../Classes/{ => Nodes}/KWAfterEachNode.h | 2 +- .../Classes/{ => Nodes}/KWAfterEachNode.m | 4 +- .../Classes/{ => Nodes}/KWBeforeAllNode.h | 2 +- .../Classes/{ => Nodes}/KWBeforeAllNode.m | 4 +- .../Classes/{ => Nodes}/KWBeforeEachNode.h | 2 +- .../Classes/{ => Nodes}/KWBeforeEachNode.m | 4 +- Pods/Kiwi/Classes/{ => Nodes}/KWBlockNode.h | 6 +- Pods/Kiwi/Classes/Nodes/KWBlockNode.m | 28 + Pods/Kiwi/Classes/{ => Nodes}/KWContextNode.h | 17 +- Pods/Kiwi/Classes/{ => Nodes}/KWContextNode.m | 78 +- Pods/Kiwi/Classes/{ => Nodes}/KWExampleNode.h | 0 Pods/Kiwi/Classes/{ => Nodes}/KWItNode.h | 6 +- Pods/Kiwi/Classes/{ => Nodes}/KWItNode.m | 47 +- Pods/Kiwi/Classes/{ => Nodes}/KWPendingNode.h | 2 +- Pods/Kiwi/Classes/{ => Nodes}/KWPendingNode.m | 33 +- .../{ => Nodes}/KWRegisterMatchersNode.h | 0 .../{ => Nodes}/KWRegisterMatchersNode.m | 25 +- .../NSObject+KiwiStubAdditions.h | 3 + .../NSObject+KiwiStubAdditions.m | 21 +- .../Classes/{ => Verifiers}/KWAsyncVerifier.h | 5 +- Pods/Kiwi/Classes/Verifiers/KWAsyncVerifier.m | 90 + .../Classes/{ => Verifiers}/KWExistVerifier.h | 2 +- .../Classes/{ => Verifiers}/KWExistVerifier.m | 41 +- .../Classes/{ => Verifiers}/KWMatchVerifier.h | 5 +- .../Classes/{ => Verifiers}/KWMatchVerifier.m | 107 +- .../Classes/{ => Verifiers}/KWVerifying.h | 6 +- Pods/Kiwi/{Classes => NonARC}/KWIntercept.h | 0 Pods/Kiwi/{Classes => NonARC}/KWIntercept.m | 0 .../{Classes => NonARC}/KWMessagePattern.h | 0 .../{Classes => NonARC}/KWMessagePattern.m | 24 +- Pods/Kiwi/{Classes => NonARC}/KWStub.h | 0 Pods/Kiwi/{Classes => NonARC}/KWStub.m | 11 +- .../Kiwi/{Classes => NonARC}/KWSymbolicator.h | 0 .../Kiwi/{Classes => NonARC}/KWSymbolicator.m | 2 + .../SenTestSuite+KiwiAdditions.h | 0 .../SenTestSuite+KiwiAdditions.m | 10 +- Pods/Manifest.lock | 32 +- Pods/OHHTTPStubs/LICENCE | 29 - Pods/OHHTTPStubs/LICENSE | 9 + Pods/OHHTTPStubs/OHHTTPStubs/OHHTTPStubs.h | 67 - Pods/OHHTTPStubs/OHHTTPStubs/OHHTTPStubs.m | 259 - .../OHHTTPStubs/OHHTTPStubsResponse.h | 88 - .../OHHTTPStubs/OHHTTPStubsResponse.m | 144 - .../OHHTTPStubs+NSURLSessionConfiguration.m | 81 + .../OHHTTPStubs/Sources/OHHTTPStubs.h | 121 + .../OHHTTPStubs/Sources/OHHTTPStubs.m | 520 + .../Sources/OHHTTPStubsResponse+HTTPMessage.h | 35 + .../Sources/OHHTTPStubsResponse+HTTPMessage.m | 54 + .../Sources/OHHTTPStubsResponse+JSON.h | 27 + .../Sources/OHHTTPStubsResponse+JSON.m | 31 + .../OHHTTPStubs/Sources/OHHTTPStubsResponse.h | 219 + .../OHHTTPStubs/Sources/OHHTTPStubsResponse.m | 173 + Pods/OHHTTPStubs/README.md | 315 +- Pods/Pods-environment.h | 8 +- Pods/Pods-specs-Acknowledgements.markdown | 38 +- Pods/Pods-specs-Acknowledgements.plist | 38 +- Pods/Pods-specs-Kiwi-prefix.pch | 5 + Pods/Pods-specs-Kiwi.xcconfig | 2 +- Pods/Pods-specs-OHHTTPStubs-Private.xcconfig | 2 +- Pods/Pods-specs-OHHTTPStubs.xcconfig | 1 + Pods/Pods-specs-environment.h | 24 +- Pods/Pods-specs.xcconfig | 4 +- Pods/Pods.xcodeproj/project.pbxproj | 12366 ++++++++-------- .../xcschemes/Pods-Reachability.xcscheme | 2 +- .../xcschemes/Pods-ReactiveCocoa.xcscheme | 2 +- .../xcschemes/Pods-SocketRocket.xcscheme | 2 +- .../xcschemes/Pods-specs-Kiwi.xcscheme | 2 +- .../xcschemes/Pods-specs-OHHTTPStubs.xcscheme | 2 +- .../xcschemes/Pods-specs.xcscheme | 2 +- .../luke.xcuserdatad/xcschemes/Pods.xcscheme | 2 +- .../xcschemes/xcschememanagement.plist | 14 +- Pods/Reachability/LICENCE.txt | 24 + Pods/Reachability/README.md | 56 +- Pods/Reachability/Reachability.h | 38 +- Pods/Reachability/Reachability.m | 214 +- Pods/Reachability/Reachability.podspec | 12 - Pods/SocketRocket/SocketRocket/SRWebSocket.m | 6 +- 441 files changed, 10082 insertions(+), 9900 deletions(-) delete mode 120000 Pods/BuildHeaders/Kiwi/KWBeNilMatcher.h delete mode 120000 Pods/BuildHeaders/Kiwi/KWBeNonNilMatcher.h create mode 120000 Pods/BuildHeaders/Kiwi/KWExampleDelegate.h delete mode 120000 Pods/BuildHeaders/Kiwi/KWExampleGroupBuilder.h delete mode 120000 Pods/BuildHeaders/Kiwi/KWExampleGroupDelegate.h create mode 120000 Pods/BuildHeaders/Kiwi/KWExampleSuiteBuilder.h create mode 120000 Pods/BuildHeaders/Kiwi/KWNilMatcher.h delete mode 120000 Pods/BuildHeaders/Kiwi/KWTestCase.h create mode 120000 Pods/BuildHeaders/OHHTTPStubs/OHHTTPStubsResponse+HTTPMessage.h create mode 120000 Pods/BuildHeaders/OHHTTPStubs/OHHTTPStubsResponse+JSON.h delete mode 120000 Pods/Headers/Kiwi/KWBeNilMatcher.h delete mode 120000 Pods/Headers/Kiwi/KWBeNonNilMatcher.h create mode 120000 Pods/Headers/Kiwi/KWExampleDelegate.h delete mode 120000 Pods/Headers/Kiwi/KWExampleGroupBuilder.h delete mode 120000 Pods/Headers/Kiwi/KWExampleGroupDelegate.h create mode 120000 Pods/Headers/Kiwi/KWExampleSuiteBuilder.h create mode 120000 Pods/Headers/Kiwi/KWNilMatcher.h delete mode 120000 Pods/Headers/Kiwi/KWTestCase.h create mode 120000 Pods/Headers/OHHTTPStubs/OHHTTPStubsResponse+HTTPMessage.h create mode 120000 Pods/Headers/OHHTTPStubs/OHHTTPStubsResponse+JSON.h rename Pods/Kiwi/Classes/{ => Core}/KWAny.h (100%) create mode 100644 Pods/Kiwi/Classes/Core/KWAny.m rename Pods/Kiwi/Classes/{ => Core}/KWBlock.h (58%) create mode 100644 Pods/Kiwi/Classes/Core/KWBlock.m rename Pods/Kiwi/Classes/{ => Core}/KWCallSite.h (100%) rename Pods/Kiwi/Classes/{ => Core}/KWCallSite.m (70%) rename Pods/Kiwi/Classes/{ => Core}/KWCaptureSpy.h (56%) rename Pods/Kiwi/Classes/{ => Core}/KWCaptureSpy.m (55%) rename Pods/Kiwi/Classes/{ => Core}/KWCountType.h (100%) rename Pods/Kiwi/Classes/{ => Core}/KWDeviceInfo.h (100%) rename Pods/Kiwi/Classes/{ => Core}/KWDeviceInfo.m (100%) rename Pods/Kiwi/Classes/{ => Core}/KWExample.h (67%) create mode 100644 Pods/Kiwi/Classes/Core/KWExample.m rename Pods/Kiwi/Classes/{KWExampleGroupDelegate.h => Core/KWExampleDelegate.h} (100%) rename Pods/Kiwi/Classes/{ => Core}/KWExampleNodeVisitor.h (100%) rename Pods/Kiwi/Classes/{ => Core}/KWExampleSuite.h (100%) create mode 100644 Pods/Kiwi/Classes/Core/KWExampleSuite.m rename Pods/Kiwi/Classes/{KWExampleGroupBuilder.h => Core/KWExampleSuiteBuilder.h} (65%) rename Pods/Kiwi/Classes/{KWExampleGroupBuilder.m => Core/KWExampleSuiteBuilder.m} (69%) rename Pods/Kiwi/Classes/{ => Core}/KWExpectationType.h (100%) rename Pods/Kiwi/Classes/{ => Core}/KWFailure.h (92%) rename Pods/Kiwi/Classes/{ => Core}/KWFailure.m (59%) rename Pods/Kiwi/Classes/{ => Core}/KWFormatter.h (82%) rename Pods/Kiwi/Classes/{ => Core}/KWFormatter.m (74%) rename Pods/Kiwi/Classes/{ => Core}/KWFutureObject.h (100%) create mode 100644 Pods/Kiwi/Classes/Core/KWFutureObject.m rename Pods/Kiwi/Classes/{ => Core}/KWInvocationCapturer.h (88%) rename Pods/Kiwi/Classes/{ => Core}/KWInvocationCapturer.m (92%) rename Pods/Kiwi/Classes/{ => Core}/KWMatcher.h (83%) rename Pods/Kiwi/Classes/{ => Core}/KWMatcher.m (83%) rename Pods/Kiwi/Classes/{ => Core}/KWMatcherFactory.h (100%) rename Pods/Kiwi/Classes/{ => Core}/KWMatcherFactory.m (74%) rename Pods/Kiwi/Classes/{ => Core}/KWMatchers.h (100%) rename Pods/Kiwi/Classes/{ => Core}/KWMatchers.m (90%) rename Pods/Kiwi/Classes/{ => Core}/KWMatching.h (97%) rename Pods/Kiwi/Classes/{ => Core}/KWMessageSpying.h (100%) rename Pods/Kiwi/Classes/{ => Core}/KWMessageTracker.h (100%) rename Pods/Kiwi/Classes/{ => Core}/KWMessageTracker.m (82%) rename Pods/Kiwi/Classes/{ => Core}/KWNull.h (100%) create mode 100644 Pods/Kiwi/Classes/Core/KWNull.m rename Pods/Kiwi/Classes/{ => Core}/KWObjCUtilities.h (94%) rename Pods/Kiwi/Classes/{ => Core}/KWObjCUtilities.m (90%) rename Pods/Kiwi/Classes/{ => Core}/KWProbe.h (100%) rename Pods/Kiwi/Classes/{ => Core}/KWProbePoller.h (100%) create mode 100644 Pods/Kiwi/Classes/Core/KWProbePoller.m rename Pods/Kiwi/Classes/{ => Core}/KWReporting.h (100%) rename Pods/Kiwi/Classes/{ => Core}/KWSpec.h (88%) create mode 100644 Pods/Kiwi/Classes/Core/KWSpec.m rename Pods/Kiwi/Classes/{ => Core}/KWStringUtilities.h (92%) rename Pods/Kiwi/Classes/{ => Core}/KWStringUtilities.m (95%) rename Pods/Kiwi/Classes/{ => Core}/KWValue.h (100%) rename Pods/Kiwi/Classes/{ => Core}/KWValue.m (98%) rename Pods/Kiwi/Classes/{ => Core}/KWWorkarounds.h (100%) rename Pods/Kiwi/Classes/{ => Core}/KWWorkarounds.m (80%) rename Pods/Kiwi/Classes/{ => Core}/Kiwi.h (95%) rename Pods/Kiwi/Classes/{ => Core}/KiwiBlockMacros.h (100%) rename Pods/Kiwi/Classes/{ => Core}/KiwiConfiguration.h (71%) rename Pods/Kiwi/Classes/{ => Core}/KiwiMacros.h (94%) rename Pods/Kiwi/Classes/{ => Core}/NSInvocation+KiwiAdditions.h (100%) rename Pods/Kiwi/Classes/{ => Core}/NSInvocation+KiwiAdditions.m (100%) rename Pods/Kiwi/Classes/{ => Core}/NSInvocation+OCMAdditions.h (100%) rename Pods/Kiwi/Classes/{ => Core}/NSInvocation+OCMAdditions.m (96%) rename Pods/Kiwi/Classes/{ => Core}/NSMethodSignature+KiwiAdditions.h (100%) rename Pods/Kiwi/Classes/{ => Core}/NSMethodSignature+KiwiAdditions.m (100%) rename Pods/Kiwi/Classes/{ => Core}/NSNumber+KiwiAdditions.h (100%) rename Pods/Kiwi/Classes/{ => Core}/NSNumber+KiwiAdditions.m (100%) rename Pods/Kiwi/Classes/{ => Core}/NSObject+KiwiSpyAdditions.h (100%) rename Pods/Kiwi/Classes/{ => Core}/NSObject+KiwiSpyAdditions.m (60%) rename Pods/Kiwi/Classes/{ => Core}/NSObject+KiwiVerifierAdditions.h (100%) rename Pods/Kiwi/Classes/{ => Core}/NSObject+KiwiVerifierAdditions.m (100%) rename Pods/Kiwi/Classes/{ => Core}/NSProxy+KiwiVerifierAdditions.h (100%) rename Pods/Kiwi/Classes/{ => Core}/NSProxy+KiwiVerifierAdditions.m (100%) rename Pods/Kiwi/Classes/{ => Core}/NSValue+KiwiAdditions.h (100%) rename Pods/Kiwi/Classes/{ => Core}/NSValue+KiwiAdditions.m (100%) delete mode 100644 Pods/Kiwi/Classes/KWAny.m delete mode 100644 Pods/Kiwi/Classes/KWAsyncVerifier.m delete mode 100644 Pods/Kiwi/Classes/KWBeNilMatcher.m delete mode 100644 Pods/Kiwi/Classes/KWBeNonNilMatcher.h delete mode 100644 Pods/Kiwi/Classes/KWBeNonNilMatcher.m delete mode 100644 Pods/Kiwi/Classes/KWBlock.m delete mode 100644 Pods/Kiwi/Classes/KWBlockNode.m delete mode 100644 Pods/Kiwi/Classes/KWExample.m delete mode 100644 Pods/Kiwi/Classes/KWExampleSuite.m delete mode 100644 Pods/Kiwi/Classes/KWFutureObject.m delete mode 100644 Pods/Kiwi/Classes/KWHaveValueMatcher.m delete mode 100644 Pods/Kiwi/Classes/KWNull.m delete mode 100644 Pods/Kiwi/Classes/KWProbePoller.m delete mode 100644 Pods/Kiwi/Classes/KWSpec.m delete mode 100644 Pods/Kiwi/Classes/KWStringContainsMatcher.m delete mode 100644 Pods/Kiwi/Classes/KWTestCase.h delete mode 100644 Pods/Kiwi/Classes/KWTestCase.m rename Pods/Kiwi/Classes/{ => Matchers}/KWBeBetweenMatcher.h (79%) rename Pods/Kiwi/Classes/{ => Matchers}/KWBeBetweenMatcher.m (78%) rename Pods/Kiwi/Classes/{ => Matchers}/KWBeEmptyMatcher.h (100%) rename Pods/Kiwi/Classes/{ => Matchers}/KWBeEmptyMatcher.m (93%) rename Pods/Kiwi/Classes/{ => Matchers}/KWBeIdenticalToMatcher.h (100%) rename Pods/Kiwi/Classes/{ => Matchers}/KWBeIdenticalToMatcher.m (80%) rename Pods/Kiwi/Classes/{ => Matchers}/KWBeKindOfClassMatcher.h (100%) rename Pods/Kiwi/Classes/{ => Matchers}/KWBeKindOfClassMatcher.m (77%) rename Pods/Kiwi/Classes/{ => Matchers}/KWBeMemberOfClassMatcher.h (100%) rename Pods/Kiwi/Classes/{ => Matchers}/KWBeMemberOfClassMatcher.m (81%) rename Pods/Kiwi/Classes/{ => Matchers}/KWBeSubclassOfClassMatcher.h (100%) rename Pods/Kiwi/Classes/{ => Matchers}/KWBeSubclassOfClassMatcher.m (88%) rename Pods/Kiwi/Classes/{ => Matchers}/KWBeTrueMatcher.h (100%) rename Pods/Kiwi/Classes/{ => Matchers}/KWBeTrueMatcher.m (79%) rename Pods/Kiwi/Classes/{ => Matchers}/KWBeWithinMatcher.h (100%) rename Pods/Kiwi/Classes/{ => Matchers}/KWBeWithinMatcher.m (85%) rename Pods/Kiwi/Classes/{ => Matchers}/KWBeZeroMatcher.h (100%) rename Pods/Kiwi/Classes/{ => Matchers}/KWBeZeroMatcher.m (100%) rename Pods/Kiwi/Classes/{ => Matchers}/KWBlockRaiseMatcher.h (100%) rename Pods/Kiwi/Classes/{ => Matchers}/KWBlockRaiseMatcher.m (83%) rename Pods/Kiwi/Classes/{ => Matchers}/KWChangeMatcher.h (100%) rename Pods/Kiwi/Classes/{ => Matchers}/KWChangeMatcher.m (87%) rename Pods/Kiwi/Classes/{ => Matchers}/KWConformToProtocolMatcher.h (100%) rename Pods/Kiwi/Classes/{ => Matchers}/KWConformToProtocolMatcher.m (76%) rename Pods/Kiwi/Classes/{ => Matchers}/KWContainMatcher.h (100%) rename Pods/Kiwi/Classes/{ => Matchers}/KWContainMatcher.m (85%) rename Pods/Kiwi/Classes/{ => Matchers}/KWContainStringMatcher.h (100%) rename Pods/Kiwi/Classes/{ => Matchers}/KWContainStringMatcher.m (100%) rename Pods/Kiwi/Classes/{ => Matchers}/KWEqualMatcher.h (100%) rename Pods/Kiwi/Classes/{ => Matchers}/KWEqualMatcher.m (76%) rename Pods/Kiwi/Classes/{ => Matchers}/KWGenericMatchEvaluator.h (100%) rename Pods/Kiwi/Classes/{ => Matchers}/KWGenericMatchEvaluator.m (91%) rename Pods/Kiwi/Classes/{ => Matchers}/KWGenericMatcher.h (69%) rename Pods/Kiwi/Classes/{ => Matchers}/KWGenericMatcher.m (84%) rename Pods/Kiwi/Classes/{ => Matchers}/KWGenericMatchingAdditions.h (100%) rename Pods/Kiwi/Classes/{ => Matchers}/KWGenericMatchingAdditions.m (86%) rename Pods/Kiwi/Classes/{ => Matchers}/KWHaveMatcher.h (96%) rename Pods/Kiwi/Classes/{ => Matchers}/KWHaveMatcher.m (91%) rename Pods/Kiwi/Classes/{ => Matchers}/KWHaveValueMatcher.h (100%) create mode 100644 Pods/Kiwi/Classes/Matchers/KWHaveValueMatcher.m rename Pods/Kiwi/Classes/{ => Matchers}/KWInequalityMatcher.h (67%) rename Pods/Kiwi/Classes/{ => Matchers}/KWInequalityMatcher.m (89%) rename Pods/Kiwi/Classes/{KWBeNilMatcher.h => Matchers/KWNilMatcher.h} (60%) create mode 100644 Pods/Kiwi/Classes/Matchers/KWNilMatcher.m rename Pods/Kiwi/Classes/{ => Matchers}/KWRaiseMatcher.h (100%) rename Pods/Kiwi/Classes/{ => Matchers}/KWRaiseMatcher.m (86%) rename Pods/Kiwi/Classes/{ => Matchers}/KWReceiveMatcher.h (100%) rename Pods/Kiwi/Classes/{ => Matchers}/KWReceiveMatcher.m (97%) rename Pods/Kiwi/Classes/{ => Matchers}/KWRegularExpressionPatternMatcher.h (100%) rename Pods/Kiwi/Classes/{ => Matchers}/KWRegularExpressionPatternMatcher.m (97%) rename Pods/Kiwi/Classes/{ => Matchers}/KWRespondToSelectorMatcher.h (100%) rename Pods/Kiwi/Classes/{ => Matchers}/KWRespondToSelectorMatcher.m (79%) rename Pods/Kiwi/Classes/{ => Matchers}/KWStringContainsMatcher.h (81%) create mode 100644 Pods/Kiwi/Classes/Matchers/KWStringContainsMatcher.m rename Pods/Kiwi/Classes/{ => Matchers}/KWStringPrefixMatcher.h (100%) rename Pods/Kiwi/Classes/{ => Matchers}/KWStringPrefixMatcher.m (54%) rename Pods/Kiwi/Classes/{ => Matchers}/KWUserDefinedMatcher.h (90%) rename Pods/Kiwi/Classes/{ => Matchers}/KWUserDefinedMatcher.m (77%) rename Pods/Kiwi/Classes/{ => Mocking}/KWMock.h (88%) rename Pods/Kiwi/Classes/{ => Mocking}/KWMock.m (89%) rename Pods/Kiwi/Classes/{ => Mocking}/NSObject+KiwiMockAdditions.h (100%) rename Pods/Kiwi/Classes/{ => Mocking}/NSObject+KiwiMockAdditions.m (100%) rename Pods/Kiwi/Classes/{ => Nodes}/KWAfterAllNode.h (76%) rename Pods/Kiwi/Classes/{ => Nodes}/KWAfterAllNode.m (67%) rename Pods/Kiwi/Classes/{ => Nodes}/KWAfterEachNode.h (76%) rename Pods/Kiwi/Classes/{ => Nodes}/KWAfterEachNode.m (67%) rename Pods/Kiwi/Classes/{ => Nodes}/KWBeforeAllNode.h (76%) rename Pods/Kiwi/Classes/{ => Nodes}/KWBeforeAllNode.m (67%) rename Pods/Kiwi/Classes/{ => Nodes}/KWBeforeEachNode.h (93%) rename Pods/Kiwi/Classes/{ => Nodes}/KWBeforeEachNode.m (79%) rename Pods/Kiwi/Classes/{ => Nodes}/KWBlockNode.h (75%) create mode 100644 Pods/Kiwi/Classes/Nodes/KWBlockNode.m rename Pods/Kiwi/Classes/{ => Nodes}/KWContextNode.h (73%) rename Pods/Kiwi/Classes/{ => Nodes}/KWContextNode.m (64%) rename Pods/Kiwi/Classes/{ => Nodes}/KWExampleNode.h (100%) rename Pods/Kiwi/Classes/{ => Nodes}/KWItNode.h (75%) rename Pods/Kiwi/Classes/{ => Nodes}/KWItNode.m (52%) rename Pods/Kiwi/Classes/{ => Nodes}/KWPendingNode.h (91%) rename Pods/Kiwi/Classes/{ => Nodes}/KWPendingNode.m (65%) rename Pods/Kiwi/Classes/{ => Nodes}/KWRegisterMatchersNode.h (100%) rename Pods/Kiwi/Classes/{ => Nodes}/KWRegisterMatchersNode.m (58%) rename Pods/Kiwi/Classes/{ => Stubbing}/NSObject+KiwiStubAdditions.h (92%) rename Pods/Kiwi/Classes/{ => Stubbing}/NSObject+KiwiStubAdditions.m (94%) rename Pods/Kiwi/Classes/{ => Verifiers}/KWAsyncVerifier.h (89%) create mode 100644 Pods/Kiwi/Classes/Verifiers/KWAsyncVerifier.m rename Pods/Kiwi/Classes/{ => Verifiers}/KWExistVerifier.h (92%) rename Pods/Kiwi/Classes/{ => Verifiers}/KWExistVerifier.m (66%) rename Pods/Kiwi/Classes/{ => Verifiers}/KWMatchVerifier.h (92%) rename Pods/Kiwi/Classes/{ => Verifiers}/KWMatchVerifier.m (67%) rename Pods/Kiwi/Classes/{ => Verifiers}/KWVerifying.h (72%) rename Pods/Kiwi/{Classes => NonARC}/KWIntercept.h (100%) rename Pods/Kiwi/{Classes => NonARC}/KWIntercept.m (100%) rename Pods/Kiwi/{Classes => NonARC}/KWMessagePattern.h (100%) rename Pods/Kiwi/{Classes => NonARC}/KWMessagePattern.m (92%) rename Pods/Kiwi/{Classes => NonARC}/KWStub.h (100%) rename Pods/Kiwi/{Classes => NonARC}/KWStub.m (97%) rename Pods/Kiwi/{Classes => NonARC}/KWSymbolicator.h (100%) rename Pods/Kiwi/{Classes => NonARC}/KWSymbolicator.m (98%) rename Pods/Kiwi/{Classes => SenTestingKit}/SenTestSuite+KiwiAdditions.h (100%) rename Pods/Kiwi/{Classes => SenTestingKit}/SenTestSuite+KiwiAdditions.m (79%) delete mode 100644 Pods/OHHTTPStubs/LICENCE create mode 100644 Pods/OHHTTPStubs/LICENSE delete mode 100644 Pods/OHHTTPStubs/OHHTTPStubs/OHHTTPStubs.h delete mode 100644 Pods/OHHTTPStubs/OHHTTPStubs/OHHTTPStubs.m delete mode 100644 Pods/OHHTTPStubs/OHHTTPStubs/OHHTTPStubsResponse.h delete mode 100644 Pods/OHHTTPStubs/OHHTTPStubs/OHHTTPStubsResponse.m create mode 100644 Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubs+NSURLSessionConfiguration.m create mode 100644 Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubs.h create mode 100644 Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubs.m create mode 100644 Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse+HTTPMessage.h create mode 100644 Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse+HTTPMessage.m create mode 100644 Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse+JSON.h create mode 100644 Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse+JSON.m create mode 100644 Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse.h create mode 100644 Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse.m create mode 100644 Pods/Reachability/LICENCE.txt delete mode 100644 Pods/Reachability/Reachability.podspec diff --git a/Functional Specs/SpecHelper.m b/Functional Specs/SpecHelper.m index f59a4b51..b5cedbff 100644 --- a/Functional Specs/SpecHelper.m +++ b/Functional Specs/SpecHelper.m @@ -20,14 +20,13 @@ PTPusher *newTestClientWithMockConnection(void) { PTPusherMockConnection *mockConnection = [[PTPusherMockConnection alloc] init]; - PTPusher *client = [[PTPusher alloc] initWithConnection:mockConnection connectAutomatically:NO]; + PTPusher *client = [[PTPusher alloc] initWithConnection:mockConnection]; client.delegate = [PTPusherClientTestHelperDelegate sharedInstance]; return [client retain]; } PTPusher *newTestClientDisconnected(void) { - PTPusher *client = [PTPusher pusherWithKey:PUSHER_API_KEY connectAutomatically:NO encrypted:kUSE_ENCRYPTED_CONNECTION]; - client.delegate = [PTPusherClientTestHelperDelegate sharedInstance]; + PTPusher *client = [PTPusher pusherWithKey:PUSHER_API_KEY delegate:[PTPusherClientTestHelperDelegate sharedInstance] encrypted:NO]; return [client retain]; } diff --git a/Podfile b/Podfile index c0ab2602..cbbdb642 100644 --- a/Podfile +++ b/Podfile @@ -8,9 +8,9 @@ platform :ios, :deployment_target => '5.0' inhibit_all_warnings! -pod 'Reachability', '3.1.1' -pod 'SocketRocket', :head # FIXME: we need a tagged dependency -pod 'ReactiveCocoa', '2.1.7' +pod 'Reachability', '~> 3.1' +pod 'SocketRocket', '0.3.1-beta2' +pod 'ReactiveCocoa', '~> 2.1' post_install do |installer| # we don't want to link static lib to the icucore dylib or it will fail to build @@ -26,6 +26,6 @@ end target :specs, :exclusive => true do link_with ['Functional Specs', 'UnitTests'] - pod 'Kiwi' - pod 'OHHTTPStubs' + pod 'Kiwi', '~> 2.2' + pod 'OHHTTPStubs', '~> 3.0' end diff --git a/Podfile.lock b/Podfile.lock index 8f3dff16..fa03d39b 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,27 +1,33 @@ PODS: - - Kiwi (2.2) - - OHHTTPStubs (1.0.1) - - Reachability (3.0.0) + - Kiwi (2.2.3): + - Kiwi/SenTestingKit + - Kiwi/ARC (2.2.3) + - Kiwi/NonARC (2.2.3) + - Kiwi/SenTestingKit (2.2.3): + - Kiwi/ARC + - Kiwi/NonARC + - OHHTTPStubs (3.0.2) + - Reachability (3.1.1) - ReactiveCocoa (2.1.7): - ReactiveCocoa/Core - ReactiveCocoa/no-arc - ReactiveCocoa/Core (2.1.7): - ReactiveCocoa/no-arc - ReactiveCocoa/no-arc (2.1.7) - - SocketRocket (HEAD based on 0.2.0) + - SocketRocket (0.3.1-beta2) DEPENDENCIES: - - Kiwi - - OHHTTPStubs - - Reachability - - ReactiveCocoa - - SocketRocket (HEAD) + - Kiwi (~> 2.2) + - OHHTTPStubs (~> 3.0) + - Reachability (~> 3.1) + - ReactiveCocoa (~> 2.1) + - SocketRocket (= 0.3.1-beta2) SPEC CHECKSUMS: - Kiwi: db174bba4ee8068b15d7122f1b22fb64b7c1d378 - OHHTTPStubs: 25b40f0c39ce8dab25b3fc4b52d630e7a665f3fb - Reachability: 500bd76bf6cd8ff2c6fb715fc5f44ef6e4c024f2 + Kiwi: 04c51e880831d291748ec702d42c4101f7eb95c9 + OHHTTPStubs: 7be864a1c40c6a5007fe3e8679c109ca45590803 + Reachability: be4883bb93f31e38266ae3365e5600a317aae735 ReactiveCocoa: 1117f7968c8667d2ca00b5aa47156fabcb56af75 - SocketRocket: bca43a94bd9aac3a629df42c06843402399ee67b + SocketRocket: 7ac946bcce46287a791dfff3c1f8daa692821dae COCOAPODS: 0.28.0 diff --git a/Pods/BuildHeaders/Kiwi/KWAfterAllNode.h b/Pods/BuildHeaders/Kiwi/KWAfterAllNode.h index 4e9be08d..9eeb57f6 120000 --- a/Pods/BuildHeaders/Kiwi/KWAfterAllNode.h +++ b/Pods/BuildHeaders/Kiwi/KWAfterAllNode.h @@ -1 +1 @@ -../../Kiwi/Classes/KWAfterAllNode.h \ No newline at end of file +../../Kiwi/Classes/Nodes/KWAfterAllNode.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWAfterEachNode.h b/Pods/BuildHeaders/Kiwi/KWAfterEachNode.h index 450df359..b8072885 120000 --- a/Pods/BuildHeaders/Kiwi/KWAfterEachNode.h +++ b/Pods/BuildHeaders/Kiwi/KWAfterEachNode.h @@ -1 +1 @@ -../../Kiwi/Classes/KWAfterEachNode.h \ No newline at end of file +../../Kiwi/Classes/Nodes/KWAfterEachNode.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWAny.h b/Pods/BuildHeaders/Kiwi/KWAny.h index 681893a7..0d334e71 120000 --- a/Pods/BuildHeaders/Kiwi/KWAny.h +++ b/Pods/BuildHeaders/Kiwi/KWAny.h @@ -1 +1 @@ -../../Kiwi/Classes/KWAny.h \ No newline at end of file +../../Kiwi/Classes/Core/KWAny.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWAsyncVerifier.h b/Pods/BuildHeaders/Kiwi/KWAsyncVerifier.h index 33cf289c..55ca577c 120000 --- a/Pods/BuildHeaders/Kiwi/KWAsyncVerifier.h +++ b/Pods/BuildHeaders/Kiwi/KWAsyncVerifier.h @@ -1 +1 @@ -../../Kiwi/Classes/KWAsyncVerifier.h \ No newline at end of file +../../Kiwi/Classes/Verifiers/KWAsyncVerifier.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWBeBetweenMatcher.h b/Pods/BuildHeaders/Kiwi/KWBeBetweenMatcher.h index bbe53145..75f94424 120000 --- a/Pods/BuildHeaders/Kiwi/KWBeBetweenMatcher.h +++ b/Pods/BuildHeaders/Kiwi/KWBeBetweenMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWBeBetweenMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWBeBetweenMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWBeEmptyMatcher.h b/Pods/BuildHeaders/Kiwi/KWBeEmptyMatcher.h index f5a06897..fc8c89a8 120000 --- a/Pods/BuildHeaders/Kiwi/KWBeEmptyMatcher.h +++ b/Pods/BuildHeaders/Kiwi/KWBeEmptyMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWBeEmptyMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWBeEmptyMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWBeIdenticalToMatcher.h b/Pods/BuildHeaders/Kiwi/KWBeIdenticalToMatcher.h index b746586e..6e8e6be1 120000 --- a/Pods/BuildHeaders/Kiwi/KWBeIdenticalToMatcher.h +++ b/Pods/BuildHeaders/Kiwi/KWBeIdenticalToMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWBeIdenticalToMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWBeIdenticalToMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWBeKindOfClassMatcher.h b/Pods/BuildHeaders/Kiwi/KWBeKindOfClassMatcher.h index 06fbe032..d4170aad 120000 --- a/Pods/BuildHeaders/Kiwi/KWBeKindOfClassMatcher.h +++ b/Pods/BuildHeaders/Kiwi/KWBeKindOfClassMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWBeKindOfClassMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWBeKindOfClassMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWBeMemberOfClassMatcher.h b/Pods/BuildHeaders/Kiwi/KWBeMemberOfClassMatcher.h index 08101ce8..9b96c095 120000 --- a/Pods/BuildHeaders/Kiwi/KWBeMemberOfClassMatcher.h +++ b/Pods/BuildHeaders/Kiwi/KWBeMemberOfClassMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWBeMemberOfClassMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWBeMemberOfClassMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWBeNilMatcher.h b/Pods/BuildHeaders/Kiwi/KWBeNilMatcher.h deleted file mode 120000 index be56da65..00000000 --- a/Pods/BuildHeaders/Kiwi/KWBeNilMatcher.h +++ /dev/null @@ -1 +0,0 @@ -../../Kiwi/Classes/KWBeNilMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWBeNonNilMatcher.h b/Pods/BuildHeaders/Kiwi/KWBeNonNilMatcher.h deleted file mode 120000 index 16c909a3..00000000 --- a/Pods/BuildHeaders/Kiwi/KWBeNonNilMatcher.h +++ /dev/null @@ -1 +0,0 @@ -../../Kiwi/Classes/KWBeNonNilMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWBeSubclassOfClassMatcher.h b/Pods/BuildHeaders/Kiwi/KWBeSubclassOfClassMatcher.h index 264f776d..ce788b78 120000 --- a/Pods/BuildHeaders/Kiwi/KWBeSubclassOfClassMatcher.h +++ b/Pods/BuildHeaders/Kiwi/KWBeSubclassOfClassMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWBeSubclassOfClassMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWBeSubclassOfClassMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWBeTrueMatcher.h b/Pods/BuildHeaders/Kiwi/KWBeTrueMatcher.h index 321d3471..6bbe534c 120000 --- a/Pods/BuildHeaders/Kiwi/KWBeTrueMatcher.h +++ b/Pods/BuildHeaders/Kiwi/KWBeTrueMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWBeTrueMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWBeTrueMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWBeWithinMatcher.h b/Pods/BuildHeaders/Kiwi/KWBeWithinMatcher.h index 895f8602..ab3ad9d6 120000 --- a/Pods/BuildHeaders/Kiwi/KWBeWithinMatcher.h +++ b/Pods/BuildHeaders/Kiwi/KWBeWithinMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWBeWithinMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWBeWithinMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWBeZeroMatcher.h b/Pods/BuildHeaders/Kiwi/KWBeZeroMatcher.h index 98481608..5c6a52d2 120000 --- a/Pods/BuildHeaders/Kiwi/KWBeZeroMatcher.h +++ b/Pods/BuildHeaders/Kiwi/KWBeZeroMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWBeZeroMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWBeZeroMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWBeforeAllNode.h b/Pods/BuildHeaders/Kiwi/KWBeforeAllNode.h index 139d69a7..e50bbfc5 120000 --- a/Pods/BuildHeaders/Kiwi/KWBeforeAllNode.h +++ b/Pods/BuildHeaders/Kiwi/KWBeforeAllNode.h @@ -1 +1 @@ -../../Kiwi/Classes/KWBeforeAllNode.h \ No newline at end of file +../../Kiwi/Classes/Nodes/KWBeforeAllNode.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWBeforeEachNode.h b/Pods/BuildHeaders/Kiwi/KWBeforeEachNode.h index f72e71cd..e25d7548 120000 --- a/Pods/BuildHeaders/Kiwi/KWBeforeEachNode.h +++ b/Pods/BuildHeaders/Kiwi/KWBeforeEachNode.h @@ -1 +1 @@ -../../Kiwi/Classes/KWBeforeEachNode.h \ No newline at end of file +../../Kiwi/Classes/Nodes/KWBeforeEachNode.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWBlock.h b/Pods/BuildHeaders/Kiwi/KWBlock.h index a6a57c3a..0262aa9f 120000 --- a/Pods/BuildHeaders/Kiwi/KWBlock.h +++ b/Pods/BuildHeaders/Kiwi/KWBlock.h @@ -1 +1 @@ -../../Kiwi/Classes/KWBlock.h \ No newline at end of file +../../Kiwi/Classes/Core/KWBlock.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWBlockNode.h b/Pods/BuildHeaders/Kiwi/KWBlockNode.h index d6fc3575..250e21bd 120000 --- a/Pods/BuildHeaders/Kiwi/KWBlockNode.h +++ b/Pods/BuildHeaders/Kiwi/KWBlockNode.h @@ -1 +1 @@ -../../Kiwi/Classes/KWBlockNode.h \ No newline at end of file +../../Kiwi/Classes/Nodes/KWBlockNode.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWBlockRaiseMatcher.h b/Pods/BuildHeaders/Kiwi/KWBlockRaiseMatcher.h index 68a0b994..0e3150b6 120000 --- a/Pods/BuildHeaders/Kiwi/KWBlockRaiseMatcher.h +++ b/Pods/BuildHeaders/Kiwi/KWBlockRaiseMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWBlockRaiseMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWBlockRaiseMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWCallSite.h b/Pods/BuildHeaders/Kiwi/KWCallSite.h index e2a84e7a..693a01b2 120000 --- a/Pods/BuildHeaders/Kiwi/KWCallSite.h +++ b/Pods/BuildHeaders/Kiwi/KWCallSite.h @@ -1 +1 @@ -../../Kiwi/Classes/KWCallSite.h \ No newline at end of file +../../Kiwi/Classes/Core/KWCallSite.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWCaptureSpy.h b/Pods/BuildHeaders/Kiwi/KWCaptureSpy.h index ed1d8653..54a3ca28 120000 --- a/Pods/BuildHeaders/Kiwi/KWCaptureSpy.h +++ b/Pods/BuildHeaders/Kiwi/KWCaptureSpy.h @@ -1 +1 @@ -../../Kiwi/Classes/KWCaptureSpy.h \ No newline at end of file +../../Kiwi/Classes/Core/KWCaptureSpy.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWChangeMatcher.h b/Pods/BuildHeaders/Kiwi/KWChangeMatcher.h index da16244e..be6e80b0 120000 --- a/Pods/BuildHeaders/Kiwi/KWChangeMatcher.h +++ b/Pods/BuildHeaders/Kiwi/KWChangeMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWChangeMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWChangeMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWConformToProtocolMatcher.h b/Pods/BuildHeaders/Kiwi/KWConformToProtocolMatcher.h index c4512e33..749ed755 120000 --- a/Pods/BuildHeaders/Kiwi/KWConformToProtocolMatcher.h +++ b/Pods/BuildHeaders/Kiwi/KWConformToProtocolMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWConformToProtocolMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWConformToProtocolMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWContainMatcher.h b/Pods/BuildHeaders/Kiwi/KWContainMatcher.h index 3b564a74..672fd9fd 120000 --- a/Pods/BuildHeaders/Kiwi/KWContainMatcher.h +++ b/Pods/BuildHeaders/Kiwi/KWContainMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWContainMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWContainMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWContainStringMatcher.h b/Pods/BuildHeaders/Kiwi/KWContainStringMatcher.h index 2eae470d..3ee51f0d 120000 --- a/Pods/BuildHeaders/Kiwi/KWContainStringMatcher.h +++ b/Pods/BuildHeaders/Kiwi/KWContainStringMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWContainStringMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWContainStringMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWContextNode.h b/Pods/BuildHeaders/Kiwi/KWContextNode.h index 367e4497..7f72f768 120000 --- a/Pods/BuildHeaders/Kiwi/KWContextNode.h +++ b/Pods/BuildHeaders/Kiwi/KWContextNode.h @@ -1 +1 @@ -../../Kiwi/Classes/KWContextNode.h \ No newline at end of file +../../Kiwi/Classes/Nodes/KWContextNode.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWCountType.h b/Pods/BuildHeaders/Kiwi/KWCountType.h index f48c43f5..1f022278 120000 --- a/Pods/BuildHeaders/Kiwi/KWCountType.h +++ b/Pods/BuildHeaders/Kiwi/KWCountType.h @@ -1 +1 @@ -../../Kiwi/Classes/KWCountType.h \ No newline at end of file +../../Kiwi/Classes/Core/KWCountType.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWDeviceInfo.h b/Pods/BuildHeaders/Kiwi/KWDeviceInfo.h index ad0e2df9..3e3bb0cb 120000 --- a/Pods/BuildHeaders/Kiwi/KWDeviceInfo.h +++ b/Pods/BuildHeaders/Kiwi/KWDeviceInfo.h @@ -1 +1 @@ -../../Kiwi/Classes/KWDeviceInfo.h \ No newline at end of file +../../Kiwi/Classes/Core/KWDeviceInfo.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWEqualMatcher.h b/Pods/BuildHeaders/Kiwi/KWEqualMatcher.h index d55c9324..e8426758 120000 --- a/Pods/BuildHeaders/Kiwi/KWEqualMatcher.h +++ b/Pods/BuildHeaders/Kiwi/KWEqualMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWEqualMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWEqualMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWExample.h b/Pods/BuildHeaders/Kiwi/KWExample.h index 7c20cd1b..01414923 120000 --- a/Pods/BuildHeaders/Kiwi/KWExample.h +++ b/Pods/BuildHeaders/Kiwi/KWExample.h @@ -1 +1 @@ -../../Kiwi/Classes/KWExample.h \ No newline at end of file +../../Kiwi/Classes/Core/KWExample.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWExampleDelegate.h b/Pods/BuildHeaders/Kiwi/KWExampleDelegate.h new file mode 120000 index 00000000..0e139351 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWExampleDelegate.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWExampleDelegate.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWExampleGroupBuilder.h b/Pods/BuildHeaders/Kiwi/KWExampleGroupBuilder.h deleted file mode 120000 index 0fe8c739..00000000 --- a/Pods/BuildHeaders/Kiwi/KWExampleGroupBuilder.h +++ /dev/null @@ -1 +0,0 @@ -../../Kiwi/Classes/KWExampleGroupBuilder.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWExampleGroupDelegate.h b/Pods/BuildHeaders/Kiwi/KWExampleGroupDelegate.h deleted file mode 120000 index 0ed4e5e2..00000000 --- a/Pods/BuildHeaders/Kiwi/KWExampleGroupDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../Kiwi/Classes/KWExampleGroupDelegate.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWExampleNode.h b/Pods/BuildHeaders/Kiwi/KWExampleNode.h index 261f5073..6fd17907 120000 --- a/Pods/BuildHeaders/Kiwi/KWExampleNode.h +++ b/Pods/BuildHeaders/Kiwi/KWExampleNode.h @@ -1 +1 @@ -../../Kiwi/Classes/KWExampleNode.h \ No newline at end of file +../../Kiwi/Classes/Nodes/KWExampleNode.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWExampleNodeVisitor.h b/Pods/BuildHeaders/Kiwi/KWExampleNodeVisitor.h index 3d7f7d8d..0347cd98 120000 --- a/Pods/BuildHeaders/Kiwi/KWExampleNodeVisitor.h +++ b/Pods/BuildHeaders/Kiwi/KWExampleNodeVisitor.h @@ -1 +1 @@ -../../Kiwi/Classes/KWExampleNodeVisitor.h \ No newline at end of file +../../Kiwi/Classes/Core/KWExampleNodeVisitor.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWExampleSuite.h b/Pods/BuildHeaders/Kiwi/KWExampleSuite.h index fc621509..849831b5 120000 --- a/Pods/BuildHeaders/Kiwi/KWExampleSuite.h +++ b/Pods/BuildHeaders/Kiwi/KWExampleSuite.h @@ -1 +1 @@ -../../Kiwi/Classes/KWExampleSuite.h \ No newline at end of file +../../Kiwi/Classes/Core/KWExampleSuite.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWExampleSuiteBuilder.h b/Pods/BuildHeaders/Kiwi/KWExampleSuiteBuilder.h new file mode 120000 index 00000000..84f06e28 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWExampleSuiteBuilder.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWExampleSuiteBuilder.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWExistVerifier.h b/Pods/BuildHeaders/Kiwi/KWExistVerifier.h index fefc7316..3f0dc32e 120000 --- a/Pods/BuildHeaders/Kiwi/KWExistVerifier.h +++ b/Pods/BuildHeaders/Kiwi/KWExistVerifier.h @@ -1 +1 @@ -../../Kiwi/Classes/KWExistVerifier.h \ No newline at end of file +../../Kiwi/Classes/Verifiers/KWExistVerifier.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWExpectationType.h b/Pods/BuildHeaders/Kiwi/KWExpectationType.h index bb33bfcc..216d889a 120000 --- a/Pods/BuildHeaders/Kiwi/KWExpectationType.h +++ b/Pods/BuildHeaders/Kiwi/KWExpectationType.h @@ -1 +1 @@ -../../Kiwi/Classes/KWExpectationType.h \ No newline at end of file +../../Kiwi/Classes/Core/KWExpectationType.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWFailure.h b/Pods/BuildHeaders/Kiwi/KWFailure.h index b55a3bcd..2b5a88d8 120000 --- a/Pods/BuildHeaders/Kiwi/KWFailure.h +++ b/Pods/BuildHeaders/Kiwi/KWFailure.h @@ -1 +1 @@ -../../Kiwi/Classes/KWFailure.h \ No newline at end of file +../../Kiwi/Classes/Core/KWFailure.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWFormatter.h b/Pods/BuildHeaders/Kiwi/KWFormatter.h index 80c47df4..234fa846 120000 --- a/Pods/BuildHeaders/Kiwi/KWFormatter.h +++ b/Pods/BuildHeaders/Kiwi/KWFormatter.h @@ -1 +1 @@ -../../Kiwi/Classes/KWFormatter.h \ No newline at end of file +../../Kiwi/Classes/Core/KWFormatter.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWFutureObject.h b/Pods/BuildHeaders/Kiwi/KWFutureObject.h index 401eaf06..e1e18065 120000 --- a/Pods/BuildHeaders/Kiwi/KWFutureObject.h +++ b/Pods/BuildHeaders/Kiwi/KWFutureObject.h @@ -1 +1 @@ -../../Kiwi/Classes/KWFutureObject.h \ No newline at end of file +../../Kiwi/Classes/Core/KWFutureObject.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWGenericMatchEvaluator.h b/Pods/BuildHeaders/Kiwi/KWGenericMatchEvaluator.h index c3aeaecd..e47bfc23 120000 --- a/Pods/BuildHeaders/Kiwi/KWGenericMatchEvaluator.h +++ b/Pods/BuildHeaders/Kiwi/KWGenericMatchEvaluator.h @@ -1 +1 @@ -../../Kiwi/Classes/KWGenericMatchEvaluator.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWGenericMatchEvaluator.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWGenericMatcher.h b/Pods/BuildHeaders/Kiwi/KWGenericMatcher.h index 5c48a70b..ed0db0e2 120000 --- a/Pods/BuildHeaders/Kiwi/KWGenericMatcher.h +++ b/Pods/BuildHeaders/Kiwi/KWGenericMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWGenericMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWGenericMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWGenericMatchingAdditions.h b/Pods/BuildHeaders/Kiwi/KWGenericMatchingAdditions.h index 61c0fcd8..4b296a21 120000 --- a/Pods/BuildHeaders/Kiwi/KWGenericMatchingAdditions.h +++ b/Pods/BuildHeaders/Kiwi/KWGenericMatchingAdditions.h @@ -1 +1 @@ -../../Kiwi/Classes/KWGenericMatchingAdditions.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWGenericMatchingAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWHaveMatcher.h b/Pods/BuildHeaders/Kiwi/KWHaveMatcher.h index c2bd2831..6603a8db 120000 --- a/Pods/BuildHeaders/Kiwi/KWHaveMatcher.h +++ b/Pods/BuildHeaders/Kiwi/KWHaveMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWHaveMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWHaveMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWHaveValueMatcher.h b/Pods/BuildHeaders/Kiwi/KWHaveValueMatcher.h index 19b108be..aa68353d 120000 --- a/Pods/BuildHeaders/Kiwi/KWHaveValueMatcher.h +++ b/Pods/BuildHeaders/Kiwi/KWHaveValueMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWHaveValueMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWHaveValueMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWInequalityMatcher.h b/Pods/BuildHeaders/Kiwi/KWInequalityMatcher.h index 8d85cb4c..563f2990 120000 --- a/Pods/BuildHeaders/Kiwi/KWInequalityMatcher.h +++ b/Pods/BuildHeaders/Kiwi/KWInequalityMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWInequalityMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWInequalityMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWIntercept.h b/Pods/BuildHeaders/Kiwi/KWIntercept.h index b9fae629..5aab538c 120000 --- a/Pods/BuildHeaders/Kiwi/KWIntercept.h +++ b/Pods/BuildHeaders/Kiwi/KWIntercept.h @@ -1 +1 @@ -../../Kiwi/Classes/KWIntercept.h \ No newline at end of file +../../Kiwi/NonARC/KWIntercept.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWInvocationCapturer.h b/Pods/BuildHeaders/Kiwi/KWInvocationCapturer.h index 383f8e86..786c20db 120000 --- a/Pods/BuildHeaders/Kiwi/KWInvocationCapturer.h +++ b/Pods/BuildHeaders/Kiwi/KWInvocationCapturer.h @@ -1 +1 @@ -../../Kiwi/Classes/KWInvocationCapturer.h \ No newline at end of file +../../Kiwi/Classes/Core/KWInvocationCapturer.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWItNode.h b/Pods/BuildHeaders/Kiwi/KWItNode.h index 37b3ed5c..115be894 120000 --- a/Pods/BuildHeaders/Kiwi/KWItNode.h +++ b/Pods/BuildHeaders/Kiwi/KWItNode.h @@ -1 +1 @@ -../../Kiwi/Classes/KWItNode.h \ No newline at end of file +../../Kiwi/Classes/Nodes/KWItNode.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWMatchVerifier.h b/Pods/BuildHeaders/Kiwi/KWMatchVerifier.h index 78de3b22..741e295d 120000 --- a/Pods/BuildHeaders/Kiwi/KWMatchVerifier.h +++ b/Pods/BuildHeaders/Kiwi/KWMatchVerifier.h @@ -1 +1 @@ -../../Kiwi/Classes/KWMatchVerifier.h \ No newline at end of file +../../Kiwi/Classes/Verifiers/KWMatchVerifier.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWMatcher.h b/Pods/BuildHeaders/Kiwi/KWMatcher.h index a3869b44..6d1fda1a 120000 --- a/Pods/BuildHeaders/Kiwi/KWMatcher.h +++ b/Pods/BuildHeaders/Kiwi/KWMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWMatcher.h \ No newline at end of file +../../Kiwi/Classes/Core/KWMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWMatcherFactory.h b/Pods/BuildHeaders/Kiwi/KWMatcherFactory.h index d6ef256a..053ae051 120000 --- a/Pods/BuildHeaders/Kiwi/KWMatcherFactory.h +++ b/Pods/BuildHeaders/Kiwi/KWMatcherFactory.h @@ -1 +1 @@ -../../Kiwi/Classes/KWMatcherFactory.h \ No newline at end of file +../../Kiwi/Classes/Core/KWMatcherFactory.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWMatchers.h b/Pods/BuildHeaders/Kiwi/KWMatchers.h index 121cbff1..37dc93d8 120000 --- a/Pods/BuildHeaders/Kiwi/KWMatchers.h +++ b/Pods/BuildHeaders/Kiwi/KWMatchers.h @@ -1 +1 @@ -../../Kiwi/Classes/KWMatchers.h \ No newline at end of file +../../Kiwi/Classes/Core/KWMatchers.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWMatching.h b/Pods/BuildHeaders/Kiwi/KWMatching.h index b46afda0..5094f6ce 120000 --- a/Pods/BuildHeaders/Kiwi/KWMatching.h +++ b/Pods/BuildHeaders/Kiwi/KWMatching.h @@ -1 +1 @@ -../../Kiwi/Classes/KWMatching.h \ No newline at end of file +../../Kiwi/Classes/Core/KWMatching.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWMessagePattern.h b/Pods/BuildHeaders/Kiwi/KWMessagePattern.h index 00983f2d..7db1ee20 120000 --- a/Pods/BuildHeaders/Kiwi/KWMessagePattern.h +++ b/Pods/BuildHeaders/Kiwi/KWMessagePattern.h @@ -1 +1 @@ -../../Kiwi/Classes/KWMessagePattern.h \ No newline at end of file +../../Kiwi/NonARC/KWMessagePattern.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWMessageSpying.h b/Pods/BuildHeaders/Kiwi/KWMessageSpying.h index 31fb60e6..f2b7dc0d 120000 --- a/Pods/BuildHeaders/Kiwi/KWMessageSpying.h +++ b/Pods/BuildHeaders/Kiwi/KWMessageSpying.h @@ -1 +1 @@ -../../Kiwi/Classes/KWMessageSpying.h \ No newline at end of file +../../Kiwi/Classes/Core/KWMessageSpying.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWMessageTracker.h b/Pods/BuildHeaders/Kiwi/KWMessageTracker.h index af301a13..0529de79 120000 --- a/Pods/BuildHeaders/Kiwi/KWMessageTracker.h +++ b/Pods/BuildHeaders/Kiwi/KWMessageTracker.h @@ -1 +1 @@ -../../Kiwi/Classes/KWMessageTracker.h \ No newline at end of file +../../Kiwi/Classes/Core/KWMessageTracker.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWMock.h b/Pods/BuildHeaders/Kiwi/KWMock.h index 5d2b6887..d07edac9 120000 --- a/Pods/BuildHeaders/Kiwi/KWMock.h +++ b/Pods/BuildHeaders/Kiwi/KWMock.h @@ -1 +1 @@ -../../Kiwi/Classes/KWMock.h \ No newline at end of file +../../Kiwi/Classes/Mocking/KWMock.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWNilMatcher.h b/Pods/BuildHeaders/Kiwi/KWNilMatcher.h new file mode 120000 index 00000000..fbe052f1 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWNilMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWNilMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWNull.h b/Pods/BuildHeaders/Kiwi/KWNull.h index 3a8677c9..af2cb10c 120000 --- a/Pods/BuildHeaders/Kiwi/KWNull.h +++ b/Pods/BuildHeaders/Kiwi/KWNull.h @@ -1 +1 @@ -../../Kiwi/Classes/KWNull.h \ No newline at end of file +../../Kiwi/Classes/Core/KWNull.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWObjCUtilities.h b/Pods/BuildHeaders/Kiwi/KWObjCUtilities.h index f9c04a29..f6cc0b91 120000 --- a/Pods/BuildHeaders/Kiwi/KWObjCUtilities.h +++ b/Pods/BuildHeaders/Kiwi/KWObjCUtilities.h @@ -1 +1 @@ -../../Kiwi/Classes/KWObjCUtilities.h \ No newline at end of file +../../Kiwi/Classes/Core/KWObjCUtilities.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWPendingNode.h b/Pods/BuildHeaders/Kiwi/KWPendingNode.h index 6a2a4ab1..7ff39e4f 120000 --- a/Pods/BuildHeaders/Kiwi/KWPendingNode.h +++ b/Pods/BuildHeaders/Kiwi/KWPendingNode.h @@ -1 +1 @@ -../../Kiwi/Classes/KWPendingNode.h \ No newline at end of file +../../Kiwi/Classes/Nodes/KWPendingNode.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWProbe.h b/Pods/BuildHeaders/Kiwi/KWProbe.h index 8eae9947..d6cdabbb 120000 --- a/Pods/BuildHeaders/Kiwi/KWProbe.h +++ b/Pods/BuildHeaders/Kiwi/KWProbe.h @@ -1 +1 @@ -../../Kiwi/Classes/KWProbe.h \ No newline at end of file +../../Kiwi/Classes/Core/KWProbe.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWProbePoller.h b/Pods/BuildHeaders/Kiwi/KWProbePoller.h index 852d35e4..a1aee4ca 120000 --- a/Pods/BuildHeaders/Kiwi/KWProbePoller.h +++ b/Pods/BuildHeaders/Kiwi/KWProbePoller.h @@ -1 +1 @@ -../../Kiwi/Classes/KWProbePoller.h \ No newline at end of file +../../Kiwi/Classes/Core/KWProbePoller.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWRaiseMatcher.h b/Pods/BuildHeaders/Kiwi/KWRaiseMatcher.h index bdcd8ae6..4f4b4d92 120000 --- a/Pods/BuildHeaders/Kiwi/KWRaiseMatcher.h +++ b/Pods/BuildHeaders/Kiwi/KWRaiseMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWRaiseMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWRaiseMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWReceiveMatcher.h b/Pods/BuildHeaders/Kiwi/KWReceiveMatcher.h index 5dfb172d..c7c16f0f 120000 --- a/Pods/BuildHeaders/Kiwi/KWReceiveMatcher.h +++ b/Pods/BuildHeaders/Kiwi/KWReceiveMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWReceiveMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWReceiveMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWRegisterMatchersNode.h b/Pods/BuildHeaders/Kiwi/KWRegisterMatchersNode.h index 6ee09af7..0d88f5df 120000 --- a/Pods/BuildHeaders/Kiwi/KWRegisterMatchersNode.h +++ b/Pods/BuildHeaders/Kiwi/KWRegisterMatchersNode.h @@ -1 +1 @@ -../../Kiwi/Classes/KWRegisterMatchersNode.h \ No newline at end of file +../../Kiwi/Classes/Nodes/KWRegisterMatchersNode.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWRegularExpressionPatternMatcher.h b/Pods/BuildHeaders/Kiwi/KWRegularExpressionPatternMatcher.h index c9b56b5d..322e8d11 120000 --- a/Pods/BuildHeaders/Kiwi/KWRegularExpressionPatternMatcher.h +++ b/Pods/BuildHeaders/Kiwi/KWRegularExpressionPatternMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWRegularExpressionPatternMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWRegularExpressionPatternMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWReporting.h b/Pods/BuildHeaders/Kiwi/KWReporting.h index 76724b40..d220f49c 120000 --- a/Pods/BuildHeaders/Kiwi/KWReporting.h +++ b/Pods/BuildHeaders/Kiwi/KWReporting.h @@ -1 +1 @@ -../../Kiwi/Classes/KWReporting.h \ No newline at end of file +../../Kiwi/Classes/Core/KWReporting.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWRespondToSelectorMatcher.h b/Pods/BuildHeaders/Kiwi/KWRespondToSelectorMatcher.h index 638ffc9b..53da1b3d 120000 --- a/Pods/BuildHeaders/Kiwi/KWRespondToSelectorMatcher.h +++ b/Pods/BuildHeaders/Kiwi/KWRespondToSelectorMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWRespondToSelectorMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWRespondToSelectorMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWSpec.h b/Pods/BuildHeaders/Kiwi/KWSpec.h index 01ff65d9..b35172e7 120000 --- a/Pods/BuildHeaders/Kiwi/KWSpec.h +++ b/Pods/BuildHeaders/Kiwi/KWSpec.h @@ -1 +1 @@ -../../Kiwi/Classes/KWSpec.h \ No newline at end of file +../../Kiwi/Classes/Core/KWSpec.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWStringContainsMatcher.h b/Pods/BuildHeaders/Kiwi/KWStringContainsMatcher.h index 31a35fa8..43c9cd42 120000 --- a/Pods/BuildHeaders/Kiwi/KWStringContainsMatcher.h +++ b/Pods/BuildHeaders/Kiwi/KWStringContainsMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWStringContainsMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWStringContainsMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWStringPrefixMatcher.h b/Pods/BuildHeaders/Kiwi/KWStringPrefixMatcher.h index 6332ce41..351d3e72 120000 --- a/Pods/BuildHeaders/Kiwi/KWStringPrefixMatcher.h +++ b/Pods/BuildHeaders/Kiwi/KWStringPrefixMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWStringPrefixMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWStringPrefixMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWStringUtilities.h b/Pods/BuildHeaders/Kiwi/KWStringUtilities.h index c6b107f1..e6225dc8 120000 --- a/Pods/BuildHeaders/Kiwi/KWStringUtilities.h +++ b/Pods/BuildHeaders/Kiwi/KWStringUtilities.h @@ -1 +1 @@ -../../Kiwi/Classes/KWStringUtilities.h \ No newline at end of file +../../Kiwi/Classes/Core/KWStringUtilities.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWStub.h b/Pods/BuildHeaders/Kiwi/KWStub.h index 38e5d0dc..6c8519fd 120000 --- a/Pods/BuildHeaders/Kiwi/KWStub.h +++ b/Pods/BuildHeaders/Kiwi/KWStub.h @@ -1 +1 @@ -../../Kiwi/Classes/KWStub.h \ No newline at end of file +../../Kiwi/NonARC/KWStub.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWSymbolicator.h b/Pods/BuildHeaders/Kiwi/KWSymbolicator.h index 0f442f62..2bc8b59f 120000 --- a/Pods/BuildHeaders/Kiwi/KWSymbolicator.h +++ b/Pods/BuildHeaders/Kiwi/KWSymbolicator.h @@ -1 +1 @@ -../../Kiwi/Classes/KWSymbolicator.h \ No newline at end of file +../../Kiwi/NonARC/KWSymbolicator.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWTestCase.h b/Pods/BuildHeaders/Kiwi/KWTestCase.h deleted file mode 120000 index 04096f4a..00000000 --- a/Pods/BuildHeaders/Kiwi/KWTestCase.h +++ /dev/null @@ -1 +0,0 @@ -../../Kiwi/Classes/KWTestCase.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWUserDefinedMatcher.h b/Pods/BuildHeaders/Kiwi/KWUserDefinedMatcher.h index e6a74c19..241b176a 120000 --- a/Pods/BuildHeaders/Kiwi/KWUserDefinedMatcher.h +++ b/Pods/BuildHeaders/Kiwi/KWUserDefinedMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWUserDefinedMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWUserDefinedMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWValue.h b/Pods/BuildHeaders/Kiwi/KWValue.h index 1546da51..f5aabfb5 120000 --- a/Pods/BuildHeaders/Kiwi/KWValue.h +++ b/Pods/BuildHeaders/Kiwi/KWValue.h @@ -1 +1 @@ -../../Kiwi/Classes/KWValue.h \ No newline at end of file +../../Kiwi/Classes/Core/KWValue.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWVerifying.h b/Pods/BuildHeaders/Kiwi/KWVerifying.h index 7e7e7f32..10c41b73 120000 --- a/Pods/BuildHeaders/Kiwi/KWVerifying.h +++ b/Pods/BuildHeaders/Kiwi/KWVerifying.h @@ -1 +1 @@ -../../Kiwi/Classes/KWVerifying.h \ No newline at end of file +../../Kiwi/Classes/Verifiers/KWVerifying.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWWorkarounds.h b/Pods/BuildHeaders/Kiwi/KWWorkarounds.h index 4535bdc0..5394bed7 120000 --- a/Pods/BuildHeaders/Kiwi/KWWorkarounds.h +++ b/Pods/BuildHeaders/Kiwi/KWWorkarounds.h @@ -1 +1 @@ -../../Kiwi/Classes/KWWorkarounds.h \ No newline at end of file +../../Kiwi/Classes/Core/KWWorkarounds.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/Kiwi.h b/Pods/BuildHeaders/Kiwi/Kiwi.h index 2a5426ef..90584f1e 120000 --- a/Pods/BuildHeaders/Kiwi/Kiwi.h +++ b/Pods/BuildHeaders/Kiwi/Kiwi.h @@ -1 +1 @@ -../../Kiwi/Classes/Kiwi.h \ No newline at end of file +../../Kiwi/Classes/Core/Kiwi.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KiwiBlockMacros.h b/Pods/BuildHeaders/Kiwi/KiwiBlockMacros.h index 04077045..c0407583 120000 --- a/Pods/BuildHeaders/Kiwi/KiwiBlockMacros.h +++ b/Pods/BuildHeaders/Kiwi/KiwiBlockMacros.h @@ -1 +1 @@ -../../Kiwi/Classes/KiwiBlockMacros.h \ No newline at end of file +../../Kiwi/Classes/Core/KiwiBlockMacros.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KiwiConfiguration.h b/Pods/BuildHeaders/Kiwi/KiwiConfiguration.h index e5928521..cdd209e3 120000 --- a/Pods/BuildHeaders/Kiwi/KiwiConfiguration.h +++ b/Pods/BuildHeaders/Kiwi/KiwiConfiguration.h @@ -1 +1 @@ -../../Kiwi/Classes/KiwiConfiguration.h \ No newline at end of file +../../Kiwi/Classes/Core/KiwiConfiguration.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KiwiMacros.h b/Pods/BuildHeaders/Kiwi/KiwiMacros.h index eb8ad23d..936b3590 120000 --- a/Pods/BuildHeaders/Kiwi/KiwiMacros.h +++ b/Pods/BuildHeaders/Kiwi/KiwiMacros.h @@ -1 +1 @@ -../../Kiwi/Classes/KiwiMacros.h \ No newline at end of file +../../Kiwi/Classes/Core/KiwiMacros.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/NSInvocation+KiwiAdditions.h b/Pods/BuildHeaders/Kiwi/NSInvocation+KiwiAdditions.h index 0a19c57e..216b70b1 120000 --- a/Pods/BuildHeaders/Kiwi/NSInvocation+KiwiAdditions.h +++ b/Pods/BuildHeaders/Kiwi/NSInvocation+KiwiAdditions.h @@ -1 +1 @@ -../../Kiwi/Classes/NSInvocation+KiwiAdditions.h \ No newline at end of file +../../Kiwi/Classes/Core/NSInvocation+KiwiAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/NSInvocation+OCMAdditions.h b/Pods/BuildHeaders/Kiwi/NSInvocation+OCMAdditions.h index 1816d66e..5d505e9a 120000 --- a/Pods/BuildHeaders/Kiwi/NSInvocation+OCMAdditions.h +++ b/Pods/BuildHeaders/Kiwi/NSInvocation+OCMAdditions.h @@ -1 +1 @@ -../../Kiwi/Classes/NSInvocation+OCMAdditions.h \ No newline at end of file +../../Kiwi/Classes/Core/NSInvocation+OCMAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/NSMethodSignature+KiwiAdditions.h b/Pods/BuildHeaders/Kiwi/NSMethodSignature+KiwiAdditions.h index 83429ba5..816f65b7 120000 --- a/Pods/BuildHeaders/Kiwi/NSMethodSignature+KiwiAdditions.h +++ b/Pods/BuildHeaders/Kiwi/NSMethodSignature+KiwiAdditions.h @@ -1 +1 @@ -../../Kiwi/Classes/NSMethodSignature+KiwiAdditions.h \ No newline at end of file +../../Kiwi/Classes/Core/NSMethodSignature+KiwiAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/NSNumber+KiwiAdditions.h b/Pods/BuildHeaders/Kiwi/NSNumber+KiwiAdditions.h index 48e23543..aa1be1c1 120000 --- a/Pods/BuildHeaders/Kiwi/NSNumber+KiwiAdditions.h +++ b/Pods/BuildHeaders/Kiwi/NSNumber+KiwiAdditions.h @@ -1 +1 @@ -../../Kiwi/Classes/NSNumber+KiwiAdditions.h \ No newline at end of file +../../Kiwi/Classes/Core/NSNumber+KiwiAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/NSObject+KiwiMockAdditions.h b/Pods/BuildHeaders/Kiwi/NSObject+KiwiMockAdditions.h index 32160c6d..eba045f0 120000 --- a/Pods/BuildHeaders/Kiwi/NSObject+KiwiMockAdditions.h +++ b/Pods/BuildHeaders/Kiwi/NSObject+KiwiMockAdditions.h @@ -1 +1 @@ -../../Kiwi/Classes/NSObject+KiwiMockAdditions.h \ No newline at end of file +../../Kiwi/Classes/Mocking/NSObject+KiwiMockAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/NSObject+KiwiSpyAdditions.h b/Pods/BuildHeaders/Kiwi/NSObject+KiwiSpyAdditions.h index 4da2d797..9746eafd 120000 --- a/Pods/BuildHeaders/Kiwi/NSObject+KiwiSpyAdditions.h +++ b/Pods/BuildHeaders/Kiwi/NSObject+KiwiSpyAdditions.h @@ -1 +1 @@ -../../Kiwi/Classes/NSObject+KiwiSpyAdditions.h \ No newline at end of file +../../Kiwi/Classes/Core/NSObject+KiwiSpyAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/NSObject+KiwiStubAdditions.h b/Pods/BuildHeaders/Kiwi/NSObject+KiwiStubAdditions.h index a64ea2c1..09dc8adc 120000 --- a/Pods/BuildHeaders/Kiwi/NSObject+KiwiStubAdditions.h +++ b/Pods/BuildHeaders/Kiwi/NSObject+KiwiStubAdditions.h @@ -1 +1 @@ -../../Kiwi/Classes/NSObject+KiwiStubAdditions.h \ No newline at end of file +../../Kiwi/Classes/Stubbing/NSObject+KiwiStubAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/NSObject+KiwiVerifierAdditions.h b/Pods/BuildHeaders/Kiwi/NSObject+KiwiVerifierAdditions.h index 68f6f438..9def95d7 120000 --- a/Pods/BuildHeaders/Kiwi/NSObject+KiwiVerifierAdditions.h +++ b/Pods/BuildHeaders/Kiwi/NSObject+KiwiVerifierAdditions.h @@ -1 +1 @@ -../../Kiwi/Classes/NSObject+KiwiVerifierAdditions.h \ No newline at end of file +../../Kiwi/Classes/Core/NSObject+KiwiVerifierAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/NSProxy+KiwiVerifierAdditions.h b/Pods/BuildHeaders/Kiwi/NSProxy+KiwiVerifierAdditions.h index 1e078742..f58050df 120000 --- a/Pods/BuildHeaders/Kiwi/NSProxy+KiwiVerifierAdditions.h +++ b/Pods/BuildHeaders/Kiwi/NSProxy+KiwiVerifierAdditions.h @@ -1 +1 @@ -../../Kiwi/Classes/NSProxy+KiwiVerifierAdditions.h \ No newline at end of file +../../Kiwi/Classes/Core/NSProxy+KiwiVerifierAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/NSValue+KiwiAdditions.h b/Pods/BuildHeaders/Kiwi/NSValue+KiwiAdditions.h index 5b157129..e411b0c8 120000 --- a/Pods/BuildHeaders/Kiwi/NSValue+KiwiAdditions.h +++ b/Pods/BuildHeaders/Kiwi/NSValue+KiwiAdditions.h @@ -1 +1 @@ -../../Kiwi/Classes/NSValue+KiwiAdditions.h \ No newline at end of file +../../Kiwi/Classes/Core/NSValue+KiwiAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/SenTestSuite+KiwiAdditions.h b/Pods/BuildHeaders/Kiwi/SenTestSuite+KiwiAdditions.h index 67fee890..e1e643a7 120000 --- a/Pods/BuildHeaders/Kiwi/SenTestSuite+KiwiAdditions.h +++ b/Pods/BuildHeaders/Kiwi/SenTestSuite+KiwiAdditions.h @@ -1 +1 @@ -../../Kiwi/Classes/SenTestSuite+KiwiAdditions.h \ No newline at end of file +../../Kiwi/SenTestingKit/SenTestSuite+KiwiAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/OHHTTPStubs/OHHTTPStubs.h b/Pods/BuildHeaders/OHHTTPStubs/OHHTTPStubs.h index ddea87e2..c1b5c94e 120000 --- a/Pods/BuildHeaders/OHHTTPStubs/OHHTTPStubs.h +++ b/Pods/BuildHeaders/OHHTTPStubs/OHHTTPStubs.h @@ -1 +1 @@ -../../OHHTTPStubs/OHHTTPStubs/OHHTTPStubs.h \ No newline at end of file +../../OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubs.h \ No newline at end of file diff --git a/Pods/BuildHeaders/OHHTTPStubs/OHHTTPStubsResponse+HTTPMessage.h b/Pods/BuildHeaders/OHHTTPStubs/OHHTTPStubsResponse+HTTPMessage.h new file mode 120000 index 00000000..c7dea8a5 --- /dev/null +++ b/Pods/BuildHeaders/OHHTTPStubs/OHHTTPStubsResponse+HTTPMessage.h @@ -0,0 +1 @@ +../../OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse+HTTPMessage.h \ No newline at end of file diff --git a/Pods/BuildHeaders/OHHTTPStubs/OHHTTPStubsResponse+JSON.h b/Pods/BuildHeaders/OHHTTPStubs/OHHTTPStubsResponse+JSON.h new file mode 120000 index 00000000..078fe3df --- /dev/null +++ b/Pods/BuildHeaders/OHHTTPStubs/OHHTTPStubsResponse+JSON.h @@ -0,0 +1 @@ +../../OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse+JSON.h \ No newline at end of file diff --git a/Pods/BuildHeaders/OHHTTPStubs/OHHTTPStubsResponse.h b/Pods/BuildHeaders/OHHTTPStubs/OHHTTPStubsResponse.h index fe2a9462..bfce4e4b 120000 --- a/Pods/BuildHeaders/OHHTTPStubs/OHHTTPStubsResponse.h +++ b/Pods/BuildHeaders/OHHTTPStubs/OHHTTPStubsResponse.h @@ -1 +1 @@ -../../OHHTTPStubs/OHHTTPStubs/OHHTTPStubsResponse.h \ No newline at end of file +../../OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWAfterAllNode.h b/Pods/Headers/Kiwi/KWAfterAllNode.h index 4e9be08d..9eeb57f6 120000 --- a/Pods/Headers/Kiwi/KWAfterAllNode.h +++ b/Pods/Headers/Kiwi/KWAfterAllNode.h @@ -1 +1 @@ -../../Kiwi/Classes/KWAfterAllNode.h \ No newline at end of file +../../Kiwi/Classes/Nodes/KWAfterAllNode.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWAfterEachNode.h b/Pods/Headers/Kiwi/KWAfterEachNode.h index 450df359..b8072885 120000 --- a/Pods/Headers/Kiwi/KWAfterEachNode.h +++ b/Pods/Headers/Kiwi/KWAfterEachNode.h @@ -1 +1 @@ -../../Kiwi/Classes/KWAfterEachNode.h \ No newline at end of file +../../Kiwi/Classes/Nodes/KWAfterEachNode.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWAny.h b/Pods/Headers/Kiwi/KWAny.h index 681893a7..0d334e71 120000 --- a/Pods/Headers/Kiwi/KWAny.h +++ b/Pods/Headers/Kiwi/KWAny.h @@ -1 +1 @@ -../../Kiwi/Classes/KWAny.h \ No newline at end of file +../../Kiwi/Classes/Core/KWAny.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWAsyncVerifier.h b/Pods/Headers/Kiwi/KWAsyncVerifier.h index 33cf289c..55ca577c 120000 --- a/Pods/Headers/Kiwi/KWAsyncVerifier.h +++ b/Pods/Headers/Kiwi/KWAsyncVerifier.h @@ -1 +1 @@ -../../Kiwi/Classes/KWAsyncVerifier.h \ No newline at end of file +../../Kiwi/Classes/Verifiers/KWAsyncVerifier.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWBeBetweenMatcher.h b/Pods/Headers/Kiwi/KWBeBetweenMatcher.h index bbe53145..75f94424 120000 --- a/Pods/Headers/Kiwi/KWBeBetweenMatcher.h +++ b/Pods/Headers/Kiwi/KWBeBetweenMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWBeBetweenMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWBeBetweenMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWBeEmptyMatcher.h b/Pods/Headers/Kiwi/KWBeEmptyMatcher.h index f5a06897..fc8c89a8 120000 --- a/Pods/Headers/Kiwi/KWBeEmptyMatcher.h +++ b/Pods/Headers/Kiwi/KWBeEmptyMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWBeEmptyMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWBeEmptyMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWBeIdenticalToMatcher.h b/Pods/Headers/Kiwi/KWBeIdenticalToMatcher.h index b746586e..6e8e6be1 120000 --- a/Pods/Headers/Kiwi/KWBeIdenticalToMatcher.h +++ b/Pods/Headers/Kiwi/KWBeIdenticalToMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWBeIdenticalToMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWBeIdenticalToMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWBeKindOfClassMatcher.h b/Pods/Headers/Kiwi/KWBeKindOfClassMatcher.h index 06fbe032..d4170aad 120000 --- a/Pods/Headers/Kiwi/KWBeKindOfClassMatcher.h +++ b/Pods/Headers/Kiwi/KWBeKindOfClassMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWBeKindOfClassMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWBeKindOfClassMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWBeMemberOfClassMatcher.h b/Pods/Headers/Kiwi/KWBeMemberOfClassMatcher.h index 08101ce8..9b96c095 120000 --- a/Pods/Headers/Kiwi/KWBeMemberOfClassMatcher.h +++ b/Pods/Headers/Kiwi/KWBeMemberOfClassMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWBeMemberOfClassMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWBeMemberOfClassMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWBeNilMatcher.h b/Pods/Headers/Kiwi/KWBeNilMatcher.h deleted file mode 120000 index be56da65..00000000 --- a/Pods/Headers/Kiwi/KWBeNilMatcher.h +++ /dev/null @@ -1 +0,0 @@ -../../Kiwi/Classes/KWBeNilMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWBeNonNilMatcher.h b/Pods/Headers/Kiwi/KWBeNonNilMatcher.h deleted file mode 120000 index 16c909a3..00000000 --- a/Pods/Headers/Kiwi/KWBeNonNilMatcher.h +++ /dev/null @@ -1 +0,0 @@ -../../Kiwi/Classes/KWBeNonNilMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWBeSubclassOfClassMatcher.h b/Pods/Headers/Kiwi/KWBeSubclassOfClassMatcher.h index 264f776d..ce788b78 120000 --- a/Pods/Headers/Kiwi/KWBeSubclassOfClassMatcher.h +++ b/Pods/Headers/Kiwi/KWBeSubclassOfClassMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWBeSubclassOfClassMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWBeSubclassOfClassMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWBeTrueMatcher.h b/Pods/Headers/Kiwi/KWBeTrueMatcher.h index 321d3471..6bbe534c 120000 --- a/Pods/Headers/Kiwi/KWBeTrueMatcher.h +++ b/Pods/Headers/Kiwi/KWBeTrueMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWBeTrueMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWBeTrueMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWBeWithinMatcher.h b/Pods/Headers/Kiwi/KWBeWithinMatcher.h index 895f8602..ab3ad9d6 120000 --- a/Pods/Headers/Kiwi/KWBeWithinMatcher.h +++ b/Pods/Headers/Kiwi/KWBeWithinMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWBeWithinMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWBeWithinMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWBeZeroMatcher.h b/Pods/Headers/Kiwi/KWBeZeroMatcher.h index 98481608..5c6a52d2 120000 --- a/Pods/Headers/Kiwi/KWBeZeroMatcher.h +++ b/Pods/Headers/Kiwi/KWBeZeroMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWBeZeroMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWBeZeroMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWBeforeAllNode.h b/Pods/Headers/Kiwi/KWBeforeAllNode.h index 139d69a7..e50bbfc5 120000 --- a/Pods/Headers/Kiwi/KWBeforeAllNode.h +++ b/Pods/Headers/Kiwi/KWBeforeAllNode.h @@ -1 +1 @@ -../../Kiwi/Classes/KWBeforeAllNode.h \ No newline at end of file +../../Kiwi/Classes/Nodes/KWBeforeAllNode.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWBeforeEachNode.h b/Pods/Headers/Kiwi/KWBeforeEachNode.h index f72e71cd..e25d7548 120000 --- a/Pods/Headers/Kiwi/KWBeforeEachNode.h +++ b/Pods/Headers/Kiwi/KWBeforeEachNode.h @@ -1 +1 @@ -../../Kiwi/Classes/KWBeforeEachNode.h \ No newline at end of file +../../Kiwi/Classes/Nodes/KWBeforeEachNode.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWBlock.h b/Pods/Headers/Kiwi/KWBlock.h index a6a57c3a..0262aa9f 120000 --- a/Pods/Headers/Kiwi/KWBlock.h +++ b/Pods/Headers/Kiwi/KWBlock.h @@ -1 +1 @@ -../../Kiwi/Classes/KWBlock.h \ No newline at end of file +../../Kiwi/Classes/Core/KWBlock.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWBlockNode.h b/Pods/Headers/Kiwi/KWBlockNode.h index d6fc3575..250e21bd 120000 --- a/Pods/Headers/Kiwi/KWBlockNode.h +++ b/Pods/Headers/Kiwi/KWBlockNode.h @@ -1 +1 @@ -../../Kiwi/Classes/KWBlockNode.h \ No newline at end of file +../../Kiwi/Classes/Nodes/KWBlockNode.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWBlockRaiseMatcher.h b/Pods/Headers/Kiwi/KWBlockRaiseMatcher.h index 68a0b994..0e3150b6 120000 --- a/Pods/Headers/Kiwi/KWBlockRaiseMatcher.h +++ b/Pods/Headers/Kiwi/KWBlockRaiseMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWBlockRaiseMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWBlockRaiseMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWCallSite.h b/Pods/Headers/Kiwi/KWCallSite.h index e2a84e7a..693a01b2 120000 --- a/Pods/Headers/Kiwi/KWCallSite.h +++ b/Pods/Headers/Kiwi/KWCallSite.h @@ -1 +1 @@ -../../Kiwi/Classes/KWCallSite.h \ No newline at end of file +../../Kiwi/Classes/Core/KWCallSite.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWCaptureSpy.h b/Pods/Headers/Kiwi/KWCaptureSpy.h index ed1d8653..54a3ca28 120000 --- a/Pods/Headers/Kiwi/KWCaptureSpy.h +++ b/Pods/Headers/Kiwi/KWCaptureSpy.h @@ -1 +1 @@ -../../Kiwi/Classes/KWCaptureSpy.h \ No newline at end of file +../../Kiwi/Classes/Core/KWCaptureSpy.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWChangeMatcher.h b/Pods/Headers/Kiwi/KWChangeMatcher.h index da16244e..be6e80b0 120000 --- a/Pods/Headers/Kiwi/KWChangeMatcher.h +++ b/Pods/Headers/Kiwi/KWChangeMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWChangeMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWChangeMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWConformToProtocolMatcher.h b/Pods/Headers/Kiwi/KWConformToProtocolMatcher.h index c4512e33..749ed755 120000 --- a/Pods/Headers/Kiwi/KWConformToProtocolMatcher.h +++ b/Pods/Headers/Kiwi/KWConformToProtocolMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWConformToProtocolMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWConformToProtocolMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWContainMatcher.h b/Pods/Headers/Kiwi/KWContainMatcher.h index 3b564a74..672fd9fd 120000 --- a/Pods/Headers/Kiwi/KWContainMatcher.h +++ b/Pods/Headers/Kiwi/KWContainMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWContainMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWContainMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWContainStringMatcher.h b/Pods/Headers/Kiwi/KWContainStringMatcher.h index 2eae470d..3ee51f0d 120000 --- a/Pods/Headers/Kiwi/KWContainStringMatcher.h +++ b/Pods/Headers/Kiwi/KWContainStringMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWContainStringMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWContainStringMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWContextNode.h b/Pods/Headers/Kiwi/KWContextNode.h index 367e4497..7f72f768 120000 --- a/Pods/Headers/Kiwi/KWContextNode.h +++ b/Pods/Headers/Kiwi/KWContextNode.h @@ -1 +1 @@ -../../Kiwi/Classes/KWContextNode.h \ No newline at end of file +../../Kiwi/Classes/Nodes/KWContextNode.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWCountType.h b/Pods/Headers/Kiwi/KWCountType.h index f48c43f5..1f022278 120000 --- a/Pods/Headers/Kiwi/KWCountType.h +++ b/Pods/Headers/Kiwi/KWCountType.h @@ -1 +1 @@ -../../Kiwi/Classes/KWCountType.h \ No newline at end of file +../../Kiwi/Classes/Core/KWCountType.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWDeviceInfo.h b/Pods/Headers/Kiwi/KWDeviceInfo.h index ad0e2df9..3e3bb0cb 120000 --- a/Pods/Headers/Kiwi/KWDeviceInfo.h +++ b/Pods/Headers/Kiwi/KWDeviceInfo.h @@ -1 +1 @@ -../../Kiwi/Classes/KWDeviceInfo.h \ No newline at end of file +../../Kiwi/Classes/Core/KWDeviceInfo.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWEqualMatcher.h b/Pods/Headers/Kiwi/KWEqualMatcher.h index d55c9324..e8426758 120000 --- a/Pods/Headers/Kiwi/KWEqualMatcher.h +++ b/Pods/Headers/Kiwi/KWEqualMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWEqualMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWEqualMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWExample.h b/Pods/Headers/Kiwi/KWExample.h index 7c20cd1b..01414923 120000 --- a/Pods/Headers/Kiwi/KWExample.h +++ b/Pods/Headers/Kiwi/KWExample.h @@ -1 +1 @@ -../../Kiwi/Classes/KWExample.h \ No newline at end of file +../../Kiwi/Classes/Core/KWExample.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWExampleDelegate.h b/Pods/Headers/Kiwi/KWExampleDelegate.h new file mode 120000 index 00000000..0e139351 --- /dev/null +++ b/Pods/Headers/Kiwi/KWExampleDelegate.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWExampleDelegate.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWExampleGroupBuilder.h b/Pods/Headers/Kiwi/KWExampleGroupBuilder.h deleted file mode 120000 index 0fe8c739..00000000 --- a/Pods/Headers/Kiwi/KWExampleGroupBuilder.h +++ /dev/null @@ -1 +0,0 @@ -../../Kiwi/Classes/KWExampleGroupBuilder.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWExampleGroupDelegate.h b/Pods/Headers/Kiwi/KWExampleGroupDelegate.h deleted file mode 120000 index 0ed4e5e2..00000000 --- a/Pods/Headers/Kiwi/KWExampleGroupDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../Kiwi/Classes/KWExampleGroupDelegate.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWExampleNode.h b/Pods/Headers/Kiwi/KWExampleNode.h index 261f5073..6fd17907 120000 --- a/Pods/Headers/Kiwi/KWExampleNode.h +++ b/Pods/Headers/Kiwi/KWExampleNode.h @@ -1 +1 @@ -../../Kiwi/Classes/KWExampleNode.h \ No newline at end of file +../../Kiwi/Classes/Nodes/KWExampleNode.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWExampleNodeVisitor.h b/Pods/Headers/Kiwi/KWExampleNodeVisitor.h index 3d7f7d8d..0347cd98 120000 --- a/Pods/Headers/Kiwi/KWExampleNodeVisitor.h +++ b/Pods/Headers/Kiwi/KWExampleNodeVisitor.h @@ -1 +1 @@ -../../Kiwi/Classes/KWExampleNodeVisitor.h \ No newline at end of file +../../Kiwi/Classes/Core/KWExampleNodeVisitor.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWExampleSuite.h b/Pods/Headers/Kiwi/KWExampleSuite.h index fc621509..849831b5 120000 --- a/Pods/Headers/Kiwi/KWExampleSuite.h +++ b/Pods/Headers/Kiwi/KWExampleSuite.h @@ -1 +1 @@ -../../Kiwi/Classes/KWExampleSuite.h \ No newline at end of file +../../Kiwi/Classes/Core/KWExampleSuite.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWExampleSuiteBuilder.h b/Pods/Headers/Kiwi/KWExampleSuiteBuilder.h new file mode 120000 index 00000000..84f06e28 --- /dev/null +++ b/Pods/Headers/Kiwi/KWExampleSuiteBuilder.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWExampleSuiteBuilder.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWExistVerifier.h b/Pods/Headers/Kiwi/KWExistVerifier.h index fefc7316..3f0dc32e 120000 --- a/Pods/Headers/Kiwi/KWExistVerifier.h +++ b/Pods/Headers/Kiwi/KWExistVerifier.h @@ -1 +1 @@ -../../Kiwi/Classes/KWExistVerifier.h \ No newline at end of file +../../Kiwi/Classes/Verifiers/KWExistVerifier.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWExpectationType.h b/Pods/Headers/Kiwi/KWExpectationType.h index bb33bfcc..216d889a 120000 --- a/Pods/Headers/Kiwi/KWExpectationType.h +++ b/Pods/Headers/Kiwi/KWExpectationType.h @@ -1 +1 @@ -../../Kiwi/Classes/KWExpectationType.h \ No newline at end of file +../../Kiwi/Classes/Core/KWExpectationType.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWFailure.h b/Pods/Headers/Kiwi/KWFailure.h index b55a3bcd..2b5a88d8 120000 --- a/Pods/Headers/Kiwi/KWFailure.h +++ b/Pods/Headers/Kiwi/KWFailure.h @@ -1 +1 @@ -../../Kiwi/Classes/KWFailure.h \ No newline at end of file +../../Kiwi/Classes/Core/KWFailure.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWFormatter.h b/Pods/Headers/Kiwi/KWFormatter.h index 80c47df4..234fa846 120000 --- a/Pods/Headers/Kiwi/KWFormatter.h +++ b/Pods/Headers/Kiwi/KWFormatter.h @@ -1 +1 @@ -../../Kiwi/Classes/KWFormatter.h \ No newline at end of file +../../Kiwi/Classes/Core/KWFormatter.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWFutureObject.h b/Pods/Headers/Kiwi/KWFutureObject.h index 401eaf06..e1e18065 120000 --- a/Pods/Headers/Kiwi/KWFutureObject.h +++ b/Pods/Headers/Kiwi/KWFutureObject.h @@ -1 +1 @@ -../../Kiwi/Classes/KWFutureObject.h \ No newline at end of file +../../Kiwi/Classes/Core/KWFutureObject.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWGenericMatchEvaluator.h b/Pods/Headers/Kiwi/KWGenericMatchEvaluator.h index c3aeaecd..e47bfc23 120000 --- a/Pods/Headers/Kiwi/KWGenericMatchEvaluator.h +++ b/Pods/Headers/Kiwi/KWGenericMatchEvaluator.h @@ -1 +1 @@ -../../Kiwi/Classes/KWGenericMatchEvaluator.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWGenericMatchEvaluator.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWGenericMatcher.h b/Pods/Headers/Kiwi/KWGenericMatcher.h index 5c48a70b..ed0db0e2 120000 --- a/Pods/Headers/Kiwi/KWGenericMatcher.h +++ b/Pods/Headers/Kiwi/KWGenericMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWGenericMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWGenericMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWGenericMatchingAdditions.h b/Pods/Headers/Kiwi/KWGenericMatchingAdditions.h index 61c0fcd8..4b296a21 120000 --- a/Pods/Headers/Kiwi/KWGenericMatchingAdditions.h +++ b/Pods/Headers/Kiwi/KWGenericMatchingAdditions.h @@ -1 +1 @@ -../../Kiwi/Classes/KWGenericMatchingAdditions.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWGenericMatchingAdditions.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWHaveMatcher.h b/Pods/Headers/Kiwi/KWHaveMatcher.h index c2bd2831..6603a8db 120000 --- a/Pods/Headers/Kiwi/KWHaveMatcher.h +++ b/Pods/Headers/Kiwi/KWHaveMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWHaveMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWHaveMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWHaveValueMatcher.h b/Pods/Headers/Kiwi/KWHaveValueMatcher.h index 19b108be..aa68353d 120000 --- a/Pods/Headers/Kiwi/KWHaveValueMatcher.h +++ b/Pods/Headers/Kiwi/KWHaveValueMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWHaveValueMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWHaveValueMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWInequalityMatcher.h b/Pods/Headers/Kiwi/KWInequalityMatcher.h index 8d85cb4c..563f2990 120000 --- a/Pods/Headers/Kiwi/KWInequalityMatcher.h +++ b/Pods/Headers/Kiwi/KWInequalityMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWInequalityMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWInequalityMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWIntercept.h b/Pods/Headers/Kiwi/KWIntercept.h index b9fae629..5aab538c 120000 --- a/Pods/Headers/Kiwi/KWIntercept.h +++ b/Pods/Headers/Kiwi/KWIntercept.h @@ -1 +1 @@ -../../Kiwi/Classes/KWIntercept.h \ No newline at end of file +../../Kiwi/NonARC/KWIntercept.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWInvocationCapturer.h b/Pods/Headers/Kiwi/KWInvocationCapturer.h index 383f8e86..786c20db 120000 --- a/Pods/Headers/Kiwi/KWInvocationCapturer.h +++ b/Pods/Headers/Kiwi/KWInvocationCapturer.h @@ -1 +1 @@ -../../Kiwi/Classes/KWInvocationCapturer.h \ No newline at end of file +../../Kiwi/Classes/Core/KWInvocationCapturer.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWItNode.h b/Pods/Headers/Kiwi/KWItNode.h index 37b3ed5c..115be894 120000 --- a/Pods/Headers/Kiwi/KWItNode.h +++ b/Pods/Headers/Kiwi/KWItNode.h @@ -1 +1 @@ -../../Kiwi/Classes/KWItNode.h \ No newline at end of file +../../Kiwi/Classes/Nodes/KWItNode.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWMatchVerifier.h b/Pods/Headers/Kiwi/KWMatchVerifier.h index 78de3b22..741e295d 120000 --- a/Pods/Headers/Kiwi/KWMatchVerifier.h +++ b/Pods/Headers/Kiwi/KWMatchVerifier.h @@ -1 +1 @@ -../../Kiwi/Classes/KWMatchVerifier.h \ No newline at end of file +../../Kiwi/Classes/Verifiers/KWMatchVerifier.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWMatcher.h b/Pods/Headers/Kiwi/KWMatcher.h index a3869b44..6d1fda1a 120000 --- a/Pods/Headers/Kiwi/KWMatcher.h +++ b/Pods/Headers/Kiwi/KWMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWMatcher.h \ No newline at end of file +../../Kiwi/Classes/Core/KWMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWMatcherFactory.h b/Pods/Headers/Kiwi/KWMatcherFactory.h index d6ef256a..053ae051 120000 --- a/Pods/Headers/Kiwi/KWMatcherFactory.h +++ b/Pods/Headers/Kiwi/KWMatcherFactory.h @@ -1 +1 @@ -../../Kiwi/Classes/KWMatcherFactory.h \ No newline at end of file +../../Kiwi/Classes/Core/KWMatcherFactory.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWMatchers.h b/Pods/Headers/Kiwi/KWMatchers.h index 121cbff1..37dc93d8 120000 --- a/Pods/Headers/Kiwi/KWMatchers.h +++ b/Pods/Headers/Kiwi/KWMatchers.h @@ -1 +1 @@ -../../Kiwi/Classes/KWMatchers.h \ No newline at end of file +../../Kiwi/Classes/Core/KWMatchers.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWMatching.h b/Pods/Headers/Kiwi/KWMatching.h index b46afda0..5094f6ce 120000 --- a/Pods/Headers/Kiwi/KWMatching.h +++ b/Pods/Headers/Kiwi/KWMatching.h @@ -1 +1 @@ -../../Kiwi/Classes/KWMatching.h \ No newline at end of file +../../Kiwi/Classes/Core/KWMatching.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWMessagePattern.h b/Pods/Headers/Kiwi/KWMessagePattern.h index 00983f2d..7db1ee20 120000 --- a/Pods/Headers/Kiwi/KWMessagePattern.h +++ b/Pods/Headers/Kiwi/KWMessagePattern.h @@ -1 +1 @@ -../../Kiwi/Classes/KWMessagePattern.h \ No newline at end of file +../../Kiwi/NonARC/KWMessagePattern.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWMessageSpying.h b/Pods/Headers/Kiwi/KWMessageSpying.h index 31fb60e6..f2b7dc0d 120000 --- a/Pods/Headers/Kiwi/KWMessageSpying.h +++ b/Pods/Headers/Kiwi/KWMessageSpying.h @@ -1 +1 @@ -../../Kiwi/Classes/KWMessageSpying.h \ No newline at end of file +../../Kiwi/Classes/Core/KWMessageSpying.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWMessageTracker.h b/Pods/Headers/Kiwi/KWMessageTracker.h index af301a13..0529de79 120000 --- a/Pods/Headers/Kiwi/KWMessageTracker.h +++ b/Pods/Headers/Kiwi/KWMessageTracker.h @@ -1 +1 @@ -../../Kiwi/Classes/KWMessageTracker.h \ No newline at end of file +../../Kiwi/Classes/Core/KWMessageTracker.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWMock.h b/Pods/Headers/Kiwi/KWMock.h index 5d2b6887..d07edac9 120000 --- a/Pods/Headers/Kiwi/KWMock.h +++ b/Pods/Headers/Kiwi/KWMock.h @@ -1 +1 @@ -../../Kiwi/Classes/KWMock.h \ No newline at end of file +../../Kiwi/Classes/Mocking/KWMock.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWNilMatcher.h b/Pods/Headers/Kiwi/KWNilMatcher.h new file mode 120000 index 00000000..fbe052f1 --- /dev/null +++ b/Pods/Headers/Kiwi/KWNilMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWNilMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWNull.h b/Pods/Headers/Kiwi/KWNull.h index 3a8677c9..af2cb10c 120000 --- a/Pods/Headers/Kiwi/KWNull.h +++ b/Pods/Headers/Kiwi/KWNull.h @@ -1 +1 @@ -../../Kiwi/Classes/KWNull.h \ No newline at end of file +../../Kiwi/Classes/Core/KWNull.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWObjCUtilities.h b/Pods/Headers/Kiwi/KWObjCUtilities.h index f9c04a29..f6cc0b91 120000 --- a/Pods/Headers/Kiwi/KWObjCUtilities.h +++ b/Pods/Headers/Kiwi/KWObjCUtilities.h @@ -1 +1 @@ -../../Kiwi/Classes/KWObjCUtilities.h \ No newline at end of file +../../Kiwi/Classes/Core/KWObjCUtilities.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWPendingNode.h b/Pods/Headers/Kiwi/KWPendingNode.h index 6a2a4ab1..7ff39e4f 120000 --- a/Pods/Headers/Kiwi/KWPendingNode.h +++ b/Pods/Headers/Kiwi/KWPendingNode.h @@ -1 +1 @@ -../../Kiwi/Classes/KWPendingNode.h \ No newline at end of file +../../Kiwi/Classes/Nodes/KWPendingNode.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWProbe.h b/Pods/Headers/Kiwi/KWProbe.h index 8eae9947..d6cdabbb 120000 --- a/Pods/Headers/Kiwi/KWProbe.h +++ b/Pods/Headers/Kiwi/KWProbe.h @@ -1 +1 @@ -../../Kiwi/Classes/KWProbe.h \ No newline at end of file +../../Kiwi/Classes/Core/KWProbe.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWProbePoller.h b/Pods/Headers/Kiwi/KWProbePoller.h index 852d35e4..a1aee4ca 120000 --- a/Pods/Headers/Kiwi/KWProbePoller.h +++ b/Pods/Headers/Kiwi/KWProbePoller.h @@ -1 +1 @@ -../../Kiwi/Classes/KWProbePoller.h \ No newline at end of file +../../Kiwi/Classes/Core/KWProbePoller.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWRaiseMatcher.h b/Pods/Headers/Kiwi/KWRaiseMatcher.h index bdcd8ae6..4f4b4d92 120000 --- a/Pods/Headers/Kiwi/KWRaiseMatcher.h +++ b/Pods/Headers/Kiwi/KWRaiseMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWRaiseMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWRaiseMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWReceiveMatcher.h b/Pods/Headers/Kiwi/KWReceiveMatcher.h index 5dfb172d..c7c16f0f 120000 --- a/Pods/Headers/Kiwi/KWReceiveMatcher.h +++ b/Pods/Headers/Kiwi/KWReceiveMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWReceiveMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWReceiveMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWRegisterMatchersNode.h b/Pods/Headers/Kiwi/KWRegisterMatchersNode.h index 6ee09af7..0d88f5df 120000 --- a/Pods/Headers/Kiwi/KWRegisterMatchersNode.h +++ b/Pods/Headers/Kiwi/KWRegisterMatchersNode.h @@ -1 +1 @@ -../../Kiwi/Classes/KWRegisterMatchersNode.h \ No newline at end of file +../../Kiwi/Classes/Nodes/KWRegisterMatchersNode.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWRegularExpressionPatternMatcher.h b/Pods/Headers/Kiwi/KWRegularExpressionPatternMatcher.h index c9b56b5d..322e8d11 120000 --- a/Pods/Headers/Kiwi/KWRegularExpressionPatternMatcher.h +++ b/Pods/Headers/Kiwi/KWRegularExpressionPatternMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWRegularExpressionPatternMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWRegularExpressionPatternMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWReporting.h b/Pods/Headers/Kiwi/KWReporting.h index 76724b40..d220f49c 120000 --- a/Pods/Headers/Kiwi/KWReporting.h +++ b/Pods/Headers/Kiwi/KWReporting.h @@ -1 +1 @@ -../../Kiwi/Classes/KWReporting.h \ No newline at end of file +../../Kiwi/Classes/Core/KWReporting.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWRespondToSelectorMatcher.h b/Pods/Headers/Kiwi/KWRespondToSelectorMatcher.h index 638ffc9b..53da1b3d 120000 --- a/Pods/Headers/Kiwi/KWRespondToSelectorMatcher.h +++ b/Pods/Headers/Kiwi/KWRespondToSelectorMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWRespondToSelectorMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWRespondToSelectorMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWSpec.h b/Pods/Headers/Kiwi/KWSpec.h index 01ff65d9..b35172e7 120000 --- a/Pods/Headers/Kiwi/KWSpec.h +++ b/Pods/Headers/Kiwi/KWSpec.h @@ -1 +1 @@ -../../Kiwi/Classes/KWSpec.h \ No newline at end of file +../../Kiwi/Classes/Core/KWSpec.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWStringContainsMatcher.h b/Pods/Headers/Kiwi/KWStringContainsMatcher.h index 31a35fa8..43c9cd42 120000 --- a/Pods/Headers/Kiwi/KWStringContainsMatcher.h +++ b/Pods/Headers/Kiwi/KWStringContainsMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWStringContainsMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWStringContainsMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWStringPrefixMatcher.h b/Pods/Headers/Kiwi/KWStringPrefixMatcher.h index 6332ce41..351d3e72 120000 --- a/Pods/Headers/Kiwi/KWStringPrefixMatcher.h +++ b/Pods/Headers/Kiwi/KWStringPrefixMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWStringPrefixMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWStringPrefixMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWStringUtilities.h b/Pods/Headers/Kiwi/KWStringUtilities.h index c6b107f1..e6225dc8 120000 --- a/Pods/Headers/Kiwi/KWStringUtilities.h +++ b/Pods/Headers/Kiwi/KWStringUtilities.h @@ -1 +1 @@ -../../Kiwi/Classes/KWStringUtilities.h \ No newline at end of file +../../Kiwi/Classes/Core/KWStringUtilities.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWStub.h b/Pods/Headers/Kiwi/KWStub.h index 38e5d0dc..6c8519fd 120000 --- a/Pods/Headers/Kiwi/KWStub.h +++ b/Pods/Headers/Kiwi/KWStub.h @@ -1 +1 @@ -../../Kiwi/Classes/KWStub.h \ No newline at end of file +../../Kiwi/NonARC/KWStub.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWSymbolicator.h b/Pods/Headers/Kiwi/KWSymbolicator.h index 0f442f62..2bc8b59f 120000 --- a/Pods/Headers/Kiwi/KWSymbolicator.h +++ b/Pods/Headers/Kiwi/KWSymbolicator.h @@ -1 +1 @@ -../../Kiwi/Classes/KWSymbolicator.h \ No newline at end of file +../../Kiwi/NonARC/KWSymbolicator.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWTestCase.h b/Pods/Headers/Kiwi/KWTestCase.h deleted file mode 120000 index 04096f4a..00000000 --- a/Pods/Headers/Kiwi/KWTestCase.h +++ /dev/null @@ -1 +0,0 @@ -../../Kiwi/Classes/KWTestCase.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWUserDefinedMatcher.h b/Pods/Headers/Kiwi/KWUserDefinedMatcher.h index e6a74c19..241b176a 120000 --- a/Pods/Headers/Kiwi/KWUserDefinedMatcher.h +++ b/Pods/Headers/Kiwi/KWUserDefinedMatcher.h @@ -1 +1 @@ -../../Kiwi/Classes/KWUserDefinedMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWUserDefinedMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWValue.h b/Pods/Headers/Kiwi/KWValue.h index 1546da51..f5aabfb5 120000 --- a/Pods/Headers/Kiwi/KWValue.h +++ b/Pods/Headers/Kiwi/KWValue.h @@ -1 +1 @@ -../../Kiwi/Classes/KWValue.h \ No newline at end of file +../../Kiwi/Classes/Core/KWValue.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWVerifying.h b/Pods/Headers/Kiwi/KWVerifying.h index 7e7e7f32..10c41b73 120000 --- a/Pods/Headers/Kiwi/KWVerifying.h +++ b/Pods/Headers/Kiwi/KWVerifying.h @@ -1 +1 @@ -../../Kiwi/Classes/KWVerifying.h \ No newline at end of file +../../Kiwi/Classes/Verifiers/KWVerifying.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWWorkarounds.h b/Pods/Headers/Kiwi/KWWorkarounds.h index 4535bdc0..5394bed7 120000 --- a/Pods/Headers/Kiwi/KWWorkarounds.h +++ b/Pods/Headers/Kiwi/KWWorkarounds.h @@ -1 +1 @@ -../../Kiwi/Classes/KWWorkarounds.h \ No newline at end of file +../../Kiwi/Classes/Core/KWWorkarounds.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/Kiwi.h b/Pods/Headers/Kiwi/Kiwi.h index 2a5426ef..90584f1e 120000 --- a/Pods/Headers/Kiwi/Kiwi.h +++ b/Pods/Headers/Kiwi/Kiwi.h @@ -1 +1 @@ -../../Kiwi/Classes/Kiwi.h \ No newline at end of file +../../Kiwi/Classes/Core/Kiwi.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KiwiBlockMacros.h b/Pods/Headers/Kiwi/KiwiBlockMacros.h index 04077045..c0407583 120000 --- a/Pods/Headers/Kiwi/KiwiBlockMacros.h +++ b/Pods/Headers/Kiwi/KiwiBlockMacros.h @@ -1 +1 @@ -../../Kiwi/Classes/KiwiBlockMacros.h \ No newline at end of file +../../Kiwi/Classes/Core/KiwiBlockMacros.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KiwiConfiguration.h b/Pods/Headers/Kiwi/KiwiConfiguration.h index e5928521..cdd209e3 120000 --- a/Pods/Headers/Kiwi/KiwiConfiguration.h +++ b/Pods/Headers/Kiwi/KiwiConfiguration.h @@ -1 +1 @@ -../../Kiwi/Classes/KiwiConfiguration.h \ No newline at end of file +../../Kiwi/Classes/Core/KiwiConfiguration.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KiwiMacros.h b/Pods/Headers/Kiwi/KiwiMacros.h index eb8ad23d..936b3590 120000 --- a/Pods/Headers/Kiwi/KiwiMacros.h +++ b/Pods/Headers/Kiwi/KiwiMacros.h @@ -1 +1 @@ -../../Kiwi/Classes/KiwiMacros.h \ No newline at end of file +../../Kiwi/Classes/Core/KiwiMacros.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/NSInvocation+KiwiAdditions.h b/Pods/Headers/Kiwi/NSInvocation+KiwiAdditions.h index 0a19c57e..216b70b1 120000 --- a/Pods/Headers/Kiwi/NSInvocation+KiwiAdditions.h +++ b/Pods/Headers/Kiwi/NSInvocation+KiwiAdditions.h @@ -1 +1 @@ -../../Kiwi/Classes/NSInvocation+KiwiAdditions.h \ No newline at end of file +../../Kiwi/Classes/Core/NSInvocation+KiwiAdditions.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/NSInvocation+OCMAdditions.h b/Pods/Headers/Kiwi/NSInvocation+OCMAdditions.h index 1816d66e..5d505e9a 120000 --- a/Pods/Headers/Kiwi/NSInvocation+OCMAdditions.h +++ b/Pods/Headers/Kiwi/NSInvocation+OCMAdditions.h @@ -1 +1 @@ -../../Kiwi/Classes/NSInvocation+OCMAdditions.h \ No newline at end of file +../../Kiwi/Classes/Core/NSInvocation+OCMAdditions.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/NSMethodSignature+KiwiAdditions.h b/Pods/Headers/Kiwi/NSMethodSignature+KiwiAdditions.h index 83429ba5..816f65b7 120000 --- a/Pods/Headers/Kiwi/NSMethodSignature+KiwiAdditions.h +++ b/Pods/Headers/Kiwi/NSMethodSignature+KiwiAdditions.h @@ -1 +1 @@ -../../Kiwi/Classes/NSMethodSignature+KiwiAdditions.h \ No newline at end of file +../../Kiwi/Classes/Core/NSMethodSignature+KiwiAdditions.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/NSNumber+KiwiAdditions.h b/Pods/Headers/Kiwi/NSNumber+KiwiAdditions.h index 48e23543..aa1be1c1 120000 --- a/Pods/Headers/Kiwi/NSNumber+KiwiAdditions.h +++ b/Pods/Headers/Kiwi/NSNumber+KiwiAdditions.h @@ -1 +1 @@ -../../Kiwi/Classes/NSNumber+KiwiAdditions.h \ No newline at end of file +../../Kiwi/Classes/Core/NSNumber+KiwiAdditions.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/NSObject+KiwiMockAdditions.h b/Pods/Headers/Kiwi/NSObject+KiwiMockAdditions.h index 32160c6d..eba045f0 120000 --- a/Pods/Headers/Kiwi/NSObject+KiwiMockAdditions.h +++ b/Pods/Headers/Kiwi/NSObject+KiwiMockAdditions.h @@ -1 +1 @@ -../../Kiwi/Classes/NSObject+KiwiMockAdditions.h \ No newline at end of file +../../Kiwi/Classes/Mocking/NSObject+KiwiMockAdditions.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/NSObject+KiwiSpyAdditions.h b/Pods/Headers/Kiwi/NSObject+KiwiSpyAdditions.h index 4da2d797..9746eafd 120000 --- a/Pods/Headers/Kiwi/NSObject+KiwiSpyAdditions.h +++ b/Pods/Headers/Kiwi/NSObject+KiwiSpyAdditions.h @@ -1 +1 @@ -../../Kiwi/Classes/NSObject+KiwiSpyAdditions.h \ No newline at end of file +../../Kiwi/Classes/Core/NSObject+KiwiSpyAdditions.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/NSObject+KiwiStubAdditions.h b/Pods/Headers/Kiwi/NSObject+KiwiStubAdditions.h index a64ea2c1..09dc8adc 120000 --- a/Pods/Headers/Kiwi/NSObject+KiwiStubAdditions.h +++ b/Pods/Headers/Kiwi/NSObject+KiwiStubAdditions.h @@ -1 +1 @@ -../../Kiwi/Classes/NSObject+KiwiStubAdditions.h \ No newline at end of file +../../Kiwi/Classes/Stubbing/NSObject+KiwiStubAdditions.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/NSObject+KiwiVerifierAdditions.h b/Pods/Headers/Kiwi/NSObject+KiwiVerifierAdditions.h index 68f6f438..9def95d7 120000 --- a/Pods/Headers/Kiwi/NSObject+KiwiVerifierAdditions.h +++ b/Pods/Headers/Kiwi/NSObject+KiwiVerifierAdditions.h @@ -1 +1 @@ -../../Kiwi/Classes/NSObject+KiwiVerifierAdditions.h \ No newline at end of file +../../Kiwi/Classes/Core/NSObject+KiwiVerifierAdditions.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/NSProxy+KiwiVerifierAdditions.h b/Pods/Headers/Kiwi/NSProxy+KiwiVerifierAdditions.h index 1e078742..f58050df 120000 --- a/Pods/Headers/Kiwi/NSProxy+KiwiVerifierAdditions.h +++ b/Pods/Headers/Kiwi/NSProxy+KiwiVerifierAdditions.h @@ -1 +1 @@ -../../Kiwi/Classes/NSProxy+KiwiVerifierAdditions.h \ No newline at end of file +../../Kiwi/Classes/Core/NSProxy+KiwiVerifierAdditions.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/NSValue+KiwiAdditions.h b/Pods/Headers/Kiwi/NSValue+KiwiAdditions.h index 5b157129..e411b0c8 120000 --- a/Pods/Headers/Kiwi/NSValue+KiwiAdditions.h +++ b/Pods/Headers/Kiwi/NSValue+KiwiAdditions.h @@ -1 +1 @@ -../../Kiwi/Classes/NSValue+KiwiAdditions.h \ No newline at end of file +../../Kiwi/Classes/Core/NSValue+KiwiAdditions.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/SenTestSuite+KiwiAdditions.h b/Pods/Headers/Kiwi/SenTestSuite+KiwiAdditions.h index 67fee890..e1e643a7 120000 --- a/Pods/Headers/Kiwi/SenTestSuite+KiwiAdditions.h +++ b/Pods/Headers/Kiwi/SenTestSuite+KiwiAdditions.h @@ -1 +1 @@ -../../Kiwi/Classes/SenTestSuite+KiwiAdditions.h \ No newline at end of file +../../Kiwi/SenTestingKit/SenTestSuite+KiwiAdditions.h \ No newline at end of file diff --git a/Pods/Headers/OHHTTPStubs/OHHTTPStubs.h b/Pods/Headers/OHHTTPStubs/OHHTTPStubs.h index ddea87e2..c1b5c94e 120000 --- a/Pods/Headers/OHHTTPStubs/OHHTTPStubs.h +++ b/Pods/Headers/OHHTTPStubs/OHHTTPStubs.h @@ -1 +1 @@ -../../OHHTTPStubs/OHHTTPStubs/OHHTTPStubs.h \ No newline at end of file +../../OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubs.h \ No newline at end of file diff --git a/Pods/Headers/OHHTTPStubs/OHHTTPStubsResponse+HTTPMessage.h b/Pods/Headers/OHHTTPStubs/OHHTTPStubsResponse+HTTPMessage.h new file mode 120000 index 00000000..c7dea8a5 --- /dev/null +++ b/Pods/Headers/OHHTTPStubs/OHHTTPStubsResponse+HTTPMessage.h @@ -0,0 +1 @@ +../../OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse+HTTPMessage.h \ No newline at end of file diff --git a/Pods/Headers/OHHTTPStubs/OHHTTPStubsResponse+JSON.h b/Pods/Headers/OHHTTPStubs/OHHTTPStubsResponse+JSON.h new file mode 120000 index 00000000..078fe3df --- /dev/null +++ b/Pods/Headers/OHHTTPStubs/OHHTTPStubsResponse+JSON.h @@ -0,0 +1 @@ +../../OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse+JSON.h \ No newline at end of file diff --git a/Pods/Headers/OHHTTPStubs/OHHTTPStubsResponse.h b/Pods/Headers/OHHTTPStubs/OHHTTPStubsResponse.h index fe2a9462..bfce4e4b 120000 --- a/Pods/Headers/OHHTTPStubs/OHHTTPStubsResponse.h +++ b/Pods/Headers/OHHTTPStubs/OHHTTPStubsResponse.h @@ -1 +1 @@ -../../OHHTTPStubs/OHHTTPStubs/OHHTTPStubsResponse.h \ No newline at end of file +../../OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse.h \ No newline at end of file diff --git a/Pods/Kiwi/Classes/KWAny.h b/Pods/Kiwi/Classes/Core/KWAny.h similarity index 100% rename from Pods/Kiwi/Classes/KWAny.h rename to Pods/Kiwi/Classes/Core/KWAny.h diff --git a/Pods/Kiwi/Classes/Core/KWAny.m b/Pods/Kiwi/Classes/Core/KWAny.m new file mode 100644 index 00000000..880ae297 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWAny.m @@ -0,0 +1,23 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWAny.h" + +@implementation KWAny + +#pragma mark - Initializing + ++ (id)any { + static KWAny *sharedAny = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sharedAny = [self new]; + + }); + return sharedAny; +} + +@end diff --git a/Pods/Kiwi/Classes/KWBlock.h b/Pods/Kiwi/Classes/Core/KWBlock.h similarity index 58% rename from Pods/Kiwi/Classes/KWBlock.h rename to Pods/Kiwi/Classes/Core/KWBlock.h index 7a66cf98..3a147641 100644 --- a/Pods/Kiwi/Classes/KWBlock.h +++ b/Pods/Kiwi/Classes/Core/KWBlock.h @@ -6,14 +6,12 @@ #import "KiwiConfiguration.h" -typedef void (^KWVoidBlock)(void); - @interface KWBlock : NSObject #pragma mark - Initializing -- (id)initWithBlock:(KWVoidBlock)aBlock; +- (id)initWithBlock:(void (^)(void))block; -+ (id)blockWithBlock:(KWVoidBlock)aBlock; ++ (id)blockWithBlock:(void (^)(void))block; #pragma mark - Calling Blocks @@ -23,5 +21,5 @@ typedef void (^KWVoidBlock)(void); #pragma mark - Creating Blocks -KWBlock *theBlock(KWVoidBlock aBlock); -KWBlock *lambda(KWVoidBlock aBlock); +KWBlock *theBlock(void (^block)(void)); +KWBlock *lambda(void (^block)(void)); diff --git a/Pods/Kiwi/Classes/Core/KWBlock.m b/Pods/Kiwi/Classes/Core/KWBlock.m new file mode 100644 index 00000000..39b6b8d3 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWBlock.m @@ -0,0 +1,50 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWBlock.h" + +@interface KWBlock() + +#pragma mark - Properties + +@property (nonatomic, readonly, copy) void (^block)(void); + +@end + +@implementation KWBlock + +#pragma mark - Initializing + +- (id)initWithBlock:(void (^)(void))block { + self = [super init]; + if (self) { + _block = [block copy]; + } + + return self; +} + ++ (id)blockWithBlock:(void (^)(void))aBlock { + return [[self alloc] initWithBlock:aBlock]; +} + +#pragma mark - Calling Blocks + +- (void)call { + self.block(); +} + +@end + +#pragma mark - Creating Blocks + +KWBlock *theBlock(void (^block)(void)) { + return lambda(block); +} + +KWBlock *lambda(void (^block)(void)) { + return [KWBlock blockWithBlock:block]; +} diff --git a/Pods/Kiwi/Classes/KWCallSite.h b/Pods/Kiwi/Classes/Core/KWCallSite.h similarity index 100% rename from Pods/Kiwi/Classes/KWCallSite.h rename to Pods/Kiwi/Classes/Core/KWCallSite.h diff --git a/Pods/Kiwi/Classes/KWCallSite.m b/Pods/Kiwi/Classes/Core/KWCallSite.m similarity index 70% rename from Pods/Kiwi/Classes/KWCallSite.m rename to Pods/Kiwi/Classes/Core/KWCallSite.m index d97ee58b..0ab6115f 100644 --- a/Pods/Kiwi/Classes/KWCallSite.m +++ b/Pods/Kiwi/Classes/Core/KWCallSite.m @@ -11,28 +11,19 @@ @implementation KWCallSite #pragma mark - Initializing - (id)initWithFilename:(NSString *)aFilename lineNumber:(NSUInteger)aLineNumber { - if ((self = [super init])) { - filename = [aFilename copy]; - lineNumber = aLineNumber; + self = [super init]; + if (self) { + _filename = [aFilename copy]; + _lineNumber = aLineNumber; } return self; } + (id)callSiteWithFilename:(NSString *)aFilename lineNumber:(NSUInteger)aLineNumber { - return [[[self alloc] initWithFilename:aFilename lineNumber:aLineNumber] autorelease]; + return [[self alloc] initWithFilename:aFilename lineNumber:aLineNumber]; } -- (void)dealloc { - [filename release]; - [super dealloc]; -} - -#pragma mark - Accessing Call Site Properties - -@synthesize filename; -@synthesize lineNumber; - #pragma mark - Identifying and Comparing - (NSUInteger)hash { diff --git a/Pods/Kiwi/Classes/KWCaptureSpy.h b/Pods/Kiwi/Classes/Core/KWCaptureSpy.h similarity index 56% rename from Pods/Kiwi/Classes/KWCaptureSpy.h rename to Pods/Kiwi/Classes/Core/KWCaptureSpy.h index f739dc65..de5b6571 100644 --- a/Pods/Kiwi/Classes/KWCaptureSpy.h +++ b/Pods/Kiwi/Classes/Core/KWCaptureSpy.h @@ -1,11 +1,9 @@ -#import -#import "KWMock.h" #import "KWMessageSpying.h" @interface KWCaptureSpy : NSObject -- (id)initWithArgumentIndex:(NSUInteger)index; +@property (nonatomic, strong, readonly) id argument; -@property(nonatomic, readonly, retain) id argument; +- (id)initWithArgumentIndex:(NSUInteger)index; @end diff --git a/Pods/Kiwi/Classes/KWCaptureSpy.m b/Pods/Kiwi/Classes/Core/KWCaptureSpy.m similarity index 55% rename from Pods/Kiwi/Classes/KWCaptureSpy.m rename to Pods/Kiwi/Classes/Core/KWCaptureSpy.m index 9e4dd62b..a90af61f 100644 --- a/Pods/Kiwi/Classes/KWCaptureSpy.m +++ b/Pods/Kiwi/Classes/Core/KWCaptureSpy.m @@ -1,56 +1,64 @@ #import "KWCaptureSpy.h" + #import "KWObjCUtilities.h" +#import "KWNull.h" +#import "KWValue.h" #import "NSInvocation+KiwiAdditions.h" #import "NSMethodSignature+KiwiAdditions.h" -#import "KWValue.h" -@interface KWCaptureSpy() { - id _argument; -} -@property (nonatomic) BOOL argumentCaptured; -@property (nonatomic) NSUInteger argumentIndex; +@interface KWCaptureSpy() + +@property (nonatomic, strong) id argument; + @end -@implementation KWCaptureSpy -@dynamic argument; +@implementation KWCaptureSpy { + NSUInteger _argumentIndex; +} - (id)initWithArgumentIndex:(NSUInteger)index { - if ((self = [super init])) { + self = [super init]; + if (self) { _argumentIndex = index; - _argumentCaptured = NO; } return self; } - (id)argument { - if (!_argumentCaptured) { + if (!_argument) { @throw [NSException exceptionWithName:NSInternalInconsistencyException reason:@"Argument requested has yet to be captured." userInfo:nil]; } - return [[_argument retain] autorelease]; + + if(_argument == [KWNull null]) { + return nil; + } + else { + return _argument; + } } - (void)object:(id)anObject didReceiveInvocation:(NSInvocation *)anInvocation { - if (!_argumentCaptured) { + if (!_argument) { NSMethodSignature *signature = [anInvocation methodSignature]; const char *objCType = [signature messageArgumentTypeAtIndex:_argumentIndex]; - if (KWObjCTypeIsObject(objCType)) { - id argument = nil; - [anInvocation getMessageArgument:&argument atIndex:_argumentIndex]; + if (KWObjCTypeIsObject(objCType) || KWObjCTypeIsClass(objCType)) { + void* argumentBuffer = NULL; + [anInvocation getMessageArgument:&argumentBuffer atIndex:_argumentIndex]; + id argument = (__bridge id)argumentBuffer; if (KWObjCTypeIsBlock(objCType)) { _argument = [argument copy]; } else { - _argument = [argument retain]; + if(argument == nil) { + _argument = [KWNull null]; + } else { + _argument = argument; + } } } else { NSData *data = [anInvocation messageArgumentDataAtIndex:_argumentIndex]; - _argument = [[KWValue valueWithBytes:[data bytes] objCType:objCType] retain]; + _argument = [KWValue valueWithBytes:[data bytes] objCType:objCType]; } - _argumentCaptured = YES; } } -- (void)dealloc { - [_argument release]; - [super dealloc]; -} @end diff --git a/Pods/Kiwi/Classes/KWCountType.h b/Pods/Kiwi/Classes/Core/KWCountType.h similarity index 100% rename from Pods/Kiwi/Classes/KWCountType.h rename to Pods/Kiwi/Classes/Core/KWCountType.h diff --git a/Pods/Kiwi/Classes/KWDeviceInfo.h b/Pods/Kiwi/Classes/Core/KWDeviceInfo.h similarity index 100% rename from Pods/Kiwi/Classes/KWDeviceInfo.h rename to Pods/Kiwi/Classes/Core/KWDeviceInfo.h diff --git a/Pods/Kiwi/Classes/KWDeviceInfo.m b/Pods/Kiwi/Classes/Core/KWDeviceInfo.m similarity index 100% rename from Pods/Kiwi/Classes/KWDeviceInfo.m rename to Pods/Kiwi/Classes/Core/KWDeviceInfo.m diff --git a/Pods/Kiwi/Classes/KWExample.h b/Pods/Kiwi/Classes/Core/KWExample.h similarity index 67% rename from Pods/Kiwi/Classes/KWExample.h rename to Pods/Kiwi/Classes/Core/KWExample.h index 161d33e6..7d3e14f2 100644 --- a/Pods/Kiwi/Classes/KWExample.h +++ b/Pods/Kiwi/Classes/Core/KWExample.h @@ -11,7 +11,7 @@ #import "KWExampleNode.h" #import "KWExampleNodeVisitor.h" #import "KWReporting.h" -#import "KWExampleGroupDelegate.h" +#import "KWExampleDelegate.h" @class KWCallSite; @class KWExampleSuite; @@ -21,9 +21,9 @@ @interface KWExample : NSObject -@property (nonatomic, retain, readonly) NSMutableArray *lastInContexts; -@property (nonatomic, assign) KWExampleSuite *suite; -@property (nonatomic, assign) id unassignedVerifier; +@property (nonatomic, strong, readonly) NSMutableArray *lastInContexts; +@property (nonatomic, weak) KWExampleSuite *suite; +@property (nonatomic, strong) id unresolvedVerifier; - (id)initWithExampleNode:(id)node; @@ -59,26 +59,26 @@ #pragma mark - Building Example Groups -void describe(NSString *aDescription, KWVoidBlock aBlock); -void context(NSString *aDescription, KWVoidBlock aBlock); +void describe(NSString *aDescription, void (^block)(void)); +void context(NSString *aDescription, void (^block)(void)); void registerMatchers(NSString *aNamespacePrefix); -void beforeAll(KWVoidBlock aBlock); -void afterAll(KWVoidBlock aBlock); -void beforeEach(KWVoidBlock aBlock); -void afterEach(KWVoidBlock aBlock); -void it(NSString *aDescription, KWVoidBlock aBlock); -void specify(KWVoidBlock aBlock); -void pending_(NSString *aDescription, KWVoidBlock ignoredBlock); - -void describeWithCallSite(KWCallSite *aCallSite, NSString *aDescription, KWVoidBlock aBlock); -void contextWithCallSite(KWCallSite *aCallSite, NSString *aDescription, KWVoidBlock aBlock); +void beforeAll(void (^block)(void)); +void afterAll(void (^block)(void)); +void beforeEach(void (^block)(void)); +void afterEach(void (^block)(void)); +void it(NSString *aDescription, void (^block)(void)); +void specify(void (^block)(void)); +void pending_(NSString *aDescription, void (^block)(void)); + +void describeWithCallSite(KWCallSite *aCallSite, NSString *aDescription, void (^block)(void)); +void contextWithCallSite(KWCallSite *aCallSite, NSString *aDescription, void (^block)(void)); void registerMatchersWithCallSite(KWCallSite *aCallSite, NSString *aNamespacePrefix); -void beforeAllWithCallSite(KWCallSite *aCallSite, KWVoidBlock aBlock); -void afterAllWithCallSite(KWCallSite *aCallSite, KWVoidBlock aBlock); -void beforeEachWithCallSite(KWCallSite *aCallSite, KWVoidBlock aBlock); -void afterEachWithCallSite(KWCallSite *aCallSite, KWVoidBlock aBlock); -void itWithCallSite(KWCallSite *aCallSite, NSString *aDescription, KWVoidBlock aBlock); -void pendingWithCallSite(KWCallSite *aCallSite, NSString *aDescription, KWVoidBlock ignoredBlock); +void beforeAllWithCallSite(KWCallSite *aCallSite, void (^block)(void)); +void afterAllWithCallSite(KWCallSite *aCallSite, void (^block)(void)); +void beforeEachWithCallSite(KWCallSite *aCallSite, void (^block)(void)); +void afterEachWithCallSite(KWCallSite *aCallSite, void (^block)(void)); +void itWithCallSite(KWCallSite *aCallSite, NSString *aDescription, void (^block)(void)); +void pendingWithCallSite(KWCallSite *aCallSite, NSString *aDescription, void (^block)(void)); #define PRAGMA(x) _Pragma (#x) #define PENDING(x) PRAGMA(message ( "Pending: " #x )) diff --git a/Pods/Kiwi/Classes/Core/KWExample.m b/Pods/Kiwi/Classes/Core/KWExample.m new file mode 100644 index 00000000..41dd1a05 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWExample.m @@ -0,0 +1,376 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWExample.h" +#import "KWExampleSuiteBuilder.h" +#import "KWContextNode.h" +#import "KWMatcherFactory.h" +#import "KWExistVerifier.h" +#import "KWMatchVerifier.h" +#import "KWAsyncVerifier.h" +#import "KWFailure.h" +#import "KWContextNode.h" +#import "KWBeforeEachNode.h" +#import "KWBeforeAllNode.h" +#import "KWItNode.h" +#import "KWAfterEachNode.h" +#import "KWAfterAllNode.h" +#import "KWPendingNode.h" +#import "KWRegisterMatchersNode.h" +#import "KWWorkarounds.h" +#import "KWIntercept.h" +#import "KWExampleNode.h" +#import "KWExampleSuite.h" +#import "KWCallSite.h" +#import "KWSymbolicator.h" + +@interface KWExample () + +@property (nonatomic, readonly) NSMutableArray *verifiers; +@property (nonatomic, readonly) KWMatcherFactory *matcherFactory; +@property (nonatomic, weak) id delegate; +@property (nonatomic, assign) BOOL didNotFinish; +@property (nonatomic, strong) id exampleNode; +@property (nonatomic, assign) BOOL passed; + +- (void)reportResultForExampleNodeWithLabel:(NSString *)label; + +@end + +@implementation KWExample + +- (id)initWithExampleNode:(id)node { + self = [super init]; + if (self) { + _exampleNode = node; + _matcherFactory = [[KWMatcherFactory alloc] init]; + _verifiers = [[NSMutableArray alloc] init]; + _lastInContexts = [[NSMutableArray alloc] init]; + _passed = YES; + } + return self; +} + + +- (BOOL)isLastInContext:(KWContextNode *)context { + for (KWContextNode *contextWhereItLast in self.lastInContexts) { + if (context == contextWhereItLast) { + return YES; + } + } + return NO; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"", self.exampleNode.description]; +} + +#pragma mark - Adding Verifiers + +- (id)addVerifier:(id)aVerifier { + if (![self.verifiers containsObject:aVerifier]) + [self.verifiers addObject:aVerifier]; + + return aVerifier; +} + +- (id)addExistVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite { + id verifier = [KWExistVerifier existVerifierWithExpectationType:anExpectationType callSite:aCallSite reporter:self]; + [self addVerifier:verifier]; + return verifier; +} + +- (id)addMatchVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite { + if (self.unresolvedVerifier) { + @throw [NSException exceptionWithName:NSInternalInconsistencyException + reason:@"Trying to add another verifier without specifying a matcher for the previous one." + userInfo:nil]; + } + id verifier = [KWMatchVerifier matchVerifierWithExpectationType:anExpectationType callSite:aCallSite matcherFactory:self.matcherFactory reporter:self]; + [self addVerifier:verifier]; + self.unresolvedVerifier = verifier; + return verifier; +} + +- (id)addAsyncVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite timeout:(NSInteger)timeout shouldWait:(BOOL)shouldWait { + id verifier = [KWAsyncVerifier asyncVerifierWithExpectationType:anExpectationType callSite:aCallSite matcherFactory:self.matcherFactory reporter:self probeTimeout:timeout shouldWait: shouldWait]; + [self addVerifier:verifier]; + return verifier; +} + +#pragma mark - Running examples + +- (void)runWithDelegate:(id)delegate; { + self.delegate = delegate; + [self.matcherFactory registerMatcherClassesWithNamespacePrefix:@"KW"]; + [[KWExampleSuiteBuilder sharedExampleSuiteBuilder] setCurrentExample:self]; + [self.exampleNode acceptExampleNodeVisitor:self]; +} + +#pragma mark - Reporting failure + +- (NSString *)descriptionForExampleContext { + NSMutableArray *parts = [NSMutableArray array]; + + for (KWContextNode *context in [[self.exampleNode contextStack] reverseObjectEnumerator]) { + if ([context description] != nil) { + [parts addObject:[[context description] stringByAppendingString:@","]]; + } + } + + return [parts componentsJoinedByString:@" "]; +} + +- (KWFailure *)outputReadyFailureWithFailure:(KWFailure *)aFailure { + NSString *annotatedFailureMessage = [NSString stringWithFormat:@"'%@ %@' [FAILED], %@", + [self descriptionForExampleContext], [self.exampleNode description], + aFailure.message]; + +#if TARGET_IPHONE_SIMULATOR + // \uff1a is the unicode for a fill width colon, as opposed to a regular + // colon character (':'). This escape is performed so that Xcode doesn't + // truncate the error output in the build results window, which is running + // build time specs. + annotatedFailureMessage = [annotatedFailureMessage stringByReplacingOccurrencesOfString:@":" withString:@"\uff1a"]; +#endif // #if TARGET_IPHONE_SIMULATOR + + return [KWFailure failureWithCallSite:aFailure.callSite message:annotatedFailureMessage]; +} + +- (void)reportFailure:(KWFailure *)failure { + self.passed = NO; + [self.delegate example:self didFailWithFailure:[self outputReadyFailureWithFailure:failure]]; +} + +- (void)reportResultForExampleNodeWithLabel:(NSString *)label { + NSLog(@"+ '%@ %@' [%@]", [self descriptionForExampleContext], [self.exampleNode description], label); +} + +#pragma mark - Full description with context + +/** Pending cases will be marked yellow by XCode as not finished, because their description differs for -[SenTestCaseRun start] and -[SenTestCaseRun stop] methods + */ + +- (NSString *)pendingNotFinished { + BOOL reportPending = self.didNotFinish; + self.didNotFinish = YES; + return reportPending ? @"(PENDING)" : @""; +} + +- (NSString *)descriptionWithContext { + NSString *descriptionWithContext = [NSString stringWithFormat:@"%@ %@", + [self descriptionForExampleContext], + [self.exampleNode description] ? [self.exampleNode description] : @""]; + BOOL isPending = [self.exampleNode isKindOfClass:[KWPendingNode class]]; + return isPending ? [descriptionWithContext stringByAppendingString:[self pendingNotFinished]] : descriptionWithContext; +} + +#pragma mark - Visiting Nodes + +- (void)visitRegisterMatchersNode:(KWRegisterMatchersNode *)aNode { + [self.matcherFactory registerMatcherClassesWithNamespacePrefix:aNode.namespacePrefix]; +} + +- (void)visitBeforeAllNode:(KWBeforeAllNode *)aNode { + if (aNode.block == nil) + return; + + aNode.block(); +} + +- (void)visitAfterAllNode:(KWAfterAllNode *)aNode { + if (aNode.block == nil) + return; + + aNode.block(); +} + +- (void)visitBeforeEachNode:(KWBeforeEachNode *)aNode { + if (aNode.block == nil) + return; + + aNode.block(); +} + +- (void)visitAfterEachNode:(KWAfterEachNode *)aNode { + if (aNode.block == nil) + return; + + aNode.block(); +} + +- (void)visitItNode:(KWItNode *)aNode { + if (aNode.block == nil || aNode != self.exampleNode) + return; + + aNode.example = self; + + [aNode.context performExample:self withBlock:^{ + + @try { + + aNode.block(); + +#if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG + NSException *invocationException = KWGetAndClearExceptionFromAcrossInvocationBoundary(); + [invocationException raise]; +#endif // #if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG + + // Finish verifying and clear + for (id verifier in self.verifiers) { + [verifier exampleWillEnd]; + } + + if (self.unresolvedVerifier) { + KWFailure *failure = [KWFailure failureWithCallSite:self.unresolvedVerifier.callSite format:@"expected subject not to be nil"]; + [self reportFailure:failure]; + } + + } @catch (NSException *exception) { + KWFailure *failure = [KWFailure failureWithCallSite:aNode.callSite format:@"%@ \"%@\" raised", + [exception name], + [exception reason]]; + [self reportFailure:failure]; + } + + if (self.passed) { + [self reportResultForExampleNodeWithLabel:@"PASSED"]; + } + + // Always clear stubs and spies at the end of it blocks + KWClearStubsAndSpies(); + }]; +} + +- (void)visitPendingNode:(KWPendingNode *)aNode { + if (aNode != self.exampleNode) + return; + + [self reportResultForExampleNodeWithLabel:@"PENDING"]; +} + +- (NSString *)generateDescriptionForAnonymousItNode { + // anonymous specify blocks should only have one verifier, but use the first in any case + return [(self.verifiers)[0] descriptionForAnonymousItNode]; +} + +@end + +#pragma mark - Looking up CallSites + +KWCallSite *callSiteWithAddress(long address); +KWCallSite *callSiteAtAddressIfNecessary(long address); + +KWCallSite *callSiteAtAddressIfNecessary(long address){ + BOOL shouldLookup = [[KWExampleSuiteBuilder sharedExampleSuiteBuilder] isFocused] && ![[KWExampleSuiteBuilder sharedExampleSuiteBuilder] foundFocus]; + return shouldLookup ? callSiteWithAddress(address) : nil; +} + +KWCallSite *callSiteWithAddress(long address){ + NSArray *args = @[@"-d", + @"-p", @(getpid()).stringValue, [NSString stringWithFormat:@"%lx", address]]; + NSString *callSite = [NSString stringWithShellCommand:@"/usr/bin/atos" arguments:args]; + + NSString *pattern = @".+\\((.+):([0-9]+)\\)"; + NSError *e; + NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&e]; + NSArray *res = [regex matchesInString:callSite options:0 range:NSMakeRange(0, callSite.length)]; + + NSString *fileName = nil; + NSInteger lineNumber = 0; + + for (NSTextCheckingResult *ntcr in res) { + fileName = [callSite substringWithRange:[ntcr rangeAtIndex:1]]; + NSString *lineNumberMatch = [callSite substringWithRange:[ntcr rangeAtIndex:2]]; + lineNumber = lineNumberMatch.integerValue; + } + return [KWCallSite callSiteWithFilename:fileName lineNumber:lineNumber]; +} + +#pragma mark - Building Example Groups + +void describe(NSString *aDescription, void (^block)(void)) { + KWCallSite *callSite = callSiteAtAddressIfNecessary(kwCallerAddress()); + describeWithCallSite(callSite, aDescription, block); +} + +void context(NSString *aDescription, void (^block)(void)) { + KWCallSite *callSite = callSiteAtAddressIfNecessary(kwCallerAddress()); + contextWithCallSite(callSite, aDescription, block); +} + +void registerMatchers(NSString *aNamespacePrefix) { + registerMatchersWithCallSite(nil, aNamespacePrefix); +} + +void beforeAll(void (^block)(void)) { + beforeAllWithCallSite(nil, block); +} + +void afterAll(void (^block)(void)) { + afterAllWithCallSite(nil, block); +} + +void beforeEach(void (^block)(void)) { + beforeEachWithCallSite(nil, block); +} + +void afterEach(void (^block)(void)) { + afterEachWithCallSite(nil, block); +} + +void it(NSString *aDescription, void (^block)(void)) { + KWCallSite *callSite = callSiteAtAddressIfNecessary(kwCallerAddress()); + itWithCallSite(callSite, aDescription, block); +} + +void specify(void (^block)(void)) +{ + itWithCallSite(nil, nil, block); +} + +void pending_(NSString *aDescription, void (^ignoredBlock)(void)) { + pendingWithCallSite(nil, aDescription, ignoredBlock); +} + +void describeWithCallSite(KWCallSite *aCallSite, NSString *aDescription, void (^block)(void)) { + + contextWithCallSite(aCallSite, aDescription, block); +} + +void contextWithCallSite(KWCallSite *aCallSite, NSString *aDescription, void (^block)(void)) { + [[KWExampleSuiteBuilder sharedExampleSuiteBuilder] pushContextNodeWithCallSite:aCallSite description:aDescription]; + block(); + [[KWExampleSuiteBuilder sharedExampleSuiteBuilder] popContextNode]; +} + +void registerMatchersWithCallSite(KWCallSite *aCallSite, NSString *aNamespacePrefix) { + [[KWExampleSuiteBuilder sharedExampleSuiteBuilder] setRegisterMatchersNodeWithCallSite:aCallSite namespacePrefix:aNamespacePrefix]; +} + +void beforeAllWithCallSite(KWCallSite *aCallSite, void (^block)(void)) { + [[KWExampleSuiteBuilder sharedExampleSuiteBuilder] setBeforeAllNodeWithCallSite:aCallSite block:block]; +} + +void afterAllWithCallSite(KWCallSite *aCallSite, void (^block)(void)) { + [[KWExampleSuiteBuilder sharedExampleSuiteBuilder] setAfterAllNodeWithCallSite:aCallSite block:block]; +} + +void beforeEachWithCallSite(KWCallSite *aCallSite, void (^block)(void)) { + [[KWExampleSuiteBuilder sharedExampleSuiteBuilder] setBeforeEachNodeWithCallSite:aCallSite block:block]; +} + +void afterEachWithCallSite(KWCallSite *aCallSite, void (^block)(void)) { + [[KWExampleSuiteBuilder sharedExampleSuiteBuilder] setAfterEachNodeWithCallSite:aCallSite block:block]; +} + +void itWithCallSite(KWCallSite *aCallSite, NSString *aDescription, void (^block)(void)) { + [[KWExampleSuiteBuilder sharedExampleSuiteBuilder] addItNodeWithCallSite:aCallSite description:aDescription block:block]; +} + +void pendingWithCallSite(KWCallSite *aCallSite, NSString *aDescription, void (^ignoredBlock)(void)) { + [[KWExampleSuiteBuilder sharedExampleSuiteBuilder] addPendingNodeWithCallSite:aCallSite description:aDescription]; +} diff --git a/Pods/Kiwi/Classes/KWExampleGroupDelegate.h b/Pods/Kiwi/Classes/Core/KWExampleDelegate.h similarity index 100% rename from Pods/Kiwi/Classes/KWExampleGroupDelegate.h rename to Pods/Kiwi/Classes/Core/KWExampleDelegate.h diff --git a/Pods/Kiwi/Classes/KWExampleNodeVisitor.h b/Pods/Kiwi/Classes/Core/KWExampleNodeVisitor.h similarity index 100% rename from Pods/Kiwi/Classes/KWExampleNodeVisitor.h rename to Pods/Kiwi/Classes/Core/KWExampleNodeVisitor.h diff --git a/Pods/Kiwi/Classes/KWExampleSuite.h b/Pods/Kiwi/Classes/Core/KWExampleSuite.h similarity index 100% rename from Pods/Kiwi/Classes/KWExampleSuite.h rename to Pods/Kiwi/Classes/Core/KWExampleSuite.h diff --git a/Pods/Kiwi/Classes/Core/KWExampleSuite.m b/Pods/Kiwi/Classes/Core/KWExampleSuite.m new file mode 100644 index 00000000..94e9dc63 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWExampleSuite.m @@ -0,0 +1,86 @@ +// +// KWExampleSuite.m +// Kiwi +// +// Created by Luke Redpath on 17/10/2011. +// Copyright (c) 2011 Allen Ding. All rights reserved. +// + +#import "KWExampleSuite.h" + +#import "KWAfterAllNode.h" +#import "KWBeforeAllNode.h" +#import "KWContextNode.h" +#import "KWExample.h" +#import "KWStringUtilities.h" +#import "NSMethodSignature+KiwiAdditions.h" +#import + +#define kKWINVOCATION_EXAMPLE_GROUP_KEY @"__KWExampleGroupKey" + +@interface KWExampleSuite() + +@property (nonatomic, strong) KWContextNode *rootNode; +@property (nonatomic, strong) NSMutableArray *examples; + +@end + +@implementation KWExampleSuite + +- (id)initWithRootNode:(KWContextNode *)contextNode { + self = [super init]; + if (self) { + _rootNode = contextNode; + _examples = [[NSMutableArray alloc] init]; + } + return self; +} + + +- (void)addExample:(KWExample *)example { + [self.examples addObject:example]; + example.suite = self; +} + +- (void)markLastExampleAsLastInContext:(KWContextNode *)context +{ + if ([self.examples count] > 0) { + KWExample *lastExample = (KWExample *)[self.examples lastObject]; + [lastExample.lastInContexts addObject:context]; + } +} + +- (NSArray *)invocationsForTestCase { + NSMutableArray *invocations = [NSMutableArray array]; + + // Add a single dummy invocation for each example group + + for (KWExample *exampleGroup in self.examples) { + NSMethodSignature *methodSignature = [NSMethodSignature signatureWithObjCTypes:[KWEncodingForDefaultMethod() UTF8String]]; + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:methodSignature]; + [invocations addObject:invocation]; + [invocation kw_setExample:exampleGroup]; + } + + return invocations; +} + +@end + +#pragma mark - + +// because SenTest will modify the invocation target, we'll have to store +// another reference to the example group so we can retrieve it later + +@implementation NSInvocation (KWExampleGroup) + +- (void)kw_setExample:(KWExample *)exampleGroup { + objc_setAssociatedObject(self, kKWINVOCATION_EXAMPLE_GROUP_KEY, exampleGroup, OBJC_ASSOCIATION_RETAIN); +} + +- (KWExample *)kw_example { + return objc_getAssociatedObject(self, kKWINVOCATION_EXAMPLE_GROUP_KEY); +} + +@end + diff --git a/Pods/Kiwi/Classes/KWExampleGroupBuilder.h b/Pods/Kiwi/Classes/Core/KWExampleSuiteBuilder.h similarity index 65% rename from Pods/Kiwi/Classes/KWExampleGroupBuilder.h rename to Pods/Kiwi/Classes/Core/KWExampleSuiteBuilder.h index f9f26af9..a2dc30a3 100644 --- a/Pods/Kiwi/Classes/KWExampleGroupBuilder.h +++ b/Pods/Kiwi/Classes/Core/KWExampleSuiteBuilder.h @@ -12,35 +12,33 @@ @class KWExampleSuite; @class KWContextNode; -@interface KWExampleGroupBuilder : NSObject +@interface KWExampleSuiteBuilder : NSObject #pragma mark - Initializing -+ (id)sharedExampleGroupBuilder; ++ (id)sharedExampleSuiteBuilder; #pragma mark - Building Example Groups -@property (nonatomic, readonly) BOOL isBuildingExampleGroup; -@property (nonatomic, retain, readonly) KWExampleSuite *exampleSuite; -@property (nonatomic, retain) KWExample *currentExample; -@property (nonatomic, retain) KWCallSite *focusedCallSite; +@property (nonatomic, readonly) BOOL isBuildingExampleSuite; +@property (nonatomic, strong, readonly) KWExampleSuite *currentExampleSuite; +@property (nonatomic, strong) KWExample *currentExample; +@property (nonatomic, strong) KWCallSite *focusedCallSite; //spec file name:line number of callsite - (void)focusWithURI:(NSString *)nodeUrl; -- (KWExampleSuite *)buildExampleGroups:(void (^)(void))buildingBlock; -- (KWExample *)currentExample; +- (KWExampleSuite *)buildExampleSuite:(void (^)(void))buildingBlock; - (void)pushContextNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription; - (void)popContextNode; - (void)setRegisterMatchersNodeWithCallSite:(KWCallSite *)aCallSite namespacePrefix:(NSString *)aNamespacePrefix; -- (void)setBeforeAllNodeWithCallSite:(KWCallSite *)aCallSite block:(KWVoidBlock)aBlock; -- (void)setAfterAllNodeWithCallSite:(KWCallSite *)aCallSite block:(KWVoidBlock)aBlock; -- (void)setBeforeEachNodeWithCallSite:(KWCallSite *)aCallSite block:(KWVoidBlock)aBlock; -- (void)setAfterEachNodeWithCallSite:(KWCallSite *)aCallSite block:(KWVoidBlock)aBlock; -- (void)addItNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription block:(KWVoidBlock)aBlock; +- (void)setBeforeAllNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block; +- (void)setAfterAllNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block; +- (void)setBeforeEachNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block; +- (void)setAfterEachNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block; +- (void)addItNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription block:(void (^)(void))block; - (void)addPendingNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription; - - (BOOL)isFocused; - (BOOL)foundFocus; diff --git a/Pods/Kiwi/Classes/KWExampleGroupBuilder.m b/Pods/Kiwi/Classes/Core/KWExampleSuiteBuilder.m similarity index 69% rename from Pods/Kiwi/Classes/KWExampleGroupBuilder.m rename to Pods/Kiwi/Classes/Core/KWExampleSuiteBuilder.m index 969ee91b..f1fc005a 100644 --- a/Pods/Kiwi/Classes/KWExampleGroupBuilder.m +++ b/Pods/Kiwi/Classes/Core/KWExampleSuiteBuilder.m @@ -4,96 +4,62 @@ // Copyright 2010 Allen Ding. All rights reserved. // -#import "KWExampleGroupBuilder.h" -#import "KWExample.h" +#import "KWExampleSuiteBuilder.h" + #import "KWAfterAllNode.h" #import "KWAfterEachNode.h" #import "KWBeforeAllNode.h" #import "KWBeforeEachNode.h" +#import "KWCallSite.h" #import "KWContextNode.h" +#import "KWExample.h" +#import "KWExampleSuite.h" #import "KWItNode.h" #import "KWPendingNode.h" #import "KWRegisterMatchersNode.h" -#import "KWExampleSuite.h" -#import "KWCallSite.h" #import "KWSymbolicator.h" -@interface KWExampleGroupBuilder() { - NSMutableSet *suites; -} +@interface KWExampleSuiteBuilder() #pragma mark - Building Example Groups -@property (nonatomic, retain, readwrite) KWExampleSuite *exampleSuite; +@property (nonatomic, strong) KWExampleSuite *currentExampleSuite; @property (nonatomic, readonly) NSMutableArray *contextNodeStack; +@property (nonatomic, strong) NSMutableSet *suites; + @property (nonatomic, assign) BOOL focusedContextNode; @property (nonatomic, assign) BOOL focusedItNode; @end - -@implementation KWExampleGroupBuilder - -@synthesize exampleSuite; -@synthesize currentExample; -@synthesize focusedCallSite; +@implementation KWExampleSuiteBuilder #pragma mark - Initializing -static KWExampleGroupBuilder *sharedExampleGroupBuilder = nil; - (id)init { - if ((self = [super init])) { - contextNodeStack = [[NSMutableArray alloc] init]; - suites = [[NSMutableSet alloc] init]; + self = [super init]; + if (self) { + _contextNodeStack = [[NSMutableArray alloc] init]; + _suites = [[NSMutableSet alloc] init]; [self focusWithURI:[[[NSProcessInfo processInfo] environment] objectForKey:@"KW_SPEC"]]; } return self; } -- (void)dealloc { - [suites release]; - [exampleSuite release]; - [contextNodeStack release]; - [focusedCallSite release]; - [super dealloc]; -} - -+ (id)sharedExampleGroupBuilder { - if (sharedExampleGroupBuilder == nil) { - sharedExampleGroupBuilder = [[super allocWithZone:nil] init]; - } - return sharedExampleGroupBuilder; -} ++ (id)sharedExampleSuiteBuilder { + static KWExampleSuiteBuilder *sharedExampleSuiteBuilder = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sharedExampleSuiteBuilder = [self new]; + }); -+ (id)allocWithZone:(NSZone *)zone { - return [[self sharedExampleGroupBuilder] retain]; + return sharedExampleSuiteBuilder; } -- (id)copyWithZone:(NSZone *)zone { - return self; -} - -- (id)retain { - return self; -} - -- (NSUInteger)retainCount { - return NSUIntegerMax; -} - -- (oneway void)release { -} - -- (id)autorelease { - return self; -} - -#pragma mark - Building Example Groups - #pragma mark - Focus - (void)focusWithURI:(NSString *)nodeUrl { @@ -104,13 +70,13 @@ - (void)focusWithURI:(NSString *)nodeUrl { } - (void)setFocusedCallSite:(KWCallSite *)aFocusedCallSite { - focusedCallSite = aFocusedCallSite; + _focusedCallSite = aFocusedCallSite; self.focusedItNode = NO; self.focusedContextNode = NO; } - (BOOL)isFocused { - return !!self.focusedCallSite; + return self.focusedCallSite != nil; } - (BOOL)foundFocus { @@ -119,25 +85,23 @@ - (BOOL)foundFocus { #pragma mark - Building Example Groups -@synthesize contextNodeStack; - -- (BOOL)isBuildingExampleGroup { +- (BOOL)isBuildingExampleSuite { return [self.contextNodeStack count] > 0; } -- (KWExampleSuite *)buildExampleGroups:(void (^)(void))buildingBlock +- (KWExampleSuite *)buildExampleSuite:(void (^)(void))buildingBlock { KWContextNode *rootNode = [KWContextNode contextNodeWithCallSite:nil parentContext:nil description:nil]; - self.exampleSuite = [[[KWExampleSuite alloc] initWithRootNode:rootNode] autorelease]; + self.currentExampleSuite = [[KWExampleSuite alloc] initWithRootNode:rootNode]; - [suites addObject:self.exampleSuite]; + [self.suites addObject:self.currentExampleSuite]; [self.contextNodeStack addObject:rootNode]; buildingBlock(); [self.contextNodeStack removeAllObjects]; - return self.exampleSuite; + return self.currentExampleSuite; } - (void)pushContextNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription { @@ -166,74 +130,73 @@ - (BOOL)shouldFocusContextNodeWithCallSite:(KWCallSite *)aCallSite parentNode:(K - (void)popContextNode { KWContextNode *contextNode = [self.contextNodeStack lastObject]; - [self.exampleSuite markLastExampleAsLastInContext:contextNode]; + [self.currentExampleSuite markLastExampleAsLastInContext:contextNode]; if ([self.contextNodeStack count] == 1) - [NSException raise:@"KWExampleGroupBuilderException" format:@"there is no open context to pop"]; + [NSException raise:@"KWExampleSuiteBuilderException" format:@"there is no open context to pop"]; [self.contextNodeStack removeLastObject]; } - (void)setRegisterMatchersNodeWithCallSite:(KWCallSite *)aCallSite namespacePrefix:(NSString *)aNamespacePrefix { if ([self.contextNodeStack count] == 0) - [NSException raise:@"KWExampleGroupBuilderException" format:@"an example group has not been started"]; + [NSException raise:@"KWExampleSuiteBuilderException" format:@"an example group has not been started"]; KWContextNode *contextNode = [self.contextNodeStack lastObject]; KWRegisterMatchersNode *registerMatchersNode = [KWRegisterMatchersNode registerMatchersNodeWithCallSite:aCallSite namespacePrefix:aNamespacePrefix]; [contextNode setRegisterMatchersNode:registerMatchersNode]; } -- (void)setBeforeAllNodeWithCallSite:(KWCallSite *)aCallSite block:(KWVoidBlock)aBlock { +- (void)setBeforeAllNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block { if ([self.contextNodeStack count] == 0) - [NSException raise:@"KWExampleGroupBuilderException" format:@"an example group has not been started"]; + [NSException raise:@"KWExampleSuiteBuilderException" format:@"an example group has not been started"]; KWContextNode *contextNode = [self.contextNodeStack lastObject]; - KWBeforeAllNode *beforeAllNode = [KWBeforeAllNode beforeAllNodeWithCallSite:aCallSite block:aBlock]; + KWBeforeAllNode *beforeAllNode = [KWBeforeAllNode beforeAllNodeWithCallSite:aCallSite block:block]; [contextNode setBeforeAllNode:beforeAllNode]; } -- (void)setAfterAllNodeWithCallSite:(KWCallSite *)aCallSite block:(KWVoidBlock)aBlock { +- (void)setAfterAllNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block { if ([self.contextNodeStack count] == 0) - [NSException raise:@"KWExampleGroupBuilderException" format:@"an example group has not been started"]; + [NSException raise:@"KWExampleSuiteBuilderException" format:@"an example group has not been started"]; KWContextNode *contextNode = [self.contextNodeStack lastObject]; - KWAfterAllNode *afterAllNode = [KWAfterAllNode afterAllNodeWithCallSite:aCallSite block:aBlock]; + KWAfterAllNode *afterAllNode = [KWAfterAllNode afterAllNodeWithCallSite:aCallSite block:block]; [contextNode setAfterAllNode:afterAllNode]; } -- (void)setBeforeEachNodeWithCallSite:(KWCallSite *)aCallSite block:(KWVoidBlock)aBlock { +- (void)setBeforeEachNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block { if ([self.contextNodeStack count] == 0) - [NSException raise:@"KWExampleGroupBuilderException" format:@"an example group has not been started"]; + [NSException raise:@"KWExampleSuiteBuilderException" format:@"an example group has not been started"]; KWContextNode *contextNode = [self.contextNodeStack lastObject]; - KWBeforeEachNode *beforeEachNode = [KWBeforeEachNode beforeEachNodeWithCallSite:aCallSite block:aBlock]; + KWBeforeEachNode *beforeEachNode = [KWBeforeEachNode beforeEachNodeWithCallSite:aCallSite block:block]; [contextNode setBeforeEachNode:beforeEachNode]; } -- (void)setAfterEachNodeWithCallSite:(KWCallSite *)aCallSite block:(KWVoidBlock)aBlock { +- (void)setAfterEachNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block { if ([self.contextNodeStack count] == 0) - [NSException raise:@"KWExampleGroupBuilderException" format:@"an example group has not been started"]; + [NSException raise:@"KWExampleSuiteBuilderException" format:@"an example group has not been started"]; KWContextNode *contextNode = [self.contextNodeStack lastObject]; - KWAfterEachNode *afterEachNode = [KWAfterEachNode afterEachNodeWithCallSite:aCallSite block:aBlock]; + KWAfterEachNode *afterEachNode = [KWAfterEachNode afterEachNodeWithCallSite:aCallSite block:block]; [contextNode setAfterEachNode:afterEachNode]; } -- (void)addItNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription block:(KWVoidBlock)aBlock { +- (void)addItNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription block:(void (^)(void))block { if ([self.contextNodeStack count] == 0) - [NSException raise:@"KWExampleGroupBuilderException" format:@"an example group has not been started"]; + [NSException raise:@"KWExampleSuiteBuilderException" format:@"an example group has not been started"]; KWContextNode *contextNode = [self.contextNodeStack lastObject]; if (self.isFocused && ![self shouldAddItNodeWithCallSite:aCallSite toContextNode:contextNode]) return; - KWItNode* itNode = [KWItNode itNodeWithCallSite:aCallSite description:aDescription context:contextNode block:aBlock]; + KWItNode* itNode = [KWItNode itNodeWithCallSite:aCallSite description:aDescription context:contextNode block:block]; [contextNode addItNode:itNode]; KWExample *example = [[KWExample alloc] initWithExampleNode:itNode]; - [self.exampleSuite addExample:example]; - [example release]; + [self.currentExampleSuite addExample:example]; } - (BOOL)shouldAddItNodeWithCallSite:(KWCallSite *)aCallSite toContextNode:(KWContextNode *)contextNode { @@ -250,14 +213,13 @@ - (BOOL)shouldAddItNodeWithCallSite:(KWCallSite *)aCallSite toContextNode:(KWCon - (void)addPendingNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription { if ([self.contextNodeStack count] == 0) - [NSException raise:@"KWExampleGroupBuilderException" format:@"an example group has not been started"]; + [NSException raise:@"KWExampleSuiteBuilderException" format:@"an example group has not been started"]; KWContextNode *contextNode = [self.contextNodeStack lastObject]; KWPendingNode *pendingNode = [KWPendingNode pendingNodeWithCallSite:aCallSite context:contextNode description:aDescription]; [contextNode addPendingNode:pendingNode]; KWExample *example = [[KWExample alloc] initWithExampleNode:pendingNode]; - [self.exampleSuite addExample:example]; - [example release]; + [self.currentExampleSuite addExample:example]; } @end diff --git a/Pods/Kiwi/Classes/KWExpectationType.h b/Pods/Kiwi/Classes/Core/KWExpectationType.h similarity index 100% rename from Pods/Kiwi/Classes/KWExpectationType.h rename to Pods/Kiwi/Classes/Core/KWExpectationType.h diff --git a/Pods/Kiwi/Classes/KWFailure.h b/Pods/Kiwi/Classes/Core/KWFailure.h similarity index 92% rename from Pods/Kiwi/Classes/KWFailure.h rename to Pods/Kiwi/Classes/Core/KWFailure.h index 9be5f8be..d516d68b 100644 --- a/Pods/Kiwi/Classes/KWFailure.h +++ b/Pods/Kiwi/Classes/Core/KWFailure.h @@ -21,7 +21,7 @@ #pragma mark - Properties @property (nonatomic, readonly) NSString *message; -@property (nonatomic, readonly) KWCallSite *callSite; +@property (nonatomic, weak, readonly) KWCallSite *callSite; #pragma mark - Getting Exception Representations diff --git a/Pods/Kiwi/Classes/KWFailure.m b/Pods/Kiwi/Classes/Core/KWFailure.m similarity index 59% rename from Pods/Kiwi/Classes/KWFailure.m rename to Pods/Kiwi/Classes/Core/KWFailure.m index 0b3efa2a..4bbea8f0 100644 --- a/Pods/Kiwi/Classes/KWFailure.m +++ b/Pods/Kiwi/Classes/Core/KWFailure.m @@ -13,9 +13,10 @@ @implementation KWFailure #pragma mark - Initializing - (id)initWithCallSite:(KWCallSite *)aCallSite message:(NSString *)aMessage { - if ((self = [super init])) { - callSite = [aCallSite retain]; - message = [aMessage copy]; + self = [super init]; + if (self) { + _callSite = aCallSite; + _message = [aMessage copy]; } return self; @@ -24,42 +25,33 @@ - (id)initWithCallSite:(KWCallSite *)aCallSite message:(NSString *)aMessage { - (id)initWithCallSite:(KWCallSite *)aCallSite format:(NSString *)format, ... { va_list argumentList; va_start(argumentList, format); - NSString *aMessage = [[[NSString alloc] initWithFormat:format arguments:argumentList] autorelease]; + NSString *aMessage = [[NSString alloc] initWithFormat:format arguments:argumentList]; return [self initWithCallSite:aCallSite message:aMessage]; } + (id)failureWithCallSite:(KWCallSite *)aCallSite message:(NSString *)aMessage { - return [[[self alloc] initWithCallSite:aCallSite message:aMessage] autorelease]; + return [[self alloc] initWithCallSite:aCallSite message:aMessage]; } + (id)failureWithCallSite:(KWCallSite *)aCallSite format:(NSString *)format, ... { va_list argumentList; va_start(argumentList, format); - NSString *message = [[[NSString alloc] initWithFormat:format arguments:argumentList] autorelease]; + NSString *message = [[NSString alloc] initWithFormat:format arguments:argumentList]; return [self failureWithCallSite:aCallSite message:message]; } -- (void)dealloc { - [callSite release]; - [message release]; - [super dealloc]; -} - -#pragma mark - Properties - -@synthesize message; -@synthesize callSite; - #pragma mark - Getting Exception Representations - (NSException *)exceptionValue { NSDictionary *userInfo = nil; if (self.callSite) { NSNumber *lineNumber = @(self.callSite.lineNumber); - userInfo = @{SenTestFilenameKey: self.callSite.filename, - SenTestLineNumberKey: lineNumber}; + userInfo = @{ + @"SenTestFilenameKey": self.callSite.filename, + @"SenTestLineNumberKey": lineNumber + }; } - return [NSException exceptionWithName:@"KWFailureException" reason:message userInfo:userInfo]; + return [NSException exceptionWithName:@"KWFailureException" reason:self.message userInfo:userInfo]; } @end diff --git a/Pods/Kiwi/Classes/KWFormatter.h b/Pods/Kiwi/Classes/Core/KWFormatter.h similarity index 82% rename from Pods/Kiwi/Classes/KWFormatter.h rename to Pods/Kiwi/Classes/Core/KWFormatter.h index 67ca87c9..34f86553 100644 --- a/Pods/Kiwi/Classes/KWFormatter.h +++ b/Pods/Kiwi/Classes/Core/KWFormatter.h @@ -11,5 +11,6 @@ #pragma mark - Getting Descriptions + (NSString *)formatObject:(id)anObject; ++ (NSString *)formatObjectIncludingClass:(id)anObject; @end diff --git a/Pods/Kiwi/Classes/KWFormatter.m b/Pods/Kiwi/Classes/Core/KWFormatter.m similarity index 74% rename from Pods/Kiwi/Classes/KWFormatter.m rename to Pods/Kiwi/Classes/Core/KWFormatter.m index bd801e0d..f12917e2 100644 --- a/Pods/Kiwi/Classes/KWFormatter.m +++ b/Pods/Kiwi/Classes/Core/KWFormatter.m @@ -24,13 +24,21 @@ + (NSString *)formatObject:(id)anObject { return [anObject description]; } ++ (NSString *)formatObjectIncludingClass:(id)anObject { + NSString *classString = [[anObject class] description]; + + if ([anObject isKindOfClass:[NSString class]]) + classString = @"NSString"; + + return [NSString stringWithFormat:@"(%@) %@", classString, [self formatObject:anObject]]; +} #pragma mark - Private + (NSString *)formattedCollection:(id)collection { - NSMutableString *description = [[[NSMutableString alloc] initWithString:@"("] autorelease]; + NSMutableString *description = [[NSMutableString alloc] initWithString:@"("]; NSUInteger index = 0; for (id object in collection) { diff --git a/Pods/Kiwi/Classes/KWFutureObject.h b/Pods/Kiwi/Classes/Core/KWFutureObject.h similarity index 100% rename from Pods/Kiwi/Classes/KWFutureObject.h rename to Pods/Kiwi/Classes/Core/KWFutureObject.h diff --git a/Pods/Kiwi/Classes/Core/KWFutureObject.m b/Pods/Kiwi/Classes/Core/KWFutureObject.m new file mode 100644 index 00000000..52c654b5 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWFutureObject.m @@ -0,0 +1,40 @@ +// +// KWFutureObject.m +// iOSFalconCore +// +// Created by Luke Redpath on 13/01/2011. +// Copyright 2011 LJR Software Limited. All rights reserved. +// + +#import "KWFutureObject.h" + +@interface KWFutureObject() + +@property (nonatomic, strong) KWFutureObjectBlock block; + +@end + +@implementation KWFutureObject + ++ (id)objectWithObjectPointer:(id *)pointer { + return [self futureObjectWithBlock:^{ return *pointer; }]; +} + ++ (id)futureObjectWithBlock:(KWFutureObjectBlock)block { + return [[self alloc] initWithBlock:block]; +} + +- (id)initWithBlock:(KWFutureObjectBlock)aBlock { + self = [super init]; + if (self) { + _block = [aBlock copy]; + } + return self; +} + +- (id)object; { + return self.block(); +} + + +@end diff --git a/Pods/Kiwi/Classes/KWInvocationCapturer.h b/Pods/Kiwi/Classes/Core/KWInvocationCapturer.h similarity index 88% rename from Pods/Kiwi/Classes/KWInvocationCapturer.h rename to Pods/Kiwi/Classes/Core/KWInvocationCapturer.h index a75c2078..c02ab0c6 100644 --- a/Pods/Kiwi/Classes/KWInvocationCapturer.h +++ b/Pods/Kiwi/Classes/Core/KWInvocationCapturer.h @@ -20,8 +20,8 @@ #pragma mark - Properties -@property (nonatomic, readonly) id delegate; -@property (nonatomic, readonly) NSDictionary *userInfo; +@property (nonatomic, weak, readonly) id delegate; +@property (nonatomic, strong, readonly) NSDictionary *userInfo; @end diff --git a/Pods/Kiwi/Classes/KWInvocationCapturer.m b/Pods/Kiwi/Classes/Core/KWInvocationCapturer.m similarity index 92% rename from Pods/Kiwi/Classes/KWInvocationCapturer.m rename to Pods/Kiwi/Classes/Core/KWInvocationCapturer.m index a9e3c867..e340972b 100644 --- a/Pods/Kiwi/Classes/KWInvocationCapturer.m +++ b/Pods/Kiwi/Classes/Core/KWInvocationCapturer.m @@ -18,7 +18,7 @@ - (id)initWithDelegate:(id)aDelegate { - (id)initWithDelegate:(id)aDelegate userInfo:(NSDictionary *)aUserInfo { delegate = aDelegate; - userInfo = [aUserInfo retain]; + userInfo = aUserInfo; return self; } @@ -27,13 +27,9 @@ + (id)invocationCapturerWithDelegate:(id)aDelegate { } + (id)invocationCapturerWithDelegate:(id)aDelegate userInfo:(NSDictionary *)aUserInfo { - return [[[self alloc] initWithDelegate:aDelegate userInfo:aUserInfo] autorelease]; + return [[self alloc] initWithDelegate:aDelegate userInfo:aUserInfo]; } -- (void)dealloc { - [userInfo release]; - [super dealloc]; -} #pragma mark - Properties diff --git a/Pods/Kiwi/Classes/KWMatcher.h b/Pods/Kiwi/Classes/Core/KWMatcher.h similarity index 83% rename from Pods/Kiwi/Classes/KWMatcher.h rename to Pods/Kiwi/Classes/Core/KWMatcher.h index 6f88dcef..407cd9d3 100644 --- a/Pods/Kiwi/Classes/KWMatcher.h +++ b/Pods/Kiwi/Classes/Core/KWMatcher.h @@ -7,10 +7,7 @@ #import "KiwiConfiguration.h" #import "KWMatching.h" -@interface KWMatcher : NSObject { -@protected - id subject; -} +@interface KWMatcher : NSObject #pragma mark - Initializing @@ -20,7 +17,7 @@ #pragma mark - Properties -@property (nonatomic, readonly) id subject; +@property (nonatomic, strong) id subject; #pragma mark - Getting Matcher Strings diff --git a/Pods/Kiwi/Classes/KWMatcher.m b/Pods/Kiwi/Classes/Core/KWMatcher.m similarity index 83% rename from Pods/Kiwi/Classes/KWMatcher.m rename to Pods/Kiwi/Classes/Core/KWMatcher.m index 8ea178a1..9b3c481f 100644 --- a/Pods/Kiwi/Classes/KWMatcher.m +++ b/Pods/Kiwi/Classes/Core/KWMatcher.m @@ -13,32 +13,27 @@ @implementation KWMatcher #pragma mark - Initializing - (id)initWithSubject:(id)anObject { - if ((self = [super init])) { - subject = [anObject retain]; + self = [super init]; + if (self) { + _subject = anObject; } return self; } + (id)matcherWithSubject:(id)anObject { - return [[[self alloc] initWithSubject:anObject] autorelease]; + return [[self alloc] initWithSubject:anObject]; } -- (void)dealloc { - [subject release]; - [super dealloc]; -} #pragma mark - Properties -@synthesize subject; - - (id)subject { - if ([subject isKindOfClass:[KWFutureObject class]]) { - return [(KWFutureObject *)subject object]; + if ([_subject isKindOfClass:[KWFutureObject class]]) { + return [(KWFutureObject *)_subject object]; } - return subject; + return _subject; } #pragma mark - Getting Matcher Strings diff --git a/Pods/Kiwi/Classes/KWMatcherFactory.h b/Pods/Kiwi/Classes/Core/KWMatcherFactory.h similarity index 100% rename from Pods/Kiwi/Classes/KWMatcherFactory.h rename to Pods/Kiwi/Classes/Core/KWMatcherFactory.h diff --git a/Pods/Kiwi/Classes/KWMatcherFactory.m b/Pods/Kiwi/Classes/Core/KWMatcherFactory.m similarity index 74% rename from Pods/Kiwi/Classes/KWMatcherFactory.m rename to Pods/Kiwi/Classes/Core/KWMatcherFactory.m index b981ed29..79885bf8 100644 --- a/Pods/Kiwi/Classes/KWMatcherFactory.m +++ b/Pods/Kiwi/Classes/Core/KWMatcherFactory.m @@ -11,10 +11,10 @@ #import "KWUserDefinedMatcher.h" #import "KWMatchers.h" -@interface KWMatcherFactory() { - NSMutableDictionary *matcherClassChains; -} -- (Class)matcherClassForSelector:(SEL)aSelector subject:(id)anObject; +@interface KWMatcherFactory() + +@property (nonatomic, strong) NSMutableDictionary *matcherClassChains; + @end @implementation KWMatcherFactory @@ -22,39 +22,29 @@ @implementation KWMatcherFactory #pragma mark - Initializing - (id)init { - if ((self = [super init])) { - matcherClassChains = [[NSMutableDictionary alloc] init]; - registeredMatcherClasses = [[NSMutableArray alloc] init]; + self = [super init]; + if (self) { + _matcherClassChains = [[NSMutableDictionary alloc] init]; + _registeredMatcherClasses = [[NSMutableArray alloc] init]; } return self; } -- (void)dealloc { - [registeredMatcherClasses release]; - [matcherClassChains release]; - [super dealloc]; -} - -#pragma mark - Properties - -@synthesize registeredMatcherClasses; - #pragma mark - Registering Matcher Classes - (void)registerMatcherClass:(Class)aClass { if ([self.registeredMatcherClasses containsObject:aClass]) return; - [(NSMutableArray *)registeredMatcherClasses addObject:aClass]; + [(NSMutableArray *)self.registeredMatcherClasses addObject:aClass]; for (NSString *verificationSelectorString in [aClass matcherStrings]) { - NSMutableArray *matcherClassChain = matcherClassChains[verificationSelectorString]; + NSMutableArray *matcherClassChain = self.matcherClassChains[verificationSelectorString]; if (matcherClassChain == nil) { matcherClassChain = [[NSMutableArray alloc] init]; - matcherClassChains[verificationSelectorString] = matcherClassChain; - [matcherClassChain release]; + self.matcherClassChains[verificationSelectorString] = matcherClassChain; } [matcherClassChain removeObject:aClass]; @@ -69,7 +59,7 @@ - (void)registerMatcherClassesWithNamespacePrefix:(NSString *)aNamespacePrefix { if (matcherClasses == nil) { matcherClasses = [[NSMutableArray alloc] init]; int numberOfClasses = objc_getClassList(NULL, 0); - Class *classes = malloc(sizeof(Class) * numberOfClasses); + Class *classes = (Class *)malloc(sizeof(Class) * numberOfClasses); numberOfClasses = objc_getClassList(classes, numberOfClasses); if (numberOfClasses == 0) { @@ -110,7 +100,7 @@ - (void)registerMatcherClassesWithNamespacePrefix:(NSString *)aNamespacePrefix { #pragma mark - Getting Method Signatures - (NSMethodSignature *)methodSignatureForMatcherSelector:(SEL)aSelector { - NSMutableArray *matcherClassChain = matcherClassChains[NSStringFromSelector(aSelector)]; + NSMutableArray *matcherClassChain = self.matcherClassChains[NSStringFromSelector(aSelector)]; if ([matcherClassChain count] == 0) return nil; @@ -131,13 +121,13 @@ - (KWMatcher *)matcherFromInvocation:(NSInvocation *)anInvocation subject:(id)su // see if we can match with a user-defined matcher instead return [[KWMatchers matchers] matcherForSelector:selector subject:subject]; } - return [[[matcherClass alloc] initWithSubject:subject] autorelease]; + return [[matcherClass alloc] initWithSubject:subject]; } #pragma mark - Private methods - (Class)matcherClassForSelector:(SEL)aSelector subject:(id)anObject { - NSArray *matcherClassChain = matcherClassChains[NSStringFromSelector(aSelector)]; + NSArray *matcherClassChain = self.matcherClassChains[NSStringFromSelector(aSelector)]; for (Class matcherClass in matcherClassChain) { if ([matcherClass canMatchSubject:anObject]) diff --git a/Pods/Kiwi/Classes/KWMatchers.h b/Pods/Kiwi/Classes/Core/KWMatchers.h similarity index 100% rename from Pods/Kiwi/Classes/KWMatchers.h rename to Pods/Kiwi/Classes/Core/KWMatchers.h diff --git a/Pods/Kiwi/Classes/KWMatchers.m b/Pods/Kiwi/Classes/Core/KWMatchers.m similarity index 90% rename from Pods/Kiwi/Classes/KWMatchers.m rename to Pods/Kiwi/Classes/Core/KWMatchers.m index ede45e45..ab278957 100644 --- a/Pods/Kiwi/Classes/KWMatchers.m +++ b/Pods/Kiwi/Classes/Core/KWMatchers.m @@ -21,17 +21,18 @@ @implementation KWMatchers static id sharedMatchers = nil; + (void)initialize { - if (self == [KWMatchers class]) { - sharedMatchers = [[self alloc] init]; - } + if (self == [KWMatchers class]) { + sharedMatchers = [[self alloc] init]; + } } + (id)matchers { - return sharedMatchers; + return sharedMatchers; } - (id)init { - if ((self = [super init])) { + self = [super init]; + if (self) { userDefinedMatchers = [[NSMutableDictionary alloc] init]; } return self; diff --git a/Pods/Kiwi/Classes/KWMatching.h b/Pods/Kiwi/Classes/Core/KWMatching.h similarity index 97% rename from Pods/Kiwi/Classes/KWMatching.h rename to Pods/Kiwi/Classes/Core/KWMatching.h index 5a7dfd11..bf7c81ac 100644 --- a/Pods/Kiwi/Classes/KWMatching.h +++ b/Pods/Kiwi/Classes/Core/KWMatching.h @@ -24,6 +24,7 @@ @optional +- (BOOL)isNilMatcher; - (BOOL)shouldBeEvaluatedAtEndOfExample; - (BOOL)willEvaluateMultipleTimes; - (void)setWillEvaluateMultipleTimes:(BOOL)shouldEvaluateMultipleTimes; diff --git a/Pods/Kiwi/Classes/KWMessageSpying.h b/Pods/Kiwi/Classes/Core/KWMessageSpying.h similarity index 100% rename from Pods/Kiwi/Classes/KWMessageSpying.h rename to Pods/Kiwi/Classes/Core/KWMessageSpying.h diff --git a/Pods/Kiwi/Classes/KWMessageTracker.h b/Pods/Kiwi/Classes/Core/KWMessageTracker.h similarity index 100% rename from Pods/Kiwi/Classes/KWMessageTracker.h rename to Pods/Kiwi/Classes/Core/KWMessageTracker.h diff --git a/Pods/Kiwi/Classes/KWMessageTracker.m b/Pods/Kiwi/Classes/Core/KWMessageTracker.m similarity index 82% rename from Pods/Kiwi/Classes/KWMessageTracker.m rename to Pods/Kiwi/Classes/Core/KWMessageTracker.m index 5939b39c..121e374b 100644 --- a/Pods/Kiwi/Classes/KWMessageTracker.m +++ b/Pods/Kiwi/Classes/Core/KWMessageTracker.m @@ -12,7 +12,7 @@ @interface KWMessageTracker() #pragma mark - Properties -@property (nonatomic, readwrite) NSUInteger receivedCount; +@property (nonatomic, assign) NSUInteger receivedCount; @end @@ -21,35 +21,22 @@ @implementation KWMessageTracker #pragma mark - Initializing - (id)initWithSubject:(id)anObject messagePattern:(KWMessagePattern *)aMessagePattern countType:(KWCountType)aCountType count:(NSUInteger)aCount { - if ((self = [super init])) { - subject = [anObject retain]; - messagePattern = [aMessagePattern retain]; - countType = aCountType; - count = aCount; - [anObject addMessageSpy:self forMessagePattern:messagePattern]; + self = [super init]; + if (self) { + _subject = anObject; + _messagePattern = aMessagePattern; + _countType = aCountType; + _count = aCount; + [anObject addMessageSpy:self forMessagePattern:aMessagePattern]; } return self; } + (id)messageTrackerWithSubject:(id)anObject messagePattern:(KWMessagePattern *)aMessagePattern countType:(KWCountType)aCountType count:(NSUInteger)aCount { - return [[[self alloc] initWithSubject:anObject messagePattern:aMessagePattern countType:aCountType count:aCount] autorelease]; + return [[self alloc] initWithSubject:anObject messagePattern:aMessagePattern countType:aCountType count:aCount]; } -- (void)dealloc { - [subject release]; - [messagePattern release]; - [super dealloc]; -} - -#pragma mark - Properties - -@synthesize subject; -@synthesize messagePattern; -@synthesize countType; -@synthesize count; -@synthesize receivedCount; - #pragma mark - Spying on Messages - (void)object:(id)anObject didReceiveInvocation:(NSInvocation *)anInvocation { diff --git a/Pods/Kiwi/Classes/KWNull.h b/Pods/Kiwi/Classes/Core/KWNull.h similarity index 100% rename from Pods/Kiwi/Classes/KWNull.h rename to Pods/Kiwi/Classes/Core/KWNull.h diff --git a/Pods/Kiwi/Classes/Core/KWNull.m b/Pods/Kiwi/Classes/Core/KWNull.m new file mode 100644 index 00000000..6d3bf730 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWNull.m @@ -0,0 +1,25 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWNull.h" + +@implementation KWNull + +#pragma mark - Initializing + + ++ (id)null { + static KWNull *sharedNull = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sharedNull = [self new]; + + }); + + return sharedNull; +} + +@end diff --git a/Pods/Kiwi/Classes/KWObjCUtilities.h b/Pods/Kiwi/Classes/Core/KWObjCUtilities.h similarity index 94% rename from Pods/Kiwi/Classes/KWObjCUtilities.h rename to Pods/Kiwi/Classes/Core/KWObjCUtilities.h index 9decded0..ea97878a 100644 --- a/Pods/Kiwi/Classes/KWObjCUtilities.h +++ b/Pods/Kiwi/Classes/Core/KWObjCUtilities.h @@ -6,8 +6,7 @@ #import "KiwiConfiguration.h" -#pragma mark - -#pragma mark Objective-C Type Utilities +#pragma mark - Objective-C Type Utilities BOOL KWObjCTypeEqualToObjCType(const char *firstObjCType, const char *secondObjCType); BOOL KWObjCTypeIsNumeric(const char *objCType); diff --git a/Pods/Kiwi/Classes/KWObjCUtilities.m b/Pods/Kiwi/Classes/Core/KWObjCUtilities.m similarity index 90% rename from Pods/Kiwi/Classes/KWObjCUtilities.m rename to Pods/Kiwi/Classes/Core/KWObjCUtilities.m index eeb163d3..eb4a63cc 100644 --- a/Pods/Kiwi/Classes/KWObjCUtilities.m +++ b/Pods/Kiwi/Classes/Core/KWObjCUtilities.m @@ -7,8 +7,7 @@ #import "KWObjCUtilities.h" #import "KWStringUtilities.h" -#pragma mark - -#pragma mark Objective-C Type Utilities +#pragma mark - Objective-C Type Utilities BOOL KWObjCTypeEqualToObjCType(const char *firstObjCType, const char *secondObjCType) { return strcmp(firstObjCType, secondObjCType) == 0; @@ -75,9 +74,9 @@ BOOL KWObjCTypeIsUnknown(const char *objCType) { } NSUInteger KWObjCTypeLength(const char *objCType) { - NSString *encoding = KWEncodingWithObjCTypes(objCType, @encode(id), @encode(SEL), nil); - NSMethodSignature *signature = [NSMethodSignature signatureWithObjCTypes:[encoding UTF8String]]; - return [signature methodReturnLength]; + NSUInteger typeSize = 0; + NSGetSizeAndAlignment(objCType, &typeSize, NULL); + return typeSize; } BOOL KWObjCTypeIsBlock(const char *objCType) { diff --git a/Pods/Kiwi/Classes/KWProbe.h b/Pods/Kiwi/Classes/Core/KWProbe.h similarity index 100% rename from Pods/Kiwi/Classes/KWProbe.h rename to Pods/Kiwi/Classes/Core/KWProbe.h diff --git a/Pods/Kiwi/Classes/KWProbePoller.h b/Pods/Kiwi/Classes/Core/KWProbePoller.h similarity index 100% rename from Pods/Kiwi/Classes/KWProbePoller.h rename to Pods/Kiwi/Classes/Core/KWProbePoller.h diff --git a/Pods/Kiwi/Classes/Core/KWProbePoller.m b/Pods/Kiwi/Classes/Core/KWProbePoller.m new file mode 100644 index 00000000..b411da95 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWProbePoller.m @@ -0,0 +1,72 @@ +// +// KWProbePoller.m +// iOSFalconCore +// +// Created by Luke Redpath on 13/01/2011. +// Copyright 2011 LJR Software Limited. All rights reserved. +// + +#import "KWProbePoller.h" + +@interface KWTimeout : NSObject + +@property (nonatomic, strong) NSDate *timeoutDate; + +@end + +@implementation KWTimeout + +- (id)initWithTimeout:(NSTimeInterval)timeout +{ + self = [super init]; + if (self) { + _timeoutDate = [[NSDate alloc] initWithTimeIntervalSinceNow:timeout]; + } + return self; +} + + +- (BOOL)hasTimedOut { + return [self.timeoutDate timeIntervalSinceDate:[NSDate date]] < 0; +} + +@end + + +@interface KWProbePoller() + +@property (nonatomic, assign) NSTimeInterval timeoutInterval; +@property (nonatomic, assign) NSTimeInterval delayInterval; +@property (nonatomic, assign) BOOL shouldWait; + +@end + +@implementation KWProbePoller + +- (id)initWithTimeout:(NSTimeInterval)theTimeout + delay:(NSTimeInterval)theDelay + shouldWait:(BOOL)wait { + self = [super init]; + if (self) { + _timeoutInterval = theTimeout; + _delayInterval = theDelay; + _shouldWait = wait; + } + return self; +} + +- (BOOL)check:(id)probe; { + KWTimeout *timeout = [[KWTimeout alloc] initWithTimeout:self.timeoutInterval]; + + while (self.shouldWait || ![probe isSatisfied]) { + if ([timeout hasTimedOut]) { + return [probe isSatisfied]; + } + [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:self.delayInterval]]; + [probe sample]; + } + + return YES; +} + +@end diff --git a/Pods/Kiwi/Classes/KWReporting.h b/Pods/Kiwi/Classes/Core/KWReporting.h similarity index 100% rename from Pods/Kiwi/Classes/KWReporting.h rename to Pods/Kiwi/Classes/Core/KWReporting.h diff --git a/Pods/Kiwi/Classes/KWSpec.h b/Pods/Kiwi/Classes/Core/KWSpec.h similarity index 88% rename from Pods/Kiwi/Classes/KWSpec.h rename to Pods/Kiwi/Classes/Core/KWSpec.h index 94802e0b..2ecf7260 100644 --- a/Pods/Kiwi/Classes/KWSpec.h +++ b/Pods/Kiwi/Classes/Core/KWSpec.h @@ -8,12 +8,16 @@ #import #import "KWExpectationType.h" #import "KWVerifying.h" -#import "KWExampleGroupDelegate.h" +#import "KWExampleDelegate.h" @class KWCallSite; +#ifdef XCT_EXPORT +@interface KWSpec : XCTestCase +#else @interface KWSpec : SenTestCase +#endif #pragma mark - Adding Verifiers diff --git a/Pods/Kiwi/Classes/Core/KWSpec.m b/Pods/Kiwi/Classes/Core/KWSpec.m new file mode 100644 index 00000000..e8cee22e --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWSpec.m @@ -0,0 +1,156 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWSpec.h" +#import +#import +#import "KWCallSite.h" +#import "KWExample.h" +#import "KWExampleSuiteBuilder.h" +#import "KWIntercept.h" +#import "KWObjCUtilities.h" +#import "KWStringUtilities.h" +#import "NSMethodSignature+KiwiAdditions.h" +#import "KWFailure.h" +#import "KWExampleSuite.h" + + +@interface KWSpec() + +@property (nonatomic, strong) KWExample *currentExample; + +@end + +@implementation KWSpec + +/* Methods are only implemented by sub-classes */ + ++ (NSString *)file { return nil; } + ++ (void)buildExampleGroups {} + +/* SenTestingKit uses -description, XCTest uses -name when displaying tests + in test navigator. Use camel case to make method friendly names from example description. + */ + +- (NSString *)name { + return [self description]; +} + +- (NSString *)description { + KWExample *currentExample = self.currentExample ? self.currentExample : [[self invocation] kw_example]; + NSString *name = [currentExample descriptionWithContext]; + + // CamelCase the string + NSArray *words = [name componentsSeparatedByString:@" "]; + name = @""; + for (NSString *word in words) { + if ([word length] < 1) + { + continue; + } + name = [name stringByAppendingString:[[word substringToIndex:1] uppercaseString]]; + name = [name stringByAppendingString:[word substringFromIndex:1]]; + } + + // Replace the commas with underscores to separate the levels of context + name = [name stringByReplacingOccurrencesOfString:@"," withString:@"_"]; + + // Strip out characters not legal in function names + NSError *error = nil; + NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[^a-zA-Z0-9_]*" options:0 error:&error]; + name = [regex stringByReplacingMatchesInString:name options:0 range:NSMakeRange(0, name.length) withTemplate:@""]; + + return [NSString stringWithFormat:@"-[%@ %@]", NSStringFromClass([self class]), name]; +} + +#pragma mark - Getting Invocations + +/* Called by the SenTestingKit test suite to get an array of invocations that + should be run on instances of test cases. */ + ++ (NSArray *)testInvocations { + SEL buildExampleGroups = @selector(buildExampleGroups); + + // Only return invocation if the receiver is a concrete spec that has overridden -buildExampleGroups. + if ([self methodForSelector:buildExampleGroups] == [KWSpec methodForSelector:buildExampleGroups]) + return nil; + + KWExampleSuite *exampleSuite = [[KWExampleSuiteBuilder sharedExampleSuiteBuilder] buildExampleSuite:^{ + [self buildExampleGroups]; + }]; + + return [exampleSuite invocationsForTestCase]; +} + +#pragma mark - Running Specs + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wundeclared-selector" + +- (void)invokeTest { + self.currentExample = [[self invocation] kw_example]; + + @autoreleasepool { + + @try { + [self.currentExample runWithDelegate:self]; + } @catch (NSException *exception) { + if ([self respondsToSelector:@selector(recordFailureWithDescription:inFile:atLine:expected:)]) { + objc_msgSend(self, + @selector(recordFailureWithDescription:inFile:atLine:expected:), + [exception description], @"", 0, NO); + } else { + objc_msgSend(self, @selector(failWithException:), exception); + } + } + + [[self invocation] kw_setExample:nil]; + + } +} + +#pragma clang diagnostic pop + +#pragma mark - KWExampleGroupDelegate methods + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wundeclared-selector" + +- (void)example:(KWExample *)example didFailWithFailure:(KWFailure *)failure { + if ([self respondsToSelector:@selector(recordFailureWithDescription:inFile:atLine:expected:)]) { + objc_msgSend(self, + @selector(recordFailureWithDescription:inFile:atLine:expected:), + [[failure exceptionValue] description], + failure.callSite.filename, + failure.callSite.lineNumber, + NO); + } else { + objc_msgSend(self, @selector(failWithException:), [failure exceptionValue]); + } +} + +#pragma clang diagnostic pop + +#pragma mark - Verification proxies + ++ (id)addVerifier:(id)aVerifier { + return [[[KWExampleSuiteBuilder sharedExampleSuiteBuilder] currentExample] addVerifier:aVerifier]; +} + ++ (id)addExistVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite { + return [[[KWExampleSuiteBuilder sharedExampleSuiteBuilder] currentExample] addExistVerifierWithExpectationType:anExpectationType callSite:aCallSite]; +} + ++ (id)addMatchVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite { + return [[[KWExampleSuiteBuilder sharedExampleSuiteBuilder] currentExample] addMatchVerifierWithExpectationType:anExpectationType callSite:aCallSite]; +} + ++ (id)addAsyncVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite timeout:(NSInteger)timeout shouldWait:(BOOL)shouldWait { + return [[[KWExampleSuiteBuilder sharedExampleSuiteBuilder] currentExample] addAsyncVerifierWithExpectationType:anExpectationType callSite:aCallSite timeout:timeout shouldWait: shouldWait]; +} + +@end diff --git a/Pods/Kiwi/Classes/KWStringUtilities.h b/Pods/Kiwi/Classes/Core/KWStringUtilities.h similarity index 92% rename from Pods/Kiwi/Classes/KWStringUtilities.h rename to Pods/Kiwi/Classes/Core/KWStringUtilities.h index efd966a7..90264d94 100644 --- a/Pods/Kiwi/Classes/KWStringUtilities.h +++ b/Pods/Kiwi/Classes/Core/KWStringUtilities.h @@ -16,3 +16,4 @@ BOOL KWStringHasWord(NSString *string, NSString *word); NSString *KWEncodingWithObjCTypes(const char *firstType, ...) NS_REQUIRES_NIL_TERMINATION; NSString *KWEncodingForVoidMethod(void); +NSString *KWEncodingForDefaultMethod(void); diff --git a/Pods/Kiwi/Classes/KWStringUtilities.m b/Pods/Kiwi/Classes/Core/KWStringUtilities.m similarity index 95% rename from Pods/Kiwi/Classes/KWStringUtilities.m rename to Pods/Kiwi/Classes/Core/KWStringUtilities.m index 87c3103d..4e17197e 100644 --- a/Pods/Kiwi/Classes/KWStringUtilities.m +++ b/Pods/Kiwi/Classes/Core/KWStringUtilities.m @@ -86,3 +86,7 @@ BOOL KWStringHasWord(NSString *string, NSString *word) { NSString *KWEncodingForVoidMethod(void) { return KWEncodingWithObjCTypes(@encode(void), @encode(id), @encode(SEL), nil); } + +NSString *KWEncodingForDefaultMethod(void) { + return KWEncodingWithObjCTypes(@encode(id), @encode(id), @encode(SEL), nil); +} diff --git a/Pods/Kiwi/Classes/KWValue.h b/Pods/Kiwi/Classes/Core/KWValue.h similarity index 100% rename from Pods/Kiwi/Classes/KWValue.h rename to Pods/Kiwi/Classes/Core/KWValue.h diff --git a/Pods/Kiwi/Classes/KWValue.m b/Pods/Kiwi/Classes/Core/KWValue.m similarity index 98% rename from Pods/Kiwi/Classes/KWValue.m rename to Pods/Kiwi/Classes/Core/KWValue.m index 24b4150e..c131ce2e 100644 --- a/Pods/Kiwi/Classes/KWValue.m +++ b/Pods/Kiwi/Classes/Core/KWValue.m @@ -21,7 +21,8 @@ @implementation KWValue #pragma mark - Initializing - (id)initWithBytes:(const void *)bytes objCType:(const char *)anObjCType { - if ((self = [super init])) { + self = [super init]; + if (self) { objCType = anObjCType; value = [[NSValue alloc] initWithBytes:bytes objCType:anObjCType]; } @@ -30,7 +31,7 @@ - (id)initWithBytes:(const void *)bytes objCType:(const char *)anObjCType { } + (id)valueWithBytes:(const void *)bytes objCType:(const char *)type { - return [[[self alloc] initWithBytes:bytes objCType:type] autorelease]; + return [[self alloc] initWithBytes:bytes objCType:type]; } + (id)valueWithBool:(BOOL)aValue { @@ -93,10 +94,6 @@ + (id)valueWithUnsignedShort:(unsigned short)aValue { return [self valueWithBytes:&aValue objCType:@encode(unsigned short)]; } -- (void)dealloc { - [value release]; - [super dealloc]; -} #pragma mark - Properties diff --git a/Pods/Kiwi/Classes/KWWorkarounds.h b/Pods/Kiwi/Classes/Core/KWWorkarounds.h similarity index 100% rename from Pods/Kiwi/Classes/KWWorkarounds.h rename to Pods/Kiwi/Classes/Core/KWWorkarounds.h diff --git a/Pods/Kiwi/Classes/KWWorkarounds.m b/Pods/Kiwi/Classes/Core/KWWorkarounds.m similarity index 80% rename from Pods/Kiwi/Classes/KWWorkarounds.m rename to Pods/Kiwi/Classes/Core/KWWorkarounds.m index e4e98e9e..2d866bba 100644 --- a/Pods/Kiwi/Classes/KWWorkarounds.m +++ b/Pods/Kiwi/Classes/Core/KWWorkarounds.m @@ -14,11 +14,11 @@ void KWSetExceptionFromAcrossInvocationBoundary(NSException *anException) { if (KWExceptionAcrossInvokeBoundary != nil) return; - KWExceptionAcrossInvokeBoundary = [anException retain]; + KWExceptionAcrossInvokeBoundary = anException; } NSException *KWGetAndClearExceptionFromAcrossInvocationBoundary(void) { - NSException *exception = [KWExceptionAcrossInvokeBoundary autorelease]; + NSException *exception = KWExceptionAcrossInvokeBoundary; KWExceptionAcrossInvokeBoundary = nil; return exception; } diff --git a/Pods/Kiwi/Classes/Kiwi.h b/Pods/Kiwi/Classes/Core/Kiwi.h similarity index 95% rename from Pods/Kiwi/Classes/Kiwi.h rename to Pods/Kiwi/Classes/Core/Kiwi.h index 173e32c0..f2607987 100644 --- a/Pods/Kiwi/Classes/Kiwi.h +++ b/Pods/Kiwi/Classes/Core/Kiwi.h @@ -23,8 +23,7 @@ extern "C" { #import "KWBeMemberOfClassMatcher.h" #import "KWBeSubclassOfClassMatcher.h" #import "KWBeTrueMatcher.h" -#import "KWBeNilMatcher.h" -#import "KWBeNonNilMatcher.h" +#import "KWNilMatcher.h" #import "KWBeWithinMatcher.h" #import "KWBeZeroMatcher.h" #import "KWBeforeAllNode.h" @@ -41,7 +40,7 @@ extern "C" { #import "KWDeviceInfo.h" #import "KWEqualMatcher.h" #import "KWExample.h" -#import "KWExampleGroupBuilder.h" +#import "KWExampleSuiteBuilder.h" #import "KWExampleNode.h" #import "KWExampleNodeVisitor.h" #import "KWExistVerifier.h" @@ -74,7 +73,6 @@ extern "C" { #import "KWSpec.h" #import "KWStringUtilities.h" #import "KWStub.h" -#import "KWTestCase.h" #import "KWUserDefinedMatcher.h" #import "KWValue.h" #import "KWVerifying.h" diff --git a/Pods/Kiwi/Classes/KiwiBlockMacros.h b/Pods/Kiwi/Classes/Core/KiwiBlockMacros.h similarity index 100% rename from Pods/Kiwi/Classes/KiwiBlockMacros.h rename to Pods/Kiwi/Classes/Core/KiwiBlockMacros.h diff --git a/Pods/Kiwi/Classes/KiwiConfiguration.h b/Pods/Kiwi/Classes/Core/KiwiConfiguration.h similarity index 71% rename from Pods/Kiwi/Classes/KiwiConfiguration.h rename to Pods/Kiwi/Classes/Core/KiwiConfiguration.h index 9dc59ba6..1b542832 100644 --- a/Pods/Kiwi/Classes/KiwiConfiguration.h +++ b/Pods/Kiwi/Classes/Core/KiwiConfiguration.h @@ -4,16 +4,6 @@ // Copyright 2010 Allen Ding. All rights reserved. // -#import - -#define KW_VERSION 0.9001 - -// Blocks being unavailable cripples the usability of Kiwi, but is supported -// because they are not available on anything less than a device running 3.2. -#if !defined(__BLOCKS__) -#error "Kiwi requires blocks support." -#endif - // As of iPhone SDK 4 GM, exceptions thrown across an NSInvocation -invoke or // forwardInvocation: boundary in the simulator will terminate the app instead // of being caught in @catch blocks from the caller side of the -invoke. Kiwi diff --git a/Pods/Kiwi/Classes/KiwiMacros.h b/Pods/Kiwi/Classes/Core/KiwiMacros.h similarity index 94% rename from Pods/Kiwi/Classes/KiwiMacros.h rename to Pods/Kiwi/Classes/Core/KiwiMacros.h index fb1c2dc7..368bfe7a 100644 --- a/Pods/Kiwi/Classes/KiwiMacros.h +++ b/Pods/Kiwi/Classes/Core/KiwiMacros.h @@ -51,8 +51,8 @@ #define shouldAfterWaitOf(timeout) attachToVerifier:KW_ADD_ASYNC_VERIFIER(KWExpectationTypeShould, timeout, YES) #define shouldNotAfterWaitOf(timeout) attachToVerifier:KW_ADD_ASYNC_VERIFIER(KWExpectationTypeShouldNot, timeout, YES) -#define beNil beNil:[KWBeNilMatcher verifyNilSubject] -#define beNonNil beNonNil:[KWBeNonNilMatcher verifyNilSubject] +#define beNil beNil:[KWNilMatcher verifyNilSubject] +#define beNonNil beNonNil:[KWNilMatcher verifyNonNilSubject] // used to wrap a pointer to an object that will change in the future (used with shouldEventually) #define theObject(objectPtr) [KWFutureObject objectWithObjectPointer:objectPtr] // DEPRECATED @@ -60,7 +60,7 @@ #define expectFutureValue(futureValue) [KWFutureObject futureObjectWithBlock:^{ return futureValue; }] // `fail` triggers a failure report when called -#define fail(message, ...) [[[KWExampleGroupBuilder sharedExampleGroupBuilder] currentExample] reportFailure:[KWFailure failureWithCallSite:KW_THIS_CALLSITE format:message, ##__VA_ARGS__]] +#define fail(message, ...) [[[KWExampleSuiteBuilder sharedExampleSuiteBuilder] currentExample] reportFailure:[KWFailure failureWithCallSite:KW_THIS_CALLSITE format:message, ##__VA_ARGS__]] // used for message patterns to allow matching any value #define any() [KWAny any] diff --git a/Pods/Kiwi/Classes/NSInvocation+KiwiAdditions.h b/Pods/Kiwi/Classes/Core/NSInvocation+KiwiAdditions.h similarity index 100% rename from Pods/Kiwi/Classes/NSInvocation+KiwiAdditions.h rename to Pods/Kiwi/Classes/Core/NSInvocation+KiwiAdditions.h diff --git a/Pods/Kiwi/Classes/NSInvocation+KiwiAdditions.m b/Pods/Kiwi/Classes/Core/NSInvocation+KiwiAdditions.m similarity index 100% rename from Pods/Kiwi/Classes/NSInvocation+KiwiAdditions.m rename to Pods/Kiwi/Classes/Core/NSInvocation+KiwiAdditions.m diff --git a/Pods/Kiwi/Classes/NSInvocation+OCMAdditions.h b/Pods/Kiwi/Classes/Core/NSInvocation+OCMAdditions.h similarity index 100% rename from Pods/Kiwi/Classes/NSInvocation+OCMAdditions.h rename to Pods/Kiwi/Classes/Core/NSInvocation+OCMAdditions.h diff --git a/Pods/Kiwi/Classes/NSInvocation+OCMAdditions.m b/Pods/Kiwi/Classes/Core/NSInvocation+OCMAdditions.m similarity index 96% rename from Pods/Kiwi/Classes/NSInvocation+OCMAdditions.m rename to Pods/Kiwi/Classes/Core/NSInvocation+OCMAdditions.m index 6348396b..a53804b7 100644 --- a/Pods/Kiwi/Classes/NSInvocation+OCMAdditions.m +++ b/Pods/Kiwi/Classes/Core/NSInvocation+OCMAdditions.m @@ -24,7 +24,7 @@ - (id)getArgumentAtIndexAsObject:(int)argIndex case '#': case '@': { - id value; + __unsafe_unretained id value; [self getArgument:&value atIndex:argIndex]; return value; } @@ -119,10 +119,16 @@ - (id)getArgumentAtIndexAsObject:(int)argIndex [self getArgument:&value atIndex:argIndex]; return [NSValue valueWithPointer:value]; } + case '*': + { + char *value = NULL; + [self getArgument:&value atIndex:argIndex]; + return [NSValue valueWithPointer:value]; + } case '{': // structure { NSUInteger maxArgSize = [[self methodSignature] frameLength]; - NSMutableData *argumentData = [[[NSMutableData alloc] initWithLength:maxArgSize] autorelease]; + NSMutableData *argumentData = [[NSMutableData alloc] initWithLength:maxArgSize]; [self getArgument:[argumentData mutableBytes] atIndex:argIndex]; return [NSValue valueWithBytes:[argumentData bytes] objCType:argType]; } @@ -149,7 +155,7 @@ - (NSString *)invocationDescription [description appendString:[self argumentDescriptionAtIndex:i]]; } - return [description autorelease]; + return description; } - (NSString *)argumentDescriptionAtIndex:(int)argIndex @@ -186,7 +192,7 @@ - (NSString *)argumentDescriptionAtIndex:(int)argIndex - (NSString *)objectDescriptionAtIndex:(int)anInt { - id object; + __unsafe_unretained id object; [self getArgument:&object atIndex:anInt]; if (object == nil) diff --git a/Pods/Kiwi/Classes/NSMethodSignature+KiwiAdditions.h b/Pods/Kiwi/Classes/Core/NSMethodSignature+KiwiAdditions.h similarity index 100% rename from Pods/Kiwi/Classes/NSMethodSignature+KiwiAdditions.h rename to Pods/Kiwi/Classes/Core/NSMethodSignature+KiwiAdditions.h diff --git a/Pods/Kiwi/Classes/NSMethodSignature+KiwiAdditions.m b/Pods/Kiwi/Classes/Core/NSMethodSignature+KiwiAdditions.m similarity index 100% rename from Pods/Kiwi/Classes/NSMethodSignature+KiwiAdditions.m rename to Pods/Kiwi/Classes/Core/NSMethodSignature+KiwiAdditions.m diff --git a/Pods/Kiwi/Classes/NSNumber+KiwiAdditions.h b/Pods/Kiwi/Classes/Core/NSNumber+KiwiAdditions.h similarity index 100% rename from Pods/Kiwi/Classes/NSNumber+KiwiAdditions.h rename to Pods/Kiwi/Classes/Core/NSNumber+KiwiAdditions.h diff --git a/Pods/Kiwi/Classes/NSNumber+KiwiAdditions.m b/Pods/Kiwi/Classes/Core/NSNumber+KiwiAdditions.m similarity index 100% rename from Pods/Kiwi/Classes/NSNumber+KiwiAdditions.m rename to Pods/Kiwi/Classes/Core/NSNumber+KiwiAdditions.m diff --git a/Pods/Kiwi/Classes/NSObject+KiwiSpyAdditions.h b/Pods/Kiwi/Classes/Core/NSObject+KiwiSpyAdditions.h similarity index 100% rename from Pods/Kiwi/Classes/NSObject+KiwiSpyAdditions.h rename to Pods/Kiwi/Classes/Core/NSObject+KiwiSpyAdditions.h diff --git a/Pods/Kiwi/Classes/NSObject+KiwiSpyAdditions.m b/Pods/Kiwi/Classes/Core/NSObject+KiwiSpyAdditions.m similarity index 60% rename from Pods/Kiwi/Classes/NSObject+KiwiSpyAdditions.m rename to Pods/Kiwi/Classes/Core/NSObject+KiwiSpyAdditions.m index 8730bde9..321ea8aa 100644 --- a/Pods/Kiwi/Classes/NSObject+KiwiSpyAdditions.m +++ b/Pods/Kiwi/Classes/Core/NSObject+KiwiSpyAdditions.m @@ -13,15 +13,15 @@ @implementation NSObject (KiwiSpyAdditions) - (KWCaptureSpy *)captureArgument:(SEL)selector atIndex:(NSUInteger)index { - KWCaptureSpy *spy = [[[KWCaptureSpy alloc] initWithArgumentIndex:index] autorelease]; - KWMessagePattern *pattern = [[[KWMessagePattern alloc] initWithSelector:selector] autorelease]; + KWCaptureSpy *spy = [[KWCaptureSpy alloc] initWithArgumentIndex:index]; + KWMessagePattern *pattern = [[KWMessagePattern alloc] initWithSelector:selector]; [self addMessageSpy:spy forMessagePattern:pattern]; return spy; } + (KWCaptureSpy *)captureArgument:(SEL)selector atIndex:(NSUInteger)index { - KWCaptureSpy *spy = [[[KWCaptureSpy alloc] initWithArgumentIndex:index] autorelease]; - KWMessagePattern *pattern = [[[KWMessagePattern alloc] initWithSelector:selector] autorelease]; + KWCaptureSpy *spy = [[KWCaptureSpy alloc] initWithArgumentIndex:index]; + KWMessagePattern *pattern = [[KWMessagePattern alloc] initWithSelector:selector]; [self addMessageSpy:spy forMessagePattern:pattern]; return spy; } diff --git a/Pods/Kiwi/Classes/NSObject+KiwiVerifierAdditions.h b/Pods/Kiwi/Classes/Core/NSObject+KiwiVerifierAdditions.h similarity index 100% rename from Pods/Kiwi/Classes/NSObject+KiwiVerifierAdditions.h rename to Pods/Kiwi/Classes/Core/NSObject+KiwiVerifierAdditions.h diff --git a/Pods/Kiwi/Classes/NSObject+KiwiVerifierAdditions.m b/Pods/Kiwi/Classes/Core/NSObject+KiwiVerifierAdditions.m similarity index 100% rename from Pods/Kiwi/Classes/NSObject+KiwiVerifierAdditions.m rename to Pods/Kiwi/Classes/Core/NSObject+KiwiVerifierAdditions.m diff --git a/Pods/Kiwi/Classes/NSProxy+KiwiVerifierAdditions.h b/Pods/Kiwi/Classes/Core/NSProxy+KiwiVerifierAdditions.h similarity index 100% rename from Pods/Kiwi/Classes/NSProxy+KiwiVerifierAdditions.h rename to Pods/Kiwi/Classes/Core/NSProxy+KiwiVerifierAdditions.h diff --git a/Pods/Kiwi/Classes/NSProxy+KiwiVerifierAdditions.m b/Pods/Kiwi/Classes/Core/NSProxy+KiwiVerifierAdditions.m similarity index 100% rename from Pods/Kiwi/Classes/NSProxy+KiwiVerifierAdditions.m rename to Pods/Kiwi/Classes/Core/NSProxy+KiwiVerifierAdditions.m diff --git a/Pods/Kiwi/Classes/NSValue+KiwiAdditions.h b/Pods/Kiwi/Classes/Core/NSValue+KiwiAdditions.h similarity index 100% rename from Pods/Kiwi/Classes/NSValue+KiwiAdditions.h rename to Pods/Kiwi/Classes/Core/NSValue+KiwiAdditions.h diff --git a/Pods/Kiwi/Classes/NSValue+KiwiAdditions.m b/Pods/Kiwi/Classes/Core/NSValue+KiwiAdditions.m similarity index 100% rename from Pods/Kiwi/Classes/NSValue+KiwiAdditions.m rename to Pods/Kiwi/Classes/Core/NSValue+KiwiAdditions.m diff --git a/Pods/Kiwi/Classes/KWAny.m b/Pods/Kiwi/Classes/KWAny.m deleted file mode 100644 index 1ca80129..00000000 --- a/Pods/Kiwi/Classes/KWAny.m +++ /dev/null @@ -1,46 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWAny.h" - -@implementation KWAny - -#pragma mark - Initializing - -static KWAny *sharedAny = nil; - -+ (id)any { - if (sharedAny == nil) { - sharedAny = [[super allocWithZone:nil] init]; - } - - return sharedAny; -} - -+ (id)allocWithZone:(NSZone *)zone { - return [[self any] retain]; -} - -- (id)copyWithZone:(NSZone *)zone { - return self; -} - -- (id)retain { - return self; -} - -- (NSUInteger)retainCount { - return NSUIntegerMax; -} - -- (oneway void)release { -} - -- (id)autorelease { - return self; -} - -@end diff --git a/Pods/Kiwi/Classes/KWAsyncVerifier.m b/Pods/Kiwi/Classes/KWAsyncVerifier.m deleted file mode 100644 index 6f881697..00000000 --- a/Pods/Kiwi/Classes/KWAsyncVerifier.m +++ /dev/null @@ -1,100 +0,0 @@ -// -// KWAsyncVerifier.m -// iOSFalconCore -// -// Created by Luke Redpath on 13/01/2011. -// Copyright 2011 LJR Software Limited. All rights reserved. -// - -#import "KWAsyncVerifier.h" -#import "KWFailure.h" -#import "KWMatching.h" -#import "KWReporting.h" -#import "KWProbePoller.h" - -@implementation KWAsyncVerifier - -+ (id)asyncVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter probeTimeout:(NSTimeInterval)probeTimeout shouldWait:(BOOL)shouldWait -{ - KWAsyncVerifier *verifier = [[self alloc] initWithExpectationType:anExpectationType callSite:aCallSite matcherFactory:aMatcherFactory reporter:aReporter]; - verifier.timeout = probeTimeout; - verifier.shouldWait = shouldWait; - return [verifier autorelease]; -} - -- (id)initWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter { - if ((self = [super initWithExpectationType:anExpectationType callSite:aCallSite matcherFactory:aMatcherFactory reporter:aReporter])) { - self.timeout = kKW_DEFAULT_PROBE_TIMEOUT; - } - return self; -} - -- (void)verifyWithProbe:(KWAsyncMatcherProbe *)aProbe { - @try { - KWProbePoller *poller = [[KWProbePoller alloc] initWithTimeout:self.timeout delay:kKW_DEFAULT_PROBE_DELAY shouldWait: self.shouldWait]; - - if (![poller check:aProbe]) { - if (self.expectationType == KWExpectationTypeShould) { - NSString *message = [aProbe.matcher failureMessageForShould]; - KWFailure *failure = [KWFailure failureWithCallSite:self.callSite message:message]; - [self.reporter reportFailure:failure]; - } - } else { - // poller returned YES -- fail if expectation is NOT - if (self.expectationType == KWExpectationTypeShouldNot) { - NSString *message = [aProbe.matcher failureMessageForShouldNot]; - KWFailure *failure = [KWFailure failureWithCallSite:self.callSite message:message]; - [self.reporter reportFailure:failure]; - } - } - - [poller release]; - - } @catch (NSException *exception) { - KWFailure *failure = [KWFailure failureWithCallSite:self.callSite message:[exception description]]; - [self.reporter reportFailure:failure]; - } -} - -- (void)verifyWithMatcher:(id)aMatcher { - KWAsyncMatcherProbe *probe = [[[KWAsyncMatcherProbe alloc] initWithMatcher:aMatcher] autorelease]; - [self verifyWithProbe:probe]; -} - -@end - -@implementation KWAsyncMatcherProbe - -@synthesize matcher; - -- (id)initWithMatcher:(id)aMatcher; -{ - if ((self = [super init])) { - matcher = [aMatcher retain]; - - // make sure the matcher knows we are going to evaluate it multiple times - if ([aMatcher respondsToSelector:@selector(willEvaluateMultipleTimes)]) { - [aMatcher setWillEvaluateMultipleTimes:YES]; - } - } - return self; -} - -- (void)dealloc -{ - [matcher release]; - [super dealloc]; -} - -- (BOOL)isSatisfied; -{ - return matchResult; -} - -- (void)sample; -{ - matchResult = [matcher evaluate]; -} - -@end - diff --git a/Pods/Kiwi/Classes/KWBeNilMatcher.m b/Pods/Kiwi/Classes/KWBeNilMatcher.m deleted file mode 100644 index 7cd733bc..00000000 --- a/Pods/Kiwi/Classes/KWBeNilMatcher.m +++ /dev/null @@ -1,69 +0,0 @@ -// -// KWBeNilMatcher.m -// iOSFalconCore -// -// Created by Luke Redpath on 14/01/2011. -// Copyright 2011 LJR Software Limited. All rights reserved. -// - -#import "KWBeNilMatcher.h" -#import "KWExample.h" -#import "KWFormatter.h" -#import "KWExampleGroupBuilder.h" -#import "KWMatchVerifier.h" -#import "KWVerifying.h" - -@implementation KWBeNilMatcher - -#pragma mark - -#pragma mark Getting Matcher Strings - -+ (NSArray *)matcherStrings { - return @[@"beNil", @"beNil:"]; -} - -#pragma mark - -#pragma mark Matching - -- (BOOL)evaluate { - return (BOOL)(self.subject == nil); -} - -#pragma mark - -#pragma mark Getting Failure Messages - -- (NSString *)failureMessageForShould { - return [NSString stringWithFormat:@"expected subject to be nil, got %@", - [KWFormatter formatObject:self.subject]]; -} - -- (NSString *)failureMessageForShouldNot { - return [NSString stringWithFormat:@"expected %@ not to be nil", - [KWFormatter formatObject:self.subject]]; -} - -- (BOOL)shouldBeEvaluatedAtEndOfExample { - return YES; -} - -- (NSString *)description -{ - return @"be nil"; -} - -- (void)beNil {} -- (void)beNil:(BOOL)matcherHasSubject {} - -+ (BOOL)verifyNilSubject { - KWExample *currentExample = [[KWExampleGroupBuilder sharedExampleGroupBuilder] currentExample]; - id verifier = currentExample.unassignedVerifier; - if (verifier && ![verifier subject] && [verifier isKindOfClass:[KWMatchVerifier class]]) { - KWMatchVerifier *matchVerifier = (KWMatchVerifier *)verifier; - [matchVerifier performSelector:@selector(beNil)]; - currentExample.unassignedVerifier = nil; - return NO; - } - return YES; -} - -@end diff --git a/Pods/Kiwi/Classes/KWBeNonNilMatcher.h b/Pods/Kiwi/Classes/KWBeNonNilMatcher.h deleted file mode 100644 index 7af65500..00000000 --- a/Pods/Kiwi/Classes/KWBeNonNilMatcher.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// KWBeNotNilMatcher.h -// Kiwi -// -// Created by Luke Redpath on 17/01/2011. -// Copyright 2011 Allen Ding. All rights reserved. -// - -#import -#import "KWMatcher.h" - -@interface KWBeNonNilMatcher : KWMatcher { - -} -- (void)beNonNil; - -- (void)beNonNil:(BOOL)matcherHasSubject; -+ (BOOL)verifyNilSubject; -@end diff --git a/Pods/Kiwi/Classes/KWBeNonNilMatcher.m b/Pods/Kiwi/Classes/KWBeNonNilMatcher.m deleted file mode 100644 index d151fd31..00000000 --- a/Pods/Kiwi/Classes/KWBeNonNilMatcher.m +++ /dev/null @@ -1,65 +0,0 @@ -// -// KWBeNotNilMatcher.m -// Kiwi -// -// Created by Luke Redpath on 17/01/2011. -// Copyright 2011 Allen Ding. All rights reserved. -// - -#import "KWBeNonNilMatcher.h" -#import "KWExample.h" -#import "KWExampleGroupBuilder.h" -#import "KWFormatter.h" -#import "KWMatchVerifier.h" -#import "KWVerifying.h" - -@implementation KWBeNonNilMatcher - -#pragma mark - -#pragma mark Getting Matcher Strings - -+ (NSArray *)matcherStrings { - return @[@"beNonNil", @"beNonNil:"]; -} - -#pragma mark - -#pragma mark Matching - -- (BOOL)evaluate { - return (BOOL)(self.subject != nil); -} - -#pragma mark - -#pragma mark Getting Failure Messages - -- (NSString *)failureMessageForShould { - return [NSString stringWithFormat:@"expected subject to be non-nil, got %@", - [KWFormatter formatObject:self.subject]]; -} - -- (NSString *)failureMessageForShouldNot { - return [NSString stringWithFormat:@"expected %@ not to be non-nil", - [KWFormatter formatObject:self.subject]]; -} - -- (NSString *)description -{ - return @"be non-nil"; -} - -- (void)beNonNil {} -- (void)beNonNil:(BOOL)matcherHasSubject {} - -+ (BOOL)verifyNilSubject { - KWExample *currentExample = [[KWExampleGroupBuilder sharedExampleGroupBuilder] currentExample]; - id verifier = currentExample.unassignedVerifier; - if (verifier && ![verifier subject] && [verifier isKindOfClass:[KWMatchVerifier class]]) { - KWMatchVerifier *matchVerifier = (KWMatchVerifier *)verifier; - [matchVerifier performSelector:@selector(beNonNil)]; - currentExample.unassignedVerifier = nil; - return NO; - } - return YES; -} - -@end diff --git a/Pods/Kiwi/Classes/KWBlock.m b/Pods/Kiwi/Classes/KWBlock.m deleted file mode 100644 index 75495a35..00000000 --- a/Pods/Kiwi/Classes/KWBlock.m +++ /dev/null @@ -1,58 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWBlock.h" - -@interface KWBlock() - -#pragma mark - Properties - -@property (nonatomic, readonly, assign) KWVoidBlock block; - -@end - -@implementation KWBlock - -#pragma mark - Initializing - -- (id)initWithBlock:(KWVoidBlock)aBlock { - if ((self = [super init])) { - block = Block_copy(aBlock); - } - - return self; -} - -+ (id)blockWithBlock:(KWVoidBlock)aBlock { - return [[[self alloc] initWithBlock:aBlock] autorelease]; -} - -- (void)dealloc { - Block_release(block); - [super dealloc]; -} - -#pragma mark - Properties - -@synthesize block; - -#pragma mark - Calling Blocks - -- (void)call { - block(); -} - -@end - -#pragma mark - Creating Blocks - -KWBlock *theBlock(KWVoidBlock aBlock) { - return lambda(aBlock); -} - -KWBlock *lambda(KWVoidBlock aBlock) { - return [KWBlock blockWithBlock:aBlock]; -} diff --git a/Pods/Kiwi/Classes/KWBlockNode.m b/Pods/Kiwi/Classes/KWBlockNode.m deleted file mode 100644 index 11dd9e8b..00000000 --- a/Pods/Kiwi/Classes/KWBlockNode.m +++ /dev/null @@ -1,47 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWBlockNode.h" - -@implementation KWBlockNode - -#pragma mark - Initializing - -- (id)initWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription block:(KWVoidBlock)aBlock { - if ((self = [super init])) { - callSite = [aCallSite retain]; - _description = [aDescription copy]; - - if (aBlock != nil) - block = Block_copy(aBlock); - } - - return self; -} - -- (void)dealloc { - [callSite release]; - [_description release]; - - if (block != nil) - Block_release(block); - - [super dealloc]; -} - -- (void)performBlock { - if (block != nil) { block(); } -} - -#pragma mark - Getting Call Sites - -@synthesize callSite; - -#pragma mark - Accepting Visitors - -@synthesize block; - -@end diff --git a/Pods/Kiwi/Classes/KWExample.m b/Pods/Kiwi/Classes/KWExample.m deleted file mode 100644 index 87fbd52f..00000000 --- a/Pods/Kiwi/Classes/KWExample.m +++ /dev/null @@ -1,392 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWExample.h" -#import "KWExampleGroupBuilder.h" -#import "KWContextNode.h" -#import "KWMatcherFactory.h" -#import "KWExistVerifier.h" -#import "KWMatchVerifier.h" -#import "KWAsyncVerifier.h" -#import "KWFailure.h" -#import "KWContextNode.h" -#import "KWBeforeEachNode.h" -#import "KWBeforeAllNode.h" -#import "KWItNode.h" -#import "KWAfterEachNode.h" -#import "KWAfterAllNode.h" -#import "KWPendingNode.h" -#import "KWRegisterMatchersNode.h" -#import "KWWorkarounds.h" -#import "KWIntercept.h" -#import "KWExampleNode.h" -#import "KWExampleSuite.h" -#import "KWCallSite.h" -#import "KWSymbolicator.h" - -@interface KWExample () { - id exampleNode; - BOOL passed; -} - -@property (nonatomic, readonly) NSMutableArray *verifiers; -@property (nonatomic, readonly) KWMatcherFactory *matcherFactory; -@property (nonatomic, assign) id delegate; -@property (nonatomic, assign) BOOL didNotFinish; - -- (void)reportResultForExampleNodeWithLabel:(NSString *)label; - -@end - -@implementation KWExample - -@synthesize matcherFactory; -@synthesize verifiers; -@synthesize delegate = _delegate; -@synthesize suite; -@synthesize lastInContexts; -@synthesize didNotFinish; - -- (id)initWithExampleNode:(id)node -{ - if ((self = [super init])) { - exampleNode = [node retain]; - matcherFactory = [[KWMatcherFactory alloc] init]; - verifiers = [[NSMutableArray alloc] init]; - lastInContexts = [[NSMutableArray alloc] init]; - passed = YES; - } - return self; -} - -- (void)dealloc -{ - [lastInContexts release]; - [exampleNode release]; - [matcherFactory release]; - [verifiers release]; - [super dealloc]; -} - -- (BOOL)isLastInContext:(KWContextNode *)context -{ - for (KWContextNode *contextWhereItLast in lastInContexts) { - if (context == contextWhereItLast) { - return YES; - } - } - return NO; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"", exampleNode.description]; -} - -#pragma mark - Adding Verifiers - -- (id)addVerifier:(id)aVerifier { - if (![self.verifiers containsObject:aVerifier]) - [self.verifiers addObject:aVerifier]; - - return aVerifier; -} - -- (id)addExistVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite { - id verifier = [KWExistVerifier existVerifierWithExpectationType:anExpectationType callSite:aCallSite reporter:self]; - [self addVerifier:verifier]; - return verifier; -} - -- (id)addMatchVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite { - if (self.unassignedVerifier) { - @throw [NSException exceptionWithName:NSInternalInconsistencyException - reason:@"Trying to add another verifier without specifying a matcher for the previous one." - userInfo:nil]; - } - id verifier = [KWMatchVerifier matchVerifierWithExpectationType:anExpectationType callSite:aCallSite matcherFactory:self.matcherFactory reporter:self]; - [self addVerifier:verifier]; - self.unassignedVerifier = verifier; - return verifier; -} - -- (id)addAsyncVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite timeout:(NSInteger)timeout shouldWait:(BOOL)shouldWait { - id verifier = [KWAsyncVerifier asyncVerifierWithExpectationType:anExpectationType callSite:aCallSite matcherFactory:self.matcherFactory reporter:self probeTimeout:timeout shouldWait: shouldWait]; - [self addVerifier:verifier]; - return verifier; -} - -#pragma mark - Running examples - -- (void)runWithDelegate:(id)delegate; -{ - self.delegate = delegate; - [self.matcherFactory registerMatcherClassesWithNamespacePrefix:@"KW"]; - [[KWExampleGroupBuilder sharedExampleGroupBuilder] setCurrentExample:self]; - [exampleNode acceptExampleNodeVisitor:self]; -} - -#pragma mark - Reporting failure - -- (NSString *)descriptionForExampleContext { - NSMutableArray *parts = [NSMutableArray array]; - - for (KWContextNode *context in [[exampleNode contextStack] reverseObjectEnumerator]) { - if ([context description] != nil) { - [parts addObject:[[context description] stringByAppendingString:@","]]; - } - } - - return [parts componentsJoinedByString:@" "]; -} - -- (KWFailure *)outputReadyFailureWithFailure:(KWFailure *)aFailure { - NSString *annotatedFailureMessage = [NSString stringWithFormat:@"'%@ %@' [FAILED], %@", - [self descriptionForExampleContext], [exampleNode description], - aFailure.message]; - -#if TARGET_IPHONE_SIMULATOR - // \uff1a is the unicode for a fill width colon, as opposed to a regular - // colon character (':'). This escape is performed so that Xcode doesn't - // truncate the error output in the build results window, which is running - // build time specs. - annotatedFailureMessage = [annotatedFailureMessage stringByReplacingOccurrencesOfString:@":" withString:@"\uff1a"]; -#endif // #if TARGET_IPHONE_SIMULATOR - - return [KWFailure failureWithCallSite:aFailure.callSite message:annotatedFailureMessage]; -} - -- (void)reportFailure:(KWFailure *)failure -{ - passed = NO; - [self.delegate example:self didFailWithFailure:[self outputReadyFailureWithFailure:failure]]; -} - -- (void)reportResultForExampleNodeWithLabel:(NSString *)label -{ - NSLog(@"+ '%@ %@' [%@]", [self descriptionForExampleContext], [exampleNode description], label); -} - -#pragma mark - Full description with context - -/** Pending cases will be marked yellow by XCode as not finished, because their description differs for -[SenTestCaseRun start] and -[SenTestCaseRun stop] methods - */ - -- (NSString *)pendingNotFinished { - BOOL reportPending = self.didNotFinish; - self.didNotFinish = YES; - return reportPending ? @"(PENDING)" : @""; -} - -- (NSString *)descriptionWithContext { - NSString *descriptionWithContext = [NSString stringWithFormat:@"%@ %@", - [self descriptionForExampleContext], - [exampleNode description] ? [exampleNode description] : @""]; - BOOL isPending = [exampleNode isKindOfClass:[KWPendingNode class]]; - return isPending ? [descriptionWithContext stringByAppendingString:[self pendingNotFinished]] : descriptionWithContext; -} - -#pragma mark - Visiting Nodes - -- (void)visitRegisterMatchersNode:(KWRegisterMatchersNode *)aNode { - [self.matcherFactory registerMatcherClassesWithNamespacePrefix:aNode.namespacePrefix]; -} - -- (void)visitBeforeAllNode:(KWBeforeAllNode *)aNode { - if (aNode.block == nil) - return; - - aNode.block(); -} - -- (void)visitAfterAllNode:(KWAfterAllNode *)aNode { - if (aNode.block == nil) - return; - - aNode.block(); -} - -- (void)visitBeforeEachNode:(KWBeforeEachNode *)aNode { - if (aNode.block == nil) - return; - - aNode.block(); -} - -- (void)visitAfterEachNode:(KWAfterEachNode *)aNode { - if (aNode.block == nil) - return; - - aNode.block(); -} - -- (void)visitItNode:(KWItNode *)aNode { - if (aNode.block == nil || aNode != exampleNode) - return; - - aNode.example = self; - - [aNode.context performExample:self withBlock:^{ - - @try { - - aNode.block(); - -#if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG - NSException *invocationException = KWGetAndClearExceptionFromAcrossInvocationBoundary(); - [invocationException raise]; -#endif // #if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG - - // Finish verifying and clear - for (id verifier in self.verifiers) { - [verifier exampleWillEnd]; - } - - } @catch (NSException *exception) { - KWFailure *failure = [KWFailure failureWithCallSite:aNode.callSite format:@"%@ \"%@\" raised", - [exception name], - [exception reason]]; - [self reportFailure:failure]; - } - - if (passed) { - [self reportResultForExampleNodeWithLabel:@"PASSED"]; - } - - // Always clear stubs and spies at the end of it blocks - KWClearStubsAndSpies(); - }]; -} - -- (void)visitPendingNode:(KWPendingNode *)aNode { - if (aNode != exampleNode) - return; - - [self reportResultForExampleNodeWithLabel:@"PENDING"]; -} - -- (NSString *)generateDescriptionForAnonymousItNode -{ - // anonymous specify blocks should only have one verifier, but use the first in any case - return [(self.verifiers)[0] descriptionForAnonymousItNode]; -} - -@end - -#pragma mark - Looking up CallSites - -KWCallSite *callSiteWithAddress(long address); -KWCallSite *callSiteAtAddressIfNecessary(long address); - -KWCallSite *callSiteAtAddressIfNecessary(long address){ - BOOL shouldLookup = [[KWExampleGroupBuilder sharedExampleGroupBuilder] isFocused] && ![[KWExampleGroupBuilder sharedExampleGroupBuilder] foundFocus]; - return shouldLookup ? callSiteWithAddress(address) : nil; -} - -KWCallSite *callSiteWithAddress(long address){ - NSArray *args =@[@"-p", @(getpid()).stringValue, [NSString stringWithFormat:@"%lx", address]]; - NSString *callSite = [NSString stringWithShellCommand:@"/usr/bin/atos" arguments:args]; - - NSString *pattern = @".+\\((.+):([0-9]+)\\)"; - NSError *e; - NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&e]; - NSArray *res = [regex matchesInString:callSite options:0 range:NSMakeRange(0, callSite.length)]; - - NSString *fileName = nil; - NSInteger lineNumber = 0; - - for (NSTextCheckingResult *ntcr in res) { - fileName = [callSite substringWithRange:[ntcr rangeAtIndex:1]]; - NSString *lineNumberMatch = [callSite substringWithRange:[ntcr rangeAtIndex:2]]; - lineNumber = lineNumberMatch.integerValue; - } - return [KWCallSite callSiteWithFilename:fileName lineNumber:lineNumber]; -} - -#pragma mark - Building Example Groups - -void describe(NSString *aDescription, KWVoidBlock aBlock) { - KWCallSite *callSite = callSiteAtAddressIfNecessary(kwCallerAddress()); - describeWithCallSite(callSite, aDescription, aBlock); -} - -void context(NSString *aDescription, KWVoidBlock aBlock) { - KWCallSite *callSite = callSiteAtAddressIfNecessary(kwCallerAddress()); - contextWithCallSite(callSite, aDescription, aBlock); -} - -void registerMatchers(NSString *aNamespacePrefix) { - registerMatchersWithCallSite(nil, aNamespacePrefix); -} - -void beforeAll(KWVoidBlock aBlock) { - beforeAllWithCallSite(nil, aBlock); -} - -void afterAll(KWVoidBlock aBlock) { - afterAllWithCallSite(nil, aBlock); -} - -void beforeEach(KWVoidBlock aBlock) { - beforeEachWithCallSite(nil, aBlock); -} - -void afterEach(KWVoidBlock aBlock) { - afterEachWithCallSite(nil, aBlock); -} - -void it(NSString *aDescription, KWVoidBlock aBlock) { - KWCallSite *callSite = callSiteAtAddressIfNecessary(kwCallerAddress()); - itWithCallSite(callSite, aDescription, aBlock); -} - -void specify(KWVoidBlock aBlock) -{ - itWithCallSite(nil, nil, aBlock); -} - -void pending_(NSString *aDescription, KWVoidBlock ignoredBlock) { - pendingWithCallSite(nil, aDescription, ignoredBlock); -} - -void describeWithCallSite(KWCallSite *aCallSite, NSString *aDescription, KWVoidBlock aBlock) { - - contextWithCallSite(aCallSite, aDescription, aBlock); -} - -void contextWithCallSite(KWCallSite *aCallSite, NSString *aDescription, KWVoidBlock aBlock) { - [[KWExampleGroupBuilder sharedExampleGroupBuilder] pushContextNodeWithCallSite:aCallSite description:aDescription]; - aBlock(); - [[KWExampleGroupBuilder sharedExampleGroupBuilder] popContextNode]; -} - -void registerMatchersWithCallSite(KWCallSite *aCallSite, NSString *aNamespacePrefix) { - [[KWExampleGroupBuilder sharedExampleGroupBuilder] setRegisterMatchersNodeWithCallSite:aCallSite namespacePrefix:aNamespacePrefix]; -} - -void beforeAllWithCallSite(KWCallSite *aCallSite, KWVoidBlock aBlock) { - [[KWExampleGroupBuilder sharedExampleGroupBuilder] setBeforeAllNodeWithCallSite:aCallSite block:aBlock]; -} - -void afterAllWithCallSite(KWCallSite *aCallSite, KWVoidBlock aBlock) { - [[KWExampleGroupBuilder sharedExampleGroupBuilder] setAfterAllNodeWithCallSite:aCallSite block:aBlock]; -} - -void beforeEachWithCallSite(KWCallSite *aCallSite, KWVoidBlock aBlock) { - [[KWExampleGroupBuilder sharedExampleGroupBuilder] setBeforeEachNodeWithCallSite:aCallSite block:aBlock]; -} - -void afterEachWithCallSite(KWCallSite *aCallSite, KWVoidBlock aBlock) { - [[KWExampleGroupBuilder sharedExampleGroupBuilder] setAfterEachNodeWithCallSite:aCallSite block:aBlock]; -} - -void itWithCallSite(KWCallSite *aCallSite, NSString *aDescription, KWVoidBlock aBlock) { - [[KWExampleGroupBuilder sharedExampleGroupBuilder] addItNodeWithCallSite:aCallSite description:aDescription block:aBlock]; -} - -void pendingWithCallSite(KWCallSite *aCallSite, NSString *aDescription, KWVoidBlock ignoredBlock) { - [[KWExampleGroupBuilder sharedExampleGroupBuilder] addPendingNodeWithCallSite:aCallSite description:aDescription]; -} diff --git a/Pods/Kiwi/Classes/KWExampleSuite.m b/Pods/Kiwi/Classes/KWExampleSuite.m deleted file mode 100644 index 7e267237..00000000 --- a/Pods/Kiwi/Classes/KWExampleSuite.m +++ /dev/null @@ -1,93 +0,0 @@ -// -// KWExampleSuite.m -// Kiwi -// -// Created by Luke Redpath on 17/10/2011. -// Copyright (c) 2011 Allen Ding. All rights reserved. -// - -#import "KWExampleSuite.h" -#import "KWExample.h" -#import "KWStringUtilities.h" -#import "KWBeforeAllNode.h" -#import "KWAfterAllNode.h" -#import "NSMethodSignature+KiwiAdditions.h" -#import - -#define kKWINVOCATION_EXAMPLE_GROUP_KEY @"__KWExampleGroupKey" - -@interface KWExampleSuite() { - KWContextNode *rootNode; - NSMutableArray *examples; -} -@end - -@implementation KWExampleSuite - -- (id)initWithRootNode:(KWContextNode *)contextNode -{ - if ((self = [super init])) { - rootNode = [contextNode retain]; - examples = [[NSMutableArray alloc] init]; - } - return self; -} - -- (void)dealloc -{ - [examples release]; - [rootNode release]; - [super dealloc]; -} - -- (void)addExample:(KWExample *)example -{ - [examples addObject:example]; - [example setSuite:self]; -} - -- (void)markLastExampleAsLastInContext:(KWContextNode *)context -{ - if ([examples count] > 0) { - KWExample *lastExample = (KWExample *)[examples lastObject]; - [lastExample.lastInContexts addObject:context]; - } -} - -- (NSArray *)invocationsForTestCase; -{ - NSMutableArray *invocations = [NSMutableArray array]; - - // Add a single dummy invocation for each example group - - for (KWExample *exampleGroup in examples) { - NSMethodSignature *methodSignature = [NSMethodSignature signatureWithObjCTypes:[KWEncodingForVoidMethod() UTF8String]]; - NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:methodSignature]; - [invocations addObject:invocation]; - [invocation kw_setExample:exampleGroup]; - } - - return invocations; -} - -@end - -#pragma mark - - -// because SenTest will modify the invocation target, we'll have to store -// another reference to the example group so we can retrieve it later - -@implementation NSInvocation (KWExampleGroup) - -- (void)kw_setExample:(KWExample *)exampleGroup -{ - objc_setAssociatedObject(self, kKWINVOCATION_EXAMPLE_GROUP_KEY, exampleGroup, OBJC_ASSOCIATION_RETAIN); -} - -- (KWExample *)kw_example -{ - return objc_getAssociatedObject(self, kKWINVOCATION_EXAMPLE_GROUP_KEY); -} - -@end - diff --git a/Pods/Kiwi/Classes/KWFutureObject.m b/Pods/Kiwi/Classes/KWFutureObject.m deleted file mode 100644 index c188bf5e..00000000 --- a/Pods/Kiwi/Classes/KWFutureObject.m +++ /dev/null @@ -1,47 +0,0 @@ -// -// KWFutureObject.m -// iOSFalconCore -// -// Created by Luke Redpath on 13/01/2011. -// Copyright 2011 LJR Software Limited. All rights reserved. -// - -#import "KWFutureObject.h" - -@interface KWFutureObject() { - KWFutureObjectBlock block; -} -@end - -@implementation KWFutureObject - -+ (id)objectWithObjectPointer:(id *)pointer; -{ - return [self futureObjectWithBlock:^{ return *pointer; }]; -} - -+ (id)futureObjectWithBlock:(KWFutureObjectBlock)block; -{ - return [[[self alloc] initWithBlock:block] autorelease]; -} - -- (id)initWithBlock:(KWFutureObjectBlock)aBlock; -{ - if ((self = [super init])) { - block = [aBlock copy]; - } - return self; -} - -- (id)object; -{ - return block(); -} - -- (void)dealloc -{ - [block release]; - [super dealloc]; -} - -@end diff --git a/Pods/Kiwi/Classes/KWHaveValueMatcher.m b/Pods/Kiwi/Classes/KWHaveValueMatcher.m deleted file mode 100644 index c42cfc25..00000000 --- a/Pods/Kiwi/Classes/KWHaveValueMatcher.m +++ /dev/null @@ -1,148 +0,0 @@ -// -// KWHaveValueMatcher.m -// Kiwi -// -// Created by Luke Redpath on 24/01/2011. -// Copyright 2011 Allen Ding. All rights reserved. -// - -#import "KWHaveValueMatcher.h" -#import "KWGenericMatchingAdditions.h" -#import "KWGenericMatcher.h" -#import "KWFormatter.h" - -@interface KWHaveValueMatcher() - -#pragma mark - Properties - -@property (nonatomic, retain) NSString *expectedKey; -@property (nonatomic, retain) NSString *expectedKeyPath; -@property (nonatomic, retain) id expectedValue; - -- (id)subjectValue; - -@end - -@implementation KWHaveValueMatcher - -@synthesize expectedKey, expectedKeyPath, expectedValue; - -- (void)dealloc -{ - [expectedKeyPath release]; - [expectedKey release]; - [expectedValue release]; - [super dealloc]; -} - -#pragma mark - Getting Matcher Strings - -+ (NSArray *)matcherStrings { - return @[@"haveValue:forKey:", - @"haveValueForKey:", - @"haveValue:forKeyPath:", - @"haveValueForKeyPath:"]; -} - -#pragma mark - Matching - -- (BOOL)evaluate { - BOOL matched = NO; - - @try { - id value = [self subjectValue]; - - if (value) { - matched = YES; - - if (self.expectedValue) { - matched = [self.expectedValue isEqualOrMatches:value]; - } - } - } - @catch (NSException * e) {} // catch KVO non-existent key errors - - return matched; -} - -- (NSString *)failureMessageForShould { - if (self.expectedValue == nil) { - return [NSString stringWithFormat:@"expected subject to have a value for key %@", - [KWFormatter formatObject:self.expectedKey]]; - } - id subjectValue = [self subjectValue]; - if (subjectValue) { - return [NSString stringWithFormat:@"expected subject to have value %@ for key %@, but it had value %@ instead", - [KWFormatter formatObject:self.expectedValue], - [KWFormatter formatObject:self.expectedKey], - [KWFormatter formatObject:subjectValue]]; - } else { - return [NSString stringWithFormat:@"expected subject to have value %@ for key %@, but the key was not present", - [KWFormatter formatObject:self.expectedValue], - [KWFormatter formatObject:self.expectedKey]]; - } -} - -- (id)subjectValue -{ - id value = nil; - - if (self.expectedKey) { - value = [self.subject valueForKey:self.expectedKey]; - } else - if (self.expectedKeyPath) { - value = [self.subject valueForKeyPath:self.expectedKeyPath]; - } - return value; -} - -- (NSString *)description -{ - NSString *keyDescription = nil; - - if (self.expectedKey) { - keyDescription = [NSString stringWithFormat:@"key %@", [KWFormatter formatObject:self.expectedKey]]; - } - else { - keyDescription = [NSString stringWithFormat:@"keypath %@", [KWFormatter formatObject:self.expectedKeyPath]]; - } - - NSString *valueDescription = nil; - - if (self.expectedValue) { - valueDescription = [NSString stringWithFormat:@"value %@", [KWFormatter formatObject:self.expectedValue]]; - } - else { - valueDescription = @"value"; - } - - return [NSString stringWithFormat:@"have %@ for %@", valueDescription, keyDescription]; -} - -#pragma mark - Configuring Matchers - -- (void)haveValue:(id)value forKey:(NSString *)key; -{ - self.expectedKey = key; - self.expectedValue = value; -} - -- (void)haveValue:(id)value forKeyPath:(NSString *)key; -{ - self.expectedKeyPath = key; - self.expectedValue = value; -} - -- (void)haveValueForKey:(NSString *)key; -{ - self.expectedKey = key; - self.expectedValue = nil; -} - -- (void)haveValueForKeyPath:(NSString *)keyPath; -{ - self.expectedKeyPath = keyPath; - self.expectedValue = nil; -} - -@end diff --git a/Pods/Kiwi/Classes/KWNull.m b/Pods/Kiwi/Classes/KWNull.m deleted file mode 100644 index 2cdf204f..00000000 --- a/Pods/Kiwi/Classes/KWNull.m +++ /dev/null @@ -1,46 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWNull.h" - -@implementation KWNull - -#pragma mark - Initializing - -static KWNull *sharedNull = nil; - -+ (id)null { - if (sharedNull == nil) { - sharedNull = [[super allocWithZone:nil] init]; - } - - return sharedNull; -} - -+ (id)allocWithZone:(NSZone *)zone { - return [[self null] retain]; -} - -- (id)copyWithZone:(NSZone *)zone { - return self; -} - -- (id)retain { - return self; -} - -- (NSUInteger)retainCount { - return NSUIntegerMax; -} - -- (oneway void)release { -} - -- (id)autorelease { - return self; -} - -@end diff --git a/Pods/Kiwi/Classes/KWProbePoller.m b/Pods/Kiwi/Classes/KWProbePoller.m deleted file mode 100644 index 7fc496a3..00000000 --- a/Pods/Kiwi/Classes/KWProbePoller.m +++ /dev/null @@ -1,79 +0,0 @@ -// -// KWProbePoller.m -// iOSFalconCore -// -// Created by Luke Redpath on 13/01/2011. -// Copyright 2011 LJR Software Limited. All rights reserved. -// - -#import "KWProbePoller.h" - -@interface KWTimeout : NSObject { - NSDate *timeoutDate; -} - -- (id)initWithTimeout:(NSTimeInterval)timeout; -- (BOOL)hasTimedOut; -@end - -@implementation KWTimeout - -- (id)initWithTimeout:(NSTimeInterval)timeout -{ - if ((self = [super init])) { - timeoutDate = [[NSDate alloc] initWithTimeIntervalSinceNow:timeout]; - } - return self; -} - -- (void)dealloc -{ - [timeoutDate release]; - [super dealloc]; -} - -- (BOOL)hasTimedOut -{ - return [timeoutDate timeIntervalSinceDate:[NSDate date]] < 0; -} - -@end - - -@interface KWProbePoller() { - NSTimeInterval timeoutInterval; - NSTimeInterval delayInterval; - BOOL shouldWait; -} -@end - -@implementation KWProbePoller - -- (id)initWithTimeout:(NSTimeInterval)theTimeout delay:(NSTimeInterval)theDelay shouldWait:(BOOL)wait; -{ - if ((self = [super init])) { - timeoutInterval = theTimeout; - delayInterval = theDelay; - shouldWait = wait; - } - return self; -} - -- (BOOL)check:(id)probe; -{ - KWTimeout *timeout = [[KWTimeout alloc] initWithTimeout:timeoutInterval]; - - while (shouldWait || ![probe isSatisfied]) { - if ([timeout hasTimedOut]) { - [timeout release]; - return [probe isSatisfied]; - } - [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:delayInterval]]; - [probe sample]; - } - [timeout release]; - - return YES; -} - -@end diff --git a/Pods/Kiwi/Classes/KWSpec.m b/Pods/Kiwi/Classes/KWSpec.m deleted file mode 100644 index 8bb48b16..00000000 --- a/Pods/Kiwi/Classes/KWSpec.m +++ /dev/null @@ -1,143 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWSpec.h" -#import -#import "KWExample.h" -#import "KWExampleGroupBuilder.h" -#import "KWIntercept.h" -#import "KWObjCUtilities.h" -#import "KWStringUtilities.h" -#import "NSMethodSignature+KiwiAdditions.h" -#import "KWFailure.h" -#import "KWExampleSuite.h" - - -@interface KWSpec() - -#pragma mark - Properties - -@property (nonatomic, retain) KWExample *example; - -@end - -@implementation KWSpec - -@synthesize example; - -- (void)dealloc -{ - [example release]; - [super dealloc]; -} - -/* Methods are only implemented by sub-classes */ - -+ (NSString *)file { return nil; } - -+ (void)buildExampleGroups {} - -/* Reported by XCode SenTestingKit Runner before and after invocation of the test - Use camel case to make method friendly names from example description - */ - -- (NSString *)description -{ - KWExample *currentExample = self.example ? self.example : [[self invocation] kw_example]; - NSString *name = [currentExample descriptionWithContext]; - - // CamelCase the string - NSArray *words = [name componentsSeparatedByString:@" "]; - name = @""; - for (NSString *word in words) { - if ([word length] < 1) - { - continue; - } - name = [name stringByAppendingString:[[word substringToIndex:1] uppercaseString]]; - name = [name stringByAppendingString:[word substringFromIndex:1]]; - } - - // Replace the commas with underscores to separate the levels of context - name = [name stringByReplacingOccurrencesOfString:@"," withString:@"_"]; - - // Strip out characters not legal in function names - NSError *error = nil; - NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[^a-zA-Z0-9_]*" options:0 error:&error]; - name = [regex stringByReplacingMatchesInString:name options:0 range:NSMakeRange(0, name.length) withTemplate:@""]; - - return [NSString stringWithFormat:@"-[%@ %@]", NSStringFromClass([self class]), name]; -} - -#pragma mark - Getting Invocations - -/* Called by the SenTestingKit test suite to get an array of invocations that - should be run on instances of test cases. */ - -+ (NSArray *)testInvocations -{ - SEL selector = @selector(buildExampleGroups); - - // Only return invocation if the receiver is a concrete spec that has overridden -buildExampleGroups. - if ([self methodForSelector:selector] == [KWSpec methodForSelector:selector]) - return nil; - - KWExampleSuite *exampleSuite = [[KWExampleGroupBuilder sharedExampleGroupBuilder] buildExampleGroups:^{ - [self buildExampleGroups]; - }]; - - return [exampleSuite invocationsForTestCase]; -} - -#pragma mark - Running Specs - -- (void)invokeTest -{ - self.example = [[self invocation] kw_example]; - - NSAutoreleasePool *subPool = [[NSAutoreleasePool alloc] init]; - - @try { - [self.example runWithDelegate:self]; - } @catch (NSException *exception) { - [self failWithException:exception]; - } - - [[self invocation] kw_setExample:nil]; - - [subPool release]; -} - -#pragma mark - KWExampleGroupDelegate methods - -- (void)example:(KWExample *)example didFailWithFailure:(KWFailure *)failure -{ - [self failWithException:[failure exceptionValue]]; -} - -#pragma mark - Verification proxies - -+ (id)addVerifier:(id)aVerifier -{ - return [[[KWExampleGroupBuilder sharedExampleGroupBuilder] currentExample] addVerifier:aVerifier]; -} - -+ (id)addExistVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite -{ - return [[[KWExampleGroupBuilder sharedExampleGroupBuilder] currentExample] addExistVerifierWithExpectationType:anExpectationType callSite:aCallSite]; -} - -+ (id)addMatchVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite -{ - return [[[KWExampleGroupBuilder sharedExampleGroupBuilder] currentExample] addMatchVerifierWithExpectationType:anExpectationType callSite:aCallSite]; -} - -+ (id)addAsyncVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite timeout:(NSInteger)timeout shouldWait:(BOOL)shouldWait -{ - return [[[KWExampleGroupBuilder sharedExampleGroupBuilder] currentExample] addAsyncVerifierWithExpectationType:anExpectationType callSite:aCallSite timeout:timeout shouldWait: shouldWait]; -} - -@end diff --git a/Pods/Kiwi/Classes/KWStringContainsMatcher.m b/Pods/Kiwi/Classes/KWStringContainsMatcher.m deleted file mode 100644 index e3eabc0e..00000000 --- a/Pods/Kiwi/Classes/KWStringContainsMatcher.m +++ /dev/null @@ -1,49 +0,0 @@ -// -// StringContainsMatcher.m -// Kiwi -// -// Created by Stewart Gleadow on 7/06/12. -// Copyright (c) 2012 Allen Ding. All rights reserved. -// - -#import "KWStringContainsMatcher.h" - -@interface KWStringContainsMatcher(){} -@property (nonatomic, copy) NSString *substring; -@end - -@implementation KWStringContainsMatcher - -+ (id)matcherWithSubstring:(NSString *)aSubstring; -{ - return [[[self alloc] initWithSubstring:aSubstring] autorelease]; -} - -- (id)initWithSubstring:(NSString *)aSubstring; -{ - if ((self = [super init])) { - _substring = [aSubstring copy]; - } - return self; -} - -- (void)dealloc -{ - [_substring release]; - [super dealloc]; -} - -- (BOOL)matches:(id)item -{ - if (![item respondsToSelector:@selector(rangeOfString:)]) - return NO; - - return [item rangeOfString:self.substring].location != NSNotFound; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"a string with substring '%@'", self.substring]; -} - -@end diff --git a/Pods/Kiwi/Classes/KWTestCase.h b/Pods/Kiwi/Classes/KWTestCase.h deleted file mode 100644 index 72a34603..00000000 --- a/Pods/Kiwi/Classes/KWTestCase.h +++ /dev/null @@ -1,37 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import -#import "KWExpectationType.h" -#import "KWReporting.h" - -@class KWCallSite; -@class KWMatcherFactory; - -@protocol KWVerifying; - -// Deprecated. This is here just in case blocks are not enabled. -@interface KWTestCase : SenTestCase - -#pragma mark - Configuring Example Environments - -- (void)setUpExampleEnvironment; -- (void)tearDownExampleEnvironment; - -#pragma mark - Marking Pending Examples - -- (void)markPendingWithCallSite:(KWCallSite *)aCallSite; -- (void)markPendingWithCallSite:(KWCallSite *)aCallSite :(NSString *)aDescription; - -#pragma mark - Adding Verifiers - -- (id)addVerifier:(id)aVerifier; -- (id)addExistVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite; -- (id)addMatchVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite; -- (id)addAsyncVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite timeout:(NSInteger)timeout shouldWait:(BOOL)shouldWait; - -@end diff --git a/Pods/Kiwi/Classes/KWTestCase.m b/Pods/Kiwi/Classes/KWTestCase.m deleted file mode 100644 index b14ea146..00000000 --- a/Pods/Kiwi/Classes/KWTestCase.m +++ /dev/null @@ -1,182 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWTestCase.h" -#import -#import "KWDeviceInfo.h" -#import "KWExistVerifier.h" -#import "KWFailure.h" -#import "KWIntercept.h" -#import "KWMatcherFactory.h" -#import "KWMatchVerifier.h" -#import "KWAsyncVerifier.h" -#import "KWObjCUtilities.h" -#import "KWStringUtilities.h" -#import "KWVerifying.h" -#import "NSMethodSignature+KiwiAdditions.h" - -@interface KWTestCase() - -#pragma mark - Properties - -@property (nonatomic, readonly) KWMatcherFactory *matcherFactory; -@property (nonatomic, readonly) NSMutableArray *verifiers; -@property (nonatomic, readonly) NSMutableArray *failures; -@end - -@implementation KWTestCase - -#pragma mark - Initializing - -// Initializer used by the SenTestingKit test suite to initialize a test case -// for each test invocation returned in +testInvocations. -- (id)initWithInvocation:(NSInvocation *)anInvocation { - if ((self = [super initWithInvocation:anInvocation])) { - matcherFactory = [[KWMatcherFactory alloc] init]; - verifiers = [[NSMutableArray alloc] init]; - failures = [[NSMutableArray alloc] init]; - } - - return self; -} - -- (void)dealloc { - [matcherFactory release]; - [verifiers release]; - [failures release]; - [super dealloc]; -} - -#pragma mark - Properties - -@synthesize verifiers; -@synthesize matcherFactory; -@synthesize failures; - -#pragma mark - Configuring Example Environments - -- (void)setUpExampleEnvironment { - [self.matcherFactory registerMatcherClassesWithNamespacePrefix:@"KW"]; -} - -- (void)tearDownExampleEnvironment { - KWClearStubsAndSpies(); -} - -#pragma mark - Marking Pending Examples - -- (void)markPendingWithCallSite:(KWCallSite *)aCallSite { - KWFailure *failure = [KWFailure failureWithCallSite:aCallSite format:@"PENDING"]; - [self reportFailure:failure]; -} - -- (void)markPendingWithCallSite:(KWCallSite *)aCallSite :(NSString *)aDescription { - KWFailure *failure = [KWFailure failureWithCallSite:aCallSite format:@"PENDING (%@)", aDescription]; - [self reportFailure:failure]; -} - -#pragma mark - Adding Verifiers - -- (id)addVerifier:(id)aVerifier { - if (![self.verifiers containsObject:aVerifier]) - [self.verifiers addObject:aVerifier]; - - return aVerifier; -} - -- (id)addExistVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite { - id verifier = [KWExistVerifier existVerifierWithExpectationType:anExpectationType callSite:aCallSite reporter:self]; - [self.verifiers addObject:verifier]; - return verifier; -} - -- (id)addMatchVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite { - id verifier = [KWMatchVerifier matchVerifierWithExpectationType:anExpectationType callSite:aCallSite matcherFactory:self.matcherFactory reporter:self]; - [self.verifiers addObject:verifier]; - return verifier; -} - -- (id)addAsyncVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite timeout:(NSInteger)timeout shouldWait:(BOOL)shouldWait { - id verifier = [KWAsyncVerifier asyncVerifierWithExpectationType:anExpectationType callSite:aCallSite matcherFactory:self.matcherFactory reporter:self probeTimeout:timeout shouldWait: shouldWait]; - [self.verifiers addObject:verifier]; - return verifier; -} - -#pragma mark - Reporting Failures - -+ (KWFailure *)tidiedFailureWithFailure:(KWFailure *)aFailure { - if ([KWDeviceInfo isSimulator]) { - // \uff1a is the unicode for a fill width colon, as opposed to a - // regular :. This escape is performed so that Xcode doesn't truncate - // the error in the build results window, which is nice for build - // tests. - NSString *escapedMessage = [aFailure.message stringByReplacingOccurrencesOfString:@":" withString:@"\uff1a"]; - return [KWFailure failureWithCallSite:aFailure.callSite message:escapedMessage]; - } else { - return aFailure; - } -} - -- (void)reportFailure:(KWFailure *)aFailure; { - [self.failures addObject:aFailure]; - KWFailure *tidiedFailure = [[self class] tidiedFailureWithFailure:aFailure]; - [self failWithException:[tidiedFailure exceptionValue]]; -} - -#pragma mark - Getting Invocations - -// Called by the SenTestingKit test suite to get an array of invocations that -// should be run on instances of test cases. -+ (NSArray *)testInvocations { - // Examples are methods returning void with no parameters in the receiver - // that begin with "it" followed by an uppercase word. - NSMutableArray *exampleInvocations = [[[NSMutableArray alloc] init] autorelease]; - unsigned int methodCount = 0; - Method *methods = class_copyMethodList([self class], &methodCount); - - for (unsigned int i = 0; i < methodCount; i++) { - SEL selector = method_getName(methods[i]); - NSString *selectorString = NSStringFromSelector(selector); - - if (KWStringHasStrictWordPrefix(selectorString, @"it")) { - const char *encoding = method_getTypeEncoding(methods[i]); - NSMethodSignature *signature = [NSMethodSignature signatureWithObjCTypes:encoding]; - - if ([signature numberOfMessageArguments] > 0 || - !KWObjCTypeEqualToObjCType([signature methodReturnType], @encode(void))) - continue; - - NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; - [invocation setSelector:selector]; - [exampleInvocations addObject:invocation]; - } - } - - free(methods); - return exampleInvocations; -} - -#pragma mark - Running Test Cases - -// Called by the SenTestingKit test suite when it is time to run the test. -- (void)invokeTest { - NSAutoreleasePool *subPool = [[NSAutoreleasePool alloc] init]; - [self setUpExampleEnvironment]; - - @try { - [super invokeTest]; - - for (id verifier in self.verifiers) - [verifier exampleWillEnd]; - } @catch (NSException *exception) { - [self failWithException:exception]; - } - - [self tearDownExampleEnvironment]; - [subPool release]; -} - -@end diff --git a/Pods/Kiwi/Classes/KWBeBetweenMatcher.h b/Pods/Kiwi/Classes/Matchers/KWBeBetweenMatcher.h similarity index 79% rename from Pods/Kiwi/Classes/KWBeBetweenMatcher.h rename to Pods/Kiwi/Classes/Matchers/KWBeBetweenMatcher.h index bb254771..fa08c75d 100644 --- a/Pods/Kiwi/Classes/KWBeBetweenMatcher.h +++ b/Pods/Kiwi/Classes/Matchers/KWBeBetweenMatcher.h @@ -7,11 +7,7 @@ #import "KiwiConfiguration.h" #import "KWMatcher.h" -@interface KWBeBetweenMatcher : KWMatcher { -@private - id lowerEndpoint; - id upperEndpoint; -} +@interface KWBeBetweenMatcher : KWMatcher #pragma mark - Configuring Matchers diff --git a/Pods/Kiwi/Classes/KWBeBetweenMatcher.m b/Pods/Kiwi/Classes/Matchers/KWBeBetweenMatcher.m similarity index 78% rename from Pods/Kiwi/Classes/KWBeBetweenMatcher.m rename to Pods/Kiwi/Classes/Matchers/KWBeBetweenMatcher.m index 6ec2164a..b33e3a29 100644 --- a/Pods/Kiwi/Classes/KWBeBetweenMatcher.m +++ b/Pods/Kiwi/Classes/Matchers/KWBeBetweenMatcher.m @@ -11,26 +11,13 @@ @interface KWBeBetweenMatcher() #pragma mark - Properties -@property (nonatomic, readwrite, retain) id lowerEndpoint; -@property (nonatomic, readwrite, retain) id upperEndpoint; +@property (nonatomic, strong) id lowerEndpoint; +@property (nonatomic, strong) id upperEndpoint; @end @implementation KWBeBetweenMatcher -#pragma mark - Initializing - -- (void)dealloc { - [lowerEndpoint release]; - [upperEndpoint release]; - [super dealloc]; -} - -#pragma mark - Properties - -@synthesize lowerEndpoint; -@synthesize upperEndpoint; - #pragma mark - Getting Matcher Strings + (NSArray *)matcherStrings { @@ -58,9 +45,8 @@ - (NSString *)failureMessageForShould { [KWFormatter formatObject:self.subject]]; } -- (NSString *)description -{ - return [NSString stringWithFormat:@"be between %@ and %@", self.lowerEndpoint, self.upperEndpoint]; +- (NSString *)description { + return [NSString stringWithFormat:@"be between %@ and %@", self.lowerEndpoint, self.upperEndpoint]; } #pragma mark - Configuring Matchers diff --git a/Pods/Kiwi/Classes/KWBeEmptyMatcher.h b/Pods/Kiwi/Classes/Matchers/KWBeEmptyMatcher.h similarity index 100% rename from Pods/Kiwi/Classes/KWBeEmptyMatcher.h rename to Pods/Kiwi/Classes/Matchers/KWBeEmptyMatcher.h diff --git a/Pods/Kiwi/Classes/KWBeEmptyMatcher.m b/Pods/Kiwi/Classes/Matchers/KWBeEmptyMatcher.m similarity index 93% rename from Pods/Kiwi/Classes/KWBeEmptyMatcher.m rename to Pods/Kiwi/Classes/Matchers/KWBeEmptyMatcher.m index 5963f182..8f0194d9 100644 --- a/Pods/Kiwi/Classes/KWBeEmptyMatcher.m +++ b/Pods/Kiwi/Classes/Matchers/KWBeEmptyMatcher.m @@ -17,10 +17,6 @@ @interface KWBeEmptyMatcher() @implementation KWBeEmptyMatcher -#pragma mark - Properties - -@synthesize count; - #pragma mark - Getting Matcher Strings + (NSArray *)matcherStrings { @@ -60,9 +56,8 @@ - (NSString *)failureMessageForShouldNot { return @"expected subject not to be empty"; } -- (NSString *)description -{ - return @"be empty"; +- (NSString *)description { + return @"be empty"; } #pragma mark - Configuring Matchers diff --git a/Pods/Kiwi/Classes/KWBeIdenticalToMatcher.h b/Pods/Kiwi/Classes/Matchers/KWBeIdenticalToMatcher.h similarity index 100% rename from Pods/Kiwi/Classes/KWBeIdenticalToMatcher.h rename to Pods/Kiwi/Classes/Matchers/KWBeIdenticalToMatcher.h diff --git a/Pods/Kiwi/Classes/KWBeIdenticalToMatcher.m b/Pods/Kiwi/Classes/Matchers/KWBeIdenticalToMatcher.m similarity index 80% rename from Pods/Kiwi/Classes/KWBeIdenticalToMatcher.m rename to Pods/Kiwi/Classes/Matchers/KWBeIdenticalToMatcher.m index 252ded68..beb98864 100644 --- a/Pods/Kiwi/Classes/KWBeIdenticalToMatcher.m +++ b/Pods/Kiwi/Classes/Matchers/KWBeIdenticalToMatcher.m @@ -11,23 +11,12 @@ @interface KWBeIdenticalToMatcher() #pragma mark - Properties -@property (nonatomic, readwrite, retain) id otherSubject; +@property (nonatomic, readwrite, strong) id otherSubject; @end @implementation KWBeIdenticalToMatcher -#pragma mark - Initializing - -- (void)dealloc { - [otherSubject release]; - [super dealloc]; -} - -#pragma mark - Properties - -@synthesize otherSubject; - #pragma mark - Getting Matcher Strings + (NSArray *)matcherStrings { @@ -56,9 +45,8 @@ - (NSString *)failureMessageForShouldNot { self.otherSubject]; } -- (NSString *)description -{ - return [NSString stringWithFormat:@"be identical to %@", self.otherSubject]; +- (NSString *)description { + return [NSString stringWithFormat:@"be identical to %@", self.otherSubject]; } #pragma mark - Configuring Matchers diff --git a/Pods/Kiwi/Classes/KWBeKindOfClassMatcher.h b/Pods/Kiwi/Classes/Matchers/KWBeKindOfClassMatcher.h similarity index 100% rename from Pods/Kiwi/Classes/KWBeKindOfClassMatcher.h rename to Pods/Kiwi/Classes/Matchers/KWBeKindOfClassMatcher.h diff --git a/Pods/Kiwi/Classes/KWBeKindOfClassMatcher.m b/Pods/Kiwi/Classes/Matchers/KWBeKindOfClassMatcher.m similarity index 77% rename from Pods/Kiwi/Classes/KWBeKindOfClassMatcher.m rename to Pods/Kiwi/Classes/Matchers/KWBeKindOfClassMatcher.m index b4f68457..90afc4f2 100644 --- a/Pods/Kiwi/Classes/KWBeKindOfClassMatcher.m +++ b/Pods/Kiwi/Classes/Matchers/KWBeKindOfClassMatcher.m @@ -9,18 +9,12 @@ @interface KWBeKindOfClassMatcher() -#pragma mark - Properties - -@property (nonatomic, readwrite, assign) Class targetClass; +@property (nonatomic, assign) Class targetClass; @end @implementation KWBeKindOfClassMatcher -#pragma mark - Properties - -@synthesize targetClass; - #pragma mark - Getting Matcher Strings + (NSArray *)matcherStrings { @@ -41,9 +35,8 @@ - (NSString *)failureMessageForShould { NSStringFromClass([self.subject class])]; } -- (NSString *)description -{ - return [NSString stringWithFormat:@"be kind of %@", NSStringFromClass(self.targetClass)]; +- (NSString *)description { + return [NSString stringWithFormat:@"be kind of %@", NSStringFromClass(self.targetClass)]; } #pragma mark - Configuring Matchers diff --git a/Pods/Kiwi/Classes/KWBeMemberOfClassMatcher.h b/Pods/Kiwi/Classes/Matchers/KWBeMemberOfClassMatcher.h similarity index 100% rename from Pods/Kiwi/Classes/KWBeMemberOfClassMatcher.h rename to Pods/Kiwi/Classes/Matchers/KWBeMemberOfClassMatcher.h diff --git a/Pods/Kiwi/Classes/KWBeMemberOfClassMatcher.m b/Pods/Kiwi/Classes/Matchers/KWBeMemberOfClassMatcher.m similarity index 81% rename from Pods/Kiwi/Classes/KWBeMemberOfClassMatcher.m rename to Pods/Kiwi/Classes/Matchers/KWBeMemberOfClassMatcher.m index 398ceee6..20f41e91 100644 --- a/Pods/Kiwi/Classes/KWBeMemberOfClassMatcher.m +++ b/Pods/Kiwi/Classes/Matchers/KWBeMemberOfClassMatcher.m @@ -9,18 +9,12 @@ @interface KWBeMemberOfClassMatcher() -#pragma mark - Properties - -@property (nonatomic, readwrite, assign) Class targetClass; +@property (nonatomic, assign) Class targetClass; @end @implementation KWBeMemberOfClassMatcher -#pragma mark - Properties - -@synthesize targetClass; - #pragma mark - Getting Matcher Strings + (NSArray *)matcherStrings { @@ -41,9 +35,8 @@ - (NSString *)failureMessageForShould { NSStringFromClass([self.subject class])]; } -- (NSString *)description -{ - return [NSString stringWithFormat:@"be member of %@", +- (NSString *)description { + return [NSString stringWithFormat:@"be member of %@", NSStringFromClass(self.targetClass)]; } diff --git a/Pods/Kiwi/Classes/KWBeSubclassOfClassMatcher.h b/Pods/Kiwi/Classes/Matchers/KWBeSubclassOfClassMatcher.h similarity index 100% rename from Pods/Kiwi/Classes/KWBeSubclassOfClassMatcher.h rename to Pods/Kiwi/Classes/Matchers/KWBeSubclassOfClassMatcher.h diff --git a/Pods/Kiwi/Classes/KWBeSubclassOfClassMatcher.m b/Pods/Kiwi/Classes/Matchers/KWBeSubclassOfClassMatcher.m similarity index 88% rename from Pods/Kiwi/Classes/KWBeSubclassOfClassMatcher.m rename to Pods/Kiwi/Classes/Matchers/KWBeSubclassOfClassMatcher.m index ec16871a..90740def 100644 --- a/Pods/Kiwi/Classes/KWBeSubclassOfClassMatcher.m +++ b/Pods/Kiwi/Classes/Matchers/KWBeSubclassOfClassMatcher.m @@ -11,16 +11,12 @@ @interface KWBeSubclassOfClassMatcher() #pragma mark - Properties -@property (nonatomic, readwrite, assign) Class targetClass; +@property (nonatomic, assign) Class targetClass; @end @implementation KWBeSubclassOfClassMatcher -#pragma mark - Properties - -@synthesize targetClass; - #pragma mark - Getting Matcher Strings + (NSArray *)matcherStrings { @@ -41,8 +37,7 @@ - (NSString *)failureMessageForShould { NSStringFromClass([self.subject class])]; } -- (NSString *)description -{ +- (NSString *)description { return [NSString stringWithFormat:@"be subclass of %@", NSStringFromClass(self.targetClass)]; } diff --git a/Pods/Kiwi/Classes/KWBeTrueMatcher.h b/Pods/Kiwi/Classes/Matchers/KWBeTrueMatcher.h similarity index 100% rename from Pods/Kiwi/Classes/KWBeTrueMatcher.h rename to Pods/Kiwi/Classes/Matchers/KWBeTrueMatcher.h diff --git a/Pods/Kiwi/Classes/KWBeTrueMatcher.m b/Pods/Kiwi/Classes/Matchers/KWBeTrueMatcher.m similarity index 79% rename from Pods/Kiwi/Classes/KWBeTrueMatcher.m rename to Pods/Kiwi/Classes/Matchers/KWBeTrueMatcher.m index d8cf376e..4a9b01a4 100644 --- a/Pods/Kiwi/Classes/KWBeTrueMatcher.m +++ b/Pods/Kiwi/Classes/Matchers/KWBeTrueMatcher.m @@ -8,18 +8,12 @@ @interface KWBeTrueMatcher() -#pragma mark - Properties - @property (nonatomic, readwrite) BOOL expectedValue; @end @implementation KWBeTrueMatcher -#pragma mark - Properties - -@synthesize expectedValue; - #pragma mark - Getting Matcher Strings + (NSArray *)matcherStrings { @@ -39,15 +33,14 @@ - (BOOL)evaluate { - (NSString *)failureMessageForShould { return [NSString stringWithFormat:@"expected subject to be %@", - expectedValue ? @"true" : @"false"]; + self.expectedValue ? @"true" : @"false"]; } -- (NSString *)description -{ - if (self.expectedValue == YES) { - return @"be true"; - } - return @"be false"; +- (NSString *)description { + if (self.expectedValue == YES) { + return @"be true"; + } + return @"be false"; } #pragma mark - Configuring Matchers diff --git a/Pods/Kiwi/Classes/KWBeWithinMatcher.h b/Pods/Kiwi/Classes/Matchers/KWBeWithinMatcher.h similarity index 100% rename from Pods/Kiwi/Classes/KWBeWithinMatcher.h rename to Pods/Kiwi/Classes/Matchers/KWBeWithinMatcher.h diff --git a/Pods/Kiwi/Classes/KWBeWithinMatcher.m b/Pods/Kiwi/Classes/Matchers/KWBeWithinMatcher.m similarity index 85% rename from Pods/Kiwi/Classes/KWBeWithinMatcher.m rename to Pods/Kiwi/Classes/Matchers/KWBeWithinMatcher.m index c56471c6..f05d0608 100644 --- a/Pods/Kiwi/Classes/KWBeWithinMatcher.m +++ b/Pods/Kiwi/Classes/Matchers/KWBeWithinMatcher.m @@ -11,28 +11,13 @@ @interface KWBeWithinMatcher() -#pragma mark - Properties - -@property (nonatomic, readwrite, retain) id distance; -@property (nonatomic, readwrite, retain) id otherValue; +@property (nonatomic, readwrite, strong) id distance; +@property (nonatomic, readwrite, strong) id otherValue; @end @implementation KWBeWithinMatcher -#pragma mark - Initializing - -- (void)dealloc { - [distance release]; - [otherValue release]; - [super dealloc]; -} - -#pragma mark - Properties - -@synthesize distance; -@synthesize otherValue; - #pragma mark - Getting Matcher Strings + (NSArray *)matcherStrings { @@ -88,9 +73,8 @@ - (NSString *)failureMessageForShould { [KWFormatter formatObject:self.subject]]; } -- (NSString *)description -{ - return [NSString stringWithFormat:@"be within %@ of %@", self.distance, self.otherValue]; +- (NSString *)description { + return [NSString stringWithFormat:@"be within %@ of %@", self.distance, self.otherValue]; } #pragma mark - Configuring Matchers diff --git a/Pods/Kiwi/Classes/KWBeZeroMatcher.h b/Pods/Kiwi/Classes/Matchers/KWBeZeroMatcher.h similarity index 100% rename from Pods/Kiwi/Classes/KWBeZeroMatcher.h rename to Pods/Kiwi/Classes/Matchers/KWBeZeroMatcher.h diff --git a/Pods/Kiwi/Classes/KWBeZeroMatcher.m b/Pods/Kiwi/Classes/Matchers/KWBeZeroMatcher.m similarity index 100% rename from Pods/Kiwi/Classes/KWBeZeroMatcher.m rename to Pods/Kiwi/Classes/Matchers/KWBeZeroMatcher.m diff --git a/Pods/Kiwi/Classes/KWBlockRaiseMatcher.h b/Pods/Kiwi/Classes/Matchers/KWBlockRaiseMatcher.h similarity index 100% rename from Pods/Kiwi/Classes/KWBlockRaiseMatcher.h rename to Pods/Kiwi/Classes/Matchers/KWBlockRaiseMatcher.h diff --git a/Pods/Kiwi/Classes/KWBlockRaiseMatcher.m b/Pods/Kiwi/Classes/Matchers/KWBlockRaiseMatcher.m similarity index 83% rename from Pods/Kiwi/Classes/KWBlockRaiseMatcher.m rename to Pods/Kiwi/Classes/Matchers/KWBlockRaiseMatcher.m index 3ca1aa9f..f4bd79e3 100644 --- a/Pods/Kiwi/Classes/KWBlockRaiseMatcher.m +++ b/Pods/Kiwi/Classes/Matchers/KWBlockRaiseMatcher.m @@ -9,28 +9,13 @@ @interface KWBlockRaiseMatcher() -#pragma mark - Properties - -@property (nonatomic, readwrite, retain) NSException *exception; -@property (nonatomic, readwrite, retain) NSException *actualException; +@property (nonatomic, readwrite, strong) NSException *exception; +@property (nonatomic, readwrite, strong) NSException *actualException; @end @implementation KWBlockRaiseMatcher -#pragma mark - Initializing - -- (void)dealloc { - [exception release]; - [actualException release]; - [super dealloc]; -} - -#pragma mark - Properties - -@synthesize exception; -@synthesize actualException; - #pragma mark - Getting Matcher Strings + (NSArray *)matcherStrings { @@ -111,9 +96,8 @@ - (void)raiseWithName:(NSString *)aName reason:(NSString *)aReason { self.exception = [NSException exceptionWithName:aName reason:aReason userInfo:nil]; } -- (NSString *)description -{ - return [NSString stringWithFormat:@"raise %@", [[self class] exceptionPhraseWithException:self.exception]]; +- (NSString *)description { + return [NSString stringWithFormat:@"raise %@", [[self class] exceptionPhraseWithException:self.exception]]; } @end diff --git a/Pods/Kiwi/Classes/KWChangeMatcher.h b/Pods/Kiwi/Classes/Matchers/KWChangeMatcher.h similarity index 100% rename from Pods/Kiwi/Classes/KWChangeMatcher.h rename to Pods/Kiwi/Classes/Matchers/KWChangeMatcher.h diff --git a/Pods/Kiwi/Classes/KWChangeMatcher.m b/Pods/Kiwi/Classes/Matchers/KWChangeMatcher.m similarity index 87% rename from Pods/Kiwi/Classes/KWChangeMatcher.m rename to Pods/Kiwi/Classes/Matchers/KWChangeMatcher.m index 321735ce..fb7a3764 100644 --- a/Pods/Kiwi/Classes/KWChangeMatcher.m +++ b/Pods/Kiwi/Classes/Matchers/KWChangeMatcher.m @@ -17,17 +17,6 @@ @interface KWChangeMatcher () @implementation KWChangeMatcher -@synthesize countBlock = _countBlock; -@synthesize anyChange = _anyChange; -@synthesize expectedDifference = _expectedDifference; -@synthesize expectedTotal = _expectedTotal; -@synthesize actualTotal = _actualTotal; - -- (void)dealloc { - Block_release(_countBlock); - [super dealloc]; -} - + (NSArray *)matcherStrings { return @[@"change:by:", @"change:"]; } diff --git a/Pods/Kiwi/Classes/KWConformToProtocolMatcher.h b/Pods/Kiwi/Classes/Matchers/KWConformToProtocolMatcher.h similarity index 100% rename from Pods/Kiwi/Classes/KWConformToProtocolMatcher.h rename to Pods/Kiwi/Classes/Matchers/KWConformToProtocolMatcher.h diff --git a/Pods/Kiwi/Classes/KWConformToProtocolMatcher.m b/Pods/Kiwi/Classes/Matchers/KWConformToProtocolMatcher.m similarity index 76% rename from Pods/Kiwi/Classes/KWConformToProtocolMatcher.m rename to Pods/Kiwi/Classes/Matchers/KWConformToProtocolMatcher.m index c17c04d3..deb8e2a5 100644 --- a/Pods/Kiwi/Classes/KWConformToProtocolMatcher.m +++ b/Pods/Kiwi/Classes/Matchers/KWConformToProtocolMatcher.m @@ -9,18 +9,12 @@ @interface KWConformToProtocolMatcher() -#pragma mark - Properties - -@property (nonatomic, readwrite, assign) Protocol *protocol; +@property (nonatomic, assign) Protocol *protocol; @end @implementation KWConformToProtocolMatcher -#pragma mark - Properties - -@synthesize protocol; - #pragma mark - Getting Matcher Strings + (NSArray *)matcherStrings { @@ -40,9 +34,8 @@ - (NSString *)failureMessageForShould { NSStringFromProtocol(self.protocol)]; } -- (NSString *)description -{ - return [NSString stringWithFormat:@"conform to %@ protocol", NSStringFromProtocol(self.protocol)]; +- (NSString *)description { + return [NSString stringWithFormat:@"conform to %@ protocol", NSStringFromProtocol(self.protocol)]; } #pragma mark - Configuring Matchers diff --git a/Pods/Kiwi/Classes/KWContainMatcher.h b/Pods/Kiwi/Classes/Matchers/KWContainMatcher.h similarity index 100% rename from Pods/Kiwi/Classes/KWContainMatcher.h rename to Pods/Kiwi/Classes/Matchers/KWContainMatcher.h diff --git a/Pods/Kiwi/Classes/KWContainMatcher.m b/Pods/Kiwi/Classes/Matchers/KWContainMatcher.m similarity index 85% rename from Pods/Kiwi/Classes/KWContainMatcher.m rename to Pods/Kiwi/Classes/Matchers/KWContainMatcher.m index b8b543d3..499e367f 100644 --- a/Pods/Kiwi/Classes/KWContainMatcher.m +++ b/Pods/Kiwi/Classes/Matchers/KWContainMatcher.m @@ -10,25 +10,12 @@ @interface KWContainMatcher() -#pragma mark - Properties - -@property (nonatomic, readwrite, retain) id objects; +@property (nonatomic, readwrite, strong) id objects; @end @implementation KWContainMatcher -#pragma mark - Initializing - -- (void)dealloc { - [objects release]; - [super dealloc]; -} - -#pragma mark - Properties - -@synthesize objects; - #pragma mark - Getting Matcher Strings + (NSArray *)matcherStrings { @@ -62,9 +49,8 @@ - (NSString *)failureMessageForShould { return [NSString stringWithFormat:@"expected subject to contain %@", [self objectsPhrase]]; } -- (NSString *)description -{ - return [NSString stringWithFormat:@"contain %@", [self objectsPhrase]]; +- (NSString *)description { + return [NSString stringWithFormat:@"contain %@", [self objectsPhrase]]; } #pragma mark - Configuring Matchers diff --git a/Pods/Kiwi/Classes/KWContainStringMatcher.h b/Pods/Kiwi/Classes/Matchers/KWContainStringMatcher.h similarity index 100% rename from Pods/Kiwi/Classes/KWContainStringMatcher.h rename to Pods/Kiwi/Classes/Matchers/KWContainStringMatcher.h diff --git a/Pods/Kiwi/Classes/KWContainStringMatcher.m b/Pods/Kiwi/Classes/Matchers/KWContainStringMatcher.m similarity index 100% rename from Pods/Kiwi/Classes/KWContainStringMatcher.m rename to Pods/Kiwi/Classes/Matchers/KWContainStringMatcher.m diff --git a/Pods/Kiwi/Classes/KWEqualMatcher.h b/Pods/Kiwi/Classes/Matchers/KWEqualMatcher.h similarity index 100% rename from Pods/Kiwi/Classes/KWEqualMatcher.h rename to Pods/Kiwi/Classes/Matchers/KWEqualMatcher.h diff --git a/Pods/Kiwi/Classes/KWEqualMatcher.m b/Pods/Kiwi/Classes/Matchers/KWEqualMatcher.m similarity index 76% rename from Pods/Kiwi/Classes/KWEqualMatcher.m rename to Pods/Kiwi/Classes/Matchers/KWEqualMatcher.m index 8a703ba0..51f30123 100644 --- a/Pods/Kiwi/Classes/KWEqualMatcher.m +++ b/Pods/Kiwi/Classes/Matchers/KWEqualMatcher.m @@ -12,7 +12,7 @@ @interface KWEqualMatcher() #pragma mark - Properties -@property (nonatomic, readwrite, retain) id otherSubject; +@property (nonatomic, readwrite, strong) id otherSubject; @end @@ -20,10 +20,6 @@ @implementation KWEqualMatcher #pragma mark - Initializing -- (void)dealloc { - [otherSubject release]; - [super dealloc]; -} #pragma mark - Properties @@ -49,18 +45,18 @@ - (BOOL)evaluate { - (NSString *)failureMessageForShould { return [NSString stringWithFormat:@"expected subject to equal %@, got %@", - [KWFormatter formatObject:self.otherSubject], - [KWFormatter formatObject:self.subject]]; + [KWFormatter formatObjectIncludingClass:self.otherSubject], + [KWFormatter formatObjectIncludingClass:self.subject]]; } - (NSString *)failureMessageForShouldNot { return [NSString stringWithFormat:@"expected subject not to equal %@", - [KWFormatter formatObject:self.otherSubject]]; + [KWFormatter formatObjectIncludingClass:self.otherSubject]]; } - (NSString *)description { - return [NSString stringWithFormat:@"equal %@", [KWFormatter formatObject:self.otherSubject]]; + return [NSString stringWithFormat:@"equal %@", [KWFormatter formatObjectIncludingClass:self.otherSubject]]; } #pragma mark - Configuring Matchers diff --git a/Pods/Kiwi/Classes/KWGenericMatchEvaluator.h b/Pods/Kiwi/Classes/Matchers/KWGenericMatchEvaluator.h similarity index 100% rename from Pods/Kiwi/Classes/KWGenericMatchEvaluator.h rename to Pods/Kiwi/Classes/Matchers/KWGenericMatchEvaluator.h diff --git a/Pods/Kiwi/Classes/KWGenericMatchEvaluator.m b/Pods/Kiwi/Classes/Matchers/KWGenericMatchEvaluator.m similarity index 91% rename from Pods/Kiwi/Classes/KWGenericMatchEvaluator.m rename to Pods/Kiwi/Classes/Matchers/KWGenericMatchEvaluator.m index 68e57178..138a03d6 100644 --- a/Pods/Kiwi/Classes/KWGenericMatchEvaluator.m +++ b/Pods/Kiwi/Classes/Matchers/KWGenericMatchEvaluator.m @@ -10,18 +10,17 @@ #import "KWStringUtilities.h" #import "KWObjCUtilities.h" #import +#import "KWGenericMatcher.h" @implementation KWGenericMatchEvaluator -// Returns true only if the object has a method with the signature "- (void)matches:(id)object" -+ (BOOL)isGenericMatcher:(id)object -{ +// Returns true only if the object has a method with the signature "- (BOOL)matches:(id)object" ++ (BOOL)isGenericMatcher:(id)object { Class theClass = object_getClass(object); if (theClass == NULL) { return NO; } - Method method = class_getInstanceMethod(theClass, @selector(matches:)); if (method == NULL) { @@ -51,8 +50,7 @@ + (BOOL)isGenericMatcher:(id)object return YES; } -+ (BOOL)genericMatcher:(id)matcher matches:(id)object -{ ++ (BOOL)genericMatcher:(id)matcher matches:(id)object { NSString *targetEncoding = KWEncodingWithObjCTypes(@encode(BOOL), @encode(id), @encode(SEL), @encode(id), nil); NSMethodSignature *signature = [NSMethodSignature signatureWithObjCTypes:[targetEncoding UTF8String]]; NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; diff --git a/Pods/Kiwi/Classes/KWGenericMatcher.h b/Pods/Kiwi/Classes/Matchers/KWGenericMatcher.h similarity index 69% rename from Pods/Kiwi/Classes/KWGenericMatcher.h rename to Pods/Kiwi/Classes/Matchers/KWGenericMatcher.h index b9f97954..be3c7f69 100644 --- a/Pods/Kiwi/Classes/KWGenericMatcher.h +++ b/Pods/Kiwi/Classes/Matchers/KWGenericMatcher.h @@ -9,10 +9,16 @@ #import #import "KWMatcher.h" +@protocol KWGenericMatching + +- (BOOL)matches:(id)object; + +@end + @interface KWGenericMatcher : KWMatcher #pragma mark - Configuring Matchers -- (void)match:(id)aMatcher; +- (void)match:(id)aMatcher; @end diff --git a/Pods/Kiwi/Classes/KWGenericMatcher.m b/Pods/Kiwi/Classes/Matchers/KWGenericMatcher.m similarity index 84% rename from Pods/Kiwi/Classes/KWGenericMatcher.m rename to Pods/Kiwi/Classes/Matchers/KWGenericMatcher.m index 03874c83..81cc8889 100644 --- a/Pods/Kiwi/Classes/KWGenericMatcher.m +++ b/Pods/Kiwi/Classes/Matchers/KWGenericMatcher.m @@ -11,22 +11,12 @@ @interface KWGenericMatcher () -#pragma mark - Properties - -@property (nonatomic, retain) id matcher; +@property (nonatomic, strong) id matcher; @end @implementation KWGenericMatcher -@synthesize matcher; - -- (void)dealloc -{ - [matcher release]; - [super dealloc]; -} - #pragma mark - Matching - (BOOL)evaluate { diff --git a/Pods/Kiwi/Classes/KWGenericMatchingAdditions.h b/Pods/Kiwi/Classes/Matchers/KWGenericMatchingAdditions.h similarity index 100% rename from Pods/Kiwi/Classes/KWGenericMatchingAdditions.h rename to Pods/Kiwi/Classes/Matchers/KWGenericMatchingAdditions.h diff --git a/Pods/Kiwi/Classes/KWGenericMatchingAdditions.m b/Pods/Kiwi/Classes/Matchers/KWGenericMatchingAdditions.m similarity index 86% rename from Pods/Kiwi/Classes/KWGenericMatchingAdditions.m rename to Pods/Kiwi/Classes/Matchers/KWGenericMatchingAdditions.m index 1df81f1f..37da7ddf 100644 --- a/Pods/Kiwi/Classes/KWGenericMatchingAdditions.m +++ b/Pods/Kiwi/Classes/Matchers/KWGenericMatchingAdditions.m @@ -12,8 +12,7 @@ @implementation NSObject (KiwiGenericMatchingAdditions) -- (BOOL)isEqualOrMatches:(id)object -{ +- (BOOL)isEqualOrMatches:(id)object { if ([KWGenericMatchEvaluator isGenericMatcher:self]) { return [KWGenericMatchEvaluator genericMatcher:self matches:object]; } @@ -24,16 +23,14 @@ - (BOOL)isEqualOrMatches:(id)object @implementation NSArray (KiwiGenericMatchingAdditions) -- (BOOL)containsObjectEqualToOrMatching:(id)object -{ +- (BOOL)containsObjectEqualToOrMatching:(id)object { if ([KWGenericMatchEvaluator isGenericMatcher:object]) { return [self containsObjectMatching:object]; } return [self containsObject:object]; } -- (BOOL)containsObjectMatching:(id)matcher -{ +- (BOOL)containsObjectMatching:(id)matcher { NSIndexSet *indexSet = [self indexesOfObjectsPassingTest:^(id obj, NSUInteger idx, BOOL *stop) { BOOL matches = [KWGenericMatchEvaluator genericMatcher:matcher matches:obj]; if (matches) { @@ -49,8 +46,7 @@ - (BOOL)containsObjectMatching:(id)matcher @implementation NSSet (KiwiGenericMatchingAdditions) -- (BOOL)containsObjectEqualToOrMatching:(id)object -{ +- (BOOL)containsObjectEqualToOrMatching:(id)object { if ([KWGenericMatchEvaluator isGenericMatcher:object]) { return [[self allObjects] containsObjectMatching:object]; } @@ -61,8 +57,7 @@ - (BOOL)containsObjectEqualToOrMatching:(id)object @implementation NSOrderedSet (KiwiGenericMatchingAdditions) -- (BOOL)containsObjectEqualToOrMatching:(id)object -{ +- (BOOL)containsObjectEqualToOrMatching:(id)object { if ([KWGenericMatchEvaluator isGenericMatcher:object]) { return [[self array] containsObjectMatching:object]; } diff --git a/Pods/Kiwi/Classes/KWHaveMatcher.h b/Pods/Kiwi/Classes/Matchers/KWHaveMatcher.h similarity index 96% rename from Pods/Kiwi/Classes/KWHaveMatcher.h rename to Pods/Kiwi/Classes/Matchers/KWHaveMatcher.h index bd3e7e2f..ae4637df 100644 --- a/Pods/Kiwi/Classes/KWHaveMatcher.h +++ b/Pods/Kiwi/Classes/Matchers/KWHaveMatcher.h @@ -35,11 +35,11 @@ @end -@interface KWMatchVerifier(KWHaveMatcherAdditions) - #pragma mark - Verifying -#pragma mark Invocation Capturing Methods +@interface KWMatchVerifier(KWHaveMatcherAdditions) + +#pragma mark - Invocation Capturing Methods - (id)have:(NSUInteger)aCount; - (id)haveAtLeast:(NSUInteger)aCount; diff --git a/Pods/Kiwi/Classes/KWHaveMatcher.m b/Pods/Kiwi/Classes/Matchers/KWHaveMatcher.m similarity index 91% rename from Pods/Kiwi/Classes/KWHaveMatcher.m rename to Pods/Kiwi/Classes/Matchers/KWHaveMatcher.m index 80991d35..58fbec90 100644 --- a/Pods/Kiwi/Classes/KWHaveMatcher.m +++ b/Pods/Kiwi/Classes/Matchers/KWHaveMatcher.m @@ -18,29 +18,15 @@ @interface KWHaveMatcher() #pragma mark - Properties -@property (nonatomic, readwrite) KWCountType countType; -@property (nonatomic, readwrite) NSUInteger count; -@property (nonatomic, readwrite, retain) NSInvocation *invocation; -@property (nonatomic, readwrite) NSUInteger actualCount; +@property (nonatomic, assign) KWCountType countType; +@property (nonatomic, assign) NSUInteger count; +@property (nonatomic, strong) NSInvocation *invocation; +@property (nonatomic, assign) NSUInteger actualCount; @end @implementation KWHaveMatcher -#pragma mark - Initializing - -- (void)dealloc { - [invocation release]; - [super dealloc]; -} - -#pragma mark - Properties - -@synthesize countType; -@synthesize count; -@synthesize invocation; -@synthesize actualCount; - #pragma mark - Getting Matcher Strings + (NSArray *)matcherStrings { @@ -71,7 +57,7 @@ - (id)targetObject { if (!KWObjCTypeIsObject([signature methodReturnType])) [NSException raise:@"KWMatcherEception" format:@"a valid collection was not specified"]; - id object = nil; + __unsafe_unretained id object = nil; [self.invocation invokeWithTarget:self.subject]; [self.invocation getReturnValue:&object]; return object; @@ -152,9 +138,8 @@ - (NSString *)failureMessageForShouldNot { #pragma mark - Description -- (NSString *)description -{ - return [NSString stringWithFormat:@"%@ %u %@", [self verbPhrase], (unsigned)self.count, [self itemPhrase]]; +- (NSString *)description { + return [NSString stringWithFormat:@"%@ %u %@", [self verbPhrase], (unsigned)self.count, [self itemPhrase]]; } #pragma mark - Configuring Matchers @@ -214,7 +199,7 @@ + (NSMethodSignature *)invocationCapturer:(KWInvocationCapturer *)anInvocationCa // Arbitrary selectors are allowed as expectation expression terminals when // the subject itself is a collection, so return a dummy method signature. - NSString *encoding = KWEncodingForVoidMethod(); + NSString *encoding = KWEncodingForDefaultMethod(); return [NSMethodSignature signatureWithObjCTypes:[encoding UTF8String]]; } @@ -239,11 +224,11 @@ + (void)invocationCapturer:(KWInvocationCapturer *)anInvocationCapturer didCaptu @end -@implementation KWMatchVerifier(KWHaveMatcherAdditions) - #pragma mark - Verifying -#pragma mark Invocation Capturing Methods +@implementation KWMatchVerifier(KWHaveMatcherAdditions) + +#pragma mark - Invocation Capturing Methods - (NSDictionary *)userInfoForHaveMatcherWithCountType:(KWCountType)aCountType count:(NSUInteger)aCount { return @{MatchVerifierKey: self, diff --git a/Pods/Kiwi/Classes/KWHaveValueMatcher.h b/Pods/Kiwi/Classes/Matchers/KWHaveValueMatcher.h similarity index 100% rename from Pods/Kiwi/Classes/KWHaveValueMatcher.h rename to Pods/Kiwi/Classes/Matchers/KWHaveValueMatcher.h diff --git a/Pods/Kiwi/Classes/Matchers/KWHaveValueMatcher.m b/Pods/Kiwi/Classes/Matchers/KWHaveValueMatcher.m new file mode 100644 index 00000000..9c6f8a69 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWHaveValueMatcher.m @@ -0,0 +1,128 @@ +// +// KWHaveValueMatcher.m +// Kiwi +// +// Created by Luke Redpath on 24/01/2011. +// Copyright 2011 Allen Ding. All rights reserved. +// + +#import "KWHaveValueMatcher.h" +#import "KWGenericMatchingAdditions.h" +#import "KWGenericMatcher.h" +#import "KWFormatter.h" + +@interface KWHaveValueMatcher() + +@property (nonatomic, strong) NSString *expectedKey; +@property (nonatomic, strong) NSString *expectedKeyPath; +@property (nonatomic, strong) id expectedValue; + +@end + +@implementation KWHaveValueMatcher + +#pragma mark - Getting Matcher Strings + ++ (NSArray *)matcherStrings { + return @[@"haveValue:forKey:", + @"haveValueForKey:", + @"haveValue:forKeyPath:", + @"haveValueForKeyPath:"]; +} + +#pragma mark - Matching + +- (BOOL)evaluate { + BOOL matched = NO; + + @try { + id value = [self subjectValue]; + + if (value) { + matched = YES; + + if (self.expectedValue) { + matched = [self.expectedValue isEqualOrMatches:value]; + } + } + } + @catch (NSException * e) {} // catch KVO non-existent key errors + + return matched; +} + +- (NSString *)failureMessageForShould { + if (self.expectedValue == nil) { + return [NSString stringWithFormat:@"expected subject to have a value for key %@", + [KWFormatter formatObject:self.expectedKey]]; + } + id subjectValue = [self subjectValue]; + if (subjectValue) { + return [NSString stringWithFormat:@"expected subject to have value %@ for key %@, but it had value %@ instead", + [KWFormatter formatObject:self.expectedValue], + [KWFormatter formatObject:self.expectedKey], + [KWFormatter formatObject:subjectValue]]; + } else { + return [NSString stringWithFormat:@"expected subject to have value %@ for key %@, but the key was not present", + [KWFormatter formatObject:self.expectedValue], + [KWFormatter formatObject:self.expectedKey]]; + } +} + +- (id)subjectValue { + id value = nil; + + if (self.expectedKey) { + value = [self.subject valueForKey:self.expectedKey]; + } else + if (self.expectedKeyPath) { + value = [self.subject valueForKeyPath:self.expectedKeyPath]; + } + return value; +} + +- (NSString *)description { + NSString *keyDescription = nil; + + if (self.expectedKey) { + keyDescription = [NSString stringWithFormat:@"key %@", [KWFormatter formatObject:self.expectedKey]]; + } + else { + keyDescription = [NSString stringWithFormat:@"keypath %@", [KWFormatter formatObject:self.expectedKeyPath]]; + } + + NSString *valueDescription = nil; + + if (self.expectedValue) { + valueDescription = [NSString stringWithFormat:@"value %@", [KWFormatter formatObject:self.expectedValue]]; + } + else { + valueDescription = @"value"; + } + + return [NSString stringWithFormat:@"have %@ for %@", valueDescription, keyDescription]; +} + +#pragma mark - Configuring Matchers + +- (void)haveValue:(id)value forKey:(NSString *)key { + self.expectedKey = key; + self.expectedValue = value; +} + +- (void)haveValue:(id)value forKeyPath:(NSString *)key { + self.expectedKeyPath = key; + self.expectedValue = value; +} + +- (void)haveValueForKey:(NSString *)key { + self.expectedKey = key; + self.expectedValue = nil; +} + +- (void)haveValueForKeyPath:(NSString *)keyPath { + self.expectedKeyPath = keyPath; + self.expectedValue = nil; +} + +@end diff --git a/Pods/Kiwi/Classes/KWInequalityMatcher.h b/Pods/Kiwi/Classes/Matchers/KWInequalityMatcher.h similarity index 67% rename from Pods/Kiwi/Classes/KWInequalityMatcher.h rename to Pods/Kiwi/Classes/Matchers/KWInequalityMatcher.h index 567a3216..003ba4b4 100644 --- a/Pods/Kiwi/Classes/KWInequalityMatcher.h +++ b/Pods/Kiwi/Classes/Matchers/KWInequalityMatcher.h @@ -7,15 +7,6 @@ #import "KiwiConfiguration.h" #import "KWMatcher.h" -enum { - KWInequalityTypeLessThan, - KWInequalityTypeLessThanOrEqualTo, - KWInequalityTypeGreaterThan, - KWInequalityTypeGreaterThanOrEqualTo -}; - -typedef NSUInteger KWInequalityType; - @interface KWInequalityMatcher : KWMatcher #pragma mark - Configuring Matchers diff --git a/Pods/Kiwi/Classes/KWInequalityMatcher.m b/Pods/Kiwi/Classes/Matchers/KWInequalityMatcher.m similarity index 89% rename from Pods/Kiwi/Classes/KWInequalityMatcher.m rename to Pods/Kiwi/Classes/Matchers/KWInequalityMatcher.m index 89073bd3..573e3705 100644 --- a/Pods/Kiwi/Classes/KWInequalityMatcher.m +++ b/Pods/Kiwi/Classes/Matchers/KWInequalityMatcher.m @@ -7,29 +7,24 @@ #import "KWInequalityMatcher.h" #import "KWFormatter.h" +typedef NS_ENUM(NSUInteger, KWInequalityType) { + KWInequalityTypeLessThan, + KWInequalityTypeLessThanOrEqualTo, + KWInequalityTypeGreaterThan, + KWInequalityTypeGreaterThanOrEqualTo +}; + @interface KWInequalityMatcher() #pragma mark - Properties -@property (nonatomic, readwrite) KWInequalityType inequalityType; -@property (nonatomic, readwrite, retain) id otherValue; +@property (nonatomic, assign) KWInequalityType inequalityType; +@property (nonatomic, strong) id otherValue; @end @implementation KWInequalityMatcher -#pragma mark - Initializing - -- (void)dealloc { - [otherValue release]; - [super dealloc]; -} - -#pragma mark - Properties - -@synthesize inequalityType; -@synthesize otherValue; - #pragma mark - Getting Matcher Strings + (NSArray *)matcherStrings { @@ -85,8 +80,7 @@ - (NSString *)failureMessageForShould { [KWFormatter formatObject:self.subject]]; } -- (NSString *)description -{ +- (NSString *)description { return [NSString stringWithFormat:@"be %@ %@", [self comparisonPhrase], [KWFormatter formatObject:self.otherValue]]; } diff --git a/Pods/Kiwi/Classes/KWBeNilMatcher.h b/Pods/Kiwi/Classes/Matchers/KWNilMatcher.h similarity index 60% rename from Pods/Kiwi/Classes/KWBeNilMatcher.h rename to Pods/Kiwi/Classes/Matchers/KWNilMatcher.h index 3a65f5fe..51f60572 100644 --- a/Pods/Kiwi/Classes/KWBeNilMatcher.h +++ b/Pods/Kiwi/Classes/Matchers/KWNilMatcher.h @@ -9,12 +9,15 @@ #import #import "KWMatcher.h" -@interface KWBeNilMatcher : KWMatcher { +@interface KWNilMatcher : KWMatcher -} - (void)beNil; +- (void)beNonNil; + +- (void)beNil:(BOOL)workaroundArgument; +- (void)beNonNil:(BOOL)workaroundArgument; -- (void)beNil:(BOOL)matcherHasSubject; + (BOOL)verifyNilSubject; ++ (BOOL)verifyNonNilSubject; @end diff --git a/Pods/Kiwi/Classes/Matchers/KWNilMatcher.m b/Pods/Kiwi/Classes/Matchers/KWNilMatcher.m new file mode 100644 index 00000000..70c9c317 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWNilMatcher.m @@ -0,0 +1,112 @@ +// +// KWBeNilMatcher.m +// iOSFalconCore +// +// Created by Luke Redpath on 14/01/2011. +// Copyright 2011 LJR Software Limited. All rights reserved. +// + +#import "KWNilMatcher.h" +#import "KWExample.h" +#import "KWExampleSuiteBuilder.h" +#import "KWFormatter.h" +#import "KWMatchVerifier.h" +#import "KWVerifying.h" + +@interface KWNilMatcher () + +@property (nonatomic, assign) BOOL expectsNil; + +@end + +@implementation KWNilMatcher + +#pragma mark - Getting Matcher Strings + ++ (NSArray *)matcherStrings { + return @[@"beNil", @"beNil:", @"beNonNil", @"beNonNil:"]; +} + +#pragma mark - Matching + +- (BOOL)isNilMatcher { + return YES; +} + +- (BOOL)evaluate { + if (self.expectsNil) { + return (self.subject == nil); + } else { + return (self.subject != nil); + } +} + +// These two methods gets invoked by be(Non)Nil macro in case the subject is nil +// (and therefore cannot have a verifier attached). + ++ (BOOL)verifyNilSubject { + return [self verifySubjectExpectingNil:YES]; +} + ++ (BOOL)verifyNonNilSubject { + return [self verifySubjectExpectingNil:NO]; +} + +#pragma mark Getting Failure Messages + +- (NSString *)failureMessageForShould { + if (self.expectsNil) { + return [NSString stringWithFormat:@"expected subject to be nil, got %@", + [KWFormatter formatObject:self.subject]]; + } else { + return [NSString stringWithFormat:@"expected subject not to be nil"]; + } +} + +- (NSString *)failureMessageForShouldNot { + if (self.expectsNil) { + return [NSString stringWithFormat:@"expected subject not to be nil"]; + } else { + return [NSString stringWithFormat:@"expected subject to be nil, got %@", + [KWFormatter formatObject:self.subject]]; + } +} + +- (NSString *)description { + return [NSString stringWithFormat:@"be %@nil", self.expectsNil ? @"" : @"non "]; +} + +- (void)beNil { + self.expectsNil = YES; +} +- (void)beNil:(BOOL)workaroundArgument { + self.expectsNil = YES; +} + +- (void)beNonNil { + self.expectsNil = NO; +} +- (void)beNonNil:(BOOL)workaroundArgument { + self.expectsNil = NO; +} + +#pragma mark - Internal Methods + ++ (BOOL)verifySubjectExpectingNil:(BOOL)expectNil { + KWExample *currentExample = [[KWExampleSuiteBuilder sharedExampleSuiteBuilder] currentExample]; + id verifier = currentExample.unresolvedVerifier; + + if (verifier && ![verifier subject] && [verifier isKindOfClass:[KWMatchVerifier class]]) { + KWMatchVerifier *matchVerifier = (KWMatchVerifier *)verifier; + if (expectNil) { + [matchVerifier performSelector:@selector(beNil)]; + } else { + [matchVerifier performSelector:@selector(beNonNil)]; + } + currentExample.unresolvedVerifier = nil; + return NO; + } + return YES; +} + +@end diff --git a/Pods/Kiwi/Classes/KWRaiseMatcher.h b/Pods/Kiwi/Classes/Matchers/KWRaiseMatcher.h similarity index 100% rename from Pods/Kiwi/Classes/KWRaiseMatcher.h rename to Pods/Kiwi/Classes/Matchers/KWRaiseMatcher.h diff --git a/Pods/Kiwi/Classes/KWRaiseMatcher.m b/Pods/Kiwi/Classes/Matchers/KWRaiseMatcher.m similarity index 86% rename from Pods/Kiwi/Classes/KWRaiseMatcher.m rename to Pods/Kiwi/Classes/Matchers/KWRaiseMatcher.m index 5cde0b71..3cb9878b 100644 --- a/Pods/Kiwi/Classes/KWRaiseMatcher.m +++ b/Pods/Kiwi/Classes/Matchers/KWRaiseMatcher.m @@ -11,27 +11,14 @@ @interface KWRaiseMatcher() #pragma mark - Properties -@property (nonatomic, readwrite) SEL selector; -@property (nonatomic, readwrite, retain) NSException *exception; -@property (nonatomic, readwrite, retain) NSException *actualException; +@property (nonatomic, assign) SEL selector; +@property (nonatomic, strong) NSException *exception; +@property (nonatomic, strong) NSException *actualException; @end @implementation KWRaiseMatcher -#pragma mark - Initializing - -- (void)dealloc { - [exception release]; - [actualException release]; - [super dealloc]; -} - -#pragma mark - Properties - -@synthesize selector; -@synthesize exception; -@synthesize actualException; #pragma mark - Getting Matcher Strings @@ -46,7 +33,10 @@ + (NSArray *)matcherStrings { - (BOOL)evaluate { @try { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" [self.subject performSelector:self.selector]; +#pragma clang diagnostic pop } @catch (NSException *anException) { self.actualException = anException; @@ -92,8 +82,7 @@ - (NSString *)failureMessageForShouldNot { [[self class] exceptionPhraseWithException:self.actualException]]; } -- (NSString *)description -{ +- (NSString *)description { return [NSString stringWithFormat:@"raise %@ when sent %@", [[self class] exceptionPhraseWithException:self.exception], NSStringFromSelector(self.selector)]; } diff --git a/Pods/Kiwi/Classes/KWReceiveMatcher.h b/Pods/Kiwi/Classes/Matchers/KWReceiveMatcher.h similarity index 100% rename from Pods/Kiwi/Classes/KWReceiveMatcher.h rename to Pods/Kiwi/Classes/Matchers/KWReceiveMatcher.h diff --git a/Pods/Kiwi/Classes/KWReceiveMatcher.m b/Pods/Kiwi/Classes/Matchers/KWReceiveMatcher.m similarity index 97% rename from Pods/Kiwi/Classes/KWReceiveMatcher.m rename to Pods/Kiwi/Classes/Matchers/KWReceiveMatcher.m index 6d3a3c43..f81e033a 100644 --- a/Pods/Kiwi/Classes/KWReceiveMatcher.m +++ b/Pods/Kiwi/Classes/Matchers/KWReceiveMatcher.m @@ -23,7 +23,7 @@ @interface KWReceiveMatcher() #pragma mark - Properties -@property (nonatomic, readwrite, retain) KWMessageTracker *messageTracker; +@property (nonatomic, readwrite, strong) KWMessageTracker *messageTracker; @end @@ -32,23 +32,14 @@ @implementation KWReceiveMatcher #pragma mark - Initializing - (id)initWithSubject:(id)anObject { - if ((self = [super initWithSubject:anObject])) { - self.willEvaluateMultipleTimes = NO; - } - - return self; -} - -- (void)dealloc { - [messageTracker release]; - [super dealloc]; + self = [super initWithSubject:anObject]; + if (self) { + _willEvaluateMultipleTimes = NO; + } + + return self; } -#pragma mark - Properties - -@synthesize messageTracker; -@synthesize willEvaluateMultipleTimes; - #pragma mark - Getting Matcher Strings + (NSArray *)matcherStrings { @@ -174,7 +165,7 @@ + (NSMethodSignature *)invocationCapturer:(KWInvocationCapturer *)anInvocationCa if ([verifier.subject respondsToSelector:aSelector]) return [verifier.subject methodSignatureForSelector:aSelector]; - NSString *encoding = KWEncodingForVoidMethod(); + NSString *encoding = KWEncodingForDefaultMethod(); return [NSMethodSignature signatureWithObjCTypes:[encoding UTF8String]]; } diff --git a/Pods/Kiwi/Classes/KWRegularExpressionPatternMatcher.h b/Pods/Kiwi/Classes/Matchers/KWRegularExpressionPatternMatcher.h similarity index 100% rename from Pods/Kiwi/Classes/KWRegularExpressionPatternMatcher.h rename to Pods/Kiwi/Classes/Matchers/KWRegularExpressionPatternMatcher.h diff --git a/Pods/Kiwi/Classes/KWRegularExpressionPatternMatcher.m b/Pods/Kiwi/Classes/Matchers/KWRegularExpressionPatternMatcher.m similarity index 97% rename from Pods/Kiwi/Classes/KWRegularExpressionPatternMatcher.m rename to Pods/Kiwi/Classes/Matchers/KWRegularExpressionPatternMatcher.m index 16388499..c5c38e3c 100644 --- a/Pods/Kiwi/Classes/KWRegularExpressionPatternMatcher.m +++ b/Pods/Kiwi/Classes/Matchers/KWRegularExpressionPatternMatcher.m @@ -20,10 +20,6 @@ @interface KWRegularExpressionPatternMatcher () @implementation KWRegularExpressionPatternMatcher -- (void)dealloc { - self.pattern = nil; - [super dealloc]; -} #pragma mark - Getting Matcher Strings diff --git a/Pods/Kiwi/Classes/KWRespondToSelectorMatcher.h b/Pods/Kiwi/Classes/Matchers/KWRespondToSelectorMatcher.h similarity index 100% rename from Pods/Kiwi/Classes/KWRespondToSelectorMatcher.h rename to Pods/Kiwi/Classes/Matchers/KWRespondToSelectorMatcher.h diff --git a/Pods/Kiwi/Classes/KWRespondToSelectorMatcher.m b/Pods/Kiwi/Classes/Matchers/KWRespondToSelectorMatcher.m similarity index 79% rename from Pods/Kiwi/Classes/KWRespondToSelectorMatcher.m rename to Pods/Kiwi/Classes/Matchers/KWRespondToSelectorMatcher.m index 30ba61fc..3920dd89 100644 --- a/Pods/Kiwi/Classes/KWRespondToSelectorMatcher.m +++ b/Pods/Kiwi/Classes/Matchers/KWRespondToSelectorMatcher.m @@ -11,16 +11,12 @@ @interface KWRespondToSelectorMatcher() #pragma mark - Properties -@property (nonatomic, readwrite) SEL selector; +@property (nonatomic, assign) SEL selector; @end @implementation KWRespondToSelectorMatcher -#pragma mark - Properties - -@synthesize selector; - #pragma mark - Getting Matcher Strings + (NSArray *)matcherStrings { @@ -40,9 +36,8 @@ - (NSString *)failureMessageForShould { NSStringFromSelector(self.selector)]; } -- (NSString *)description -{ - return [NSString stringWithFormat:@"respond to -%@", NSStringFromSelector(self.selector)]; +- (NSString *)description { + return [NSString stringWithFormat:@"respond to -%@", NSStringFromSelector(self.selector)]; } #pragma mark - Configuring Matchers diff --git a/Pods/Kiwi/Classes/KWStringContainsMatcher.h b/Pods/Kiwi/Classes/Matchers/KWStringContainsMatcher.h similarity index 81% rename from Pods/Kiwi/Classes/KWStringContainsMatcher.h rename to Pods/Kiwi/Classes/Matchers/KWStringContainsMatcher.h index 9198576b..c972629c 100644 --- a/Pods/Kiwi/Classes/KWStringContainsMatcher.h +++ b/Pods/Kiwi/Classes/Matchers/KWStringContainsMatcher.h @@ -7,8 +7,9 @@ // #import +#import "KWGenericMatcher.h" -@interface KWStringContainsMatcher : NSObject +@interface KWStringContainsMatcher : NSObject + (id)matcherWithSubstring:(NSString *)aSubstring; - (id)initWithSubstring:(NSString *)aSubstring; diff --git a/Pods/Kiwi/Classes/Matchers/KWStringContainsMatcher.m b/Pods/Kiwi/Classes/Matchers/KWStringContainsMatcher.m new file mode 100644 index 00000000..6230e81b --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWStringContainsMatcher.m @@ -0,0 +1,42 @@ +// +// StringContainsMatcher.m +// Kiwi +// +// Created by Stewart Gleadow on 7/06/12. +// Copyright (c) 2012 Allen Ding. All rights reserved. +// + +#import "KWStringContainsMatcher.h" + +@interface KWStringContainsMatcher(){} +@property (nonatomic, copy) NSString *substring; +@end + +@implementation KWStringContainsMatcher + ++ (id)matcherWithSubstring:(NSString *)aSubstring { + return [[self alloc] initWithSubstring:aSubstring]; +} + +- (id)initWithSubstring:(NSString *)aSubstring { + self = [super init]; + if (self) { + _substring = [aSubstring copy]; + } + return self; +} + + +- (BOOL)matches:(id)item { + if (![item respondsToSelector:@selector(rangeOfString:)]) { + return NO; + } + + return [item rangeOfString:self.substring].location != NSNotFound; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"a string with substring '%@'", self.substring]; +} + +@end diff --git a/Pods/Kiwi/Classes/KWStringPrefixMatcher.h b/Pods/Kiwi/Classes/Matchers/KWStringPrefixMatcher.h similarity index 100% rename from Pods/Kiwi/Classes/KWStringPrefixMatcher.h rename to Pods/Kiwi/Classes/Matchers/KWStringPrefixMatcher.h diff --git a/Pods/Kiwi/Classes/KWStringPrefixMatcher.m b/Pods/Kiwi/Classes/Matchers/KWStringPrefixMatcher.m similarity index 54% rename from Pods/Kiwi/Classes/KWStringPrefixMatcher.m rename to Pods/Kiwi/Classes/Matchers/KWStringPrefixMatcher.m index d6e59ed5..81c1f89a 100644 --- a/Pods/Kiwi/Classes/KWStringPrefixMatcher.m +++ b/Pods/Kiwi/Classes/Matchers/KWStringPrefixMatcher.m @@ -15,30 +15,27 @@ @interface KWStringPrefixMatcher(){} @implementation KWStringPrefixMatcher + (id)matcherWithPrefix:(NSString *)aPrefix { - return [[[self alloc] initWithPrefix:aPrefix] autorelease]; + return [[self alloc] initWithPrefix:aPrefix]; } - (id)initWithPrefix:(NSString *)aPrefix { - if ((self = [super init])) { - _prefix = [aPrefix copy]; - } - return self; + self = [super init]; + if (self) { + _prefix = [aPrefix copy]; + } + return self; } -- (void)dealloc { - [_prefix release]; - [super dealloc]; -} - (BOOL)matches:(id)item { - if (![item respondsToSelector:@selector(hasPrefix:)]) - return NO; - - return [item hasPrefix:self.prefix]; + if (![item respondsToSelector:@selector(hasPrefix:)]) + return NO; + + return [item hasPrefix:self.prefix]; } - (NSString *)description { - return [NSString stringWithFormat:@"a string with prefix '%@'", self.prefix]; + return [NSString stringWithFormat:@"a string with prefix '%@'", self.prefix]; } @end diff --git a/Pods/Kiwi/Classes/KWUserDefinedMatcher.h b/Pods/Kiwi/Classes/Matchers/KWUserDefinedMatcher.h similarity index 90% rename from Pods/Kiwi/Classes/KWUserDefinedMatcher.h rename to Pods/Kiwi/Classes/Matchers/KWUserDefinedMatcher.h index 188f7589..d1d50c7b 100644 --- a/Pods/Kiwi/Classes/KWUserDefinedMatcher.h +++ b/Pods/Kiwi/Classes/Matchers/KWUserDefinedMatcher.h @@ -16,12 +16,11 @@ typedef BOOL (^KWUserDefinedMatcherBlock)(); @property (nonatomic, assign) SEL selector; @property (nonatomic, copy) NSString *failureMessageForShould; @property (nonatomic, copy) NSString *failureMessageForShouldNot; -@property (nonatomic, assign) KWUserDefinedMatcherBlock matcherBlock; +@property (nonatomic, copy) KWUserDefinedMatcherBlock matcherBlock; @property (nonatomic, copy) NSString *description; + (id)matcherWithSubject:(id)aSubject block:(KWUserDefinedMatcherBlock)aBlock; - (id)initWithSubject:(id)aSubject block:(KWUserDefinedMatcherBlock)aBlock; -- (void)setSubject:(id)aSubject; @end #pragma mark - @@ -35,7 +34,7 @@ typedef NSString * (^KWUserDefinedMatcherMessageBlock)(id); KWUserDefinedMatcherMessageBlock failureMessageForShouldNotBlock; NSString *description; } -@property (nonatomic, readonly) NSString *key; +@property (nonatomic, copy, readonly) NSString *key; + (id)builder; + (id)builderForSelector:(SEL)aSelector; diff --git a/Pods/Kiwi/Classes/KWUserDefinedMatcher.m b/Pods/Kiwi/Classes/Matchers/KWUserDefinedMatcher.m similarity index 77% rename from Pods/Kiwi/Classes/KWUserDefinedMatcher.m rename to Pods/Kiwi/Classes/Matchers/KWUserDefinedMatcher.m index 46bcbca7..bdb42943 100644 --- a/Pods/Kiwi/Classes/KWUserDefinedMatcher.m +++ b/Pods/Kiwi/Classes/Matchers/KWUserDefinedMatcher.m @@ -20,29 +20,21 @@ @implementation KWUserDefinedMatcher @synthesize matcherBlock; @synthesize description; -+ (id)matcherWithSubject:(id)aSubject block:(KWUserDefinedMatcherBlock)aBlock -{ - return [[[self alloc] initWithSubject:aSubject block:aBlock] autorelease]; ++ (id)matcherWithSubject:(id)aSubject block:(KWUserDefinedMatcherBlock)aBlock { + return [[self alloc] initWithSubject:aSubject block:aBlock]; } -- (id)initWithSubject:(id)aSubject block:(KWUserDefinedMatcherBlock)aBlock -{ - if ((self = [super initWithSubject:aSubject])) { +- (id)initWithSubject:(id)aSubject block:(KWUserDefinedMatcherBlock)aBlock { + self = [super initWithSubject:aSubject]; + if (self) { matcherBlock = [aBlock copy]; self.description = @"match user defined matcher"; } return self; } -- (void)dealloc -{ - [_invocation release]; - [matcherBlock release]; - [super dealloc]; -} -- (BOOL)evaluate -{ +- (BOOL)evaluate { BOOL result; if (self.invocation.methodSignature.numberOfArguments == 3) { @@ -55,31 +47,20 @@ - (BOOL)evaluate return result; } -- (void)setSubject:(id)aSubject { - if (aSubject != subject) { - [subject release]; - subject = [aSubject retain]; - } -} - #pragma mark - Message forwarding -- (BOOL)respondsToSelector:(SEL)aSelector -{ +- (BOOL)respondsToSelector:(SEL)aSelector { if (aSelector == self.selector) { return YES; } return [super respondsToSelector:aSelector]; } -- (void)forwardInvocation:(NSInvocation *)anInvocation -{ - [_invocation autorelease]; - _invocation = [anInvocation retain]; +- (void)forwardInvocation:(NSInvocation *)anInvocation { + _invocation = anInvocation; } -- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector -{ +- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector { if (aSelector == self.selector) { NSString *selectorString = NSStringFromSelector(self.selector); @@ -106,29 +87,23 @@ - (void)matcherMethodWithArgument:(id)argument {} @implementation KWUserDefinedMatcherBuilder -+ (id)builder -{ ++ (id)builder { return [self builderForSelector:nil]; } + (id)builderForSelector:(SEL)aSelector { - return [[[self alloc] initWithSelector:aSelector] autorelease]; + return [[self alloc] initWithSelector:aSelector]; } - (id)initWithSelector:(SEL)aSelector { - if ((self = [super init])) { + self = [super init]; + if (self) { matcher = [[KWUserDefinedMatcher alloc] init]; matcher.selector = aSelector; } return self; } -- (void)dealloc -{ - [matcher release]; - [failureMessageForShouldBlock release]; - [super dealloc]; -} - (NSString *)key { return NSStringFromSelector(matcher.selector); @@ -141,18 +116,14 @@ - (void)match:(KWUserDefinedMatcherBlock)block { } - (void)failureMessageForShould:(KWUserDefinedMatcherMessageBlock)block { - [failureMessageForShouldBlock release]; failureMessageForShouldBlock = [block copy]; } - (void)failureMessageForShouldNot:(KWUserDefinedMatcherMessageBlock)block { - [failureMessageForShouldNotBlock release]; failureMessageForShouldNotBlock = [block copy]; } -- (void)description:(NSString *)aDescription -{ - [description release]; +- (void)description:(NSString *)aDescription { description = [aDescription copy]; } diff --git a/Pods/Kiwi/Classes/KWMock.h b/Pods/Kiwi/Classes/Mocking/KWMock.h similarity index 88% rename from Pods/Kiwi/Classes/KWMock.h rename to Pods/Kiwi/Classes/Mocking/KWMock.h index abbe7f2f..81639412 100644 --- a/Pods/Kiwi/Classes/KWMock.h +++ b/Pods/Kiwi/Classes/Mocking/KWMock.h @@ -45,12 +45,12 @@ #pragma mark - Properties -@property (nonatomic, readonly) BOOL isNullMock; -@property (nonatomic, readonly) BOOL isPartialMock; -@property (nonatomic, readonly) NSString *mockName; -@property (nonatomic, readonly) Class mockedClass; -@property (nonatomic, readonly) id mockedObject; -@property (nonatomic, readonly) Protocol *mockedProtocol; +@property (nonatomic, assign, readonly) BOOL isNullMock; +@property (nonatomic, assign, readonly) BOOL isPartialMock; +@property (nonatomic, copy, readonly) NSString *mockName; +@property (nonatomic, assign, readonly) Class mockedClass; +@property (nonatomic, strong, readonly) id mockedObject; +@property (nonatomic, assign, readonly) Protocol *mockedProtocol; #pragma mark - Stubbing Methods diff --git a/Pods/Kiwi/Classes/KWMock.m b/Pods/Kiwi/Classes/Mocking/KWMock.m similarity index 89% rename from Pods/Kiwi/Classes/KWMock.m rename to Pods/Kiwi/Classes/Mocking/KWMock.m index cc87faa5..90db7b55 100644 --- a/Pods/Kiwi/Classes/KWMock.m +++ b/Pods/Kiwi/Classes/Mocking/KWMock.m @@ -24,21 +24,10 @@ @interface KWMock() -#pragma mark - Initializing - -- (id)initAsNullMock:(BOOL)nullMockFlag withName:(NSString *)aName forClass:(Class)aClass protocol:(Protocol *)aProtocol; - -#pragma mark - Properties - @property (nonatomic, readonly) NSMutableArray *stubs; @property (nonatomic, readonly) NSMutableArray *expectedMessagePatterns; @property (nonatomic, readonly) NSMutableDictionary *messageSpies; - -#pragma mark - Handling Invocations - -- (BOOL)processReceivedInvocation:(NSInvocation *)invocation; - @end @implementation KWMock @@ -53,7 +42,7 @@ - (id)init { NSInvocation *invocation = [NSInvocation invocationWithTarget:self selector:_cmd]; if ([self processReceivedInvocation:invocation]) { - id result = nil; + __unsafe_unretained id result = nil; [invocation getReturnValue:&result]; return result; } else { @@ -97,14 +86,15 @@ - (id)initAsNullMockWithName:(NSString *)aName forProtocol:(Protocol *)aProtocol } - (id)initAsNullMock:(BOOL)nullMockFlag withName:(NSString *)aName forClass:(Class)aClass protocol:(Protocol *)aProtocol { - if ((self = [super init])) { - isNullMock = nullMockFlag; - mockName = [aName copy]; - mockedClass = aClass; - mockedProtocol = aProtocol; - stubs = [[NSMutableArray alloc] init]; - expectedMessagePatterns = [[NSMutableArray alloc] init]; - messageSpies = [[NSMutableDictionary alloc] init]; + self = [super init]; + if (self) { + _isNullMock = nullMockFlag; + _mockName = [aName copy]; + _mockedClass = aClass; + _mockedProtocol = aProtocol; + _stubs = [[NSMutableArray alloc] init]; + _expectedMessagePatterns = [[NSMutableArray alloc] init]; + _messageSpies = [[NSMutableDictionary alloc] init]; } return self; @@ -115,74 +105,54 @@ - (id)initAsPartialMockForObject:(id)object { } - (id)initAsPartialMockWithName:(NSString *)aName forObject:(id)object { - if ((self = [self initAsNullMock:YES withName:aName forClass:[object class] protocol:nil])) { - isPartialMock = YES; - mockedObject = [object retain]; + self = [self initAsNullMock:YES withName:aName forClass:[object class] protocol:nil]; + if (self) { + _isPartialMock = YES; + _mockedObject = object; } return self; } + (id)mockForClass:(Class)aClass { - return [[[self alloc] initForClass:aClass] autorelease]; + return [[self alloc] initForClass:aClass]; } + (id)mockForProtocol:(Protocol *)aProtocol { - return [[[self alloc] initForProtocol:aProtocol] autorelease]; + return [[self alloc] initForProtocol:aProtocol]; } + (id)mockWithName:(NSString *)aName forClass:(Class)aClass { - return [[[self alloc] initWithName:aName forClass:aClass] autorelease]; + return [[self alloc] initWithName:aName forClass:aClass]; } + (id)mockWithName:(NSString *)aName forProtocol:(Protocol *)aProtocol { - return [[[self alloc] initWithName:aName forProtocol:aProtocol] autorelease]; + return [[self alloc] initWithName:aName forProtocol:aProtocol]; } + (id)nullMockForClass:(Class)aClass { - return [[[self alloc] initAsNullMockForClass:aClass] autorelease]; + return [[self alloc] initAsNullMockForClass:aClass]; } + (id)nullMockForProtocol:(Protocol *)aProtocol { - return [[[self alloc] initAsNullMockForProtocol:aProtocol] autorelease]; + return [[self alloc] initAsNullMockForProtocol:aProtocol]; } + (id)nullMockWithName:(NSString *)aName forClass:(Class)aClass { - return [[[self alloc] initAsNullMockWithName:aName forClass:aClass] autorelease]; + return [[self alloc] initAsNullMockWithName:aName forClass:aClass]; } + (id)nullMockWithName:(NSString *)aName forProtocol:(Protocol *)aProtocol { - return [[[self alloc] initAsNullMockWithName:aName forProtocol:aProtocol] autorelease]; + return [[self alloc] initAsNullMockWithName:aName forProtocol:aProtocol]; } + (id)partialMockWithName:(NSString *)aName forObject:(id)object { - return [[[self alloc] initAsPartialMockWithName:aName forObject:object] autorelease]; + return [[self alloc] initAsPartialMockWithName:aName forObject:object]; } + (id)partialMockForObject:(id)object { - return [[[self alloc] initAsPartialMockForObject:object] autorelease]; -} - -- (void)dealloc { - [mockedObject release]; - [mockName release]; - [stubs release]; - [expectedMessagePatterns release]; - [messageSpies release]; - [super dealloc]; + return [[self alloc] initAsPartialMockForObject:object]; } -#pragma mark - Properties - -@synthesize isPartialMock; -@synthesize isNullMock; -@synthesize mockName; -@synthesize mockedObject; -@synthesize mockedClass; -@synthesize mockedProtocol; -@synthesize stubs; -@synthesize expectedMessagePatterns; -@synthesize messageSpies; - #pragma mark - Getting Transitive Closure For Mocked Protocols - (NSSet *)mockedProtocolTransitiveClosureSet { @@ -199,7 +169,7 @@ - (NSSet *)mockedProtocolTransitiveClosureSet { [protocolQueue removeLastObject]; unsigned int count = 0; - Protocol **protocols = (Protocol **)protocol_copyProtocolList(protocol, &count); + Protocol *__unsafe_unretained*protocols = protocol_copyProtocolList(protocol, &count); if (count == 0) continue; @@ -325,7 +295,6 @@ - (void)addMessageSpy:(id)aSpy forMessagePattern:(KWMessagePatt if (messagePatternSpies == nil) { messagePatternSpies = [[NSMutableArray alloc] init]; (self.messageSpies)[aMessagePattern] = messagePatternSpies; - [messagePatternSpies release]; } NSValue *spyWrapper = [NSValue valueWithNonretainedObject:aSpy]; @@ -442,7 +411,7 @@ - (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector { if (methodSignature != nil) return methodSignature; - NSString *encoding = KWEncodingForVoidMethod(); + NSString *encoding = KWEncodingForDefaultMethod(); return [NSMethodSignature signatureWithObjCTypes:[encoding UTF8String]]; } @@ -454,7 +423,7 @@ - (void)forwardInvocation:(NSInvocation *)anInvocation { if ([self processReceivedInvocation:anInvocation]) return; - if (isPartialMock) + if (self.isPartialMock) [anInvocation invokeWithTarget:self.mockedObject]; if (self.isNullMock) @@ -579,7 +548,7 @@ - (NSString *)description { NSInvocation *invocation = [NSInvocation invocationWithTarget:self selector:_cmd]; if ([self processReceivedInvocation:invocation]) { - NSString *result = nil; + __unsafe_unretained NSString *result = nil; [invocation getReturnValue:&result]; return result; } else { @@ -593,7 +562,7 @@ - (id)copy { NSInvocation *invocation = [NSInvocation invocationWithTarget:self selector:_cmd]; if ([self processReceivedInvocation:invocation]) { - id result = nil; + __unsafe_unretained id result = nil; [invocation getReturnValue:&result]; return result; } else { @@ -607,7 +576,7 @@ - (id)mutableCopy { NSInvocation *invocation = [NSInvocation invocationWithTarget:self selector:_cmd]; if ([self processReceivedInvocation:invocation]) { - id result = nil; + __unsafe_unretained id result = nil; [invocation getReturnValue:&result]; return result; } else { @@ -624,7 +593,7 @@ static id valueForKeyImplementation(id self, SEL _cmd, id key) { NSInvocation *invocation = [NSInvocation invocationWithTarget:self selector:_cmd messageArguments:&key]; if ([self processReceivedInvocation:invocation]) { - id result = nil; + __unsafe_unretained id result = nil; [invocation getReturnValue:&result]; return result; } else { diff --git a/Pods/Kiwi/Classes/NSObject+KiwiMockAdditions.h b/Pods/Kiwi/Classes/Mocking/NSObject+KiwiMockAdditions.h similarity index 100% rename from Pods/Kiwi/Classes/NSObject+KiwiMockAdditions.h rename to Pods/Kiwi/Classes/Mocking/NSObject+KiwiMockAdditions.h diff --git a/Pods/Kiwi/Classes/NSObject+KiwiMockAdditions.m b/Pods/Kiwi/Classes/Mocking/NSObject+KiwiMockAdditions.m similarity index 100% rename from Pods/Kiwi/Classes/NSObject+KiwiMockAdditions.m rename to Pods/Kiwi/Classes/Mocking/NSObject+KiwiMockAdditions.m diff --git a/Pods/Kiwi/Classes/KWAfterAllNode.h b/Pods/Kiwi/Classes/Nodes/KWAfterAllNode.h similarity index 76% rename from Pods/Kiwi/Classes/KWAfterAllNode.h rename to Pods/Kiwi/Classes/Nodes/KWAfterAllNode.h index 4b449622..421ea5a6 100644 --- a/Pods/Kiwi/Classes/KWAfterAllNode.h +++ b/Pods/Kiwi/Classes/Nodes/KWAfterAllNode.h @@ -12,6 +12,6 @@ #pragma mark - Initializing -+ (id)afterAllNodeWithCallSite:(KWCallSite *)aCallSite block:(KWVoidBlock)aBlock; ++ (id)afterAllNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block; @end diff --git a/Pods/Kiwi/Classes/KWAfterAllNode.m b/Pods/Kiwi/Classes/Nodes/KWAfterAllNode.m similarity index 67% rename from Pods/Kiwi/Classes/KWAfterAllNode.m rename to Pods/Kiwi/Classes/Nodes/KWAfterAllNode.m index 30a4d26f..efb0a038 100644 --- a/Pods/Kiwi/Classes/KWAfterAllNode.m +++ b/Pods/Kiwi/Classes/Nodes/KWAfterAllNode.m @@ -11,8 +11,8 @@ @implementation KWAfterAllNode #pragma mark - Initializing -+ (id)afterAllNodeWithCallSite:(KWCallSite *)aCallSite block:(KWVoidBlock)aBlock { - return [[[self alloc] initWithCallSite:aCallSite description:nil block:aBlock] autorelease]; ++ (id)afterAllNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block { + return [[self alloc] initWithCallSite:aCallSite description:nil block:block]; } #pragma mark - Accepting Visitors diff --git a/Pods/Kiwi/Classes/KWAfterEachNode.h b/Pods/Kiwi/Classes/Nodes/KWAfterEachNode.h similarity index 76% rename from Pods/Kiwi/Classes/KWAfterEachNode.h rename to Pods/Kiwi/Classes/Nodes/KWAfterEachNode.h index dc15386e..4e682796 100644 --- a/Pods/Kiwi/Classes/KWAfterEachNode.h +++ b/Pods/Kiwi/Classes/Nodes/KWAfterEachNode.h @@ -12,6 +12,6 @@ #pragma mark - Initializing -+ (id)afterEachNodeWithCallSite:(KWCallSite *)aCallSite block:(KWVoidBlock)aBlock; ++ (id)afterEachNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block; @end diff --git a/Pods/Kiwi/Classes/KWAfterEachNode.m b/Pods/Kiwi/Classes/Nodes/KWAfterEachNode.m similarity index 67% rename from Pods/Kiwi/Classes/KWAfterEachNode.m rename to Pods/Kiwi/Classes/Nodes/KWAfterEachNode.m index 6cbdf207..e6edd3ea 100644 --- a/Pods/Kiwi/Classes/KWAfterEachNode.m +++ b/Pods/Kiwi/Classes/Nodes/KWAfterEachNode.m @@ -11,8 +11,8 @@ @implementation KWAfterEachNode #pragma mark - Initializing -+ (id)afterEachNodeWithCallSite:(KWCallSite *)aCallSite block:(KWVoidBlock)aBlock { - return [[[self alloc] initWithCallSite:aCallSite description:nil block:aBlock] autorelease]; ++ (id)afterEachNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block { + return [[self alloc] initWithCallSite:aCallSite description:nil block:block]; } #pragma mark - Accepting Visitors diff --git a/Pods/Kiwi/Classes/KWBeforeAllNode.h b/Pods/Kiwi/Classes/Nodes/KWBeforeAllNode.h similarity index 76% rename from Pods/Kiwi/Classes/KWBeforeAllNode.h rename to Pods/Kiwi/Classes/Nodes/KWBeforeAllNode.h index ed389ce7..f5cd2e17 100644 --- a/Pods/Kiwi/Classes/KWBeforeAllNode.h +++ b/Pods/Kiwi/Classes/Nodes/KWBeforeAllNode.h @@ -12,6 +12,6 @@ #pragma mark - Initializing -+ (id)beforeAllNodeWithCallSite:(KWCallSite *)aCallSite block:(KWVoidBlock)aBlock; ++ (id)beforeAllNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block; @end diff --git a/Pods/Kiwi/Classes/KWBeforeAllNode.m b/Pods/Kiwi/Classes/Nodes/KWBeforeAllNode.m similarity index 67% rename from Pods/Kiwi/Classes/KWBeforeAllNode.m rename to Pods/Kiwi/Classes/Nodes/KWBeforeAllNode.m index dbb7d65c..41b2e085 100644 --- a/Pods/Kiwi/Classes/KWBeforeAllNode.m +++ b/Pods/Kiwi/Classes/Nodes/KWBeforeAllNode.m @@ -11,8 +11,8 @@ @implementation KWBeforeAllNode #pragma mark - Initializing -+ (id)beforeAllNodeWithCallSite:(KWCallSite *)aCallSite block:(KWVoidBlock)aBlock { - return [[[self alloc] initWithCallSite:aCallSite description:nil block:aBlock] autorelease]; ++ (id)beforeAllNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block { + return [[self alloc] initWithCallSite:aCallSite description:nil block:block]; } #pragma mark - Accepting Visitors diff --git a/Pods/Kiwi/Classes/KWBeforeEachNode.h b/Pods/Kiwi/Classes/Nodes/KWBeforeEachNode.h similarity index 93% rename from Pods/Kiwi/Classes/KWBeforeEachNode.h rename to Pods/Kiwi/Classes/Nodes/KWBeforeEachNode.h index 732f37e1..21c52291 100644 --- a/Pods/Kiwi/Classes/KWBeforeEachNode.h +++ b/Pods/Kiwi/Classes/Nodes/KWBeforeEachNode.h @@ -12,6 +12,6 @@ #pragma mark - Initializing -+ (id)beforeEachNodeWithCallSite:(KWCallSite *)aCallSite block:(KWVoidBlock)aBlock; ++ (id)beforeEachNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block; @end diff --git a/Pods/Kiwi/Classes/KWBeforeEachNode.m b/Pods/Kiwi/Classes/Nodes/KWBeforeEachNode.m similarity index 79% rename from Pods/Kiwi/Classes/KWBeforeEachNode.m rename to Pods/Kiwi/Classes/Nodes/KWBeforeEachNode.m index e1285e2c..8c143e5c 100644 --- a/Pods/Kiwi/Classes/KWBeforeEachNode.m +++ b/Pods/Kiwi/Classes/Nodes/KWBeforeEachNode.m @@ -11,8 +11,8 @@ @implementation KWBeforeEachNode #pragma mark - Initializing -+ (id)beforeEachNodeWithCallSite:(KWCallSite *)aCallSite block:(KWVoidBlock)aBlock { - return [[[self alloc] initWithCallSite:aCallSite description:nil block:aBlock] autorelease]; ++ (id)beforeEachNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block { + return [[self alloc] initWithCallSite:aCallSite description:nil block:block]; } #pragma mark - Accepting Visitors diff --git a/Pods/Kiwi/Classes/KWBlockNode.h b/Pods/Kiwi/Classes/Nodes/KWBlockNode.h similarity index 75% rename from Pods/Kiwi/Classes/KWBlockNode.h rename to Pods/Kiwi/Classes/Nodes/KWBlockNode.h index 1f4d8602..050ba5c4 100644 --- a/Pods/Kiwi/Classes/KWBlockNode.h +++ b/Pods/Kiwi/Classes/Nodes/KWBlockNode.h @@ -13,11 +13,11 @@ #pragma mark - Initializing -- (id)initWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription block:(KWVoidBlock)aBlock; +- (id)initWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription block:(void (^)(void))block; #pragma mark - Getting Call Sites -@property (nonatomic, readonly) KWCallSite *callSite; +@property (nonatomic, strong, readonly) KWCallSite *callSite; #pragma mark - Getting Descriptions @@ -25,7 +25,7 @@ #pragma mark - Getting Blocks -@property (nonatomic, readonly) KWVoidBlock block; +@property (nonatomic, copy, readonly) void (^block)(void); #pragma mark - Performing blocks diff --git a/Pods/Kiwi/Classes/Nodes/KWBlockNode.m b/Pods/Kiwi/Classes/Nodes/KWBlockNode.m new file mode 100644 index 00000000..69ffd1fb --- /dev/null +++ b/Pods/Kiwi/Classes/Nodes/KWBlockNode.m @@ -0,0 +1,28 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWBlockNode.h" + +@implementation KWBlockNode + +#pragma mark - Initializing + +- (id)initWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription block:(void (^)(void))block { + self = [super init]; + if (self) { + _callSite = aCallSite; + _description = aDescription; + _block = [block copy]; + } + + return self; +} + +- (void)performBlock { + if (self.block != nil) { self.block(); } +} + +@end diff --git a/Pods/Kiwi/Classes/KWContextNode.h b/Pods/Kiwi/Classes/Nodes/KWContextNode.h similarity index 73% rename from Pods/Kiwi/Classes/KWContextNode.h rename to Pods/Kiwi/Classes/Nodes/KWContextNode.h index 65d3c7fb..23ddf33a 100644 --- a/Pods/Kiwi/Classes/KWContextNode.h +++ b/Pods/Kiwi/Classes/Nodes/KWContextNode.h @@ -27,7 +27,7 @@ #pragma mark - Getting Call Sites -@property (nonatomic, readonly) KWCallSite *callSite; +@property (nonatomic, weak, readonly) KWCallSite *callSite; #pragma mark - Getting Descriptions @@ -35,15 +35,16 @@ #pragma mark - Managing Nodes -@property (nonatomic, readwrite, retain) KWRegisterMatchersNode *registerMatchersNode; -@property (nonatomic, readwrite, retain) KWBeforeAllNode *beforeAllNode; -@property (nonatomic, readwrite, retain) KWAfterAllNode *afterAllNode; -@property (nonatomic, readwrite, retain) KWBeforeEachNode *beforeEachNode; -@property (nonatomic, readwrite, retain) KWAfterEachNode *afterEachNode; -@property (nonatomic, readonly) KWContextNode *parentContext; +@property (nonatomic, strong) KWRegisterMatchersNode *registerMatchersNode; +@property (nonatomic, strong) KWBeforeAllNode *beforeAllNode; +@property (nonatomic, strong) KWAfterAllNode *afterAllNode; +@property (nonatomic, strong) KWBeforeEachNode *beforeEachNode; +@property (nonatomic, strong) KWAfterEachNode *afterEachNode; @property (nonatomic, readonly) NSArray *nodes; -@property (nonatomic) BOOL isFocused; +@property (nonatomic, readonly) KWContextNode *parentContext; + +@property (nonatomic, assign) BOOL isFocused; - (void)addContextNode:(KWContextNode *)aNode; - (void)addItNode:(KWItNode *)aNode; diff --git a/Pods/Kiwi/Classes/KWContextNode.m b/Pods/Kiwi/Classes/Nodes/KWContextNode.m similarity index 64% rename from Pods/Kiwi/Classes/KWContextNode.m rename to Pods/Kiwi/Classes/Nodes/KWContextNode.m index 7c30bc74..0b2c17a9 100644 --- a/Pods/Kiwi/Classes/KWContextNode.m +++ b/Pods/Kiwi/Classes/Nodes/KWContextNode.m @@ -4,70 +4,45 @@ // Copyright 2010 Allen Ding. All rights reserved. // +#import "KWAfterAllNode.h" +#import "KWAfterEachNode.h" +#import "KWBeforeAllNode.h" +#import "KWBeforeEachNode.h" +#import "KWCallSite.h" #import "KWContextNode.h" #import "KWExampleNodeVisitor.h" #import "KWExample.h" #import "KWFailure.h" +#import "KWRegisterMatchersNode.h" #import "KWSymbolicator.h" -@interface KWContextNode() { - NSUInteger performedExampleCount; -} +@interface KWContextNode() + +@property (nonatomic, assign) NSUInteger performedExampleCount; + @end @implementation KWContextNode -@synthesize parentContext; - #pragma mark - Initializing -- (id)initWithCallSite:(KWCallSite *)aCallSite parentContext:(KWContextNode *)node description:(NSString *)aDescription -{ - if ((self = [super init])) { - parentContext = [node retain]; - callSite = [aCallSite retain]; - description = [aDescription copy]; - nodes = [[NSMutableArray alloc] init]; - performedExampleCount = 0; +- (id)initWithCallSite:(KWCallSite *)aCallSite parentContext:(KWContextNode *)node description:(NSString *)aDescription { + self = [super init]; + if (self) { + _parentContext = node; + _callSite = aCallSite; + _description = [aDescription copy]; + _nodes = [[NSMutableArray alloc] init]; + _performedExampleCount = 0; } return self; } + (id)contextNodeWithCallSite:(KWCallSite *)aCallSite parentContext:(KWContextNode *)contextNode description:(NSString *)aDescription { - return [[[self alloc] initWithCallSite:aCallSite parentContext:contextNode description:aDescription] autorelease]; -} - -- (void)dealloc { - [parentContext release]; - [callSite release]; - [description release]; - [registerMatchersNode release]; - [beforeAllNode release]; - [afterAllNode release]; - [beforeEachNode release]; - [afterEachNode release]; - [nodes release]; - [super dealloc]; + return [[self alloc] initWithCallSite:aCallSite parentContext:contextNode description:aDescription]; } -#pragma mark - Getting Call Sites - -@synthesize callSite; - -#pragma mark - Getting Descriptions - -@synthesize description; - -#pragma mark - Managing Nodes - -@synthesize registerMatchersNode; -@synthesize beforeAllNode; -@synthesize afterAllNode; -@synthesize beforeEachNode; -@synthesize afterEachNode; -@synthesize nodes; - - (void)addContextNode:(KWContextNode *)aNode { [(NSMutableArray *)self.nodes addObject:aNode]; } @@ -76,21 +51,21 @@ - (void)setRegisterMatchersNode:(KWRegisterMatchersNode *)aNode { if (self.registerMatchersNode != nil) [NSException raise:@"KWContextNodeException" format:@"a register matchers node already exists"]; - registerMatchersNode = [aNode retain]; + _registerMatchersNode = aNode; } - (void)setBeforeEachNode:(KWBeforeEachNode *)aNode { if (self.beforeEachNode != nil) [NSException raise:@"KWContextNodeException" format:@"a before each node already exists"]; - beforeEachNode = [aNode retain]; + _beforeEachNode = aNode; } - (void)setAfterEachNode:(KWAfterEachNode *)aNode { if (self.afterEachNode != nil) [NSException raise:@"KWContextNodeException" format:@"an after each node already exists"]; - afterEachNode = [aNode retain]; + _afterEachNode = aNode; } - (void)addItNode:(KWItNode *)aNode { @@ -109,7 +84,7 @@ - (void)performExample:(KWExample *)example withBlock:(void (^)(void))exampleBlo @try { [self.registerMatchersNode acceptExampleNodeVisitor:example]; - if (performedExampleCount == 0) { + if (self.performedExampleCount == 0) { [self.beforeAllNode acceptExampleNodeVisitor:example]; } @@ -128,15 +103,14 @@ - (void)performExample:(KWExample *)example withBlock:(void (^)(void))exampleBlo [example reportFailure:failure]; } - performedExampleCount++; + self.performedExampleCount++; }; - if (parentContext == nil) { + if (self.parentContext == nil) { outerExampleBlock(); } else { - [parentContext performExample:example withBlock:outerExampleBlock]; + [self.parentContext performExample:example withBlock:outerExampleBlock]; } - [innerExampleBlock release]; } #pragma mark - Accepting Visitors diff --git a/Pods/Kiwi/Classes/KWExampleNode.h b/Pods/Kiwi/Classes/Nodes/KWExampleNode.h similarity index 100% rename from Pods/Kiwi/Classes/KWExampleNode.h rename to Pods/Kiwi/Classes/Nodes/KWExampleNode.h diff --git a/Pods/Kiwi/Classes/KWItNode.h b/Pods/Kiwi/Classes/Nodes/KWItNode.h similarity index 75% rename from Pods/Kiwi/Classes/KWItNode.h rename to Pods/Kiwi/Classes/Nodes/KWItNode.h index 39713c0f..11bcec0b 100644 --- a/Pods/Kiwi/Classes/KWItNode.h +++ b/Pods/Kiwi/Classes/Nodes/KWItNode.h @@ -14,14 +14,14 @@ @interface KWItNode : KWBlockNode -@property (nonatomic, assign) KWExample *example; -@property (nonatomic, retain, readonly) KWContextNode *context; +@property (nonatomic, strong) KWExample *example; +@property (nonatomic, weak, readonly) KWContextNode *context; #pragma mark - Initializing + (id)itNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription context:(KWContextNode *)context - block:(KWVoidBlock)aBlock; + block:(void (^)(void))block; @end diff --git a/Pods/Kiwi/Classes/KWItNode.m b/Pods/Kiwi/Classes/Nodes/KWItNode.m similarity index 52% rename from Pods/Kiwi/Classes/KWItNode.m rename to Pods/Kiwi/Classes/Nodes/KWItNode.m index b6a79781..5e3339d8 100644 --- a/Pods/Kiwi/Classes/KWItNode.m +++ b/Pods/Kiwi/Classes/Nodes/KWItNode.m @@ -12,25 +12,21 @@ @interface KWItNode () -@property (nonatomic, retain, readwrite) KWContextNode *context; +@property (nonatomic, weak) KWContextNode *context; @end @implementation KWItNode -@synthesize context = _context; -@synthesize example; - #pragma mark - Initializing + (id)itNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription context:(KWContextNode *)context - block:(KWVoidBlock)aBlock; -{ - KWItNode *itNode = [[self alloc] initWithCallSite:aCallSite description:aDescription block:aBlock]; + block:(void (^)(void))block { + KWItNode *itNode = [[self alloc] initWithCallSite:aCallSite description:aDescription block:block]; itNode.context = context; - return [itNode autorelease]; + return itNode; } #pragma mark - Accepting Visitors @@ -41,29 +37,26 @@ - (void)acceptExampleNodeVisitor:(id)aVisitor { #pragma mark - Runtime Description support -- (NSString *)description -{ - NSString *description = [super description]; - if (description == nil) { - description = [self.example generateDescriptionForAnonymousItNode]; - } - return description; +- (NSString *)description { + NSString *description = [super description]; + if (description == nil) { + description = [self.example generateDescriptionForAnonymousItNode]; + } + return description; } -#pragma mark - #pragma mark - Accessing the context stack -- (NSArray *)contextStack -{ - NSMutableArray *contextStack = [NSMutableArray array]; - - KWContextNode *currentContext = _context; - - while (currentContext) { - [contextStack addObject:currentContext]; - currentContext = currentContext.parentContext; - } - return contextStack; +- (NSArray *)contextStack { + NSMutableArray *contextStack = [NSMutableArray array]; + + KWContextNode *currentContext = _context; + + while (currentContext) { + [contextStack addObject:currentContext]; + currentContext = currentContext.parentContext; + } + return contextStack; } @end diff --git a/Pods/Kiwi/Classes/KWPendingNode.h b/Pods/Kiwi/Classes/Nodes/KWPendingNode.h similarity index 91% rename from Pods/Kiwi/Classes/KWPendingNode.h rename to Pods/Kiwi/Classes/Nodes/KWPendingNode.h index 7ba74730..f67876ec 100644 --- a/Pods/Kiwi/Classes/KWPendingNode.h +++ b/Pods/Kiwi/Classes/Nodes/KWPendingNode.h @@ -12,7 +12,7 @@ @interface KWPendingNode : NSObject -@property (nonatomic, readonly, retain) KWContextNode *context; +@property (nonatomic, readonly, strong) KWContextNode *context; #pragma mark - Initializing diff --git a/Pods/Kiwi/Classes/KWPendingNode.m b/Pods/Kiwi/Classes/Nodes/KWPendingNode.m similarity index 65% rename from Pods/Kiwi/Classes/KWPendingNode.m rename to Pods/Kiwi/Classes/Nodes/KWPendingNode.m index fdfc001a..097faf7a 100644 --- a/Pods/Kiwi/Classes/KWPendingNode.m +++ b/Pods/Kiwi/Classes/Nodes/KWPendingNode.m @@ -5,51 +5,36 @@ // #import "KWPendingNode.h" -#import "KWExampleNodeVisitor.h" + +#import "KWCallSite.h" #import "KWContextNode.h" +#import "KWExampleNodeVisitor.h" @implementation KWPendingNode -@synthesize context = _context; - #pragma mark - Initializing - (id)initWithCallSite:(KWCallSite *)aCallSite context:(KWContextNode *)context description:(NSString *)aDescription { - if ((self = [super init])) { - callSite = [aCallSite retain]; - description = [aDescription copy]; - _context = [context retain]; + self = [super init]; + if (self) { + _callSite = aCallSite; + _description = [aDescription copy]; + _context = context; } return self; } + (id)pendingNodeWithCallSite:(KWCallSite *)aCallSite context:(KWContextNode *)context description:(NSString *)aDescription { - return [[[self alloc] initWithCallSite:aCallSite context:context description:aDescription] autorelease]; -} - -- (void)dealloc { - [_context release]; - [callSite release]; - [description release]; - [super dealloc]; + return [[self alloc] initWithCallSite:aCallSite context:context description:aDescription]; } -#pragma mark - Getting Call Sites - -@synthesize callSite; - -#pragma mark - Getting Descriptions - -@synthesize description; - #pragma mark - Accepting Visitors - (void)acceptExampleNodeVisitor:(id)aVisitor { [aVisitor visitPendingNode:self]; } -#pragma mark - #pragma mark - Accessing the context stack - (NSArray *)contextStack diff --git a/Pods/Kiwi/Classes/KWRegisterMatchersNode.h b/Pods/Kiwi/Classes/Nodes/KWRegisterMatchersNode.h similarity index 100% rename from Pods/Kiwi/Classes/KWRegisterMatchersNode.h rename to Pods/Kiwi/Classes/Nodes/KWRegisterMatchersNode.h diff --git a/Pods/Kiwi/Classes/KWRegisterMatchersNode.m b/Pods/Kiwi/Classes/Nodes/KWRegisterMatchersNode.m similarity index 58% rename from Pods/Kiwi/Classes/KWRegisterMatchersNode.m rename to Pods/Kiwi/Classes/Nodes/KWRegisterMatchersNode.m index 6de7a360..8e6b1ccf 100644 --- a/Pods/Kiwi/Classes/KWRegisterMatchersNode.m +++ b/Pods/Kiwi/Classes/Nodes/KWRegisterMatchersNode.m @@ -5,6 +5,8 @@ // #import "KWRegisterMatchersNode.h" + +#import "KWCallSite.h" #import "KWExampleNodeVisitor.h" @implementation KWRegisterMatchersNode @@ -12,32 +14,19 @@ @implementation KWRegisterMatchersNode #pragma mark - Initializing - (id)initWithCallSite:(KWCallSite *)aCallSite namespacePrefix:(NSString *)aNamespacePrefix { - if ((self = [super init])) { - callSite = [aCallSite retain]; - namespacePrefix = [aNamespacePrefix copy]; + self = [super init]; + if (self) { + _callSite = aCallSite; + _namespacePrefix = [aNamespacePrefix copy]; } return self; } + (id)registerMatchersNodeWithCallSite:(KWCallSite *)aCallSite namespacePrefix:(NSString *)aNamespacePrefix { - return [[[self alloc] initWithCallSite:aCallSite namespacePrefix:aNamespacePrefix] autorelease]; -} - -- (void)dealloc { - [callSite release]; - [namespacePrefix release]; - [super dealloc]; + return [[self alloc] initWithCallSite:aCallSite namespacePrefix:aNamespacePrefix]; } -#pragma mark - Getting Call Sites - -@synthesize callSite; - -#pragma mark - Getting Namespace Prefixes - -@synthesize namespacePrefix; - #pragma mark - Accepting Visitors - (void)acceptExampleNodeVisitor:(id)aVisitor { diff --git a/Pods/Kiwi/Classes/NSObject+KiwiStubAdditions.h b/Pods/Kiwi/Classes/Stubbing/NSObject+KiwiStubAdditions.h similarity index 92% rename from Pods/Kiwi/Classes/NSObject+KiwiStubAdditions.h rename to Pods/Kiwi/Classes/Stubbing/NSObject+KiwiStubAdditions.h index a5e25666..8d7306be 100644 --- a/Pods/Kiwi/Classes/NSObject+KiwiStubAdditions.h +++ b/Pods/Kiwi/Classes/Stubbing/NSObject+KiwiStubAdditions.h @@ -6,6 +6,7 @@ #import "KiwiConfiguration.h" +@class KWCaptureSpy; @class KWMessagePattern; @protocol KWMessageSpying; @@ -45,8 +46,10 @@ - (void)addMessageSpy:(id)aSpy forMessagePattern:(KWMessagePattern *)aMessagePattern; - (void)removeMessageSpy:(id)aSpy forMessagePattern:(KWMessagePattern *)aMessagePattern; +- (KWCaptureSpy *)captureArgument:(SEL)selector atIndex:(NSUInteger)index; + (void)addMessageSpy:(id)aSpy forMessagePattern:(KWMessagePattern *)aMessagePattern; + (void)removeMessageSpy:(id)aSpy forMessagePattern:(KWMessagePattern *)aMessagePattern; ++ (KWCaptureSpy *)captureArgument:(SEL)selector atIndex:(NSUInteger)index; @end diff --git a/Pods/Kiwi/Classes/NSObject+KiwiStubAdditions.m b/Pods/Kiwi/Classes/Stubbing/NSObject+KiwiStubAdditions.m similarity index 94% rename from Pods/Kiwi/Classes/NSObject+KiwiStubAdditions.m rename to Pods/Kiwi/Classes/Stubbing/NSObject+KiwiStubAdditions.m index f4056fe6..0edf73a3 100644 --- a/Pods/Kiwi/Classes/NSObject+KiwiStubAdditions.m +++ b/Pods/Kiwi/Classes/Stubbing/NSObject+KiwiStubAdditions.m @@ -5,6 +5,7 @@ // #import "NSObject+KiwiStubAdditions.h" +#import "KWCaptureSpy.h" #import "KWIntercept.h" #import "KWInvocationCapturer.h" #import "KWMessagePattern.h" @@ -26,7 +27,7 @@ - (NSMethodSignature *)invocationCapturer:(KWInvocationCapturer *)anInvocationCa if (signature != nil) return signature; - NSString *encoding = KWEncodingForVoidMethod(); + NSString *encoding = KWEncodingForDefaultMethod(); return [NSMethodSignature signatureWithObjCTypes:[encoding UTF8String]]; } @@ -156,13 +157,11 @@ - (void)stubMessagePattern:(KWMessagePattern *)aMessagePattern withBlock:(id (^) KWAssociateObjectStub(self, stub, YES); } -+ (void)stubMessagePattern:(KWMessagePattern *)aMessagePattern andReturn:(id)aValue -{ ++ (void)stubMessagePattern:(KWMessagePattern *)aMessagePattern andReturn:(id)aValue { [self stubMessagePattern:aMessagePattern andReturn:aValue overrideExisting:YES]; } -+ (void)stubMessagePattern:(KWMessagePattern *)aMessagePattern andReturn:(id)aValue overrideExisting:(BOOL)override -{ ++ (void)stubMessagePattern:(KWMessagePattern *)aMessagePattern andReturn:(id)aValue overrideExisting:(BOOL)override { if ([self methodSignatureForSelector:aMessagePattern.selector] == nil) { [NSException raise:@"KWStubException" format:@"cannot stub -%@ because no such method exists", NSStringFromSelector(aMessagePattern.selector)]; @@ -227,6 +226,12 @@ - (void)removeMessageSpy:(id)aSpy forMessagePattern:(KWMessageP KWClearObjectSpy(self, aSpy, aMessagePattern); } +- (KWCaptureSpy *)captureArgument:(SEL)selector atIndex:(NSUInteger)index { + KWCaptureSpy *spy = [[KWCaptureSpy alloc] initWithArgumentIndex:index]; + [self addMessageSpy:spy forMessagePattern:[KWMessagePattern messagePatternWithSelector:selector]]; + return spy; +} + + (void)addMessageSpy:(id)aSpy forMessagePattern:(KWMessagePattern *)aMessagePattern { if ([self methodSignatureForSelector:aMessagePattern.selector] == nil) { [NSException raise:@"KWSpyException" format:@"cannot add spy for -%@ because no such method exists", @@ -242,4 +247,10 @@ + (void)removeMessageSpy:(id)aSpy forMessagePattern:(KWMessageP KWClearObjectSpy(self, aSpy, aMessagePattern); } ++ (KWCaptureSpy *)captureArgument:(SEL)selector atIndex:(NSUInteger)index { + KWCaptureSpy *spy = [[KWCaptureSpy alloc] initWithArgumentIndex:index]; + [self addMessageSpy:spy forMessagePattern:[KWMessagePattern messagePatternWithSelector:selector]]; + return spy; +} + @end diff --git a/Pods/Kiwi/Classes/KWAsyncVerifier.h b/Pods/Kiwi/Classes/Verifiers/KWAsyncVerifier.h similarity index 89% rename from Pods/Kiwi/Classes/KWAsyncVerifier.h rename to Pods/Kiwi/Classes/Verifiers/KWAsyncVerifier.h index 13bf1f17..dd407c3a 100644 --- a/Pods/Kiwi/Classes/KWAsyncVerifier.h +++ b/Pods/Kiwi/Classes/Verifiers/KWAsyncVerifier.h @@ -26,10 +26,9 @@ @end -@interface KWAsyncMatcherProbe : NSObject { - BOOL matchResult; -} +@interface KWAsyncMatcherProbe : NSObject +@property (nonatomic, assign) BOOL matchResult; @property (nonatomic, readonly) id matcher; - (id)initWithMatcher:(id)aMatcher; diff --git a/Pods/Kiwi/Classes/Verifiers/KWAsyncVerifier.m b/Pods/Kiwi/Classes/Verifiers/KWAsyncVerifier.m new file mode 100644 index 00000000..80aaf07f --- /dev/null +++ b/Pods/Kiwi/Classes/Verifiers/KWAsyncVerifier.m @@ -0,0 +1,90 @@ +// +// KWAsyncVerifier.m +// iOSFalconCore +// +// Created by Luke Redpath on 13/01/2011. +// Copyright 2011 LJR Software Limited. All rights reserved. +// + +#import "KWAsyncVerifier.h" +#import "KWFailure.h" +#import "KWMatching.h" +#import "KWReporting.h" +#import "KWProbePoller.h" + +@implementation KWAsyncVerifier + ++ (id)asyncVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter probeTimeout:(NSTimeInterval)probeTimeout shouldWait:(BOOL)shouldWait { + KWAsyncVerifier *verifier = [[self alloc] initWithExpectationType:anExpectationType callSite:aCallSite matcherFactory:aMatcherFactory reporter:aReporter]; + verifier.timeout = probeTimeout; + verifier.shouldWait = shouldWait; + return verifier; +} + +- (id)initWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter { + self = [super initWithExpectationType:anExpectationType callSite:aCallSite matcherFactory:aMatcherFactory reporter:aReporter]; + if (self) { + self.timeout = kKW_DEFAULT_PROBE_TIMEOUT; + } + return self; +} + +- (void)verifyWithProbe:(KWAsyncMatcherProbe *)aProbe { + @try { + KWProbePoller *poller = [[KWProbePoller alloc] initWithTimeout:self.timeout delay:kKW_DEFAULT_PROBE_DELAY shouldWait: self.shouldWait]; + + if (![poller check:aProbe]) { + if (self.expectationType == KWExpectationTypeShould) { + NSString *message = [aProbe.matcher failureMessageForShould]; + KWFailure *failure = [KWFailure failureWithCallSite:self.callSite message:message]; + [self.reporter reportFailure:failure]; + } + } else { + // poller returned YES -- fail if expectation is NOT + if (self.expectationType == KWExpectationTypeShouldNot) { + NSString *message = [aProbe.matcher failureMessageForShouldNot]; + KWFailure *failure = [KWFailure failureWithCallSite:self.callSite message:message]; + [self.reporter reportFailure:failure]; + } + } + + + } @catch (NSException *exception) { + KWFailure *failure = [KWFailure failureWithCallSite:self.callSite message:[exception description]]; + [self.reporter reportFailure:failure]; + } +} + +- (void)verifyWithMatcher:(id)aMatcher { + KWAsyncMatcherProbe *probe = [[KWAsyncMatcherProbe alloc] initWithMatcher:aMatcher]; + [self verifyWithProbe:probe]; +} + +@end + +@implementation KWAsyncMatcherProbe + +- (id)initWithMatcher:(id)aMatcher { + self = [super init]; + if (self) { + _matcher = aMatcher; + + // make sure the matcher knows we are going to evaluate it multiple times + if ([aMatcher respondsToSelector:@selector(willEvaluateMultipleTimes)]) { + [aMatcher setWillEvaluateMultipleTimes:YES]; + } + } + return self; +} + + +- (BOOL)isSatisfied { + return self.matchResult; +} + +- (void)sample { + self.matchResult = [self.matcher evaluate]; +} + +@end + diff --git a/Pods/Kiwi/Classes/KWExistVerifier.h b/Pods/Kiwi/Classes/Verifiers/KWExistVerifier.h similarity index 92% rename from Pods/Kiwi/Classes/KWExistVerifier.h rename to Pods/Kiwi/Classes/Verifiers/KWExistVerifier.h index 9a3df372..91c0c183 100644 --- a/Pods/Kiwi/Classes/KWExistVerifier.h +++ b/Pods/Kiwi/Classes/Verifiers/KWExistVerifier.h @@ -22,6 +22,6 @@ #pragma mark - Properties -@property (nonatomic, readwrite, retain) id subject; +@property (nonatomic, strong) id subject; @end diff --git a/Pods/Kiwi/Classes/KWExistVerifier.m b/Pods/Kiwi/Classes/Verifiers/KWExistVerifier.m similarity index 66% rename from Pods/Kiwi/Classes/KWExistVerifier.m rename to Pods/Kiwi/Classes/Verifiers/KWExistVerifier.m index 3d6b5f5d..9485a07e 100644 --- a/Pods/Kiwi/Classes/KWExistVerifier.m +++ b/Pods/Kiwi/Classes/Verifiers/KWExistVerifier.m @@ -5,18 +5,19 @@ // #import "KWExistVerifier.h" + +#import "KWCallSite.h" #import "KWFailure.h" #import "KWFormatter.h" #import "KWReporting.h" @interface KWExistVerifier() -#pragma mark - Properties - @property (nonatomic, readonly) KWExpectationType expectationType; -@property (nonatomic, readonly) KWCallSite *callSite; @property (nonatomic, readonly) id reporter; +@property (nonatomic, strong) KWCallSite *callSite; + @end @implementation KWExistVerifier @@ -24,40 +25,28 @@ @implementation KWExistVerifier #pragma mark - Initializing - (id)initWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite reporter:(id)aReporter { - if ((self = [super init])) { - expectationType = anExpectationType; - callSite = [aCallSite retain]; - reporter = aReporter; + self = [super init]; + if (self) { + _expectationType = anExpectationType; + _callSite = aCallSite; + _reporter = aReporter; } return self; } + (id)existVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite reporter:(id)aReporter { - return [[[self alloc] initWithExpectationType:anExpectationType callSite:aCallSite reporter:aReporter] autorelease]; + return [[self alloc] initWithExpectationType:anExpectationType callSite:aCallSite reporter:aReporter]; } -- (void)dealloc { - [callSite release]; - [subject release]; - [super dealloc]; -} -- (NSString *)descriptionForAnonymousItNode -{ - if (self.expectationType == KWExpectationTypeShould) { - return @"should exist"; - } - return @"should not exist"; +- (NSString *)descriptionForAnonymousItNode { + if (self.expectationType == KWExpectationTypeShould) { + return @"should exist"; + } + return @"should not exist"; } -#pragma mark - Properties - -@synthesize expectationType; -@synthesize callSite; -@synthesize reporter; -@synthesize subject; - #pragma mark - Ending Examples - (void)exampleWillEnd { diff --git a/Pods/Kiwi/Classes/KWMatchVerifier.h b/Pods/Kiwi/Classes/Verifiers/KWMatchVerifier.h similarity index 92% rename from Pods/Kiwi/Classes/KWMatchVerifier.h rename to Pods/Kiwi/Classes/Verifiers/KWMatchVerifier.h index 1c8d947c..0fa981a6 100644 --- a/Pods/Kiwi/Classes/KWMatchVerifier.h +++ b/Pods/Kiwi/Classes/Verifiers/KWMatchVerifier.h @@ -19,10 +19,11 @@ #pragma mark - Properties @property (nonatomic, readonly) KWExpectationType expectationType; -@property (nonatomic, readonly) KWCallSite *callSite; + @property (nonatomic, readonly) KWMatcherFactory *matcherFactory; @property (nonatomic, readonly) id reporter; -@property (nonatomic, readwrite, retain) id subject; + +@property (nonatomic, strong) id subject; #pragma mark - Initializing diff --git a/Pods/Kiwi/Classes/KWMatchVerifier.m b/Pods/Kiwi/Classes/Verifiers/KWMatchVerifier.m similarity index 67% rename from Pods/Kiwi/Classes/KWMatchVerifier.m rename to Pods/Kiwi/Classes/Verifiers/KWMatchVerifier.m index 29ef4257..95513b79 100644 --- a/Pods/Kiwi/Classes/KWMatchVerifier.m +++ b/Pods/Kiwi/Classes/Verifiers/KWMatchVerifier.m @@ -5,6 +5,9 @@ // #import "KWMatchVerifier.h" + +#import "KWCallSite.h" +#import "KWExample.h" #import "KWFailure.h" #import "KWFormatter.h" #import "KWInvocationCapturer.h" @@ -14,22 +17,21 @@ #import "KWWorkarounds.h" #import "NSInvocation+KiwiAdditions.h" #import "NSMethodSignature+KiwiAdditions.h" -#import "KWExample.h" @interface KWMatchVerifier() #pragma mark - Properties -@property (nonatomic, readwrite, retain) id endOfExampleMatcher; -@property (nonatomic, readwrite, retain) id matcher; -@property (nonatomic, readwrite, assign) KWExample *example; +@property (nonatomic, readwrite, strong) id endOfExampleMatcher; +@property (nonatomic, readwrite, strong) id matcher; +@property (nonatomic, readwrite, strong) KWExample *example; + +@property (nonatomic, strong) KWCallSite *callSite; @end @implementation KWMatchVerifier -@synthesize matcher; - #pragma mark - Initializing - (id)initForShouldWithCallSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter { @@ -41,11 +43,12 @@ - (id)initForShouldNotWithCallSite:(KWCallSite *)aCallSite matcherFactory:(KWMat } - (id)initWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter { - if ((self = [super init])) { - expectationType = anExpectationType; - callSite = [aCallSite retain]; - matcherFactory = aMatcherFactory; - reporter = aReporter; + self = [super init]; + if (self) { + _expectationType = anExpectationType; + _callSite = aCallSite; + _matcherFactory = aMatcherFactory; + _reporter = aReporter; _example = (KWExample *)aReporter; } @@ -53,69 +56,59 @@ - (id)initWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWC } + (id)matchVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter { - return [[[self alloc] initWithExpectationType:anExpectationType callSite:aCallSite matcherFactory:aMatcherFactory reporter:aReporter] autorelease]; + return [[self alloc] initWithExpectationType:anExpectationType callSite:aCallSite matcherFactory:aMatcherFactory reporter:aReporter]; } -- (void)dealloc { - [subject release]; - [callSite release]; - [matcher release]; - [endOfExampleMatcher release]; - [super dealloc]; -} -- (NSString *)descriptionForAnonymousItNode -{ - NSString *typeString = @""; - - switch (self.expectationType) { - case KWExpectationTypeShould: - typeString = @"should"; - break; - case KWExpectationTypeShouldNot: - typeString = @"should not"; - } - id actualMatcher = (self.endOfExampleMatcher == nil) ? self.matcher : self.endOfExampleMatcher; - return [NSString stringWithFormat:@"%@ %@", typeString, actualMatcher]; +- (NSString *)descriptionForAnonymousItNode { + NSString *typeString = @""; + + switch (self.expectationType) { + case KWExpectationTypeShould: + typeString = @"should"; + break; + case KWExpectationTypeShouldNot: + typeString = @"should not"; + } + id actualMatcher = (self.endOfExampleMatcher == nil) ? self.matcher : self.endOfExampleMatcher; + return [NSString stringWithFormat:@"%@ %@", typeString, actualMatcher]; } -#pragma mark - Properties - -@synthesize expectationType; -@synthesize callSite; -@synthesize matcherFactory; -@synthesize reporter; -@synthesize subject; -@synthesize endOfExampleMatcher; - #pragma mark - Verifying - (void)verifyWithMatcher:(id)aMatcher { + BOOL specFailed = NO; + NSString *failureMessage = nil; + @try { BOOL matchResult = [aMatcher evaluate]; - + if (self.expectationType == KWExpectationTypeShould && !matchResult) { - NSString *message = [aMatcher failureMessageForShould]; - KWFailure *failure = [KWFailure failureWithCallSite:self.callSite message:message]; - [self.reporter reportFailure:failure]; + failureMessage = [aMatcher failureMessageForShould]; + specFailed = YES; + } else if (self.expectationType == KWExpectationTypeShouldNot && matchResult) { - NSString *message = [aMatcher failureMessageForShouldNot]; - KWFailure *failure = [KWFailure failureWithCallSite:self.callSite message:message]; - [self.reporter reportFailure:failure]; + failureMessage = [aMatcher failureMessageForShouldNot]; + specFailed = YES; } } @catch (NSException *exception) { - KWFailure *failure = [KWFailure failureWithCallSite:self.callSite message:[exception description]]; - [self.reporter reportFailure:failure]; + failureMessage = [exception description]; + specFailed = YES; + } + @finally { + if (specFailed) { + KWFailure *failure = [KWFailure failureWithCallSite:self.callSite message:failureMessage]; + [self.reporter reportFailure:failure]; + } } } #pragma mark - Ending Examples - (void)exampleWillEnd { - if (self.endOfExampleMatcher == nil) - return; - - [self verifyWithMatcher:self.endOfExampleMatcher]; + if (self.endOfExampleMatcher) { + [self verifyWithMatcher:self.endOfExampleMatcher]; + } } #pragma mark - Handling Invocations @@ -133,7 +126,7 @@ - (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector { // Return a dummy method signature so that problems can be handled in // -forwardInvocation:. - NSString *encoding = KWEncodingForVoidMethod(); + NSString *encoding = KWEncodingForDefaultMethod(); return [NSMethodSignature signatureWithObjCTypes:[encoding UTF8String]]; } @@ -150,8 +143,8 @@ - (void)forwardInvocation:(NSInvocation *)anInvocation { [self.reporter reportFailure:failure]; } - if (self.example.unassignedVerifier == self) { - self.example.unassignedVerifier = nil; + if (self.example.unresolvedVerifier == self) { + self.example.unresolvedVerifier = nil; } [anInvocation invokeWithTarget:self.matcher]; diff --git a/Pods/Kiwi/Classes/KWVerifying.h b/Pods/Kiwi/Classes/Verifiers/KWVerifying.h similarity index 72% rename from Pods/Kiwi/Classes/KWVerifying.h rename to Pods/Kiwi/Classes/Verifiers/KWVerifying.h index 021360d6..d26d3bcf 100644 --- a/Pods/Kiwi/Classes/KWVerifying.h +++ b/Pods/Kiwi/Classes/Verifiers/KWVerifying.h @@ -6,13 +6,17 @@ #import "KiwiConfiguration.h" +@class KWCallSite; + @protocol KWVerifying +@property (nonatomic, readonly) KWCallSite *callSite; + - (NSString *)descriptionForAnonymousItNode; #pragma mark - Subjects -@property (nonatomic, readwrite, retain) id subject; +@property (nonatomic, strong) id subject; #pragma mark - Ending Examples diff --git a/Pods/Kiwi/Classes/KWIntercept.h b/Pods/Kiwi/NonARC/KWIntercept.h similarity index 100% rename from Pods/Kiwi/Classes/KWIntercept.h rename to Pods/Kiwi/NonARC/KWIntercept.h diff --git a/Pods/Kiwi/Classes/KWIntercept.m b/Pods/Kiwi/NonARC/KWIntercept.m similarity index 100% rename from Pods/Kiwi/Classes/KWIntercept.m rename to Pods/Kiwi/NonARC/KWIntercept.m diff --git a/Pods/Kiwi/Classes/KWMessagePattern.h b/Pods/Kiwi/NonARC/KWMessagePattern.h similarity index 100% rename from Pods/Kiwi/Classes/KWMessagePattern.h rename to Pods/Kiwi/NonARC/KWMessagePattern.h diff --git a/Pods/Kiwi/Classes/KWMessagePattern.m b/Pods/Kiwi/NonARC/KWMessagePattern.m similarity index 92% rename from Pods/Kiwi/Classes/KWMessagePattern.m rename to Pods/Kiwi/NonARC/KWMessagePattern.m index c76849aa..f24b13ca 100644 --- a/Pods/Kiwi/Classes/KWMessagePattern.m +++ b/Pods/Kiwi/NonARC/KWMessagePattern.m @@ -23,7 +23,8 @@ - (id)initWithSelector:(SEL)aSelector { } - (id)initWithSelector:(SEL)aSelector argumentFilters:(NSArray *)anArray { - if ((self = [super init])) { + self = [super init]; + if (self) { selector = aSelector; if ([anArray count] > 0) @@ -69,19 +70,24 @@ + (id)messagePatternFromInvocation:(NSInvocation *)anInvocation { argumentFilters = [[NSMutableArray alloc] initWithCapacity:numberOfMessageArguments]; for (NSUInteger i = 0; i < numberOfMessageArguments; ++i) { - const char *type = [signature messageArgumentTypeAtIndex:i]; - id object = nil; - - if (KWObjCTypeIsObject(type)) { - [anInvocation getMessageArgument:&object atIndex:i]; - } else { + const char *type = [signature messageArgumentTypeAtIndex:i]; + void* argumentDataBuffer = malloc(KWObjCTypeLength(type)); + [anInvocation getMessageArgument:argumentDataBuffer atIndex:i]; + id object = nil; + if(*(id*)argumentDataBuffer != [KWAny any] && !KWObjCTypeIsObject(type)) { NSData *data = [anInvocation messageArgumentDataAtIndex:i]; object = [KWValue valueWithBytes:[data bytes] objCType:type]; - } + } else { + object = *(id*)argumentDataBuffer; + if (object != [KWAny any] && KWObjCTypeIsBlock(type)) { + object = [[object copy] autorelease]; // Converting NSStackBlock to NSMallocBlock + } + } - if (strcmp(type, "@?") == 0) object = [[object copy] autorelease]; // Converting NSStackBlock to NSMallocBlock [argumentFilters addObject:(object != nil) ? object : [KWNull null]]; + + free(argumentDataBuffer); } } diff --git a/Pods/Kiwi/Classes/KWStub.h b/Pods/Kiwi/NonARC/KWStub.h similarity index 100% rename from Pods/Kiwi/Classes/KWStub.h rename to Pods/Kiwi/NonARC/KWStub.h diff --git a/Pods/Kiwi/Classes/KWStub.m b/Pods/Kiwi/NonARC/KWStub.m similarity index 97% rename from Pods/Kiwi/Classes/KWStub.m rename to Pods/Kiwi/NonARC/KWStub.m index 367076f9..7a9c5f70 100644 --- a/Pods/Kiwi/Classes/KWStub.m +++ b/Pods/Kiwi/NonARC/KWStub.m @@ -25,7 +25,8 @@ - (id)initWithMessagePattern:(KWMessagePattern *)aMessagePattern { } - (id)initWithMessagePattern:(KWMessagePattern *)aMessagePattern value:(id)aValue { - if ((self = [super init])) { + self = [super init]; + if (self) { messagePattern = [aMessagePattern retain]; value = [aValue retain]; } @@ -34,7 +35,8 @@ - (id)initWithMessagePattern:(KWMessagePattern *)aMessagePattern value:(id)aValu } - (id)initWithMessagePattern:(KWMessagePattern *)aMessagePattern block:(id (^)(NSArray *params))aBlock { - if ((self = [super init])) { + self = [super init]; + if (self) { messagePattern = [aMessagePattern retain]; _block = [aBlock copy]; } @@ -43,7 +45,8 @@ - (id)initWithMessagePattern:(KWMessagePattern *)aMessagePattern block:(id (^)(N } - (id)initWithMessagePattern:(KWMessagePattern *)aMessagePattern value:(id)aValue times:(id)times afterThatReturn:(id)aSecondValue { - if ((self = [super init])) { + self = [super init]; + if (self) { messagePattern = [aMessagePattern retain]; value = [aValue retain]; returnValueTimes = [times retain]; @@ -182,7 +185,7 @@ - (BOOL)processInvocation:(NSInvocation *)anInvocation { NSUInteger numberOfArguments = [[anInvocation methodSignature] numberOfArguments]; NSMutableArray *args = [NSMutableArray arrayWithCapacity:(numberOfArguments-2)]; for (NSUInteger i = 2; i < numberOfArguments; ++i) { - id arg = [anInvocation getArgumentAtIndexAsObject:i]; + id arg = [anInvocation getArgumentAtIndexAsObject:(int)i]; const char *argType = [[anInvocation methodSignature] getArgumentTypeAtIndex:i]; if (strcmp(argType, "@?") == 0) arg = [[arg copy] autorelease]; diff --git a/Pods/Kiwi/Classes/KWSymbolicator.h b/Pods/Kiwi/NonARC/KWSymbolicator.h similarity index 100% rename from Pods/Kiwi/Classes/KWSymbolicator.h rename to Pods/Kiwi/NonARC/KWSymbolicator.h diff --git a/Pods/Kiwi/Classes/KWSymbolicator.m b/Pods/Kiwi/NonARC/KWSymbolicator.m similarity index 98% rename from Pods/Kiwi/Classes/KWSymbolicator.m rename to Pods/Kiwi/NonARC/KWSymbolicator.m index 7d2275f2..638a4c9e 100644 --- a/Pods/Kiwi/Classes/KWSymbolicator.m +++ b/Pods/Kiwi/NonARC/KWSymbolicator.m @@ -11,6 +11,7 @@ #import long kwCallerAddress (void){ +#if !__arm__ unw_cursor_t cursor; unw_context_t uc; unw_word_t ip; @@ -22,6 +23,7 @@ long kwCallerAddress (void){ unw_get_reg (&cursor, UNW_REG_IP, &ip); if(pos == 0) return (NSUInteger)(ip - 4); } +#endif return 0; } diff --git a/Pods/Kiwi/Classes/SenTestSuite+KiwiAdditions.h b/Pods/Kiwi/SenTestingKit/SenTestSuite+KiwiAdditions.h similarity index 100% rename from Pods/Kiwi/Classes/SenTestSuite+KiwiAdditions.h rename to Pods/Kiwi/SenTestingKit/SenTestSuite+KiwiAdditions.h diff --git a/Pods/Kiwi/Classes/SenTestSuite+KiwiAdditions.m b/Pods/Kiwi/SenTestingKit/SenTestSuite+KiwiAdditions.m similarity index 79% rename from Pods/Kiwi/Classes/SenTestSuite+KiwiAdditions.m rename to Pods/Kiwi/SenTestingKit/SenTestSuite+KiwiAdditions.m index a20ca63a..41b9c910 100644 --- a/Pods/Kiwi/Classes/SenTestSuite+KiwiAdditions.m +++ b/Pods/Kiwi/SenTestingKit/SenTestSuite+KiwiAdditions.m @@ -10,8 +10,9 @@ #import #import #import -#import "KWExampleGroupBuilder.h" +#import "KWExampleSuiteBuilder.h" #import "KWCallSite.h" +#import "KWSpec.h" @implementation SenTestSuite (KiwiAdditions) @@ -33,7 +34,10 @@ + (void)patchTestSuiteForTestCaseClassIMP { class_addMethod(c, newSEL, method_getImplementation(origMethod), method_getTypeEncoding(origMethod)) ; IMP focusedSuite = imp_implementationWithBlock(^(id _self, Class aClass){ - return ([[KWExampleGroupBuilder sharedExampleGroupBuilder] isFocused] && ![_self testSuiteClassHasFocus:aClass]) ? nil : (void *)[_self performSelector:@selector(__testSuiteForTestCaseClass:) withObject:aClass]; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" + return ([[KWExampleSuiteBuilder sharedExampleSuiteBuilder] isFocused] && ![_self testSuiteClassHasFocus:aClass]) ? nil : (__bridge void *)[_self performSelector:newSEL withObject:aClass]; +#pragma clang diagnostic pop }); method_setImplementation(origMethod, focusedSuite); } @@ -42,7 +46,7 @@ + (BOOL)testSuiteClassHasFocus:(Class)aClass { if (![aClass respondsToSelector:@selector(file)]) return NO; - KWCallSite *focusedCallSite = [[KWExampleGroupBuilder sharedExampleGroupBuilder] focusedCallSite]; + KWCallSite *focusedCallSite = [[KWExampleSuiteBuilder sharedExampleSuiteBuilder] focusedCallSite]; NSString *fullFilePathOfClass = [aClass performSelector:@selector(file)]; NSRange rangeOfFileName = [fullFilePathOfClass rangeOfString:focusedCallSite.filename]; return rangeOfFileName.length != 0; diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index 8f3dff16..fa03d39b 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -1,27 +1,33 @@ PODS: - - Kiwi (2.2) - - OHHTTPStubs (1.0.1) - - Reachability (3.0.0) + - Kiwi (2.2.3): + - Kiwi/SenTestingKit + - Kiwi/ARC (2.2.3) + - Kiwi/NonARC (2.2.3) + - Kiwi/SenTestingKit (2.2.3): + - Kiwi/ARC + - Kiwi/NonARC + - OHHTTPStubs (3.0.2) + - Reachability (3.1.1) - ReactiveCocoa (2.1.7): - ReactiveCocoa/Core - ReactiveCocoa/no-arc - ReactiveCocoa/Core (2.1.7): - ReactiveCocoa/no-arc - ReactiveCocoa/no-arc (2.1.7) - - SocketRocket (HEAD based on 0.2.0) + - SocketRocket (0.3.1-beta2) DEPENDENCIES: - - Kiwi - - OHHTTPStubs - - Reachability - - ReactiveCocoa - - SocketRocket (HEAD) + - Kiwi (~> 2.2) + - OHHTTPStubs (~> 3.0) + - Reachability (~> 3.1) + - ReactiveCocoa (~> 2.1) + - SocketRocket (= 0.3.1-beta2) SPEC CHECKSUMS: - Kiwi: db174bba4ee8068b15d7122f1b22fb64b7c1d378 - OHHTTPStubs: 25b40f0c39ce8dab25b3fc4b52d630e7a665f3fb - Reachability: 500bd76bf6cd8ff2c6fb715fc5f44ef6e4c024f2 + Kiwi: 04c51e880831d291748ec702d42c4101f7eb95c9 + OHHTTPStubs: 7be864a1c40c6a5007fe3e8679c109ca45590803 + Reachability: be4883bb93f31e38266ae3365e5600a317aae735 ReactiveCocoa: 1117f7968c8667d2ca00b5aa47156fabcb56af75 - SocketRocket: bca43a94bd9aac3a629df42c06843402399ee67b + SocketRocket: 7ac946bcce46287a791dfff3c1f8daa692821dae COCOAPODS: 0.28.0 diff --git a/Pods/OHHTTPStubs/LICENCE b/Pods/OHHTTPStubs/LICENCE deleted file mode 100644 index a63bf591..00000000 --- a/Pods/OHHTTPStubs/LICENCE +++ /dev/null @@ -1,29 +0,0 @@ -/*********************************************************************************** - * - * Copyright (c) 2012 Olivier Halligon - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *********************************************************************************** - * - * Any comment or suggestion welcome. Referencing this project in your AboutBox is appreciated. - * Please tell me if you use this class so we can cross-reference our projects. - * - ***********************************************************************************/ - \ No newline at end of file diff --git a/Pods/OHHTTPStubs/LICENSE b/Pods/OHHTTPStubs/LICENSE new file mode 100644 index 00000000..a83928dd --- /dev/null +++ b/Pods/OHHTTPStubs/LICENSE @@ -0,0 +1,9 @@ +- MIT LICENSE - + +Copyright (c) 2012 Olivier Halligon + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/Pods/OHHTTPStubs/OHHTTPStubs/OHHTTPStubs.h b/Pods/OHHTTPStubs/OHHTTPStubs/OHHTTPStubs.h deleted file mode 100644 index bafa7758..00000000 --- a/Pods/OHHTTPStubs/OHHTTPStubs/OHHTTPStubs.h +++ /dev/null @@ -1,67 +0,0 @@ -/*********************************************************************************** - * - * Copyright (c) 2012 Olivier Halligon - * - * Original idea: https://github.com/InfiniteLoopDK/ILTesting - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - ***********************************************************************************/ - - -//////////////////////////////////////////////////////////////////////////////// -#pragma mark - Imports - -#import -#import "OHHTTPStubsResponse.h" - -//////////////////////////////////////////////////////////////////////////////// -#pragma mark - Types - -typedef OHHTTPStubsResponse*(^OHHTTPStubsRequestHandler)(NSURLRequest* request, BOOL onlyCheck); - -//////////////////////////////////////////////////////////////////////////////// -#pragma mark - Interface - -@interface OHHTTPStubs : NSObject - -//////////////////////////////////////////////////////////////////////////////// -#pragma mark - Singleton methods - -+ (OHHTTPStubs*)sharedInstance; - -//////////////////////////////////////////////////////////////////////////////// -#pragma mark - Class Methods - -//! Commmodity method: calls instance method on sharedInstance directly -+(id)addRequestHandler:(OHHTTPStubsRequestHandler)handler; -+(BOOL)removeRequestHandler:(id)handler; -+(void)removeLastRequestHandler; -+(void)removeAllRequestHandlers; -+(void)setEnabled:(BOOL)enabled; - -//////////////////////////////////////////////////////////////////////////////// -#pragma mark - Instance Methods - --(id)addRequestHandler:(OHHTTPStubsRequestHandler)handler; --(BOOL)removeRequestHandler:(id)handler; --(void)removeLastRequestHandler; --(void)removeAllRequestHandlers; - -@end diff --git a/Pods/OHHTTPStubs/OHHTTPStubs/OHHTTPStubs.m b/Pods/OHHTTPStubs/OHHTTPStubs/OHHTTPStubs.m deleted file mode 100644 index 259e38e1..00000000 --- a/Pods/OHHTTPStubs/OHHTTPStubs/OHHTTPStubs.m +++ /dev/null @@ -1,259 +0,0 @@ -/*********************************************************************************** - * - * Copyright (c) 2012 Olivier Halligon - * - * Original idea: https://github.com/InfiniteLoopDK/ILTesting - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - ***********************************************************************************/ - - -//////////////////////////////////////////////////////////////////////////////// -#pragma mark - Imports - -#import "OHHTTPStubs.h" - - -//////////////////////////////////////////////////////////////////////////////// -#pragma mark - Types - -@interface OHHTTPStubsProtocol : NSURLProtocol @end - - -//////////////////////////////////////////////////////////////////////////////// -#pragma mark - Private Interface - -@interface OHHTTPStubs() -@property(nonatomic, retain) NSMutableArray* requestHandlers; -@end - -//////////////////////////////////////////////////////////////////////////////// -#pragma mark - Implementation - -@implementation OHHTTPStubs -@synthesize requestHandlers = _requestHandlers; - -//////////////////////////////////////////////////////////////////////////////// -#pragma mark - Singleton methods - -+ (OHHTTPStubs*)sharedInstance -{ - static OHHTTPStubs *sharedInstance = nil; - - static dispatch_once_t predicate; - dispatch_once(&predicate, ^{ - sharedInstance = [[self alloc] init]; - }); - - return sharedInstance; -} - -//////////////////////////////////////////////////////////////////////////////// -#pragma mark - Setup & Teardown - -- (id)init -{ - self = [super init]; - if (self) - { - self.requestHandlers = [NSMutableArray array]; - [[self class] setEnabled:YES]; - } - return self; -} - -- (void)dealloc -{ - [[self class] setEnabled:NO]; - self.requestHandlers = nil; -#if ! __has_feature(objc_arc) - [super dealloc]; -#endif -} - -//////////////////////////////////////////////////////////////////////////////// -#pragma mark - Public class methods - -// Commodity methods -+(id)addRequestHandler:(OHHTTPStubsRequestHandler)handler -{ - return [[self sharedInstance] addRequestHandler:handler]; -} -+(BOOL)removeRequestHandler:(id)handler -{ - return [[self sharedInstance] removeRequestHandler:handler]; -} -+(void)removeLastRequestHandler -{ - [[self sharedInstance] removeLastRequestHandler]; -} -+(void)removeAllRequestHandlers -{ - [[self sharedInstance] removeAllRequestHandlers]; -} - -+(void)setEnabled:(BOOL)enabled -{ - if (enabled) - { - [NSURLProtocol registerClass:[OHHTTPStubsProtocol class]]; - } - else - { - [NSURLProtocol unregisterClass:[OHHTTPStubsProtocol class]]; - } -} - -//////////////////////////////////////////////////////////////////////////////// -#pragma mark - Public instance methods - --(id)addRequestHandler:(OHHTTPStubsRequestHandler)handler -{ - OHHTTPStubsRequestHandler handlerCopy = [handler copy]; - [self.requestHandlers addObject:handlerCopy]; -#if ! __has_feature(objc_arc) - [handlerCopy autorelease]; -#endif - return handlerCopy; -} - --(BOOL)removeRequestHandler:(id)handler -{ - BOOL handlerFound = [self.requestHandlers containsObject:handler]; - [self.requestHandlers removeObject:handler]; - return handlerFound; -} --(void)removeLastRequestHandler -{ - [self.requestHandlers removeLastObject]; -} - --(void)removeAllRequestHandlers -{ - [self.requestHandlers removeAllObjects]; -} - -@end - - - - - - - - - - - -//////////////////////////////////////////////////////////////////////////////// -#pragma mark - Private Protocol Class - -// Undocumented initializer obtained by class-dump -// Don't use this in production code destined for the App Store -@interface NSHTTPURLResponse(UndocumentedInitializer) -- (id)initWithURL:(NSURL*)URL - statusCode:(NSInteger)statusCode - headerFields:(NSDictionary*)headerFields - requestTime:(double)requestTime; -@end - -@implementation OHHTTPStubsProtocol - -+ (BOOL)canInitWithRequest:(NSURLRequest *)request -{ - NSArray* requestHandlers = [OHHTTPStubs sharedInstance].requestHandlers; - id response = nil; - for(OHHTTPStubsRequestHandler handler in [requestHandlers reverseObjectEnumerator]) - { - response = handler(request, YES); - if (response) break; - } - return (response != nil); -} - -+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request -{ - return request; -} - -- (NSCachedURLResponse *)cachedResponse -{ - return nil; -} - -- (void)startLoading -{ - NSURLRequest* request = [self request]; - id client = [self client]; - - OHHTTPStubsResponse* responseStub = nil; - NSArray* requestHandlers = [OHHTTPStubs sharedInstance].requestHandlers; - for(OHHTTPStubsRequestHandler handler in [requestHandlers reverseObjectEnumerator]) - { - responseStub = handler(request, NO); - if (responseStub) break; - } - - if (responseStub.error == nil) - { - // Send the fake data - - NSTimeInterval canonicalResponseTime = responseStub.responseTime; - if (canonicalResponseTime<0) - { - // Interpret it as a bandwidth in KB/s ( -2 => 2KB/s ) - double bandwidth = -canonicalResponseTime * 1000.0; // in bytes per second - canonicalResponseTime = responseStub.responseData.length / bandwidth; - } - NSTimeInterval requestTime = canonicalResponseTime * 0.1; - NSTimeInterval responseTime = canonicalResponseTime - requestTime; - - NSHTTPURLResponse* urlResponse = [[NSHTTPURLResponse alloc] initWithURL:[request URL] - statusCode:responseStub.statusCode - headerFields:responseStub.httpHeaders - requestTime:requestTime]; - - dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, requestTime*NSEC_PER_SEC); - dispatch_after(popTime, dispatch_get_main_queue(), ^(void) { - //NSLog(@"[OHHTTPStubs] Stub Response for %@ received", [request URL]); - [client URLProtocol:self didReceiveResponse:urlResponse - cacheStoragePolicy:NSURLCacheStorageNotAllowed]; - - dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, responseTime*NSEC_PER_SEC); - dispatch_after(popTime, dispatch_get_main_queue(), ^(void) { - //NSLog(@"[OHHTTPStubs] Stub Data for %@ received", [request URL]); - [client URLProtocol:self didLoadData:responseStub.responseData]; - [client URLProtocolDidFinishLoading:self]; - }); - }); -#if ! __has_feature(objc_arc) - [urlResponse autorelease]; -#endif - } else { - // Send the canned error - [client URLProtocol:self didFailWithError:responseStub.error]; - } -} - -- (void)stopLoading -{ -} - -@end \ No newline at end of file diff --git a/Pods/OHHTTPStubs/OHHTTPStubs/OHHTTPStubsResponse.h b/Pods/OHHTTPStubs/OHHTTPStubs/OHHTTPStubsResponse.h deleted file mode 100644 index d0cbc081..00000000 --- a/Pods/OHHTTPStubs/OHHTTPStubs/OHHTTPStubsResponse.h +++ /dev/null @@ -1,88 +0,0 @@ -/*********************************************************************************** - * - * Copyright (c) 2012 Olivier Halligon - * - * Original idea: https://github.com/InfiniteLoopDK/ILTesting - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - ***********************************************************************************/ - - -//////////////////////////////////////////////////////////////////////////////// -#pragma mark - Imports - -#import - -//////////////////////////////////////////////////////////////////////////////// -#pragma mark - Defines & Constants - -#define OHHTTPStubsResponseUseStub (OHHTTPStubsResponse*)1 -#define OHHTTPStubsResponseDontUseStub (OHHTTPStubsResponse*)nil - -// Standard download speeds. -extern const double -OHHTTPStubsDownloadSpeedGPRS, -OHHTTPStubsDownloadSpeedEDGE, -OHHTTPStubsDownloadSpeed3G, -OHHTTPStubsDownloadSpeed3GPlus, -OHHTTPStubsDownloadSpeedWifi; - - -//////////////////////////////////////////////////////////////////////////////// -#pragma mark - Interface - -@interface OHHTTPStubsResponse : NSObject - -//////////////////////////////////////////////////////////////////////////////// -#pragma mark - Properties - -@property(nonatomic, retain) NSDictionary* httpHeaders; -@property(nonatomic, assign) int statusCode; -@property(nonatomic, retain) NSData* responseData; -//! @note if responseTime<0, it is interpreted as a download speed in KBps ( -200 => 200KB/s ) -@property(nonatomic, assign) NSTimeInterval responseTime; -@property(nonatomic, retain) NSError* error; - -//////////////////////////////////////////////////////////////////////////////// -#pragma mark - Class Methods - -+(OHHTTPStubsResponse*)responseWithData:(NSData*)data - statusCode:(int)statusCode - responseTime:(NSTimeInterval)responseTime - headers:(NSDictionary*)httpHeaders; -+(OHHTTPStubsResponse*)responseWithFile:(NSString*)fileName - statusCode:(int)statusCode - responseTime:(NSTimeInterval)responseTime - headers:(NSDictionary*)httpHeaders; -+(OHHTTPStubsResponse*)responseWithFile:(NSString*)fileName - contentType:(NSString*)contentType - responseTime:(NSTimeInterval)responseTime; -+(OHHTTPStubsResponse*)responseWithError:(NSError*)error; - -//////////////////////////////////////////////////////////////////////////////// -#pragma mark - Instance Methods - --(OHHTTPStubsResponse*)initWithData:(NSData*)data - statusCode:(int)statusCode - responseTime:(NSTimeInterval)responseTime - headers:(NSDictionary*)httpHeaders; --(OHHTTPStubsResponse*)initWithError:(NSError*)error; - -@end diff --git a/Pods/OHHTTPStubs/OHHTTPStubs/OHHTTPStubsResponse.m b/Pods/OHHTTPStubs/OHHTTPStubs/OHHTTPStubsResponse.m deleted file mode 100644 index bd1d9d39..00000000 --- a/Pods/OHHTTPStubs/OHHTTPStubs/OHHTTPStubsResponse.m +++ /dev/null @@ -1,144 +0,0 @@ -/*********************************************************************************** - * - * Copyright (c) 2012 Olivier Halligon - * - * Original idea: https://github.com/InfiniteLoopDK/ILTesting - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - ***********************************************************************************/ - - -//////////////////////////////////////////////////////////////////////////////// -#pragma mark - Imports - -#import "OHHTTPStubsResponse.h" - -//////////////////////////////////////////////////////////////////////////////// -#pragma mark - Defines & Constants - -const double OHHTTPStubsDownloadSpeedGPRS =- 56 / 8; // kbps -> Ko/s -const double OHHTTPStubsDownloadSpeedEDGE =- 128 / 8; // kbps -> Ko/s -const double OHHTTPStubsDownloadSpeed3G =- 3200 / 8; // kbps -> Ko/s -const double OHHTTPStubsDownloadSpeed3GPlus =- 7200 / 8; // kbps -> Ko/s -const double OHHTTPStubsDownloadSpeedWifi =- 12000 / 8; // kbps -> Ko/s - -//////////////////////////////////////////////////////////////////////////////// -#pragma mark - Implementation - -@implementation OHHTTPStubsResponse - -//////////////////////////////////////////////////////////////////////////////// -#pragma mark - Synthesize - -@synthesize httpHeaders = httpHeaders_; -@synthesize statusCode = statusCode_; -@synthesize responseData = responseData_; -@synthesize responseTime = _responseTime; -@synthesize error = error_; - -//////////////////////////////////////////////////////////////////////////////// -#pragma mark - Setup & Teardown - --(OHHTTPStubsResponse*)initWithData:(NSData*)data - statusCode:(int)statusCode - responseTime:(NSTimeInterval)responseTime - headers:(NSDictionary*)httpHeaders -{ - self = [super init]; - if (self) { - self.responseData = data; - self.statusCode = statusCode; - self.httpHeaders = httpHeaders; - self.responseTime = responseTime; - } - return self; -} - --(OHHTTPStubsResponse*)initWithError:(NSError*)error -{ - self = [super init]; - if (self) { - self.error = error; - } - return self; -} - -#if ! __has_feature(objc_arc) --(void)dealloc -{ - self.httpHeaders = nil; - self.statusCode = 0; - self.responseData = nil; - self.responseTime = 0; - self.error = nil; - [super dealloc]; -} -#endif - -//////////////////////////////////////////////////////////////////////////////// -#pragma mark - Class Methods - -+(OHHTTPStubsResponse*)responseWithData:(NSData*)data - statusCode:(int)statusCode - responseTime:(NSTimeInterval)responseTime - headers:(NSDictionary*)httpHeaders -{ - OHHTTPStubsResponse* response = [[self alloc] initWithData:data - statusCode:statusCode - responseTime:responseTime - headers:httpHeaders]; -#if ! __has_feature(objc_arc) - [response autorelease]; -#endif - return response; -} - -+(OHHTTPStubsResponse*)responseWithFile:(NSString*)fileName - statusCode:(int)statusCode - responseTime:(NSTimeInterval)responseTime - headers:(NSDictionary*)httpHeaders -{ - NSString* basename = [fileName stringByDeletingPathExtension]; - NSString* extension = [fileName pathExtension]; - NSString* filePath = [[NSBundle bundleForClass:[self class]] pathForResource:basename ofType:extension]; - NSData* data = [NSData dataWithContentsOfFile:filePath]; - return [self responseWithData:data statusCode:statusCode responseTime:responseTime headers:httpHeaders]; -} - -+(OHHTTPStubsResponse*)responseWithFile:(NSString*)fileName - contentType:(NSString*)contentType - responseTime:(NSTimeInterval)responseTime -{ - NSDictionary* headers = [NSDictionary dictionaryWithObject:contentType forKey:@"Content-Type"]; - return [self responseWithFile:fileName statusCode:200 responseTime:responseTime headers:headers]; -} - - -+(OHHTTPStubsResponse*)responseWithError:(NSError*)error -{ - OHHTTPStubsResponse* response = [[self alloc] initWithError:error]; -#if ! __has_feature(objc_arc) - [response release]; -#endif - return response; -} - - -@end diff --git a/Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubs+NSURLSessionConfiguration.m b/Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubs+NSURLSessionConfiguration.m new file mode 100644 index 00000000..87cd0ef3 --- /dev/null +++ b/Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubs+NSURLSessionConfiguration.m @@ -0,0 +1,81 @@ +// +// NSURLSessionConfiguration+OHHTTPStubs.m +// OHHTTPStubs +// +// Created by Olivier Halligon on 06/10/13. +// Copyright (c) 2013 AliSoftware. All rights reserved. +// + +#import + +#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000) \ + || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090) + +#import +#import "OHHTTPStubs.h" + + +////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! This helper is used to swizzle NSURLSessionConfiguration constructor methods + defaultSessionConfiguration and ephemeralSessionConfiguration to insert the private + OHHTTPStubsProtocol into their protocolClasses array so that OHHTTPStubs is automagically + supported when you create a new NSURLSession based on one of there configurations. + */ + +typedef NSURLSessionConfiguration*(*SessionConfigConstructor)(id,SEL); +static SessionConfigConstructor orig_defaultSessionConfiguration; +static SessionConfigConstructor orig_ephemeralSessionConfiguration; + +static SessionConfigConstructor OHHTTPStubsSwizzle(SEL selector, SessionConfigConstructor newImpl) +{ + Class cls = NSURLSessionConfiguration.class; + Class metaClass = object_getClass(cls); + + Method origMethod = class_getClassMethod(cls, selector); + SessionConfigConstructor origImpl = (SessionConfigConstructor)method_getImplementation(origMethod); + if (!class_addMethod(metaClass, selector, (IMP)newImpl, method_getTypeEncoding(origMethod))) + { + method_setImplementation(origMethod, (IMP)newImpl); + } + return origImpl; +} + +static void OHTTPStubsAddProtocolClassToNSURLSessionConfiguration(NSURLSessionConfiguration* config) +{ + NSMutableArray* protocolClasses = [NSMutableArray arrayWithArray:config.protocolClasses]; + // objc_getClass loads the class in the ObjC Runtime if not loaded at that time, so it's secure. + Class protocolClass = objc_getClass("OHHTTPStubsProtocol"); + if (![protocolClasses containsObject:protocolClass]) + [protocolClasses addObject:protocolClass]; + config.protocolClasses = protocolClasses; +} + +static NSURLSessionConfiguration* defaultSessionConfigurationWithOHHTTPStubs(id self, SEL _cmd) +{ + NSURLSessionConfiguration* config = orig_defaultSessionConfiguration(self,_cmd); // call original method + OHTTPStubsAddProtocolClassToNSURLSessionConfiguration(config); + return config; +} + +static NSURLSessionConfiguration* ephemeralSessionConfigurationWithOHHTTPStubs(id self, SEL _cmd) +{ + NSURLSessionConfiguration* config = orig_ephemeralSessionConfiguration(self,_cmd); // call original method + OHTTPStubsAddProtocolClassToNSURLSessionConfiguration(config); + return config; +} + +void _OHHTTPStubs_InstallNSURLSessionConfigurationMagicSupport() +{ + orig_defaultSessionConfiguration = OHHTTPStubsSwizzle(@selector(defaultSessionConfiguration), + defaultSessionConfigurationWithOHHTTPStubs); + orig_ephemeralSessionConfiguration = OHHTTPStubsSwizzle(@selector(ephemeralSessionConfiguration), + ephemeralSessionConfigurationWithOHHTTPStubs); +} + +#else +void _OHHTTPStubs_InstallNSURLSessionConfigurationMagicSupport() +{ + /* NO-OP for Xcode4 and pre-iOS7/pre-OSX9 SDKs that does not support NSURLSessionConfiguration */ +} +#endif diff --git a/Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubs.h b/Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubs.h new file mode 100644 index 00000000..efd46be5 --- /dev/null +++ b/Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubs.h @@ -0,0 +1,121 @@ +/*********************************************************************************** + * + * Copyright (c) 2012 Olivier Halligon + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + ***********************************************************************************/ + + +//////////////////////////////////////////////////////////////////////////////// +#pragma mark - Imports + +#import +#import "OHHTTPStubsResponse.h" + +//////////////////////////////////////////////////////////////////////////////// +#pragma mark - Types + +typedef BOOL(^OHHTTPStubsTestBlock)(NSURLRequest* request); +typedef OHHTTPStubsResponse*(^OHHTTPStubsResponseBlock)(NSURLRequest* request); + +@protocol OHHTTPStubsDescriptor +/*! Arbitrary name that you can set and get to describe your stub. Use it as your own convenience. */ +@property(nonatomic, strong) NSString* name; +@end + +//////////////////////////////////////////////////////////////////////////////// +#pragma mark - Interface + +/*! Stubs Manager. Use this class to add and remove stubs and stub your network requests. */ +@interface OHHTTPStubs : NSObject + +//////////////////////////////////////////////////////////////////////////////// +#pragma mark - Adding & Removing stubs + +/*! Dedicated method to add a stub + @param testBlock Block that should return `YES` if the request passed as parameter should be stubbed with the response block, + and `NO` if it should hit the real world (or be managed by another stub). + @param responseBlock Block that will return the `OHHTTPStubsResponse` (response to use for stubbing) corresponding to the given request + @return a stub descriptor that uniquely identifies the stub and can be later used to remove it with `removeStub:`. + @note The returned stub descriptor is retained (`__strong` reference) by `OHHTTPStubs` until it is removed + (with one of the `removeStub:`/`removeLastStub`/`removeAllStubs` methods); it is thus recommended to + keep it in a `__weak` storage (and not `__strong`) in your app code, to let the stub descriptor be destroyed + and let the variable go back to `nil` automatically when the stub is removed. + */ ++(id)stubRequestsPassingTest:(OHHTTPStubsTestBlock)testBlock + withStubResponse:(OHHTTPStubsResponseBlock)responseBlock; + +/*! Remove a stub from the list of stubs + @param stubDesc the stub descriptor that has been returned when adding the stub using `stubRequestsPassingTest:withStubResponse:` + @return `YES` if the stub has been successfully removed, `NO` if the parameter was not a valid stub identifier + */ ++(BOOL)removeStub:(id)stubDesc; + +/*! Remove the last added stub from the stubs list */ ++(void)removeLastStub; + +/*! Remove all the stubs from the stubs list. */ ++(void)removeAllStubs; + +//////////////////////////////////////////////////////////////////////////////// +#pragma mark - Disabling & Re-Enabling stubs + +/*! Enable or disable the stubs + @param enabled if `YES`, enables the stubs. If `NO`, disable all the stubs and let all the requests hit the real world. + @note OHHTTPStubs are enabled by default, so there is no need to call this method with `YES` for stubs to work, + except if you explicitely disabled the stubs before. + @note This only affects requests that are further made using `NSURLConnection` or using `[NSURLSession sharedSession]`. + This does not affect requests sent on an `NSURLSession` created using an `NSURLSessionConfiguration`. + */ ++(void)setEnabled:(BOOL)enabled; + +#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000) \ + || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090) +/*! + @param enabled If `YES`, enables the stubs for this `NSURLSessionConfiguration`. + If `NO`, disable the stubs and let all the requests hit the real world + @param sessionConfig The NSURLSessionConfiguration on which to enabled/disable the stubs + @note OHHTTPStubs are enabled by default on newly created `defaultSessionConfiguration` and `ephemeralSessionConfiguration`, + so there is no need to call this method with `YES` for stubs to work. You generally only use this if you want to + disable `OHTTPStubs` per `NSURLSession` by calling it before building the `NSURLSession` with the `NSURLSessionConfiguration`. + @note Important: As usual according to the way `NSURLSessionConfiguration` works, you must set this property + *before* creating the `NSURLSession`. Once the `NSURLSession` object is created, they use a deep copy of + the `NSURLSessionConfiguration` object used to create them, so changing the configuration later does not + affect already created sessions. + */ ++ (void)setEnabled:(BOOL)enabled forSessionConfiguration:(NSURLSessionConfiguration *)sessionConfig; +#endif + +#pragma mark - Debug Methods + +/*! List all the installed stubs + @return An array of id objects currently installed. Useful for debug. + */ ++(NSArray*)allStubs; + +/*! Setup a block to be called each time a stub is triggered. + + Useful if you want to log all your requests being stubbed for example and see which stub was used to respond to each request. + @param block The block to call each time a request is being stubbed by OHHTTPStubs. Set it to `nil` to do nothing. Defaults is `nil`. + */ ++(void)onStubActivation:( void(^)(NSURLRequest* request, id stub) )block; + +@end + diff --git a/Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubs.m b/Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubs.m new file mode 100644 index 00000000..4b298ce5 --- /dev/null +++ b/Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubs.m @@ -0,0 +1,520 @@ +/*********************************************************************************** + * + * Copyright (c) 2012 Olivier Halligon + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + ***********************************************************************************/ + +#if ! __has_feature(objc_arc) +#error This file is expected to be compiled with ARC turned ON +#endif + +//////////////////////////////////////////////////////////////////////////////// +#pragma mark - Imports + +#import "OHHTTPStubs.h" + +//////////////////////////////////////////////////////////////////////////////// +#pragma mark - Types & Constants + +@interface OHHTTPStubsProtocol : NSURLProtocol @end + +static NSTimeInterval const kSlotTime = 0.25; // Must be >0. We will send a chunk of the data from the stream each 'slotTime' seconds + +//////////////////////////////////////////////////////////////////////////////// +#pragma mark - Private Interfaces + +@interface OHHTTPStubs() ++ (instancetype)sharedInstance; +@property(atomic, copy) NSMutableArray* stubDescriptors; +@property(atomic, copy) void (^onStubActivationBlock)(NSURLRequest*, id); +@end + +@interface OHHTTPStubsDescriptor : NSObject +@property(atomic, copy) OHHTTPStubsTestBlock testBlock; +@property(atomic, copy) OHHTTPStubsResponseBlock responseBlock; +@end + +//////////////////////////////////////////////////////////////////////////////// +#pragma mark - OHHTTPStubsDescriptor Implementation + +@implementation OHHTTPStubsDescriptor + +@synthesize name = _name; + ++(instancetype)stubDescriptorWithTestBlock:(OHHTTPStubsTestBlock)testBlock + responseBlock:(OHHTTPStubsResponseBlock)responseBlock +{ + OHHTTPStubsDescriptor* stub = [OHHTTPStubsDescriptor new]; + stub.testBlock = testBlock; + stub.responseBlock = responseBlock; + return stub; +} + +-(NSString*)description +{ + return [NSString stringWithFormat:@"<%@ %p : %@>", self.class, self, self.name]; +} + +@end + + + + +//////////////////////////////////////////////////////////////////////////////// +#pragma mark - OHHTTPStubs Implementation + +@implementation OHHTTPStubs + +//////////////////////////////////////////////////////////////////////////////// +#pragma mark - Singleton methods + ++ (instancetype)sharedInstance +{ + static OHHTTPStubs *sharedInstance = nil; + + static dispatch_once_t predicate; + dispatch_once(&predicate, ^{ + sharedInstance = [[self alloc] init]; + }); + + return sharedInstance; +} + +//////////////////////////////////////////////////////////////////////////////// +#pragma mark - Setup & Teardown + +extern void _OHHTTPStubs_InstallNSURLSessionConfigurationMagicSupport(); + ++ (void)initialize +{ + if (self == [OHHTTPStubs class]) + { + [self setEnabled:YES]; + _OHHTTPStubs_InstallNSURLSessionConfigurationMagicSupport(); + } +} +- (id)init +{ + self = [super init]; + if (self) + { + _stubDescriptors = [NSMutableArray array]; + } + return self; +} + +- (void)dealloc +{ + [self.class setEnabled:NO]; +} + +//////////////////////////////////////////////////////////////////////////////// +#pragma mark - Public class methods + +#pragma mark > Adding & Removing stubs + ++(id)stubRequestsPassingTest:(OHHTTPStubsTestBlock)testBlock + withStubResponse:(OHHTTPStubsResponseBlock)responseBlock +{ + OHHTTPStubsDescriptor* stub = [OHHTTPStubsDescriptor stubDescriptorWithTestBlock:testBlock + responseBlock:responseBlock]; + [OHHTTPStubs.sharedInstance addStub:stub]; + return stub; +} + ++(BOOL)removeStub:(id)stubDesc +{ + return [OHHTTPStubs.sharedInstance removeStub:stubDesc]; +} ++(void)removeLastStub +{ + [OHHTTPStubs.sharedInstance removeLastStub]; +} ++(void)removeAllStubs +{ + [OHHTTPStubs.sharedInstance removeAllStubs]; +} + +#pragma mark > Disabling & Re-Enabling stubs + ++(void)setEnabled:(BOOL)enable +{ + static BOOL currentEnabledState = NO; + if (enable && !currentEnabledState) + { + [NSURLProtocol registerClass:OHHTTPStubsProtocol.class]; + } + else if (!enable && currentEnabledState) + { + [NSURLProtocol unregisterClass:OHHTTPStubsProtocol.class]; + } + currentEnabledState = enable; +} + +#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000) \ + || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090) ++ (void)setEnabled:(BOOL)enable forSessionConfiguration:(NSURLSessionConfiguration*)sessionConfig +{ + // Runtime check to make sure the API is available on this version + if ( [sessionConfig respondsToSelector:@selector(protocolClasses)] + && [sessionConfig respondsToSelector:@selector(setProtocolClasses:)]) + { + NSMutableArray * urlProtocolClasses = [NSMutableArray arrayWithArray:sessionConfig.protocolClasses]; + Class protoCls = OHHTTPStubsProtocol.class; + if (enable && ![urlProtocolClasses containsObject:protoCls]) + { + [urlProtocolClasses addObject:protoCls]; + } + else if (!enable && [urlProtocolClasses containsObject:protoCls]) + { + [urlProtocolClasses removeObject:protoCls]; + } + sessionConfig.protocolClasses = urlProtocolClasses; + } + else + { + NSLog(@"[OHHTTPStubs] %@ is only available when running on iOS7+. Use conditions like 'if ([NSURLSessionConfiguration class])' to only call this method if the user is running iOS7+.", NSStringFromSelector(_cmd)); + } +} +#endif + +#pragma mark > Debug Methods + ++(NSArray*)allStubs +{ + return [OHHTTPStubs.sharedInstance stubDescriptors]; +} + ++(void)onStubActivation:( void(^)(NSURLRequest* request, id stub) )block +{ + [OHHTTPStubs.sharedInstance setOnStubActivationBlock:block]; +} + + + +//////////////////////////////////////////////////////////////////////////////// +#pragma mark - Private instance methods + +-(void)addStub:(OHHTTPStubsDescriptor*)stubDesc +{ + @synchronized(_stubDescriptors) + { + [_stubDescriptors addObject:stubDesc]; + } +} + +-(BOOL)removeStub:(id)stubDesc +{ + BOOL handlerFound = NO; + @synchronized(_stubDescriptors) + { + handlerFound = [_stubDescriptors containsObject:stubDesc]; + [_stubDescriptors removeObject:stubDesc]; + } + return handlerFound; +} + +-(void)removeLastStub +{ + @synchronized(_stubDescriptors) + { + [_stubDescriptors removeLastObject]; + } +} + +-(void)removeAllStubs +{ + @synchronized(_stubDescriptors) + { + [_stubDescriptors removeAllObjects]; + } +} + +- (OHHTTPStubsDescriptor*)firstStubPassingTestForRequest:(NSURLRequest*)request +{ + OHHTTPStubsDescriptor* foundStub = nil; + @synchronized(_stubDescriptors) + { + for(OHHTTPStubsDescriptor* stub in _stubDescriptors.reverseObjectEnumerator) + { + if (stub.testBlock(request)) + { + foundStub = stub; + break; + } + } + } + return foundStub; +} + +@end + + + + + + + + + + +//////////////////////////////////////////////////////////////////////////////// +#pragma mark - Private Protocol Class + +@interface OHHTTPStubsProtocol() +@property(nonatomic, assign) BOOL stopped; +@end + +@implementation OHHTTPStubsProtocol + ++ (BOOL)canInitWithRequest:(NSURLRequest *)request +{ + return ([OHHTTPStubs.sharedInstance firstStubPassingTestForRequest:request] != nil); +} + +- (id)initWithRequest:(NSURLRequest *)request cachedResponse:(NSCachedURLResponse *)response client:(id)client +{ + // Make super sure that we never use a cached response. + return [super initWithRequest:request cachedResponse:nil client:client]; +} + ++ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request +{ + return request; +} + +- (NSCachedURLResponse *)cachedResponse +{ + return nil; +} + +- (void)startLoading +{ + NSURLRequest* request = self.request; + id client = self.client; + + OHHTTPStubsDescriptor* stub = [OHHTTPStubs.sharedInstance firstStubPassingTestForRequest:request]; + NSAssert(stub, @"At the time startLoading is called, canInitRequest should have assured that stub is != nil beforehand"); + OHHTTPStubsResponse* responseStub = stub.responseBlock(request); + + if (OHHTTPStubs.sharedInstance.onStubActivationBlock) + { + OHHTTPStubs.sharedInstance.onStubActivationBlock(request, stub); + } + + if (responseStub.error == nil) + { + NSHTTPURLResponse* urlResponse = [[NSHTTPURLResponse alloc] initWithURL:request.URL + statusCode:responseStub.statusCode + HTTPVersion:@"HTTP/1.1" + headerFields:responseStub.httpHeaders]; + + // Cookies handling + if (request.HTTPShouldHandleCookies && request.URL) + { + NSArray* cookies = [NSHTTPCookie cookiesWithResponseHeaderFields:responseStub.httpHeaders forURL:request.URL]; + if (cookies) + { + [NSHTTPCookieStorage.sharedHTTPCookieStorage setCookies:cookies forURL:request.URL mainDocumentURL:request.mainDocumentURL]; + } + } + + + NSString* redirectLocation = (responseStub.httpHeaders)[@"Location"]; + NSURL* redirectLocationURL; + if (redirectLocation) + { + redirectLocationURL = [NSURL URLWithString:redirectLocation]; + } + else + { + redirectLocationURL = nil; + } + if (((responseStub.statusCode >= 300) && (responseStub.statusCode < 400)) && redirectLocationURL) + { + NSURLRequest* redirectRequest = [NSURLRequest requestWithURL:redirectLocationURL]; + execute_after(responseStub.requestTime, ^{ + if (!self.stopped) + { + [client URLProtocol:self wasRedirectedToRequest:redirectRequest redirectResponse:urlResponse]; + } + }); + } + else + { + execute_after(responseStub.requestTime,^{ + if (!self.stopped) + { + [client URLProtocol:self didReceiveResponse:urlResponse cacheStoragePolicy:NSURLCacheStorageNotAllowed]; + if(responseStub.inputStream.streamStatus == NSStreamStatusNotOpen) + { + [responseStub.inputStream open]; + } + [self streamDataForClient:client + withStubResponse:responseStub + completion:^(NSError * error) + { + [responseStub.inputStream close]; + if (error==nil) + { + [client URLProtocolDidFinishLoading:self]; + } + else + { + [client URLProtocol:self didFailWithError:responseStub.error]; + } + }]; + } + }); + } + } else { + // Send the canned error + execute_after(responseStub.responseTime, ^{ + if (!self.stopped) + { + [client URLProtocol:self didFailWithError:responseStub.error]; + } + }); + } +} + +- (void)stopLoading +{ + self.stopped = YES; +} + +typedef struct { + NSTimeInterval slotTime; + double chunkSizePerSlot; + double cumulativeChunkSize; +} OHHTTPStubsStreamTimingInfo; + +- (void)streamDataForClient:(id)client + withStubResponse:(OHHTTPStubsResponse*)stubResponse + completion:(void(^)(NSError * error))completion +{ + if (stubResponse.inputStream.hasBytesAvailable && !self.stopped) + { + // Compute timing data once and for all for this stub + + OHHTTPStubsStreamTimingInfo timingInfo = { + .slotTime = kSlotTime, // Must be >0. We will send a chunk of data from the stream each 'slotTime' seconds + .cumulativeChunkSize = 0 + }; + + if(stubResponse.responseTime < 0) + { + // Bytes send each 'slotTime' seconds = Speed in KB/s * 1000 * slotTime in seconds + timingInfo.chunkSizePerSlot = (fabs(stubResponse.responseTime) * 1000) * timingInfo.slotTime; + } + else if (stubResponse.responseTime < kSlotTime) // includes case when responseTime == 0 + { + // We want to send the whole data quicker than the slotTime, so send it all in one chunk. + timingInfo.chunkSizePerSlot = stubResponse.dataSize; + timingInfo.slotTime = stubResponse.responseTime; + } + else + { + // Bytes send each 'slotTime' seconds = (Whole size in bytes / response time) * slotTime = speed in bps * slotTime in seconds + timingInfo.chunkSizePerSlot = ((stubResponse.dataSize/stubResponse.responseTime) * timingInfo.slotTime); + } + + [self streamDataForClient:client + fromStream:stubResponse.inputStream + timingInfo:timingInfo + completion:completion]; + } + else + { + if (completion) + { + completion(nil); + } + } +} + +- (void) streamDataForClient:(id)client + fromStream:(NSInputStream*)inputStream + timingInfo:(OHHTTPStubsStreamTimingInfo)timingInfo + completion:(void(^)(NSError * error))completion +{ + NSParameterAssert(timingInfo.chunkSizePerSlot > 0); + + if (inputStream.hasBytesAvailable && !self.stopped) + { + // This is needed in case we computed a non-integer chunkSizePerSlot, to avoid cumulative errors + double cumulativeChunkSizeAfterRead = timingInfo.cumulativeChunkSize + timingInfo.chunkSizePerSlot; + NSUInteger chunkSizeToRead = floor(cumulativeChunkSizeAfterRead) - floor(timingInfo.cumulativeChunkSize); + timingInfo.cumulativeChunkSize = cumulativeChunkSizeAfterRead; + + if (chunkSizeToRead == 0) + { + // Nothing to read at this pass, but probably later + execute_after(timingInfo.slotTime, ^{ + [self streamDataForClient:client fromStream:inputStream + timingInfo:timingInfo completion:completion]; + }); + } else { + uint8_t buffer[chunkSizeToRead]; + NSInteger bytesRead = [inputStream read:buffer maxLength:chunkSizeToRead]; + if (bytesRead > 0) + { + NSData * data = [NSData dataWithBytes:buffer length:bytesRead]; + // Wait for 'slotTime' seconds before sending the chunk. + // If bytesRead < chunkSizePerSlot (because we are near the EOF), adjust slotTime proportionally to the bytes remaining + execute_after(((double)bytesRead / (double)chunkSizeToRead) * timingInfo.slotTime, ^{ + [client URLProtocol:self didLoadData:data]; + [self streamDataForClient:client fromStream:inputStream + timingInfo:timingInfo completion:completion]; + }); + } + else + { + if (completion) + { + // Note: We may also arrive here with no error if we were just at the end of the stream (EOF) + // In that case, hasBytesAvailable did return YES (because at the limit of OEF) but nothing were read (because EOF) + // But then in that case inputStream.streamError will be nil so that's cool, we won't return an error anyway + completion(inputStream.streamError); + } + } + } + } + else + { + if (completion) + { + completion(nil); + } + } +} + +///////////////////////////////////////////// +// Delayed execution utility methods +///////////////////////////////////////////// + +static void execute_after(NSTimeInterval delayInSeconds, dispatch_block_t block) +{ + dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); + dispatch_after(popTime, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block); +} + +@end diff --git a/Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse+HTTPMessage.h b/Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse+HTTPMessage.h new file mode 100644 index 00000000..40c01a45 --- /dev/null +++ b/Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse+HTTPMessage.h @@ -0,0 +1,35 @@ +// +// OHHTTPStubsResponse+HTTPMessage.h +// OHHTTPStubs +// +// Created by Olivier Halligon on 01/09/13. +// Copyright (c) 2013 AliSoftware. All rights reserved. +// + +#import "OHHTTPStubsResponse.h" + +@interface OHHTTPStubsResponse (HTTPMessage) + +/*! @name Building a response from HTTP Message data */ + +// TODO: Try to implement it using NSInputStream someday? + +/*! Builds a response given a message data as returned by `curl -is [url]`, that is containing both the headers and the body. + This method will split the headers and the body and build a OHHTTPStubsReponse accordingly + @param responseData The NSData containing the whole HTTP response, including the headers and the body + @return An `OHHTTPStubsResponse` describing the corresponding response to return by the stub + */ ++(instancetype)responseWithHTTPMessageData:(NSData*)responseData; + +/*! Builds a response given the name of a `"*.response"` file containing both the headers and the body. + The response file is expected to be in the specified bundle (or the application bundle if nil). + This method will split the headers and the body and build a OHHTTPStubsReponse accordingly + @param responseName The name of the `"*.response"` file (without extension) containing the whole HTTP response (including the headers and the body) + @param bundleOrNil The bundle in which the `"*.response"` file is located. If `nil`, the `[NSBundle bundleForClass:self.class]` will be used. + @return An `OHHTTPStubsResponse` describing the corresponding response to return by the stub + */ ++(instancetype)responseNamed:(NSString*)responseName + inBundle:(NSBundle*)bundleOrNil; + + +@end diff --git a/Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse+HTTPMessage.m b/Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse+HTTPMessage.m new file mode 100644 index 00000000..03d0e7a6 --- /dev/null +++ b/Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse+HTTPMessage.m @@ -0,0 +1,54 @@ +// +// OHHTTPStubsResponse+HTTPMessage.m +// OHHTTPStubs +// +// Created by Olivier Halligon on 01/09/13. +// Copyright (c) 2013 AliSoftware. All rights reserved. +// + +#import "OHHTTPStubsResponse+HTTPMessage.h" + +@implementation OHHTTPStubsResponse (HTTPMessage) + +#pragma mark Building response from HTTP Message Data (dump from "curl -is") + ++(instancetype)responseWithHTTPMessageData:(NSData*)responseData; +{ + NSData *data = [NSData data]; + NSInteger statusCode = 200; + NSDictionary *headers = @{}; + + CFHTTPMessageRef httpMessage = CFHTTPMessageCreateEmpty(kCFAllocatorDefault, FALSE); + if (httpMessage) + { + CFHTTPMessageAppendBytes(httpMessage, responseData.bytes, responseData.length); + + data = responseData; // By default + + if (CFHTTPMessageIsHeaderComplete(httpMessage)) + { + statusCode = (NSInteger)CFHTTPMessageGetResponseStatusCode(httpMessage); + headers = (__bridge_transfer NSDictionary *)CFHTTPMessageCopyAllHeaderFields(httpMessage); + data = (__bridge_transfer NSData *)CFHTTPMessageCopyBody(httpMessage); + } + CFRelease(httpMessage); + } + + return [self responseWithData:data + statusCode:(int)statusCode + headers:headers]; +} + ++(instancetype)responseNamed:(NSString*)responseName + inBundle:(NSBundle*)responsesBundle +{ + NSURL *responseURL = [responsesBundle?:[NSBundle bundleForClass:self.class] URLForResource:responseName + withExtension:@"response"]; + + NSData *responseData = [NSData dataWithContentsOfURL:responseURL]; + NSAssert(responseData, @"Could not find HTTP response named '%@' in bundle '%@'", responseName, responsesBundle); + + return [self responseWithHTTPMessageData:responseData]; +} + +@end diff --git a/Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse+JSON.h b/Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse+JSON.h new file mode 100644 index 00000000..1934c102 --- /dev/null +++ b/Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse+JSON.h @@ -0,0 +1,27 @@ +// +// OHHTTPStubsResponse+JSON.h +// OHHTTPStubs +// +// Created by Olivier Halligon on 01/09/13. +// Copyright (c) 2013 AliSoftware. All rights reserved. +// + +#import "OHHTTPStubsResponse.h" + +@interface OHHTTPStubsResponse (JSON) + +/*! Builds a response given a JSON object for the response body, status code, and headers. + @param jsonObject Object representing the response body. + Typically a `NSDictionary`; may be any object accepted by `+[NSJSONSerialization dataWithJSONObject:options:error:]` + @param statusCode The HTTP Status Code to use in the response + @param httpHeaders The HTTP Headers to return in the response + If a "Content-Type" header is not included, "Content-Type: application/json" will be added. + @return An `OHHTTPStubsResponse` describing the corresponding response to return by the stub + + @note This method typically calls responseWithData:statusCode:headers: passing the serialized JSON object as the data parameter and adding the Content-Type header if necessary. + */ ++ (instancetype)responseWithJSONObject:(id)jsonObject + statusCode:(int)statusCode + headers:(NSDictionary *)httpHeaders; + +@end diff --git a/Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse+JSON.m b/Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse+JSON.m new file mode 100644 index 00000000..aebcb990 --- /dev/null +++ b/Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse+JSON.m @@ -0,0 +1,31 @@ +// +// OHHTTPStubsResponse+JSON.m +// OHHTTPStubs +// +// Created by Olivier Halligon on 01/09/13. +// Copyright (c) 2013 AliSoftware. All rights reserved. +// + +#import "OHHTTPStubsResponse+JSON.h" + +@implementation OHHTTPStubsResponse (JSON) + +/*! @name Building a response from JSON objects */ + ++ (instancetype)responseWithJSONObject:(id)jsonObject + statusCode:(int)statusCode + headers:(NSDictionary *)httpHeaders +{ + if (!httpHeaders[@"Content-Type"]) + { + NSMutableDictionary* mutableHeaders = [NSMutableDictionary dictionaryWithDictionary:httpHeaders]; + mutableHeaders[@"Content-Type"] = @"application/json"; + httpHeaders = [NSDictionary dictionaryWithDictionary:mutableHeaders]; // make immutable again + } + + return [self responseWithData:[NSJSONSerialization dataWithJSONObject:jsonObject options:0 error:nil] + statusCode:statusCode + headers:httpHeaders]; +} + +@end diff --git a/Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse.h b/Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse.h new file mode 100644 index 00000000..95c85f88 --- /dev/null +++ b/Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse.h @@ -0,0 +1,219 @@ +/*********************************************************************************** + * + * Copyright (c) 2012 Olivier Halligon + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + ***********************************************************************************/ + + +//////////////////////////////////////////////////////////////////////////////// +#pragma mark - Imports + +#import + +//////////////////////////////////////////////////////////////////////////////// +#pragma mark - Defines & Constants + +// Standard download speeds. +extern const double +OHHTTPStubsDownloadSpeedGPRS, +OHHTTPStubsDownloadSpeedEDGE, +OHHTTPStubsDownloadSpeed3G, +OHHTTPStubsDownloadSpeed3GPlus, +OHHTTPStubsDownloadSpeedWifi; + + +//////////////////////////////////////////////////////////////////////////////// +#pragma mark - Interface + +/*! Stubs Response. This describes a stubbed response to be returned by the URL Loading System, including its + HTTP headers, body, statusCode and response time. */ +@interface OHHTTPStubsResponse : NSObject + +//////////////////////////////////////////////////////////////////////////////// +#pragma mark - Properties + +@property(nonatomic, strong) NSDictionary* httpHeaders; +@property(nonatomic, assign) int statusCode; +@property(nonatomic, strong) NSInputStream* inputStream; +@property(nonatomic, assign) unsigned long long dataSize; +@property(nonatomic, assign) NSTimeInterval requestTime; //!< Defaults to 0.0 +//! @note if responseTime<0, it is interpreted as a download speed in KBps ( -200 => 200KB/s ) +@property(nonatomic, assign) NSTimeInterval responseTime; +@property(nonatomic, strong) NSError* error; + + + + +//////////////////////////////////////////////////////////////////////////////// +#pragma mark - Commodity Constructors +/*! @name Commodity */ + +/* -------------------------------------------------------------------------- */ +#pragma mark > Building response from NSData + +/*! Builds a response given raw data. + @note Internally calls `-initWithInputStream:dataSize:statusCode:headers:` with and inputStream build from the NSData. + + @param data The raw data to return in the response + @param statusCode The HTTP Status Code to use in the response + @param httpHeaders The HTTP Headers to return in the response + @return An `OHHTTPStubsResponse` describing the corresponding response to return by the stub + */ ++(instancetype)responseWithData:(NSData*)data + statusCode:(int)statusCode + headers:(NSDictionary*)httpHeaders; + + +/* -------------------------------------------------------------------------- */ +#pragma mark > Building response from a file + +/*! Useful macro to build a path given a file name and a bundle. + @param fileName The name of the file to get the path to, including file extension + @param bundleOrNil The bundle in which the file is located. If nil, the application bundle (`[NSBundle bundleForClass:self.class]`) is used + @return The path of the given file in the given bundle + */ +#define OHPathForFileInBundle(fileName,bundleOrNil) ({ \ + [(bundleOrNil?:[NSBundle bundleForClass:self.class]) pathForResource:[fileName stringByDeletingPathExtension] ofType:[fileName pathExtension]]; \ +}) + +/*! Useful macro to build a path to a file in the Documents's directory in the app sandbox, used by iTunes File Sharing for example. + @param fileName The name of the file to get the path to, including file extension + @return The path of the file in the Documents directory in your App Sandbox + */ +#define OHPathForFileInDocumentsDir(fileName) ({ \ + NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); \ + NSString *basePath = (paths.count > 0) ? [paths objectAtIndex:0] : nil; \ + [basePath stringByAppendingPathComponent:fileName]; \ +}) + +/*! Useful macro to build an NSBundle located in the application's resources simply from its name + @param bundleBasename The base name, without extension (extension is assumed to be ".bundle"). + @return The NSBundle object representing the bundle with the given basename located in your application's resources. + */ +#define OHResourceBundle(bundleBasename) ({ \ + [NSBundle bundleWithPath:[[NSBundle bundleForClass:self.class] pathForResource:bundleBasename ofType:@"bundle"]]; \ +}) + + +/*! Builds a response given a file path, the status code and headers. + @param filePath The file path that contains the response body to return. + @param statusCode The HTTP Status Code to use in the response + @param httpHeaders The HTTP Headers to return in the response + @return An `OHHTTPStubsResponse` describing the corresponding response to return by the stub + @note It is encouraged to use the `OHPathForFileInBundle(fileName, bundleOrNil)` and `OHResourceBundle(bundleBasename)` macros + to easily build a path to a file located in the app bundle or any arbitrary bundle. + Likewise, you may use the `OHPathForFileInDocumentsDir(fileName)` macro to build a path to a file located in + the Documents directory of your application' sandbox. + */ ++(instancetype)responseWithFileAtPath:(NSString *)filePath + statusCode:(int)statusCode + headers:(NSDictionary*)httpHeaders; + +/* -------------------------------------------------------------------------- */ +#pragma mark > Building an error response + +/*! Builds a response that corresponds to the given error + @param error The error to use in the stubbed response. + @return An `OHHTTPStubsResponse` describing the corresponding response to return by the stub + @note For example you could use an error like `[NSError errorWithDomain:NSURLErrorDomain code:kCFURLErrorNotConnectedToInternet userInfo:nil]` + */ ++(instancetype)responseWithError:(NSError*)error; + + +//////////////////////////////////////////////////////////////////////////////// +#pragma mark - Commotidy Setters + +/*! Set the `responseTime` of the `OHHTTPStubsResponse` and return `self`. Useful for chaining method calls. + + _Usage example:_ +
return [[OHHTTPStubsReponse responseWithData:data statusCode:200 headers:nil] responseTime:5.0];
+ + @param responseTime If positive, the amount of time used to send the entire response. + If negative, the rate in KB/s at which to send the response data. + Useful to simulate slow networks for example. You may use the OHHTTPStubsDownloadSpeed* constants here. + @return `self` (= the same `OHHTTPStubsResponse` that was the target of this method). Useful for chaining method calls. + */ +-(instancetype)responseTime:(NSTimeInterval)responseTime; + +/*! Set both the `requestTime` and the `responseTime` of the `OHHTTPStubsResponse` at once. Useful for chaining method calls. + + _Usage example:_ +
return [[OHHTTPStubsReponse responseWithData:data statusCode:200 headers:nil]
+               requestTime:1.0 responseTime:5.0];
+ + @param requestTime The time to wait before the response begins to send. This value must be greater than or equal to zero. + @param responseTime If positive, the amount of time used to send the entire response. + If negative, the rate in KB/s at which to send the response data. + Useful to simulate slow networks for example. You may use the OHHTTPStubsDownloadSpeed* constants here. + @return `self` (= the same `OHHTTPStubsResponse` that was the target of this method). Useful for chaining method calls. + */ +-(instancetype)requestTime:(NSTimeInterval)requestTime responseTime:(NSTimeInterval)responseTime; + + +//////////////////////////////////////////////////////////////////////////////// +#pragma mark - Initializers +/*! @name Initializers */ + +/*! Designed initializer. Initialize a response with the given input stream, dataSize, statusCode and headers. + @param inputStream The input stream that will provide the data to return in the response + @param dataSize The size of the data in the stream. + @param statusCode The HTTP Status Code to use in the response + @param httpHeaders The HTTP Headers to return in the response + @return An `OHHTTPStubsResponse` describing the corresponding response to return by the stub + @note You will probably never need to call this method yourself. Prefer the other initializers (that will call this method eventually) + */ +-(instancetype)initWithInputStream:(NSInputStream*)inputStream + dataSize:(unsigned long long)dataSize + statusCode:(int)statusCode + headers:(NSDictionary*)httpHeaders; + + +/*! Initialize a response with a given file path, statusCode and headers. + @param filePath The file path of the data to return in the response + @param statusCode The HTTP Status Code to use in the response + @param httpHeaders The HTTP Headers to return in the response + @return An `OHHTTPStubsResponse` describing the corresponding response to return by the stub + @note This method simply builds the NSInputStream, compute the file size, and then call `-initWithInputStream:dataSize:statusCode:headers:` + */ +-(instancetype)initWithFileAtPath:(NSString*)filePath + statusCode:(int)statusCode + headers:(NSDictionary*)httpHeaders; + + +/*! Initialize a response with the given data, statusCode and headers. + @param data The raw data to return in the response + @param statusCode The HTTP Status Code to use in the response + @param httpHeaders The HTTP Headers to return in the response + @return An `OHHTTPStubsResponse` describing the corresponding response to return by the stub + */ +-(instancetype)initWithData:(NSData*)data + statusCode:(int)statusCode + headers:(NSDictionary*)httpHeaders; + + +/*! Designed initializer. Initialize a response with the given error. + @param error The error to use in the stubbed response. + @return An `OHHTTPStubsResponse` describing the corresponding response to return by the stub + @note For example you could use an error like `[NSError errorWithDomain:NSURLErrorDomain code:kCFURLErrorNotConnectedToInternet userInfo:nil]` + */ +-(instancetype)initWithError:(NSError*)error; + +@end diff --git a/Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse.m b/Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse.m new file mode 100644 index 00000000..22c8cc7f --- /dev/null +++ b/Pods/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse.m @@ -0,0 +1,173 @@ +/*********************************************************************************** + * + * Copyright (c) 2012 Olivier Halligon + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + ***********************************************************************************/ + +#if ! __has_feature(objc_arc) +#error This file is expected to be compiled with ARC turned ON +#endif + +//////////////////////////////////////////////////////////////////////////////// +#pragma mark - Imports + +#import "OHHTTPStubsResponse.h" + +//////////////////////////////////////////////////////////////////////////////// +#pragma mark - Defines & Constants + +const double OHHTTPStubsDownloadSpeedGPRS =- 56 / 8; // kbps -> KB/s +const double OHHTTPStubsDownloadSpeedEDGE =- 128 / 8; // kbps -> KB/s +const double OHHTTPStubsDownloadSpeed3G =- 3200 / 8; // kbps -> KB/s +const double OHHTTPStubsDownloadSpeed3GPlus =- 7200 / 8; // kbps -> KB/s +const double OHHTTPStubsDownloadSpeedWifi =- 12000 / 8; // kbps -> KB/s + +//////////////////////////////////////////////////////////////////////////////// +#pragma mark - Implementation + +@implementation OHHTTPStubsResponse + +//////////////////////////////////////////////////////////////////////////////// +#pragma mark - Commodity Constructors + + +#pragma mark > Building response from NSData + ++(instancetype)responseWithData:(NSData*)data + statusCode:(int)statusCode + headers:(NSDictionary*)httpHeaders +{ + OHHTTPStubsResponse* response = [[self alloc] initWithData:data + statusCode:statusCode + headers:httpHeaders]; + return response; +} + + +#pragma mark > Building response from a file + ++(instancetype)responseWithFileAtPath:(NSString *)filePath + statusCode:(int)statusCode + headers:(NSDictionary *)httpHeaders +{ + OHHTTPStubsResponse* response = [[self alloc] initWithFileAtPath:filePath + statusCode:statusCode + headers:httpHeaders]; + return response; +} + + +#pragma mark > Building an error response + ++(instancetype)responseWithError:(NSError*)error +{ + OHHTTPStubsResponse* response = [[self alloc] initWithError:error]; + return response; +} + +//////////////////////////////////////////////////////////////////////////////// +#pragma mark - Commotidy Setters + +-(instancetype)responseTime:(NSTimeInterval)responseTime +{ + self.responseTime = responseTime; + return self; +} + +-(instancetype)requestTime:(NSTimeInterval)requestTime responseTime:(NSTimeInterval)responseTime +{ + self.requestTime = requestTime; + self.responseTime = responseTime; + return self; +} + +//////////////////////////////////////////////////////////////////////////////// +#pragma mark - Initializers + +-(instancetype)initWithInputStream:(NSInputStream*)inputStream + dataSize:(unsigned long long)dataSize + statusCode:(int)statusCode + headers:(NSDictionary*)httpHeaders +{ + self = [super init]; + if (self) + { + self.inputStream = inputStream; + self.dataSize = dataSize; + self.statusCode = statusCode; + NSMutableDictionary * headers = [NSMutableDictionary dictionaryWithDictionary:httpHeaders]; + headers[@"Content-Length"] = [NSString stringWithFormat:@"%llu",self.dataSize]; + self.httpHeaders = [NSDictionary dictionaryWithDictionary:headers]; + } + return self; +} + +-(instancetype)initWithFileAtPath:(NSString*)filePath + statusCode:(int)statusCode + headers:(NSDictionary*)httpHeaders +{ + NSInputStream* inputStream = [NSInputStream inputStreamWithFileAtPath:filePath]; + NSDictionary* attributes = [NSFileManager.defaultManager attributesOfItemAtPath:filePath error:nil]; + unsigned long long fileSize = [[attributes valueForKey:NSFileSize] unsignedLongLongValue]; + self = [self initWithInputStream:inputStream + dataSize:fileSize + statusCode:statusCode + headers:httpHeaders]; + return self; +} + +-(instancetype)initWithData:(NSData*)data + statusCode:(int)statusCode + headers:(NSDictionary*)httpHeaders +{ + NSInputStream* inputStream = [NSInputStream inputStreamWithData:data?:[NSData data]]; + self = [self initWithInputStream:inputStream + dataSize:data.length + statusCode:statusCode + headers:httpHeaders]; + return self; +} + +-(instancetype)initWithError:(NSError*)error +{ + self = [super init]; + if (self) { + self.error = error; + } + return self; +} + +-(NSString*)debugDescription +{ + return [NSString stringWithFormat:@"<%@ %p requestTime:%f responseTime:%f status:%d dataSize:%llu>", + self.class, self, self.requestTime, self.responseTime, self.statusCode, self.dataSize]; +} + +//////////////////////////////////////////////////////////////////////////////// +#pragma mark - Accessors + +-(void)setRequestTime:(NSTimeInterval)requestTime +{ + NSAssert(requestTime >= 0, @"Invalid Request Time (%f) for OHHTTPStubResponse. Request time must be greater than or equal to zero",requestTime); + _requestTime = requestTime; +} + +@end diff --git a/Pods/OHHTTPStubs/README.md b/Pods/OHHTTPStubs/README.md index a6b8b61f..57710546 100644 --- a/Pods/OHHTTPStubs/README.md +++ b/Pods/OHHTTPStubs/README.md @@ -1,189 +1,238 @@ OHHTTPStubs =========== -A class to stub network requests easily: test your apps with fake network data (stubbed from file) and custom response time +A class to stub network requests easily: test your apps with **fake network data** (stubbed from file) and **custom response times**. -* [Basic Usage](#basic-usage) -* [The OHHTTPStubsResponse object](#the-ohhttpstubsresponse-object) +`OHHTTPStubs` is very useful to write **Unit Tests** and return fake network data from your fixtures, or to **simulate slow networks** in order to check your application behavior in bad network conditions. +It works with `NSURLConnection`, `AFNetworking`, or any networking framework you chose to use. + +[![Build Status](https://travis-ci.org/AliSoftware/OHHTTPStubs.png?branch=master)](https://travis-ci.org/AliSoftware/OHHTTPStubs) + +---- + +* [How it works](#how-it-works) +* [Documentation](#documentation) +* [Usage examples](#usage-examples) + * [Stub all requests with some given NSData](#stub-all-requests-with-some-given-nsdata) + * [Stub only requests to your WebService](#stub-only-requests-to-your-webservice) + * [Set request and response time](#set-request-and-response-time) + * [Simulate a down network](#simulate-a-down-network) * [Advanced Usage](#advanced-usage) - * [Return a response depending on the request](#return-a-response-depending-on-the-request) - * [Using download speed instead of responseTime](#using-download-speed-instead-of-responsetime) - * [Return quickly when `onlyCheck=YES`](#return-quickly-when-onlycheckyes) - * [Stack multiple requestHandlers](#stack-multiple-requesthandlers) -* [Complete Example](#complete-example) + * [Use macros to build your fixtures path](#use-macros-to-build-your-fixtures-path) + * [Using download speed instead of responseTime](#using-download-speed-instead-of-responsetime) + * [Stack multiple stubs and remove installed stubs](#stack-multiple-stubs-and-remove-installed-stubs) + * [Name your stubs and log their activation](#name-your-stubs-and-log-their-activation) + * [OHHTTPStubs and NSURLSession](#ohhttpstubs-and-nsurlsession) +* [Installing in your projects](#installing-in-your-projects) +* [About OHHTTPStubs Unit Tests](#about-ohhttpstubs-unit-tests) * [Change Log](#change-log) -* [ARC Support](#arc-support) * [License and Credits](#license-and-credits) ---- -## Basic Usage +## How it works -This is aimed to be very simple to use. It uses block to intercept outgoing requests and allow you to -return data from a file instead. +Using `OHHTTPStubs` is as simple as calling `stubRequestsPassingTest:withStubResponse:` to tell which requests you want to stub and what data you want to respond with. -This is the most simple way to use it: +For every request sent to the network, whatever the framework used (`NSURLConnection`, +[`AFNetworking`](https://github.com/AFNetworking/AFNetworking/), …): - [OHHTTPStubs addRequestHandler:^OHHTTPStubsResponse*(NSURLRequest *request, BOOL onlyCheck) - { - return [OHHTTPStubsResponse responseWithFile:@"response.json" contentType:@"text/json" responseTime:2.0]; - }]; +* The block passed as first argument of `stubRequestsPassingTest:withStubResponse:` will be called to check if we need to stub this request. +* If the return value of this block is YES, the block passed as second argument will be called to let you return an `OHHTTPStubsResponse` object, describing the fake response to return. -This will return the `NSData` corresponding to the content of the "`response.json`" file (that must be in your bundle) -with a "`Content-Type`" header of "`text/json`" in the HTTP response, after 2 seconds. +_(In practice, it uses the URL Loading System of Cocoa and a custom `NSURLProtocol` to intercept the requests and stub them)_ -## The OHHTTPStubsResponse object -Each time a network request is done by your application - (whatever the framework used, `NSURLConnection`, [AFNetworking](https://github.com/AFNetworking/AFNetworking/), or anything else) -this requestHandler block will be called, allowing you to return an `OHHTTPStubsResponse` object -describing the response to return. If you return a non-nil `OHHTTPStubsResponse`, it will automatically -build a NSURLResponse and behave exactly like if you received the response from the network. -_If your return `nil`, the normal request will be sent._ +## Documentation -The `OHHTTPStubsResponse` class exposes multiple initializers: +`OHHTTPStubs` headers are fully documented using Appledoc-like / Headerdoc-like comments in the header files. +When you [install it using CocoaPods](#installing-in-your-projects), you will get a docset for free installed in your Xcode Organizer. -##### The designed intializer - +(id)responseWithData:(NSData*)data - statusCode:(int)statusCode - responseTime:(NSTimeInterval)responseTime - headers:(NSDictionary*)httpHeaders; +Don't hesitate to take a look into `OHHTTPStubsResponse.h`, `OHHTTPStubsResponse+JSON.h` and `OHHTTPStubsResponse.HTTPMessage.h` to see all the commodity constructors, constants and macros available. -##### Commodity initializer to load data from a file in your bundle - +(id)responseWithFile:(NSString*)fileName - statusCode:(int)statusCode - responseTime:(NSTimeInterval)responseTime - headers:(NSDictionary*)httpHeaders; -##### Useful short-form initializer to load data from a file in your bundle, using the specified "Content-Type" header - +(id)responseWithFile:(NSString*)fileName - contentType:(NSString*)contentType - responseTime:(NSTimeInterval)responseTime; - -##### To respond with an error instead of a success - +(id)responseWithError:(NSError*)error; -_(e.g. you could use an error like `[NSError errorWithDomain:NSURLErrorDomain code:404 userInfo:nil]`)_ +## Usage examples -## Advanced Usage +### Stub all requests with some given NSData -### Return a response depending on the request +With the code below, every network request (because you returned YES in the first block) will return a stubbed response containing the data `"Hello World!"`: -Of course, and that's the main reason this is implemented with blocks, -you can do whatever you need in the block implementation. This includes -checking the request URL to see if you want to return a stub or not, -and pick the right file according to the requested URL. + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return YES; // Stub ALL requests without any condition + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + // Stub all those requests with "Hello World!" string + NSData* stubData = [@"Hello World!" dataUsingEncoding:NSUTF8StringEncoding]; + return [OHHTTPStubsResponse responseWithData:stubData statusCode:200 headers:nil]; + }]; + -Example: +### Stub only requests to your WebService + +This is typically useful in your Unit Tests to only stub specific requests targeted to a given host or WebService, for example. + +With the code below, only requests to the `mywebservice.com` host will be stubbed. Requests to any other host will hit the real world: + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mywebservice.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + // Stub it with our "wsresponse.json" stub file + return [OHHTTPStubsResponse responseWithFileAtPath:OHPathForFileInBundle(@"wsresponse.json",nil) + statusCode:200 headers:@{@"Content-Type":@"text/json"}]; + }]; + +This example also demonstrate how to **easily return the content of a given file in your application bundle**. +This is useful if you have all your fixtures (stubbed responses for your Unit Tests) in your Xcode project linked with your Unit Test target. + +> Note: You may even put all your fixtures in a custom bundle (let's call it Fixtures.bundle) and then use the helper macros to get it with `OHPathForFileInBundle(@"wsresponse.json",OHResourceBundle(@"Fixtures"))`. + +### Set request and response time + +You can simulate a slow network by setting the `requestTime` and `responseTime` of your `OHHTTPStubsResponse`. +_This is useful to check that your user interface does not freeze and that you have all your activity indicators working while waiting for responses in bad network conditions._ - [OHHTTPStubs addRequestHandler:^OHHTTPStubsResponse*(NSURLRequest *request, BOOL onlyCheck) - { - if ([request.URL.absoluteString hasPrefix:@".json"]) { - NSString* basename = [request.URL.absoluteString lastPathComponent] - return [OHHTTPStubsResponse responseWithFile:basename contentType:@"text/json" responseTime:2.0]; - } else { - return nil; // Don't stub - } - }]; +You may use the commoidty chainable setters `responseTime:` and `requestTime:responseTime:` to set those values and easily chain method calls: + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mywebservice.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + return [[OHHTTPStubsResponse responseWithJSONObject:someDict statusCode:200 headers:nil] + requestTime:1.0 responseTime:3.0]; + }]; + +`OHHTTPStubs` will wait `requestTime` before sending the `NSHTTPURLResponse`, and then start sending chunks of the stub data regularly during the period of `responseTime`, to simulate the slow network. + +At the end, you will only have the full content of your stub data after `requestTime+responseTime`, time after which the `completion` block or `connectionDidFinishLoading:` delegate method will be called. + +> You can specify a **network speed** instead of a `responseTime` by using a negative value. [See below](#using-download-speed-instead-of-responsetime). + +### Simulate a down network + +You may also return a network error for your stub. For example, you can easily simulate an absence of network connection like this: + + [OHHTTPStubsResponse responseWithError:[NSError errorWithDomain:NSURLErrorDomain code:kCFURLErrorNotConnectedToInternet userInfo:nil]]; + + +## Advanced Usage + +### Use macros to build your fixtures path + +`OHHTTPStubsResponse.h` includes a useful set of macros to build a path to your fixtures easily, like `OHPathForFileInBundle`, `OHPathForFileInDocumentsDir` and `OHResourceBundle`. You are encouraged to use them to build your path more easily. + +> Especially, they use `[NSBundle bundleForClass:self.class]` to reference your app bundle (and not `[NSBundle mainBundle]` as one may think), so that they still work with OCUnit and XCTestKit when unit-testing your app in the Simulator. ### Using download speed instead of responseTime -When building the `OHHTTPStubsResponse` object, you can specify a response time (in seconds) so -that the sending of the fake response will be postponed (using GCD's `dispatch_after function`). -This allows you to simulate a slow network for example. +When building the `OHHTTPStubsResponse` object, you can specify a response time (in seconds) so that the sending of the fake response will be spread over time. This allows you to simulate a slow network for example. ([see "Set request and response time"](#set-request-and-response-time)) -If you specify a negative value for the responseTime parameter, instead of being interpreted as -a time in seconds, it will be interpreted as a download speed in KBytes/s. -In that case, the response time will be computed using the size of the response's data to simulate -the indicated download speed. +If you specify a negative value for the responseTime parameter, instead of being interpreted as a time in seconds, it will be interpreted as a download speed in KBytes/s. In that case, the response time will be computed using the size of the response's data to simulate the indicated download speed. The `OHHTTPStubsResponse` header defines some constants for standard download speeds: -* `OHHTTPStubsDownloadSpeedGPRS` : 56 kbps (7 KB/s) -* `OHHTTPStubsDownloadSpeedEDGE` : 128 kbps (16 KB/s) -* `OHHTTPStubsDownloadSpeed3G` : 3200 kbps (400 KB/s) -* `OHHTTPStubsDownloadSpeed3GPlus` : 7200 kbps (900 KB/s) -* `OHHTTPStubsDownloadSpeedWifi` : 12000 kbps (1500 KB/s) - -### Return quickly when `onlyCheck=YES` - -If the `onlyCheck` parameter of the requestHandler block is `YES`, then it means that the handler is called - only to check if you will be able to return a stubbed response or if it has to do the standard request. -In this scenario, the response will not actually be used but will only be compared to `nil` to check if it has to be stubbed later. - _The handler will be called later again (with `onlyCheck=NO`) to fetch the actual OHHTTPStubsResponse object._ + +``` +OHHTTPStubsDownloadSpeedGPRS = -7 = 7 KB/s = 56 kbps +OHHTTPStubsDownloadSpeedEDGE = -16 = 16 KB/s = 128 kbps +OHHTTPStubsDownloadSpeed3G = -400 = 400 KB/s = 3200 kbps +OHHTTPStubsDownloadSpeed3GPlus = -900 = 900 KB/s = 7200 kbps +OHHTTPStubsDownloadSpeedWifi = -1500 = 1500 KB/s = 12000 kbps +``` + +Example: + + return [[OHHTTPStubsResponse responseWithData:nil statusCode:400 headers:nil] + responseTime:OHHTTPStubsDownloadSpeed3G]; + + + +### Stack multiple stubs and remove installed stubs + +* You can call `stubRequestsPassingTest:withStubResponse:` multiple times. It will just add the stubs in an internal list of stubs. + +_This may be useful to install different stubs in various places in your code, or to separate different stubbing conditions more easily. See the `OHHTTPStubsDemo` project for a typical example._ + +When a network request is performed by the system, the **stubs are called in the reverse order that they have been added**, the last added stub having priority over the first added ones. +The first stub that returns YES for the first parameter of `stubRequestsPassingTest:withStubResponse:` is then used to reply to the request. + +* You can remove any given stub with the `removeStub:` method. This method takes as a parameter the `id` object returned by `stubRequestsPassingTest:withStubResponse:` _(Note: this returned object is already retained by `OHHTTPStubs` while the stub is installed, so there is no need to keep a `__strong` reference to it)_. +* You can remove the latest added stub with the `removeLastStub` method. +* You can also remove all stubs at once with the `removeAllStubs` method. + +This last one is useful when using `OHHTTPStubs` in your Unit Tests, to remove all installed stubs at the end of each of your test case to avoid stubs installed in one test case to be still installed for the next test case. + + - (void)tearDown + { + [OHHTTPStubs removeAllStubs]; + } + +### Name your stubs and log their activation + +You can add a name of your choice to your stubs. The only purpose of this is to easily identify your stubs for debugging, like when displaying them in your console. + + id stub = [OHHTTPStubs stubRequestsPassingTest:... withStubResponse:...]; + stub.name = @"Stub for text files"; -So in such cases (`onlyCheck==YES`), you can simply return `nil` if you don't want to provide a stubbed response, - and **_any_ non-nil value** to indicate that you will provide a stubbed response later. +You can even imagine applying the `.name = ...` affectation directly if you don't need to use the returned `id` otherwise: -This may be useful if you intend to do some no-so-fast work to build your real `OHHTTPStubsResponse` - (like reading some large file for example): in that case you can quickly return a dummy value when `onlyCheck==YES` - without the burden of building the actual `OHHTTPStubsResponse` object. -You will obviously return the real `OHHTTPStubsResponse` in the later call when `onlyCheck==NO`. + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + ... + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + ... + }].name = @"Stub for text files"; -There is a macro `OHHTTPStubsResponseUseStub` provided in the header that you can use as a dummy return value - for that purpose _(it actually evaluates to `(OHHTTPStubsReponse*)1`)_ +You can then list all the installed stubs using `[OHHTTPStubs allStubs]`, which return an array of `id` objects so you can display their `name` on the console. This is useful to check that you didn't forget to remove some previous stubs that are still installed for example. +You can also setup a block to execute each time a request has been stubbed, using `onStubActivation:` method, typically to log the stub being used for each request: -### Stack multiple requestHandlers + [OHHTTPStubs onStubActivation:^(NSURLRequest *request, id stub) { + NSLog(@"%@ stubbed by %@", request.URL, stub.name); + }]; -You can call `+addRequestHandler:` multiple times. -It will just add the response handlers in an internal list of handler. +### OHHTTPStubs and NSURLSession -When a network request is performed by the system, the response handlers are called in the reverse - order that they have been added, the last added handler having priority over the first added ones. - The first non-nil OHHTTPStubsResponse returned is used to reply to the request. +`OHHTTPStubs` use a custom private `NSURLProtocol` to intercept its requests. -_This may be useful to install different stubs in different classes (say different UIViewControllers) and various places in your application._ +`OHHTTPStubs` is automatically enabled by default, both for: -You can remove the latest added handler with the `removeLastRequestHandler` method. +* requests made using `NSURLConnection` or `[NSURLSession sharedSession]` _(that are based on `[NSURLProtocol registerProtocol:]` to look for custom protocols for every requests)_, because this protocol is installed as soon as you use the `OHHTTPStubs` class _(installed in the `+initialize` method)_ +* requests made using a `NSURLSession` created with a `NSURLSessionConfiguration` and `[NSURLSession sessionWithConfiguration:]` _(thanks to method swizzling that insert the private protocol used by `OHHTTPStubs` into the `protocolClasses` of `[NSURLSessionConfiguration defaultSessionConfiguration]` and `[NSURLSessionConfiguration ephemeralSessionConfiguration]` automagically)_ -You can also remove any given handler with the `removeRequestHandler:` method. This method takes as a parameter the object returned by `addRequestHandler:`. _Note that this returned object is already retained by OHHTTPStubs, so you may keep it in a `__weak` variable._ +> Note however that `OHHTTPStubs` **can't work on background sessions** (sessions created using `[NSURLSessionConfiguration backgroundSessionConfiguration]`) because background sessions don't allow the use of custom `NSURLProtocols`. There's nothing we can do about it, sorry. -## Complete example +If you need to disable (and re-enable) `OHHTTPStubs` globally or per session, you can use: - NSArray* stubs = [NSArray arrayWithObjects:@"file1", @"file2", nil]; - - [OHHTTPStubs addRequestHandler:^OHHTTPStubsResponse*(NSURLRequest *request, BOOL onlyCheck) - { - NSString* basename = [request.URL.absoluteString lastPathComponent]; - if (onlyCheck) { - return ([stubs containsObject:basename] ? OHHTTPStubsResponseUseStub : nil); - } - - NSString* file = [basename stringByAppendingPathExtension:@"json"]; - return [OHHTTPStubsResponse responseWithFile:file contentType:@"text/json" - responseTime:OHHTTPStubsDownloadSpeedEDGE]; - }]; - - ... - - // Then this call (sending a request using the AFNetworking framework) will actually - // receive a fake response issued from the file "file1.json" - NSURLRequest* request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.example.com/file1"]]; - AFJSONRequestOperation* req = - [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) - { - ... - } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) - { - ... - }]; - [req start]; +* `[OHHTTPStubs setEnabled:]` for `NSURLConnection`/`[NSURLSession sharedSession]`-based requests +* `[OHHTTPStubs setEnabled:forSessionConfiguration:]` for requests sent on a session created using `[NSURLSession sessionWithConfiguration:...]` + +_There is generally no need to explicitly call `setEnabled:` or `setEnabled:forSessionConfiguration:` using `YES` as this is the default._ + +---- + +## Installing in your projects + +[CocoaPods](http://cocoapods.org/) is the easiest way to add third-party libraries like `OHHTTPStubs` in your projects. Simply add `pod 'OHHTTPStubs'` to your `Podfile` and you are done. +_Note: `OHHTTPStubs` needs iOS5 minimum._ +> **Warning: Be careful anyway to include `OHHTTPStubs` only in your test targets, or only use it in `#if DEBUG` portions, so that its code is not included in your release for the AppStore !** + +In case you don't want to use CocoaPods (but you should!!!), the `OHHTTPStubs` project is provided as a Xcode project that generates a static library, so simply add its xcodeproj to your workspace and link your app against the `libOHHTTPStubs.a` library. See [here](https://github.com/AliSoftware/OHHTTPStubs/wiki/Detailed-Integration-Instruction) for detailed instructions. + +_PS: If you get an "unrecognised selector sent to instance" runtime error, make sure that the project you want to link with `OHHTTPStubs` has the `-ObjC` flag in its "Other Linker Flags" (`OTHER_LDFLAGS`) build setting (this is normally the default in projects created in latest versions of Xcode). [See the Apple doc for more details](https://developer.apple.com/library/mac/qa/qa1490/_index.html)._ + +## About `OHHTTPStubs` Unit Tests + +If you want to be able to run `OHHTTPStubs`' Unit Tests, be sure you cloned the [`AFNetworking`](https://github.com/AFNetworking/AFNetworking/) submodule (by using the `--recursive` option when cloning your repo, or using `git submodule init` and `git submodule update`) as it is used by some of `OHHTTPStubs` unit tests. + +Every contribution to add more unit tests is welcome. ## Change Log The changelog is available [here in the dedicated wiki page](https://github.com/AliSoftware/OHHTTPStubs/wiki/ChangeLog). -## ARC Support - -This classes now support both ARC and non-ARC projects :) ## License and Credits -This project is brought to you by Olivier Halligon and is under MIT License - -It has been inspired by [this article from InfiniteLoop.dk](http://www.infinite-loop.dk/blog/2011/09/using-nsurlprotocol-for-injecting-test-data/) -_(See also his [GitHub repository](https://github.com/InfiniteLoopDK/ILTesting))_ +This project and library has been created by Olivier Halligon (@AliSoftware) and is under the MIT License. +It has been inspired by [this article from InfiniteLoop.dk](http://www.infinite-loop.dk/blog/2011/09/using-nsurlprotocol-for-injecting-test-data/). +I would also like to thank to @kcharwood for its contribution, and everyone who contributed to this project on GitHub. diff --git a/Pods/Pods-environment.h b/Pods/Pods-environment.h index 1166b659..680a8091 100644 --- a/Pods/Pods-environment.h +++ b/Pods/Pods-environment.h @@ -9,8 +9,8 @@ // Reachability #define COCOAPODS_POD_AVAILABLE_Reachability #define COCOAPODS_VERSION_MAJOR_Reachability 3 -#define COCOAPODS_VERSION_MINOR_Reachability 0 -#define COCOAPODS_VERSION_PATCH_Reachability 0 +#define COCOAPODS_VERSION_MINOR_Reachability 1 +#define COCOAPODS_VERSION_PATCH_Reachability 1 // ReactiveCocoa #define COCOAPODS_POD_AVAILABLE_ReactiveCocoa @@ -33,6 +33,6 @@ // SocketRocket #define COCOAPODS_POD_AVAILABLE_SocketRocket #define COCOAPODS_VERSION_MAJOR_SocketRocket 0 -#define COCOAPODS_VERSION_MINOR_SocketRocket 2 -#define COCOAPODS_VERSION_PATCH_SocketRocket 0 +#define COCOAPODS_VERSION_MINOR_SocketRocket 3 +#define COCOAPODS_VERSION_PATCH_SocketRocket 1 diff --git a/Pods/Pods-specs-Acknowledgements.markdown b/Pods/Pods-specs-Acknowledgements.markdown index 3fa72ee0..ecd87cce 100644 --- a/Pods/Pods-specs-Acknowledgements.markdown +++ b/Pods/Pods-specs-Acknowledgements.markdown @@ -34,33 +34,13 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ## OHHTTPStubs -/*********************************************************************************** - * - * Copyright (c) 2012 Olivier Halligon - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *********************************************************************************** - * - * Any comment or suggestion welcome. Referencing this project in your AboutBox is appreciated. - * Please tell me if you use this class so we can cross-reference our projects. - * - ***********************************************************************************/ - +- MIT LICENSE - + +Copyright (c) 2012 Olivier Halligon + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Generated by CocoaPods - http://cocoapods.org diff --git a/Pods/Pods-specs-Acknowledgements.plist b/Pods/Pods-specs-Acknowledgements.plist index 9eed1cd2..7f0294c1 100644 --- a/Pods/Pods-specs-Acknowledgements.plist +++ b/Pods/Pods-specs-Acknowledgements.plist @@ -49,35 +49,15 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. FooterText - /*********************************************************************************** - * - * Copyright (c) 2012 Olivier Halligon - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - *********************************************************************************** - * - * Any comment or suggestion welcome. Referencing this project in your AboutBox is appreciated. - * Please tell me if you use this class so we can cross-reference our projects. - * - ***********************************************************************************/ - + - MIT LICENSE - + +Copyright (c) 2012 Olivier Halligon + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Title OHHTTPStubs Type diff --git a/Pods/Pods-specs-Kiwi-prefix.pch b/Pods/Pods-specs-Kiwi-prefix.pch index 86e1f1d0..48315b30 100644 --- a/Pods/Pods-specs-Kiwi-prefix.pch +++ b/Pods/Pods-specs-Kiwi-prefix.pch @@ -3,3 +3,8 @@ #endif #import "Pods-specs-environment.h" + + + +#import + diff --git a/Pods/Pods-specs-Kiwi.xcconfig b/Pods/Pods-specs-Kiwi.xcconfig index 21bb2b2d..072c0453 100644 --- a/Pods/Pods-specs-Kiwi.xcconfig +++ b/Pods/Pods-specs-Kiwi.xcconfig @@ -1,2 +1,2 @@ -PODS_SPECS_KIWI_FRAMEWORK_SEARCH_PATHS = $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(DEVELOPER_LIBRARY_DIR)/Frameworks" +PODS_SPECS_KIWI_FRAMEWORK_SEARCH_PATHS = $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(DEVELOPER_LIBRARY_DIR)/Frameworks" $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(DEVELOPER_LIBRARY_DIR)/Frameworks" $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(DEVELOPER_LIBRARY_DIR)/Frameworks" $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(DEVELOPER_LIBRARY_DIR)/Frameworks" PODS_SPECS_KIWI_OTHER_LDFLAGS = -framework SenTestingKit \ No newline at end of file diff --git a/Pods/Pods-specs-OHHTTPStubs-Private.xcconfig b/Pods/Pods-specs-OHHTTPStubs-Private.xcconfig index 828081d1..5918aa9b 100644 --- a/Pods/Pods-specs-OHHTTPStubs-Private.xcconfig +++ b/Pods/Pods-specs-OHHTTPStubs-Private.xcconfig @@ -1,5 +1,5 @@ #include "Pods-specs-OHHTTPStubs.xcconfig" GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/OHHTTPStubs" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/Kiwi" "${PODS_ROOT}/Headers/OHHTTPStubs" "${PODS_ROOT}/Headers/Reachability" "${PODS_ROOT}/Headers/ReactiveCocoa" "${PODS_ROOT}/Headers/ReactiveCocoa/ReactiveCocoa" "${PODS_ROOT}/Headers/SocketRocket" -OTHER_LDFLAGS = -ObjC +OTHER_LDFLAGS = -ObjC ${PODS_SPECS_OHHTTPSTUBS_OTHER_LDFLAGS} PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/Pods/Pods-specs-OHHTTPStubs.xcconfig b/Pods/Pods-specs-OHHTTPStubs.xcconfig index e69de29b..c33aafcf 100644 --- a/Pods/Pods-specs-OHHTTPStubs.xcconfig +++ b/Pods/Pods-specs-OHHTTPStubs.xcconfig @@ -0,0 +1 @@ +PODS_SPECS_OHHTTPSTUBS_OTHER_LDFLAGS = -framework CFNetwork -framework Foundation \ No newline at end of file diff --git a/Pods/Pods-specs-environment.h b/Pods/Pods-specs-environment.h index a9b47163..24a50a74 100644 --- a/Pods/Pods-specs-environment.h +++ b/Pods/Pods-specs-environment.h @@ -10,11 +10,29 @@ #define COCOAPODS_POD_AVAILABLE_Kiwi #define COCOAPODS_VERSION_MAJOR_Kiwi 2 #define COCOAPODS_VERSION_MINOR_Kiwi 2 -#define COCOAPODS_VERSION_PATCH_Kiwi 0 +#define COCOAPODS_VERSION_PATCH_Kiwi 3 + +// Kiwi/ARC +#define COCOAPODS_POD_AVAILABLE_Kiwi_ARC +#define COCOAPODS_VERSION_MAJOR_Kiwi_ARC 2 +#define COCOAPODS_VERSION_MINOR_Kiwi_ARC 2 +#define COCOAPODS_VERSION_PATCH_Kiwi_ARC 3 + +// Kiwi/NonARC +#define COCOAPODS_POD_AVAILABLE_Kiwi_NonARC +#define COCOAPODS_VERSION_MAJOR_Kiwi_NonARC 2 +#define COCOAPODS_VERSION_MINOR_Kiwi_NonARC 2 +#define COCOAPODS_VERSION_PATCH_Kiwi_NonARC 3 + +// Kiwi/SenTestingKit +#define COCOAPODS_POD_AVAILABLE_Kiwi_SenTestingKit +#define COCOAPODS_VERSION_MAJOR_Kiwi_SenTestingKit 2 +#define COCOAPODS_VERSION_MINOR_Kiwi_SenTestingKit 2 +#define COCOAPODS_VERSION_PATCH_Kiwi_SenTestingKit 3 // OHHTTPStubs #define COCOAPODS_POD_AVAILABLE_OHHTTPStubs -#define COCOAPODS_VERSION_MAJOR_OHHTTPStubs 1 +#define COCOAPODS_VERSION_MAJOR_OHHTTPStubs 3 #define COCOAPODS_VERSION_MINOR_OHHTTPStubs 0 -#define COCOAPODS_VERSION_PATCH_OHHTTPStubs 1 +#define COCOAPODS_VERSION_PATCH_OHHTTPStubs 2 diff --git a/Pods/Pods-specs.xcconfig b/Pods/Pods-specs.xcconfig index 5bfca83c..24b3cb1d 100644 --- a/Pods/Pods-specs.xcconfig +++ b/Pods/Pods-specs.xcconfig @@ -1,5 +1,5 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(DEVELOPER_LIBRARY_DIR)/Frameworks" +FRAMEWORK_SEARCH_PATHS = $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(DEVELOPER_LIBRARY_DIR)/Frameworks" $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(DEVELOPER_LIBRARY_DIR)/Frameworks" $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(DEVELOPER_LIBRARY_DIR)/Frameworks" $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(DEVELOPER_LIBRARY_DIR)/Frameworks" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/Kiwi" "${PODS_ROOT}/Headers/OHHTTPStubs" "${PODS_ROOT}/Headers/Reachability" "${PODS_ROOT}/Headers/ReactiveCocoa" "${PODS_ROOT}/Headers/ReactiveCocoa/ReactiveCocoa" "${PODS_ROOT}/Headers/SocketRocket" -OTHER_LDFLAGS = -ObjC -framework SenTestingKit +OTHER_LDFLAGS = -ObjC -framework CFNetwork -framework Foundation -framework SenTestingKit PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index 9c3762e6..9b90e65b 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -10,57 +10,68 @@ 46 objects - 002213C66BFA43BC88E6C87C + 001110B074434775B84ED439 - children - - 3C10429833BA4FF496BFBA2C - B15B1B188BA84C97ABDC5C42 - EAE64924340A463FB638A8C3 - 523D92D0958140FEA4A15703 - + includeInIndex + 1 isa - PBXGroup + PBXFileReference + lastKnownFileType + sourcecode.c.objc name - Support Files + KWMatchVerifier.m + path + Classes/Verifiers/KWMatchVerifier.m sourceTree - SOURCE_ROOT + <group> - 006505DCB63C49C6AC141116 + 0055A83E07D14041AE45B2BB fileRef - 11CB839B9D3544B4A698BBDC + 21E7417DB8F143F7A1006EE5 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 00CDD16060B34B2AA072743A + 00671B4BAA674E28B3C8BEFD fileRef - 0A6AD1F25F17462092E426E6 + 4202A025FB504B2080FDB200 isa PBXBuildFile - 00EFCF0925324CB8BCAC1DD7 + 00764906F5F64FCEA97D8F3F includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWStringPrefixMatcher.h + RACSubscriptingAssignmentTrampoline.m path - Classes/KWStringPrefixMatcher.h + ReactiveCocoaFramework/ReactiveCocoa/RACSubscriptingAssignmentTrampoline.m sourceTree <group> - 00FA74F1A9B844C0971B3F27 + 0108B389FC3A496EAB339512 + + fileRef + 117E34432E834A7A9B6BE929 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 013387781B774D4A8F8A3830 includeInIndex 1 @@ -69,38 +80,52 @@ lastKnownFileType sourcecode.c.h name - RACScheduler.h + KWExampleSuiteBuilder.h path - ReactiveCocoaFramework/ReactiveCocoa/RACScheduler.h + Classes/Core/KWExampleSuiteBuilder.h sourceTree <group> - 00FE4AA931F74A278E4AE20E + 017F2DA54A454F92A2FFE32C - explicitFileType - archive.ar includeInIndex - 0 + 1 isa PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RACBlockTrampoline.m path - libPods-specs.a + ReactiveCocoaFramework/ReactiveCocoa/RACBlockTrampoline.m sourceTree - BUILT_PRODUCTS_DIR + <group> - 01109DFF02D046A8B33FDA28 + 01A6CF0BE9CE4225B0BCE8E7 fileRef - 011E23B0EC0447BAB81117BE + 54FB59A210304509AF38DFD2 isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - 011E23B0EC0447BAB81117BE + 01B1BCADA8044C8D9BA96B10 + + children + + 9B7761DB44FC48D78719A426 + 5EFCC5EDB86B44A480BEFA00 + 70E5A1D5748146308E5E61B5 + 545DAC4C99624D208096CD6A + DF370EF81F814D8194EBC387 + + isa + PBXGroup + name + iOS + sourceTree + <group> + + 0231221FB2D2451DB84605B0 includeInIndex 1 @@ -111,37 +136,69 @@ name KWInvocationCapturer.m path - Classes/KWInvocationCapturer.m + Classes/Core/KWInvocationCapturer.m sourceTree <group> - 0128DC02ACC44D11B943F116 - - fileRef - 072F4D5A159146A089344825 - isa - PBXBuildFile - - 0183B220EF7B49C68296319A + 02EF24FACE5B4682BD42A8C2 - fileRef - 0FE390E54A1D4F9B98A12B75 - isa - PBXBuildFile - settings + buildSettings - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + ALWAYS_SEARCH_USER_PATHS + NO + CLANG_CXX_LANGUAGE_STANDARD + gnu++0x + CLANG_CXX_LIBRARY + libc++ + CLANG_ENABLE_MODULES + YES + CLANG_ENABLE_OBJC_ARC + NO + CLANG_WARN_BOOL_CONVERSION + YES + CLANG_WARN_CONSTANT_CONVERSION + YES + CLANG_WARN_DIRECT_OBJC_ISA_USAGE + YES_ERROR + CLANG_WARN_EMPTY_BODY + YES + CLANG_WARN_ENUM_CONVERSION + YES + CLANG_WARN_INT_CONVERSION + YES + CLANG_WARN_OBJC_ROOT_CLASS + YES_ERROR + COPY_PHASE_STRIP + NO + ENABLE_NS_ASSERTIONS + NO + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_WARN_64_TO_32_BIT_CONVERSION + YES + GCC_WARN_ABOUT_RETURN_TYPE + YES_ERROR + GCC_WARN_UNDECLARED_SELECTOR + YES + GCC_WARN_UNINITIALIZED_AUTOS + YES + GCC_WARN_UNUSED_FUNCTION + YES + GCC_WARN_UNUSED_VARIABLE + YES + IPHONEOS_DEPLOYMENT_TARGET + 5.0 + STRIP_INSTALLED_PRODUCT + NO + VALIDATE_PRODUCT + YES - - 018A4422F095460791593192 - - fileRef - 00FA74F1A9B844C0971B3F27 isa - PBXBuildFile + XCBuildConfiguration + name + Release - 01A88CE06E43421E81687AA6 + 03B46DD9773C40AAA1E2FB11 includeInIndex 1 @@ -150,208 +207,182 @@ lastKnownFileType sourcecode.c.objc name - KWBeforeAllNode.m + RACEXTRuntimeExtensions.m path - Classes/KWBeforeAllNode.m + ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACEXTRuntimeExtensions.m sourceTree <group> - 02290D0240FD4719BD909556 + 03F0A3EA98BA4F0BB6C14D50 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - RACSignal+Operations.m + KWExampleSuite.h path - ReactiveCocoaFramework/ReactiveCocoa/RACSignal+Operations.m + Classes/Core/KWExampleSuite.h sourceTree <group> - 02616A972EBA4ADE98ACA097 + 044D8A6FDF734B5BADAA66F1 + + fileRef + 505E201B15B3426787D333E1 + isa + PBXBuildFile + + 047F781532644D2690D1D276 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWBlock.m + UIActionSheet+RACSignalSupport.h path - Classes/KWBlock.m + ReactiveCocoaFramework/ReactiveCocoa/UIActionSheet+RACSignalSupport.h sourceTree <group> - 02B72FB1BAE046F9A722326A + 04F529DF36314AD3BA6D7EC2 + + buildActionMask + 2147483647 + files + + CEA8B212853A4BFDBF8FF737 + + isa + PBXHeadersBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 04FFF191057D4BEAB06D51C9 + + containerPortal + EFBB6CF77B5E4364844354C4 + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + EE9D25436D914DA8A870DEF3 + remoteInfo + Pods-Reachability + + 050907F549CB446B9BFD60C8 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h - name - KWSpec.h + sourcecode.c.objc path - Classes/KWSpec.h + Pods-specs-OHHTTPStubs-dummy.m sourceTree <group> - 03D93B8DA9224BA0B3822BD8 + 05A6E6823E154437A53EA6FC includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + text.xcconfig path - Pods-specs-Kiwi-prefix.pch + Pods-ReactiveCocoa.xcconfig sourceTree <group> - 03F0B9797FFD47F18002FB94 + 061C02F2CDBB455F8ECC6BFC fileRef - 1AF6555748A24DF8A242A662 + 3B9947D8C69D4671A48508EA isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 0402D00C4DFB42199217841D + 068ECD2563AE44D683417EE9 - buildConfigurationList - A06199B41C7A42869DBA4850 - buildPhases - - 48D979147BD14312945D14C5 - 63DD62F1AC6E44F0B6D7C245 - AE5BD0C78D984D5682163C03 - - buildRules - - dependencies - + fileRef + 0A5038F72EA747EE87C2940F isa - PBXNativeTarget - name - Pods-ReactiveCocoa - productName - Pods-ReactiveCocoa - productReference - 5A3A8742B8FD4F0D98E23A99 - productType - com.apple.product-type.library.static - - 041407CDD2064CDFA000AC22 - - baseConfigurationReference - 2A4E80FD601C41D1B2127F15 - buildSettings + PBXBuildFile + settings - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Pods-specs-Kiwi-prefix.pch - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 5.0 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - isa - XCBuildConfiguration - name - Release - 041E58F497624808B4848ED3 + 06A91B5C38E64907B50FEDB0 fileRef - 3C4E26096492433E9FD101C1 + 2F0E6C9C1BC4436492B6497B isa PBXBuildFile - 04A4146C17D141BD82049C73 + 06FD32D8A8BE4A37BDE37DF0 fileRef - 50E826F43D0F4FD7B5D37294 + D173B55A211A49DCBE731092 isa PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 05271C08C02944D996DA8CD3 + 0707DBE7F2DC45B4AB298CC4 - fileRef - C71CA4F8073E4B3FA8291299 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACDynamicSignal.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACDynamicSignal.h + sourceTree + <group> - 052E094B207C4372B959E620 + 073CD62202854060BC700F3B fileRef - 84D1954B5074420691A31E3A + 52919260BB304A3BAFEBA71B isa PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - 0549192BBCB34EA58BCF73C4 + 07A8C0F20FDE44DD9FB880D4 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - NSObject+RACKVOWrapper.m + RACStream+Private.h path - ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACKVOWrapper.m + ReactiveCocoaFramework/ReactiveCocoa/RACStream+Private.h sourceTree <group> - 06136C9D62C147BFAFF3A6E7 + 07C46633DE374EBE9CFB823B includeInIndex 1 @@ -360,83 +391,125 @@ lastKnownFileType sourcecode.c.h name - RACEagerSequence.h + KWAfterAllNode.h path - ReactiveCocoaFramework/ReactiveCocoa/RACEagerSequence.h + Classes/Nodes/KWAfterAllNode.h sourceTree <group> - 063659C829454C82A619E4F8 + 0819430E4ACE487894D72178 - buildConfigurationList - 46AA7648C8CF43D3AF534C2A - buildPhases - - 29BE2EC28F4B47B5B49C76C6 - C419D736F80543DCB883C705 - 0EA58BEC60F04B498226220D - - buildRules - - dependencies - + fileRef + 7C2BF410800D4277894EEDE4 isa - PBXNativeTarget - name - Pods-Reachability - productName - Pods-Reachability - productReference - 7D65B9FB661147F599209F8B - productType - com.apple.product-type.library.static + PBXBuildFile - 068D9ED896A94AF2BF713D23 + 084C4B4425614D649A7A448A includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RACMulticastConnection.h + KWBeMemberOfClassMatcher.m path - ReactiveCocoaFramework/ReactiveCocoa/RACMulticastConnection.h + Classes/Matchers/KWBeMemberOfClassMatcher.m sourceTree <group> - 06A552ABA0EC48E6BE53E264 + 085F765FFA054737AA7B9B45 - includeInIndex - 1 + baseConfigurationReference + 6054647399BA48F6AAEF24D1 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + NO + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-SocketRocket-prefix.pch + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 5.0 + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc + XCBuildConfiguration name - NSValue+KiwiAdditions.m - path - Classes/NSValue+KiwiAdditions.m - sourceTree - <group> + Debug + + 09C48A7D56C24E0D98F8A6ED + + fileRef + A59DD3EDED7D42AF85B0463A + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 09D3CE6DDCE44C8FADDA812B + + fileRef + 89764E4D684246AA884CB820 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 072F4D5A159146A089344825 + 0A5038F72EA747EE87C2940F includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWBeSubclassOfClassMatcher.h + NSObject+RACKVOWrapper.m path - Classes/KWBeSubclassOfClassMatcher.h + ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACKVOWrapper.m sourceTree <group> - 0756253C4EE34A4CA3408E25 + 0A57737D13F54EABBFE70131 includeInIndex 1 @@ -445,49 +518,26 @@ lastKnownFileType sourcecode.c.objc name - NSInvocation+RACTypeParsing.m + RACKVOTrampoline.m path - ReactiveCocoaFramework/ReactiveCocoa/NSInvocation+RACTypeParsing.m + ReactiveCocoaFramework/ReactiveCocoa/RACKVOTrampoline.m sourceTree <group> - 0789AB73B2DE41C987B95B02 - - fileRef - 7D65B9FB661147F599209F8B - isa - PBXBuildFile - - 0799C3C8DF1C400D9BD56A7E + 0AE6530FB0B249739CA58D7F includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - RACTestScheduler.m + sourcecode.c.h path - ReactiveCocoaFramework/ReactiveCocoa/RACTestScheduler.m + Pods-specs-environment.h sourceTree <group> - 083791F0A7264D4BBC61B52D - - fileRef - 408C107D614240478A48FC45 - isa - PBXBuildFile - - 08521C9395CD4D08BECBBEB5 - - fileRef - 1CA392F4FE0041718008A555 - isa - PBXBuildFile - - 08A1EF1724374DAE8DFAF285 + 0AF66032E901412499D5F669 includeInIndex 1 @@ -496,13 +546,13 @@ lastKnownFileType sourcecode.c.h name - UISegmentedControl+RACSignalSupport.h + KWBlock.h path - ReactiveCocoaFramework/ReactiveCocoa/UISegmentedControl+RACSignalSupport.h + Classes/Core/KWBlock.h sourceTree <group> - 08D62584CB044423B4FBA2C4 + 0B80E39001B44E839ADB0AE4 includeInIndex 1 @@ -511,53 +561,46 @@ lastKnownFileType sourcecode.c.objc name - RACArraySequence.m + RACValueTransformer.m path - ReactiveCocoaFramework/ReactiveCocoa/RACArraySequence.m + ReactiveCocoaFramework/ReactiveCocoa/RACValueTransformer.m sourceTree <group> - 0907D7C22C3F4A0A857F3E38 + 0BA5C0513D034723A8DE6BCB includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - NSInvocation+RACTypeParsing.h + KWBeTrueMatcher.m path - ReactiveCocoaFramework/ReactiveCocoa/NSInvocation+RACTypeParsing.h + Classes/Matchers/KWBeTrueMatcher.m sourceTree <group> - 097EE9E3EA3A4CD8AF8D24A1 - - fileRef - 7BE69C7F20244315B3215BF9 - isa - PBXBuildFile - - 0988090F73D54254A25F6DE1 + 0C0A99E528204471BD353A24 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - NSInvocation+OCMAdditions.h + RACSignal.m path - Classes/NSInvocation+OCMAdditions.h + ReactiveCocoaFramework/ReactiveCocoa/RACSignal.m sourceTree <group> - 09D8FBD4CBC34F718790D2D3 + 0CC01CF9DAA648DB9F26D902 fileRef - 981CC30D0F674C24826FFC3B + 18606E42CCD34267BDE377A6 isa PBXBuildFile settings @@ -566,23 +609,14 @@ -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 0A4F3C639DF7496FBE5DB8F9 + 0D7274B3B43D4B298A4CEF8F - children - - 400DC0602AD64C8F84518D92 - 6A1A9B8DEC6447AFBFFCA440 - 9F497F4B641743868D8F7742 - 28F097249507485D86D2CFB3 - + fileRef + 9EC7492FE9004747A9D407CD isa - PBXGroup - name - Support Files - sourceTree - SOURCE_ROOT + PBXBuildFile - 0A6AD1F25F17462092E426E6 + 0D80D1BC092C484499F83E81 includeInIndex 1 @@ -591,86 +625,66 @@ lastKnownFileType sourcecode.c.h name - KWContextNode.h + KWStub.h path - Classes/KWContextNode.h + NonARC/KWStub.h sourceTree <group> - 0A7C8CB648E34D22BA49DC67 + 0DDB21898E294DA385BFB66F fileRef - 0DE359521DB44B8BB58851F0 + 4778B249EB2C4F2E94CFC1A2 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 0AAA23E4769844409E164717 + 0DF689F3CACB405E9CE08987 fileRef - 4CCD9D13DC4E4B6AA766B153 + A5E248EB379E40439351ECBB isa PBXBuildFile settings COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 0B97546E56F6468492891F50 + 0E0BA6EEA3444DB197EC51D7 - includeInIndex - 1 + fileRef + A241D33728AD4094907B1422 isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - KWAsyncVerifier.m - path - Classes/KWAsyncVerifier.m - sourceTree - <group> + PBXBuildFile - 0B9847163B87433D89595766 + 0F2996306F364EDD8EF9E93B fileRef - DB2179E6CFC14E158426AFFA + E0374AB84A8742499DE195F6 isa PBXBuildFile - 0BC5D37D947E4D45A6D41886 + 0F731461CA5D4CBF834C5BB0 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWBlockNode.m + KWExpectationType.h path - Classes/KWBlockNode.m + Classes/Core/KWExpectationType.h sourceTree <group> - 0C2778DD16544965BE613972 - - fileRef - 1A513DA3413145C5AFC020AF - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - - 0C66A6206848438B9317E3A7 + 0F7A0FE389D1420B9AEEC1AC includeInIndex 1 @@ -679,13 +693,13 @@ lastKnownFileType sourcecode.c.objc name - RACEXTRuntimeExtensions.m + RACDisposable.m path - ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACEXTRuntimeExtensions.m + ReactiveCocoaFramework/ReactiveCocoa/RACDisposable.m sourceTree <group> - 0C9280FA086D45B789940A85 + 1026BF25FBA9440489696ACC includeInIndex 1 @@ -694,13 +708,13 @@ lastKnownFileType sourcecode.c.h name - OHHTTPStubsResponse.h + NSObject+RACDeallocating.h path - OHHTTPStubs/OHHTTPStubsResponse.h + ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACDeallocating.h sourceTree <group> - 0CC70054E0BD4E3AA5EC3EA0 + 105E2373D3964737A3A4A9D2 includeInIndex 1 @@ -709,20 +723,28 @@ lastKnownFileType sourcecode.c.h name - RACSubscriptionScheduler.h + RACEXTScope.h path - ReactiveCocoaFramework/ReactiveCocoa/RACSubscriptionScheduler.h + ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACEXTScope.h sourceTree <group> - 0CF8701D50C54959BEE4367B + 10658E9212EC49EE9541292E - fileRef - 7136BFD4C2A946AFBFA72482 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWStringPrefixMatcher.h + path + Classes/Matchers/KWStringPrefixMatcher.h + sourceTree + <group> - 0D66EF14253D49378094C744 + 10A312D8D3D24F9194782966 includeInIndex 1 @@ -731,32 +753,34 @@ lastKnownFileType sourcecode.c.objc name - KWExample.m + OHHTTPStubs.m path - Classes/KWExample.m + OHHTTPStubs/Sources/OHHTTPStubs.m sourceTree <group> - 0D8ED76004544CAA96154FCD + 115F6BCA46A147928C3A5A3B fileRef - F98668C4B8E24C36B5B93224 + 659A889723E143CB846D3260 isa PBXBuildFile - 0DBEC28C43A74AB2868061B7 + 11619C2C7EE442FDAAB31CE3 - fileRef - FD8E538DAE614D2FA8CC5A65 + buildConfigurations + + 3A95202EFC6A42A994F762AC + BDBB0685D96F45E48003E3D2 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - + XCConfigurationList - 0DE359521DB44B8BB58851F0 + 117E34432E834A7A9B6BE929 includeInIndex 1 @@ -765,16 +789,57 @@ lastKnownFileType sourcecode.c.objc name - KWReceiveMatcher.m + NSString+RACSequenceAdditions.m path - Classes/KWReceiveMatcher.m + ReactiveCocoaFramework/ReactiveCocoa/NSString+RACSequenceAdditions.m + sourceTree + <group> + + 1196D82E7B67427AAAF2ACAE + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWExistVerifier.m + path + Classes/Verifiers/KWExistVerifier.m + sourceTree + <group> + + 11F49CCB2D4C46F1ADF832F9 + + fileRef + 6A3FC4F985AD48E5AC6033A9 + isa + PBXBuildFile + + 120F641F4A6D4A21A66FE422 + + children + + BB8D8567FB584B2EABEEE291 + 3B1DDD364B68465A8D6BEB08 + 9BDE5E0F5477446D88E0A92C + 939A66B594494711AC59AF99 + 1B1E2BE0D9C142F8A0EDC3C9 + 6AB2D511606C49749280946E + 8096CEE89625406A987BAFA2 + + isa + PBXGroup + name + Products sourceTree <group> - 0E19815BFEDE414781FC6560 + 122F059AD9DA4D848CA50B7B fileRef - 3A4D5B4C955A4A13983E8616 + 1BF788A36B514856915126FC isa PBXBuildFile settings @@ -783,55 +848,65 @@ -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 0E348C8D94804EBF9D4ED132 + 125D69B38DD84DD6B8A96218 fileRef - AC4FE112AC644974ACDBB944 + 8BE6140DD8444485BA6359E9 isa PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 0EA58BEC60F04B498226220D + 129782B5D2AF45FB800DCBD9 - buildActionMask - 2147483647 - files - - BC89064F796746F3AD7646FB - + fileRef + 617E3068F2BA46B98A64CFAC isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 0ED4A9E80328433CB1DD4D8B + 12DD7C8DAAEA4A07A6F4510F includeInIndex 1 isa PBXFileReference lastKnownFileType - text + sourcecode.c.objc + name + KWChangeMatcher.m path - Pods-specs-acknowledgements.markdown + Classes/Matchers/KWChangeMatcher.m sourceTree <group> - 0EDD851F5BC24A55B4FB4F5B + 133B0B4DFD2D4EAB8E99AF59 - includeInIndex - 1 + fileRef + C5CC7B53FA4C4FC387AD5C03 isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSInvocation+OCMAdditions.m - path - Classes/NSInvocation+OCMAdditions.m - sourceTree - <group> + PBXBuildFile + + 1410D58BDF2C4E81ACD4DD26 + + fileRef + 084C4B4425614D649A7A448A + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 0F0099A8FFF44612BFF6FB5D + 146C2411FD1940109B8FCFBD includeInIndex 1 @@ -840,13 +915,25 @@ lastKnownFileType sourcecode.c.objc name - NSString+RACSequenceAdditions.m + RACScopedDisposable.m path - ReactiveCocoaFramework/ReactiveCocoa/NSString+RACSequenceAdditions.m + ReactiveCocoaFramework/ReactiveCocoa/RACScopedDisposable.m sourceTree <group> - 0F80146C3286492786396D72 + 147BA0232404429BB09484EF + + fileRef + 4C7AC52E435844C9BCE60AB7 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 1480529E3E834DD3AD07EB7E includeInIndex 1 @@ -855,13 +942,13 @@ lastKnownFileType sourcecode.c.objc name - KWNull.m + KWGenericMatchEvaluator.m path - Classes/KWNull.m + Classes/Matchers/KWGenericMatchEvaluator.m sourceTree <group> - 0FE390E54A1D4F9B98A12B75 + 14B065C3C34343EFB82B5D0A includeInIndex 1 @@ -870,13 +957,25 @@ lastKnownFileType sourcecode.c.objc name - KWStub.m + UITableViewCell+RACSignalSupport.m path - Classes/KWStub.m + ReactiveCocoaFramework/ReactiveCocoa/UITableViewCell+RACSignalSupport.m sourceTree <group> - 10C30819C67B48638ACFB8F5 + 14D9E65BFEEE42C7B9FE4FC5 + + fileRef + 332822F707CA42149E05002B + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 155E58D0958249FFB7C4630B includeInIndex 1 @@ -885,28 +984,38 @@ lastKnownFileType sourcecode.c.objc name - SRWebSocket.m + RACEmptySignal.m path - SocketRocket/SRWebSocket.m + ReactiveCocoaFramework/ReactiveCocoa/RACEmptySignal.m sourceTree <group> - 114BD20560BC429DA72A9C5C + 15A359E7D4AF402D99E6EC37 - includeInIndex - 1 + buildConfigurationList + 11619C2C7EE442FDAAB31CE3 + buildPhases + + D10517F73BDB4548879E0310 + E4A86397D2274FAAA505C7B2 + CF8E3EAADFE142B1841283C7 + + buildRules + + dependencies + isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc + PBXNativeTarget name - UITableViewCell+RACSignalSupport.m - path - ReactiveCocoaFramework/ReactiveCocoa/UITableViewCell+RACSignalSupport.m - sourceTree - <group> + Pods-specs-OHHTTPStubs + productName + Pods-specs-OHHTTPStubs + productReference + 8096CEE89625406A987BAFA2 + productType + com.apple.product-type.library.static - 11CB839B9D3544B4A698BBDC + 15C7D5AD0F934960A85BF5C3 includeInIndex 1 @@ -915,40 +1024,109 @@ lastKnownFileType sourcecode.c.objc name - KWGenericMatchEvaluator.m + KWMessageTracker.m path - Classes/KWGenericMatchEvaluator.m + Classes/Core/KWMessageTracker.m sourceTree <group> - 124EFA25229848358CE27175 + 16025CDB86A743E0BFF80B49 + + fileRef + C1BEF9F7291847B887252E58 + isa + PBXBuildFile + + 164128EE9F234876B3B78C37 + + fileRef + 5C79F2D07B8849018C2F72D2 + isa + PBXBuildFile + + 165BC2F4DAEE491AB3A77F83 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWDeviceInfo.m + KWChangeMatcher.h path - Classes/KWDeviceInfo.m + Classes/Matchers/KWChangeMatcher.h sourceTree <group> - 12A11E6980B14F098D5D2FD9 + 1669929DFE114010B523AA40 - fileRef - DBF23712AD1341D79E414D00 - isa - PBXBuildFile - settings + buildSettings - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + ALWAYS_SEARCH_USER_PATHS + NO + CLANG_CXX_LANGUAGE_STANDARD + gnu++0x + CLANG_CXX_LIBRARY + libc++ + CLANG_ENABLE_MODULES + YES + CLANG_ENABLE_OBJC_ARC + NO + CLANG_WARN_BOOL_CONVERSION + YES + CLANG_WARN_CONSTANT_CONVERSION + YES + CLANG_WARN_DIRECT_OBJC_ISA_USAGE + YES_ERROR + CLANG_WARN_EMPTY_BODY + YES + CLANG_WARN_ENUM_CONVERSION + YES + CLANG_WARN_INT_CONVERSION + YES + CLANG_WARN_OBJC_ROOT_CLASS + YES_ERROR + COPY_PHASE_STRIP + YES + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_WARN_64_TO_32_BIT_CONVERSION + YES + GCC_WARN_ABOUT_RETURN_TYPE + YES_ERROR + GCC_WARN_UNDECLARED_SELECTOR + YES + GCC_WARN_UNINITIALIZED_AUTOS + YES + GCC_WARN_UNUSED_FUNCTION + YES + GCC_WARN_UNUSED_VARIABLE + YES + IPHONEOS_DEPLOYMENT_TARGET + 5.0 + ONLY_ACTIVE_ARCH + YES + STRIP_INSTALLED_PRODUCT + NO + isa + XCBuildConfiguration + name + Debug - 12C605A130B94D0896B7324E + 16EFACA5F7FA4B478D979016 includeInIndex 1 @@ -957,13 +1135,13 @@ lastKnownFileType sourcecode.c.h name - RACErrorSignal.h + RACEmptySequence.h path - ReactiveCocoaFramework/ReactiveCocoa/RACErrorSignal.h + ReactiveCocoaFramework/ReactiveCocoa/RACEmptySequence.h sourceTree <group> - 12C64636FAC14868AE6DDA18 + 1767930D256148A8B1775896 includeInIndex 1 @@ -972,13 +1150,20 @@ lastKnownFileType sourcecode.c.h name - KWExistVerifier.h + NSObject+KiwiVerifierAdditions.h path - Classes/KWExistVerifier.h + Classes/Core/NSObject+KiwiVerifierAdditions.h sourceTree <group> - 13811616FF3443FF8EB3000B + 1780457D3EDC481893BD104B + + fileRef + 801AF02213014B5D8E697C8E + isa + PBXBuildFile + + 17AE2CDEB5D14F01B28F6CD1 includeInIndex 1 @@ -987,20 +1172,25 @@ lastKnownFileType sourcecode.c.objc name - NSString+RACSupport.m + KWBeIdenticalToMatcher.m path - ReactiveCocoaFramework/ReactiveCocoa/NSString+RACSupport.m + Classes/Matchers/KWBeIdenticalToMatcher.m sourceTree <group> - 13A38F574BB84912BE400C64 + 184D1615921B491EAF8EF5D3 fileRef - C48BFD32853148A6A50A8EF2 + 8234BFB6775B47D192155B21 isa PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 13D58A1BA64A48858E2E49DD + 18606E42CCD34267BDE377A6 includeInIndex 1 @@ -1009,94 +1199,69 @@ lastKnownFileType sourcecode.c.objc name - UITextView+RACSignalSupport.m + RACTargetQueueScheduler.m path - ReactiveCocoaFramework/ReactiveCocoa/UITextView+RACSignalSupport.m + ReactiveCocoaFramework/ReactiveCocoa/RACTargetQueueScheduler.m sourceTree <group> - 13F2D2D950854BEF917D776C + 18BA1B72619641C095E91267 - buildActionMask - 2147483647 - files - - C4B9054E508C4291BA1A9FB6 - + fileRef + 32205A7EFB6D4338B651931A isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXBuildFile - 146E9B1E965E48FD9D306DC7 + 197AACB8A8B0454AB8B11DE9 fileRef - 187EC25AB69E4B98AD18572F + A8AFC5AAC7014EBD848740A3 isa PBXBuildFile - 146E9DCCC1514DD283A458EC + 199065E210E443F391703123 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - NSValue+KiwiAdditions.h + NSObject+RACSelectorSignal.m path - Classes/NSValue+KiwiAdditions.h + ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACSelectorSignal.m sourceTree <group> - 14CB6CB5EEE34C9894A621C3 - - fileRef - CD88C965FD144077A9EA5996 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - - 1521FFD6F75A40DAB94ACE40 + 19BC924239444687BE654CC8 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWProbePoller.m + RACSequence.h path - Classes/KWProbePoller.m + ReactiveCocoaFramework/ReactiveCocoa/RACSequence.h sourceTree <group> - 157FA199DCD24618A85EED3F + 19FBF81B18814045B64DB457 fileRef - 74E86158709945BD83B008FA - isa - PBXBuildFile - - 161BB060B93F42E8A985913A - - fileRef - 1E162C30F4F641AF89E36F33 + 199065E210E443F391703123 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 162EACA552DA4EFDA0E61371 + 1A829B29E2274914BB604225 includeInIndex 1 @@ -1105,93 +1270,74 @@ lastKnownFileType sourcecode.c.objc name - KWMock.m + UIGestureRecognizer+RACSignalSupport.m path - Classes/KWMock.m + ReactiveCocoaFramework/ReactiveCocoa/UIGestureRecognizer+RACSignalSupport.m sourceTree <group> - 16557A788BBC4A1DB8AFE695 + 1A9662EFC7CB4AC997E96AD3 + + fileRef + 607B91A49C0B48C6AE0E2D2D + isa + PBXBuildFile + + 1A9CE61DD2BE4C6AA39295E0 fileRef - 8D8B572537864D34AF142F4A + E53FA948F2044A4FA2A89C5F isa PBXBuildFile settings COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 167F3C8E1D3143A1873C1E1B + 1AE7D8C1F1C24412A995A44E fileRef - C1F0907DC2724A54B83ECD36 + 1E031442C0CF49F7A0317B08 isa PBXBuildFile - 168903ABF9454B78954156F5 + 1B1E2BE0D9C142F8A0EDC3C9 + explicitFileType + archive.ar includeInIndex - 1 + 0 isa PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - RACEmptySequence.m path - ReactiveCocoaFramework/ReactiveCocoa/RACEmptySequence.m + libPods-specs.a sourceTree - <group> - - 172F92CFE1C345A0A5A58AC6 - - fileRef - 06A552ABA0EC48E6BE53E264 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - - 17C3EC31285D48CEB5B00367 - - fileRef - B537597C504E427B9DC86A48 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - + BUILT_PRODUCTS_DIR - 17E3C735A53048C6A34198FE + 1B4721906E994BAE80545326 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWFutureObject.h + KWFutureObject.m path - Classes/KWFutureObject.h + Classes/Core/KWFutureObject.m sourceTree <group> - 180A4600FC7E44CCB1B33763 + 1B4D64BF8BF144D9A8CC8342 fileRef - 8B6E23560B6F45D8B2BEE903 + 99BC9B80037545E9A1312F4A isa PBXBuildFile - 180D9CE0DCB846F39C434383 + 1B92445928534D8581F3E477 includeInIndex 1 @@ -1199,27 +1345,27 @@ PBXFileReference lastKnownFileType sourcecode.c.h + name + NSObject+RACPropertySubscribing.h path - Pods-environment.h + ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACPropertySubscribing.h sourceTree <group> - 185F34A7C47140BD85EF19DD + 1B9B67AA7E474742A860B3A4 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - UIControl+RACSignalSupportPrivate.m + text path - ReactiveCocoaFramework/ReactiveCocoa/UIControl+RACSignalSupportPrivate.m + Pods-acknowledgements.markdown sourceTree <group> - 187EC25AB69E4B98AD18572F + 1B9F5738B8E841A7B3109410 includeInIndex 1 @@ -1228,13 +1374,25 @@ lastKnownFileType sourcecode.c.h name - KWReceiveMatcher.h + KWGenericMatchEvaluator.h path - Classes/KWReceiveMatcher.h + Classes/Matchers/KWGenericMatchEvaluator.h sourceTree <group> - 1921F3201B6C4F5FAC1A4ADF + 1BDB732D39DE4A9286F4C16C + + fileRef + 84E5FE2698834E8FA3752E89 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 1BF788A36B514856915126FC includeInIndex 1 @@ -1243,165 +1401,219 @@ lastKnownFileType sourcecode.c.objc name - RACPassthroughSubscriber.m + KWGenericMatchingAdditions.m path - ReactiveCocoaFramework/ReactiveCocoa/RACPassthroughSubscriber.m + Classes/Matchers/KWGenericMatchingAdditions.m sourceTree <group> - 193015FEE23D4287A657FF8B + 1C67FDC5DF604739AAC9DB2A + + fileRef + A1A046911046476BB2F635FE + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 1C7B9BBC033D4DECBC4A1578 + + fileRef + 0B80E39001B44E839ADB0AE4 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 1CBB6A843BD94536B21CD89E fileRef - 26AFAED530FE4A58A8D326B2 + 71973AE77AC2407FB876EA15 isa PBXBuildFile - 194B85AAFB3D454BB50BC1CB + 1CBD6837552743EAB762FA89 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - NSObject+KiwiMockAdditions.m + KWMessageSpying.h path - Classes/NSObject+KiwiMockAdditions.m + Classes/Core/KWMessageSpying.h sourceTree <group> - 19727C1C40F943B4BEFBB132 - - fileRef - 572B588A0DD649089CF4C327 - isa - PBXBuildFile - - 1995B62678FE45A192A5AB24 + 1CE1022CABFC45EF8DA11D0C includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - RACSubscriptionScheduler.m + NSProxy+KiwiVerifierAdditions.h path - ReactiveCocoaFramework/ReactiveCocoa/RACSubscriptionScheduler.m + Classes/Core/NSProxy+KiwiVerifierAdditions.h sourceTree <group> - 1A240A713E5E4D1EB0E25E16 + 1D11356F5796438AAC9644C0 fileRef - BE8FFCEC4DB04FF587B7A559 + 742EDE81BB8246DFADEB0EF1 isa PBXBuildFile - 1A2E78E1A99F45D293A979C2 + 1D67518734F548749C24FC18 fileRef - 482CE5400B8C4694970E64CD + 59818CB985A64CB5A5CAE8ED + isa + PBXBuildFile + + 1D7E4CCBC34B411C9B0F1949 + + fileRef + 3EFE064F699A4835A301F339 + isa + PBXBuildFile + + 1DBB08E46F4645D2B91D8C5A + + fileRef + 0707DBE7F2DC45B4AB298CC4 isa PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - 1A4CC88A702447E292FE2889 + 1DD80B58659C4FC895B7DE83 fileRef - 3C9CA71753B24B7ABD90EA0F + E13324B6331F4BF892ED0310 isa PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 1A513DA3413145C5AFC020AF + 1E031442C0CF49F7A0317B08 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - NSNotificationCenter+RACSupport.m + KWInequalityMatcher.h path - ReactiveCocoaFramework/ReactiveCocoa/NSNotificationCenter+RACSupport.m + Classes/Matchers/KWInequalityMatcher.h sourceTree <group> - 1A70152110024A5590C0499D + 1E09996162E244058B4D3D62 fileRef - A8B9260B59324479AEC0BCCE + 6AC217EF0A27440F9C444017 isa PBXBuildFile - 1AF6555748A24DF8A242A662 + 1E4953BD4CE64B818F6690A3 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWValue.m + NSString+RACKeyPathUtilities.h path - Classes/KWValue.m + ReactiveCocoaFramework/ReactiveCocoa/NSString+RACKeyPathUtilities.h sourceTree <group> - 1B0BCCC0AFF4465282D28997 + 1E517FE453AB48E8B10D55C4 fileRef - C9988DAD30D24211A0D9B87E + A2368088F9A64C368F2CC7F6 isa PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - 1B198C97EA3145B8A104BC89 + 1E8AB76B5699442590151CF0 - fileRef - C0762976D3384786BF00EE2A + buildConfigurationList + 5BA53EFB48DC4E7E848B013B + buildPhases + + D3E6517AB59247C38DAB1185 + 6FACB030D86D48028E31A6CA + D51F55D15E5A4B09A174AD9E + + buildRules + + dependencies + isa - PBXBuildFile + PBXNativeTarget + name + Pods-ReactiveCocoa + productName + Pods-ReactiveCocoa + productReference + 9BDE5E0F5477446D88E0A92C + productType + com.apple.product-type.library.static - 1C14D87E220A4101A616F8F7 + 1EBEBBE90AF545D5A806A69D fileRef - 5FD559D961704045A16F11DF + 81523A0DA42B453E9CFF5D5F isa PBXBuildFile - 1C2131814E3B49828C4D2392 + 2046235E49C148ADBE036915 fileRef - C61A973704EA4BC49CE42E0C + CD7B98960DE6400C83B61669 isa PBXBuildFile - 1C6AAA6D726649A28E867392 + 207E6C579EA54355A351D575 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACKVOChannel.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACKVOChannel.h + sourceTree + <group> + + 2087DAA3BD854501A01FD3B5 fileRef - E4B9DD62B3994997BB9815EE + 1767930D256148A8B1775896 isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - 1CA392F4FE0041718008A555 + 20A1D77AE9BF4322903D65B6 includeInIndex 1 @@ -1410,13 +1622,13 @@ lastKnownFileType sourcecode.c.h name - RACEmptySequence.h + KiwiConfiguration.h path - ReactiveCocoaFramework/ReactiveCocoa/RACEmptySequence.h + Classes/Core/KiwiConfiguration.h sourceTree <group> - 1CC4D0F1A48E4C3AAD362CF0 + 21070075F6714B26A03BFA57 includeInIndex 1 @@ -1425,43 +1637,41 @@ lastKnownFileType sourcecode.c.h name - RACBacktrace.h + RACDynamicSequence.h path - ReactiveCocoaFramework/ReactiveCocoa/RACBacktrace.h + ReactiveCocoaFramework/ReactiveCocoa/RACDynamicSequence.h sourceTree <group> - 1CD756676E9241DD98F5B3D5 + 215D40D5FCF846B48930057A includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - KWBeEmptyMatcher.m + text.plist.xml path - Classes/KWBeEmptyMatcher.m + Pods-acknowledgements.plist sourceTree <group> - 1D301BD0BDEC47FB9FEC0305 + 21E7417DB8F143F7A1006EE5 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWBeZeroMatcher.h + KWHaveValueMatcher.m path - Classes/KWBeZeroMatcher.h + Classes/Matchers/KWHaveValueMatcher.m sourceTree <group> - 1E162C30F4F641AF89E36F33 + 21EBDA1695F44BE3ABA7DE15 includeInIndex 1 @@ -1470,136 +1680,79 @@ lastKnownFileType sourcecode.c.objc name - KWBeWithinMatcher.m + KWAfterEachNode.m path - Classes/KWBeWithinMatcher.m + Classes/Nodes/KWAfterEachNode.m sourceTree <group> - 1E16689B410E4F709845351C + 225387514E7C4DA58B9CF959 fileRef - 9270CBB8168D4B8AB915CBB7 + 63DAD54396A34701AF8BB6DB isa PBXBuildFile - 1E282BE0BD124CDA8E329714 + 22752797AB454404AD2B8FA3 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWGenericMatchingAdditions.m + UIStepper+RACSignalSupport.h path - Classes/KWGenericMatchingAdditions.m + ReactiveCocoaFramework/ReactiveCocoa/UIStepper+RACSignalSupport.h sourceTree <group> - 1E2A4BFD472046B0A9DA68DC + 22A57ECD7733431F9BE869E9 + + buildConfigurations + + C98F48784B734152B6FDC852 + 5E086B1CED234816B9B3EF01 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + 22AC7179260147C2A7172264 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.objc + name + UIButton+RACCommandSupport.m path - Pods.xcconfig + ReactiveCocoaFramework/ReactiveCocoa/UIButton+RACCommandSupport.m sourceTree <group> - 1F0EE99EE23247CF8E8379BC - - fileRef - 4E66F6BC25A54F3CAE9C4140 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - - 1FF7249D3FA7430FB7CCC462 + 22C3B4D28E024CDCA44EF7E9 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - RACStringSequence.m + KWRegularExpressionPatternMatcher.h path - ReactiveCocoaFramework/ReactiveCocoa/RACStringSequence.m + Classes/Matchers/KWRegularExpressionPatternMatcher.h sourceTree <group> - 204B040DE2F2428E9EDFF73C - - fileRef - 1FF7249D3FA7430FB7CCC462 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - - 20E0DFB114104027A960BB95 - - fileRef - 6C1E5330BB384D458541D7B3 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - - 211DB2C5F4FF4CA2807938DD - - fileRef - B0D59693D7DE4F02A9DF033E - isa - PBXBuildFile - - 2134AA12091647249B92798C - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWExample.h - path - Classes/KWExample.h - sourceTree - <group> - - 21C56824A0804A99A45C7942 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - RACKVOTrampoline.m - path - ReactiveCocoaFramework/ReactiveCocoa/RACKVOTrampoline.m - sourceTree - <group> - - 2254FD044A9148C288495E76 + 23107D078833429B9B39622C includeInIndex 1 @@ -1608,23 +1761,16 @@ lastKnownFileType sourcecode.c.objc name - KWMatcherFactory.m + KWExampleSuiteBuilder.m path - Classes/KWMatcherFactory.m + Classes/Core/KWExampleSuiteBuilder.m sourceTree <group> - 2281F279AAEE4A6C8AB47D32 - - fileRef - 427A693C18C544E6A9937E08 - isa - PBXBuildFile - - 2330D4D14580411790B942EB + 235B0BBB65AC4C4CA7EB31DD fileRef - 08D62584CB044423B4FBA2C4 + 146C2411FD1940109B8FCFBD isa PBXBuildFile settings @@ -1633,7 +1779,7 @@ -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 236A1BFC99784F36BBAFCC75 + 238148EC249D47DAB3BB9D5A includeInIndex 1 @@ -1642,75 +1788,16 @@ lastKnownFileType sourcecode.c.h name - RACUnarySequence.h + NSEnumerator+RACSequenceAdditions.h path - ReactiveCocoaFramework/ReactiveCocoa/RACUnarySequence.h + ReactiveCocoaFramework/ReactiveCocoa/NSEnumerator+RACSequenceAdditions.h sourceTree <group> - 23A6E27104D64EE7972C0B3D - - fileRef - E3F6DFF70DA348DCA2C18755 - isa - PBXBuildFile - - 24C3DBF970F44A8F9D375763 - - baseConfigurationReference - 2E03E503A6AF4E2DB66DE761 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Pods-Reachability-prefix.pch - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 5.0 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES - - isa - XCBuildConfiguration - name - Release - - 253BAE184DBC4CD0B167AEEF + 239AFEA6D67C416888554D6A fileRef - 1995B62678FE45A192A5AB24 + F00F8B0FECEF4E1096B7DB3B isa PBXBuildFile settings @@ -1719,29 +1806,25 @@ -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 2541CF606A9C407BA6DAEC51 - - fileRef - 0988090F73D54254A25F6DE1 - isa - PBXBuildFile - - 25A760E8262D445A9D0DAEFB + 23FA7C3F289845AC84B59A01 - fileRef - 28319A8E00654DE9BC25931E + includeInIndex + 1 isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWBeMemberOfClassMatcher.h + path + Classes/Matchers/KWBeMemberOfClassMatcher.h + sourceTree + <group> - 25E4E934A2D54C969E2A7657 + 2422D4BC3E6F4A3A9CFD3EBF fileRef - BDF34832C2054D93ADCE35CE + 5EAEB85C75CC40359A53E1A7 isa PBXBuildFile settings @@ -1750,48 +1833,44 @@ -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 25FDD8BAE1874297B26ACE9B - - fileRef - DB74AC156BEB40569A576D32 - isa - PBXBuildFile - - 26330589E89147A5ADBE77F7 + 2468208932F441689ED91E33 - fileRef - 42E6B0A1AA23414789BB67A5 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWFailure.h + path + Classes/Core/KWFailure.h + sourceTree + <group> - 26A33DB591184055BDD1A692 + 24831DDF4BD24A7DB06C149F fileRef - 2254FD044A9148C288495E76 + C618D768A4654232BD2EC2B4 isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - 26AFAED530FE4A58A8D326B2 + 2499B82C686E4657954DD994 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWCountType.h + RACEmptySequence.m path - Classes/KWCountType.h + ReactiveCocoaFramework/ReactiveCocoa/RACEmptySequence.m sourceTree <group> - 26BA8B42BF5249398A327A1C + 25CE9BB4E5B840B1901F051F includeInIndex 1 @@ -1800,35 +1879,40 @@ lastKnownFileType sourcecode.c.h name - RACPassthroughSubscriber.h + KWContainMatcher.h path - ReactiveCocoaFramework/ReactiveCocoa/RACPassthroughSubscriber.h + Classes/Matchers/KWContainMatcher.h sourceTree <group> - 26EA2D348DF140A18732EF3F + 25E012BA1E6242979545A0A4 fileRef - 938F977EA92046698CA65115 + 4148E10D466E4EFFADF8E65B isa PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 281FFDE57E78449AA68CF521 + 269797A168A34570AF061E01 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWIntercept.h + RACDynamicSignal.m path - Classes/KWIntercept.h + ReactiveCocoaFramework/ReactiveCocoa/RACDynamicSignal.m sourceTree <group> - 28319A8E00654DE9BC25931E + 26980E5004664BFB9EC72017 includeInIndex 1 @@ -1837,46 +1921,65 @@ lastKnownFileType sourcecode.c.objc name - KWExampleGroupBuilder.m + RACObjCRuntime.m path - Classes/KWExampleGroupBuilder.m + ReactiveCocoaFramework/ReactiveCocoa/RACObjCRuntime.m sourceTree <group> - 283BB8C504AF48B3A7185986 + 26A7941399134F12B72BC377 fileRef - 068D9ED896A94AF2BF713D23 + A535A398C3024591A1917ACD isa PBXBuildFile - 284CECC9F5A74ACE97DF1B29 + 2820B6B2A6424E40852AC3CA - fileRef - 6F819ABAD996486EB36E1162 + buildConfigurationList + 2C7E55C1C1C3439FB10CD646 + buildPhases + + 52E346DD663744848DF23AD1 + E8251025E3BE4A1DAB113F0E + 5AB363249B6340818A33ABE3 + + buildRules + + dependencies + isa - PBXBuildFile + PBXNativeTarget + name + Pods-SocketRocket + productName + Pods-SocketRocket + productReference + 939A66B594494711AC59AF99 + productType + com.apple.product-type.library.static - 28601DC3D49B493D95A03317 + 28669439F60543F78D0A46FC - fileRef - FA837F145D5142109E15FEC1 + containerPortal + EFBB6CF77B5E4364844354C4 isa - PBXBuildFile + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 15A359E7D4AF402D99E6EC37 + remoteInfo + Pods-specs-OHHTTPStubs - 286964CE6C22428FB84182BF + 287FA4F176AD41DEA2765D3A fileRef - AFC0D4D407CD4AED96871E36 + 782D1CA7F52D4675B3435C0F isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - 2869F79ED35C4EA8844A27D4 + 28C017E1EDB3426AB9758958 includeInIndex 1 @@ -1885,227 +1988,147 @@ lastKnownFileType sourcecode.c.h name - RACDisposable.h + RACScopedDisposable.h path - ReactiveCocoaFramework/ReactiveCocoa/RACDisposable.h + ReactiveCocoaFramework/ReactiveCocoa/RACScopedDisposable.h sourceTree <group> - 28E56DDCB3C649D3817FDEA3 + 28F4DD4F041948FB927A48DF fileRef - FFDD53DD78DE404084421DCA + 99B4DB69908C4933B654DB2A isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 28E7B4EA3CCB41A188767F75 + 28F6EF33E792451A9981ECBA + + fileRef + E3E071BE40D44EEBB95ECD4F + isa + PBXBuildFile + + 2976892B65FC46F58D7D910A includeInIndex 1 isa PBXFileReference + lastKnownFileType + sourcecode.c.h name - RACSignalProvider.d + KWValue.h path - ReactiveCocoaFramework/ReactiveCocoa/RACSignalProvider.d + Classes/Core/KWValue.h sourceTree <group> - 28F097249507485D86D2CFB3 + 29809852FD4D460FB0003AE9 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc + name + KWBeWithinMatcher.m path - Pods-specs-OHHTTPStubs-prefix.pch + Classes/Matchers/KWBeWithinMatcher.m sourceTree <group> - 2942129614DF4666B230114C + 2A003E02B3E047B18BBB5353 fileRef - 7654BA79B10446F7AC28FB01 + D940BE83D1CF4388BDB4B0B3 isa PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 29BE2EC28F4B47B5B49C76C6 - - buildActionMask - 2147483647 - files - - 0B9847163B87433D89595766 - 3C60A4F5D75848F4B3143621 - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 29C232542CB14D1C8A3310D2 + 2A4BA59C2A5A4C228C4B9921 fileRef - D625095EC8EA4017A7E4D296 + 25CE9BB4E5B840B1901F051F isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - 2A47736C24BE4F8E8F1B20C6 + 2A96F1182407483DB2DE3801 fileRef - 2134AA12091647249B92798C + 9BDE5E0F5477446D88E0A92C isa PBXBuildFile - 2A4E80FD601C41D1B2127F15 + 2AB618B9CAF44070894B4672 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig - path - Pods-specs-Kiwi-Private.xcconfig + sourcecode.c.h + name + NSObject+RACLifting.h + path + ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACLifting.h sourceTree <group> - 2A8FBEBD92944C319974F855 + 2B014875656842DFBDC4CB01 fileRef - 2869F79ED35C4EA8844A27D4 + BBD883249CF0443298902DC6 isa PBXBuildFile - 2BAC182050CE474E8B4590CF - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - RACQueueScheduler.m - path - ReactiveCocoaFramework/ReactiveCocoa/RACQueueScheduler.m - sourceTree - <group> - - 2BC9C86526404E9997BD3574 + 2BE54AB79DF647CF8F2369C4 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - NSObject+RACSelectorSignal.m + KWStringUtilities.h path - ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACSelectorSignal.m + Classes/Core/KWStringUtilities.h sourceTree <group> - 2BD86D32521240479C54478A - - baseConfigurationReference - 1E2A4BFD472046B0A9DA68DC - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 5.0 - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Debug - - 2BDC4B9365114C1CB482BBC3 + 2BF7538737344C91A6463296 fileRef - 3061F1C7A2F9406CA98D21F9 + 8C78ABEA1400469A8103385B isa PBXBuildFile - 2C0DF2DA739C41299DFBDC2F - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - RACReturnSignal.h - path - ReactiveCocoaFramework/ReactiveCocoa/RACReturnSignal.h - sourceTree - <group> - - 2C5F2B679A0F44DF95CAAA01 + 2BFC74F3A877468EA67CB913 fileRef - 7EC28D8C043C4CC7ADDDE4AF + 70657A11F88243A2A3594B84 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 2CF75CA115824843827AA589 + 2BFDBCE6F4AD4709A86BA5EE fileRef - CC9E48D74B9D428ABB776918 + 7517C13C70C846A3A4C687E0 isa PBXBuildFile settings @@ -2114,14 +2137,64 @@ -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 2CFE4A6340084832BE69FF43 + 2C5A81DD73BB498D98D802EC fileRef - 00EFCF0925324CB8BCAC1DD7 + F3F43C7F5F194793A7D509D9 isa PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 2C7E55C1C1C3439FB10CD646 + + buildConfigurations + + 085F765FFA054737AA7B9B45 + C870941F4C8345EFB33944FE + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + 2D0A8349F6184F9385D2EEA7 + + children + + 05A6E6823E154437A53EA6FC + C115AB70479944B484379700 + 40F49F6098C84FC2BC65B9ED + E32CC4A0CFF8435894223875 + + isa + PBXGroup + name + Support Files + sourceTree + SOURCE_ROOT + + 2D5F9D58B5C04D0384A613D4 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + UICollectionViewCell+RACSignalSupport.m + path + ReactiveCocoaFramework/ReactiveCocoa/UICollectionViewCell+RACSignalSupport.m + sourceTree + <group> - 2D2862D4A2464AECB630CB7E + 2D6FDF81DADD464EB5518615 includeInIndex 1 @@ -2130,13 +2203,13 @@ lastKnownFileType sourcecode.c.h name - KWBlockNode.h + RACEagerSequence.h path - Classes/KWBlockNode.h + ReactiveCocoaFramework/ReactiveCocoa/RACEagerSequence.h sourceTree <group> - 2D96B9FF873E4BC990447F8A + 2DFDA3FBCFCB4A3089357C7A includeInIndex 1 @@ -2145,64 +2218,104 @@ lastKnownFileType sourcecode.c.h name - KWRaiseMatcher.h + KWPendingNode.h path - Classes/KWRaiseMatcher.h + Classes/Nodes/KWPendingNode.h sourceTree <group> - 2E03E503A6AF4E2DB66DE761 + 2E5DAB690DC345999748CD56 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.h + name + RACSubscriptionScheduler.h path - Pods-Reachability-Private.xcconfig + ReactiveCocoaFramework/ReactiveCocoa/RACSubscriptionScheduler.h + sourceTree + <group> + + 2EC784CEF9434F9D8DCA9559 + + children + + B1D5E3566D18488D8666A7B6 + 26980E5004664BFB9EC72017 + + isa + PBXGroup + name + no-arc + sourceTree + <group> + + 2F0E6C9C1BC4436492B6497B + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWBeSubclassOfClassMatcher.h + path + Classes/Matchers/KWBeSubclassOfClassMatcher.h sourceTree <group> - 2E0B5DA8E80D4F409E034AA8 + 2F171CE3F80144C3B65DF41E fileRef - 37B559C7F9584E118EFCD905 + EDFFBD49908C43EF9C147529 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 2E47BE679DD14189A6A866A9 + 2F28F2CC744A4E2699100FB5 - fileRef - 0C9280FA086D45B789940A85 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-SocketRocket.xcconfig + sourceTree + <group> - 2FB0F052111848489578A9CA + 2F8C8774421348369AF55001 fileRef - 3C12293BC71B4783AFFDDD47 + E6E8BDB4AA7C4F88921BD822 isa PBXBuildFile - 304C97ED6FC44689842E8126 + 2FE6D7B0AAC44E73AF85DF0B - fileRef - 3C2C0C8FE4ED460F9D638876 + includeInIndex + 1 isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACQueueScheduler+Subclass.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACQueueScheduler+Subclass.h + sourceTree + <group> - 3061F1C7A2F9406CA98D21F9 + 308EBCB54E6F4711B00EB2CD includeInIndex 1 @@ -2211,44 +2324,47 @@ lastKnownFileType sourcecode.c.h name - KWNull.h + NSValue+KiwiAdditions.h path - Classes/KWNull.h + Classes/Core/NSValue+KiwiAdditions.h sourceTree <group> - 30DEBB44CE0C4C49BBEE363E + 308F81D102F742F7A8BE9CFB fileRef - 3CDEF60012744580A52C479A + 77EF22B0C303493BB94EAAB2 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 312E4D9DE5C64FE092E8F0C3 + 30A89854BDE04B849C915658 - fileRef - 3973542F01BB41F7AD0CA143 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWNull.m + path + Classes/Core/KWNull.m + sourceTree + <group> - 3148B8563AB046918CE13DCD + 30F4A1DBA7FB429F9C6DFF8C fileRef - A366688035054E879C7300D0 + 165BC2F4DAEE491AB3A77F83 isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - 316C7A35DFDE4BB197E706BB + 3121C12B2EFD4872844EAAEA includeInIndex 1 @@ -2257,52 +2373,65 @@ lastKnownFileType sourcecode.c.objc name - RACSignalSequence.m + KWRespondToSelectorMatcher.m path - ReactiveCocoaFramework/ReactiveCocoa/RACSignalSequence.m + Classes/Matchers/KWRespondToSelectorMatcher.m sourceTree <group> - 322CB620A759410CA14308CA + 31B4CE909D344DB9B424E77E + + fileRef + 4F0935D8A2A1499EA6D85198 + isa + PBXBuildFile + + 31C79F6E270C4E75B90D6366 + includeInIndex + 1 isa PBXFileReference lastKnownFileType - wrapper.framework + sourcecode.c.objc name - CFNetwork.framework + RACSubscriptionScheduler.m path - Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/CFNetwork.framework + ReactiveCocoaFramework/ReactiveCocoa/RACSubscriptionScheduler.m sourceTree - DEVELOPER_DIR + <group> - 3276F9627DB241BFA46C885F + 31DC8BEEF4994929A8BC8E1B - explicitFileType - archive.ar includeInIndex - 0 + 1 isa PBXFileReference + lastKnownFileType + sourcecode.c.h + name + UIBarButtonItem+RACCommandSupport.h path - libPods.a + ReactiveCocoaFramework/ReactiveCocoa/UIBarButtonItem+RACCommandSupport.h sourceTree - BUILT_PRODUCTS_DIR + <group> - 328144E6BE17458BBFF4C41B + 32205A7EFB6D4338B651931A includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h + name + KWUserDefinedMatcher.h path - Pods-dummy.m + Classes/Matchers/KWUserDefinedMatcher.h sourceTree <group> - 32B3D8CFC841489184670469 + 32CD0EE8388E48FFBFA0DE33 includeInIndex 1 @@ -2311,47 +2440,50 @@ lastKnownFileType sourcecode.c.objc name - NSFileHandle+RACSupport.m + KWIntercept.m path - ReactiveCocoaFramework/ReactiveCocoa/NSFileHandle+RACSupport.m + NonARC/KWIntercept.m sourceTree <group> - 33533C123DCB41A394181B46 + 32E059818FB34D1A86B86298 fileRef - 3A891723BBB64F9EAE0F0C2F + C7052C3F6BBC4350BCBC5FFF isa PBXBuildFile - - 335ACBB103CF42D294441418 - + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 332822F707CA42149E05002B + includeInIndex 1 isa PBXFileReference lastKnownFileType - text + sourcecode.c.objc name - Podfile + UIAlertView+RACSignalSupport.m path - ../Podfile + ReactiveCocoaFramework/ReactiveCocoa/UIAlertView+RACSignalSupport.m sourceTree - SOURCE_ROOT - xcLanguageSpecificationIdentifier - xcode.lang.ruby + <group> - 337A474C4A5B4B4F97F82AE5 + 333B94E03902440E83486673 fileRef - 909081FECD234CB4B538A63E + C2A11F03D15E41839028AF2B isa PBXBuildFile - 338EE28E93424A329B1BE41D + 335243A08FD2430FBC4F2F1F fileRef - 497C093DAD454749A098D195 + 516F17C987404C4385BC689D isa PBXBuildFile settings @@ -2360,52 +2492,49 @@ -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 33E7747595C64B30BC8EDD39 + 33CC11796F674FF5BC461831 - includeInIndex - 1 + fileRef + FB4CDE8EDA5D4296BBC9A542 isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - RACTuple.m - path - ReactiveCocoaFramework/ReactiveCocoa/RACTuple.m - sourceTree - <group> + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 3415BFF012E446EEAD2FB457 + 33D5D82C87E24A8788CB6476 - includeInIndex - 1 + children + + 816BEBCA51AD4D2FA8F8254A + A32E5C12141144BCB3FD2C1F + 91C22DC7028740F7AA3BF5A2 + 3A02F52E49FB451189515B05 + isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc + PBXGroup name - KWBeSubclassOfClassMatcher.m + Kiwi path - Classes/KWBeSubclassOfClassMatcher.m + Kiwi sourceTree <group> - 34E5A24A6D20477D890F6BC6 + 34E8FA22E9C14E7B9D1ADE81 - includeInIndex - 1 + fileRef + 29809852FD4D460FB0003AE9 isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - KWAny.m - path - Classes/KWAny.m - sourceTree - <group> + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 34FAF0DA2F954738B5CC0BF2 + 3507694354CB4545BE6DBF2D includeInIndex 1 @@ -2413,45 +2542,91 @@ PBXFileReference lastKnownFileType sourcecode.c.h - name - NSSet+RACSequenceAdditions.h path - ReactiveCocoaFramework/ReactiveCocoa/NSSet+RACSequenceAdditions.h + Pods-specs-OHHTTPStubs-prefix.pch sourceTree <group> - 34FC5AE89020407EABAF3874 + 3580466BDE14473489F2DB75 + + fileRef + 00764906F5F64FCEA97D8F3F + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 35DDBADA009F4399AAC85375 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWBeNonNilMatcher.m + RACMulticastConnection.h path - Classes/KWBeNonNilMatcher.m + ReactiveCocoaFramework/ReactiveCocoa/RACMulticastConnection.h sourceTree <group> - 354688651EC347BEA7E72F0E + 35E5F38B18F54844A96375A3 - explicitFileType - archive.ar - includeInIndex - 0 + baseConfigurationReference + C6E0DD264A3547CF9737B6B3 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + NO + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 5.0 + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + isa - PBXFileReference - path - libPods-SocketRocket.a - sourceTree - BUILT_PRODUCTS_DIR + XCBuildConfiguration + name + Debug - 354964B346D949F189E533DE + 361074B0E5BB4333896BC568 fileRef - 406A41651A7B4852B8D1E670 + 6D92AB5E2D024ADC8DFDB91A isa PBXBuildFile settings @@ -2460,107 +2635,48 @@ -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 354DC08775164A0891005588 - - fileRef - AF14715DFF9E412191C1FE8E - isa - PBXBuildFile - - 3593DC205A284FA2958F1B80 - - attributes - - LastUpgradeCheck - 0500 - - buildConfigurationList - 942CAEB072AB43CEA819CE6D - compatibilityVersion - Xcode 3.2 - developmentRegion - English - hasScannedForEncodings - 0 - isa - PBXProject - knownRegions - - en - - mainGroup - 50EE5E49F3EF446593877EC5 - productRefGroup - A0CE69363211446C86C94F98 - projectDirPath - - projectReferences - - projectRoot - - targets - - 6CAA6E31029C41429D0B0213 - 063659C829454C82A619E4F8 - 0402D00C4DFB42199217841D - 5BF559B20D784F7096C0D5FF - 8024D3DAD4AE415E897DC585 - EA2B21702FD443F39A8DE00E - 9A6B6BFEB33144239FDB185C - - - 36A28D6DBF4B4D0E8D4AA412 - - fileRef - 492299289A5046A7B1B722B3 - isa - PBXBuildFile - - 36FD63E8A2A74E01A71C9AFA + 36368A734173428991FCE787 fileRef - 4514A9907D4E427BA03994A3 + CFC31C442B3E42B2910FF7CD isa PBXBuildFile - 37B559C7F9584E118EFCD905 + 363E8B74669A495BA73A6FB9 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - NSInvocation+KiwiAdditions.m + KWCountType.h path - Classes/NSInvocation+KiwiAdditions.m + Classes/Core/KWCountType.h sourceTree <group> - 380887868DD5496990E34F1E + 371E33B070CA48FFB0431694 fileRef - 5167ACA3B53F4A839874B1E3 + 3DF90F2EEFC0490780E1ADBB isa PBXBuildFile - 383D0AD29EEF48EBA03A1B6E + 3759C8C0E3FC4187BDBA5A93 - includeInIndex - 1 + fileRef + ED9A729660EA4FC298DC6DD2 isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - KWExampleSuite.m - path - Classes/KWExampleSuite.m - sourceTree - <group> + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 38732CFA0E2548E1A75616FF + 38176EE406194B4E928DDAC8 includeInIndex 1 @@ -2569,37 +2685,20 @@ lastKnownFileType sourcecode.c.h name - KWHaveMatcher.h + KWContextNode.h path - Classes/KWHaveMatcher.h + Classes/Nodes/KWContextNode.h sourceTree <group> - 3894254C6B4E483EA53C7DD9 - - fileRef - 53F5158A9DE244498DD596D2 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - - 389A6FDB7A914F93BE714E75 + 3851BDE43ACC4EF3B742F231 fileRef - 7EF4653CE9CA4DAD9233D367 + 75AEFA62831B4DC7A92E7006 isa PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - 38EFE9F2FD77459A8F46D694 + 38BD222F9B9547418293F9AA includeInIndex 1 @@ -2608,13 +2707,13 @@ lastKnownFileType sourcecode.c.objc name - KWPendingNode.m + NSValue+KiwiAdditions.m path - Classes/KWPendingNode.m + Classes/Core/NSValue+KiwiAdditions.m sourceTree <group> - 3901E1175E2A4B8FA4AEC6F1 + 38CC0CEAF0FE4B2786FFA619 includeInIndex 1 @@ -2623,13 +2722,13 @@ lastKnownFileType sourcecode.c.objc name - NSObject+KiwiSpyAdditions.m + KWContextNode.m path - Classes/NSObject+KiwiSpyAdditions.m + Classes/Nodes/KWContextNode.m sourceTree <group> - 3953D48BF0DC4C9EAA633932 + 38E2F1AB87714FEC9BC6B11B includeInIndex 1 @@ -2638,52 +2737,43 @@ lastKnownFileType sourcecode.c.h name - UITextView+RACSignalSupport.h + KWBeforeAllNode.h path - ReactiveCocoaFramework/ReactiveCocoa/UITextView+RACSignalSupport.h + Classes/Nodes/KWBeforeAllNode.h sourceTree <group> - 3973542F01BB41F7AD0CA143 + 3981DDE2DDAA4C36B93654B6 - includeInIndex - 1 + fileRef + 5EFCC5EDB86B44A480BEFA00 isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - UISlider+RACSignalSupport.h - path - ReactiveCocoaFramework/ReactiveCocoa/UISlider+RACSignalSupport.h - sourceTree - <group> + PBXBuildFile - 3A416DFC18E14002A647FD6B + 39FE046FEDD741BCB9075BBF + fileRef + 3C7BFB3F1C014147873E5F56 isa - PBXTargetDependency - target - EA2B21702FD443F39A8DE00E - targetProxy - C19D96C06C8240A39B9C7A5F + PBXBuildFile - 3A4D5B4C955A4A13983E8616 + 3A02F52E49FB451189515B05 - includeInIndex - 1 + children + + E9BFD00B6FCE4E618B0ABD40 + A4BDADB3C94F43D8B0BB5EC2 + 40D261812DE34679AA920DA7 + 57D29871617A47DF87411161 + isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc + PBXGroup name - OHHTTPStubsResponse.m - path - OHHTTPStubs/OHHTTPStubsResponse.m + Support Files sourceTree - <group> + SOURCE_ROOT - 3A891723BBB64F9EAE0F0C2F + 3A6D2B7073604E8CB7C613FE includeInIndex 1 @@ -2692,78 +2782,108 @@ lastKnownFileType sourcecode.c.h name - UIAlertView+RACSignalSupport.h + KWMatcher.h path - ReactiveCocoaFramework/ReactiveCocoa/UIAlertView+RACSignalSupport.h + Classes/Core/KWMatcher.h sourceTree <group> - 3AD4C381408243A8B3BA611B + 3A8D1F3252D747508543C86D fileRef - F3F65FACF58D4DEA948F7A65 + 41F67AC863514AA6962459CB isa PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 3BBBEF9DDF2948B6BB1DAF1D + 3A8E1F0C94C54B0DB625497B - includeInIndex - 1 + fileRef + 9B7761DB44FC48D78719A426 isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - RACEXTRuntimeExtensions.h - path - ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACEXTRuntimeExtensions.h - sourceTree - <group> + PBXBuildFile - 3C09F943F7AF4D76A10CA4B3 + 3A95202EFC6A42A994F762AC - includeInIndex - 1 + baseConfigurationReference + FFB46B3833F545E1B16E27A8 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + NO + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-specs-OHHTTPStubs-prefix.pch + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 5.0 + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + isa - PBXFileReference - lastKnownFileType - sourcecode.c.h + XCBuildConfiguration name - KWMessagePattern.h - path - Classes/KWMessagePattern.h - sourceTree - <group> + Debug - 3C10429833BA4FF496BFBA2C + 3B0CB89D5D2545ACAE2D0836 - includeInIndex - 1 + fileRef + 4833F08DA1B4451494E74E9D isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods-SocketRocket.xcconfig - sourceTree - <group> + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 3C12293BC71B4783AFFDDD47 + 3B1DDD364B68465A8D6BEB08 + explicitFileType + archive.ar includeInIndex - 1 + 0 isa PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWMatcher.h path - Classes/KWMatcher.h + libPods-Reachability.a sourceTree - <group> + BUILT_PRODUCTS_DIR - 3C2C0C8FE4ED460F9D638876 + 3B7F625018894E19A62DF6ED includeInIndex 1 @@ -2772,13 +2892,20 @@ lastKnownFileType sourcecode.c.objc name - RACBacktrace.m + KWSpec.m path - ReactiveCocoaFramework/ReactiveCocoa/RACBacktrace.m + Classes/Core/KWSpec.m sourceTree <group> - 3C3EE7F5AFF74E9F898B6254 + 3B95A93DD4C74BE0B1C7E770 + + fileRef + 52C4F189091E43EEA9DE1F72 + isa + PBXBuildFile + + 3B9947D8C69D4671A48508EA includeInIndex 1 @@ -2787,40 +2914,41 @@ lastKnownFileType sourcecode.c.objc name - UIControl+RACSignalSupport.m + RACImmediateScheduler.m path - ReactiveCocoaFramework/ReactiveCocoa/UIControl+RACSignalSupport.m + ReactiveCocoaFramework/ReactiveCocoa/RACImmediateScheduler.m sourceTree <group> - 3C4E26096492433E9FD101C1 + 3C397594913246EFB9B82270 - includeInIndex - 1 + fileRef + 5A0CF3C41E364004B08DBD37 isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - UIControl+RACSignalSupportPrivate.h - path - ReactiveCocoaFramework/ReactiveCocoa/UIControl+RACSignalSupportPrivate.h - sourceTree - <group> + PBXBuildFile + + 3C3E3F29E94443A280E69C69 + + buildConfigurations + + 4F6AA5149F414EB3A9C9D958 + D7EFA267D14C4BC094E55DE7 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList - 3C60A4F5D75848F4B3143621 + 3C6583EEBC334E95AE3C360C fileRef - B6F9381577CC47BAAA6635EF + 42505EEC636D4FFFA862FF4B isa PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - 3C9CA71753B24B7ABD90EA0F + 3C7BFB3F1C014147873E5F56 includeInIndex 1 @@ -2829,40 +2957,37 @@ lastKnownFileType sourcecode.c.h name - RACStream+Private.h + RACScheduler.h path - ReactiveCocoaFramework/ReactiveCocoa/RACStream+Private.h + ReactiveCocoaFramework/ReactiveCocoa/RACScheduler.h sourceTree <group> - 3CB3F226223343AB8FEF43D7 + 3D8619485F2E45F7A70AFF61 - fileRef - 3F493BA72B094F079106227B isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - + PBXTargetDependency + target + 15A359E7D4AF402D99E6EC37 + targetProxy + 28669439F60543F78D0A46FC - 3CDEF60012744580A52C479A + 3DDB8D2BD114419487E26EBD includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWEqualMatcher.m + UISegmentedControl+RACSignalSupport.h path - Classes/KWEqualMatcher.m + ReactiveCocoaFramework/ReactiveCocoa/UISegmentedControl+RACSignalSupport.h sourceTree <group> - 3CF499DF189A4D3DA2DBC640 + 3DF90F2EEFC0490780E1ADBB includeInIndex 1 @@ -2871,27 +2996,34 @@ lastKnownFileType sourcecode.c.h name - NSObject+RACKVOWrapper.h + RACChannel.h path - ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACKVOWrapper.h + ReactiveCocoaFramework/ReactiveCocoa/RACChannel.h sourceTree <group> - 3CFD6A8ED87F44E99853BDB2 + 3E2C3A50DA55437BACE31F65 - fileRef - 1CC4D0F1A48E4C3AAD362CF0 + buildConfigurations + + 35E5F38B18F54844A96375A3 + 640685A410C24EA6A4A4C50C + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release isa - PBXBuildFile + XCConfigurationList - 3DBE40BB899B44738676B57D + 3EA14A54C58D48CF9F7C86DF fileRef - 747C20958ABB480B81B0121E + 6058B66709014A13A1BBBDED isa PBXBuildFile - 3E49E5458CE24350A76EAA4E + 3EF0290174634ADCA00BB160 includeInIndex 1 @@ -2900,13 +3032,13 @@ lastKnownFileType sourcecode.c.objc name - UICollectionViewCell+RACSignalSupport.m + KWUserDefinedMatcher.m path - ReactiveCocoaFramework/ReactiveCocoa/UICollectionViewCell+RACSignalSupport.m + Classes/Matchers/KWUserDefinedMatcher.m sourceTree <group> - 3F3970F566EA49D7B1B1BCD0 + 3EFE064F699A4835A301F339 includeInIndex 1 @@ -2915,46 +3047,74 @@ lastKnownFileType sourcecode.c.h name - RACEvent.h + NSOrderedSet+RACSequenceAdditions.h path - ReactiveCocoaFramework/ReactiveCocoa/RACEvent.h + ReactiveCocoaFramework/ReactiveCocoa/NSOrderedSet+RACSequenceAdditions.h sourceTree <group> - 3F3ACA76990D4EA6B902DD9C + 3F37C960F13543B6852E0C52 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWItNode.m + NSNotificationCenter+RACSupport.h path - Classes/KWItNode.m + ReactiveCocoaFramework/ReactiveCocoa/NSNotificationCenter+RACSupport.h sourceTree <group> - 3F493BA72B094F079106227B + 3F4AEEB0220845A28944E3D0 - includeInIndex - 1 + fileRef + 32CD0EE8388E48FFBFA0DE33 isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - KWFutureObject.m - path - Classes/KWFutureObject.m - sourceTree - <group> + PBXBuildFile + settings + + COMPILER_FLAGS + -fno-objc-arc -w -Xanalyzer -analyzer-disable-checker + + + 3F564A90536A40ADA567B5F6 + + fileRef + 9B04C7774DBD4540813332C3 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 3F5EB2FD744444A0A97149A1 + + fileRef + 843D6BB84306443EB9DFB285 + isa + PBXBuildFile + + 3F76663340B94B2984CA7A40 + + fileRef + 14B065C3C34343EFB82B5D0A + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 3FB8AD5CC6BC4FBFB3A96690 + 3F8B674411B74682A9FDE31F baseConfigurationReference - FFEE9EC9C65A46AD9B50D705 + C115AB70479944B484379700 buildSettings ALWAYS_SEARCH_USER_PATHS @@ -3002,59 +3162,51 @@ name Debug - 3FE626FADFB64D1686D0FA38 + 3FAEF0E513B34E67BD3CFC17 + + fileRef + 10658E9212EC49EE9541292E + isa + PBXBuildFile + + 400CBD545F9A4EFE81A17037 fileRef - 7454B58EA6AE4BC0B4EFA68D + C8FB0466CAA346009167A0ED isa PBXBuildFile settings COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 400DC0602AD64C8F84518D92 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods-specs-OHHTTPStubs.xcconfig - sourceTree - <group> - - 4014BB3BE56B4A7EBA32AC68 + 409A3005FA504A7A8960A1F1 fileRef - 6124ED0C9838434A9F309EB9 + 4FE38A490BDF4DE5852D6501 isa PBXBuildFile settings COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 403FED6E37CC4FCA95F1C9B9 + 40D261812DE34679AA920DA7 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h - name - KWMessageTracker.h + sourcecode.c.objc path - Classes/KWMessageTracker.h + Pods-specs-Kiwi-dummy.m sourceTree <group> - 406A41651A7B4852B8D1E670 + 40F49F6098C84FC2BC65B9ED includeInIndex 1 @@ -3062,47 +3214,64 @@ PBXFileReference lastKnownFileType sourcecode.c.objc - name - RACStream.m path - ReactiveCocoaFramework/ReactiveCocoa/RACStream.m + Pods-ReactiveCocoa-dummy.m sourceTree <group> - 408C107D614240478A48FC45 + 41255049A621436585AFC5DE + + fileRef + 8C008D29EEA34A128D3A646B + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 4148E10D466E4EFFADF8E65B includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWExpectationType.h + RACBehaviorSubject.m path - Classes/KWExpectationType.h + ReactiveCocoaFramework/ReactiveCocoa/RACBehaviorSubject.m sourceTree <group> - 409BD228482340AEABE268DA + 41EAD6B539404ECF99BAC14E + + fileRef + 459334429F61429EA2EC4BE8 + isa + PBXBuildFile + + 41F67AC863514AA6962459CB includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - UIRefreshControl+RACCommandSupport.h + RACGroupedSignal.m path - ReactiveCocoaFramework/ReactiveCocoa/UIRefreshControl+RACCommandSupport.h + ReactiveCocoaFramework/ReactiveCocoa/RACGroupedSignal.m sourceTree <group> - 40ACDEF268194A7BAFAAD306 + 4201C7EF822443D1A99525C2 fileRef - D1F816F4B434400AAF4FB7BA + 60BC9F5CADA44D59958A8BF2 isa PBXBuildFile settings @@ -3111,146 +3280,81 @@ -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 40AE3943EC5C430989E18A9E - - fileRef - EAE64924340A463FB638A8C3 - isa - PBXBuildFile - - 40E0717091884763B9782140 + 4202A025FB504B2080FDB200 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - NSNumber+KiwiAdditions.m + RACSubscriber.h path - Classes/NSNumber+KiwiAdditions.m + ReactiveCocoaFramework/ReactiveCocoa/RACSubscriber.h sourceTree <group> - 41091D882DDF45F2ACB211D8 + 42505EEC636D4FFFA862FF4B includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - UIRefreshControl+RACCommandSupport.m + NSMethodSignature+KiwiAdditions.h path - ReactiveCocoaFramework/ReactiveCocoa/UIRefreshControl+RACCommandSupport.m + Classes/Core/NSMethodSignature+KiwiAdditions.h sourceTree <group> - 4150AA24992C415BB41ED908 - - fileRef - 9007BF0487A94BC1B21E1E8C - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - - 41FE01A27BB045F797715312 - - fileRef - 8CD93E75662D4FA9A2E90455 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - - 4262B7ABFEE34911B6C3A966 + 4289D64B356A4CF683A33737 - baseConfigurationReference - 2E03E503A6AF4E2DB66DE761 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Pods-Reachability-prefix.pch - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 5.0 - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - + includeInIndex + 1 isa - XCBuildConfiguration + PBXFileReference + lastKnownFileType + sourcecode.c.h name - Debug + KWExampleNodeVisitor.h + path + Classes/Core/KWExampleNodeVisitor.h + sourceTree + <group> - 427A693C18C544E6A9937E08 + 428A9C0BFD1B4B6C9AE0F9EF includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWBlock.h + OHHTTPStubsResponse+JSON.m path - Classes/KWBlock.h + OHHTTPStubs/Sources/OHHTTPStubsResponse+JSON.m sourceTree <group> - 42E315F8B6AC4611913652E8 + 42A329F4AFF348BCA1187F18 fileRef - F6084BC1A66C4EBBBD3BE4CD + 545DAC4C99624D208096CD6A + isa + PBXBuildFile + + 42D5700E210445D7B0A9FB02 + + fileRef + 1CBD6837552743EAB762FA89 isa PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - 42E6B0A1AA23414789BB67A5 + 42DA59E50BB244F7855B93D8 includeInIndex 1 @@ -3259,16 +3363,16 @@ lastKnownFileType sourcecode.c.h name - RACSubscriber+Private.h + UITextField+RACSignalSupport.h path - ReactiveCocoaFramework/ReactiveCocoa/RACSubscriber+Private.h + ReactiveCocoaFramework/ReactiveCocoa/UITextField+RACSignalSupport.h sourceTree <group> - 4435FFC749804BFD8110A0F8 + 43910BDD16C74C1D8F2F7012 fileRef - F3C4A814FFE74D42B8BBBE4F + 22AC7179260147C2A7172264 isa PBXBuildFile settings @@ -3277,34 +3381,64 @@ -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 4452D073C01046AAA29B7225 + 43C0394CAC8A4DE18BED770E includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWBlockRaiseMatcher.h + UIControl+RACSignalSupportPrivate.m path - Classes/KWBlockRaiseMatcher.h + ReactiveCocoaFramework/ReactiveCocoa/UIControl+RACSignalSupportPrivate.m sourceTree <group> - 44635FF6FD8C4A7CB4E8234B + 44038B7FB3BE4AE5AE12B9C8 + + buildConfigurationList + 5EB6A7CA99C346F2860E2A0F + buildPhases + + FA6B5205BDCF4BF4B88B1063 + E4922F20065846E187A6D160 + + buildRules + + dependencies + + A01E22736732438D87C15779 + FBCC1AA0592648DD9FDCBCD0 + B6DA91A48E454D29AD579FC6 + + isa + PBXNativeTarget + name + Pods + productName + Pods + productReference + BB8D8567FB584B2EABEEE291 + productType + com.apple.product-type.library.static + + 4408BB0681CE46C1B56C1045 fileRef - 01A88CE06E43421E81687AA6 + 46519CFC00714072A487B269 + isa + PBXBuildFile + + 443A329B372444D08438D4DA + + fileRef + 22752797AB454404AD2B8FA3 isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - 44B18651C8BA4A84AF1F9231 + 44CDF3618F3C49D4A9FBD7CA includeInIndex 1 @@ -3313,111 +3447,115 @@ lastKnownFileType sourcecode.c.objc name - KWAfterEachNode.m + KWGenericMatcher.m path - Classes/KWAfterEachNode.m + Classes/Matchers/KWGenericMatcher.m sourceTree <group> - 44CEE6C9BD4649AE810916B5 + 450C846012C943D9B9E51F38 - includeInIndex - 1 + children + + 99BC9B80037545E9A1312F4A + A4EF9447DA45453ABBD910F3 + BBFFA61182654C73B25A5C5A + A11EE38E8A114B91BE61B5E4 + 99B4DB69908C4933B654DB2A + B0243DD4BDE44188A97DC26D + A76607B208E24E1081266706 + isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc + PBXGroup name - KWWorkarounds.m + SocketRocket path - Classes/KWWorkarounds.m + SocketRocket sourceTree <group> - 44F15E5BE8AC46D49803B2C8 + 45183855128142DEA48627EA includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - RACTargetQueueScheduler.m + KWRaiseMatcher.h path - ReactiveCocoaFramework/ReactiveCocoa/RACTargetQueueScheduler.m + Classes/Matchers/KWRaiseMatcher.h sourceTree <group> - 4511DAF6FDE64C53BF02689E + 4582A273CC384CDC8EBFBEA1 fileRef - 28E7B4EA3CCB41A188767F75 + 6845B673E8E64A34BF0E39E2 isa PBXBuildFile - 4514A9907D4E427BA03994A3 + 459334429F61429EA2EC4BE8 - explicitFileType - archive.ar includeInIndex - 0 + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + NSInvocation+RACTypeParsing.h + path + ReactiveCocoaFramework/ReactiveCocoa/NSInvocation+RACTypeParsing.h + sourceTree + <group> + + 45FD57861A1D4FFFAFA7F648 + + includeInIndex + 1 isa PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWBlockNode.m path - libPods-specs-OHHTTPStubs.a + Classes/Nodes/KWBlockNode.m sourceTree - BUILT_PRODUCTS_DIR + <group> - 45CEA3C317384210950AFFD4 + 4629D1B6613048D5BBD5D5E9 fileRef - A8A09B6BFF8E4A949004EA58 + 9413B4EEECD94BEABED8F225 isa PBXBuildFile - 45DEED1BF9614DB5B64B6227 + 4639BB1EC512411689D79891 fileRef - 3C3EE7F5AFF74E9F898B6254 + D62503EA2BD94415A9EC1240 isa PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - 4664A96645EA431D8B7D947B + 46519CFC00714072A487B269 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - RACScheduler.m + RACSubject.h path - ReactiveCocoaFramework/ReactiveCocoa/RACScheduler.m + ReactiveCocoaFramework/ReactiveCocoa/RACSubject.h sourceTree <group> - 46AA7648C8CF43D3AF534C2A - - buildConfigurations - - 4262B7ABFEE34911B6C3A966 - 24C3DBF970F44A8F9D375763 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 47674E64692242DA80252C38 + 46766D4BA2A14ED782229CA8 includeInIndex 1 @@ -3426,65 +3564,46 @@ lastKnownFileType sourcecode.c.h name - KWBeNonNilMatcher.h + RACSignalSequence.h path - Classes/KWBeNonNilMatcher.h + ReactiveCocoaFramework/ReactiveCocoa/RACSignalSequence.h sourceTree <group> - 47C95EEEB43D479E9D0FB828 + 4711C209A0F04A33BEF461EB - explicitFileType - archive.ar includeInIndex - 0 + 1 isa PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWSymbolicator.h path - libPods-specs-Kiwi.a + NonARC/KWSymbolicator.h sourceTree - BUILT_PRODUCTS_DIR + <group> - 47DE717D953A49748E480F8D + 473771FE215245E78A13822A - buildActionMask - 2147483647 - files + children - E9877AE0AC8E4D479DD89534 + CD52ED41EF5D448384BA54BE + 1B9B67AA7E474742A860B3A4 + 215D40D5FCF846B48930057A + 87383DFA27664E4D9B5A3ECD + 6EC813028C9941CB859CC9E5 + EAB5C84B189A4B79A998B17C isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 47E5203D5CD7437D8C21E3D6 - - fileRef - DD54F3CD1A5F4739B57D3DD2 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - - 47FD1518AF45428A9939E291 - - fileRef - 831677BB9AFD49F2BA6F3853 - isa - PBXBuildFile - - 482C8EFFDED24F2CAD8B0965 - - fileRef - DB92B986F814421097AC31B8 - isa - PBXBuildFile + PBXGroup + name + Pods + sourceTree + <group> - 482CE5400B8C4694970E64CD + 4778B249EB2C4F2E94CFC1A2 includeInIndex 1 @@ -3493,20 +3612,13 @@ lastKnownFileType sourcecode.c.objc name - NSArray+RACSequenceAdditions.m + RACCommand.m path - ReactiveCocoaFramework/ReactiveCocoa/NSArray+RACSequenceAdditions.m + ReactiveCocoaFramework/ReactiveCocoa/RACCommand.m sourceTree <group> - 48532157675748ABB547D50D - - fileRef - 47C95EEEB43D479E9D0FB828 - isa - PBXBuildFile - - 486AD6BC8E084E4489E950F1 + 47A9AFC873764952B3F144D1 includeInIndex 1 @@ -3515,214 +3627,87 @@ lastKnownFileType sourcecode.c.h name - RACmetamacros.h + Kiwi.h path - ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACmetamacros.h + Classes/Core/Kiwi.h sourceTree <group> - 48D979147BD14312945D14C5 + 47B9BE113A684A0AAA5035B2 - buildActionMask - 2147483647 - files - - 1A2E78E1A99F45D293A979C2 - FF422B92EFEF40C69375FD1B - 750FF767CA1E4E1CAFCC6D34 - 64B285009A40470A8702A7D7 - C5496FF0699E41CEB31D4D7F - E3E15992F42E4D1FAFB8EAE7 - 0C2778DD16544965BE613972 - 4435FFC749804BFD8110A0F8 - 4150AA24992C415BB41ED908 - A74E170D326840CDA12E786A - 0AAA23E4769844409E164717 - A61DC31A04CF4A2588EA1702 - B206298413FF4A01865FDB24 - 91AC718C8A544A6AADA9AF60 - 14CB6CB5EEE34C9894A621C3 - E42B23214B834ECE83E8EF4D - BA976FE53B10488284FB1E18 - 5341ADC3E5DF4F8AB1C8AB2E - 9DDECA2D633043648676A1FD - B7EB1C75C7254D17ABBB72DB - 2330D4D14580411790B942EB - 304C97ED6FC44689842E8126 - 5855F3C6BD4C49E985E4C249 - 3FE626FADFB64D1686D0FA38 - 6B0DF5DC266A4D83A414B8B4 - C45ACC8C4F82435FB09DEC64 - 604CF2C9F0A3499CB9FA23B2 - 4D3FD4D71A6F4B418A981911 - 338EE28E93424A329B1BE41D - 389A6FDB7A914F93BE714E75 - F5AB7FB274A84B31898B11D6 - F3CC2B2178084527AAD26615 - C1052EB783924701BA35CDC5 - 052E094B207C4372B959E620 - A58892B2A24844E0815CC40F - CF13547E3D5A4A46AF86E77B - 41FE01A27BB045F797715312 - 4BC4EFAF6C2A4A35ACA8654D - 628616A9AC634F3B993A9713 - 4014BB3BE56B4A7EBA32AC68 - F591CFA0AC1E45C6B5A029AE - F66570DC6820480196AB504D - 6817D07DD0E7455AA376EAFB - E7C3BEF475E04E9BA065824C - ACF57E91F4FE4C6CB3DDDA57 - 95C5BCDFA2E6414AB7453F81 - FFBEDF51644D4EB98802152C - C352FBC2540B4CF391B8EC04 - BF02313BDDF94D7DBD78A195 - 5FED5A9FFE724FF99271908D - 25E4E934A2D54C969E2A7657 - 6510081C66B74A6A9246DD13 - 966169B31B484044BFC62A46 - C77D93F02CD44921A3B45645 - 4511DAF6FDE64C53BF02689E - B469F85D03D8489088863C52 - 354964B346D949F189E533DE - 204B040DE2F2428E9EDFF73C - CC998C2A0FCB446CA87E8D6F - 68E31BC53C5C42129B8B04BA - 2CF75CA115824843827AA589 - 253BAE184DBC4CD0B167AEEF - 4C924A5CBDA943AEBDDF38D4 - BB916C470E764D80ADFD745B - 5AACFAC3BF1D4CD5AAA3ABF8 - 12A11E6980B14F098D5D2FD9 - 42E315F8B6AC4611913652E8 - F7AC5AC816CA46BFA38108E0 - 9CB48D4C3663408C888BD73A - 40ACDEF268194A7BAFAAD306 - 1B0BCCC0AFF4465282D28997 - DC86FFE77D1244519B737AF9 - 09D8FBD4CBC34F718790D2D3 - D237C157B0AC4C9C8E3D91D2 - 45DEED1BF9614DB5B64B6227 - CDF3696E61634EF2AC858744 - E47E6AFC3F4344B3989412B4 - 16557A788BBC4A1DB8AFE695 - 7206A42B14C84570BAF28CD1 - 74E175C05E3C4AC1A565E7A1 - 9CDF01FCBAFC4847A01FF6DA - F23596A6B44347A8A74E28BB - 4BE75AE33D0442D9BDB3DF93 - B8C251E35AF84F1693BCAF72 - 9EDFB43655B149AFA573FE6E - 516F9A1D793F4E9FAB70DAEA - + fileRef + FB1F773527E9460CAF4BD5B1 isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXBuildFile + settings + + COMPILER_FLAGS + -w -Xanalyzer -analyzer-disable-checker + - 492299289A5046A7B1B722B3 + 4833F08DA1B4451494E74E9D includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWVerifying.h + RACSignalSequence.m path - Classes/KWVerifying.h + ReactiveCocoaFramework/ReactiveCocoa/RACSignalSequence.m sourceTree <group> - 497C093DAD454749A098D195 + 48DC5DDF5C464AB6ADF4E764 - includeInIndex - 1 + fileRef + C80D0DB4017F4CBDA0AB52E1 isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - RACDelegateProxy.m - path - ReactiveCocoaFramework/ReactiveCocoa/RACDelegateProxy.m - sourceTree - <group> + PBXBuildFile - 4992576032794EE1BD17268E + 48E932E8026449F68CE98968 - includeInIndex - 1 + buildActionMask + 2147483647 + files + + A9D0071DB50645A081CA9EB0 + D28E24D6A07A427E9292348D + isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWBeBetweenMatcher.h - path - Classes/KWBeBetweenMatcher.h - sourceTree - <group> + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 - 49ECE25D2A0D48DF975523B9 + 48F56E5C8A6A4FB38038A85B fileRef - 6608C5AAD046440C9228452D + 78E9687B8FE442D49A830D0A isa PBXBuildFile - 4A13A074EC3C465AAAA998C6 + 496CE7BA14E14DB19356B524 - baseConfigurationReference - 6A1A9B8DEC6447AFBFFCA440 - buildSettings + fileRef + 6A97D5CFA7A844B5ACA388B5 + isa + PBXBuildFile + + 49C1B2C4CB8C4307B8B542AB + + fileRef + 8F135A7D903546928291CC4C + isa + PBXBuildFile + settings - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Pods-specs-OHHTTPStubs-prefix.pch - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 5.0 - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - isa - XCBuildConfiguration - name - Debug - 4A5864DA996E4A9D8D321BE2 + 49EDB7634E9040C989D900A7 includeInIndex 1 @@ -3731,13 +3716,13 @@ lastKnownFileType sourcecode.c.h name - RACGroupedSignal.h + KWBlockRaiseMatcher.h path - ReactiveCocoaFramework/ReactiveCocoa/RACGroupedSignal.h + Classes/Matchers/KWBlockRaiseMatcher.h sourceTree <group> - 4A9FAE110505455A84BC3938 + 49F7DE07BB3B4DA5AFCDF02B includeInIndex 1 @@ -3745,52 +3730,14 @@ PBXFileReference lastKnownFileType sourcecode.c.objc + name + KWRegularExpressionPatternMatcher.m path - Pods-specs-dummy.m + Classes/Matchers/KWRegularExpressionPatternMatcher.m sourceTree <group> - 4AA3752E415648629006D697 - - fileRef - 08A1EF1724374DAE8DFAF285 - isa - PBXBuildFile - - 4B21083B56F04631AE91623D - - fileRef - 72B25C6C93604502824DA92F - isa - PBXBuildFile - - 4B25BEDF657940339CF1BA00 - - fileRef - 0EDD851F5BC24A55B4FB4F5B - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - - 4B660BFE5D0C4427ACE40C27 - - fileRef - 12C605A130B94D0896B7324E - isa - PBXBuildFile - - 4B7F9EFB25E148C980FB134D - - fileRef - B0D42FA1B4A34603826E7B56 - isa - PBXBuildFile - - 4BA64F0074C14710A9A090BD + 4A54E15C582F4D19A04A2C2A includeInIndex 1 @@ -3799,117 +3746,73 @@ lastKnownFileType sourcecode.c.h name - NSObject+RACDeallocating.h + UISwitch+RACSignalSupport.h path - ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACDeallocating.h + ReactiveCocoaFramework/ReactiveCocoa/UISwitch+RACSignalSupport.h sourceTree <group> - 4BC4EFAF6C2A4A35ACA8654D - - fileRef - A307DA15F3574A019015BED8 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - - 4BDF936788434A0892821DED - - fileRef - 7923AD5B65C742A4A35492D5 - isa - PBXBuildFile - - 4BE75AE33D0442D9BDB3DF93 - - fileRef - A40A452120B2495698C18ED9 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - - 4C719763155E437C9FE068DF + 4AAB9CF4A49F4B9EB29B88F3 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.script.sh + sourcecode.c.objc + name + KWContainMatcher.m path - Pods-resources.sh + Classes/Matchers/KWContainMatcher.m sourceTree <group> - 4C901C823ED44BF7A8C52366 - - fileRef - E18E3DC5D03D41D195A7748F - isa - PBXBuildFile - - 4C924A5CBDA943AEBDDF38D4 + 4AC732E78D3E47E98CE7680B fileRef - 44F15E5BE8AC46D49803B2C8 + B39C8C1C628242DD90796CCA isa PBXBuildFile settings COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 4CC64734F9704B05A4D6309A + 4AE1A61BC0DD4C9E9CD2604F fileRef - 9A3B190754E1411FBD33CFFF + E1B0DD643D5B44E99DFF8B8C isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 4CCD9D13DC4E4B6AA766B153 + 4B28C413090B46CA9A83B802 - includeInIndex - 1 + fileRef + 995144A8C6B8455883581300 isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSObject+RACLifting.m - path - ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACLifting.m - sourceTree - <group> + PBXBuildFile - 4D334D992B7548B1A71FEAF8 + 4BC2F6766CEE40A595AD02EA fileRef - 5A33FFF7CF464F59922BD03B + 2AB618B9CAF44070894B4672 isa PBXBuildFile - 4D3FD4D71A6F4B418A981911 + 4BCDCD22BB28414E88E04794 fileRef - DC1E4BC6BC8A4837B768E335 + B63DEE63C0E4441B80B8A7D5 isa PBXBuildFile - 4E2D33EF097A4DC18D358E76 + 4BE1491F73B242EAAFBFAA55 includeInIndex 1 @@ -3917,12 +3820,14 @@ PBXFileReference lastKnownFileType sourcecode.c.h + name + NSNumber+KiwiAdditions.h path - Pods-Reachability-prefix.pch + Classes/Core/NSNumber+KiwiAdditions.h sourceTree <group> - 4E3440AC0456491A971AEAA1 + 4C54D194C53543D8BE1112AA includeInIndex 1 @@ -3931,28 +3836,28 @@ lastKnownFileType sourcecode.c.h name - KWCaptureSpy.h + OHHTTPStubsResponse.h path - Classes/KWCaptureSpy.h + OHHTTPStubs/Sources/OHHTTPStubsResponse.h sourceTree <group> - 4E5163BF49274B0FAC8F0A42 + 4C79BBFC024F450EB35AE11B includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - NSObject+KiwiVerifierAdditions.h + NSString+RACKeyPathUtilities.m path - Classes/NSObject+KiwiVerifierAdditions.h + ReactiveCocoaFramework/ReactiveCocoa/NSString+RACKeyPathUtilities.m sourceTree <group> - 4E66F6BC25A54F3CAE9C4140 + 4C7AC52E435844C9BCE60AB7 includeInIndex 1 @@ -3961,45 +3866,40 @@ lastKnownFileType sourcecode.c.objc name - KWInequalityMatcher.m + UIStepper+RACSignalSupport.m path - Classes/KWInequalityMatcher.m + ReactiveCocoaFramework/ReactiveCocoa/UIStepper+RACSignalSupport.m sourceTree <group> - 4F141A3F9162423B8C01A9B1 + 4C90C4B7C78D40BFB79F39C1 fileRef - 5B006951FFD44E42B883CA93 + D52CE39566D94A66B5471987 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 4F2C8771A68749D1AA5D2CD5 + 4C90FAFC119B40C78051F0AB - fileRef - 3C09F943F7AF4D76A10CA4B3 + includeInIndex + 1 isa - PBXBuildFile - - 4F7CB33FA6C743F5B18098D5 - - children - - F2D9A2153CD04B2F93E661E2 - - isa - PBXGroup + PBXFileReference + lastKnownFileType + sourcecode.c.h name - Frameworks + UIRefreshControl+RACCommandSupport.h + path + ReactiveCocoaFramework/ReactiveCocoa/UIRefreshControl+RACCommandSupport.h sourceTree <group> - 4FEC1AA9762E404082803DED + 4DADE293366B4247A59A44F9 includeInIndex 1 @@ -4008,70 +3908,48 @@ lastKnownFileType sourcecode.c.objc name - UIStepper+RACSignalSupport.m + KWInequalityMatcher.m path - ReactiveCocoaFramework/ReactiveCocoa/UIStepper+RACSignalSupport.m + Classes/Matchers/KWInequalityMatcher.m sourceTree <group> - 50361B87F1D24BE2BBE25201 + 4E0C6EAC0CF44A7C8EAB9833 fileRef - 1521FFD6F75A40DAB94ACE40 + 56400FDC5DB443A2885B3444 isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - 50A9715EBDC04E84BC2761B9 + 4ED048C5A87C497CA38A128D - buildActionMask - 2147483647 - files + children - E995638581A84DA5ADB7F1E8 - 48532157675748ABB547D50D - 36FD63E8A2A74E01A71C9AFA + 01B1BCADA8044C8D9BA96B10 isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXGroup + name + Frameworks + sourceTree + <group> - 50E826F43D0F4FD7B5D37294 + 4EDC2E1BD8804A66BF6942A5 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - OHHTTPStubs.h + KWBeforeEachNode.m path - OHHTTPStubs/OHHTTPStubs.h - sourceTree - <group> - - 50EE5E49F3EF446593877EC5 - - children - - 335ACBB103CF42D294441418 - 4F7CB33FA6C743F5B18098D5 - DE336D8C1FF141EF9986F539 - A0CE69363211446C86C94F98 - CE3930D6BD9144FBA882CD98 - - isa - PBXGroup + Classes/Nodes/KWBeforeEachNode.m sourceTree <group> - 5167ACA3B53F4A839874B1E3 + 4F0935D8A2A1499EA6D85198 includeInIndex 1 @@ -4080,97 +3958,139 @@ lastKnownFileType sourcecode.c.h name - NSString+RACKeyPathUtilities.h + RACGroupedSignal.h path - ReactiveCocoaFramework/ReactiveCocoa/NSString+RACKeyPathUtilities.h + ReactiveCocoaFramework/ReactiveCocoa/RACGroupedSignal.h sourceTree <group> - 516F9A1D793F4E9FAB70DAEA + 4F44B9DC66AA4313932687B0 fileRef - 13D58A1BA64A48858E2E49DD + 001110B074434775B84ED439 isa PBXBuildFile settings COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 51A12E0F74B54E21A875DA59 + 4F506B5B0E7C47709FA44452 fileRef - EC145F306FC14C76979D0352 + 2FE6D7B0AAC44E73AF85DF0B isa PBXBuildFile - settings + + 4F6AA5149F414EB3A9C9D958 + + baseConfigurationReference + A4BDADB3C94F43D8B0BB5EC2 + buildSettings - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + NO + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-specs-Kiwi-prefix.pch + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 5.0 + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + isa + XCBuildConfiguration + name + Debug - 523D92D0958140FEA4A15703 + 4FE38A490BDF4DE5852D6501 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc + name + KWStringPrefixMatcher.m path - Pods-SocketRocket-prefix.pch + Classes/Matchers/KWStringPrefixMatcher.m sourceTree <group> - 5288BA5DA69B4CECAAD9724D + 4FF3B55A62E24AAF8CE79A80 + fileRef + 6A5FD350B4224D3EB9A89962 isa - PBXFileReference - lastKnownFileType - wrapper.framework - name - Security.framework - path - Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/Security.framework - sourceTree - DEVELOPER_DIR + PBXBuildFile - 52DE7868CB574B438320C9A8 + 5043D891C6764D2287EE74A0 fileRef - EF94BEFE58CD415C8F2B12A0 + 428A9C0BFD1B4B6C9AE0F9EF isa PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 52F4BD4C69444DB7ADA94143 + 505E201B15B3426787D333E1 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWFailure.m + KWCaptureSpy.h path - Classes/KWFailure.m + Classes/Core/KWCaptureSpy.h sourceTree <group> - 5341ADC3E5DF4F8AB1C8AB2E + 50BA4DB05ADC41F89BBD2938 fileRef - 13811616FF3443FF8EB3000B + 5B6E6EF1DCC347AB98491E12 isa PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - 53771B9206654B4B8D27FE87 + 516F17C987404C4385BC689D includeInIndex 1 @@ -4179,28 +4099,35 @@ lastKnownFileType sourcecode.c.objc name - KWContainMatcher.m + RACReplaySubject.m path - Classes/KWContainMatcher.m + ReactiveCocoaFramework/ReactiveCocoa/RACReplaySubject.m sourceTree <group> - 53ABEB7322CB47E8A0B0E73A + 5175D4FCB5124320B8C29426 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - NSOrderedSet+RACSequenceAdditions.h + KWReceiveMatcher.m path - ReactiveCocoaFramework/ReactiveCocoa/NSOrderedSet+RACSequenceAdditions.h + Classes/Matchers/KWReceiveMatcher.m sourceTree <group> - 53E2E69EC8DE4A029FA08396 + 526923A419144AEF930312AB + + fileRef + 9F3BF90077ED4DD1825C66B0 + isa + PBXBuildFile + + 52919260BB304A3BAFEBA71B includeInIndex 1 @@ -4209,40 +4136,51 @@ lastKnownFileType sourcecode.c.h name - KWInvocationCapturer.h + KWDeviceInfo.h path - Classes/KWInvocationCapturer.h + Classes/Core/KWDeviceInfo.h sourceTree <group> - 53F5158A9DE244498DD596D2 + 52B4E7FA7F614E1A830B0591 + + fileRef + 050907F549CB446B9BFD60C8 + isa + PBXBuildFile + + 52C4F189091E43EEA9DE1F72 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWBeforeEachNode.m + KWCallSite.h path - Classes/KWBeforeEachNode.m + Classes/Core/KWCallSite.h sourceTree <group> - 544897CE916B485392CD2A4A + 52E346DD663744848DF23AD1 - fileRef - D3A2CB35F034400CB7329D1E + buildActionMask + 2147483647 + files + + CB5464819282478585CE81BC + F6F4D352F4984CFD80C7E75A + 544C627A7EC74982BE24E15B + 28F4DD4F041948FB927A48DF + isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 - 55998C1FB2F14DE5858D9D3A + 53C2E057EBA14ED7B1C7B18B includeInIndex 1 @@ -4251,27 +4189,13 @@ lastKnownFileType sourcecode.c.objc name - RACReplaySubject.m + KWContainStringMatcher.m path - ReactiveCocoaFramework/ReactiveCocoa/RACReplaySubject.m + Classes/Matchers/KWContainStringMatcher.m sourceTree <group> - 559BCBD1DB56401FBC55A38A - - fileRef - CF48551A1FF743989A2D2E46 - isa - PBXBuildFile - - 561301809AC7426A83DF9803 - - fileRef - A9E27EB329B14D3D8964E65D - isa - PBXBuildFile - - 561C815A44094CDAAEEBB5A2 + 53F078F2C50E444682C31E84 includeInIndex 1 @@ -4280,25 +4204,38 @@ lastKnownFileType sourcecode.c.objc name - UISegmentedControl+RACSignalSupport.m + KWItNode.m path - ReactiveCocoaFramework/ReactiveCocoa/UISegmentedControl+RACSignalSupport.m + Classes/Nodes/KWItNode.m sourceTree <group> - 56876CC87CE746FF9904AD3D + 544C627A7EC74982BE24E15B fileRef - 383D0AD29EEF48EBA03A1B6E + A11EE38E8A114B91BE61B5E4 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 56FC5424BF3847E996EABCFB + 545DAC4C99624D208096CD6A + + isa + PBXFileReference + lastKnownFileType + wrapper.framework + name + SenTestingKit.framework + path + Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/SenTestingKit.framework + sourceTree + DEVELOPER_DIR + + 5460193ADC744573AC670EFC includeInIndex 1 @@ -4307,13 +4244,13 @@ lastKnownFileType sourcecode.c.h name - UIControl+RACSignalSupport.h + KWMatchVerifier.h path - ReactiveCocoaFramework/ReactiveCocoa/UIControl+RACSignalSupport.h + Classes/Verifiers/KWMatchVerifier.h sourceTree <group> - 572B588A0DD649089CF4C327 + 546E0752E7B74342904B3808 includeInIndex 1 @@ -4322,35 +4259,38 @@ lastKnownFileType sourcecode.c.h name - KWBeMemberOfClassMatcher.h + RACStream.h path - Classes/KWBeMemberOfClassMatcher.h + ReactiveCocoaFramework/ReactiveCocoa/RACStream.h sourceTree <group> - 57D45EAD150A430AB32E2B39 + 54AA229EC0174CF7B1C0E463 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - RACEmptySignal.m + text path - ReactiveCocoaFramework/ReactiveCocoa/RACEmptySignal.m + Pods-specs-acknowledgements.markdown sourceTree <group> - 57E430CB18DD4655AD697EE7 + 54C7DB02FA3843B4AD94C3A9 fileRef - 954DC9D05DE743A6B8671E3C + 38BD222F9B9547418293F9AA isa PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 58281E00E33A4B5C8FDA44B0 + 54FB59A210304509AF38DFD2 includeInIndex 1 @@ -4359,129 +4299,119 @@ lastKnownFileType sourcecode.c.h name - NSObject+KiwiMockAdditions.h + NSObject+RACDescription.h path - Classes/NSObject+KiwiMockAdditions.h + ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACDescription.h sourceTree <group> - 5831C3AECDA540AB8D4F1C0E + 5552B3CABD8C4A8384DE9E60 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - NSObject+RACSelectorSignal.h + NSOrderedSet+RACSequenceAdditions.m path - ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACSelectorSignal.h + ReactiveCocoaFramework/ReactiveCocoa/NSOrderedSet+RACSequenceAdditions.m sourceTree <group> - 5855F3C6BD4C49E985E4C249 + 558A878FB07742F48B479AD2 - fileRef - 6CDC1066C5C44587BF0B6F4A + buildConfigurations + + 1669929DFE114010B523AA40 + 02EF24FACE5B4682BD42A8C2 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - + XCConfigurationList - 5861A5F373294487AFFB8841 + 55B77F5EEC94416D92A4150C fileRef - 40E0717091884763B9782140 + 8096CEE89625406A987BAFA2 isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - - 58714FB86CBE459EB6A4961C - - containerPortal - 3593DC205A284FA2958F1B80 - isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - 9A6B6BFEB33144239FDB185C - remoteInfo - Pods-specs-OHHTTPStubs - 5880585F20314BAD81399FD4 + 55DB72C014924CFDBBACCF47 fileRef - 4992576032794EE1BD17268E + 03F0A3EA98BA4F0BB6C14D50 isa PBXBuildFile - 58E7572CCDFE4E6686064537 + 56400FDC5DB443A2885B3444 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWBeZeroMatcher.m - path - Classes/KWBeZeroMatcher.m - sourceTree - <group> - - 599721491B8D4DA8A733A7A8 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWObjCUtilities.h + SenTestSuite+KiwiAdditions.h path - Classes/KWObjCUtilities.h + SenTestingKit/SenTestSuite+KiwiAdditions.h sourceTree <group> - 5997AE0A334744BBA7F9E093 + 569352254EE6463B970A3278 fileRef - D7EC89AB9CCE4EC59E00F682 + AE481CC5C97D41F38D2C1C40 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 59A364D3BF8448C795798BCC + 56D4D307DC4A4AF09DAF94EE + + fileRef + D2A109B78A2E4B5FBA7DBF4B + isa + PBXBuildFile + + 571A1AE8705C422686933D75 + + fileRef + D8A16659E3D5480DB06353D3 + isa + PBXBuildFile + + 573121D7EC914417A495863E + + fileRef + ABCF6FE3076B48F685D25B8E + isa + PBXBuildFile + + 577D44E25E3E48748C565F66 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWAfterAllNode.m + RACDisposable.h path - Classes/KWAfterAllNode.m + ReactiveCocoaFramework/ReactiveCocoa/RACDisposable.h sourceTree <group> - 59C7020EE1434185B9029FC8 + 578314DDCFF7405BBB7F28F5 includeInIndex 1 @@ -4490,42 +4420,44 @@ lastKnownFileType sourcecode.c.h name - KWBeNilMatcher.h + OHHTTPStubs.h path - Classes/KWBeNilMatcher.h + OHHTTPStubs/Sources/OHHTTPStubs.h sourceTree <group> - 5A33FFF7CF464F59922BD03B + 57A55F8AA7334085B6DAC3DA + includeInIndex + 1 isa PBXFileReference lastKnownFileType - wrapper.framework + sourcecode.c.objc name - Foundation.framework + KWMatcher.m path - Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/Foundation.framework + Classes/Core/KWMatcher.m sourceTree - DEVELOPER_DIR + <group> - 5A3A8742B8FD4F0D98E23A99 + 57D29871617A47DF87411161 - explicitFileType - archive.ar includeInIndex - 0 + 1 isa PBXFileReference + lastKnownFileType + sourcecode.c.h path - libPods-ReactiveCocoa.a + Pods-specs-Kiwi-prefix.pch sourceTree - BUILT_PRODUCTS_DIR + <group> - 5AACFAC3BF1D4CD5AAA3ABF8 + 57FE9761852747DCAB5CD34C fileRef - 33E7747595C64B30BC8EDD39 + F8E4EF9644DA4628A96BED31 isa PBXBuildFile settings @@ -4534,7 +4466,7 @@ -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 5B006951FFD44E42B883CA93 + 584DFECE0CB6426E83E7DFA2 includeInIndex 1 @@ -4543,20 +4475,26 @@ lastKnownFileType sourcecode.c.objc name - KWContextNode.m + KWSymbolicator.m path - Classes/KWContextNode.m + NonARC/KWSymbolicator.m sourceTree <group> - 5B6F4F5FE4074CF1B8D51958 + 586E6F10DCC342528FA9DB0A - fileRef - 26BA8B42BF5249398A327A1C + containerPortal + EFBB6CF77B5E4364844354C4 isa - PBXBuildFile + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 7A17300E4D674CC0B2A68C8C + remoteInfo + Pods-specs-Kiwi - 5B7613B22BDB45B3989085B9 + 58B2D2DD28B94897A9CBFD7A includeInIndex 1 @@ -4565,51 +4503,27 @@ lastKnownFileType sourcecode.c.h name - KWTestCase.h + RACSerialDisposable.h path - Classes/KWTestCase.h + ReactiveCocoaFramework/ReactiveCocoa/RACSerialDisposable.h sourceTree <group> - 5BF559B20D784F7096C0D5FF + 59037336E5044D918F361EE9 - buildConfigurationList - 72AAC7B782E14F44968EA42C - buildPhases - - 76D7FD0A9679464DB30242B8 - 85C4A25A7325412788949ADD - FAF7DE0F88A14EBBB5D08FB9 - - buildRules - - dependencies - + fileRef + 5E35D464EA2546EBA885DB5D isa - PBXNativeTarget - name - Pods-SocketRocket - productName - Pods-SocketRocket - productReference - 354688651EC347BEA7E72F0E - productType - com.apple.product-type.library.static + PBXBuildFile - 5C3D6D948CA04864841525C5 + 593063C939C744AEA2C5074E - includeInIndex - 1 + fileRef + 70E5A1D5748146308E5E61B5 isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods-Reachability.xcconfig - sourceTree - <group> + PBXBuildFile - 5C4F9736830A4E87807D3281 + 59818CB985A64CB5A5CAE8ED includeInIndex 1 @@ -4618,41 +4532,53 @@ lastKnownFileType sourcecode.c.h name - NSObject+RACLifting.h + KWInvocationCapturer.h path - ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACLifting.h + Classes/Core/KWInvocationCapturer.h sourceTree <group> - 5CFE18FBE3ED4163BC06E29A + 59C6EF44CE7D4799BD6AB4CA - includeInIndex - 1 + fileRef + CF9D8F2C2ECD45EA87BA15B7 isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - RACMulticastConnection+Private.h - path - ReactiveCocoaFramework/ReactiveCocoa/RACMulticastConnection+Private.h - sourceTree - <group> + PBXBuildFile + settings + + COMPILER_FLAGS + -fno-objc-arc -w -Xanalyzer -analyzer-disable-checker + - 5DD5F2579DEF4A5E87B5EB0F + 59EB47950FFF4BAF90D91F8C - includeInIndex - 1 + fileRef + F4668E959E7D4143A1F38D69 isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - Pods-ReactiveCocoa-dummy.m + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 59EC35BED192477BA9EFA2B2 + + children + + B44017F3EF194FF58094AD51 + FFB46B3833F545E1B16E27A8 + 050907F549CB446B9BFD60C8 + 3507694354CB4545BE6DBF2D + + isa + PBXGroup + name + Support Files sourceTree - <group> + SOURCE_ROOT - 5E8B01CCEDA44A2ABBA85B7B + 5A0CF3C41E364004B08DBD37 includeInIndex 1 @@ -4661,485 +4587,324 @@ lastKnownFileType sourcecode.c.h name - KWMessageSpying.h + KWBeTrueMatcher.h path - Classes/KWMessageSpying.h + Classes/Matchers/KWBeTrueMatcher.h sourceTree <group> - 5F2F215588894C228A278E7A + 5A5E79B952814CEAB63D5048 fileRef - 486AD6BC8E084E4489E950F1 + AC60781D486C4E398A6ABC19 isa PBXBuildFile - 5F5A715093444895AF74EB71 + 5A9416F3CA1F4117A6041968 fileRef - A7E83C7743A343359D196097 + 7171822821BF420EA847F90D isa PBXBuildFile - 5F84070DCCAD4C04995A4A98 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWBeforeEachNode.h - path - Classes/KWBeforeEachNode.h - sourceTree - <group> - - 5FAE1563B53947C1B6EFF64D - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - RACSignal.h - path - ReactiveCocoaFramework/ReactiveCocoa/RACSignal.h - sourceTree - <group> - - 5FD559D961704045A16F11DF + 5AB363249B6340818A33ABE3 - includeInIndex - 1 + buildActionMask + 2147483647 + files + + 1B4D64BF8BF144D9A8CC8342 + 64589C4B2C1B474FBB542126 + FBB062F93FE2425C8699524F + isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSObject+KiwiSpyAdditions.h - path - Classes/NSObject+KiwiSpyAdditions.h - sourceTree - <group> + PBXHeadersBuildPhase + runOnlyForDeploymentPostprocessing + 0 - 5FDDEB8A1B104F69B428A9CC + 5AE46EF325E94B3EA880A389 fileRef - ACB20F6105C544A3A99F4E5E + B8F1E671C0874842B6D9CCFC isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 5FED5A9FFE724FF99271908D + 5AFA2F7CE70544D5839018EF + + fileRef + 0D80D1BC092C484499F83E81 + isa + PBXBuildFile + + 5B07A602B87949DD954D2B68 fileRef - 8A2FAE7AEEB24BEFB68233F5 + DEFD2EC3A4784EE98B7D5C36 isa PBXBuildFile settings COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 60232C08BDF24866A92B8AC2 + 5B10FF0A2E39458BA5CCF066 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RACQueueScheduler.h + NSObject+RACDescription.m path - ReactiveCocoaFramework/ReactiveCocoa/RACQueueScheduler.h + ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACDescription.m sourceTree <group> - 6031188552FE4DACAE15BB72 + 5B6E6EF1DCC347AB98491E12 - fileRef - C8C0707D5D744816B952B724 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + NSFileHandle+RACSupport.h + path + ReactiveCocoaFramework/ReactiveCocoa/NSFileHandle+RACSupport.h + sourceTree + <group> - 604CF2C9F0A3499CB9FA23B2 + 5B89CEDDA19444AB8DF06696 fileRef - F222BE0640B54233990D85B5 + F5547ED532444DF189741848 isa PBXBuildFile settings COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 60734572E744430B8D98C649 + 5B9842D33DCA42E1BB58BCD1 fileRef - B7A20EED90F54FDDB5585132 + 4C90FAFC119B40C78051F0AB isa PBXBuildFile - 6074DAE36A1C48789E35139C + 5BA1F4F90AFA44A9858B8DB0 fileRef - 5A33FFF7CF464F59922BD03B + B2AE69DBA4B4438097753F68 isa PBXBuildFile - 611CF489139649FD937F69F6 + 5BA53EFB48DC4E7E848B013B - containerPortal - 3593DC205A284FA2958F1B80 + buildConfigurations + + 3F8B674411B74682A9FDE31F + 6965E140102C4616B217079B + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - 063659C829454C82A619E4F8 - remoteInfo - Pods-Reachability + XCConfigurationList - 6124ED0C9838434A9F309EB9 + 5C07F742C7354FCB92A8E98D includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - RACImmediateScheduler.m + RACErrorSignal.h path - ReactiveCocoaFramework/ReactiveCocoa/RACImmediateScheduler.m + ReactiveCocoaFramework/ReactiveCocoa/RACErrorSignal.h sourceTree <group> - 617EC9CE5F1E448D9707B41A + 5C5E27C9B60643FC8D80ACEA + + fileRef + 6FBC08E5F2524698991953EE + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 5C79F2D07B8849018C2F72D2 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWExistVerifier.m + KWItNode.h path - Classes/KWExistVerifier.m + Classes/Nodes/KWItNode.h sourceTree <group> - 61C1B7F4E62645D28501B3D7 + 5C8BF678F2844E47899FBA5F fileRef - 58281E00E33A4B5C8FDA44B0 + 5EFCC5EDB86B44A480BEFA00 isa PBXBuildFile - 61C656E59FCD4AA18D3299D3 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSURLConnection+RACSupport.h - path - ReactiveCocoaFramework/ReactiveCocoa/NSURLConnection+RACSupport.h - sourceTree - <group> - - 6225B56BD454455692227279 + 5CFB4B0219E64DC498B5064A fileRef - D5E8695940A24B3B84C83D2A + B2B3144B35D3418584F92348 isa PBXBuildFile - 625EF39BAD87424AA0259E42 + 5D4889F4156D417396193073 fileRef - 993C884497BD4D88A59F95A0 + 5F634A62DCCC4DEC93CFE6F4 isa PBXBuildFile - 626B9AFFBE724DAB993B8741 + 5D9AC4410D294D8E8C1EF711 - children - - C343E0EF87404B9292EB0827 - FFEE9EC9C65A46AD9B50D705 - 5DD5F2579DEF4A5E87B5EB0F - 936A312AAF8340EFB01B8090 - + includeInIndex + 1 isa - PBXGroup + PBXFileReference + lastKnownFileType + sourcecode.c.objc name - Support Files + RACMulticastConnection.m + path + ReactiveCocoaFramework/ReactiveCocoa/RACMulticastConnection.m sourceTree - SOURCE_ROOT + <group> - 628616A9AC634F3B993A9713 + 5E086B1CED234816B9B3EF01 - fileRef - FDD86645CC714B85B8EB2472 - isa - PBXBuildFile - settings + baseConfigurationReference + 7F87E11829654238834014A2 + buildSettings - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + YES + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-Reachability-prefix.pch + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 5.0 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + VALIDATE_PRODUCT + YES - - 62FA9CCA7C4B42BA924FA4AB - - fileRef - 8B17E5DF82F443A2A3FA0265 isa - PBXBuildFile + XCBuildConfiguration + name + Release - 6320E44CA0034C659743C0F0 + 5E35D464EA2546EBA885DB5D includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWBeNilMatcher.m + OHHTTPStubsResponse+JSON.h path - Classes/KWBeNilMatcher.m + OHHTTPStubs/Sources/OHHTTPStubsResponse+JSON.h sourceTree <group> - 638F5E8E35794CC29940938B + 5EAEB85C75CC40359A53E1A7 - children - - E7DFBD82C01C4C638B832CC1 - 482CE5400B8C4694970E64CD - C8C0707D5D744816B952B724 - E15C15B7F66C4838B6635BE3 - 8766C2B7442040FDAAA372BB - 7D00F35831C94EF9A35BE949 - 6F819ABAD996486EB36E1162 - E833288A46074D58A7682D66 - D89B6EAB38B14B529251562D - 32B3D8CFC841489184670469 - 0907D7C22C3F4A0A857F3E38 - 0756253C4EE34A4CA3408E25 - 678D2FE8E56C46FDB8C21B16 - 1A513DA3413145C5AFC020AF - 4BA64F0074C14710A9A090BD - F3C4A814FFE74D42B8BBBE4F - ACE1A53016D348D49978BA2A - 9007BF0487A94BC1B21E1E8C - 3CF499DF189A4D3DA2DBC640 - 0549192BBCB34EA58BCF73C4 - 5C4F9736830A4E87807D3281 - 4CCD9D13DC4E4B6AA766B153 - A274A8CF4F2F4D65BA7F41DB - A305D6B310EB4378985BA67B - 5831C3AECDA540AB8D4F1C0E - 2BC9C86526404E9997BD3574 - 53ABEB7322CB47E8A0B0E73A - 729964D7AE3A4744B9133890 - 34FAF0DA2F954738B5CC0BF2 - CD88C965FD144077A9EA5996 - 5167ACA3B53F4A839874B1E3 - 90F0880D6A8D4882B20D487F - AE1AB8F8C0EA4935A1DEBA83 - 0F0099A8FFF44612BFF6FB5D - 791AF00BE6BB466D8C5B6342 - 13811616FF3443FF8EB3000B - 61C656E59FCD4AA18D3299D3 - C83C3A6C3B574E7A9C531CA5 - 960CFB3A34494C4AA012FBA9 - 08D62584CB044423B4FBA2C4 - 1CC4D0F1A48E4C3AAD362CF0 - 3C2C0C8FE4ED460F9D638876 - DA4953C078B445A3A1767F2A - 6CDC1066C5C44587BF0B6F4A - DB92B986F814421097AC31B8 - 7454B58EA6AE4BC0B4EFA68D - E3BD340A829E4D19AAA4D5BF - FB027FA86D6E44529D4F6E63 - 8EB43961DFF846BFAED288C1 - 78E53A190E66475F9051B412 - D796CCB4E88140E5A8A0B529 - F222BE0640B54233990D85B5 - DC1E4BC6BC8A4837B768E335 - A0B950953DB34E3DBEF78DD0 - 497C093DAD454749A098D195 - 2869F79ED35C4EA8844A27D4 - 7EF4653CE9CA4DAD9233D367 - 7119EB174A62410B8D5AFCDC - C84D6C4C08E2470B8D11D118 - F3F65FACF58D4DEA948F7A65 - 6F2601DEDFCA412287115CB9 - 831677BB9AFD49F2BA6F3853 - 3BBBEF9DDF2948B6BB1DAF1D - 0C66A6206848438B9317E3A7 - A3752E073EC845ABBC80F496 - 06136C9D62C147BFAFF3A6E7 - 84D1954B5074420691A31E3A - 1CA392F4FE0041718008A555 - 168903ABF9454B78954156F5 - E3F6DFF70DA348DCA2C18755 - 57D45EAD150A430AB32E2B39 - 12C605A130B94D0896B7324E - 8CD93E75662D4FA9A2E90455 - 3F3970F566EA49D7B1B1BCD0 - A307DA15F3574A019015BED8 - 4A5864DA996E4A9D8D321BE2 - FDD86645CC714B85B8EB2472 - 6FFBD09F24064481BDCEC632 - 6124ED0C9838434A9F309EB9 - 8F029FBAF7AD47028C590920 - 782ABE7106924070BB66F2FA - B376D8EF478B4819BBDA03E5 - 21C56824A0804A99A45C7942 - 068D9ED896A94AF2BF713D23 - 9956D4781A514DAC9087F6A3 - 5CFE18FBE3ED4163BC06E29A - 26BA8B42BF5249398A327A1C - 1921F3201B6C4F5FAC1A4ADF - 60232C08BDF24866A92B8AC2 - 2BAC182050CE474E8B4590CF - 9CCBB7419D6D4811A98D0700 - E6C3CC91C6F24E8DB479B8E1 - 55998C1FB2F14DE5858D9D3A - 2C0DF2DA739C41299DFBDC2F - B75F411132DA4DEF831D134A - 00FA74F1A9B844C0971B3F27 - 4664A96645EA431D8B7D947B - E277C3A8AFC34BACA28B4E3A - E18E3DC5D03D41D195A7748F - 8A2FAE7AEEB24BEFB68233F5 - BE157294E612407DB6D47D02 - BDF34832C2054D93ADCE35CE - 9B8CD4FF735340F0AFAB0D7D - A0F91802F50B41899581E79B - 5FAE1563B53947C1B6EFF64D - 6B8F61281AEE40B19705EFB4 - A9E27EB329B14D3D8964E65D - 02290D0240FD4719BD909556 - 28E7B4EA3CCB41A188767F75 - 747C20958ABB480B81B0121E - 316C7A35DFDE4BB197E706BB - 95FB0D58EE094DCAA6E5BB7B - 406A41651A7B4852B8D1E670 - 3C9CA71753B24B7ABD90EA0F - B1DFE1BB63F64A6486527788 - 1FF7249D3FA7430FB7CCC462 - D0804DA9D1C5422696461AAD - 87B6D3CB7B5D4D699789ABA2 - 938F977EA92046698CA65115 - FAB2736A54DC4C3D83898090 - 42E6B0A1AA23414789BB67A5 - DB74AC156BEB40569A576D32 - CC9E48D74B9D428ABB776918 - 0CC70054E0BD4E3AA5EC3EA0 - 1995B62678FE45A192A5AB24 - 954DC9D05DE743A6B8671E3C - 44F15E5BE8AC46D49803B2C8 - 6B3A51943C3A4205B90C0349 - 0799C3C8DF1C400D9BD56A7E - BB97D9561C0C4C4D80CFCAC5 - 33E7747595C64B30BC8EDD39 - A8A09B6BFF8E4A949004EA58 - DBF23712AD1341D79E414D00 - 236A1BFC99784F36BBAFCC75 - F6084BC1A66C4EBBBD3BE4CD - 81FC7D2E5B3945F9B70EB03C - CA01BF240E594B7FA18334EF - CE580522C4254B50996A6ACF - 649B611218504167A9396F6B - 486AD6BC8E084E4489E950F1 - 90D8685E644542C1811D4676 - 8DB3E706B957420C9D608C32 - D1F816F4B434400AAF4FB7BA - 3A891723BBB64F9EAE0F0C2F - C9988DAD30D24211A0D9B87E - 6608C5AAD046440C9228452D - A9EBB06972CC41BBB12D61A8 - 95623FB4CA774EA0BD57E3F1 - 981CC30D0F674C24826FFC3B - 72B25C6C93604502824DA92F - 3E49E5458CE24350A76EAA4E - 56FC5424BF3847E996EABCFB - 3C3EE7F5AFF74E9F898B6254 - 3C4E26096492433E9FD101C1 - 185F34A7C47140BD85EF19DD - EE7AEBCD93054EDD82A61DDE - A9BD7CA5D2064DEF8B675907 - BF674AC2E31D45F299ED92EC - 8D8B572537864D34AF142F4A - 409BD228482340AEABE268DA - 41091D882DDF45F2ACB211D8 - 08A1EF1724374DAE8DFAF285 - 561C815A44094CDAAEEBB5A2 - 3973542F01BB41F7AD0CA143 - 6F56F0D93172428BAC5778A4 - B58E6846E34C49D38677CD88 - 4FEC1AA9762E404082803DED - FA837F145D5142109E15FEC1 - A40A452120B2495698C18ED9 - B7A20EED90F54FDDB5585132 - 114BD20560BC429DA72A9C5C - 908ABEFAF1504908BBAA135D - D9BD1BFA14A6475FB9AF3DC3 - 3953D48BF0DC4C9EAA633932 - 13D58A1BA64A48858E2E49DD - + includeInIndex + 1 isa - PBXGroup + PBXFileReference + lastKnownFileType + sourcecode.c.objc name - Core + RACUnarySequence.m + path + ReactiveCocoaFramework/ReactiveCocoa/RACUnarySequence.m sourceTree <group> - 63DD62F1AC6E44F0B6D7C245 + 5EB6A7CA99C346F2860E2A0F - buildActionMask - 2147483647 - files + buildConfigurations - 4D334D992B7548B1A71FEAF8 + F4D5820985CF4B43A43C65B1 + F8F895A8DFB24606B8F999B1 - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing + defaultConfigurationIsVisible 0 + defaultConfigurationName + Release + isa + XCConfigurationList - 6450F06EA0D3454B89429695 + 5EC873A3B67F494B84B5302E fileRef - AB4FA9729F764749ABEC0946 + 1026BF25FBA9440489696ACC isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - 649B611218504167A9396F6B + 5EDA4809ECA7419196883CB7 includeInIndex 1 @@ -5148,130 +4913,92 @@ lastKnownFileType sourcecode.c.objc name - RACValueTransformer.m + RACCompoundDisposable.m path - ReactiveCocoaFramework/ReactiveCocoa/RACValueTransformer.m + ReactiveCocoaFramework/ReactiveCocoa/RACCompoundDisposable.m sourceTree <group> - 64B285009A40470A8702A7D7 - - fileRef - E833288A46074D58A7682D66 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - - 64ED7A9099474B44881384AB + 5EFCC5EDB86B44A480BEFA00 - includeInIndex - 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + wrapper.framework name - KWPendingNode.h + Foundation.framework path - Classes/KWPendingNode.h + Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/Foundation.framework sourceTree - <group> - - 6510081C66B74A6A9246DD13 - - fileRef - A0F91802F50B41899581E79B - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - - 65ED8914703C4F9DB0EEE364 - - isa - PBXTargetDependency - target - 9A6B6BFEB33144239FDB185C - targetProxy - 58714FB86CBE459EB6A4961C + DEVELOPER_DIR - 6608C5AAD046440C9228452D + 5EFF7570AB80460182B3714A includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - UIBarButtonItem+RACCommandSupport.h + KWCaptureSpy.m path - ReactiveCocoaFramework/ReactiveCocoa/UIBarButtonItem+RACCommandSupport.h + Classes/Core/KWCaptureSpy.m sourceTree <group> - 66D8821F15DC4520818FF56B + 5F2E20CF5D294912B2437B48 fileRef - 4E3440AC0456491A971AEAA1 + 85DFB2EE60734DD68FAC92E0 isa PBXBuildFile - 678D2FE8E56C46FDB8C21B16 + 5F632A630A474B70B1A8B265 - includeInIndex - 1 + fileRef + EF1606F8CFE14DE4BFE1F59F isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSNotificationCenter+RACSupport.h - path - ReactiveCocoaFramework/ReactiveCocoa/NSNotificationCenter+RACSupport.h - sourceTree - <group> + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 67914415DB2C404AAC41F1F5 + 5F634A62DCCC4DEC93CFE6F4 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWConformToProtocolMatcher.m + KWProbe.h path - Classes/KWConformToProtocolMatcher.m + Classes/Core/KWProbe.h sourceTree <group> - 679EAD34611A4E2DA208AEE4 + 5F8967E5B03049BBA2A0A412 fileRef - E7DFBD82C01C4C638B832CC1 + 2BE54AB79DF647CF8F2369C4 isa PBXBuildFile - 67ED98C8A5244A4EB4604FCC + 5FA8245E18A9468BBFE498DE fileRef - C944708B69214F7C8A9A34E6 + C4F920B1A1E14D409AEF124B isa PBXBuildFile - 6817D07DD0E7455AA376EAFB + 5FC0861360E447F5B11BB972 fileRef - 9956D4781A514DAC9087F6A3 + 4C79BBFC024F450EB35AE11B isa PBXBuildFile settings @@ -5280,54 +5007,20 @@ -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 682EB018E1BB4EF6B105107C - - fileRef - 95623FB4CA774EA0BD57E3F1 - isa - PBXBuildFile - - 683C5AD681124911B16AF15A - - includeInIndex - 1 - isa - PBXFileReference - name - base64.c - path - SocketRocket/base64.c - sourceTree - <group> - - 68515E4D6C3140BB85AB3C7C + 6054647399BA48F6AAEF24D1 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h - name - KWAfterAllNode.h + text.xcconfig path - Classes/KWAfterAllNode.h + Pods-SocketRocket-Private.xcconfig sourceTree <group> - 68E31BC53C5C42129B8B04BA - - fileRef - FAB2736A54DC4C3D83898090 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - - 6957B89CE57D4A3C831D9A05 + 6058B66709014A13A1BBBDED includeInIndex 1 @@ -5336,13 +5029,13 @@ lastKnownFileType sourcecode.c.h name - KWProbe.h + KiwiBlockMacros.h path - Classes/KWProbe.h + Classes/Core/KiwiBlockMacros.h sourceTree <group> - 698FC9B1240A4993861F80B8 + 607B91A49C0B48C6AE0E2D2D includeInIndex 1 @@ -5351,13 +5044,13 @@ lastKnownFileType sourcecode.c.h name - SenTestSuite+KiwiAdditions.h + KWGenericMatcher.h path - Classes/SenTestSuite+KiwiAdditions.h + Classes/Matchers/KWGenericMatcher.h sourceTree <group> - 6A12D21AF21A40EB969AC736 + 607CB1E9991D4707B16708B9 includeInIndex 1 @@ -5366,45 +5059,40 @@ lastKnownFileType sourcecode.c.h name - KWGenericMatchEvaluator.h + RACEXTRuntimeExtensions.h path - Classes/KWGenericMatchEvaluator.h + ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACEXTRuntimeExtensions.h sourceTree <group> - 6A1A9B8DEC6447AFBFFCA440 + 60BC9F5CADA44D59958A8BF2 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.objc + name + RACTuple.m path - Pods-specs-OHHTTPStubs-Private.xcconfig + ReactiveCocoaFramework/ReactiveCocoa/RACTuple.m sourceTree <group> - 6B0DF5DC266A4D83A414B8B4 + 611A49FF440E477F915695AE fileRef - FB027FA86D6E44529D4F6E63 + 53C2E057EBA14ED7B1C7B18B isa PBXBuildFile settings COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 6B175ED3832F4DCD996E0D4E - - fileRef - 8717440518894A159A279A91 - isa - PBXBuildFile - - 6B3A51943C3A4205B90C0349 + 617BD75024BD44ACBBE13DF9 includeInIndex 1 @@ -5413,13 +5101,13 @@ lastKnownFileType sourcecode.c.h name - RACTestScheduler.h + RACBehaviorSubject.h path - ReactiveCocoaFramework/ReactiveCocoa/RACTestScheduler.h + ReactiveCocoaFramework/ReactiveCocoa/RACBehaviorSubject.h sourceTree <group> - 6B8F61281AEE40B19705EFB4 + 617E3068F2BA46B98A64CFAC includeInIndex 1 @@ -5428,20 +5116,13 @@ lastKnownFileType sourcecode.c.objc name - RACSignal.m + KWMatchers.m path - ReactiveCocoaFramework/ReactiveCocoa/RACSignal.m + Classes/Core/KWMatchers.m sourceTree <group> - 6BF3DDC1D3A04E179120E58D - - fileRef - 92700233ECA8495382C5CAFF - isa - PBXBuildFile - - 6C1E5330BB384D458541D7B3 + 61F7055EA57F45E8A114A2D7 includeInIndex 1 @@ -5450,60 +5131,27 @@ lastKnownFileType sourcecode.c.objc name - NSObject+KiwiVerifierAdditions.m + KWObjCUtilities.m path - Classes/NSObject+KiwiVerifierAdditions.m + Classes/Core/KWObjCUtilities.m sourceTree <group> - 6C234832BFBE43F4960ED0FE + 6323E4164CB2407191E76A9C fileRef - D989120ADDC34DA18AC3C8D1 + 49EDB7634E9040C989D900A7 isa PBXBuildFile - 6C54A48F2DB2425EA22492A6 + 6390F5D1845E4A878F00C345 fileRef - 0D66EF14253D49378094C744 + 817ADFDDDC8A4693A281B001 isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - 6CAA6E31029C41429D0B0213 - - buildConfigurationList - C6535D5C619441C6BE6FFD43 - buildPhases - - 47DE717D953A49748E480F8D - 6FE01351F54E41039BEAD872 - - buildRules - - dependencies - - 7C9EEF4F5ADD45F69683816D - C883587AFE81481DBA247877 - B446D2563FB2467A878D2F23 - - isa - PBXNativeTarget - name - Pods - productName - Pods - productReference - 3276F9627DB241BFA46C885F - productType - com.apple.product-type.library.static - - 6CDC1066C5C44587BF0B6F4A + 63B6DE27271D4674874EF924 includeInIndex 1 @@ -5512,111 +5160,133 @@ lastKnownFileType sourcecode.c.objc name - RACBehaviorSubject.m + RACKVOChannel.m path - ReactiveCocoaFramework/ReactiveCocoa/RACBehaviorSubject.m + ReactiveCocoaFramework/ReactiveCocoa/RACKVOChannel.m sourceTree <group> - 6CF88D0ECC604E17BB182568 + 63C547355CCA41148D5A8502 fileRef - 5A3A8742B8FD4F0D98E23A99 + CD004A91FC114DC281425414 isa PBXBuildFile - 6D507DE718D4412EB05F3A63 + 63DAD54396A34701AF8BB6DB includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWBlockRaiseMatcher.m + KWMock.h path - Classes/KWBlockRaiseMatcher.m + Classes/Mocking/KWMock.h sourceTree <group> - 6DC0DC0061AD4F4A8E9E9DAD + 63F8D9ED12FF471195F8C383 - buildConfigurations - - D7778E67F1BF48F2B656AB8E - DF0F0122AD7141369A55E781 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release + fileRef + C567C4CE76AC459F9D146506 isa - XCConfigurationList + PBXBuildFile - 6EC913D9CBA5470DBB5D8765 + 640685A410C24EA6A4A4C50C - children - - FD2B3FFD2001497D87091861 - B6F9381577CC47BAAA6635EF - F185F41FBD404EE584D5A391 - + baseConfigurationReference + C6E0DD264A3547CF9737B6B3 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + YES + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 5.0 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + VALIDATE_PRODUCT + YES + isa - PBXGroup + XCBuildConfiguration name - Reachability - path - Reachability - sourceTree - <group> + Release - 6F0924EABB7F450B8C90AC50 + 643C1FD148B343CEA8B94770 - includeInIndex - 1 + fileRef + 9862B06AB13C4156A7AF9D37 isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - KWBeTrueMatcher.m - path - Classes/KWBeTrueMatcher.m - sourceTree - <group> + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 6F2601DEDFCA412287115CB9 + 64589C4B2C1B474FBB542126 - includeInIndex - 1 + fileRef + BBFFA61182654C73B25A5C5A isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - RACDynamicSignal.m - path - ReactiveCocoaFramework/ReactiveCocoa/RACDynamicSignal.m - sourceTree - <group> + PBXBuildFile - 6F4AB966460546989FC86282 + 659A889723E143CB846D3260 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWSpec.m + RACEXTKeyPathCoding.h path - Classes/KWSpec.m + ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACEXTKeyPathCoding.h sourceTree <group> - 6F56F0D93172428BAC5778A4 + 65A19347A2174FAF9BBE6A5F + + fileRef + C74189FD041A49B8A68287AF + isa + PBXBuildFile + + 65DC9B41182D4A509A5D67F7 includeInIndex 1 @@ -5625,13 +5295,13 @@ lastKnownFileType sourcecode.c.objc name - UISlider+RACSignalSupport.m + NSObject+KiwiMockAdditions.m path - ReactiveCocoaFramework/ReactiveCocoa/UISlider+RACSignalSupport.m + Classes/Mocking/NSObject+KiwiMockAdditions.m sourceTree <group> - 6F6E1C8ED6084B9C881F2C50 + 66D3DA459A3249B7A08EB5CA includeInIndex 1 @@ -5640,11 +5310,11 @@ lastKnownFileType text.xcconfig path - Pods-specs-Kiwi.xcconfig + Pods-Reachability.xcconfig sourceTree <group> - 6F819ABAD996486EB36E1162 + 670875371A8241D7A19B76AF includeInIndex 1 @@ -5653,13 +5323,13 @@ lastKnownFileType sourcecode.c.h name - NSEnumerator+RACSequenceAdditions.h + KWRegisterMatchersNode.h path - ReactiveCocoaFramework/ReactiveCocoa/NSEnumerator+RACSequenceAdditions.h + Classes/Nodes/KWRegisterMatchersNode.h sourceTree <group> - 6F856A492D884897A8CF6AD1 + 6845B673E8E64A34BF0E39E2 includeInIndex 1 @@ -5668,59 +5338,111 @@ lastKnownFileType sourcecode.c.h name - KWRegisterMatchersNode.h + KWSpec.h path - Classes/KWRegisterMatchersNode.h + Classes/Core/KWSpec.h sourceTree <group> - 6FE01351F54E41039BEAD872 + 68F0E177914F4F458963DF83 - buildActionMask - 2147483647 - files - - E9F8D76845B14C049EFC558B - 0789AB73B2DE41C987B95B02 - 6CF88D0ECC604E17BB182568 - FE150A43DAE840E387566D6E - + fileRef + 10A312D8D3D24F9194782966 isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 6FFBD09F24064481BDCEC632 + 6965E140102C4616B217079B - includeInIndex - 1 + baseConfigurationReference + C115AB70479944B484379700 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + YES + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-ReactiveCocoa-prefix.pch + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 5.0 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + VALIDATE_PRODUCT + YES + isa - PBXFileReference - lastKnownFileType - sourcecode.c.h + XCBuildConfiguration name - RACImmediateScheduler.h - path - ReactiveCocoaFramework/ReactiveCocoa/RACImmediateScheduler.h - sourceTree - <group> + Release - 7119EB174A62410B8D5AFCDC + 697895346EF74BD9BB437025 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RACDynamicSequence.h + RACBacktrace.m path - ReactiveCocoaFramework/ReactiveCocoa/RACDynamicSequence.h + ReactiveCocoaFramework/ReactiveCocoa/RACBacktrace.m sourceTree <group> - 7136BFD4C2A946AFBFA72482 + 6986AB011AF0416FAEB384B7 + + fileRef + 57A55F8AA7334085B6DAC3DA + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 6A1FF88A04ED4CA083982641 + + fileRef + CE80F2807A6542D2AD8FAB5E + isa + PBXBuildFile + + 6A3FC4F985AD48E5AC6033A9 includeInIndex 1 @@ -5729,30 +5451,16 @@ lastKnownFileType sourcecode.c.h name - KWBeEmptyMatcher.h + UIAlertView+RACSignalSupport.h path - Classes/KWBeEmptyMatcher.h + ReactiveCocoaFramework/ReactiveCocoa/UIAlertView+RACSignalSupport.h sourceTree <group> - 71B4DEFBE95A4E9892A9CF42 - - fileRef - 9CCBB7419D6D4811A98D0700 - isa - PBXBuildFile - - 71DAB1957B6D4A4EBDF21323 - - fileRef - 281FFDE57E78449AA68CF521 - isa - PBXBuildFile - - 7206A42B14C84570BAF28CD1 + 6A5E1D21C62643BF88837F80 fileRef - 41091D882DDF45F2ACB211D8 + 697895346EF74BD9BB437025 isa PBXBuildFile settings @@ -5761,36 +5469,22 @@ -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 729964D7AE3A4744B9133890 + 6A5FD350B4224D3EB9A89962 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - NSOrderedSet+RACSequenceAdditions.m + KWConformToProtocolMatcher.h path - ReactiveCocoaFramework/ReactiveCocoa/NSOrderedSet+RACSequenceAdditions.m + Classes/Matchers/KWConformToProtocolMatcher.h sourceTree <group> - 72AAC7B782E14F44968EA42C - - buildConfigurations - - BFEFA557881F4EA6A680AE56 - 8A03BA2A4F2444FABA902ABF - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 72B25C6C93604502824DA92F + 6A97D5CFA7A844B5ACA388B5 includeInIndex 1 @@ -5799,191 +5493,299 @@ lastKnownFileType sourcecode.c.h name - UICollectionViewCell+RACSignalSupport.h + KWFormatter.h path - ReactiveCocoaFramework/ReactiveCocoa/UICollectionViewCell+RACSignalSupport.h + Classes/Core/KWFormatter.h sourceTree <group> - 72F64FEE812F4C6D917EC590 - - containerPortal - 3593DC205A284FA2958F1B80 - isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - 5BF559B20D784F7096C0D5FF - remoteInfo - Pods-SocketRocket - - 730A28CA166A4F0AAC575BB4 + 6A9AD2CC0B2F44D9A506AD4F - fileRef - 5C4F9736830A4E87807D3281 - isa - PBXBuildFile - - 7319B89C4D7746629F7D3852 - - fileRef - F51CAAB6FD074BA78B43DA98 + children + + F5B24F66923045159B7F0081 + FDCCF2F66E12437C9C08B3E7 + FEE67F238D7442EE9087A55F + B8F1E671C0874842B6D9CCFC + 817ADFDDDC8A4693A281B001 + 8BE6140DD8444485BA6359E9 + 238148EC249D47DAB3BB9D5A + 95A40515E5484DA5A98324ED + 5B6E6EF1DCC347AB98491E12 + 7ECB4A91B62B403080B42618 + 459334429F61429EA2EC4BE8 + EF1606F8CFE14DE4BFE1F59F + 3F37C960F13543B6852E0C52 + 88D96CE6C389411DBFCE9E12 + 1026BF25FBA9440489696ACC + 964F5432DA6C4FEBBA264F70 + 54FB59A210304509AF38DFD2 + 5B10FF0A2E39458BA5CCF066 + E65DD95C4B8440E28F3C54B5 + 0A5038F72EA747EE87C2940F + 2AB618B9CAF44070894B4672 + F4668E959E7D4143A1F38D69 + 1B92445928534D8581F3E477 + 825E6B4BC785485BAE460FD1 + B70EE89F247549078D1C4B8F + 199065E210E443F391703123 + 3EFE064F699A4835A301F339 + 5552B3CABD8C4A8384DE9E60 + 827BB873FD4A49E9A586391B + FB83D2CDF8FC455BB6C5B2F3 + 1E4953BD4CE64B818F6690A3 + 4C79BBFC024F450EB35AE11B + 8C78ABEA1400469A8103385B + 117E34432E834A7A9B6BE929 + 75AEFA62831B4DC7A92E7006 + 9B04C7774DBD4540813332C3 + 80EC8030A61D4D3E84DB3C5A + ED9A729660EA4FC298DC6DD2 + B2B3144B35D3418584F92348 + C72B1B3324B2445290D92990 + AC60781D486C4E398A6ABC19 + 697895346EF74BD9BB437025 + 617BD75024BD44ACBBE13DF9 + 4148E10D466E4EFFADF8E65B + E0C0BFDD55FF43C08BE8A9F7 + 017F2DA54A454F92A2FFE32C + 3DF90F2EEFC0490780E1ADBB + F7EC1BDAB34D4B4098D90757 + 898C98415C554D62A2228E38 + 4778B249EB2C4F2E94CFC1A2 + A8AFC5AAC7014EBD848740A3 + 5EDA4809ECA7419196883CB7 + B503B78C35084A12827138E4 + CD004A91FC114DC281425414 + A59DD3EDED7D42AF85B0463A + 577D44E25E3E48748C565F66 + 0F7A0FE389D1420B9AEEC1AC + 21070075F6714B26A03BFA57 + EDFFBD49908C43EF9C147529 + 0707DBE7F2DC45B4AB298CC4 + 269797A168A34570AF061E01 + 659A889723E143CB846D3260 + 607CB1E9991D4707B16708B9 + 03B46DD9773C40AAA1E2FB11 + 105E2373D3964737A3A4A9D2 + 2D6FDF81DADD464EB5518615 + 7517C13C70C846A3A4C687E0 + 16EFACA5F7FA4B478D979016 + 2499B82C686E4657954DD994 + A5155DDD6B6641BB815A68B5 + 155E58D0958249FFB7C4630B + 5C07F742C7354FCB92A8E98D + B5B48925C6CF438CA6216530 + E36EC84B9FBD4FF2993081DF + E22ED4747E634035B960D8DE + 4F0935D8A2A1499EA6D85198 + 41F67AC863514AA6962459CB + C567C4CE76AC459F9D146506 + 3B9947D8C69D4671A48508EA + 207E6C579EA54355A351D575 + 63B6DE27271D4674874EF924 + C8AA860DA638408AA6B8F197 + 0A57737D13F54EABBFE70131 + 35DDBADA009F4399AAC85375 + 5D9AC4410D294D8E8C1EF711 + B2AE69DBA4B4438097753F68 + 71973AE77AC2407FB876EA15 + DC26CAA1039A4F1D8E34AF90 + D2A109B78A2E4B5FBA7DBF4B + E13324B6331F4BF892ED0310 + 2FE6D7B0AAC44E73AF85DF0B + D8A16659E3D5480DB06353D3 + 516F17C987404C4385BC689D + C4F920B1A1E14D409AEF124B + 7351CBBEA4DB4962890A72A6 + 3C7BFB3F1C014147873E5F56 + F8D1FF8E6F304C6C888A1DE5 + B6CCF07FD899411882A93980 + 28C017E1EDB3426AB9758958 + 146C2411FD1940109B8FCFBD + 19BC924239444687BE654CC8 + 77EF22B0C303493BB94EAAB2 + 58B2D2DD28B94897A9CBFD7A + 9E0192D66CAA4C4E8112E83C + CD7B98960DE6400C83B61669 + 0C0A99E528204471BD353A24 + ABF248B913A64842945283E9 + 86E8FC92294145DD9425354B + 6DE0CB95058D4BEDAA405C71 + 46766D4BA2A14ED782229CA8 + 4833F08DA1B4451494E74E9D + 546E0752E7B74342904B3808 + 8A56347717AD4EE68AA2D4E7 + 07A8C0F20FDE44DD9FB880D4 + E4B0000F87A746CDB2C825FA + DD50E099DD2944809FA55A39 + 46519CFC00714072A487B269 + 8C008D29EEA34A128D3A646B + 4202A025FB504B2080FDB200 + BD0B7CE4EBFD416199CF8778 + FCA85E9368B04F16ACD7685C + D646D9F7C09C4E05AB3E233F + 00764906F5F64FCEA97D8F3F + 2E5DAB690DC345999748CD56 + 31C79F6E270C4E75B90D6366 + ABF83780E4F54B9A8CB69598 + 18606E42CCD34267BDE377A6 + 742EDE81BB8246DFADEB0EF1 + D1EE5FE4D66E4C6BAE0B8370 + C5CC7B53FA4C4FC387AD5C03 + 60BC9F5CADA44D59958A8BF2 + BBD883249CF0443298902DC6 + D20C6FEB12E641E0BF3897A8 + C74189FD041A49B8A68287AF + 5EAEB85C75CC40359A53E1A7 + 80AB88B3625A472AAC21165E + F8E4EF9644DA4628A96BED31 + D62503EA2BD94415A9EC1240 + 0B80E39001B44E839ADB0AE4 + CE80F2807A6542D2AD8FAB5E + 782D1CA7F52D4675B3435C0F + 047F781532644D2690D1D276 + 8F135A7D903546928291CC4C + 6A3FC4F985AD48E5AC6033A9 + 332822F707CA42149E05002B + 31DC8BEEF4994929A8BC8E1B + 79D933CCD0034897930AB598 + A384ABADAFC7474BBEE9E44D + 22AC7179260147C2A7172264 + CFC31C442B3E42B2910FF7CD + 2D5F9D58B5C04D0384A613D4 + 8A29DFF597DC4A6CA2751F1E + F00F8B0FECEF4E1096B7DB3B + 7171822821BF420EA847F90D + 43C0394CAC8A4DE18BED770E + 8324546C8B5549F2AEC52A7D + 9862B06AB13C4156A7AF9D37 + 7E41DB51032F433889882C47 + 1A829B29E2274914BB604225 + 4C90FAFC119B40C78051F0AB + DE7B0AA0F15748D6A4EC515F + 3DDB8D2BD114419487E26EBD + D173B55A211A49DCBE731092 + 7C2BF410800D4277894EEDE4 + 8234BFB6775B47D192155B21 + 22752797AB454404AD2B8FA3 + 4C7AC52E435844C9BCE60AB7 + 4A54E15C582F4D19A04A2C2A + CB1489830CA9446DAA1C4721 + 9592740120A1493E93E8BC1F + 14B065C3C34343EFB82B5D0A + 42DA59E50BB244F7855B93D8 + F59B6C8ED9B94518A403C6C3 + 72F658883B7F4799A7557C6F + 6D92AB5E2D024ADC8DFDB91A + isa - PBXBuildFile + PBXGroup + name + Core + sourceTree + <group> - 734D8077780941C3A9B588EC + 6AB2D511606C49749280946E - fileRef - 38EFE9F2FD77459A8F46D694 + explicitFileType + archive.ar + includeInIndex + 0 isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - + PBXFileReference + path + libPods-specs-Kiwi.a + sourceTree + BUILT_PRODUCTS_DIR - 73C23FD72BCB40B98E7E8A46 + 6AC217EF0A27440F9C444017 - baseConfigurationReference - 2A4E80FD601C41D1B2127F15 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Pods-specs-Kiwi-prefix.pch - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 5.0 - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - + includeInIndex + 1 isa - XCBuildConfiguration + PBXFileReference + lastKnownFileType + sourcecode.c.h name - Debug + KWBeEmptyMatcher.h + path + Classes/Matchers/KWBeEmptyMatcher.h + sourceTree + <group> - 73C5DCE15DF8475A8304D4E2 + 6C486994E5034CBCA313AABA - fileRef - 698FC9B1240A4993861F80B8 + buildActionMask + 2147483647 + files + + 0E0BA6EEA3444DB197EC51D7 + 978E7EAFA0F5430B85E4BB67 + isa - PBXBuildFile + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 - 7445FFDF3B4644C39C64874B + 6C619947D2E64727A33CAAB3 fileRef - 7C89D36525C44336A06DE90E + 1B92445928534D8581F3E477 isa PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - 7454B58EA6AE4BC0B4EFA68D + 6D710363D73F418E8FC175E0 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - RACBlockTrampoline.m + KWNull.h path - ReactiveCocoaFramework/ReactiveCocoa/RACBlockTrampoline.m + Classes/Core/KWNull.h sourceTree <group> - 747C20958ABB480B81B0121E + 6D92AB5E2D024ADC8DFDB91A includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RACSignalSequence.h + UITextView+RACSignalSupport.m path - ReactiveCocoaFramework/ReactiveCocoa/RACSignalSequence.h + ReactiveCocoaFramework/ReactiveCocoa/UITextView+RACSignalSupport.m sourceTree <group> - 74ABAC1087974C01B4275B92 - - fileRef - 124EFA25229848358CE27175 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - - 74E175C05E3C4AC1A565E7A1 - - fileRef - 561C815A44094CDAAEEBB5A2 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - - 74E86158709945BD83B008FA + 6DE0CB95058D4BEDAA405C71 includeInIndex 1 isa PBXFileReference - lastKnownFileType - sourcecode.c.h name - NSData+SRB64Additions.h + RACSignalProvider.d path - SocketRocket/NSData+SRB64Additions.h + ReactiveCocoaFramework/ReactiveCocoa/RACSignalProvider.d sourceTree <group> - 750B585F80FE419393C403C7 + 6DFCE05B95A54C5C958DE858 + + fileRef + 6AB2D511606C49749280946E + isa + PBXBuildFile + + 6E6D9E89568A4500AA50B380 includeInIndex 1 @@ -5991,38 +5793,26 @@ PBXFileReference lastKnownFileType sourcecode.c.h + name + NSInvocation+OCMAdditions.h path - Pods-specs-environment.h + Classes/Core/NSInvocation+OCMAdditions.h sourceTree <group> - 750FF767CA1E4E1CAFCC6D34 + 6E86F9F3A1564E63B7B7A411 fileRef - 7D00F35831C94EF9A35BE949 + 908385FAB56C46D0A389EBA5 isa PBXBuildFile settings COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 754AE8FC406D47B89E37D2A6 - - fileRef - 8E396125B92147E4A5795B30 - isa - PBXBuildFile - - 763851ADE7634BA8BBC34F3E - - fileRef - CE580522C4254B50996A6ACF - isa - PBXBuildFile - - 7654BA79B10446F7AC28FB01 + 6EC813028C9941CB859CC9E5 includeInIndex 1 @@ -6030,128 +5820,117 @@ PBXFileReference lastKnownFileType sourcecode.c.h - name - KWAsyncVerifier.h path - Classes/KWAsyncVerifier.h + Pods-environment.h sourceTree <group> - 7676ACA35D4546ADB316AB2C + 6F354EFDB9344A8DAD14E869 fileRef - 403FED6E37CC4FCA95F1C9B9 + 07A8C0F20FDE44DD9FB880D4 isa PBXBuildFile - 76D7FD0A9679464DB30242B8 + 6FACB030D86D48028E31A6CA buildActionMask 2147483647 files - 47E5203D5CD7437D8C21E3D6 - 40AE3943EC5C430989E18A9E - AE1C602CF9FA40F087967EA6 - EC932628EE02412A80844F23 + EF9A8F427E544ABDAA811273 isa - PBXSourcesBuildPhase + PBXFrameworksBuildPhase runOnlyForDeploymentPostprocessing 0 - 76F85B1C29E04301A5BF8F14 - - fileRef - 5FAE1563B53947C1B6EFF64D - isa - PBXBuildFile - - 77277A4B9AEA443CAF11A53F + 6FBC08E5F2524698991953EE - fileRef - 53ABEB7322CB47E8A0B0E73A + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWAsyncVerifier.m + path + Classes/Verifiers/KWAsyncVerifier.m + sourceTree + <group> - 77419DF5536445DA880C133C + 6FEEEFDF86BE4F2CB552D965 fileRef - F0D765ED7D064C589B51A629 + 5EFF7570AB80460182B3714A isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 774EC2DBF2E44BE1960E37A2 + 70657A11F88243A2A3594B84 - children - - C1F0907DC2724A54B83ECD36 - A4FC205D4F2B4689B6FA71FE - + includeInIndex + 1 isa - PBXGroup + PBXFileReference + lastKnownFileType + sourcecode.c.objc name - no-arc + NSProxy+KiwiVerifierAdditions.m + path + Classes/Core/NSProxy+KiwiVerifierAdditions.m sourceTree <group> - 7797FEDE1E314AC1899C5133 - - fileRef - FA8A8DB0C2CD41B9A8129B59 - isa - PBXBuildFile - - 782704BCEA674892841CB435 - - buildActionMask - 2147483647 - files - - 820CD20F64D148C5855A4826 - A9872EBEBBE941EAA63D0D0E - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 782ABE7106924070BB66F2FA + 70851DE42D9C4C9593C99484 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - RACKVOChannel.m + KWExample.h path - ReactiveCocoaFramework/ReactiveCocoa/RACKVOChannel.m + Classes/Core/KWExample.h sourceTree <group> - 78E53A190E66475F9051B412 + 70E5A1D5748146308E5E61B5 + + isa + PBXFileReference + lastKnownFileType + wrapper.framework + name + Security.framework + path + Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/Security.framework + sourceTree + DEVELOPER_DIR + + 7171822821BF420EA847F90D includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - RACCommand.m + UIControl+RACSignalSupportPrivate.h path - ReactiveCocoaFramework/ReactiveCocoa/RACCommand.m + ReactiveCocoaFramework/ReactiveCocoa/UIControl+RACSignalSupportPrivate.h sourceTree <group> - 791AF00BE6BB466D8C5B6342 + 71973AE77AC2407FB876EA15 includeInIndex 1 @@ -6160,13 +5939,13 @@ lastKnownFileType sourcecode.c.h name - NSString+RACSupport.h + RACPassthroughSubscriber.h path - ReactiveCocoaFramework/ReactiveCocoa/NSString+RACSupport.h + ReactiveCocoaFramework/ReactiveCocoa/RACPassthroughSubscriber.h sourceTree <group> - 7923AD5B65C742A4A35492D5 + 72F658883B7F4799A7557C6F includeInIndex 1 @@ -6175,227 +5954,40 @@ lastKnownFileType sourcecode.c.h name - KWValue.h + UITextView+RACSignalSupport.h path - Classes/KWValue.h + ReactiveCocoaFramework/ReactiveCocoa/UITextView+RACSignalSupport.h sourceTree <group> - 7938CF4C96CF453A97FF67FB + 7351CBBEA4DB4962890A72A6 - children - - 68515E4D6C3140BB85AB3C7C - 59A364D3BF8448C795798BCC - F8B581B3C16842C1BCD723EB - 44B18651C8BA4A84AF1F9231 - AF14715DFF9E412191C1FE8E - 34E5A24A6D20477D890F6BC6 - 7654BA79B10446F7AC28FB01 - 0B97546E56F6468492891F50 - 4992576032794EE1BD17268E - B6B83574A7AA454A96FC77B1 - 7136BFD4C2A946AFBFA72482 - 1CD756676E9241DD98F5B3D5 - A7E83C7743A343359D196097 - F0498385EB814E79B174C554 - C71CA4F8073E4B3FA8291299 - F9153CF185DE48B58AA0C7AC - 572B588A0DD649089CF4C327 - FD8E538DAE614D2FA8CC5A65 - 59C7020EE1434185B9029FC8 - 6320E44CA0034C659743C0F0 - 47674E64692242DA80252C38 - 34FC5AE89020407EABAF3874 - 072F4D5A159146A089344825 - 3415BFF012E446EEAD2FB457 - C944708B69214F7C8A9A34E6 - 6F0924EABB7F450B8C90AC50 - BCDF61EB1AE44EAAB66DE8A6 - 1E162C30F4F641AF89E36F33 - 1D301BD0BDEC47FB9FEC0305 - 58E7572CCDFE4E6686064537 - C48BFD32853148A6A50A8EF2 - 01A88CE06E43421E81687AA6 - 5F84070DCCAD4C04995A4A98 - 53F5158A9DE244498DD596D2 - 427A693C18C544E6A9937E08 - 02616A972EBA4ADE98ACA097 - 2D2862D4A2464AECB630CB7E - 0BC5D37D947E4D45A6D41886 - 4452D073C01046AAA29B7225 - 6D507DE718D4412EB05F3A63 - 8B17E5DF82F443A2A3FA0265 - D7EC89AB9CCE4EC59E00F682 - 4E3440AC0456491A971AEAA1 - A9DC09FF24FC4B2193AE7EB9 - 8E396125B92147E4A5795B30 - AFC0D4D407CD4AED96871E36 - F98668C4B8E24C36B5B93224 - 67914415DB2C404AAC41F1F5 - E4844758CBA24367B681A466 - 53771B9206654B4B8D27FE87 - A3D46253B6844726B7197239 - B537597C504E427B9DC86A48 - 0A6AD1F25F17462092E426E6 - 5B006951FFD44E42B883CA93 - 26AFAED530FE4A58A8D326B2 - BE8DDA98BFD24641B4B95C84 - 124EFA25229848358CE27175 - F10E406806C24894BB2E3BB1 - 3CDEF60012744580A52C479A - 2134AA12091647249B92798C - 0D66EF14253D49378094C744 - 9DDE5869C13D4FE68B64CC25 - 28319A8E00654DE9BC25931E - CF48551A1FF743989A2D2E46 - C61A973704EA4BC49CE42E0C - A8B9260B59324479AEC0BCCE - 9CB23E1A1FC441EBA16F7325 - 383D0AD29EEF48EBA03A1B6E - 12C64636FAC14868AE6DDA18 - 617EC9CE5F1E448D9707B41A - 408C107D614240478A48FC45 - C0762976D3384786BF00EE2A - 52F4BD4C69444DB7ADA94143 - 88D4665027FF470685D8FC26 - C3983C3A8F95453CBAAA9D8B - 17E3C735A53048C6A34198FE - 3F493BA72B094F079106227B - 6A12D21AF21A40EB969AC736 - 11CB839B9D3544B4A698BBDC - 90E0ABA829AD44249218F077 - EC145F306FC14C76979D0352 - D989120ADDC34DA18AC3C8D1 - 1E282BE0BD124CDA8E329714 - 38732CFA0E2548E1A75616FF - 7EC28D8C043C4CC7ADDDE4AF - 9270CBB8168D4B8AB915CBB7 - 9A3B190754E1411FBD33CFFF - 8717440518894A159A279A91 - 4E66F6BC25A54F3CAE9C4140 - 281FFDE57E78449AA68CF521 - AF9B2BFF860442A58C9EDBC8 - 53E2E69EC8DE4A029FA08396 - 011E23B0EC0447BAB81117BE - ED9C1A0EB76D4AA883AC26CA - 3F3ACA76990D4EA6B902DD9C - BE8FFCEC4DB04FF587B7A559 - 955EBB8F74B1407D9FAAC2FC - 3C12293BC71B4783AFFDDD47 - E4B9DD62B3994997BB9815EE - BD0A65A9D6C843FB8BC654CE - 2254FD044A9148C288495E76 - 8B6E23560B6F45D8B2BEE903 - 944A7C5DB1034EC681F67DA4 - AC4FE112AC644974ACDBB944 - 3C09F943F7AF4D76A10CA4B3 - ACB20F6105C544A3A99F4E5E - 5E8B01CCEDA44A2ABBA85B7B - 403FED6E37CC4FCA95F1C9B9 - 9D226A849CA440A996DC58EE - DDCB818C66D94E80935E19E2 - 162EACA552DA4EFDA0E61371 - 3061F1C7A2F9406CA98D21F9 - 0F80146C3286492786396D72 - 599721491B8D4DA8A733A7A8 - FFDD53DD78DE404084421DCA - 64ED7A9099474B44881384AB - 38EFE9F2FD77459A8F46D694 - 6957B89CE57D4A3C831D9A05 - 92700233ECA8495382C5CAFF - 1521FFD6F75A40DAB94ACE40 - 2D96B9FF873E4BC990447F8A - 826BD281ABB14A4B9902F1E9 - 187EC25AB69E4B98AD18572F - 0DE359521DB44B8BB58851F0 - 6F856A492D884897A8CF6AD1 - D3A2CB35F034400CB7329D1E - E0EAACA985414E8895420B07 - F0D765ED7D064C589B51A629 - EFD1CADF081E43698370A6EF - E6D66EACAA504DF3B9F8C747 - 9467E9DAA194434484DE371D - 02B72FB1BAE046F9A722326A - 6F4AB966460546989FC86282 - D5E8695940A24B3B84C83D2A - BBADDBBCF9C244FEAC12BD97 - 00EFCF0925324CB8BCAC1DD7 - FB1775ECF5FF4E55AA3342AD - C8C2A08C50104766BF652CA4 - F41F619BD821410BA2EDC64D - 993C884497BD4D88A59F95A0 - 0FE390E54A1D4F9B98A12B75 - 95B149BAEFFF4ED0B0F24B56 - 903B19BDD79F4A958A28E1E1 - 5B7613B22BDB45B3989085B9 - 8FE273511E764916A22F858C - E63CFE8DE5A042FEA0891E41 - A366688035054E879C7300D0 - 7923AD5B65C742A4A35492D5 - 1AF6555748A24DF8A242A662 - 492299289A5046A7B1B722B3 - FCFF00D13F5548E0A2923B9F - 44CEE6C9BD4649AE810916B5 - 909081FECD234CB4B538A63E - FA8A8DB0C2CD41B9A8129B59 - F51CAAB6FD074BA78B43DA98 - B0D42FA1B4A34603826E7B56 - 7BE69C7F20244315B3215BF9 - 37B559C7F9584E118EFCD905 - 0988090F73D54254A25F6DE1 - 0EDD851F5BC24A55B4FB4F5B - 871B340EBECF459A990AAFEC - B9DE1EEF40494B0D8AB9005A - BBFE64AE4E4D48339EE0E211 - 40E0717091884763B9782140 - 58281E00E33A4B5C8FDA44B0 - 194B85AAFB3D454BB50BC1CB - 5FD559D961704045A16F11DF - 3901E1175E2A4B8FA4AEC6F1 - B7A9226B4E094C7681E6AF96 - E1BA65D8FF3140BFA6E8F3EB - 4E5163BF49274B0FAC8F0A42 - 6C1E5330BB384D458541D7B3 - F644B3FD30394D7080BB6846 - AB4FA9729F764749ABEC0946 - 146E9DCCC1514DD283A458EC - 06A552ABA0EC48E6BE53E264 - 698FC9B1240A4993861F80B8 - D625095EC8EA4017A7E4D296 - 7EC9891F8E50455BACCCC8C3 - + includeInIndex + 1 isa - PBXGroup + PBXFileReference + lastKnownFileType + sourcecode.c.objc name - Kiwi + RACReturnSignal.m path - Kiwi + ReactiveCocoaFramework/ReactiveCocoa/RACReturnSignal.m sourceTree <group> - 79A8DF64515B40899AF5D6DD - - fileRef - 90E0ABA829AD44249218F077 - isa - PBXBuildFile - - 7AD738EBF41149E59D8BF6CB - - fileRef - 95FB0D58EE094DCAA6E5BB7B - isa - PBXBuildFile - - 7BDFC80EB86A4DF4B14D99F5 + 742B1A4A1AC04937A2640C1E fileRef - EE7AEBCD93054EDD82A61DDE + B5B48925C6CF438CA6216530 isa PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 7BE69C7F20244315B3215BF9 + 742EDE81BB8246DFADEB0EF1 includeInIndex 1 @@ -6404,27 +5996,32 @@ lastKnownFileType sourcecode.c.h name - NSInvocation+KiwiAdditions.h + RACTestScheduler.h path - Classes/NSInvocation+KiwiAdditions.h + ReactiveCocoaFramework/ReactiveCocoa/RACTestScheduler.h sourceTree <group> - 7C12CE55B5F34FBFAFC8CC90 + 74F1BF00B1E14863A4FB758C fileRef - 6A12D21AF21A40EB969AC736 + 3EF0290174634ADCA00BB160 isa PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 7C84CA17823A4736BF501805 + 74F673EA5CA441ACBB95834B fileRef - 12C64636FAC14868AE6DDA18 + 80AB88B3625A472AAC21165E isa PBXBuildFile - 7C89D36525C44336A06DE90E + 7517C13C70C846A3A4C687E0 includeInIndex 1 @@ -6433,64 +6030,69 @@ lastKnownFileType sourcecode.c.objc name - OHHTTPStubs.m + RACEagerSequence.m path - OHHTTPStubs/OHHTTPStubs.m + ReactiveCocoaFramework/ReactiveCocoa/RACEagerSequence.m sourceTree <group> - 7C9EEF4F5ADD45F69683816D + 753EF9BDBE2D488784BDC473 + fileRef + 0C0A99E528204471BD353A24 isa - PBXTargetDependency - target - 063659C829454C82A619E4F8 - targetProxy - 611CF489139649FD937F69F6 + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 7D00F35831C94EF9A35BE949 + 75AEFA62831B4DC7A92E7006 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - NSDictionary+RACSequenceAdditions.m + NSString+RACSupport.h path - ReactiveCocoaFramework/ReactiveCocoa/NSDictionary+RACSequenceAdditions.m + ReactiveCocoaFramework/ReactiveCocoa/NSString+RACSupport.h sourceTree <group> - 7D65B9FB661147F599209F8B + 760905BFB0BD43C49CA8530F + + fileRef + 4BE1491F73B242EAAFBFAA55 + isa + PBXBuildFile + + 764AFEF289FF4E1C9EC30290 - explicitFileType - archive.ar includeInIndex - 0 + 1 isa PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWDeviceInfo.m path - libPods-Reachability.a + Classes/Core/KWDeviceInfo.m sourceTree - BUILT_PRODUCTS_DIR - - 7D95568EA4194115BD8D2664 - - fileRef - 95B149BAEFFF4ED0B0F24B56 - isa - PBXBuildFile + <group> - 7E663A34776A4B5793292E74 + 775B7615ED0A468B956BDBD9 fileRef - ED9C1A0EB76D4AA883AC26CA + 2E5DAB690DC345999748CD56 isa PBXBuildFile - 7EC28D8C043C4CC7ADDDE4AF + 775F5B04E33F48E589B7B129 includeInIndex 1 @@ -6498,30 +6100,27 @@ PBXFileReference lastKnownFileType sourcecode.c.objc - name - KWHaveMatcher.m path - Classes/KWHaveMatcher.m + Reachability.m sourceTree <group> - 7EC9891F8E50455BACCCC8C3 + 77CD60CC95334DF88158CE24 - children - - 6F6E1C8ED6084B9C881F2C50 - 2A4E80FD601C41D1B2127F15 - 90EC1F5558F043DFB57B267B - 03D93B8DA9224BA0B3822BD8 - + includeInIndex + 1 isa - PBXGroup + PBXFileReference + lastKnownFileType + sourcecode.c.objc name - Support Files + KWCallSite.m + path + Classes/Core/KWCallSite.m sourceTree - SOURCE_ROOT + <group> - 7EF4653CE9CA4DAD9233D367 + 77EF22B0C303493BB94EAAB2 includeInIndex 1 @@ -6530,52 +6129,40 @@ lastKnownFileType sourcecode.c.objc name - RACDisposable.m + RACSequence.m path - ReactiveCocoaFramework/ReactiveCocoa/RACDisposable.m + ReactiveCocoaFramework/ReactiveCocoa/RACSequence.m sourceTree <group> - 8024D3DAD4AE415E897DC585 + 782D1CA7F52D4675B3435C0F - buildConfigurationList - 6DC0DC0061AD4F4A8E9E9DAD - buildPhases - - 13F2D2D950854BEF917D776C - 50A9715EBDC04E84BC2761B9 - - buildRules - - dependencies - - 3A416DFC18E14002A647FD6B - 65ED8914703C4F9DB0EEE364 - + includeInIndex + 1 isa - PBXNativeTarget + PBXFileReference + lastKnownFileType + sourcecode.c.h name - Pods-specs - productName - Pods-specs - productReference - 00FE4AA931F74A278E4AE20E - productType - com.apple.product-type.library.static + ReactiveCocoa.h + path + ReactiveCocoaFramework/ReactiveCocoa/ReactiveCocoa.h + sourceTree + <group> - 81CA47985A784972958FB7BE + 782EE19232114AF985074197 fileRef - C3983C3A8F95453CBAAA9D8B + 0231221FB2D2451DB84605B0 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 81FC7D2E5B3945F9B70EB03C + 78E9687B8FE442D49A830D0A includeInIndex 1 @@ -6584,20 +6171,13 @@ lastKnownFileType sourcecode.c.h name - RACUnit.h + KWBeBetweenMatcher.h path - ReactiveCocoaFramework/ReactiveCocoa/RACUnit.h + Classes/Matchers/KWBeBetweenMatcher.h sourceTree <group> - 820CD20F64D148C5855A4826 - - fileRef - 5A33FFF7CF464F59922BD03B - isa - PBXBuildFile - - 826BD281ABB14A4B9902F1E9 + 79D933CCD0034897930AB598 includeInIndex 1 @@ -6606,61 +6186,67 @@ lastKnownFileType sourcecode.c.objc name - KWRaiseMatcher.m + UIBarButtonItem+RACCommandSupport.m path - Classes/KWRaiseMatcher.m + ReactiveCocoaFramework/ReactiveCocoa/UIBarButtonItem+RACCommandSupport.m sourceTree <group> - 8287A6A3F7514C0A81F5B079 + 7A02756C69AD4047B0D693F3 fileRef - 58E7572CCDFE4E6686064537 + A5155DDD6B6641BB815A68B5 isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - 831677BB9AFD49F2BA6F3853 + 7A17300E4D674CC0B2A68C8C + + buildConfigurationList + 3C3E3F29E94443A280E69C69 + buildPhases + + 9B4A5F637F9049D39061F3A5 + DA98C7D92BEB412BBEDA7B0E + 94FA736471CA4097B15F5460 + + buildRules + + dependencies + + isa + PBXNativeTarget + name + Pods-specs-Kiwi + productName + Pods-specs-Kiwi + productReference + 6AB2D511606C49749280946E + productType + com.apple.product-type.library.static + + 7AFB8754ABC2473ABF4AC408 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RACEXTKeyPathCoding.h + KWExample.m path - ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACEXTKeyPathCoding.h + Classes/Core/KWExample.m sourceTree <group> - 833C2F6E5AD94C1283742A15 - - fileRef - A0B950953DB34E3DBEF78DD0 - isa - PBXBuildFile - - 8382C8089B354842A2A82DDC - - fileRef - 3953D48BF0DC4C9EAA633932 - isa - PBXBuildFile - - 83851F2B55F84F859C3405EE + 7B0D7C240C934B1697476414 fileRef - A3752E073EC845ABBC80F496 + 939A66B594494711AC59AF99 isa PBXBuildFile - 84D1954B5074420691A31E3A + 7BA7F275E33D4A7EB5BE4BFD includeInIndex 1 @@ -6669,49 +6255,60 @@ lastKnownFileType sourcecode.c.objc name - RACEagerSequence.m + KWRegisterMatchersNode.m path - ReactiveCocoaFramework/ReactiveCocoa/RACEagerSequence.m + Classes/Nodes/KWRegisterMatchersNode.m sourceTree <group> - 85C4A25A7325412788949ADD + 7C2BF410800D4277894EEDE4 - buildActionMask - 2147483647 - files - - 9B8FD4F2BD29451BAF83EBB4 - D4585A635F494531887AC37E - 894CFDA90D634321B8FBE742 - + includeInIndex + 1 isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + UISlider+RACSignalSupport.h + path + ReactiveCocoaFramework/ReactiveCocoa/UISlider+RACSignalSupport.h + sourceTree + <group> - 86509165B64741048E14438B + 7C8E67E919E147ECAF9B955A fileRef - 61C656E59FCD4AA18D3299D3 + 8A29DFF597DC4A6CA2751F1E isa PBXBuildFile - 869476F2CF494705BEDD8907 + 7CF29AB1C9DD42C28C77E661 fileRef - BF674AC2E31D45F299ED92EC + C3FDF3D294E44861BAF65C16 isa PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 8711D3E4ED944DCF8D824CDD + 7D70C0B790D74EEE959F8F7C - fileRef - 0907D7C22C3F4A0A857F3E38 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + Reachability.h + sourceTree + <group> - 8717440518894A159A279A91 + 7E41DB51032F433889882C47 includeInIndex 1 @@ -6720,65 +6317,82 @@ lastKnownFileType sourcecode.c.h name - KWInequalityMatcher.h + UIGestureRecognizer+RACSignalSupport.h path - Classes/KWInequalityMatcher.h + ReactiveCocoaFramework/ReactiveCocoa/UIGestureRecognizer+RACSignalSupport.h sourceTree <group> - 871B340EBECF459A990AAFEC + 7ECB4A91B62B403080B42618 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - NSMethodSignature+KiwiAdditions.h + NSFileHandle+RACSupport.m path - Classes/NSMethodSignature+KiwiAdditions.h + ReactiveCocoaFramework/ReactiveCocoa/NSFileHandle+RACSupport.m sourceTree <group> - 8766C2B7442040FDAAA372BB + 7EEBA25E56A64EA5A9C6855F + + fileRef + E86EDC8701714880873A623F + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 7EF35086A7AB41868771C713 + + fileRef + 2976892B65FC46F58D7D910A + isa + PBXBuildFile + + 7F58C63B37154AA09E33212B includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - NSDictionary+RACSequenceAdditions.h + NSObject+KiwiStubAdditions.m path - ReactiveCocoaFramework/ReactiveCocoa/NSDictionary+RACSequenceAdditions.h + Classes/Stubbing/NSObject+KiwiStubAdditions.m sourceTree <group> - 87B6D3CB7B5D4D699789ABA2 + 7F87E11829654238834014A2 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - RACSubject.m + text.xcconfig path - ReactiveCocoaFramework/ReactiveCocoa/RACSubject.m + Pods-Reachability-Private.xcconfig sourceTree <group> - 881CE3A4E7724D1E8DB96B23 + 7FFB8912F68C4C55B69DD2FC fileRef - DA4953C078B445A3A1767F2A + 94A446E926AF45C3A395FFD9 isa PBXBuildFile - 88D4665027FF470685D8FC26 + 801AF02213014B5D8E697C8E includeInIndex 1 @@ -6787,87 +6401,53 @@ lastKnownFileType sourcecode.c.h name - KWFormatter.h + OHHTTPStubsResponse+HTTPMessage.h path - Classes/KWFormatter.h + OHHTTPStubs/Sources/OHHTTPStubsResponse+HTTPMessage.h sourceTree <group> - 894CFDA90D634321B8FBE742 + 8096CEE89625406A987BAFA2 - fileRef - 5288BA5DA69B4CECAAD9724D + explicitFileType + archive.ar + includeInIndex + 0 isa - PBXBuildFile - - 8A03BA2A4F2444FABA902ABF - - baseConfigurationReference - B15B1B188BA84C97ABDC5C42 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Pods-SocketRocket-prefix.pch - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 5.0 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES - - isa - XCBuildConfiguration - name - Release + PBXFileReference + path + libPods-specs-OHHTTPStubs.a + sourceTree + BUILT_PRODUCTS_DIR - 8A2FAE7AEEB24BEFB68233F5 + 80AB88B3625A472AAC21165E includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - RACScopedDisposable.m + RACUnit.h path - ReactiveCocoaFramework/ReactiveCocoa/RACScopedDisposable.m + ReactiveCocoaFramework/ReactiveCocoa/RACUnit.h sourceTree <group> - 8B17E5DF82F443A2A3FA0265 + 80EC3D987E4B478883634DA4 + + fileRef + 5B10FF0A2E39458BA5CCF066 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 80EC8030A61D4D3E84DB3C5A includeInIndex 1 @@ -6876,13 +6456,13 @@ lastKnownFileType sourcecode.c.h name - KWCallSite.h + NSURLConnection+RACSupport.h path - Classes/KWCallSite.h + ReactiveCocoaFramework/ReactiveCocoa/NSURLConnection+RACSupport.h sourceTree <group> - 8B6E23560B6F45D8B2BEE903 + 81523A0DA42B453E9CFF5D5F includeInIndex 1 @@ -6891,86 +6471,273 @@ lastKnownFileType sourcecode.c.h name - KWMatchers.h + KWHaveMatcher.h path - Classes/KWMatchers.h + Classes/Matchers/KWHaveMatcher.h sourceTree <group> - 8CAB75BB4F524ADBB4B7AB7A + 8167F9FB3A3B4622B847CEB6 fileRef - 90EC1F5558F043DFB57B267B + 26980E5004664BFB9EC72017 isa PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 8CD93E75662D4FA9A2E90455 + 816BEBCA51AD4D2FA8F8254A - includeInIndex - 1 + children + + 07C46633DE374EBE9CFB823B + FB4CDE8EDA5D4296BBC9A542 + E6685215037849B0910C5876 + 21EBDA1695F44BE3ABA7DE15 + B63DEE63C0E4441B80B8A7D5 + 91C6F3955D674210A0669CD2 + A535A398C3024591A1917ACD + 6FBC08E5F2524698991953EE + 78E9687B8FE442D49A830D0A + F6F2C166D865440486566456 + 6AC217EF0A27440F9C444017 + A710B3900E1B45989DA077C7 + E0374AB84A8742499DE195F6 + 17AE2CDEB5D14F01B28F6CD1 + FB10ACB930CF4319B07FDE17 + E53FA948F2044A4FA2A89C5F + 23FA7C3F289845AC84B59A01 + 084C4B4425614D649A7A448A + 2F0E6C9C1BC4436492B6497B + CF73D0F1A8AB473B934CBBF3 + 5A0CF3C41E364004B08DBD37 + 0BA5C0513D034723A8DE6BCB + 9413B4EEECD94BEABED8F225 + 29809852FD4D460FB0003AE9 + C80D0DB4017F4CBDA0AB52E1 + CF79F5BF931545EEAF40E94E + 38E2F1AB87714FEC9BC6B11B + F5547ED532444DF189741848 + 9B94DBA390254216B6E8C468 + 4EDC2E1BD8804A66BF6942A5 + 0AF66032E901412499D5F669 + E1B0DD643D5B44E99DFF8B8C + 9F3BF90077ED4DD1825C66B0 + 45FD57861A1D4FFFAFA7F648 + 49EDB7634E9040C989D900A7 + C3FDF3D294E44861BAF65C16 + 52C4F189091E43EEA9DE1F72 + 77CD60CC95334DF88158CE24 + 505E201B15B3426787D333E1 + 5EFF7570AB80460182B3714A + 165BC2F4DAEE491AB3A77F83 + 12DD7C8DAAEA4A07A6F4510F + 6A5FD350B4224D3EB9A89962 + C7052C3F6BBC4350BCBC5FFF + 25CE9BB4E5B840B1901F051F + 4AAB9CF4A49F4B9EB29B88F3 + A2368088F9A64C368F2CC7F6 + 53C2E057EBA14ED7B1C7B18B + 38176EE406194B4E928DDAC8 + 38CC0CEAF0FE4B2786FFA619 + 363E8B74669A495BA73A6FB9 + 52919260BB304A3BAFEBA71B + 764AFEF289FF4E1C9EC30290 + A56725419FD64D229D7BF1EF + E86EDC8701714880873A623F + 70851DE42D9C4C9593C99484 + 7AFB8754ABC2473ABF4AC408 + C618D768A4654232BD2EC2B4 + C67D555AA53848B9B581BD4D + 4289D64B356A4CF683A33737 + 03F0A3EA98BA4F0BB6C14D50 + 8A0FB4395F314B35B1721789 + 013387781B774D4A8F8A3830 + 23107D078833429B9B39622C + DFE20A0FB24F4FA49398D470 + 1196D82E7B67427AAAF2ACAE + 0F731461CA5D4CBF834C5BB0 + 2468208932F441689ED91E33 + A1A046911046476BB2F635FE + 6A97D5CFA7A844B5ACA388B5 + E43A1A3CDF0E4FF3A2CB6AB6 + D5FB67F6BC1B4D2084E07E1D + 1B4721906E994BAE80545326 + 1B9F5738B8E841A7B3109410 + 1480529E3E834DD3AD07EB7E + 607B91A49C0B48C6AE0E2D2D + 44CDF3618F3C49D4A9FBD7CA + AB723769ADCF4B089F36EEB7 + 1BF788A36B514856915126FC + 81523A0DA42B453E9CFF5D5F + 84E5FE2698834E8FA3752E89 + A3D9DC691BA74169AFE26DFE + 21E7417DB8F143F7A1006EE5 + 1E031442C0CF49F7A0317B08 + 4DADE293366B4247A59A44F9 + 59818CB985A64CB5A5CAE8ED + 0231221FB2D2451DB84605B0 + 5C79F2D07B8849018C2F72D2 + 53F078F2C50E444682C31E84 + 5460193ADC744573AC670EFC + 001110B074434775B84ED439 + 3A6D2B7073604E8CB7C613FE + 57A55F8AA7334085B6DAC3DA + C2A11F03D15E41839028AF2B + FCED67C1F64340509884414E + D9D205F28BE24561B04614C4 + 617E3068F2BA46B98A64CFAC + 94A446E926AF45C3A395FFD9 + 1CBD6837552743EAB762FA89 + 85DFB2EE60734DD68FAC92E0 + 15C7D5AD0F934960A85BF5C3 + 63DAD54396A34701AF8BB6DB + D940BE83D1CF4388BDB4B0B3 + A38B7D1010274172B0062C1C + 8B16B51651334BFD9EE12EDE + 6D710363D73F418E8FC175E0 + 30A89854BDE04B849C915658 + DB7764BA57594BAEB5A8AFA8 + 61F7055EA57F45E8A114A2D7 + 2DFDA3FBCFCB4A3089357C7A + 89764E4D684246AA884CB820 + 5F634A62DCCC4DEC93CFE6F4 + 9E6E58262EA34A27A4BCFE8A + EAC662D4BF854D2F954B65CB + 45183855128142DEA48627EA + B39C8C1C628242DD90796CCA + 995144A8C6B8455883581300 + 5175D4FCB5124320B8C29426 + 670875371A8241D7A19B76AF + 7BA7F275E33D4A7EB5BE4BFD + 22C3B4D28E024CDCA44EF7E9 + 49F7DE07BB3B4DA5AFCDF02B + E6E8BDB4AA7C4F88921BD822 + ABCF6FE3076B48F685D25B8E + 3121C12B2EFD4872844EAAEA + 6845B673E8E64A34BF0E39E2 + 3B7F625018894E19A62DF6ED + 9EC7492FE9004747A9D407CD + FE740EBC0CA442FBA9454205 + 10658E9212EC49EE9541292E + 4FE38A490BDF4DE5852D6501 + 2BE54AB79DF647CF8F2369C4 + DEFD2EC3A4784EE98B7D5C36 + 32205A7EFB6D4338B651931A + 3EF0290174634ADCA00BB160 + 2976892B65FC46F58D7D910A + F3F43C7F5F194793A7D509D9 + 9B237D44F19A4043A2D48413 + FFE487E02A694212837E112A + AE481CC5C97D41F38D2C1C40 + 47A9AFC873764952B3F144D1 + 6058B66709014A13A1BBBDED + 20A1D77AE9BF4322903D65B6 + B2991BB941724AAFB030DCC6 + E3E071BE40D44EEBB95ECD4F + A46109F5B40A4EB69B80EA44 + 6E6D9E89568A4500AA50B380 + 972C108F34174B9D9D911332 + 42505EEC636D4FFFA862FF4B + FDEF44EA44D543DD9E9B5050 + 4BE1491F73B242EAAFBFAA55 + D52CE39566D94A66B5471987 + 843D6BB84306443EB9DFB285 + 65DC9B41182D4A509A5D67F7 + B6B7AEA943D74EC8A86E1A4A + C8FB0466CAA346009167A0ED + D7B403F602CB407E86591FDE + 7F58C63B37154AA09E33212B + 1767930D256148A8B1775896 + 908385FAB56C46D0A389EBA5 + 1CE1022CABFC45EF8DA11D0C + 70657A11F88243A2A3594B84 + 308EBCB54E6F4711B00EB2CD + 38BD222F9B9547418293F9AA + isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc + PBXGroup name - RACErrorSignal.m - path - ReactiveCocoaFramework/ReactiveCocoa/RACErrorSignal.m + ARC sourceTree <group> - 8D8B572537864D34AF142F4A + 817ADFDDDC8A4693A281B001 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - UIGestureRecognizer+RACSignalSupport.m + NSDictionary+RACSequenceAdditions.h path - ReactiveCocoaFramework/ReactiveCocoa/UIGestureRecognizer+RACSignalSupport.m + ReactiveCocoaFramework/ReactiveCocoa/NSDictionary+RACSequenceAdditions.h sourceTree <group> - 8DB056FB13464533893CA986 + 81F1ACD71C4B408A94634DDF fileRef - 5F84070DCCAD4C04995A4A98 + C72B1B3324B2445290D92990 isa PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 8DB3E706B957420C9D608C32 + 8234BFB6775B47D192155B21 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - UIActionSheet+RACSignalSupport.h + UISlider+RACSignalSupport.m path - ReactiveCocoaFramework/ReactiveCocoa/UIActionSheet+RACSignalSupport.h + ReactiveCocoaFramework/ReactiveCocoa/UISlider+RACSignalSupport.m sourceTree <group> - 8E0EA4010B7C4465A227D014 + 825E6B4BC785485BAE460FD1 - fileRef - 146E9DCCC1514DD283A458EC + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + NSObject+RACPropertySubscribing.m + path + ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACPropertySubscribing.m + sourceTree + <group> - 8E3677E5E5B54620893C07EC + 827BB873FD4A49E9A586391B - fileRef - DDCB818C66D94E80935E19E2 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + NSSet+RACSequenceAdditions.h + path + ReactiveCocoaFramework/ReactiveCocoa/NSSet+RACSequenceAdditions.h + sourceTree + <group> - 8E396125B92147E4A5795B30 + 8324546C8B5549F2AEC52A7D includeInIndex 1 @@ -6979,20 +6746,25 @@ lastKnownFileType sourcecode.c.h name - KWChangeMatcher.h + UIDatePicker+RACSignalSupport.h path - Classes/KWChangeMatcher.h + ReactiveCocoaFramework/ReactiveCocoa/UIDatePicker+RACSignalSupport.h sourceTree <group> - 8E7F7F35B1554583A0B0FEC8 + 832E30BC52F844C580299D6F fileRef - 6957B89CE57D4A3C831D9A05 + 30A89854BDE04B849C915658 isa PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 8EB43961DFF846BFAED288C1 + 843D6BB84306443EB9DFB285 includeInIndex 1 @@ -7001,65 +6773,136 @@ lastKnownFileType sourcecode.c.h name - RACCommand.h + NSObject+KiwiMockAdditions.h path - ReactiveCocoaFramework/ReactiveCocoa/RACCommand.h + Classes/Mocking/NSObject+KiwiMockAdditions.h sourceTree <group> - 8F029FBAF7AD47028C590920 + 847687C1885545589F4F7474 + + fileRef + 16EFACA5F7FA4B478D979016 + isa + PBXBuildFile + + 84E5FE2698834E8FA3752E89 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RACKVOChannel.h + KWHaveMatcher.m path - ReactiveCocoaFramework/ReactiveCocoa/RACKVOChannel.h + Classes/Matchers/KWHaveMatcher.m sourceTree <group> - 8FE273511E764916A22F858C + 855153BF458B49F5A337A0B8 + + fileRef + F6F2C166D865440486566456 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 85B672297B174380A590C302 + + fileRef + 1E4953BD4CE64B818F6690A3 + isa + PBXBuildFile + + 85DFB2EE60734DD68FAC92E0 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWTestCase.m + KWMessageTracker.h path - Classes/KWTestCase.m + Classes/Core/KWMessageTracker.h sourceTree <group> - 900257F04C1645AE9BA25614 + 85EE0992B6864452A081CF12 + + fileRef + FDCCF2F66E12437C9C08B3E7 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 867BBCC9DDFA45E4A821CD35 fileRef - 5831C3AECDA540AB8D4F1C0E + FFE487E02A694212837E112A isa PBXBuildFile - 9007BF0487A94BC1B21E1E8C + 86981932B47E4AD0AE318933 - includeInIndex - 1 + children + + 33D5D82C87E24A8788CB6476 + B83F6A514F0D4F2893E350E4 + 96F942D43EB7434F97306CCE + D5804D9293BA4C5FA83AB3D7 + 450C846012C943D9B9E51F38 + isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc + PBXGroup name - NSObject+RACDescription.m - path - ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACDescription.m + Pods sourceTree <group> - 903B19BDD79F4A958A28E1E1 + 86A29040DAA345B78AF60551 + + fileRef + D1EE5FE4D66E4C6BAE0B8370 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 86C36F6652704BD6AD9EDE25 + + fileRef + 40D261812DE34679AA920DA7 + isa + PBXBuildFile + + 86D4966088424658BE9580E9 + + fileRef + 7BA7F275E33D4A7EB5BE4BFD + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 86E8FC92294145DD9425354B includeInIndex 1 @@ -7068,58 +6911,56 @@ lastKnownFileType sourcecode.c.objc name - KWSymbolicator.m + RACSignal+Operations.m path - Classes/KWSymbolicator.m + ReactiveCocoaFramework/ReactiveCocoa/RACSignal+Operations.m sourceTree <group> - 908ABEFAF1504908BBAA135D + 87383DFA27664E4D9B5A3ECD includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h - name - UITextField+RACSignalSupport.h + sourcecode.c.objc path - ReactiveCocoaFramework/ReactiveCocoa/UITextField+RACSignalSupport.h + Pods-dummy.m sourceTree <group> - 909081FECD234CB4B538A63E + 88D96CE6C389411DBFCE9E12 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - Kiwi.h + NSNotificationCenter+RACSupport.m path - Classes/Kiwi.h + ReactiveCocoaFramework/ReactiveCocoa/NSNotificationCenter+RACSupport.m sourceTree <group> - 90D8685E644542C1811D4676 + 89764E4D684246AA884CB820 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - ReactiveCocoa.h + KWPendingNode.m path - ReactiveCocoaFramework/ReactiveCocoa/ReactiveCocoa.h + Classes/Nodes/KWPendingNode.m sourceTree <group> - 90E0ABA829AD44249218F077 + 898C98415C554D62A2228E38 includeInIndex 1 @@ -7128,25 +6969,27 @@ lastKnownFileType sourcecode.c.h name - KWGenericMatcher.h + RACCommand.h path - Classes/KWGenericMatcher.h + ReactiveCocoaFramework/ReactiveCocoa/RACCommand.h sourceTree <group> - 90E935556B1C4FA5B2B3113C + 89EA8FF6E6A041849A5BFE0E fileRef - E1BA65D8FF3140BFA6E8F3EB + 827BB873FD4A49E9A586391B + isa + PBXBuildFile + + 8A022697C14B40AEB11590C2 + + fileRef + B503B78C35084A12827138E4 isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - 90EC1F5558F043DFB57B267B + 8A0FB4395F314B35B1721789 includeInIndex 1 @@ -7154,305 +6997,215 @@ PBXFileReference lastKnownFileType sourcecode.c.objc + name + KWExampleSuite.m path - Pods-specs-Kiwi-dummy.m + Classes/Core/KWExampleSuite.m sourceTree <group> - 90F0880D6A8D4882B20D487F + 8A29DFF597DC4A6CA2751F1E includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - NSString+RACKeyPathUtilities.m + UIControl+RACSignalSupport.h path - ReactiveCocoaFramework/ReactiveCocoa/NSString+RACKeyPathUtilities.m + ReactiveCocoaFramework/ReactiveCocoa/UIControl+RACSignalSupport.h sourceTree <group> - 91AC718C8A544A6AADA9AF60 - - fileRef - 729964D7AE3A4744B9133890 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - - 91B27A47911E43088E99DA12 - - fileRef - 02B72FB1BAE046F9A722326A - isa - PBXBuildFile - - 92700233ECA8495382C5CAFF + 8A56347717AD4EE68AA2D4E7 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWProbePoller.h + RACStream.m path - Classes/KWProbePoller.h + ReactiveCocoaFramework/ReactiveCocoa/RACStream.m sourceTree <group> - 9270CBB8168D4B8AB915CBB7 + 8B1121BCEBF64618878879F9 + + containerPortal + EFBB6CF77B5E4364844354C4 + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 2820B6B2A6424E40852AC3CA + remoteInfo + Pods-SocketRocket + + 8B16B51651334BFD9EE12EDE includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWHaveValueMatcher.h + KWNilMatcher.m path - Classes/KWHaveValueMatcher.h + Classes/Matchers/KWNilMatcher.m sourceTree <group> - 92AD94B23697460BB219BBE8 - - fileRef - 3BBBEF9DDF2948B6BB1DAF1D - isa - PBXBuildFile - - 92BA54DC718C4D67BDCE212D - - fileRef - 8766C2B7442040FDAAA372BB - isa - PBXBuildFile - - 930D71AB929347F887A00BDC + 8B7888C7B1FA415C85F81C5D fileRef - 06136C9D62C147BFAFF3A6E7 + 4289D64B356A4CF683A33737 isa PBXBuildFile - 931A5F5361714315A2043146 + 8B7D157368574B0680C410D6 fileRef - 1E282BE0BD124CDA8E329714 + 31DC8BEEF4994929A8BC8E1B isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - 936A312AAF8340EFB01B8090 + 8BE6140DD8444485BA6359E9 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc + name + NSDictionary+RACSequenceAdditions.m path - Pods-ReactiveCocoa-prefix.pch + ReactiveCocoaFramework/ReactiveCocoa/NSDictionary+RACSequenceAdditions.m sourceTree <group> - 938F977EA92046698CA65115 + 8C008D29EEA34A128D3A646B includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RACSubscriber.h + RACSubject.m path - ReactiveCocoaFramework/ReactiveCocoa/RACSubscriber.h + ReactiveCocoaFramework/ReactiveCocoa/RACSubject.m sourceTree <group> - 942CAEB072AB43CEA819CE6D - - buildConfigurations - - DDC04031A201412DB7A7974B - A1B6097FFF6F467C88D23B66 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 94342C5935474561A3C57D3B - - fileRef - BE8DDA98BFD24641B4B95C84 - isa - PBXBuildFile - - 944A7C5DB1034EC681F67DA4 + 8C78ABEA1400469A8103385B includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWMatchers.m + NSString+RACSequenceAdditions.h path - Classes/KWMatchers.m + ReactiveCocoaFramework/ReactiveCocoa/NSString+RACSequenceAdditions.h sourceTree <group> - 946628973A29435FB44F6AAB + 8CEAEE5A048148D58E2C3B5F fileRef - 53771B9206654B4B8D27FE87 + A710B3900E1B45989DA077C7 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 9467E9DAA194434484DE371D + 8DD0458DB3C94CFA9943D290 - includeInIndex - 1 + fileRef + 23FA7C3F289845AC84B59A01 isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - KWRespondToSelectorMatcher.m - path - Classes/KWRespondToSelectorMatcher.m - sourceTree - <group> + PBXBuildFile - 954DC9D05DE743A6B8671E3C + 8F135A7D903546928291CC4C includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RACTargetQueueScheduler.h + UIActionSheet+RACSignalSupport.m path - ReactiveCocoaFramework/ReactiveCocoa/RACTargetQueueScheduler.h + ReactiveCocoaFramework/ReactiveCocoa/UIActionSheet+RACSignalSupport.m sourceTree <group> - 955EBB8F74B1407D9FAAC2FC + 8F2DBD471CD04FA295E40937 - includeInIndex - 1 + fileRef + 1CE1022CABFC45EF8DA11D0C isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - KWMatchVerifier.m - path - Classes/KWMatchVerifier.m - sourceTree - <group> + PBXBuildFile - 95623FB4CA774EA0BD57E3F1 + 8FEA51186DE8489A9D03538F - includeInIndex - 1 + children + + C6E0DD264A3547CF9737B6B3 + 54AA229EC0174CF7B1C0E463 + FDEB858833114BF59D388AB4 + E10C6851AA0F4002A89EB05A + 0AE6530FB0B249739CA58D7F + B4B3D28FF3F448DBB11AE6F6 + isa - PBXFileReference - lastKnownFileType - sourcecode.c.h + PBXGroup name - UIButton+RACCommandSupport.h - path - ReactiveCocoaFramework/ReactiveCocoa/UIButton+RACCommandSupport.h + Pods-specs sourceTree <group> - 95B149BAEFFF4ED0B0F24B56 + 908385FAB56C46D0A389EBA5 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWSymbolicator.h + NSObject+KiwiVerifierAdditions.m path - Classes/KWSymbolicator.h + Classes/Core/NSObject+KiwiVerifierAdditions.m sourceTree <group> - 95C5BCDFA2E6414AB7453F81 + 90AD0B7216834F119753C12D fileRef - 2BAC182050CE474E8B4590CF + 4C54D194C53543D8BE1112AA isa PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - - 95FB0D58EE094DCAA6E5BB7B - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - RACStream.h - path - ReactiveCocoaFramework/ReactiveCocoa/RACStream.h - sourceTree - <group> - - 960CFB3A34494C4AA012FBA9 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - RACArraySequence.h - path - ReactiveCocoaFramework/ReactiveCocoa/RACArraySequence.h - sourceTree - <group> - 966169B31B484044BFC62A46 + 90B8739644574CF0AB00197E fileRef - 02290D0240FD4719BD909556 + 31C79F6E270C4E75B90D6366 isa PBXBuildFile settings @@ -7461,52 +7214,71 @@ -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 96A6E6D8132140368F900950 + 90ED73B499DE43279E2F836F fileRef - A9DC09FF24FC4B2193AE7EB9 + 49F7DE07BB3B4DA5AFCDF02B isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 96BDA716D2A244FDB6F49170 + 9101A6EBD2D44F088893E383 fileRef - D0804DA9D1C5422696461AAD + DB7764BA57594BAEB5A8AFA8 isa PBXBuildFile - 9780E584FCF24B219AE9BB45 + 914CFE406A1A49C1A13886DE fileRef - B9DE1EEF40494B0D8AB9005A + 4AAB9CF4A49F4B9EB29B88F3 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 97ADA9EFC603451FB00F0C11 + 917201561142444EBE1D38B3 fileRef - 5E8B01CCEDA44A2ABBA85B7B + ABF248B913A64842945283E9 isa PBXBuildFile - 97DA9C7A0C4C411BAE60F350 + 919827833CEB49379E7F1B4C fileRef - 88D4665027FF470685D8FC26 + 2D5F9D58B5C04D0384A613D4 isa PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 91C22DC7028740F7AA3BF5A2 + + children + + 56400FDC5DB443A2885B3444 + FB1F773527E9460CAF4BD5B1 + + isa + PBXGroup + name + SenTestingKit + sourceTree + <group> - 981CC30D0F674C24826FFC3B + 91C6F3955D674210A0669CD2 includeInIndex 1 @@ -7515,310 +7287,427 @@ lastKnownFileType sourcecode.c.objc name - UIButton+RACCommandSupport.m + KWAny.m path - ReactiveCocoaFramework/ReactiveCocoa/UIButton+RACCommandSupport.m + Classes/Core/KWAny.m sourceTree <group> - 987E52EA6EAA4022B221B5D0 + 91D6A91614E84DC1B2DE8628 + + buildConfigurationList + 3E2C3A50DA55437BACE31F65 + buildPhases + + CBE476986BED46B2AE234228 + CC5234A14FA5450CBA84E068 + + buildRules + + dependencies + + FEE159CDFAC845BCB30D4255 + 3D8619485F2E45F7A70AFF61 + + isa + PBXNativeTarget + name + Pods-specs + productName + Pods-specs + productReference + 1B1E2BE0D9C142F8A0EDC3C9 + productType + com.apple.product-type.library.static + + 920241BDA6E640BD80591303 + + fileRef + 3DDB8D2BD114419487E26EBD + isa + PBXBuildFile + + 9243727EA53046C088EA7D29 + + fileRef + 607CB1E9991D4707B16708B9 + isa + PBXBuildFile + + 929EAC1E07E74B26A0708C35 + + fileRef + FDEF44EA44D543DD9E9B5050 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 92DAA3788893482284B3B4A8 fileRef - 9DDE5869C13D4FE68B64CC25 + 825E6B4BC785485BAE460FD1 isa PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - 993C884497BD4D88A59F95A0 + 939A66B594494711AC59AF99 + explicitFileType + archive.ar includeInIndex - 1 + 0 isa PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWStub.h path - Classes/KWStub.h + libPods-SocketRocket.a sourceTree - <group> + BUILT_PRODUCTS_DIR - 9956D4781A514DAC9087F6A3 + 9413B4EEECD94BEABED8F225 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - RACMulticastConnection.m + KWBeWithinMatcher.h path - ReactiveCocoaFramework/ReactiveCocoa/RACMulticastConnection.m + Classes/Matchers/KWBeWithinMatcher.h sourceTree <group> - 99BAA8247D9646309F778D21 + 9477E77017CD4E81862DF9C4 fileRef - F10E406806C24894BB2E3BB1 + 70851DE42D9C4C9593C99484 isa PBXBuildFile - 9A3B190754E1411FBD33CFFF + 94A446E926AF45C3A395FFD9 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWHaveValueMatcher.m + KWMatching.h path - Classes/KWHaveValueMatcher.m + Classes/Core/KWMatching.h sourceTree <group> - 9A6810B3BD934EAFB751AA91 + 94D2937F2F0843879A5AD800 - buildActionMask + fileRef + 5EFCC5EDB86B44A480BEFA00 + isa + PBXBuildFile + + 94FA736471CA4097B15F5460 + + buildActionMask 2147483647 files - C4D9B00D69AE4D1FA0358AA1 - B5606C35E4C346C9BE2A7DE7 - 354DC08775164A0891005588 - 2942129614DF4666B230114C - 5880585F20314BAD81399FD4 - 0CF8701D50C54959BEE4367B - 5F5A715093444895AF74EB71 - 05271C08C02944D996DA8CD3 - 19727C1C40F943B4BEFBB132 - EDACDFB641CC4864BFA0E339 - E4F3DE4E95CF48A1A09BCC0F - 0128DC02ACC44D11B943F116 - 67ED98C8A5244A4EB4604FCC - B3ED38A7262247DAA20B28CF - CF033EB4DA914E0E81452BA8 - 13A38F574BB84912BE400C64 - 8DB056FB13464533893CA986 - 2281F279AAEE4A6C8AB47D32 - F1EC465D2D3B45A5921C220F - A41B3A021DF649B38FD7CD24 - 62FA9CCA7C4B42BA924FA4AB - 66D8821F15DC4520818FF56B - 754AE8FC406D47B89E37D2A6 - 0D8ED76004544CAA96154FCD - B1F7BF7B9B09468298F299F6 - C4AE918F504C459C85504032 - 00CDD16060B34B2AA072743A - 193015FEE23D4287A657FF8B - 94342C5935474561A3C57D3B - 99BAA8247D9646309F778D21 - 2A47736C24BE4F8E8F1B20C6 - 987E52EA6EAA4022B221B5D0 - 559BCBD1DB56401FBC55A38A - 1C2131814E3B49828C4D2392 - 1A70152110024A5590C0499D - C770BDBDE81140FD9D520C62 - 7C84CA17823A4736BF501805 - 083791F0A7264D4BBC61B52D - 1B198C97EA3145B8A104BC89 - 97DA9C7A0C4C411BAE60F350 - A525DED9BE284D13969BBD4E - 7C12CE55B5F34FBFAFC8CC90 - 79A8DF64515B40899AF5D6DD - 6C234832BFBE43F4960ED0FE - C939BFFD32D34B6EB5A5C575 - 1E16689B410E4F709845351C - 6B175ED3832F4DCD996E0D4E - 71DAB1957B6D4A4EBDF21323 - D8BBA1F2E43142068B8CBE03 - 7E663A34776A4B5793292E74 - 1A240A713E5E4D1EB0E25E16 - 2FB0F052111848489578A9CA - 9B4385C25EA046C19C150E5A - 180A4600FC7E44CCB1B33763 - 0E348C8D94804EBF9D4ED132 - 4F2C8771A68749D1AA5D2CD5 - 97ADA9EFC603451FB00F0C11 - 7676ACA35D4546ADB316AB2C - 8E3677E5E5B54620893C07EC - 2BDC4B9365114C1CB482BBC3 - F5CFD781BEF444B6949FC7C5 - F6E44FF9A81B452C975480CF - 8E7F7F35B1554583A0B0FEC8 - 6BF3DDC1D3A04E179120E58D - EC2DD60EDB874FB28EC57DE4 - 146E9B1E965E48FD9D306DC7 - A60F73858D44496992D3F0E1 - AC6165FFE10D4632A2AB5877 - A6397FB870A340EAB4A41ABC - B5EF75B97B9849C2A2038A52 - 91B27A47911E43088E99DA12 - 6225B56BD454455692227279 - 2CFE4A6340084832BE69FF43 - D7F51626EC8E4965A37F858F - 625EF39BAD87424AA0259E42 - 7D95568EA4194115BD8D2664 - B4308D6337934120ADB0BC6B - F30DFB11BD19430ABFCF13AD - 4BDF936788434A0892821DED - 36A28D6DBF4B4D0E8D4AA412 - DF3AEBAB6816496490375F20 - 337A474C4A5B4B4F97F82AE5 - 7797FEDE1E314AC1899C5133 - 7319B89C4D7746629F7D3852 - 4B7F9EFB25E148C980FB134D - 097EE9E3EA3A4CD8AF8D24A1 - 2541CF606A9C407BA6DAEC51 - A2FE380979D34DB4865224F8 - A4DA403C3A5E4E76824C5F0B - 61C1B7F4E62645D28501B3D7 - 1C14D87E220A4101A616F8F7 - B13D304F94624888B958244E - FE28E3D08FC6468AB5DAF810 - A44DF493B30D4A0E9E756E99 - 8E0EA4010B7C4465A227D014 - 73C5DCE15DF8475A8304D4E2 + E1213643460642958D649FCE + C039367F642440AC85DFA655 + 4BCDCD22BB28414E88E04794 + 26A7941399134F12B72BC377 + 48F56E5C8A6A4FB38038A85B + 1E09996162E244058B4D3D62 + 0F2996306F364EDD8EF9E93B + F886DE7E8676427F87D42043 + 8DD0458DB3C94CFA9943D290 + 06A91B5C38E64907B50FEDB0 + 3C397594913246EFB9B82270 + 4629D1B6613048D5BBD5D5E9 + 48DC5DDF5C464AB6ADF4E764 + 9D6AE74FAA1B4DB9BA067A2C + E0027BB097AD4C6EA45A3611 + 94FB7053D8E34310A40850BE + 526923A419144AEF930312AB + 6323E4164CB2407191E76A9C + 3B95A93DD4C74BE0B1C7E770 + 044D8A6FDF734B5BADAA66F1 + 30F4A1DBA7FB429F9C6DFF8C + 4FF3B55A62E24AAF8CE79A80 + 2A4BA59C2A5A4C228C4B9921 + 1E517FE453AB48E8B10D55C4 + A99ED12B5CC242AEA41D9A62 + D0D7EAF4E1BB441AB64A686C + 073CD62202854060BC700F3B + C0000FA4AC614F85A6AAEC73 + 9477E77017CD4E81862DF9C4 + 24831DDF4BD24A7DB06C149F + F88005335C06425D9D887177 + 8B7888C7B1FA415C85F81C5D + 55DB72C014924CFDBBACCF47 + 997E11BEE2B64104A99C07D3 + B1912D8D293D42CFA7202233 + FF11E920904B443C8846264E + BB9CF27990F249D2B9EAF744 + 496CE7BA14E14DB19356B524 + 9A59DE5568F14D2093755C78 + E7CE9A40476E4DC88D10A08D + 1A9662EFC7CB4AC997E96AD3 + A6DDDACAF30640F3A4C4FCBE + 1EBEBBE90AF545D5A806A69D + C79A32E9E6E64222BA12FFD8 + 1AE7D8C1F1C24412A995A44E + 16025CDB86A743E0BFF80B49 + 1D67518734F548749C24FC18 + 164128EE9F234876B3B78C37 + C0F0AE0B8E374069808D86F2 + CE86F5A65304442ABA904D29 + 333B94E03902440E83486673 + BF6782ECD2B74669A3DAF779 + 7FFB8912F68C4C55B69DD2FC + EFD97812582444EBACF12D38 + 42D5700E210445D7B0A9FB02 + 5F2E20CF5D294912B2437B48 + 225387514E7C4DA58B9CF959 + D3A776CF462540D7A43A9271 + FEE820893D6B4E35AE687AC4 + 9101A6EBD2D44F088893E383 + EDC1B6A7D15C456293C5E20A + 5D4889F4156D417396193073 + FBED7EFDFEA44D2D8ED0A8CA + F829D6F0AA3A42258E849D38 + 4B28C413090B46CA9A83B802 + CEE530B8D6304A47BBCE9CA9 + DD79B55ADFC6408D845C2B4D + 2F8C8774421348369AF55001 + 573121D7EC914417A495863E + 4582A273CC384CDC8EBFBEA1 + 0D7274B3B43D4B298A4CEF8F + 3FAEF0E513B34E67BD3CFC17 + 5F8967E5B03049BBA2A0A412 + 5AFA2F7CE70544D5839018EF + 9760F8F4CE9E418EBC8D3DB4 + 18BA1B72619641C095E91267 + 7EF35086A7AB41868771C713 + D767F3D5A55F44E48F72FD5E + 867BBCC9DDFA45E4A821CD35 + B0C15D7E92EF44F7925704A8 + 3EA14A54C58D48CF9F7C86DF + AF845FC61A6F41CA992D3B53 + E7447CE4280F4724B2C81E43 + 28F6EF33E792451A9981ECBA + CF561A215F16423CB137145D + 3C6583EEBC334E95AE3C360C + 760905BFB0BD43C49CA8530F + 3F5EB2FD744444A0A97149A1 + BD15B7DA684943C880B74049 + CF8C0F038A2C469C870EC539 + 2087DAA3BD854501A01FD3B5 + 8F2DBD471CD04FA295E40937 + BCD21096616044C58CF399DA + 4E0C6EAC0CF44A7C8EAB9833 isa PBXHeadersBuildPhase runOnlyForDeploymentPostprocessing 0 - 9A6B6BFEB33144239FDB185C + 94FB7053D8E34310A40850BE - buildConfigurationList - FD7B04E88B7A4AABAFC34457 - buildPhases - - F0362A8F03EC496896397CB3 - FA04F25CCB9948EBACABB827 - CD6E0D7BEAD1496C931EEC8D - - buildRules - - dependencies - + fileRef + 0AF66032E901412499D5F669 isa - PBXNativeTarget + PBXBuildFile + + 9592740120A1493E93E8BC1F + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h name - Pods-specs-OHHTTPStubs - productName - Pods-specs-OHHTTPStubs - productReference - 4514A9907D4E427BA03994A3 - productType - com.apple.product-type.library.static + UITableViewCell+RACSignalSupport.h + path + ReactiveCocoaFramework/ReactiveCocoa/UITableViewCell+RACSignalSupport.h + sourceTree + <group> - 9AA2D43948A44A738CFBC68E + 9599F28F596F444A95E5AC5A fileRef - B376D8EF478B4819BBDA03E5 + 42DA59E50BB244F7855B93D8 isa PBXBuildFile - 9B4385C25EA046C19C150E5A + 95A40515E5484DA5A98324ED - fileRef - BD0A65A9D6C843FB8BC654CE + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + NSEnumerator+RACSequenceAdditions.m + path + ReactiveCocoaFramework/ReactiveCocoa/NSEnumerator+RACSequenceAdditions.m + sourceTree + <group> - 9B8CD4FF735340F0AFAB0D7D + 964F5432DA6C4FEBBA264F70 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RACSerialDisposable.h + NSObject+RACDeallocating.m path - ReactiveCocoaFramework/ReactiveCocoa/RACSerialDisposable.h + ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACDeallocating.m sourceTree <group> - 9B8FD4F2BD29451BAF83EBB4 + 96B7F329909D453C86941695 fileRef - 322CB620A759410CA14308CA + 3B1DDD364B68465A8D6BEB08 isa PBXBuildFile - 9CB23E1A1FC441EBA16F7325 + 96F942D43EB7434F97306CCE + + children + + 7D70C0B790D74EEE959F8F7C + 775F5B04E33F48E589B7B129 + EB4322D0994449B8BC841731 + + isa + PBXGroup + name + Reachability + path + Reachability + sourceTree + <group> + + 972C108F34174B9D9D911332 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWExampleSuite.h + NSInvocation+OCMAdditions.m path - Classes/KWExampleSuite.h + Classes/Core/NSInvocation+OCMAdditions.m sourceTree <group> - 9CB48D4C3663408C888BD73A + 9760F8F4CE9E418EBC8D3DB4 fileRef - 649B611218504167A9396F6B + 4711C209A0F04A33BEF461EB + isa + PBXBuildFile + + 978E7EAFA0F5430B85E4BB67 + + fileRef + 775F5B04E33F48E589B7B129 isa PBXBuildFile settings COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 9CCBB7419D6D4811A98D0700 + 9862B06AB13C4156A7AF9D37 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RACQueueScheduler+Subclass.h + UIDatePicker+RACSignalSupport.m path - ReactiveCocoaFramework/ReactiveCocoa/RACQueueScheduler+Subclass.h + ReactiveCocoaFramework/ReactiveCocoa/UIDatePicker+RACSignalSupport.m sourceTree <group> - 9CDF01FCBAFC4847A01FF6DA + 9877AA2093B14BB4B8926E2D + + fileRef + C8AA860DA638408AA6B8F197 + isa + PBXBuildFile + + 994427BAA136404593F2AE81 fileRef - 6F56F0D93172428BAC5778A4 + E43A1A3CDF0E4FF3A2CB6AB6 isa PBXBuildFile settings COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 9D226A849CA440A996DC58EE + 995144A8C6B8455883581300 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWMessageTracker.m + KWReceiveMatcher.h path - Classes/KWMessageTracker.m + Classes/Matchers/KWReceiveMatcher.h sourceTree <group> - 9DDE5869C13D4FE68B64CC25 + 997E11BEE2B64104A99C07D3 + + fileRef + 013387781B774D4A8F8A3830 + isa + PBXBuildFile + + 99B4DB69908C4933B654DB2A + + includeInIndex + 1 + isa + PBXFileReference + name + base64.c + path + SocketRocket/base64.c + sourceTree + <group> + + 99BC9B80037545E9A1312F4A includeInIndex 1 @@ -7827,37 +7716,32 @@ lastKnownFileType sourcecode.c.h name - KWExampleGroupBuilder.h + NSData+SRB64Additions.h path - Classes/KWExampleGroupBuilder.h + SocketRocket/NSData+SRB64Additions.h sourceTree <group> - 9DDECA2D633043648676A1FD + 9A101226EA804D41A1A9426F fileRef - C83C3A6C3B574E7A9C531CA5 + EAC662D4BF854D2F954B65CB isa PBXBuildFile settings COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - 9EDFB43655B149AFA573FE6E + 9A59DE5568F14D2093755C78 fileRef - D9BD1BFA14A6475FB9AF3DC3 + D5FB67F6BC1B4D2084E07E1D isa PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - 9F497F4B641743868D8F7742 + 9B04C7774DBD4540813332C3 includeInIndex 1 @@ -7865,26 +7749,14 @@ PBXFileReference lastKnownFileType sourcecode.c.objc + name + NSString+RACSupport.m path - Pods-specs-OHHTTPStubs-dummy.m + ReactiveCocoaFramework/ReactiveCocoa/NSString+RACSupport.m sourceTree <group> - A06199B41C7A42869DBA4850 - - buildConfigurations - - 3FB8AD5CC6BC4FBFB3A96690 - DE718AF4DB0346F29B1624EA - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - A0B950953DB34E3DBEF78DD0 + 9B237D44F19A4043A2D48413 includeInIndex 1 @@ -7893,192 +7765,207 @@ lastKnownFileType sourcecode.c.h name - RACDelegateProxy.h + KWVerifying.h path - ReactiveCocoaFramework/ReactiveCocoa/RACDelegateProxy.h + Classes/Verifiers/KWVerifying.h sourceTree <group> - A0CE69363211446C86C94F98 + 9B4A5F637F9049D39061F3A5 - children + buildActionMask + 2147483647 + files - 3276F9627DB241BFA46C885F - 7D65B9FB661147F599209F8B - 5A3A8742B8FD4F0D98E23A99 - 354688651EC347BEA7E72F0E - 00FE4AA931F74A278E4AE20E - 47C95EEEB43D479E9D0FB828 - 4514A9907D4E427BA03994A3 + 33CC11796F674FF5BC461831 + EB5EFEE7325A4C29A2E98183 + E29BF73DA68F4C66BFAC1C5F + 5C5E27C9B60643FC8D80ACEA + 855153BF458B49F5A337A0B8 + 8CEAEE5A048148D58E2C3B5F + A1AB133D091B4F67A690AF66 + 1A9CE61DD2BE4C6AA39295E0 + 1410D58BDF2C4E81ACD4DD26 + FDCE235CDDC04F3783A057DE + A9ACA64456C3403ABAE0C796 + 34E8FA22E9C14E7B9D1ADE81 + A9432E4B7A1F4135A7FFEF0D + 5B89CEDDA19444AB8DF06696 + C1FC9493B8AB43719A87C911 + 4AE1A61BC0DD4C9E9CD2604F + AD3845B06CDD4D89B453A04D + 7CF29AB1C9DD42C28C77E661 + E22C450A2C054F14B5297477 + 6FEEEFDF86BE4F2CB552D965 + CC77A9FFF8614303909D25FC + 32E059818FB34D1A86B86298 + 914CFE406A1A49C1A13886DE + 611A49FF440E477F915695AE + F3D5A9B0E0864B92BED4B19C + ED0EA16EAD3246F5B066B049 + 7EEBA25E56A64EA5A9C6855F + B4F95EDAECFD4A7495DB5C24 + CCD44C07EF80467D8A1AF412 + E690EBEB17DD479ABC21280F + A1F7986C2BFD40FF8428B72D + 1C67FDC5DF604739AAC9DB2A + 994427BAA136404593F2AE81 + E049144009BE4DC4BE9E95E7 + E3A158ADB28F42C5ADA82BF1 + A3CE471C0E3A454A9ED549AC + 122F059AD9DA4D848CA50B7B + 1BDB732D39DE4A9286F4C16C + 0055A83E07D14041AE45B2BB + BFD8D238C4AD491EA0C85821 + 3F4AEEB0220845A28944E3D0 + 782EE19232114AF985074197 + BBBB2287045E498BA0E387AC + 4F44B9DC66AA4313932687B0 + 6986AB011AF0416FAEB384B7 + C8237553F2534857B63B86A6 + 129782B5D2AF45FB800DCBD9 + 9D1AAB1334D14BC8B1564BFC + C555614B3F294324AA222557 + 2A003E02B3E047B18BBB5353 + 9BF91DF2813C41D5B8D95275 + 832E30BC52F844C580299D6F + CA81E6D024644DC79F22EB49 + 09D3CE6DDCE44C8FADDA812B + 9A101226EA804D41A1A9426F + 4AC732E78D3E47E98CE7680B + C2B8138217AE475A9A243C0C + 86D4966088424658BE9580E9 + 90ED73B499DE43279E2F836F + F5B33270D3F74A39AD0B5823 + CFFBE6D8631D4C73AC139225 + B662762AD67D4C2A8FA211D3 + 409A3005FA504A7A8960A1F1 + 5B07A602B87949DD954D2B68 + 59C6EF44CE7D4799BD6AB4CA + 9F3C449CECC74377AF1FEDBA + 74F1BF00B1E14863A4FB758C + 2C5A81DD73BB498D98D802EC + 569352254EE6463B970A3278 + C3F4ED960DF447C999E09CCE + A042A54A38574B0BA27CE105 + 929EAC1E07E74B26A0708C35 + 4C90C4B7C78D40BFB79F39C1 + C015FC1DFEDF4EFABD6A29AB + 400CBD545F9A4EFE81A17037 + AC6FDCAB782347F3AE81CD6F + 6E86F9F3A1564E63B7B7A411 + 2BFC74F3A877468EA67CB913 + 54C7DB02FA3843B4AD94C3A9 + 86C36F6652704BD6AD9EDE25 + 47B9BE113A684A0AAA5035B2 isa - PBXGroup + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 9B7761DB44FC48D78719A426 + + isa + PBXFileReference + lastKnownFileType + wrapper.framework name - Products + CFNetwork.framework + path + Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/CFNetwork.framework sourceTree - <group> + DEVELOPER_DIR - A0F91802F50B41899581E79B + 9B94DBA390254216B6E8C468 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - RACSerialDisposable.m + KWBeforeEachNode.h path - ReactiveCocoaFramework/ReactiveCocoa/RACSerialDisposable.m + Classes/Nodes/KWBeforeEachNode.h sourceTree <group> - A1925C2AD6754CD6A6AFC27B + 9BDE5E0F5477446D88E0A92C + + explicitFileType + archive.ar + includeInIndex + 0 + isa + PBXFileReference + path + libPods-ReactiveCocoa.a + sourceTree + BUILT_PRODUCTS_DIR + + 9BF91DF2813C41D5B8D95275 fileRef - E6C3CC91C6F24E8DB479B8E1 + 8B16B51651334BFD9EE12EDE isa PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - A1B6097FFF6F467C88D23B66 + 9D1AAB1334D14BC8B1564BFC - buildSettings + fileRef + AD9682A8A51B44FC99A05641 + isa + PBXBuildFile + settings - ALWAYS_SEARCH_USER_PATHS - NO - CLANG_CXX_LANGUAGE_STANDARD - gnu++0x - CLANG_CXX_LIBRARY - libc++ - CLANG_ENABLE_MODULES - YES - CLANG_ENABLE_OBJC_ARC - NO - CLANG_WARN_BOOL_CONVERSION - YES - CLANG_WARN_CONSTANT_CONVERSION - YES - CLANG_WARN_DIRECT_OBJC_ISA_USAGE - YES_ERROR - CLANG_WARN_EMPTY_BODY - YES - CLANG_WARN_ENUM_CONVERSION - YES - CLANG_WARN_INT_CONVERSION - YES - CLANG_WARN_OBJC_ROOT_CLASS - YES_ERROR - COPY_PHASE_STRIP - NO - ENABLE_NS_ASSERTIONS - NO - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_WARN_64_TO_32_BIT_CONVERSION - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES_ERROR - GCC_WARN_UNDECLARED_SELECTOR - YES - GCC_WARN_UNINITIALIZED_AUTOS - YES - GCC_WARN_UNUSED_FUNCTION - YES - GCC_WARN_UNUSED_VARIABLE - YES - IPHONEOS_DEPLOYMENT_TARGET - 5.0 - STRIP_INSTALLED_PRODUCT - NO - VALIDATE_PRODUCT - YES + COMPILER_FLAGS + -fno-objc-arc -w -Xanalyzer -analyzer-disable-checker + + 9D6AE74FAA1B4DB9BA067A2C + + fileRef + 38E2F1AB87714FEC9BC6B11B isa - XCBuildConfiguration - name - Release + PBXBuildFile - A1E36E97FC594AD093E5114F + 9DFE77C7BF6241E7AF27A92E - children - - AAC1F723C56E48E3A41EAC5F - 0ED4A9E80328433CB1DD4D8B - DE29C5B4F3024924AA4FB432 - 4A9FAE110505455A84BC3938 - 750B585F80FE419393C403C7 - F98E8E77A2F54437B2BA55EF - + fileRef + A384ABADAFC7474BBEE9E44D isa - PBXGroup - name - Pods-specs - sourceTree - <group> + PBXBuildFile - A20F3B4EB0D4474CA1C68502 + 9E0192D66CAA4C4E8112E83C - baseConfigurationReference - 1E2A4BFD472046B0A9DA68DC - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 5.0 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES - + includeInIndex + 1 isa - XCBuildConfiguration + PBXFileReference + lastKnownFileType + sourcecode.c.objc name - Release + RACSerialDisposable.m + path + ReactiveCocoaFramework/ReactiveCocoa/RACSerialDisposable.m + sourceTree + <group> - A244D89BC87345519751FD9F + 9E1DDA5F84BF4EDA871491BA fileRef - 617EC9CE5F1E448D9707B41A + FEE67F238D7442EE9087A55F isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - A274A8CF4F2F4D65BA7F41DB + 9E6E58262EA34A27A4BCFE8A includeInIndex 1 @@ -8087,50 +7974,107 @@ lastKnownFileType sourcecode.c.h name - NSObject+RACPropertySubscribing.h + KWProbePoller.h path - ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACPropertySubscribing.h + Classes/Core/KWProbePoller.h sourceTree <group> - A2FE380979D34DB4865224F8 + 9E7E79157A1846489300183A + + fileRef + 0A57737D13F54EABBFE70131 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + 9E951A53251D49D98C70AE39 fileRef - 871B340EBECF459A990AAFEC + 5D9AC4410D294D8E8C1EF711 isa PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - A305D6B310EB4378985BA67B + 9EC7492FE9004747A9D407CD includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - NSObject+RACPropertySubscribing.m + KWStringContainsMatcher.h path - ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACPropertySubscribing.m + Classes/Matchers/KWStringContainsMatcher.h sourceTree <group> - A307DA15F3574A019015BED8 + 9F0422510B99491F85DFB101 + + fileRef + 4A54E15C582F4D19A04A2C2A + isa + PBXBuildFile + + 9F3BF90077ED4DD1825C66B0 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - RACEvent.m + KWBlockNode.h path - ReactiveCocoaFramework/ReactiveCocoa/RACEvent.m + Classes/Nodes/KWBlockNode.h sourceTree <group> - A366688035054E879C7300D0 + 9F3C449CECC74377AF1FEDBA + + fileRef + 584DFECE0CB6426E83E7DFA2 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fno-objc-arc -w -Xanalyzer -analyzer-disable-checker + + + A01E22736732438D87C15779 + + isa + PBXTargetDependency + target + EE9D25436D914DA8A870DEF3 + targetProxy + 04FFF191057D4BEAB06D51C9 + + A042A54A38574B0BA27CE105 + + fileRef + 972C108F34174B9D9D911332 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + A11EE38E8A114B91BE61B5E4 includeInIndex 1 @@ -8139,28 +8083,52 @@ lastKnownFileType sourcecode.c.objc name - KWUserDefinedMatcher.m + SRWebSocket.m path - Classes/KWUserDefinedMatcher.m + SocketRocket/SRWebSocket.m sourceTree <group> - A3752E073EC845ABBC80F496 + A1A046911046476BB2F635FE includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RACEXTScope.h + KWFailure.m path - ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACEXTScope.h + Classes/Core/KWFailure.m sourceTree <group> - A3D46253B6844726B7197239 + A1AB133D091B4F67A690AF66 + + fileRef + 17AE2CDEB5D14F01B28F6CD1 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + A1F7986C2BFD40FF8428B72D + + fileRef + 1196D82E7B67427AAAF2ACAE + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + A2368088F9A64C368F2CC7F6 includeInIndex 1 @@ -8171,24 +8139,11 @@ name KWContainStringMatcher.h path - Classes/KWContainStringMatcher.h + Classes/Matchers/KWContainStringMatcher.h sourceTree <group> - A3F969241BD8420C9E169A55 - - containerPortal - 3593DC205A284FA2958F1B80 - isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - 0402D00C4DFB42199217841D - remoteInfo - Pods-ReactiveCocoa - - A40A452120B2495698C18ED9 + A241D33728AD4094907B1422 includeInIndex 1 @@ -8196,120 +8151,88 @@ PBXFileReference lastKnownFileType sourcecode.c.objc - name - UISwitch+RACSignalSupport.m path - ReactiveCocoaFramework/ReactiveCocoa/UISwitch+RACSignalSupport.m + Pods-Reachability-dummy.m sourceTree <group> - A41B3A021DF649B38FD7CD24 + A2B3F7BABBF246B0AB9BCB1B fileRef - 4452D073C01046AAA29B7225 + E0C0BFDD55FF43C08BE8A9F7 isa PBXBuildFile - A44DF493B30D4A0E9E756E99 + A32E5C12141144BCB3FD2C1F - fileRef - F644B3FD30394D7080BB6846 + children + + C1BEF9F7291847B887252E58 + 32CD0EE8388E48FFBFA0DE33 + DF09A068E7064655ABD39DAF + AD9682A8A51B44FC99A05641 + 0D80D1BC092C484499F83E81 + CF9D8F2C2ECD45EA87BA15B7 + 4711C209A0F04A33BEF461EB + 584DFECE0CB6426E83E7DFA2 + isa - PBXBuildFile + PBXGroup + name + NonARC + sourceTree + <group> - A4DA403C3A5E4E76824C5F0B + A33605D89E534B8E964325E0 fileRef - BBFE64AE4E4D48339EE0E211 + 898C98415C554D62A2228E38 isa PBXBuildFile - A4FC205D4F2B4689B6FA71FE + A384ABADAFC7474BBEE9E44D includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - RACObjCRuntime.m + UIButton+RACCommandSupport.h path - ReactiveCocoaFramework/ReactiveCocoa/RACObjCRuntime.m + ReactiveCocoaFramework/ReactiveCocoa/UIButton+RACCommandSupport.h sourceTree <group> - A525DED9BE284D13969BBD4E - - fileRef - 17E3C735A53048C6A34198FE - isa - PBXBuildFile - - A5424E36D05D4656B5F480D5 + A38B7D1010274172B0062C1C + includeInIndex + 1 isa PBXFileReference lastKnownFileType - wrapper.framework + sourcecode.c.h name - SenTestingKit.framework + KWNilMatcher.h path - Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/SenTestingKit.framework + Classes/Matchers/KWNilMatcher.h sourceTree - DEVELOPER_DIR - - A58892B2A24844E0815CC40F - - fileRef - 168903ABF9454B78954156F5 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - - A60F73858D44496992D3F0E1 - - fileRef - 6F856A492D884897A8CF6AD1 - isa - PBXBuildFile - - A61DC31A04CF4A2588EA1702 - - fileRef - A305D6B310EB4378985BA67B - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - - A6397FB870A340EAB4A41ABC - - fileRef - EFD1CADF081E43698370A6EF - isa - PBXBuildFile + <group> - A74E170D326840CDA12E786A + A3CE471C0E3A454A9ED549AC fileRef - 0549192BBCB34EA58BCF73C4 + 44CDF3618F3C49D4A9FBD7CA isa PBXBuildFile settings COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - A7E83C7743A343359D196097 + A3D9DC691BA74169AFE26DFE includeInIndex 1 @@ -8318,50 +8241,48 @@ lastKnownFileType sourcecode.c.h name - KWBeIdenticalToMatcher.h + KWHaveValueMatcher.h path - Classes/KWBeIdenticalToMatcher.h + Classes/Matchers/KWHaveValueMatcher.h sourceTree <group> - A8A09B6BFF8E4A949004EA58 + A46109F5B40A4EB69B80EA44 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RACTupleSequence.h + NSInvocation+KiwiAdditions.m path - ReactiveCocoaFramework/ReactiveCocoa/RACTupleSequence.h + Classes/Core/NSInvocation+KiwiAdditions.m sourceTree <group> - A8B9260B59324479AEC0BCCE + A46599BA6FEA4E468F972481 + + fileRef + 46766D4BA2A14ED782229CA8 + isa + PBXBuildFile + + A4BDADB3C94F43D8B0BB5EC2 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h - name - KWExampleNodeVisitor.h + text.xcconfig path - Classes/KWExampleNodeVisitor.h + Pods-specs-Kiwi-Private.xcconfig sourceTree <group> - A9872EBEBBE941EAA63D0D0E - - fileRef - A5424E36D05D4656B5F480D5 - isa - PBXBuildFile - - A9BD7CA5D2064DEF8B675907 + A4EF9447DA45453ABBD910F3 includeInIndex 1 @@ -8370,35 +8291,35 @@ lastKnownFileType sourcecode.c.objc name - UIDatePicker+RACSignalSupport.m + NSData+SRB64Additions.m path - ReactiveCocoaFramework/ReactiveCocoa/UIDatePicker+RACSignalSupport.m + SocketRocket/NSData+SRB64Additions.m sourceTree <group> - A9D6B7EAD3C646EAA11E163B + A506B30B4ACE48F5B85D7F31 fileRef - 34FAF0DA2F954738B5CC0BF2 + 207E6C579EA54355A351D575 isa PBXBuildFile - A9DC09FF24FC4B2193AE7EB9 + A5155DDD6B6641BB815A68B5 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWCaptureSpy.m + RACEmptySignal.h path - Classes/KWCaptureSpy.m + ReactiveCocoaFramework/ReactiveCocoa/RACEmptySignal.h sourceTree <group> - A9E27EB329B14D3D8964E65D + A535A398C3024591A1917ACD includeInIndex 1 @@ -8407,76 +8328,65 @@ lastKnownFileType sourcecode.c.h name - RACSignal+Operations.h + KWAsyncVerifier.h path - ReactiveCocoaFramework/ReactiveCocoa/RACSignal+Operations.h + Classes/Verifiers/KWAsyncVerifier.h sourceTree <group> - A9EBB06972CC41BBB12D61A8 + A56725419FD64D229D7BF1EF includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - UIBarButtonItem+RACCommandSupport.m + KWEqualMatcher.h path - ReactiveCocoaFramework/ReactiveCocoa/UIBarButtonItem+RACCommandSupport.m + Classes/Matchers/KWEqualMatcher.h sourceTree <group> - AA4A6D90EDF7415FAE29763F - - fileRef - 0CC70054E0BD4E3AA5EC3EA0 - isa - PBXBuildFile - - AAC1F723C56E48E3A41EAC5F + A59DD3EDED7D42AF85B0463A includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.objc + name + RACDelegateProxy.m path - Pods-specs.xcconfig + ReactiveCocoaFramework/ReactiveCocoa/RACDelegateProxy.m sourceTree <group> - AAD9CDA2FCED49969AAD85CC + A5E248EB379E40439351ECBB - fileRef - E277C3A8AFC34BACA28B4E3A + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + OHHTTPStubs+NSURLSessionConfiguration.m + path + OHHTTPStubs/Sources/OHHTTPStubs+NSURLSessionConfiguration.m + sourceTree + <group> - AB24FC1CEF824B8C9858D296 + A6DDDACAF30640F3A4C4FCBE fileRef - E3BD340A829E4D19AAA4D5BF + AB723769ADCF4B089F36EEB7 isa PBXBuildFile - AB34F18E9BB94DD3BCA7942C - - buildConfigurations - - 73C23FD72BCB40B98E7E8A46 - 041407CDD2064CDFA000AC22 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - AB4FA9729F764749ABEC0946 + A710B3900E1B45989DA077C7 includeInIndex 1 @@ -8485,50 +8395,53 @@ lastKnownFileType sourcecode.c.objc name - NSProxy+KiwiVerifierAdditions.m + KWBeEmptyMatcher.m path - Classes/NSProxy+KiwiVerifierAdditions.m + Classes/Matchers/KWBeEmptyMatcher.m sourceTree <group> - AC4FE112AC644974ACDBB944 + A76607B208E24E1081266706 - includeInIndex - 1 + children + + 2F28F2CC744A4E2699100FB5 + 6054647399BA48F6AAEF24D1 + DC30647BD4D54B64BE1526B7 + E55D9B19E4AB4084B7C4A744 + isa - PBXFileReference - lastKnownFileType - sourcecode.c.h + PBXGroup name - KWMatching.h - path - Classes/KWMatching.h + Support Files sourceTree - <group> + SOURCE_ROOT - AC6165FFE10D4632A2AB5877 + A7C8CAB033C24BF3B41BC5AE fileRef - E0EAACA985414E8895420B07 + 2499B82C686E4657954DD994 isa PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - ACB20F6105C544A3A99F4E5E + A7D5B16A900D433C8CC3CCA9 - includeInIndex - 1 + fileRef + F8D1FF8E6F304C6C888A1DE5 isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - KWMessagePattern.m - path - Classes/KWMessagePattern.m - sourceTree - <group> + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - ACE1A53016D348D49978BA2A + A8AFC5AAC7014EBD848740A3 includeInIndex 1 @@ -8537,62 +8450,66 @@ lastKnownFileType sourcecode.c.h name - NSObject+RACDescription.h + RACCompoundDisposable.h path - ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACDescription.h + ReactiveCocoaFramework/ReactiveCocoa/RACCompoundDisposable.h sourceTree <group> - ACF57E91F4FE4C6CB3DDDA57 + A9432E4B7A1F4135A7FFEF0D fileRef - 1921F3201B6C4F5FAC1A4ADF + CF79F5BF931545EEAF40E94E isa PBXBuildFile settings COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - AD9C55C4AED847FBBD16317D + A99ED12B5CC242AEA41D9A62 + + fileRef + 38176EE406194B4E928DDAC8 + isa + PBXBuildFile + + A9ACA64456C3403ABAE0C796 fileRef - 6F4AB966460546989FC86282 + 0BA5C0513D034723A8DE6BCB isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - ADC8EF08711544E8803250E0 + A9D0071DB50645A081CA9EB0 fileRef - B58E6846E34C49D38677CD88 + 5EFCC5EDB86B44A480BEFA00 isa PBXBuildFile - AE1AB8F8C0EA4935A1DEBA83 + A9DE2335F9394AECB5CB6972 - includeInIndex - 1 + fileRef + FB83D2CDF8FC455BB6C5B2F3 isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSString+RACSequenceAdditions.h - path - ReactiveCocoaFramework/ReactiveCocoa/NSString+RACSequenceAdditions.h - sourceTree - <group> + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - AE1C602CF9FA40F087967EA6 + AB6C7874D0DD4BB7B53CE5FF fileRef - 10C30819C67B48638ACFB8F5 + D237B699419E4A7B93F91134 isa PBXBuildFile settings @@ -8601,118 +8518,37 @@ -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - AE2CF56CF5314431AA2ED95E + AB723769ADCF4B089F36EEB7 - fileRef - BB97D9561C0C4C4D80CFCAC5 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWGenericMatchingAdditions.h + path + Classes/Matchers/KWGenericMatchingAdditions.h + sourceTree + <group> - AE5BD0C78D984D5682163C03 + ABCF6FE3076B48F685D25B8E - buildActionMask - 2147483647 - files - - 679EAD34611A4E2DA208AEE4 - 6031188552FE4DACAE15BB72 - 92BA54DC718C4D67BDCE212D - 284CECC9F5A74ACE97DF1B29 - DEC7240806744FEFAAC19B2F - 8711D3E4ED944DCF8D824CDD - D8D22AB721DC4340ABB66208 - DBCAAAD6BAB6426E919DDE1C - D296151F13534C0E9873234C - CF3283261ECD438CA5724AAB - 730A28CA166A4F0AAC575BB4 - EAFAC05DAD3D4182872BB69E - 900257F04C1645AE9BA25614 - 77277A4B9AEA443CAF11A53F - A9D6B7EAD3C646EAA11E163B - 380887868DD5496990E34F1E - BA2FD68370874A9BBA58677E - C52FB3F1BC8C409697AC6643 - 86509165B64741048E14438B - D81605377E154FE8B3961D9C - 3CFD6A8ED87F44E99853BDB2 - 881CE3A4E7724D1E8DB96B23 - 482C8EFFDED24F2CAD8B0965 - AB24FC1CEF824B8C9858D296 - F2667EAC158A4C359374BCF8 - B6795717E61340F29D2C4BD2 - 833C2F6E5AD94C1283742A15 - 2A8FBEBD92944C319974F855 - C6EEAA2613CD4E119DC4D9A6 - 3AD4C381408243A8B3BA611B - 47FD1518AF45428A9939E291 - 92AD94B23697460BB219BBE8 - 83851F2B55F84F859C3405EE - 930D71AB929347F887A00BDC - 08521C9395CD4D08BECBBEB5 - 23A6E27104D64EE7972C0B3D - 4B660BFE5D0C4427ACE40C27 - C1AFA49AD9704754B4743B97 - BA6C1208B4C74E7BAC64AF8B - F0F9076E0C5143FE9497D321 - C28B9753ECA84EDFB9E5018C - 9AA2D43948A44A738CFBC68E - F794F245C1984FEB941987EE - 283BB8C504AF48B3A7185986 - 167F3C8E1D3143A1873C1E1B - 5B6F4F5FE4074CF1B8D51958 - 71B4DEFBE95A4E9892A9CF42 - FE94860AA5B94D758E6F2269 - A1925C2AD6754CD6A6AFC27B - B722862C0D2942209E084EAC - AAD9CDA2FCED49969AAD85CC - 018A4422F095460791593192 - 4C901C823ED44BF7A8C52366 - D6C432AD0AC74DC3B0BDF917 - F3C77F8A27A74243ADEEF3B6 - 561301809AC7426A83DF9803 - 76F85B1C29E04301A5BF8F14 - 3DBE40BB899B44738676B57D - 1A4CC88A702447E292FE2889 - 7AD738EBF41149E59D8BF6CB - F5B9E55E4AFD487AB65C7B50 - 96BDA716D2A244FDB6F49170 - 26330589E89147A5ADBE77F7 - 26EA2D348DF140A18732EF3F - 25FDD8BAE1874297B26ACE9B - AA4A6D90EDF7415FAE29763F - 57E430CB18DD4655AD697EE7 - F70488463AAF421083C580C1 - AE2CF56CF5314431AA2ED95E - 45CEA3C317384210950AFFD4 - B8A39F25DDDF4169A5C317C5 - E84E89ACC776469DA2612F04 - 763851ADE7634BA8BBC34F3E - 5F2F215588894C228A278E7A - E57C7649501E4A0DA2F8DA9D - BB014BDDD1474464BABCA402 - 33533C123DCB41A394181B46 - 49ECE25D2A0D48DF975523B9 - 682EB018E1BB4EF6B105107C - 4B21083B56F04631AE91623D - D458CDDBB9864735A3BE8E97 - 041E58F497624808B4848ED3 - 7BDFC80EB86A4DF4B14D99F5 - 869476F2CF494705BEDD8907 - DD0F177A494E446EB0EE0822 - 4AA3752E415648629006D697 - 312E4D9DE5C64FE092E8F0C3 - ADC8EF08711544E8803250E0 - 28601DC3D49B493D95A03317 - 60734572E744430B8D98C649 - D4A82211A16C429CAD8F04A4 - 8382C8089B354842A2A82DDC - + includeInIndex + 1 isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWRespondToSelectorMatcher.h + path + Classes/Matchers/KWRespondToSelectorMatcher.h + sourceTree + <group> - AF14715DFF9E412191C1FE8E + ABF248B913A64842945283E9 includeInIndex 1 @@ -8721,166 +8557,150 @@ lastKnownFileType sourcecode.c.h name - KWAny.h + RACSignal+Operations.h path - Classes/KWAny.h + ReactiveCocoaFramework/ReactiveCocoa/RACSignal+Operations.h sourceTree <group> - AF9B2BFF860442A58C9EDBC8 + ABF83780E4F54B9A8CB69598 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWIntercept.m + RACTargetQueueScheduler.h path - Classes/KWIntercept.m + ReactiveCocoaFramework/ReactiveCocoa/RACTargetQueueScheduler.h sourceTree <group> - AF9B98EE246D439EB9CE02A5 + ABFD359A50744FCFA0AB5BA0 fileRef - 6F0924EABB7F450B8C90AC50 + 5EDA4809ECA7419196883CB7 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - AFC0D4D407CD4AED96871E36 + AC60781D486C4E398A6ABC19 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWChangeMatcher.m + RACBacktrace.h path - Classes/KWChangeMatcher.m + ReactiveCocoaFramework/ReactiveCocoa/RACBacktrace.h sourceTree <group> - B0194545625B4B2594B790D1 + AC6FDCAB782347F3AE81CD6F fileRef - 162EACA552DA4EFDA0E61371 + 7F58C63B37154AA09E33212B isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - B0CF1BACCB4C40B7AB8801DD + AD3845B06CDD4D89B453A04D fileRef - BBADDBBCF9C244FEAC12BD97 + 45FD57861A1D4FFFAFA7F648 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - B0D42FA1B4A34603826E7B56 + AD6972D11FAB425A869D7102 - includeInIndex - 1 + fileRef + 5C07F742C7354FCB92A8E98D isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KiwiMacros.h - path - Classes/KiwiMacros.h - sourceTree - <group> + PBXBuildFile - B0D59693D7DE4F02A9DF033E + AD9682A8A51B44FC99A05641 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - base64.h + KWMessagePattern.m path - SocketRocket/base64.h + NonARC/KWMessagePattern.m sourceTree <group> - B13D304F94624888B958244E + ADE8713A173C43159EF6A4B3 fileRef - B7A9226B4E094C7681E6AF96 + 7ECB4A91B62B403080B42618 isa PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - B15B1B188BA84C97ABDC5C42 + AE481CC5C97D41F38D2C1C40 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.objc + name + KWWorkarounds.m path - Pods-SocketRocket-Private.xcconfig + Classes/Core/KWWorkarounds.m sourceTree <group> - B1D2BC0EA6E64B0F9F4631CD + AE6753C9775D43E7B564A5E5 fileRef - FB1775ECF5FF4E55AA3342AD + 964F5432DA6C4FEBBA264F70 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - B1DFE1BB63F64A6486527788 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - RACStringSequence.h - path - ReactiveCocoaFramework/ReactiveCocoa/RACStringSequence.h - sourceTree - <group> - - B1F7BF7B9B09468298F299F6 + AF37B7E746704725BBE6AEB9 fileRef - E4844758CBA24367B681A466 + 6DE0CB95058D4BEDAA405C71 isa PBXBuildFile - B206298413FF4A01865FDB24 + AF4F992E0B704103858D4F6E fileRef - 2BC9C86526404E9997BD3574 + 1A829B29E2274914BB604225 isa PBXBuildFile settings @@ -8889,7 +8709,14 @@ -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - B376D8EF478B4819BBDA03E5 + AF845FC61A6F41CA992D3B53 + + fileRef + 20A1D77AE9BF4322903D65B6 + isa + PBXBuildFile + + B0243DD4BDE44188A97DC26D includeInIndex 1 @@ -8898,70 +8725,63 @@ lastKnownFileType sourcecode.c.h name - RACKVOTrampoline.h + base64.h path - ReactiveCocoaFramework/ReactiveCocoa/RACKVOTrampoline.h + SocketRocket/base64.h sourceTree <group> - B3ED38A7262247DAA20B28CF + B0C15D7E92EF44F7925704A8 fileRef - BCDF61EB1AE44EAAB66DE8A6 + 47A9AFC873764952B3F144D1 isa PBXBuildFile - B4308D6337934120ADB0BC6B + B17C00321EBE4181A5DF6C90 fileRef - 5B7613B22BDB45B3989085B9 + E36EC84B9FBD4FF2993081DF isa PBXBuildFile - B446D2563FB2467A878D2F23 - - isa - PBXTargetDependency - target - 5BF559B20D784F7096C0D5FF - targetProxy - 72F64FEE812F4C6D917EC590 - - B469F85D03D8489088863C52 + B1912D8D293D42CFA7202233 fileRef - 316C7A35DFDE4BB197E706BB + DFE20A0FB24F4FA49398D470 isa PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - B537597C504E427B9DC86A48 + B1D5E3566D18488D8666A7B6 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWContainStringMatcher.m + RACObjCRuntime.h path - Classes/KWContainStringMatcher.m + ReactiveCocoaFramework/ReactiveCocoa/RACObjCRuntime.h sourceTree <group> - B5606C35E4C346C9BE2A7DE7 + B2315D281CFA4208A69CDB94 - fileRef - F8B581B3C16842C1BCD723EB + children + + 473771FE215245E78A13822A + 8FEA51186DE8489A9D03538F + isa - PBXBuildFile + PBXGroup + name + Targets Support Files + sourceTree + <group> - B58E6846E34C49D38677CD88 + B2991BB941724AAFB030DCC6 includeInIndex 1 @@ -8970,42 +8790,28 @@ lastKnownFileType sourcecode.c.h name - UIStepper+RACSignalSupport.h + KiwiMacros.h path - ReactiveCocoaFramework/ReactiveCocoa/UIStepper+RACSignalSupport.h + Classes/Core/KiwiMacros.h sourceTree <group> - B5EF75B97B9849C2A2038A52 - - fileRef - E6D66EACAA504DF3B9F8C747 - isa - PBXBuildFile - - B6795717E61340F29D2C4BD2 - - fileRef - D796CCB4E88140E5A8A0B529 - isa - PBXBuildFile - - B6B83574A7AA454A96FC77B1 + B2AE69DBA4B4438097753F68 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWBeBetweenMatcher.m + RACMulticastConnection+Private.h path - Classes/KWBeBetweenMatcher.m + ReactiveCocoaFramework/ReactiveCocoa/RACMulticastConnection+Private.h sourceTree <group> - B6EC80F31977440EBD3EEFB9 + B2B3144B35D3418584F92348 includeInIndex 1 @@ -9014,13 +8820,13 @@ lastKnownFileType sourcecode.c.h name - SRWebSocket.h + RACArraySequence.h path - SocketRocket/SRWebSocket.h + ReactiveCocoaFramework/ReactiveCocoa/RACArraySequence.h sourceTree <group> - B6F9381577CC47BAAA6635EF + B39C8C1C628242DD90796CCA includeInIndex 1 @@ -9028,105 +8834,178 @@ PBXFileReference lastKnownFileType sourcecode.c.objc + name + KWRaiseMatcher.m path - Reachability.m + Classes/Matchers/KWRaiseMatcher.m sourceTree <group> - B70686788D1C4B0DA73EC94D + B403BC9842914A829A32BEC7 fileRef - 955EBB8F74B1407D9FAAC2FC + 21070075F6714B26A03BFA57 isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - B722862C0D2942209E084EAC + B44017F3EF194FF58094AD51 - fileRef - 2C0DF2DA739C41299DFBDC2F + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-specs-OHHTTPStubs.xcconfig + sourceTree + <group> - B75F411132DA4DEF831D134A + B4B3D28FF3F448DBB11AE6F6 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - RACReturnSignal.m + text.script.sh path - ReactiveCocoaFramework/ReactiveCocoa/RACReturnSignal.m + Pods-specs-resources.sh sourceTree <group> - B7A20EED90F54FDDB5585132 + B4F95EDAECFD4A7495DB5C24 + + fileRef + 7AFB8754ABC2473ABF4AC408 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + B503B78C35084A12827138E4 includeInIndex 1 isa PBXFileReference - lastKnownFileType - sourcecode.c.h name - UITableViewCell+RACSignalSupport.h + RACCompoundDisposableProvider.d path - ReactiveCocoaFramework/ReactiveCocoa/UITableViewCell+RACSignalSupport.h + ReactiveCocoaFramework/ReactiveCocoa/RACCompoundDisposableProvider.d sourceTree <group> - B7A9226B4E094C7681E6AF96 + B5B48925C6CF438CA6216530 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - NSObject+KiwiStubAdditions.h + RACErrorSignal.m path - Classes/NSObject+KiwiStubAdditions.h + ReactiveCocoaFramework/ReactiveCocoa/RACErrorSignal.m sourceTree <group> - B7EB1C75C7254D17ABBB72DB + B5DE488B148F4FEF8B755708 fileRef - 5DD5F2579DEF4A5E87B5EB0F + B70EE89F247549078D1C4B8F isa PBXBuildFile - B8248457F8BE4AAC8C2DA740 + B63DEE63C0E4441B80B8A7D5 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWAny.h + path + Classes/Core/KWAny.h + sourceTree + <group> + + B662762AD67D4C2A8FA211D3 fileRef - B6B83574A7AA454A96FC77B1 + FE740EBC0CA442FBA9454205 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - B8A39F25DDDF4169A5C317C5 + B6B7AEA943D74EC8A86E1A4A - fileRef - 236A1BFC99784F36BBAFCC75 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + NSObject+KiwiSpyAdditions.h + path + Classes/Core/NSObject+KiwiSpyAdditions.h + sourceTree + <group> + + B6CCF07FD899411882A93980 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACScheduler+Private.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACScheduler+Private.h + sourceTree + <group> + + B6DA91A48E454D29AD579FC6 + + isa + PBXTargetDependency + target + 2820B6B2A6424E40852AC3CA + targetProxy + 8B1121BCEBF64618878879F9 + + B70EE89F247549078D1C4B8F + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + NSObject+RACSelectorSignal.h + path + ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACSelectorSignal.h + sourceTree + <group> - B8C251E35AF84F1693BCAF72 + B723B10817464D2A964BD7AE fileRef - 114BD20560BC429DA72A9C5C + E22ED4747E634035B960D8DE isa PBXBuildFile settings @@ -9135,19 +9014,43 @@ -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - B990E8D8EB6640AE9CFFD604 + B83F6A514F0D4F2893E350E4 + + children + + 578314DDCFF7405BBB7F28F5 + 10A312D8D3D24F9194782966 + A5E248EB379E40439351ECBB + 4C54D194C53543D8BE1112AA + D237B699419E4A7B93F91134 + 801AF02213014B5D8E697C8E + D2D9B3C3D2E741509E3AA3D3 + 5E35D464EA2546EBA885DB5D + 428A9C0BFD1B4B6C9AE0F9EF + 59EC35BED192477BA9EFA2B2 + + isa + PBXGroup + name + OHHTTPStubs + path + OHHTTPStubs + sourceTree + <group> + + B883E2CB56A04C8FA9D018C0 fileRef - 44CEE6C9BD4649AE810916B5 + 155E58D0958249FFB7C4630B isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - B9DE1EEF40494B0D8AB9005A + B8F1E671C0874842B6D9CCFC includeInIndex 1 @@ -9156,30 +9059,35 @@ lastKnownFileType sourcecode.c.objc name - NSMethodSignature+KiwiAdditions.m + NSData+RACSupport.m path - Classes/NSMethodSignature+KiwiAdditions.m + ReactiveCocoaFramework/ReactiveCocoa/NSData+RACSupport.m sourceTree <group> - BA2FD68370874A9BBA58677E + B90890E891F74362AD009A85 fileRef - AE1AB8F8C0EA4935A1DEBA83 + 017F2DA54A454F92A2FFE32C isa PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - BA6C1208B4C74E7BAC64AF8B + B963FA1A7B2C45DB9EA07312 fileRef - 4A5864DA996E4A9D8D321BE2 + E65DD95C4B8440E28F3C54B5 isa PBXBuildFile - BA976FE53B10488284FB1E18 + B9E08D16607646DFAAE4E636 fileRef - 0F0099A8FFF44612BFF6FB5D + 03B46DD9773C40AAA1E2FB11 isa PBXBuildFile settings @@ -9188,29 +9096,36 @@ -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - BB014BDDD1474464BABCA402 + BA3027B35C234132B737E6CC + + fileRef + 19BC924239444687BE654CC8 + isa + PBXBuildFile + + BA4A1632B20D434784074C5B fileRef - 8DB3E706B957420C9D608C32 + 5EFCC5EDB86B44A480BEFA00 isa PBXBuildFile - BB3566BAB9A1489BB6ED6B9C + BAF503EB7B7947729F33E812 fileRef - 3415BFF012E446EEAD2FB457 + 0F7A0FE389D1420B9AEEC1AC isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - BB916C470E764D80ADFD745B + BB625867288B489C9DE092A0 fileRef - 0799C3C8DF1C400D9BD56A7E + 79D933CCD0034897930AB598 isa PBXBuildFile settings @@ -9219,116 +9134,39 @@ -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - BB97D9561C0C4C4D80CFCAC5 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - RACTuple.h - path - ReactiveCocoaFramework/ReactiveCocoa/RACTuple.h - sourceTree - <group> - - BBADDBBCF9C244FEAC12BD97 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - KWStringContainsMatcher.m - path - Classes/KWStringContainsMatcher.m - sourceTree - <group> - - BBFE64AE4E4D48339EE0E211 + BB8D8567FB584B2EABEEE291 + explicitFileType + archive.ar includeInIndex - 1 + 0 isa PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSNumber+KiwiAdditions.h path - Classes/NSNumber+KiwiAdditions.h + libPods.a sourceTree - <group> + BUILT_PRODUCTS_DIR - BC89064F796746F3AD7646FB + BB9CF27990F249D2B9EAF744 fileRef - FD2B3FFD2001497D87091861 + 2468208932F441689ED91E33 isa PBXBuildFile - BCDF61EB1AE44EAAB66DE8A6 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWBeWithinMatcher.h - path - Classes/KWBeWithinMatcher.h - sourceTree - <group> - - BD0A65A9D6C843FB8BC654CE - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWMatcherFactory.h - path - Classes/KWMatcherFactory.h - sourceTree - <group> - - BDF34832C2054D93ADCE35CE - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - RACSequence.m - path - ReactiveCocoaFramework/ReactiveCocoa/RACSequence.m - sourceTree - <group> - - BDFC5722A6FC44968D70D8F7 + BBBB2287045E498BA0E387AC fileRef - 903B19BDD79F4A958A28E1E1 + 53F078F2C50E444682C31E84 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - BE157294E612407DB6D47D02 + BBD883249CF0443298902DC6 includeInIndex 1 @@ -9337,13 +9175,13 @@ lastKnownFileType sourcecode.c.h name - RACSequence.h + RACTupleSequence.h path - ReactiveCocoaFramework/ReactiveCocoa/RACSequence.h + ReactiveCocoaFramework/ReactiveCocoa/RACTupleSequence.h sourceTree <group> - BE8DDA98BFD24641B4B95C84 + BBFFA61182654C73B25A5C5A includeInIndex 1 @@ -9352,113 +9190,94 @@ lastKnownFileType sourcecode.c.h name - KWDeviceInfo.h + SRWebSocket.h path - Classes/KWDeviceInfo.h + SocketRocket/SRWebSocket.h sourceTree <group> - BE8FFCEC4DB04FF587B7A559 + BCD21096616044C58CF399DA + + fileRef + 308EBCB54E6F4711B00EB2CD + isa + PBXBuildFile + + BD0B7CE4EBFD416199CF8778 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWMatchVerifier.h + RACSubscriber.m path - Classes/KWMatchVerifier.h + ReactiveCocoaFramework/ReactiveCocoa/RACSubscriber.m sourceTree <group> - BEA6F6706333451F8819733F + BD15B7DA684943C880B74049 fileRef - 826BD281ABB14A4B9902F1E9 + B6B7AEA943D74EC8A86E1A4A isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - BF02313BDDF94D7DBD78A195 + BD82729312A54010B5793712 fileRef - 4664A96645EA431D8B7D947B + 80EC8030A61D4D3E84DB3C5A isa PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - BF34DF0698354AFF847CC556 + BD8676B3D72E4345A1F19073 fileRef - F41F619BD821410BA2EDC64D + F59B6C8ED9B94518A403C6C3 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - BF674AC2E31D45F299ED92EC - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - UIGestureRecognizer+RACSignalSupport.h - path - ReactiveCocoaFramework/ReactiveCocoa/UIGestureRecognizer+RACSignalSupport.h - sourceTree - <group> - - BFEFA557881F4EA6A680AE56 + BDBB0685D96F45E48003E3D2 baseConfigurationReference - B15B1B188BA84C97ABDC5C42 + FFB46B3833F545E1B16E27A8 buildSettings ALWAYS_SEARCH_USER_PATHS NO COPY_PHASE_STRIP - NO + YES DSTROOT /tmp/xcodeproj.dst GCC_C_LANGUAGE_STANDARD gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 GCC_PRECOMPILE_PREFIX_HEADER YES GCC_PREFIX_HEADER - Pods-SocketRocket-prefix.pch - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO + Pods-specs-OHHTTPStubs-prefix.pch GCC_VERSION com.apple.compilers.llvm.clang.1_0 INSTALL_PATH $(BUILT_PRODUCTS_DIR) IPHONEOS_DEPLOYMENT_TARGET 5.0 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + OTHER_LDFLAGS PRODUCT_NAME @@ -9469,94 +9288,81 @@ iphoneos SKIP_INSTALL YES + VALIDATE_PRODUCT + YES isa XCBuildConfiguration name - Debug + Release - C0762976D3384786BF00EE2A + BE2B55FFA8B5473AA408CB8D - includeInIndex - 1 + fileRef + D646D9F7C09C4E05AB3E233F isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWFailure.h - path - Classes/KWFailure.h - sourceTree - <group> + PBXBuildFile - C0913D4968CF4092BD5088C5 + BF412519750245B8A1586F15 fileRef - 944A7C5DB1034EC681F67DA4 + 7E41DB51032F433889882C47 + isa + PBXBuildFile + + BF6782ECD2B74669A3DAF779 + + fileRef + D9D205F28BE24561B04614C4 isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - C1052EB783924701BA35CDC5 + BFD8D238C4AD491EA0C85821 fileRef - 0C66A6206848438B9317E3A7 + 4DADE293366B4247A59A44F9 isa PBXBuildFile settings COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - C19D96C06C8240A39B9C7A5F + C0000FA4AC614F85A6AAEC73 - containerPortal - 3593DC205A284FA2958F1B80 + fileRef + A56725419FD64D229D7BF1EF isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - EA2B21702FD443F39A8DE00E - remoteInfo - Pods-specs-Kiwi + PBXBuildFile - C1AFA49AD9704754B4743B97 + C015FC1DFEDF4EFABD6A29AB fileRef - 3F3970F566EA49D7B1B1BCD0 + 65DC9B41182D4A509A5D67F7 isa PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - C1F0907DC2724A54B83ECD36 + C039367F642440AC85DFA655 - includeInIndex - 1 + fileRef + E6685215037849B0910C5876 isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - RACObjCRuntime.h - path - ReactiveCocoaFramework/ReactiveCocoa/RACObjCRuntime.h - sourceTree - <group> + PBXBuildFile - C28B9753ECA84EDFB9E5018C + C0F0AE0B8E374069808D86F2 fileRef - 8F029FBAF7AD47028C590920 + 5460193ADC744573AC670EFC isa PBXBuildFile - C343E0EF87404B9292EB0827 + C115AB70479944B484379700 includeInIndex 1 @@ -9565,64 +9371,38 @@ lastKnownFileType text.xcconfig path - Pods-ReactiveCocoa.xcconfig + Pods-ReactiveCocoa-Private.xcconfig sourceTree <group> - C352FBC2540B4CF391B8EC04 - - fileRef - B75F411132DA4DEF831D134A - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - - C3983C3A8F95453CBAAA9D8B + C1BEF9F7291847B887252E58 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWFormatter.m + KWIntercept.h path - Classes/KWFormatter.m + NonARC/KWIntercept.h sourceTree <group> - C419D736F80543DCB883C705 - - buildActionMask - 2147483647 - files - - CC13FB4DEB6043FDADD29B76 - 52DE7868CB574B438320C9A8 - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - C45ACC8C4F82435FB09DEC64 + C1FC9493B8AB43719A87C911 fileRef - 78E53A190E66475F9051B412 + 4EDC2E1BD8804A66BF6942A5 isa PBXBuildFile settings COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - C48BFD32853148A6A50A8EF2 + C2A11F03D15E41839028AF2B includeInIndex 1 @@ -9631,66 +9411,59 @@ lastKnownFileType sourcecode.c.h name - KWBeforeAllNode.h + KWMatcherFactory.h path - Classes/KWBeforeAllNode.h + Classes/Core/KWMatcherFactory.h sourceTree <group> - C4AE918F504C459C85504032 - - fileRef - A3D46253B6844726B7197239 - isa - PBXBuildFile - - C4B9054E508C4291BA1A9FB6 + C2B8138217AE475A9A243C0C fileRef - 4A9FAE110505455A84BC3938 + 5175D4FCB5124320B8C29426 isa PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - C4D9B00D69AE4D1FA0358AA1 + C3F4ED960DF447C999E09CCE fileRef - 68515E4D6C3140BB85AB3C7C + A46109F5B40A4EB69B80EA44 isa PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - C516CD7E99A54E478B45CD59 + C3FDF3D294E44861BAF65C16 includeInIndex 1 isa PBXFileReference lastKnownFileType - text + sourcecode.c.objc + name + KWBlockRaiseMatcher.m path - Pods-acknowledgements.markdown + Classes/Matchers/KWBlockRaiseMatcher.m sourceTree <group> - C52FB3F1BC8C409697AC6643 - - fileRef - 791AF00BE6BB466D8C5B6342 - isa - PBXBuildFile - - C5496FF0699E41CEB31D4D7F + C433D9E617114EA98BCE33DB fileRef - 32B3D8CFC841489184670469 + 35DDBADA009F4399AAC85375 isa PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - C61A973704EA4BC49CE42E0C + C4F920B1A1E14D409AEF124B includeInIndex 1 @@ -9699,34 +9472,25 @@ lastKnownFileType sourcecode.c.h name - KWExampleNode.h + RACReturnSignal.h path - Classes/KWExampleNode.h + ReactiveCocoaFramework/ReactiveCocoa/RACReturnSignal.h sourceTree <group> - C6535D5C619441C6BE6FFD43 - - buildConfigurations - - 2BD86D32521240479C54478A - A20F3B4EB0D4474CA1C68502 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - C6EEAA2613CD4E119DC4D9A6 + C555614B3F294324AA222557 fileRef - 7119EB174A62410B8D5AFCDC + 15C7D5AD0F934960A85BF5C3 isa PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - C71CA4F8073E4B3FA8291299 + C567C4CE76AC459F9D146506 includeInIndex 1 @@ -9735,71 +9499,55 @@ lastKnownFileType sourcecode.c.h name - KWBeKindOfClassMatcher.h + RACImmediateScheduler.h path - Classes/KWBeKindOfClassMatcher.h + ReactiveCocoaFramework/ReactiveCocoa/RACImmediateScheduler.h sourceTree <group> - C770BDBDE81140FD9D520C62 - - fileRef - 9CB23E1A1FC441EBA16F7325 - isa - PBXBuildFile - - C77D93F02CD44921A3B45645 - - fileRef - 6B8F61281AEE40B19705EFB4 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - - C83C3A6C3B574E7A9C531CA5 + C5CC7B53FA4C4FC387AD5C03 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - NSURLConnection+RACSupport.m + RACTuple.h path - ReactiveCocoaFramework/ReactiveCocoa/NSURLConnection+RACSupport.m + ReactiveCocoaFramework/ReactiveCocoa/RACTuple.h sourceTree <group> - C84D6C4C08E2470B8D11D118 + C618D768A4654232BD2EC2B4 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - RACDynamicSequence.m + KWExampleDelegate.h path - ReactiveCocoaFramework/ReactiveCocoa/RACDynamicSequence.m + Classes/Core/KWExampleDelegate.h sourceTree <group> - C883587AFE81481DBA247877 + C62CDA7DF28548A094E14892 + fileRef + D2D9B3C3D2E741509E3AA3D3 isa - PBXTargetDependency - target - 0402D00C4DFB42199217841D - targetProxy - A3F969241BD8420C9E169A55 + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - C8C0707D5D744816B952B724 + C67D555AA53848B9B581BD4D includeInIndex 1 @@ -9808,50 +9556,41 @@ lastKnownFileType sourcecode.c.h name - NSData+RACSupport.h + KWExampleNode.h path - ReactiveCocoaFramework/ReactiveCocoa/NSData+RACSupport.h + Classes/Nodes/KWExampleNode.h sourceTree <group> - C8C2A08C50104766BF652CA4 + C6E0DD264A3547CF9737B6B3 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h - name - KWStringUtilities.h + text.xcconfig path - Classes/KWStringUtilities.h + Pods-specs.xcconfig sourceTree <group> - C939BFFD32D34B6EB5A5C575 - - fileRef - 38732CFA0E2548E1A75616FF - isa - PBXBuildFile - - C944708B69214F7C8A9A34E6 + C7052C3F6BBC4350BCBC5FFF includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWBeTrueMatcher.h + KWConformToProtocolMatcher.m path - Classes/KWBeTrueMatcher.h + Classes/Matchers/KWConformToProtocolMatcher.m sourceTree <group> - C9988DAD30D24211A0D9B87E + C72B1B3324B2445290D92990 includeInIndex 1 @@ -9860,360 +9599,369 @@ lastKnownFileType sourcecode.c.objc name - UIAlertView+RACSignalSupport.m + RACArraySequence.m path - ReactiveCocoaFramework/ReactiveCocoa/UIAlertView+RACSignalSupport.m + ReactiveCocoaFramework/ReactiveCocoa/RACArraySequence.m sourceTree <group> - CA01BF240E594B7FA18334EF + C74189FD041A49B8A68287AF includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - RACUnit.m + RACUnarySequence.h path - ReactiveCocoaFramework/ReactiveCocoa/RACUnit.m + ReactiveCocoaFramework/ReactiveCocoa/RACUnarySequence.h sourceTree <group> - CA314262696B45569EAB891D + C75BAB45243B4576BD253903 fileRef - 0F80146C3286492786396D72 + 58B2D2DD28B94897A9CBFD7A isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - CBA8780B4CFA472FB678ED7E + C772F452D23A47FC90906757 fileRef - 3F3ACA76990D4EA6B902DD9C + 86E8FC92294145DD9425354B isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - CBB030F96BBC40729C22CFE5 + C79A32E9E6E64222BA12FFD8 fileRef - 34FC5AE89020407EABAF3874 + A3D9DC691BA74169AFE26DFE isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - CC13FB4DEB6043FDADD29B76 + C80D0DB4017F4CBDA0AB52E1 - fileRef - 5A33FFF7CF464F59922BD03B + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWBeZeroMatcher.h + path + Classes/Matchers/KWBeZeroMatcher.h + sourceTree + <group> - CC998C2A0FCB446CA87E8D6F + C8237553F2534857B63B86A6 fileRef - 87B6D3CB7B5D4D699789ABA2 + FCED67C1F64340509884414E isa PBXBuildFile settings COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - CC9E48D74B9D428ABB776918 + C870941F4C8345EFB33944FE - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - RACSubscriptingAssignmentTrampoline.m - path - ReactiveCocoaFramework/ReactiveCocoa/RACSubscriptingAssignmentTrampoline.m - sourceTree - <group> - - CD6E0D7BEAD1496C931EEC8D - - buildActionMask - 2147483647 - files - - 04A4146C17D141BD82049C73 - 2E47BE679DD14189A6A866A9 - + baseConfigurationReference + 6054647399BA48F6AAEF24D1 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + YES + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-SocketRocket-prefix.pch + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 5.0 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + VALIDATE_PRODUCT + YES + isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 + XCBuildConfiguration + name + Release - CD88C965FD144077A9EA5996 + C8AA860DA638408AA6B8F197 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - NSSet+RACSequenceAdditions.m + RACKVOTrampoline.h path - ReactiveCocoaFramework/ReactiveCocoa/NSSet+RACSequenceAdditions.m + ReactiveCocoaFramework/ReactiveCocoa/RACKVOTrampoline.h sourceTree <group> - CDF3696E61634EF2AC858744 - - fileRef - 185F34A7C47140BD85EF19DD - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - - CE0A308E59EE4662A98B56B7 + C8F48D0F1EF341AFAD5BC875 fileRef - 1CD756676E9241DD98F5B3D5 + 047F781532644D2690D1D276 isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - - CE3930D6BD9144FBA882CD98 - - children - - D20160FA675C47B9A279B08A - A1E36E97FC594AD093E5114F - - isa - PBXGroup - name - Targets Support Files - sourceTree - <group> - CE580522C4254B50996A6ACF + C8FB0466CAA346009167A0ED includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RACValueTransformer.h + NSObject+KiwiSpyAdditions.m path - ReactiveCocoaFramework/ReactiveCocoa/RACValueTransformer.h + Classes/Core/NSObject+KiwiSpyAdditions.m sourceTree <group> - CF033EB4DA914E0E81452BA8 - - fileRef - 1D301BD0BDEC47FB9FEC0305 - isa - PBXBuildFile - - CF13547E3D5A4A46AF86E77B + C98F48784B734152B6FDC852 - fileRef - 57D45EAD150A430AB32E2B39 - isa - PBXBuildFile - settings + baseConfigurationReference + 7F87E11829654238834014A2 + buildSettings - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + NO + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-Reachability-prefix.pch + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 5.0 + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES - - CF3283261ECD438CA5724AAB - - fileRef - 3CF499DF189A4D3DA2DBC640 isa - PBXBuildFile + XCBuildConfiguration + name + Debug - CF48551A1FF743989A2D2E46 + CA1E02D6E1BE4055B926FDAD includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + text name - KWExampleGroupDelegate.h + Podfile path - Classes/KWExampleGroupDelegate.h + ../Podfile sourceTree - <group> + SOURCE_ROOT + xcLanguageSpecificationIdentifier + xcode.lang.ruby - CF5C970856A34DD881D44F2A + CA81E6D024644DC79F22EB49 fileRef - F9153CF185DE48B58AA0C7AC + 61F7055EA57F45E8A114A2D7 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - D07343E36F9D4ADE9C8F0A9D + CAD6358D1B9645F9AC25084F fileRef - 9D226A849CA440A996DC58EE + 43C0394CAC8A4DE18BED770E isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - D0804DA9D1C5422696461AAD + CB1489830CA9446DAA1C4721 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RACSubject.h + UISwitch+RACSignalSupport.m path - ReactiveCocoaFramework/ReactiveCocoa/RACSubject.h + ReactiveCocoaFramework/ReactiveCocoa/UISwitch+RACSignalSupport.m sourceTree <group> - D0F3C31F19DD4922BFA68DA8 + CB5464819282478585CE81BC fileRef - 3901E1175E2A4B8FA4AEC6F1 + A4EF9447DA45453ABBD910F3 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - D1F816F4B434400AAF4FB7BA + CBE476986BED46B2AE234228 - includeInIndex - 1 + buildActionMask + 2147483647 + files + + FF184FDFD0EC4DAF8AFC86EE + isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - UIActionSheet+RACSignalSupport.m - path - ReactiveCocoaFramework/ReactiveCocoa/UIActionSheet+RACSignalSupport.m - sourceTree - <group> + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 - D20160FA675C47B9A279B08A + CC5234A14FA5450CBA84E068 - children + buildActionMask + 2147483647 + files - 1E2A4BFD472046B0A9DA68DC - C516CD7E99A54E478B45CD59 - FA74EF4AA19443D68B7BA57B - 328144E6BE17458BBFF4C41B - 180D9CE0DCB846F39C434383 - 4C719763155E437C9FE068DF + BA4A1632B20D434784074C5B + 6DFCE05B95A54C5C958DE858 + 55B77F5EEC94416D92A4150C isa - PBXGroup - name - Pods - sourceTree - <group> + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 - D237C157B0AC4C9C8E3D91D2 + CC77A9FFF8614303909D25FC fileRef - 3E49E5458CE24350A76EAA4E + 12DD7C8DAAEA4A07A6F4510F isa PBXBuildFile settings COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - D296151F13534C0E9873234C + CCD44C07EF80467D8A1AF412 fileRef - ACE1A53016D348D49978BA2A + 8A0FB4395F314B35B1721789 isa PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - D3A2CB35F034400CB7329D1E + CD004A91FC114DC281425414 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWRegisterMatchersNode.m + RACDelegateProxy.h path - Classes/KWRegisterMatchersNode.m + ReactiveCocoaFramework/ReactiveCocoa/RACDelegateProxy.h sourceTree <group> - D4585A635F494531887AC37E - - fileRef - 5A33FFF7CF464F59922BD03B - isa - PBXBuildFile - - D458CDDBB9864735A3BE8E97 - - fileRef - 56FC5424BF3847E996EABCFB - isa - PBXBuildFile - - D4A82211A16C429CAD8F04A4 + CD52ED41EF5D448384BA54BE - fileRef - 908ABEFAF1504908BBAA135D + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods.xcconfig + sourceTree + <group> - D5E8695940A24B3B84C83D2A + CD7B98960DE6400C83B61669 includeInIndex 1 @@ -10222,125 +9970,123 @@ lastKnownFileType sourcecode.c.h name - KWStringContainsMatcher.h + RACSignal.h path - Classes/KWStringContainsMatcher.h + ReactiveCocoaFramework/ReactiveCocoa/RACSignal.h sourceTree <group> - D625095EC8EA4017A7E4D296 + CE51F80B1D0C4BC6B53AFF0D + + fileRef + 3F37C960F13543B6852E0C52 + isa + PBXBuildFile + + CE80F2807A6542D2AD8FAB5E includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - SenTestSuite+KiwiAdditions.m + RACmetamacros.h path - Classes/SenTestSuite+KiwiAdditions.m + ReactiveCocoaFramework/ReactiveCocoa/extobjc/RACmetamacros.h sourceTree <group> - D6C432AD0AC74DC3B0BDF917 + CE86F5A65304442ABA904D29 fileRef - BE157294E612407DB6D47D02 + 3A6D2B7073604E8CB7C613FE isa PBXBuildFile - D7778E67F1BF48F2B656AB8E + CEA1B34AA5014EB2A30A6451 - baseConfigurationReference - AAC1F723C56E48E3A41EAC5F - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 5.0 - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - + fileRef + 617BD75024BD44ACBBE13DF9 isa - XCBuildConfiguration + PBXBuildFile + + CEA8B212853A4BFDBF8FF737 + + fileRef + 7D70C0B790D74EEE959F8F7C + isa + PBXBuildFile + + CEE530B8D6304A47BBCE9CA9 + + fileRef + 670875371A8241D7A19B76AF + isa + PBXBuildFile + + CF561A215F16423CB137145D + + fileRef + 6E6D9E89568A4500AA50B380 + isa + PBXBuildFile + + CF73D0F1A8AB473B934CBBF3 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc name - Debug + KWBeSubclassOfClassMatcher.m + path + Classes/Matchers/KWBeSubclassOfClassMatcher.m + sourceTree + <group> - D796CCB4E88140E5A8A0B529 + CF79F5BF931545EEAF40E94E includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RACCompoundDisposable.h + KWBeZeroMatcher.m path - ReactiveCocoaFramework/ReactiveCocoa/RACCompoundDisposable.h + Classes/Matchers/KWBeZeroMatcher.m sourceTree <group> - D7997246FF26491E8AA15738 + CF8C0F038A2C469C870EC539 fileRef - 9F497F4B641743868D8F7742 + D7B403F602CB407E86591FDE isa PBXBuildFile - D7D3D4FFD56143FF8AE3F898 + CF8E3EAADFE142B1841283C7 - children + buildActionMask + 2147483647 + files - 50E826F43D0F4FD7B5D37294 - 7C89D36525C44336A06DE90E - 0C9280FA086D45B789940A85 - 3A4D5B4C955A4A13983E8616 - 0A4F3C639DF7496FBE5DB8F9 + EA6D166F2B874B77BD4ED2B3 + 1780457D3EDC481893BD104B + 59037336E5044D918F361EE9 + 90AD0B7216834F119753C12D isa - PBXGroup - name - OHHTTPStubs - path - OHHTTPStubs - sourceTree - <group> + PBXHeadersBuildPhase + runOnlyForDeploymentPostprocessing + 0 - D7EC89AB9CCE4EC59E00F682 + CF9D8F2C2ECD45EA87BA15B7 includeInIndex 1 @@ -10349,27 +10095,20 @@ lastKnownFileType sourcecode.c.objc name - KWCallSite.m + KWStub.m path - Classes/KWCallSite.m + NonARC/KWStub.m sourceTree <group> - D7F51626EC8E4965A37F858F - - fileRef - C8C2A08C50104766BF652CA4 - isa - PBXBuildFile - - D81605377E154FE8B3961D9C + CFC01F88AC544C9A92275DA4 fileRef - 960CFB3A34494C4AA012FBA9 + FCA85E9368B04F16ACD7685C isa PBXBuildFile - D89B6EAB38B14B529251562D + CFC31C442B3E42B2910FF7CD includeInIndex 1 @@ -10378,42 +10117,72 @@ lastKnownFileType sourcecode.c.h name - NSFileHandle+RACSupport.h + UICollectionViewCell+RACSignalSupport.h path - ReactiveCocoaFramework/ReactiveCocoa/NSFileHandle+RACSupport.h + ReactiveCocoaFramework/ReactiveCocoa/UICollectionViewCell+RACSignalSupport.h sourceTree <group> - D8BBA1F2E43142068B8CBE03 + CFFBE6D8631D4C73AC139225 + + fileRef + 3B7F625018894E19A62DF6ED + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + D0A38184670C4A14910675D5 fileRef - 53E2E69EC8DE4A029FA08396 + 9B7761DB44FC48D78719A426 isa PBXBuildFile - D8D22AB721DC4340ABB66208 + D0D7EAF4E1BB441AB64A686C fileRef - 678D2FE8E56C46FDB8C21B16 + 363E8B74669A495BA73A6FB9 isa PBXBuildFile - D989120ADDC34DA18AC3C8D1 + D10517F73BDB4548879E0310 + + buildActionMask + 2147483647 + files + + 0DF689F3CACB405E9CE08987 + 68F0E177914F4F458963DF83 + C62CDA7DF28548A094E14892 + 5043D891C6764D2287EE74A0 + AB6C7874D0DD4BB7B53CE5FF + 52B4E7FA7F614E1A830B0591 + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + D173B55A211A49DCBE731092 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWGenericMatchingAdditions.h + UISegmentedControl+RACSignalSupport.m path - Classes/KWGenericMatchingAdditions.h + ReactiveCocoaFramework/ReactiveCocoa/UISegmentedControl+RACSignalSupport.m sourceTree <group> - D9BD1BFA14A6475FB9AF3DC3 + D1EE5FE4D66E4C6BAE0B8370 includeInIndex 1 @@ -10422,28 +10191,43 @@ lastKnownFileType sourcecode.c.objc name - UITextField+RACSignalSupport.m + RACTestScheduler.m path - ReactiveCocoaFramework/ReactiveCocoa/UITextField+RACSignalSupport.m + ReactiveCocoaFramework/ReactiveCocoa/RACTestScheduler.m + sourceTree + <group> + + D1FCA9B3A7B84C629D8ED870 + + children + + CA1E02D6E1BE4055B926FDAD + 4ED048C5A87C497CA38A128D + 86981932B47E4AD0AE318933 + 120F641F4A6D4A21A66FE422 + B2315D281CFA4208A69CDB94 + + isa + PBXGroup sourceTree <group> - DA4953C078B445A3A1767F2A + D20C6FEB12E641E0BF3897A8 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RACBehaviorSubject.h + RACTupleSequence.m path - ReactiveCocoaFramework/ReactiveCocoa/RACBehaviorSubject.h + ReactiveCocoaFramework/ReactiveCocoa/RACTupleSequence.m sourceTree <group> - DB2179E6CFC14E158426AFFA + D237B699419E4A7B93F91134 includeInIndex 1 @@ -10451,12 +10235,21 @@ PBXFileReference lastKnownFileType sourcecode.c.objc + name + OHHTTPStubsResponse.m path - Pods-Reachability-dummy.m + OHHTTPStubs/Sources/OHHTTPStubsResponse.m sourceTree <group> - DB74AC156BEB40569A576D32 + D28E24D6A07A427E9292348D + + fileRef + DF370EF81F814D8194EBC387 + isa + PBXBuildFile + + D2A109B78A2E4B5FBA7DBF4B includeInIndex 1 @@ -10465,35 +10258,256 @@ lastKnownFileType sourcecode.c.h name - RACSubscriptingAssignmentTrampoline.h + RACQueueScheduler.h path - ReactiveCocoaFramework/ReactiveCocoa/RACSubscriptingAssignmentTrampoline.h + ReactiveCocoaFramework/ReactiveCocoa/RACQueueScheduler.h sourceTree <group> - DB92B986F814421097AC31B8 + D2D9B3C3D2E741509E3AA3D3 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RACBlockTrampoline.h + OHHTTPStubsResponse+HTTPMessage.m path - ReactiveCocoaFramework/ReactiveCocoa/RACBlockTrampoline.h + OHHTTPStubs/Sources/OHHTTPStubsResponse+HTTPMessage.m sourceTree <group> - DBCAAAD6BAB6426E919DDE1C + D3A776CF462540D7A43A9271 + + fileRef + A38B7D1010274172B0062C1C + isa + PBXBuildFile + + D3E512B6F10F4281983E93E2 + + fileRef + 8324546C8B5549F2AEC52A7D + isa + PBXBuildFile + + D3E6517AB59247C38DAB1185 + + buildActionMask + 2147483647 + files + + 85EE0992B6864452A081CF12 + 5AE46EF325E94B3EA880A389 + 125D69B38DD84DD6B8A96218 + D5190895580C4B5AAC55BF21 + ADE8713A173C43159EF6A4B3 + 5F632A630A474B70B1A8B265 + D6F49BF3C673451F99C283ED + AE6753C9775D43E7B564A5E5 + 80EC3D987E4B478883634DA4 + 068ECD2563AE44D683417EE9 + 59EB47950FFF4BAF90D91F8C + 92DAA3788893482284B3B4A8 + 19FBF81B18814045B64DB457 + FD686932E8204177B9EA4E6B + A9DE2335F9394AECB5CB6972 + 5FC0861360E447F5B11BB972 + 0108B389FC3A496EAB339512 + 3F564A90536A40ADA567B5F6 + 3759C8C0E3FC4187BDBA5A93 + F5C35AA4FC5340A8B420B99C + 81F1ACD71C4B408A94634DDF + 6A5E1D21C62643BF88837F80 + 25E012BA1E6242979545A0A4 + B90890E891F74362AD009A85 + D87E39B5A9F4416895536BAC + 0DDB21898E294DA385BFB66F + ABFD359A50744FCFA0AB5BA0 + 8A022697C14B40AEB11590C2 + 09C48A7D56C24E0D98F8A6ED + BAF503EB7B7947729F33E812 + 2F171CE3F80144C3B65DF41E + DC21D861E73246C0B82006CF + B9E08D16607646DFAAE4E636 + 2BFDBCE6F4AD4709A86BA5EE + A7C8CAB033C24BF3B41BC5AE + B883E2CB56A04C8FA9D018C0 + 742B1A4A1AC04937A2640C1E + B723B10817464D2A964BD7AE + 3A8D1F3252D747508543C86D + 061C02F2CDBB455F8ECC6BFC + E0CFAA16277345C2A58012BB + 9E7E79157A1846489300183A + 9E951A53251D49D98C70AE39 + 8167F9FB3A3B4622B847CEB6 + DC824CC5B0FD421983F37CB5 + 1DD80B58659C4FC895B7DE83 + 335243A08FD2430FBC4F2F1F + EDDF9950E3D74C1B97A23DAD + A7D5B16A900D433C8CC3CCA9 + 235B0BBB65AC4C4CA7EB31DD + 308F81D102F742F7A8BE9CFB + E418656940554DF3A5771FD4 + C772F452D23A47FC90906757 + 753EF9BDBE2D488784BDC473 + AF37B7E746704725BBE6AEB9 + 3B0CB89D5D2545ACAE2D0836 + E9B6CC1824114D97950A7C67 + DD55637FFEA94B23A1496DFB + 41255049A621436585AFC5DE + F08D431847494AB6AB795D6A + 3580466BDE14473489F2DB75 + 90B8739644574CF0AB00197E + 0CC01CF9DAA648DB9F26D902 + 86A29040DAA345B78AF60551 + 4201C7EF822443D1A99525C2 + EE95C68A1B0E4D8683014505 + 2422D4BC3E6F4A3A9CFD3EBF + 57FE9761852747DCAB5CD34C + 1C7B9BBC033D4DECBC4A1578 + 49C1B2C4CB8C4307B8B542AB + 14D9E65BFEEE42C7B9FE4FC5 + BB625867288B489C9DE092A0 + 43910BDD16C74C1D8F2F7012 + 919827833CEB49379E7F1B4C + 239AFEA6D67C416888554D6A + CAD6358D1B9645F9AC25084F + 643C1FD148B343CEA8B94770 + AF4F992E0B704103858D4F6E + F3060CEE9386484EAA2A9239 + 06FD32D8A8BE4A37BDE37DF0 + 184D1615921B491EAF8EF5D3 + 147BA0232404429BB09484EF + FE79A2E16DBF445ABEF825ED + 3F76663340B94B2984CA7A40 + BD8676B3D72E4345A1F19073 + 361074B0E5BB4333896BC568 + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + D5190895580C4B5AAC55BF21 fileRef - 4BA64F0074C14710A9A090BD + 95A40515E5484DA5A98324ED isa PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + D51F55D15E5A4B09A174AD9E + + buildActionMask + 2147483647 + files + + F119F8CF8CF649BAACF433EB + 9E1DDA5F84BF4EDA871491BA + 6390F5D1845E4A878F00C345 + D91119C1E8AC4C58983313C1 + 50BA4DB05ADC41F89BBD2938 + 41EAD6B539404ECF99BAC14E + CE51F80B1D0C4BC6B53AFF0D + 5EC873A3B67F494B84B5302E + 01A6CF0BE9CE4225B0BCE8E7 + B963FA1A7B2C45DB9EA07312 + 4BC2F6766CEE40A595AD02EA + 6C619947D2E64727A33CAAB3 + B5DE488B148F4FEF8B755708 + 1D7E4CCBC34B411C9B0F1949 + 89EA8FF6E6A041849A5BFE0E + 85B672297B174380A590C302 + 2BF7538737344C91A6463296 + 3851BDE43ACC4EF3B742F231 + BD82729312A54010B5793712 + 5CFB4B0219E64DC498B5064A + 5A5E79B952814CEAB63D5048 + CEA1B34AA5014EB2A30A6451 + A2B3F7BABBF246B0AB9BCB1B + 371E33B070CA48FFB0431694 + A33605D89E534B8E964325E0 + 197AACB8A8B0454AB8B11DE9 + 63C547355CCA41148D5A8502 + FC0D078A485C4CDB81E0331B + B403BC9842914A829A32BEC7 + 1DBB08E46F4645D2B91D8C5A + 115F6BCA46A147928C3A5A3B + 9243727EA53046C088EA7D29 + FD901F3BEA4C410380799468 + F922333E2D254C9682F96F03 + 847687C1885545589F4F7474 + 7A02756C69AD4047B0D693F3 + AD6972D11FAB425A869D7102 + B17C00321EBE4181A5DF6C90 + 31B4CE909D344DB9B424E77E + 63F8D9ED12FF471195F8C383 + A506B30B4ACE48F5B85D7F31 + 9877AA2093B14BB4B8926E2D + 5BA1F4F90AFA44A9858B8DB0 + C433D9E617114EA98BCE33DB + F3ABF93706534A31B65A725B + 1CBB6A843BD94536B21CD89E + 4F506B5B0E7C47709FA44452 + 56D4D307DC4A4AF09DAF94EE + 571A1AE8705C422686933D75 + 5FA8245E18A9468BBFE498DE + F4CBB350EB1D4307A1CCE742 + 39FE046FEDD741BCB9075BBF + DA3740A38A2144F7B976F6FA + BA3027B35C234132B737E6CC + C75BAB45243B4576BD253903 + 917201561142444EBE1D38B3 + 2046235E49C148ADBE036915 + A46599BA6FEA4E468F972481 + 6F354EFDB9344A8DAD14E869 + FEAADC00C81E41BDA63E693C + FD95EF7FF0D14D58B90D18E8 + 4408BB0681CE46C1B56C1045 + CFC01F88AC544C9A92275DA4 + 00671B4BAA674E28B3C8BEFD + BE2B55FFA8B5473AA408CB8D + 775B7615ED0A468B956BDBD9 + E729DC6091DE462EBE5E1F60 + 1D11356F5796438AAC9644C0 + 133B0B4DFD2D4EAB8E99AF59 + 2B014875656842DFBDC4CB01 + 65A19347A2174FAF9BBE6A5F + 74F673EA5CA441ACBB95834B + 4639BB1EC512411689D79891 + 6A1FF88A04ED4CA083982641 + 287FA4F176AD41DEA2765D3A + C8F48D0F1EF341AFAD5BC875 + 11F49CCB2D4C46F1ADF832F9 + 8B7D157368574B0680C410D6 + 9DFE77C7BF6241E7AF27A92E + 36368A734173428991FCE787 + 7C8E67E919E147ECAF9B955A + 5A9416F3CA1F4117A6041968 + D3E512B6F10F4281983E93E2 + BF412519750245B8A1586F15 + 5B9842D33DCA42E1BB58BCD1 + 920241BDA6E640BD80591303 + 0819430E4ACE487894D72178 + 443A329B372444D08438D4DA + 9F0422510B99491F85DFB101 + F974D9B355BE45F58BDD4E6F + 9599F28F596F444A95E5AC5A + E42615E4F53D4B6EACC09A84 + + isa + PBXHeadersBuildPhase + runOnlyForDeploymentPostprocessing + 0 - DBF23712AD1341D79E414D00 + D52CE39566D94A66B5471987 includeInIndex 1 @@ -10502,139 +10516,173 @@ lastKnownFileType sourcecode.c.objc name - RACTupleSequence.m + NSNumber+KiwiAdditions.m path - ReactiveCocoaFramework/ReactiveCocoa/RACTupleSequence.m + Classes/Core/NSNumber+KiwiAdditions.m + sourceTree + <group> + + D5804D9293BA4C5FA83AB3D7 + + children + + 6A9AD2CC0B2F44D9A506AD4F + 2D0A8349F6184F9385D2EEA7 + 2EC784CEF9434F9D8DCA9559 + + isa + PBXGroup + name + ReactiveCocoa + path + ReactiveCocoa sourceTree <group> - DC1E4BC6BC8A4837B768E335 + D5FB67F6BC1B4D2084E07E1D includeInIndex 1 isa PBXFileReference + lastKnownFileType + sourcecode.c.h name - RACCompoundDisposableProvider.d + KWFutureObject.h path - ReactiveCocoaFramework/ReactiveCocoa/RACCompoundDisposableProvider.d + Classes/Core/KWFutureObject.h sourceTree <group> - DC86FFE77D1244519B737AF9 + D62503EA2BD94415A9EC1240 - fileRef - A9EBB06972CC41BBB12D61A8 + includeInIndex + 1 isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACValueTransformer.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACValueTransformer.h + sourceTree + <group> + + D646D9F7C09C4E05AB3E233F + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RACSubscriptingAssignmentTrampoline.h + path + ReactiveCocoaFramework/ReactiveCocoa/RACSubscriptingAssignmentTrampoline.h + sourceTree + <group> - DCBBC5AF2D36449DAA3A339B + D6F49BF3C673451F99C283ED fileRef - 6D507DE718D4412EB05F3A63 + 88D96CE6C389411DBFCE9E12 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - DD0F177A494E446EB0EE0822 + D767F3D5A55F44E48F72FD5E fileRef - 409BD228482340AEABE268DA + 9B237D44F19A4043A2D48413 isa PBXBuildFile - DD54F3CD1A5F4739B57D3DD2 + D7B403F602CB407E86591FDE includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - NSData+SRB64Additions.m + NSObject+KiwiStubAdditions.h path - SocketRocket/NSData+SRB64Additions.m + Classes/Stubbing/NSObject+KiwiStubAdditions.h sourceTree <group> - DDC04031A201412DB7A7974B + D7EFA267D14C4BC094E55DE7 + baseConfigurationReference + A4BDADB3C94F43D8B0BB5EC2 buildSettings ALWAYS_SEARCH_USER_PATHS NO - CLANG_CXX_LANGUAGE_STANDARD - gnu++0x - CLANG_CXX_LIBRARY - libc++ - CLANG_ENABLE_MODULES - YES - CLANG_ENABLE_OBJC_ARC - NO - CLANG_WARN_BOOL_CONVERSION - YES - CLANG_WARN_CONSTANT_CONVERSION - YES - CLANG_WARN_DIRECT_OBJC_ISA_USAGE - YES_ERROR - CLANG_WARN_EMPTY_BODY - YES - CLANG_WARN_ENUM_CONVERSION - YES - CLANG_WARN_INT_CONVERSION - YES - CLANG_WARN_OBJC_ROOT_CLASS - YES_ERROR COPY_PHASE_STRIP YES + DSTROOT + /tmp/xcodeproj.dst GCC_C_LANGUAGE_STANDARD gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PREPROCESSOR_DEFINITIONS + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-specs-Kiwi-prefix.pch + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 5.0 + OTHER_CFLAGS - DEBUG=1 + -DNS_BLOCK_ASSERTIONS=1 $(inherited) - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_WARN_64_TO_32_BIT_CONVERSION - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES_ERROR - GCC_WARN_UNDECLARED_SELECTOR - YES - GCC_WARN_UNINITIALIZED_AUTOS - YES - GCC_WARN_UNUSED_FUNCTION - YES - GCC_WARN_UNUSED_VARIABLE + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL YES - IPHONEOS_DEPLOYMENT_TARGET - 5.0 - ONLY_ACTIVE_ARCH + VALIDATE_PRODUCT YES - STRIP_INSTALLED_PRODUCT - NO isa XCBuildConfiguration name - Debug + Release - DDCB818C66D94E80935E19E2 + D87E39B5A9F4416895536BAC + + fileRef + F7EC1BDAB34D4B4098D90757 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + D8A16659E3D5480DB06353D3 includeInIndex 1 @@ -10643,183 +10691,279 @@ lastKnownFileType sourcecode.c.h name - KWMock.h + RACReplaySubject.h path - Classes/KWMock.h + ReactiveCocoaFramework/ReactiveCocoa/RACReplaySubject.h sourceTree <group> - DE29C5B4F3024924AA4FB432 + D91119C1E8AC4C58983313C1 + + fileRef + 238148EC249D47DAB3BB9D5A + isa + PBXBuildFile + + D940BE83D1CF4388BDB4B0B3 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.plist.xml + sourcecode.c.objc + name + KWMock.m path - Pods-specs-acknowledgements.plist + Classes/Mocking/KWMock.m sourceTree <group> - DE336D8C1FF141EF9986F539 + D9D205F28BE24561B04614C4 - children + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWMatchers.h + path + Classes/Core/KWMatchers.h + sourceTree + <group> + + DA3740A38A2144F7B976F6FA + + fileRef + 28C017E1EDB3426AB9758958 + isa + PBXBuildFile + + DA98C7D92BEB412BBEDA7B0E + + buildActionMask + 2147483647 + files - 7938CF4C96CF453A97FF67FB - D7D3D4FFD56143FF8AE3F898 - 6EC913D9CBA5470DBB5D8765 - FF2B499296434B0CB5620E7A - FB1192FFEE0946A4A86B7BEF + 94D2937F2F0843879A5AD800 + 42A329F4AFF348BCA1187F18 isa - PBXGroup + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + DB7764BA57594BAEB5A8AFA8 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h name - Pods + KWObjCUtilities.h + path + Classes/Core/KWObjCUtilities.h sourceTree <group> - DE718AF4DB0346F29B1624EA + DC21D861E73246C0B82006CF - baseConfigurationReference - FFEE9EC9C65A46AD9B50D705 - buildSettings + fileRef + 269797A168A34570AF061E01 + isa + PBXBuildFile + settings - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Pods-ReactiveCocoa-prefix.pch - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 5.0 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + DC26CAA1039A4F1D8E34AF90 + + includeInIndex + 1 isa - XCBuildConfiguration + PBXFileReference + lastKnownFileType + sourcecode.c.objc name - Release + RACPassthroughSubscriber.m + path + ReactiveCocoaFramework/ReactiveCocoa/RACPassthroughSubscriber.m + sourceTree + <group> - DEC7240806744FEFAAC19B2F + DC30647BD4D54B64BE1526B7 - fileRef - D89B6EAB38B14B529251562D + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + Pods-SocketRocket-dummy.m + sourceTree + <group> - DF01D3B770694C86823905AA + DC824CC5B0FD421983F37CB5 fileRef - F0498385EB814E79B174C554 + DC26CAA1039A4F1D8E34AF90 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - DF0F0122AD7141369A55E781 + DD50E099DD2944809FA55A39 - baseConfigurationReference - AAC1F723C56E48E3A41EAC5F - buildSettings + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RACStringSequence.m + path + ReactiveCocoaFramework/ReactiveCocoa/RACStringSequence.m + sourceTree + <group> + + DD55637FFEA94B23A1496DFB + + fileRef + DD50E099DD2944809FA55A39 + isa + PBXBuildFile + settings - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 5.0 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + DD79B55ADFC6408D845C2B4D + + fileRef + 22C3B4D28E024CDCA44EF7E9 isa - XCBuildConfiguration + PBXBuildFile + + DE7B0AA0F15748D6A4EC515F + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc name - Release + UIRefreshControl+RACCommandSupport.m + path + ReactiveCocoaFramework/ReactiveCocoa/UIRefreshControl+RACCommandSupport.m + sourceTree + <group> - DF3AEBAB6816496490375F20 + DEFD2EC3A4784EE98B7D5C36 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWStringUtilities.m + path + Classes/Core/KWStringUtilities.m + sourceTree + <group> + + DF09A068E7064655ABD39DAF + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWMessagePattern.h + path + NonARC/KWMessagePattern.h + sourceTree + <group> + + DF370EF81F814D8194EBC387 + + isa + PBXFileReference + lastKnownFileType + wrapper.framework + name + SystemConfiguration.framework + path + Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/SystemConfiguration.framework + sourceTree + DEVELOPER_DIR + + DFE20A0FB24F4FA49398D470 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWExistVerifier.h + path + Classes/Verifiers/KWExistVerifier.h + sourceTree + <group> + + E0027BB097AD4C6EA45A3611 fileRef - FCFF00D13F5548E0A2923B9F + 9B94DBA390254216B6E8C468 isa PBXBuildFile - E0B7399A268A44BC88CE8E23 + E0374AB84A8742499DE195F6 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWBeIdenticalToMatcher.h + path + Classes/Matchers/KWBeIdenticalToMatcher.h + sourceTree + <group> + + E049144009BE4DC4BE9E95E7 fileRef - 34E5A24A6D20477D890F6BC6 + 1B4721906E994BAE80545326 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - E0EAACA985414E8895420B07 + E0C0BFDD55FF43C08BE8A9F7 includeInIndex 1 @@ -10828,13 +10972,25 @@ lastKnownFileType sourcecode.c.h name - KWRegularExpressionPatternMatcher.h + RACBlockTrampoline.h path - Classes/KWRegularExpressionPatternMatcher.h + ReactiveCocoaFramework/ReactiveCocoa/RACBlockTrampoline.h sourceTree <group> - E15C15B7F66C4838B6635BE3 + E0CFAA16277345C2A58012BB + + fileRef + 63B6DE27271D4674874EF924 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + E10C6851AA0F4002A89EB05A includeInIndex 1 @@ -10842,41 +10998,61 @@ PBXFileReference lastKnownFileType sourcecode.c.objc - name - NSData+RACSupport.m path - ReactiveCocoaFramework/ReactiveCocoa/NSData+RACSupport.m + Pods-specs-dummy.m sourceTree <group> - E18BEBF2F3284BB0882D6BB2 + E1213643460642958D649FCE fileRef - 0BC5D37D947E4D45A6D41886 + 07C46633DE374EBE9CFB823B isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - E18E3DC5D03D41D195A7748F + E13324B6331F4BF892ED0310 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RACScopedDisposable.h + RACQueueScheduler.m path - ReactiveCocoaFramework/ReactiveCocoa/RACScopedDisposable.h + ReactiveCocoaFramework/ReactiveCocoa/RACQueueScheduler.m sourceTree <group> - E1BA65D8FF3140BFA6E8F3EB + E1B0DD643D5B44E99DFF8B8C + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWBlock.m + path + Classes/Core/KWBlock.m + sourceTree + <group> + + E22C450A2C054F14B5297477 + + fileRef + 77CD60CC95334DF88158CE24 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + E22ED4747E634035B960D8DE includeInIndex 1 @@ -10885,25 +11061,25 @@ lastKnownFileType sourcecode.c.objc name - NSObject+KiwiStubAdditions.m + RACEvent.m path - Classes/NSObject+KiwiStubAdditions.m + ReactiveCocoaFramework/ReactiveCocoa/RACEvent.m sourceTree <group> - E1FAD63913384C7B851EE7B2 + E29BF73DA68F4C66BFAC1C5F fileRef - 59A364D3BF8448C795798BCC + 91C6F3955D674210A0669CD2 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - E277C3A8AFC34BACA28B4E3A + E32CC4A0CFF8435894223875 includeInIndex 1 @@ -10911,14 +11087,12 @@ PBXFileReference lastKnownFileType sourcecode.c.h - name - RACScheduler+Private.h path - ReactiveCocoaFramework/ReactiveCocoa/RACScheduler+Private.h + Pods-ReactiveCocoa-prefix.pch sourceTree <group> - E3BD340A829E4D19AAA4D5BF + E36EC84B9FBD4FF2993081DF includeInIndex 1 @@ -10927,25 +11101,25 @@ lastKnownFileType sourcecode.c.h name - RACChannel.h + RACEvent.h path - ReactiveCocoaFramework/ReactiveCocoa/RACChannel.h + ReactiveCocoaFramework/ReactiveCocoa/RACEvent.h sourceTree <group> - E3E15992F42E4D1FAFB8EAE7 + E3A158ADB28F42C5ADA82BF1 fileRef - 0756253C4EE34A4CA3408E25 + 1480529E3E834DD3AD07EB7E isa PBXBuildFile settings COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - E3F6DFF70DA348DCA2C18755 + E3E071BE40D44EEBB95ECD4F includeInIndex 1 @@ -10954,16 +11128,16 @@ lastKnownFileType sourcecode.c.h name - RACEmptySignal.h + NSInvocation+KiwiAdditions.h path - ReactiveCocoaFramework/ReactiveCocoa/RACEmptySignal.h + Classes/Core/NSInvocation+KiwiAdditions.h sourceTree <group> - E42B23214B834ECE83E8EF4D + E418656940554DF3A5771FD4 fileRef - 90F0880D6A8D4882B20D487F + 9E0192D66CAA4C4E8112E83C isa PBXBuildFile settings @@ -10972,34 +11146,14 @@ -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - E47E6AFC3F4344B3989412B4 + E42615E4F53D4B6EACC09A84 fileRef - A9BD7CA5D2064DEF8B675907 + 72F658883B7F4799A7557C6F isa PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - - E4844758CBA24367B681A466 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWContainMatcher.h - path - Classes/KWContainMatcher.h - sourceTree - <group> - E4B9DD62B3994997BB9815EE + E43A1A3CDF0E4FF3A2CB6AB6 includeInIndex 1 @@ -11008,27 +11162,43 @@ lastKnownFileType sourcecode.c.objc name - KWMatcher.m + KWFormatter.m path - Classes/KWMatcher.m + Classes/Core/KWFormatter.m sourceTree <group> - E4F3DE4E95CF48A1A09BCC0F + E4922F20065846E187A6D160 - fileRef - 47674E64692242DA80252C38 + buildActionMask + 2147483647 + files + + 5C8BF678F2844E47899FBA5F + 96B7F329909D453C86941695 + 2A96F1182407483DB2DE3801 + 7B0D7C240C934B1697476414 + isa - PBXBuildFile + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 - E57C7649501E4A0DA2F8DA9D + E4A86397D2274FAAA505C7B2 - fileRef - 90D8685E644542C1811D4676 + buildActionMask + 2147483647 + files + + D0A38184670C4A14910675D5 + F1535BABD6284B0289CE4913 + isa - PBXBuildFile + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 - E63CFE8DE5A042FEA0891E41 + E4B0000F87A746CDB2C825FA includeInIndex 1 @@ -11037,28 +11207,28 @@ lastKnownFileType sourcecode.c.h name - KWUserDefinedMatcher.h + RACStringSequence.h path - Classes/KWUserDefinedMatcher.h + ReactiveCocoaFramework/ReactiveCocoa/RACStringSequence.h sourceTree <group> - E6C3CC91C6F24E8DB479B8E1 + E53FA948F2044A4FA2A89C5F includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RACReplaySubject.h + KWBeKindOfClassMatcher.m path - ReactiveCocoaFramework/ReactiveCocoa/RACReplaySubject.h + Classes/Matchers/KWBeKindOfClassMatcher.m sourceTree <group> - E6D66EACAA504DF3B9F8C747 + E55D9B19E4AB4084B7C4A744 includeInIndex 1 @@ -11066,26 +11236,12 @@ PBXFileReference lastKnownFileType sourcecode.c.h - name - KWRespondToSelectorMatcher.h path - Classes/KWRespondToSelectorMatcher.h + Pods-SocketRocket-prefix.pch sourceTree <group> - E7C3BEF475E04E9BA065824C - - fileRef - A4FC205D4F2B4689B6FA71FE - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - - E7DFBD82C01C4C638B832CC1 + E65DD95C4B8440E28F3C54B5 includeInIndex 1 @@ -11094,196 +11250,104 @@ lastKnownFileType sourcecode.c.h name - NSArray+RACSequenceAdditions.h + NSObject+RACKVOWrapper.h path - ReactiveCocoaFramework/ReactiveCocoa/NSArray+RACSequenceAdditions.h + ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACKVOWrapper.h sourceTree <group> - E833288A46074D58A7682D66 + E66763C673AD4FB6B695D872 + + containerPortal + EFBB6CF77B5E4364844354C4 + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 1E8AB76B5699442590151CF0 + remoteInfo + Pods-ReactiveCocoa + + E6685215037849B0910C5876 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - NSEnumerator+RACSequenceAdditions.m + KWAfterEachNode.h path - ReactiveCocoaFramework/ReactiveCocoa/NSEnumerator+RACSequenceAdditions.m + Classes/Nodes/KWAfterEachNode.h sourceTree <group> - E84E89ACC776469DA2612F04 + E690EBEB17DD479ABC21280F fileRef - 81FC7D2E5B3945F9B70EB03C + 23107D078833429B9B39622C isa PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - E9877AE0AC8E4D479DD89534 + E6E8BDB4AA7C4F88921BD822 - fileRef - 328144E6BE17458BBFF4C41B + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + KWReporting.h + path + Classes/Core/KWReporting.h + sourceTree + <group> - E995638581A84DA5ADB7F1E8 + E729DC6091DE462EBE5E1F60 fileRef - 5A33FFF7CF464F59922BD03B + ABF83780E4F54B9A8CB69598 isa PBXBuildFile - E9F8D76845B14C049EFC558B + E7447CE4280F4724B2C81E43 fileRef - 5A33FFF7CF464F59922BD03B + B2991BB941724AAFB030DCC6 isa PBXBuildFile - EA2B21702FD443F39A8DE00E - - buildConfigurationList - AB34F18E9BB94DD3BCA7942C - buildPhases - - EB62A4B1170C44879AB212D5 - 782704BCEA674892841CB435 - 9A6810B3BD934EAFB751AA91 - - buildRules - - dependencies - - isa - PBXNativeTarget - name - Pods-specs-Kiwi - productName - Pods-specs-Kiwi - productReference - 47C95EEEB43D479E9D0FB828 - productType - com.apple.product-type.library.static - - EAE64924340A463FB638A8C3 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - Pods-SocketRocket-dummy.m - sourceTree - <group> - - EAFAC05DAD3D4182872BB69E + E7CE9A40476E4DC88D10A08D fileRef - A274A8CF4F2F4D65BA7F41DB + 1B9F5738B8E841A7B3109410 isa PBXBuildFile - EB62A4B1170C44879AB212D5 + E8251025E3BE4A1DAB113F0E buildActionMask 2147483647 files - E1FAD63913384C7B851EE7B2 - F0B5DDA45F0C40408638EA95 - E0B7399A268A44BC88CE8E23 - ED7102BB378C425E82B83D6F - B8248457F8BE4AAC8C2DA740 - CE0A308E59EE4662A98B56B7 - DF01D3B770694C86823905AA - CF5C970856A34DD881D44F2A - 0DBEC28C43A74AB2868061B7 - EC94AA6D5BB746A99B3D32F1 - CBB030F96BBC40729C22CFE5 - BB3566BAB9A1489BB6ED6B9C - AF9B98EE246D439EB9CE02A5 - 161BB060B93F42E8A985913A - 8287A6A3F7514C0A81F5B079 - 44635FF6FD8C4A7CB4E8234B - 3894254C6B4E483EA53C7DD9 - F1D1317C9A044DE3A5175DAF - E18BEBF2F3284BB0882D6BB2 - DCBBC5AF2D36449DAA3A339B - 5997AE0A334744BBA7F9E093 - 96A6E6D8132140368F900950 - 286964CE6C22428FB84182BF - F5163DFC81D9469ABB530B1D - 946628973A29435FB44F6AAB - 17C3EC31285D48CEB5B00367 - 4F141A3F9162423B8C01A9B1 - 74ABAC1087974C01B4275B92 - 30DEBB44CE0C4C49BBEE363E - 6C54A48F2DB2425EA22492A6 - 25A760E8262D445A9D0DAEFB - 56876CC87CE746FF9904AD3D - A244D89BC87345519751FD9F - FA711D67263347E5854B5ACF - 81CA47985A784972958FB7BE - 3CB3F226223343AB8FEF43D7 - 006505DCB63C49C6AC141116 - 51A12E0F74B54E21A875DA59 - 931A5F5361714315A2043146 - 2C5F2B679A0F44DF95CAAA01 - 4CC64734F9704B05A4D6309A - 1F0EE99EE23247CF8E8379BC - F92CBD69430748589E827DAF - 01109DFF02D046A8B33FDA28 - CBA8780B4CFA472FB678ED7E - B70686788D1C4B0DA73EC94D - 1C6AAA6D726649A28E867392 - 26A33DB591184055BDD1A692 - C0913D4968CF4092BD5088C5 - 5FDDEB8A1B104F69B428A9CC - D07343E36F9D4ADE9C8F0A9D - B0194545625B4B2594B790D1 - CA314262696B45569EAB891D - 28E56DDCB3C649D3817FDEA3 - 734D8077780941C3A9B588EC - 50361B87F1D24BE2BBE25201 - BEA6F6706333451F8819733F - 0A7C8CB648E34D22BA49DC67 - 544897CE916B485392CD2A4A - 77419DF5536445DA880C133C - FAE8ED9A8D784B6890626E93 - AD9C55C4AED847FBBD16317D - B0CF1BACCB4C40B7AB8801DD - B1D2BC0EA6E64B0F9F4631CD - BF34DF0698354AFF847CC556 - 0183B220EF7B49C68296319A - BDFC5722A6FC44968D70D8F7 - FEE10483E42544F8BEA531B8 - 3148B8563AB046918CE13DCD - 03F0B9797FFD47F18002FB94 - B990E8D8EB6640AE9CFFD604 - 2E0B5DA8E80D4F409E034AA8 - 4B25BEDF657940339CF1BA00 - 9780E584FCF24B219AE9BB45 - 5861A5F373294487AFFB8841 - F568CDBD191F4FCEBE9B922D - D0F3C31F19DD4922BFA68DA8 - 90E935556B1C4FA5B2B3113C - 20E0DFB114104027A960BB95 - 6450F06EA0D3454B89429695 - 172F92CFE1C345A0A5A58AC6 - 8CAB75BB4F524ADBB4B7AB7A - 29C232542CB14D1C8A3310D2 + 3A8E1F0C94C54B0DB625497B + 3981DDE2DDAA4C36B93654B6 + 593063C939C744AEA2C5074E isa - PBXSourcesBuildPhase + PBXFrameworksBuildPhase runOnlyForDeploymentPostprocessing 0 - EC145F306FC14C76979D0352 + E86EDC8701714880873A623F includeInIndex 1 @@ -11292,136 +11356,147 @@ lastKnownFileType sourcecode.c.objc name - KWGenericMatcher.m + KWEqualMatcher.m path - Classes/KWGenericMatcher.m + Classes/Matchers/KWEqualMatcher.m sourceTree <group> - EC2DD60EDB874FB28EC57DE4 - - fileRef - 2D96B9FF873E4BC990447F8A - isa - PBXBuildFile - - EC932628EE02412A80844F23 + E9B6CC1824114D97950A7C67 fileRef - 683C5AD681124911B16AF15A + 8A56347717AD4EE68AA2D4E7 isa PBXBuildFile settings COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - EC94AA6D5BB746A99B3D32F1 + E9BFD00B6FCE4E618B0ABD40 - fileRef - 6320E44CA0034C659743C0F0 + includeInIndex + 1 isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-specs-Kiwi.xcconfig + sourceTree + <group> - ED7102BB378C425E82B83D6F + EA6D166F2B874B77BD4ED2B3 fileRef - 0B97546E56F6468492891F50 + 578314DDCFF7405BBB7F28F5 isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - ED9C1A0EB76D4AA883AC26CA + EAB5C84B189A4B79A998B17C includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h - name - KWItNode.h + text.script.sh path - Classes/KWItNode.h + Pods-resources.sh sourceTree <group> - EDACDFB641CC4864BFA0E339 - - fileRef - 59C7020EE1434185B9029FC8 - isa - PBXBuildFile - - EE7AEBCD93054EDD82A61DDE + EAC662D4BF854D2F954B65CB includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - UIDatePicker+RACSignalSupport.h + KWProbePoller.m path - ReactiveCocoaFramework/ReactiveCocoa/UIDatePicker+RACSignalSupport.h + Classes/Core/KWProbePoller.m sourceTree <group> - EF94BEFE58CD415C8F2B12A0 + EB4322D0994449B8BC841731 + children + + 66D3DA459A3249B7A08EB5CA + 7F87E11829654238834014A2 + A241D33728AD4094907B1422 + FDC22D11E4C7463AA08B70C7 + isa - PBXFileReference - lastKnownFileType - wrapper.framework + PBXGroup name - SystemConfiguration.framework - path - Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/SystemConfiguration.framework + Support Files sourceTree - DEVELOPER_DIR + SOURCE_ROOT + + EB5EFEE7325A4C29A2E98183 + + fileRef + 21EBDA1695F44BE3ABA7DE15 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + ED0EA16EAD3246F5B066B049 + + fileRef + 764AFEF289FF4E1C9EC30290 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - EFD1CADF081E43698370A6EF + ED9A729660EA4FC298DC6DD2 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWReporting.h + NSURLConnection+RACSupport.m path - Classes/KWReporting.h + ReactiveCocoaFramework/ReactiveCocoa/NSURLConnection+RACSupport.m sourceTree <group> - F0362A8F03EC496896397CB3 + EDC1B6A7D15C456293C5E20A - buildActionMask - 2147483647 - files - - 7445FFDF3B4644C39C64874B - 0E19815BFEDE414781FC6560 - D7997246FF26491E8AA15738 - + fileRef + 2DFDA3FBCFCB4A3089357C7A isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXBuildFile + + EDDF9950E3D74C1B97A23DAD + + fileRef + 7351CBBEA4DB4962890A72A6 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - F0498385EB814E79B174C554 + EDFFBD49908C43EF9C147529 includeInIndex 1 @@ -11430,97 +11505,128 @@ lastKnownFileType sourcecode.c.objc name - KWBeIdenticalToMatcher.m + RACDynamicSequence.m path - Classes/KWBeIdenticalToMatcher.m + ReactiveCocoaFramework/ReactiveCocoa/RACDynamicSequence.m sourceTree <group> - F0B5DDA45F0C40408638EA95 + EE95C68A1B0E4D8683014505 fileRef - 44B18651C8BA4A84AF1F9231 + D20C6FEB12E641E0BF3897A8 isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - F0D765ED7D064C589B51A629 + EE9D25436D914DA8A870DEF3 - includeInIndex - 1 + buildConfigurationList + 22A57ECD7733431F9BE869E9 + buildPhases + + 6C486994E5034CBCA313AABA + 48E932E8026449F68CE98968 + 04F529DF36314AD3BA6D7EC2 + + buildRules + + dependencies + isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc + PBXNativeTarget name - KWRegularExpressionPatternMatcher.m - path - Classes/KWRegularExpressionPatternMatcher.m - sourceTree - <group> + Pods-Reachability + productName + Pods-Reachability + productReference + 3B1DDD364B68465A8D6BEB08 + productType + com.apple.product-type.library.static - F0F9076E0C5143FE9497D321 + EED5E01E64854F4C867C621C fileRef - 6FFBD09F24064481BDCEC632 + 87383DFA27664E4D9B5A3ECD isa PBXBuildFile - F10E406806C24894BB2E3BB1 + EF1606F8CFE14DE4BFE1F59F includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWEqualMatcher.h + NSInvocation+RACTypeParsing.m path - Classes/KWEqualMatcher.h + ReactiveCocoaFramework/ReactiveCocoa/NSInvocation+RACTypeParsing.m sourceTree <group> - F185F41FBD404EE584D5A391 - - children - - 5C3D6D948CA04864841525C5 - 2E03E503A6AF4E2DB66DE761 - DB2179E6CFC14E158426AFFA - 4E2D33EF097A4DC18D358E76 - - isa - PBXGroup - name - Support Files - sourceTree - SOURCE_ROOT - - F1D1317C9A044DE3A5175DAF + EF9A8F427E544ABDAA811273 fileRef - 02616A972EBA4ADE98ACA097 + 5EFCC5EDB86B44A480BEFA00 isa PBXBuildFile - settings + + EFBB6CF77B5E4364844354C4 + + attributes - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + LastUpgradeCheck + 0500 + buildConfigurationList + 558A878FB07742F48B479AD2 + compatibilityVersion + Xcode 3.2 + developmentRegion + English + hasScannedForEncodings + 0 + isa + PBXProject + knownRegions + + en + + mainGroup + D1FCA9B3A7B84C629D8ED870 + productRefGroup + 120F641F4A6D4A21A66FE422 + projectDirPath + + projectReferences + + projectRoot + + targets + + 44038B7FB3BE4AE5AE12B9C8 + EE9D25436D914DA8A870DEF3 + 1E8AB76B5699442590151CF0 + 2820B6B2A6424E40852AC3CA + 91D6A91614E84DC1B2DE8628 + 7A17300E4D674CC0B2A68C8C + 15A359E7D4AF402D99E6EC37 + - F1EC465D2D3B45A5921C220F + EFD97812582444EBACF12D38 fileRef - 2D2862D4A2464AECB630CB7E + DF09A068E7064655ABD39DAF isa PBXBuildFile - F222BE0640B54233990D85B5 + F00F8B0FECEF4E1096B7DB3B includeInIndex 1 @@ -11529,16 +11635,16 @@ lastKnownFileType sourcecode.c.objc name - RACCompoundDisposable.m + UIControl+RACSignalSupport.m path - ReactiveCocoaFramework/ReactiveCocoa/RACCompoundDisposable.m + ReactiveCocoaFramework/ReactiveCocoa/UIControl+RACSignalSupport.m sourceTree <group> - F23596A6B44347A8A74E28BB + F08D431847494AB6AB795D6A fileRef - 4FEC1AA9762E404082803DED + BD0B7CE4EBFD416199CF8778 isa PBXBuildFile settings @@ -11547,38 +11653,52 @@ -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - F2667EAC158A4C359374BCF8 + F119F8CF8CF649BAACF433EB fileRef - 8EB43961DFF846BFAED288C1 + F5B24F66923045159B7F0081 isa PBXBuildFile - F2D9A2153CD04B2F93E661E2 + F1535BABD6284B0289CE4913 - children - - 322CB620A759410CA14308CA - 5A33FFF7CF464F59922BD03B - 5288BA5DA69B4CECAAD9724D - A5424E36D05D4656B5F480D5 - EF94BEFE58CD415C8F2B12A0 - + fileRef + 5EFCC5EDB86B44A480BEFA00 isa - PBXGroup - name - iOS - sourceTree - <group> + PBXBuildFile + + F3060CEE9386484EAA2A9239 + + fileRef + DE7B0AA0F15748D6A4EC515F + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + + + F3ABF93706534A31B65A725B + + fileRef + B1D5E3566D18488D8666A7B6 + isa + PBXBuildFile - F30DFB11BD19430ABFCF13AD + F3D5A9B0E0864B92BED4B19C fileRef - E63CFE8DE5A042FEA0891E41 + 38CC0CEAF0FE4B2786FFA619 isa PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - F3C4A814FFE74D42B8BBBE4F + F3F43C7F5F194793A7D509D9 includeInIndex 1 @@ -11587,53 +11707,67 @@ lastKnownFileType sourcecode.c.objc name - NSObject+RACDeallocating.m + KWValue.m path - ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACDeallocating.m + Classes/Core/KWValue.m + sourceTree + <group> + + F4668E959E7D4143A1F38D69 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + NSObject+RACLifting.m + path + ReactiveCocoaFramework/ReactiveCocoa/NSObject+RACLifting.m sourceTree <group> - F3C77F8A27A74243ADEEF3B6 + F4CBB350EB1D4307A1CCE742 fileRef - 9B8CD4FF735340F0AFAB0D7D + B6CCF07FD899411882A93980 isa PBXBuildFile - F3C825BF098A4FE9A1C6FA67 + F4D5820985CF4B43A43C65B1 baseConfigurationReference - 6A1A9B8DEC6447AFBFFCA440 + CD52ED41EF5D448384BA54BE buildSettings ALWAYS_SEARCH_USER_PATHS NO COPY_PHASE_STRIP - YES + NO DSTROOT /tmp/xcodeproj.dst GCC_C_LANGUAGE_STANDARD gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 GCC_PRECOMPILE_PREFIX_HEADER YES - GCC_PREFIX_HEADER - Pods-specs-OHHTTPStubs-prefix.pch + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO GCC_VERSION com.apple.compilers.llvm.clang.1_0 INSTALL_PATH $(BUILT_PRODUCTS_DIR) IPHONEOS_DEPLOYMENT_TARGET 5.0 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - OTHER_LDFLAGS PRODUCT_NAME @@ -11644,134 +11778,135 @@ iphoneos SKIP_INSTALL YES - VALIDATE_PRODUCT - YES isa XCBuildConfiguration name - Release + Debug - F3CC2B2178084527AAD26615 + F5547ED532444DF189741848 - fileRef - 6F2601DEDFCA412287115CB9 + includeInIndex + 1 isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + KWBeforeAllNode.m + path + Classes/Nodes/KWBeforeAllNode.m + sourceTree + <group> - F3F65FACF58D4DEA948F7A65 + F59B6C8ED9B94518A403C6C3 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RACDynamicSignal.h + UITextField+RACSignalSupport.m path - ReactiveCocoaFramework/ReactiveCocoa/RACDynamicSignal.h + ReactiveCocoaFramework/ReactiveCocoa/UITextField+RACSignalSupport.m sourceTree <group> - F41F619BD821410BA2EDC64D + F5B24F66923045159B7F0081 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - KWStringUtilities.m + NSArray+RACSequenceAdditions.h path - Classes/KWStringUtilities.m + ReactiveCocoaFramework/ReactiveCocoa/NSArray+RACSequenceAdditions.h sourceTree <group> - F5163DFC81D9469ABB530B1D + F5B33270D3F74A39AD0B5823 fileRef - 67914415DB2C404AAC41F1F5 + 3121C12B2EFD4872844EAAEA isa PBXBuildFile settings COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - F51CAAB6FD074BA78B43DA98 + F5C35AA4FC5340A8B420B99C + + fileRef + 40F49F6098C84FC2BC65B9ED + isa + PBXBuildFile + + F6F2C166D865440486566456 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KiwiConfiguration.h + KWBeBetweenMatcher.m path - Classes/KiwiConfiguration.h + Classes/Matchers/KWBeBetweenMatcher.m sourceTree <group> - F568CDBD191F4FCEBE9B922D + F6F4D352F4984CFD80C7E75A fileRef - 194B85AAFB3D454BB50BC1CB + DC30647BD4D54B64BE1526B7 isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - F591CFA0AC1E45C6B5A029AE + F7EC1BDAB34D4B4098D90757 - fileRef - 782ABE7106924070BB66F2FA + includeInIndex + 1 isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RACChannel.m + path + ReactiveCocoaFramework/ReactiveCocoa/RACChannel.m + sourceTree + <group> - F5AB7FB274A84B31898B11D6 + F829D6F0AA3A42258E849D38 fileRef - C84D6C4C08E2470B8D11D118 + 45183855128142DEA48627EA isa PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - F5B9E55E4AFD487AB65C7B50 + F88005335C06425D9D887177 fileRef - B1DFE1BB63F64A6486527788 + C67D555AA53848B9B581BD4D isa PBXBuildFile - F5CFD781BEF444B6949FC7C5 + F886DE7E8676427F87D42043 fileRef - 599721491B8D4DA8A733A7A8 + FB10ACB930CF4319B07FDE17 isa PBXBuildFile - F6084BC1A66C4EBBBD3BE4CD + F8D1FF8E6F304C6C888A1DE5 includeInIndex 1 @@ -11780,73 +11915,105 @@ lastKnownFileType sourcecode.c.objc name - RACUnarySequence.m + RACScheduler.m path - ReactiveCocoaFramework/ReactiveCocoa/RACUnarySequence.m + ReactiveCocoaFramework/ReactiveCocoa/RACScheduler.m sourceTree <group> - F644B3FD30394D7080BB6846 + F8E4EF9644DA4628A96BED31 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - NSProxy+KiwiVerifierAdditions.h + RACUnit.m path - Classes/NSProxy+KiwiVerifierAdditions.h + ReactiveCocoaFramework/ReactiveCocoa/RACUnit.m sourceTree <group> - F66570DC6820480196AB504D + F8F895A8DFB24606B8F999B1 - fileRef - 21C56824A0804A99A45C7942 - isa - PBXBuildFile - settings + baseConfigurationReference + CD52ED41EF5D448384BA54BE + buildSettings - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + YES + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 5.0 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + VALIDATE_PRODUCT + YES - - F6E44FF9A81B452C975480CF - - fileRef - 64ED7A9099474B44881384AB isa - PBXBuildFile + XCBuildConfiguration + name + Release - F70488463AAF421083C580C1 + F922333E2D254C9682F96F03 fileRef - 6B3A51943C3A4205B90C0349 + 2D6FDF81DADD464EB5518615 isa PBXBuildFile - F794F245C1984FEB941987EE + F974D9B355BE45F58BDD4E6F fileRef - 5CFE18FBE3ED4163BC06E29A + 9592740120A1493E93E8BC1F isa PBXBuildFile - F7AC5AC816CA46BFA38108E0 + FA6B5205BDCF4BF4B88B1063 - fileRef - CA01BF240E594B7FA18334EF + buildActionMask + 2147483647 + files + + EED5E01E64854F4C867C621C + isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 - F8B581B3C16842C1BCD723EB + FB10ACB930CF4319B07FDE17 includeInIndex 1 @@ -11855,13 +12022,13 @@ lastKnownFileType sourcecode.c.h name - KWAfterEachNode.h + KWBeKindOfClassMatcher.h path - Classes/KWAfterEachNode.h + Classes/Matchers/KWBeKindOfClassMatcher.h sourceTree <group> - F9153CF185DE48B58AA0C7AC + FB1F773527E9460CAF4BD5B1 includeInIndex 1 @@ -11870,106 +12037,73 @@ lastKnownFileType sourcecode.c.objc name - KWBeKindOfClassMatcher.m + SenTestSuite+KiwiAdditions.m path - Classes/KWBeKindOfClassMatcher.m + SenTestingKit/SenTestSuite+KiwiAdditions.m sourceTree <group> - F92CBD69430748589E827DAF - - fileRef - AF9B2BFF860442A58C9EDBC8 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - - F98668C4B8E24C36B5B93224 + FB4CDE8EDA5D4296BBC9A542 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - KWConformToProtocolMatcher.h + KWAfterAllNode.m path - Classes/KWConformToProtocolMatcher.h + Classes/Nodes/KWAfterAllNode.m sourceTree <group> - F98E8E77A2F54437B2BA55EF + FB83D2CDF8FC455BB6C5B2F3 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.script.sh + sourcecode.c.objc + name + NSSet+RACSequenceAdditions.m path - Pods-specs-resources.sh + ReactiveCocoaFramework/ReactiveCocoa/NSSet+RACSequenceAdditions.m sourceTree <group> - FA04F25CCB9948EBACABB827 + FBB062F93FE2425C8699524F - buildActionMask - 2147483647 - files - - 6074DAE36A1C48789E35139C - + fileRef + B0243DD4BDE44188A97DC26D isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXBuildFile - FA711D67263347E5854B5ACF + FBCC1AA0592648DD9FDCBCD0 - fileRef - 52F4BD4C69444DB7ADA94143 isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - + PBXTargetDependency + target + 1E8AB76B5699442590151CF0 + targetProxy + E66763C673AD4FB6B695D872 - FA74EF4AA19443D68B7BA57B + FBED7EFDFEA44D2D8ED0A8CA - includeInIndex - 1 + fileRef + 9E6E58262EA34A27A4BCFE8A isa - PBXFileReference - lastKnownFileType - text.plist.xml - path - Pods-acknowledgements.plist - sourceTree - <group> + PBXBuildFile - FA837F145D5142109E15FEC1 + FC0D078A485C4CDB81E0331B - includeInIndex - 1 + fileRef + 577D44E25E3E48748C565F66 isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - UISwitch+RACSignalSupport.h - path - ReactiveCocoaFramework/ReactiveCocoa/UISwitch+RACSignalSupport.h - sourceTree - <group> + PBXBuildFile - FA8A8DB0C2CD41B9A8129B59 + FCA85E9368B04F16ACD7685C includeInIndex 1 @@ -11978,13 +12112,13 @@ lastKnownFileType sourcecode.c.h name - KiwiBlockMacros.h + RACSubscriber+Private.h path - Classes/KiwiBlockMacros.h + ReactiveCocoaFramework/ReactiveCocoa/RACSubscriber+Private.h sourceTree <group> - FAB2736A54DC4C3D83898090 + FCED67C1F64340509884414E includeInIndex 1 @@ -11993,83 +12127,52 @@ lastKnownFileType sourcecode.c.objc name - RACSubscriber.m + KWMatcherFactory.m path - ReactiveCocoaFramework/ReactiveCocoa/RACSubscriber.m + Classes/Core/KWMatcherFactory.m sourceTree <group> - FADAC3F07F9646828D59AF07 + FD686932E8204177B9EA4E6B fileRef - B6EC80F31977440EBD3EEFB9 + 5552B3CABD8C4A8384DE9E60 isa PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - FAE8ED9A8D784B6890626E93 + FD901F3BEA4C410380799468 fileRef - 9467E9DAA194434484DE371D + 105E2373D3964737A3A4A9D2 isa PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - - FAF7DE0F88A14EBBB5D08FB9 + FD95EF7FF0D14D58B90D18E8 - buildActionMask - 2147483647 - files - - 157FA199DCD24618A85EED3F - FADAC3F07F9646828D59AF07 - 211DB2C5F4FF4CA2807938DD - + fileRef + E4B0000F87A746CDB2C825FA isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXBuildFile - FB027FA86D6E44529D4F6E63 + FDC22D11E4C7463AA08B70C7 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - RACChannel.m - path - ReactiveCocoaFramework/ReactiveCocoa/RACChannel.m - sourceTree - <group> - - FB1192FFEE0946A4A86B7BEF - - children - - 74E86158709945BD83B008FA - DD54F3CD1A5F4739B57D3DD2 - B6EC80F31977440EBD3EEFB9 - 10C30819C67B48638ACFB8F5 - 683C5AD681124911B16AF15A - B0D59693D7DE4F02A9DF033E - 002213C66BFA43BC88E6C87C - - isa - PBXGroup - name - SocketRocket + sourcecode.c.h path - SocketRocket + Pods-Reachability-prefix.pch sourceTree <group> - FB1775ECF5FF4E55AA3342AD + FDCCF2F66E12437C9C08B3E7 includeInIndex 1 @@ -12078,55 +12181,38 @@ lastKnownFileType sourcecode.c.objc name - KWStringPrefixMatcher.m + NSArray+RACSequenceAdditions.m path - Classes/KWStringPrefixMatcher.m + ReactiveCocoaFramework/ReactiveCocoa/NSArray+RACSequenceAdditions.m sourceTree <group> - FCFF00D13F5548E0A2923B9F + FDCE235CDDC04F3783A057DE - includeInIndex - 1 + fileRef + CF73D0F1A8AB473B934CBBF3 isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - KWWorkarounds.h - path - Classes/KWWorkarounds.h - sourceTree - <group> + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - FD2B3FFD2001497D87091861 + FDEB858833114BF59D388AB4 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + text.plist.xml path - Reachability.h + Pods-specs-acknowledgements.plist sourceTree <group> - FD7B04E88B7A4AABAFC34457 - - buildConfigurations - - 4A13A074EC3C465AAAA998C6 - F3C825BF098A4FE9A1C6FA67 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - FD8E538DAE614D2FA8CC5A65 + FDEF44EA44D543DD9E9B5050 includeInIndex 1 @@ -12135,13 +12221,13 @@ lastKnownFileType sourcecode.c.objc name - KWBeMemberOfClassMatcher.m + NSMethodSignature+KiwiAdditions.m path - Classes/KWBeMemberOfClassMatcher.m + Classes/Core/NSMethodSignature+KiwiAdditions.m sourceTree <group> - FDD86645CC714B85B8EB2472 + FE740EBC0CA442FBA9454205 includeInIndex 1 @@ -12150,116 +12236,106 @@ lastKnownFileType sourcecode.c.objc name - RACGroupedSignal.m + KWStringContainsMatcher.m path - ReactiveCocoaFramework/ReactiveCocoa/RACGroupedSignal.m + Classes/Matchers/KWStringContainsMatcher.m sourceTree <group> - FE150A43DAE840E387566D6E - - fileRef - 354688651EC347BEA7E72F0E - isa - PBXBuildFile - - FE28E3D08FC6468AB5DAF810 + FE79A2E16DBF445ABEF825ED fileRef - 4E5163BF49274B0FAC8F0A42 + CB1489830CA9446DAA1C4721 isa PBXBuildFile + settings + + COMPILER_FLAGS + -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker + - FE94860AA5B94D758E6F2269 + FEAADC00C81E41BDA63E693C fileRef - 60232C08BDF24866A92B8AC2 + 546E0752E7B74342904B3808 isa PBXBuildFile - FEE10483E42544F8BEA531B8 + FEE159CDFAC845BCB30D4255 - fileRef - 8FE273511E764916A22F858C isa - PBXBuildFile - settings - - COMPILER_FLAGS - -w -Xanalyzer -analyzer-disable-checker - + PBXTargetDependency + target + 7A17300E4D674CC0B2A68C8C + targetProxy + 586E6F10DCC342528FA9DB0A - FF2B499296434B0CB5620E7A + FEE67F238D7442EE9087A55F - children - - 638F5E8E35794CC29940938B - 626B9AFFBE724DAB993B8741 - 774EC2DBF2E44BE1960E37A2 - + includeInIndex + 1 isa - PBXGroup + PBXFileReference + lastKnownFileType + sourcecode.c.h name - ReactiveCocoa + NSData+RACSupport.h path - ReactiveCocoa + ReactiveCocoaFramework/ReactiveCocoa/NSData+RACSupport.h sourceTree <group> - FF422B92EFEF40C69375FD1B + FEE820893D6B4E35AE687AC4 fileRef - E15C15B7F66C4838B6635BE3 + 6D710363D73F418E8FC175E0 isa PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - FFBEDF51644D4EB98802152C + FF11E920904B443C8846264E fileRef - 55998C1FB2F14DE5858D9D3A + 0F731461CA5D4CBF834C5BB0 + isa + PBXBuildFile + + FF184FDFD0EC4DAF8AFC86EE + + fileRef + E10C6851AA0F4002A89EB05A isa PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker - - FFDD53DD78DE404084421DCA + FFB46B3833F545E1B16E27A8 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - KWObjCUtilities.m + text.xcconfig path - Classes/KWObjCUtilities.m + Pods-specs-OHHTTPStubs-Private.xcconfig sourceTree <group> - FFEE9EC9C65A46AD9B50D705 + FFE487E02A694212837E112A includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.h + name + KWWorkarounds.h path - Pods-ReactiveCocoa-Private.xcconfig + Classes/Core/KWWorkarounds.h sourceTree <group> rootObject - 3593DC205A284FA2958F1B80 + EFBB6CF77B5E4364844354C4 diff --git a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-Reachability.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-Reachability.xcscheme index abd6b239..25ad9982 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-Reachability.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-Reachability.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> diff --git a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-ReactiveCocoa.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-ReactiveCocoa.xcscheme index e621c222..2288268a 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-ReactiveCocoa.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-ReactiveCocoa.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> diff --git a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-SocketRocket.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-SocketRocket.xcscheme index 77698e0c..5f631778 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-SocketRocket.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-SocketRocket.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> diff --git a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs-Kiwi.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs-Kiwi.xcscheme index 732dcd3b..37db31e7 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs-Kiwi.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs-Kiwi.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> diff --git a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs-OHHTTPStubs.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs-OHHTTPStubs.xcscheme index 5b4b34d0..6c3044ea 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs-OHHTTPStubs.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs-OHHTTPStubs.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> diff --git a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs.xcscheme index f418d437..fcabada0 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods-specs.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> diff --git a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods.xcscheme index a5730d7b..26ce9fb6 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/Pods.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> diff --git a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/xcschememanagement.plist b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/xcschememanagement.plist index 99b5e2c9..90c6991e 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Pods/Pods.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/xcschememanagement.plist @@ -42,37 +42,37 @@ SuppressBuildableAutocreation - 0402D00C4DFB42199217841D + 15A359E7D4AF402D99E6EC37 primary - 063659C829454C82A619E4F8 + 1E8AB76B5699442590151CF0 primary - 5BF559B20D784F7096C0D5FF + 2820B6B2A6424E40852AC3CA primary - 6CAA6E31029C41429D0B0213 + 44038B7FB3BE4AE5AE12B9C8 primary - 8024D3DAD4AE415E897DC585 + 7A17300E4D674CC0B2A68C8C primary - 9A6B6BFEB33144239FDB185C + 91D6A91614E84DC1B2DE8628 primary - EA2B21702FD443F39A8DE00E + EE9D25436D914DA8A870DEF3 primary diff --git a/Pods/Reachability/LICENCE.txt b/Pods/Reachability/LICENCE.txt new file mode 100644 index 00000000..12b7844c --- /dev/null +++ b/Pods/Reachability/LICENCE.txt @@ -0,0 +1,24 @@ +Copyright (c) 2011-2013, Tony Million. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/Pods/Reachability/README.md b/Pods/Reachability/README.md index 9b1d719d..57fdab78 100644 --- a/Pods/Reachability/README.md +++ b/Pods/Reachability/README.md @@ -1,27 +1,65 @@ # Reachability -This is a drop-in replacement for Apples Reachability class. It is ARC compatible, uses the new GCD methods to notify of network interface changes. +This is a drop-in replacement for Apple's `Reachability` class. It is ARC-compatible, and it uses the new GCD methods to notify of network interface changes. -In addition to the standard NSNotification it supports the use of Blocks for when the network becomes reachable and unreachable. +In addition to the standard `NSNotification`, it supports the use of blocks for when the network becomes reachable and unreachable. -Finally you can specify wether or not a WWAN connection is considered "reachable". +Finally, you can specify whether a WWAN connection is considered "reachable". -## A Simple example +## Requirements - // allocate a reachability object +Once you have added the `.h/m` files to your project, simply: + +* Go to the `Project->TARGETS->Build Phases->Link Binary With Libraries`. +* Press the plus in the lower left of the list. +* Add `SystemConfiguration.framework`. + +Boom, you're done. + +## Examples + +### Block Example + +This sample uses blocks to notify when the interface state has changed. The blocks will be called on a **BACKGROUND THREAD**, so you need to dispatch UI updates onto the main thread. + + // Allocate a reachability object Reachability* reach = [Reachability reachabilityWithHostname:@"www.google.com"]; - // set the blocks + // Set the blocks reach.reachableBlock = ^(Reachability*reach) { - NSLog(@"REACHABLE!"); + NSLog(@"REACHABLE!"); }; reach.unreachableBlock = ^(Reachability*reach) { - NSLog(@"UNREACHABLE!"); + NSLog(@"UNREACHABLE!"); }; - // start the notifier which will cause the reachability object to retain itself! + // Start the notifier, which will cause the reachability object to retain itself! [reach startNotifier]; +### `NSNotification` Example + +This sample will use `NSNotification`s to notify when the interface has changed. They will be delivered on the **MAIN THREAD**, so you *can* do UI updates from within the function. + +In addition, it asks the `Reachability` object to consider the WWAN (3G/EDGE/CDMA) as a non-reachable connection (you might use this if you are writing a video streaming app, for example, to save the user's data plan). + + // Allocate a reachability object + Reachability* reach = [Reachability reachabilityWithHostname:@"www.google.com"]; + + // Tell the reachability that we DON'T want to be reachable on 3G/EDGE/CDMA + reach.reachableOnWWAN = NO; + + // Here we set up a NSNotification observer. The Reachability that caused the notification + // is passed in the object parameter + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(reachabilityChanged:) + name:kReachabilityChangedNotification + object:nil]; + + [reach startNotifier] + +## Tell the world + +Head over to [Projects using Reachability](https://github.com/tonymillion/Reachability/wiki/Projects-using-Reachability) and add your project for "Maximum Wins!". diff --git a/Pods/Reachability/Reachability.h b/Pods/Reachability/Reachability.h index 40359c54..211b8166 100644 --- a/Pods/Reachability/Reachability.h +++ b/Pods/Reachability/Reachability.h @@ -35,15 +35,35 @@ #import #import +/** + * Does ARC support GCD objects? + * It does if the minimum deployment target is iOS 6+ or Mac OS X 8+ + * + * @see http://opensource.apple.com/source/libdispatch/libdispatch-228.18/os/object.h + **/ +#if OS_OBJECT_USE_OBJC +#define NEEDS_DISPATCH_RETAIN_RELEASE 0 +#else +#define NEEDS_DISPATCH_RETAIN_RELEASE 1 +#endif + +/** + * Create NS_ENUM macro if it does not exist on the targeted version of iOS or OS X. + * + * @see http://nshipster.com/ns_enum-ns_options/ + **/ +#ifndef NS_ENUM +#define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type +#endif + extern NSString *const kReachabilityChangedNotification; -typedef enum -{ - // Apple NetworkStatus Compatible Names. - NotReachable = 0, - ReachableViaWiFi = 2, - ReachableViaWWAN = 1 -} NetworkStatus; +typedef NS_ENUM(NSInteger, NetworkStatus) { + // Apple NetworkStatus Compatible Names. + NotReachable = 0, + ReachableViaWiFi = 2, + ReachableViaWWAN = 1 +}; @class Reachability; @@ -55,13 +75,9 @@ typedef void (^NetworkUnreachable)(Reachability * reachability); @property (nonatomic, copy) NetworkReachable reachableBlock; @property (nonatomic, copy) NetworkUnreachable unreachableBlock; -@property (nonatomic, assign) SCNetworkReachabilityRef reachabilityRef; -@property (nonatomic, assign) dispatch_queue_t reachabilitySerialQueue; @property (nonatomic, assign) BOOL reachableOnWWAN; -@property (nonatomic, strong) id reachabilityObject; - +(Reachability*)reachabilityWithHostname:(NSString*)hostname; +(Reachability*)reachabilityForInternetConnection; +(Reachability*)reachabilityWithAddress:(const struct sockaddr_in*)hostAddress; diff --git a/Pods/Reachability/Reachability.m b/Pods/Reachability/Reachability.m index c6dc6eae..96ef95cb 100644 --- a/Pods/Reachability/Reachability.m +++ b/Pods/Reachability/Reachability.m @@ -30,10 +30,22 @@ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF NSString *const kReachabilityChangedNotification = @"kReachabilityChangedNotification"; -@interface Reachability (private) +@interface Reachability () + +@property (nonatomic, assign) SCNetworkReachabilityRef reachabilityRef; + + +#if NEEDS_DISPATCH_RETAIN_RELEASE +@property (nonatomic, assign) dispatch_queue_t reachabilitySerialQueue; +#else +@property (nonatomic, strong) dispatch_queue_t reachabilitySerialQueue; +#endif + + +@property (nonatomic, strong) id reachabilityObject; -(void)reachabilityChanged:(SCNetworkReachabilityFlags)flags; --(BOOL)setReachabilityTarget:(NSString*)hostname; +-(BOOL)isReachableWithFlags:(SCNetworkReachabilityFlags)flags; @end @@ -55,13 +67,17 @@ -(BOOL)setReachabilityTarget:(NSString*)hostname; (flags & kSCNetworkReachabilityFlagsIsDirect) ? 'd' : '-']; } -//Start listening for reachability notifications on the current run loop +// Start listening for reachability notifications on the current run loop static void TMReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void* info) { #pragma unused (target) +#if __has_feature(objc_arc) Reachability *reachability = ((__bridge Reachability*)info); +#else + Reachability *reachability = ((Reachability*)info); +#endif - // we probably dont need an autoreleasepool here as GCD docs state each queue has its own autorelease pool + // We probably don't need an autoreleasepool here, as GCD docs state each queue has its own autorelease pool, // but what the heck eh? @autoreleasepool { @@ -82,13 +98,26 @@ @implementation Reachability @synthesize reachabilityObject; -#pragma mark - class constructor methods +#pragma mark - Class Constructor Methods + ++(Reachability*)reachabilityWithHostName:(NSString*)hostname +{ + return [Reachability reachabilityWithHostname:hostname]; +} + +(Reachability*)reachabilityWithHostname:(NSString*)hostname { SCNetworkReachabilityRef ref = SCNetworkReachabilityCreateWithName(NULL, [hostname UTF8String]); if (ref) { - return [[self alloc] initWithReachabilityRef:ref]; + id reachability = [[self alloc] initWithReachabilityRef:ref]; + +#if __has_feature(objc_arc) + return reachability; +#else + return [reachability autorelease]; +#endif + } return nil; @@ -99,7 +128,13 @@ +(Reachability *)reachabilityWithAddress:(const struct sockaddr_in *)hostAddress SCNetworkReachabilityRef ref = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr*)hostAddress); if (ref) { - return [[self alloc] initWithReachabilityRef:ref]; + id reachability = [[self alloc] initWithReachabilityRef:ref]; + +#if __has_feature(objc_arc) + return reachability; +#else + return [reachability autorelease]; +#endif } return nil; @@ -124,15 +159,11 @@ +(Reachability*)reachabilityForLocalWiFi // IN_LINKLOCALNETNUM is defined in as 169.254.0.0 localWifiAddress.sin_addr.s_addr = htonl(IN_LINKLOCALNETNUM); - Reachability* reach = [self reachabilityWithAddress:&localWifiAddress]; - if(reach!= NULL) - { - } - return reach; + return [self reachabilityWithAddress:&localWifiAddress]; } -// initialization methods +// Initialization methods -(Reachability *)initWithReachabilityRef:(SCNetworkReachabilityRef)ref { @@ -149,22 +180,29 @@ -(Reachability *)initWithReachabilityRef:(SCNetworkReachabilityRef)ref -(void)dealloc { [self stopNotifier]; + if(self.reachabilityRef) { CFRelease(self.reachabilityRef); self.reachabilityRef = nil; } -#ifdef DEBUG - NSLog(@"Reachability: dealloc"); + + self.reachableBlock = nil; + self.unreachableBlock = nil; + +#if !(__has_feature(objc_arc)) + [super dealloc]; #endif + + } -#pragma mark - notifier methods +#pragma mark - Notifier Methods // Notifier -// NOTE: this uses GCD to trigger the blocks - they *WILL NOT* be called on THE MAIN THREAD +// NOTE: This uses GCD to trigger the blocks - they *WILL NOT* be called on THE MAIN THREAD // - In other words DO NOT DO ANY UI UPDATES IN THE BLOCKS. -// INSTEAD USE dispatch_async(dispatch_get_main_thread(), ^{UISTUFF}) (or dispatch_sync if you want) +// INSTEAD USE dispatch_async(dispatch_get_main_queue(), ^{UISTUFF}) (or dispatch_sync if you want) -(BOOL)startNotifier { @@ -174,40 +212,84 @@ -(BOOL)startNotifier // woah self.reachabilityObject = self; + + + // First, we need to create a serial queue. + // We allocate this once for the lifetime of the notifier. + self.reachabilitySerialQueue = dispatch_queue_create("com.tonymillion.reachability", NULL); + if(!self.reachabilitySerialQueue) + { + return NO; + } + +#if __has_feature(objc_arc) context.info = (__bridge void *)self; +#else + context.info = (void *)self; +#endif if (!SCNetworkReachabilitySetCallback(self.reachabilityRef, TMReachabilityCallback, &context)) { - printf("SCNetworkReachabilitySetCallback() failed: %s\n", SCErrorString(SCError())); +#ifdef DEBUG + NSLog(@"SCNetworkReachabilitySetCallback() failed: %s", SCErrorString(SCError())); +#endif + + // Clear out the dispatch queue + if(self.reachabilitySerialQueue) + { +#if NEEDS_DISPATCH_RETAIN_RELEASE + dispatch_release(self.reachabilitySerialQueue); +#endif + self.reachabilitySerialQueue = nil; + } + + self.reachabilityObject = nil; + return NO; } - //create a serial queue - self.reachabilitySerialQueue = dispatch_queue_create("com.tonymillion.reachability", NULL); - - // set it as our reachability queue which will retain the queue - if(SCNetworkReachabilitySetDispatchQueue(self.reachabilityRef, self.reachabilitySerialQueue)) + // Set it as our reachability queue, which will retain the queue + if(!SCNetworkReachabilitySetDispatchQueue(self.reachabilityRef, self.reachabilitySerialQueue)) { - dispatch_release(self.reachabilitySerialQueue); - // refcount should be ++ from the above function so this -- will mean its still 1 - return YES; +#ifdef DEBUG + NSLog(@"SCNetworkReachabilitySetDispatchQueue() failed: %s", SCErrorString(SCError())); +#endif + + // UH OH - FAILURE! + + // First stop, any callbacks! + SCNetworkReachabilitySetCallback(self.reachabilityRef, NULL, NULL); + + // Then clear out the dispatch queue. + if(self.reachabilitySerialQueue) + { +#if NEEDS_DISPATCH_RETAIN_RELEASE + dispatch_release(self.reachabilitySerialQueue); +#endif + self.reachabilitySerialQueue = nil; + } + + self.reachabilityObject = nil; + + return NO; } - dispatch_release(self.reachabilitySerialQueue); - self.reachabilitySerialQueue = nil; - return NO; + return YES; } -(void)stopNotifier { - // first stop any callbacks! + // First stop, any callbacks! SCNetworkReachabilitySetCallback(self.reachabilityRef, NULL, NULL); - // unregister target from the GCD serial dispatch queue - // this will mean the dispatch queue gets dealloc'ed + // Unregister target from the GCD serial dispatch queue. + SCNetworkReachabilitySetDispatchQueue(self.reachabilityRef, NULL); + if(self.reachabilitySerialQueue) { - SCNetworkReachabilitySetDispatchQueue(self.reachabilityRef, NULL); +#if NEEDS_DISPATCH_RETAIN_RELEASE + dispatch_release(self.reachabilitySerialQueue); +#endif self.reachabilitySerialQueue = nil; } @@ -216,23 +298,18 @@ -(void)stopNotifier #pragma mark - reachability tests -// this is for the case where you flick the airplane mode +// This is for the case where you flick the airplane mode; // you end up getting something like this: //Reachability: WR ct----- //Reachability: -- ------- //Reachability: WR ct----- //Reachability: -- ------- -// we treat this as 4 UNREACHABLE triggers - really apple should do better than this +// We treat this as 4 UNREACHABLE triggers - really apple should do better than this #define testcase (kSCNetworkReachabilityFlagsConnectionRequired | kSCNetworkReachabilityFlagsTransientConnection) --(BOOL)isReachable +-(BOOL)isReachableWithFlags:(SCNetworkReachabilityFlags)flags { - SCNetworkReachabilityFlags flags; - - if(!SCNetworkReachabilityGetFlags(self.reachabilityRef, &flags)) - return NO; - BOOL connectionUP = YES; if(!(flags & kSCNetworkReachabilityFlagsReachable)) @@ -244,10 +321,10 @@ -(BOOL)isReachable #if TARGET_OS_IPHONE if(flags & kSCNetworkReachabilityFlagsIsWWAN) { - // we're on 3G + // We're on 3G. if(!self.reachableOnWWAN) { - // we dont want to connect when on 3G + // We don't want to connect when on 3G. connectionUP = NO; } } @@ -256,6 +333,16 @@ -(BOOL)isReachable return connectionUP; } +-(BOOL)isReachable +{ + SCNetworkReachabilityFlags flags; + + if(!SCNetworkReachabilityGetFlags(self.reachabilityRef, &flags)) + return NO; + + return [self isReachableWithFlags:flags]; +} + -(BOOL)isReachableViaWWAN { #if TARGET_OS_IPHONE @@ -264,10 +351,10 @@ -(BOOL)isReachableViaWWAN if(SCNetworkReachabilityGetFlags(reachabilityRef, &flags)) { - // check we're REACHABLE + // Check we're REACHABLE if(flags & kSCNetworkReachabilityFlagsReachable) { - // now, check we're on WWAN + // Now, check we're on WWAN if(flags & kSCNetworkReachabilityFlagsIsWWAN) { return YES; @@ -285,11 +372,11 @@ -(BOOL)isReachableViaWiFi if(SCNetworkReachabilityGetFlags(reachabilityRef, &flags)) { - // check we're reachable + // Check we're reachable if((flags & kSCNetworkReachabilityFlagsReachable)) { #if TARGET_OS_IPHONE - // check we're NOT on WWAN + // Check we're NOT on WWAN if((flags & kSCNetworkReachabilityFlagsIsWWAN)) { return NO; @@ -386,15 +473,15 @@ -(NSString*)currentReachabilityString if(temp == reachableOnWWAN) { - // updated for the fact we have CDMA phones now! - return @"Cellular"; + // Updated for the fact that we have CDMA phones now! + return NSLocalizedString(@"Cellular", @""); } if (temp == ReachableViaWiFi) { - return @"WiFi"; + return NSLocalizedString(@"WiFi", @""); } - return @"No Connection"; + return NSLocalizedString(@"No Connection", @""); } -(NSString*)currentReachabilityFlags @@ -402,21 +489,14 @@ -(NSString*)currentReachabilityFlags return reachabilityFlags([self reachabilityFlags]); } -#pragma mark - callback function calls this method +#pragma mark - Callback function calls this method -(void)reachabilityChanged:(SCNetworkReachabilityFlags)flags { -#ifdef DEBUG - NSLog(@"Reachability: %@", reachabilityFlags(flags)); -#endif - - if([self isReachable]) + if([self isReachableWithFlags:flags]) { if(self.reachableBlock) { -#ifdef DEBUG - NSLog(@"Reachability: blocks are not called on the main thread.\n Use dispatch_async(dispatch_get_main_queue(), ^{}] to update your UI!"); -#endif self.reachableBlock(self); } } @@ -424,9 +504,6 @@ -(void)reachabilityChanged:(SCNetworkReachabilityFlags)flags { if(self.unreachableBlock) { -#ifdef DEBUG - NSLog(@"Reachability: blocks are not called on the main thread.\n Use dispatch_async(dispatch_get_main_queue(), ^{}] to update your UI!"); -#endif self.unreachableBlock(self); } } @@ -438,4 +515,13 @@ -(void)reachabilityChanged:(SCNetworkReachabilityFlags)flags }); } +#pragma mark - Debug Description + +- (NSString *) description; +{ + NSString *description = [NSString stringWithFormat:@"<%@: %#x>", + NSStringFromClass([self class]), (unsigned int) self]; + return description; +} + @end diff --git a/Pods/Reachability/Reachability.podspec b/Pods/Reachability/Reachability.podspec deleted file mode 100644 index b2942dc3..00000000 --- a/Pods/Reachability/Reachability.podspec +++ /dev/null @@ -1,12 +0,0 @@ -Pod::Spec.new do |s| - s.name = 'Reachability' - s.version = '3.0.0' - s.license = 'BSD' - s.homepage = 'https://github.com/tonymillion/Reachability' - s.authors = { 'Tony Million' => 'tonymillion@gmail.com' } - s.summary = 'ARC and GCD Compatible Reachability Class for iOS. Drop in replacement for Apple Reachability.' - s.source = { :git => 'https://github.com/tonymillion/Reachability.git', :tag => '3.0.0' } - s.source_files = 'Reachability.{h,m}' - s.framework = 'SystemConfiguration' - s.requires_arc = true -end diff --git a/Pods/SocketRocket/SocketRocket/SRWebSocket.m b/Pods/SocketRocket/SocketRocket/SRWebSocket.m index db5039ac..3c941379 100644 --- a/Pods/SocketRocket/SocketRocket/SRWebSocket.m +++ b/Pods/SocketRocket/SocketRocket/SRWebSocket.m @@ -461,7 +461,7 @@ - (void)_HTTPHeadersDidFinish; if (responseCode >= 400) { SRFastLog(@"Request failed with response code %d", responseCode); - [self _failWithError:[NSError errorWithDomain:@"org.lolrus.SocketRocket" code:2132 userInfo:[NSDictionary dictionaryWithObject:[NSString stringWithFormat:@"received bad response code from server %ld", (long)responseCode] forKey:NSLocalizedDescriptionKey]]]; + [self _failWithError:[NSError errorWithDomain:@"org.lolrus.SocketRocket" code:2132 userInfo:[NSDictionary dictionaryWithObject:[NSString stringWithFormat:@"received bad response code from server %d", responseCode] forKey:NSLocalizedDescriptionKey]]]; return; } @@ -530,7 +530,7 @@ - (void)didConnect CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Upgrade"), CFSTR("websocket")); CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Connection"), CFSTR("Upgrade")); CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Sec-WebSocket-Key"), (__bridge CFStringRef)_secKey); - CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Sec-WebSocket-Version"), (__bridge CFStringRef)[NSString stringWithFormat:@"%ld", (long)_webSocketVersion]); + CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Sec-WebSocket-Version"), (__bridge CFStringRef)[NSString stringWithFormat:@"%d", _webSocketVersion]); CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Origin"), (__bridge CFStringRef)_url.SR_origin); @@ -876,7 +876,7 @@ - (void)_handleFrameWithData:(NSData *)frameData opCode:(NSInteger)opcode; [self handlePong]; break; default: - [self _closeWithProtocolError:[NSString stringWithFormat:@"Unknown opcode %ld", (long)opcode]]; + [self _closeWithProtocolError:[NSString stringWithFormat:@"Unknown opcode %d", opcode]]; // TODO: Handle invalid opcode break; } From 4279a54eb02a95b5e4549b5624216cb831d4d0e5 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Fri, 6 Dec 2013 16:03:40 +0000 Subject: [PATCH 85/88] Update OHHTTPStubs calls to use new API. --- ...TPusherChannelAuthorizationOperationSpec.m | 29 +++++++++++++------ 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/Unit Tests/PTPusherChannelAuthorizationOperationSpec.m b/Unit Tests/PTPusherChannelAuthorizationOperationSpec.m index 7b58027a..307c0dbc 100644 --- a/Unit Tests/PTPusherChannelAuthorizationOperationSpec.m +++ b/Unit Tests/PTPusherChannelAuthorizationOperationSpec.m @@ -21,10 +21,12 @@ beforeEach(^{ NSURL *authURL = [NSURL URLWithString:@"http://example.com/authorize"]; - [OHHTTPStubs addRequestHandler:^OHHTTPStubsResponse *(NSURLRequest *request, BOOL onlyCheck) { + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL isEqual:authURL]; + + } withStubResponse:^OHHTTPStubsResponse *(NSURLRequest *request) { return [OHHTTPStubsResponse responseWithData:[NSJSONSerialization dataWithJSONObject:@{@"channel": @"test-channel"} options:0 error:nil] statusCode:200 - responseTime:0 headers:nil]; }]; @@ -58,10 +60,12 @@ beforeEach(^{ NSURL *authURL = [NSURL URLWithString:@"http://example.com/authorize"]; - [OHHTTPStubs addRequestHandler:^OHHTTPStubsResponse *(NSURLRequest *request, BOOL onlyCheck) { + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL isEqual:authURL]; + + } withStubResponse:^OHHTTPStubsResponse *(NSURLRequest *request) { return [OHHTTPStubsResponse responseWithData:nil statusCode:400 - responseTime:0 headers:nil]; }]; @@ -95,10 +99,12 @@ beforeEach(^{ NSURL *authURL = [NSURL URLWithString:@"http://example.com/authorize"]; - [OHHTTPStubs addRequestHandler:^OHHTTPStubsResponse *(NSURLRequest *request, BOOL onlyCheck) { + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL isEqual:authURL]; + + } withStubResponse:^OHHTTPStubsResponse *(NSURLRequest *request) { return [OHHTTPStubsResponse responseWithData:nil statusCode:200 - responseTime:0 headers:nil]; }]; @@ -136,10 +142,12 @@ beforeEach(^{ NSURL *authURL = [NSURL URLWithString:@"http://example.com/authorize"]; - [OHHTTPStubs addRequestHandler:^OHHTTPStubsResponse *(NSURLRequest *request, BOOL onlyCheck) { + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL isEqual:authURL]; + + } withStubResponse:^OHHTTPStubsResponse *(NSURLRequest *request) { return [OHHTTPStubsResponse responseWithData:[@"{malformed json" dataUsingEncoding:NSUTF8StringEncoding] statusCode:200 - responseTime:0 headers:nil]; }]; @@ -177,7 +185,10 @@ beforeEach(^{ NSURL *authURL = [NSURL URLWithString:@"http://example.com/authorize"]; - [OHHTTPStubs addRequestHandler:^OHHTTPStubsResponse *(NSURLRequest *request, BOOL onlyCheck) { + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL isEqual:authURL]; + + } withStubResponse:^OHHTTPStubsResponse *(NSURLRequest *request) { return [OHHTTPStubsResponse responseWithError:[NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorCannotFindHost userInfo:nil]]; }]; From fbe31ffdf8ecc7aa229d3ec82dd13c78b8997ef4 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Fri, 6 Dec 2013 16:04:16 +0000 Subject: [PATCH 86/88] Update dependencies in podspec --- libPusher.podspec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libPusher.podspec b/libPusher.podspec index 10497750..284603a1 100644 --- a/libPusher.podspec +++ b/libPusher.podspec @@ -14,7 +14,7 @@ Pod::Spec.new do |s| s.osx.deployment_target = '10.8' s.subspec 'Core' do |subspec| - subspec.dependency 'SocketRocket', "0.2" + subspec.dependency 'SocketRocket', "0.3.1-beta2" subspec.source_files = 'Library/**/*.{h,m}' subspec.private_header_files = 'Library/Private Headers/*' @@ -24,7 +24,7 @@ Pod::Spec.new do |s| end s.subspec 'ReactiveExtensions' do |subspec| - subspec.dependency 'ReactiveCocoa', '2.1.7' + subspec.dependency 'ReactiveCocoa', '~> 2.1' subspec.source_files = 'ReactiveExtensions/*' subspec.private_header_files = '*_Internal.h' From a26ea342aac9047ef077010afa40f17e3db36db8 Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Fri, 6 Dec 2013 16:06:32 +0000 Subject: [PATCH 87/88] Remove this property completely --- CHANGES.md | 5 ++++- Library/PTPusher.h | 13 ------------- 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index f6c67b89..995b4cde 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -8,12 +8,14 @@ This is a summary of the changes in this release and notes on how to upgrade. Th As of this version, support for iOS < 5.0 and OSX < 10.8 has been dropped. -### Initial connection is no longer automatic +### Connection is no longer automatic `PTPusher` will no longer connect automatically on initialisation and all methods that accept a connect `connectAutomatically` parameter (including the initialiser and all factory methods) are deprecated. You should now explicitly call `connect` when you are ready to connect. +The method `reconnectAutomatically` has been removed completely (see below). + ### Improvements to disconnection handling `PTPusher` now goes to great lengths to ensure it remains connected whenever possible, including correctly handling error codes returned by the Pusher service (see http://pusher.com/docs/pusher_protocol#error-codes). @@ -59,6 +61,7 @@ This release contains some extensions that allow binding to events using Reactiv * Bumped Pusher protocol to version 6. * Switched to latest SocketRocket backend, improved threading issues * Removed private headers from CocoaPod specification +* Removed `PTPusher` property, `reconnectAutomatically` * Moved fatal protocol errors that disallow reconnection into a new `PTPusherFatalErrorDomain` error domain. * Fixed 64bit warnings. * Removed JSONKit support. diff --git a/Library/PTPusher.h b/Library/PTPusher.h index b8ef9b5d..f7b25815 100644 --- a/Library/PTPusher.h +++ b/Library/PTPusher.h @@ -94,19 +94,6 @@ extern NSString *const PTPusherErrorUnderlyingEventKey; @property (nonatomic, unsafe_unretained) id delegate; #endif - - -/** This property is deprecated and will be ignored. - * - * The client will always attempt to reconnect when it disconnects as long as the error - * code it disconnected with permits automatic reconnection (see the Pusher protocol documentation - * for an overview of error codes: http://pusher.com/docs/pusher_protocol). - * - * If you want to prevent the client from automatically reconnecting, you can do so by returning - * NO from the delegate method pusher:connectionWillConnect:. - */ -@property (nonatomic, assign, getter=shouldReconnectAutomatically) BOOL reconnectAutomatically __PUSHER_DEPRECATED__; - /** Specifies the delay between reconnection attempts. Defaults to 5 seconds. */ @property (nonatomic, assign) NSTimeInterval reconnectDelay; From d7c14173c0812cb1546bedeb86570736b8c0c7ce Mon Sep 17 00:00:00 2001 From: Luke Redpath Date: Fri, 6 Dec 2013 17:09:01 +0000 Subject: [PATCH 88/88] Documentation updates. --- Library/PTPusher.h | 124 ++++++++++++++++++++---------- Library/PTPusherAPI.h | 15 +++- Library/PTPusherChannel.h | 67 ++++++++++++---- Library/PTPusherConnection.h | 60 +++++++++++---- Library/PTPusherDelegate.h | 88 +++++++++++++-------- Library/PTPusherEvent.h | 5 +- Library/PTPusherEventDispatcher.h | 10 ++- Rakefile | 3 +- 8 files changed, 260 insertions(+), 112 deletions(-) diff --git a/Library/PTPusher.h b/Library/PTPusher.h index f7b25815..72a4de6a 100644 --- a/Library/PTPusher.h +++ b/Library/PTPusher.h @@ -49,9 +49,8 @@ extern NSString *const PTPusherErrorUnderlyingEventKey; /** A PTPusher object provides a high level API for communicating with the Pusher service. - The provided API allows you to connect and disconnect from the service, subscribe and unsubscribe - from channels and bind to events. There is also beta support for sending events directly over the - connection (instead of using the Pusher REST API). + A single instance of `PTPusher` can be used to connect to the service, subscribe to channels and send + events. To create an instance of PTPusher, you will need your Pusher API key. This can be obtained from your account dashboard. @@ -60,20 +59,17 @@ extern NSString *const PTPusherErrorUnderlyingEventKey; lifecycle, such as connection, disconnection, reconnection and channel subscribe/unsubscribe events. Whilst PTPusher exposes it's connection object as a readonly property, there is no need to manage or - create this connection manually. The connection can be queried for it's current connection state and + create this connection yourself. The connection can be queried for it's current connection state and socket ID if needed. PTPusher aims to mirror the Pusher Javascript client API as much as possible although whilst the - Javascript API uses event binding for any interesting events - not just server or other client events - + Javascript API uses event binding for any system events, such as channel subscription libPusher uses standard Cocoa and Objective-C patterns such as delegation and notification where it makes sense to do so. PTPusher will attempt to try and remain connected whenever possible. If the connection disconnects, then depending on the error code returned, it will either try to reconnect immediately, reconnect after - a configured delay or not reconnect at all. - - If the connection fails to connect for some reason, PTPusher will notify its delegate without trying - to reconnect - it is up to you to evaluate the error and decide whether or not to reconnect. + a configured delay or not reconnect at all. See the project README for more information on this. Note: due to various problems people have had connecting to Pusher without SSL over a 3G connection, it is highly recommend that you use SSL. For this reason, SSL is enabled by default. @@ -88,11 +84,7 @@ extern NSString *const PTPusherErrorUnderlyingEventKey; The delegate must implement the PTPusherDelegate protocol. The delegate is not retained. */ -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_5_0 @property (nonatomic, weak) id delegate; -#else -@property (nonatomic, unsafe_unretained) id delegate; -#endif /** Specifies the delay between reconnection attempts. Defaults to 5 seconds. */ @@ -126,11 +118,17 @@ extern NSString *const PTPusherErrorUnderlyingEventKey; /// @name Creating new instances ///------------------------------------------------------------------------------------/ -/** - * Use initWithConnection: +/** Initialises a new instance. This is the designated initialiser. + * + * Clients should typically use one of the factory methods provided, which will configure the + * connection object for you using the standard Pusher host and port. + * + * If you need to connect to Pusher using an alternative endpoint URL, e.g. for testing + * purposes, then you can initialise an instance of `PTPusherConnection` with an appropriate + * URL and pass it into this method. + * + * @param connection An initialised connection for this instance. */ -- (id)initWithConnection:(PTPusherConnection *)connection connectAutomatically:(BOOL)connectAutomatically __PUSHER_DEPRECATED__; - - (id)initWithConnection:(PTPusherConnection *)connection; /** Returns a new PTPusher instance with a connection configured with the given key. @@ -151,29 +149,6 @@ extern NSString *const PTPusherErrorUnderlyingEventKey; */ + (id)pusherWithKey:(NSString *)key delegate:(id)delegate; -/** Initialises a new PTPusher instance with a connection configured with the given key. - - If you intend to set a delegate for this instance, you are recommended to set connectAutomatically - to NO, set the delegate then manually call connect. - - @deprecated Use pusherWithKey:delegate:encrypted: or pusherWithKey:delegate: - @param key Your application's API key. It can be found in the API Access section of your application within the Pusher user dashboard. - @param connect Automatically If YES, the connection will be connected on initialisation. - */ -+ (id)pusherWithKey:(NSString *)key connectAutomatically:(BOOL)connectAutomatically __PUSHER_DEPRECATED__; - -/** Initialises a new PTPusher instance with a connection configured with the given key. - - If you intend to set a delegate for this instance, you are recommended to set connectAutomatically - to NO, set the delegate then manually call connect. - - @deprecated Use pusherWithKey:delegate:encrypted: or pusherWithKey:delegate: - @param key Your application's API key. It can be found in the API Access section of your application within the Pusher user dashboard. - @param connectAutomatically If YES, the connection will be connected on initialisation. - @param isEncrypted If yes, a secure connection over SSL will be established. - */ -+ (id)pusherWithKey:(NSString *)key connectAutomatically:(BOOL)connectAutomatically encrypted:(BOOL)isEncrypted __PUSHER_DEPRECATED__; - ///------------------------------------------------------------------------------------/ /// @name Managing the connection ///------------------------------------------------------------------------------------/ @@ -199,7 +174,30 @@ extern NSString *const PTPusherErrorUnderlyingEventKey; This method can be used to subscribe to any type of channel, including private and presence channels by including the appropriate channel name prefix. + Note: this method returns the channel object immediately, but it might not yet be + subscribed - subscription is asynchronous. You do not have to wait for a channel + to become subscribed before setting up event bindings. If you care about when the + channel is subscribed, you can use key-value observing on it's `isSubscribed` + property or implement the appropriate `PTPusherDelegate` method. + + It is valid to call this (or any of the other subscribe methods) while the client is + not connected. All channels default to unsubscribed and any subcribed channels will + become implicitly unsubscribed if the client disconnects. When the client connects, + all channels will be re-subscribed to automatically. + + When you subscribe to a channel, `PTPusher` keeps a strong reference to that channel + and maintains that reference until the channel is explicitly unsubscribed (by calling + `-[PTPusherChannel unsubscribe]`. + + If you maintain your own strong reference to the returned channel object, you should + be aware that once unsubscribed, the object will no longer be of any use. For this + reason you should be wary of passing around strong references to channels that you + may unsubscribe from. + + For more information on channel lifetime, see the README. + @param name The name of the channel to subscribe to. + @returns The channel object. */ - (PTPusherChannel *)subscribeToChannelNamed:(NSString *)name; @@ -236,13 +234,24 @@ extern NSString *const PTPusherErrorUnderlyingEventKey; This method is deprecated. You should use -[PTPusherChannel unsubscribe] instead. + When you explicitly unsubscribe from a channel, it will never be re-subscribed to and + PTPusher will remove any of it's references to the channel. If you maintain no strong + references to the channel of your own, the channel object will be deallocated. + + If you do maintain a strong reference to a channel object, you should discard it after + calling `unsubscribe`. + @param channel The channel to unsubscribe from. */ - (void)unsubscribeFromChannel:(PTPusherChannel *)channel __PUSHER_DEPRECATED__; /** Returns a previously subscribed channel with the given name. - If the channel specified has not been subscribed to, this method will return nil. + If the channel specified has not been subscribed to previously, or has been explicilty + unsubscribed from, this will return nil. + + This method will return channels that have become implicitly unsubscribed from if the + client has disconnected. @param name The name of the channel required. */ @@ -272,5 +281,38 @@ extern NSString *const PTPusherErrorUnderlyingEventKey; */ - (void)sendEventNamed:(NSString *)name data:(id)data channel:(NSString *)channelName; +///------------------------------------------------------------------------------------/ +/// @name Deprecated methods +///------------------------------------------------------------------------------------/ + +/** Initialises a new PTPusher instance with a connection configured with the given key. + + If you intend to set a delegate for this instance, you are recommended to set connectAutomatically + to NO, set the delegate then manually call connect. + + @deprecated Use pusherWithKey:delegate:encrypted: or pusherWithKey:delegate: + @param key Your application's API key. It can be found in the API Access section of your application within the Pusher user dashboard. + @param connect Automatically If YES, the connection will be connected on initialisation. + */ ++ (id)pusherWithKey:(NSString *)key connectAutomatically:(BOOL)connectAutomatically __PUSHER_DEPRECATED__; + +/** Initialises a new PTPusher instance with a connection configured with the given key. + + If you intend to set a delegate for this instance, you are recommended to set connectAutomatically + to NO, set the delegate then manually call connect. + + @deprecated Use pusherWithKey:delegate:encrypted: or pusherWithKey:delegate: + @param key Your application's API key. It can be found in the API Access section of your application within the Pusher user dashboard. + @param connectAutomatically If YES, the connection will be connected on initialisation. + @param isEncrypted If yes, a secure connection over SSL will be established. + */ ++ (id)pusherWithKey:(NSString *)key connectAutomatically:(BOOL)connectAutomatically encrypted:(BOOL)isEncrypted __PUSHER_DEPRECATED__; + +/** + * @deprecated See initWithConnection: + */ +- (id)initWithConnection:(PTPusherConnection *)connection connectAutomatically:(BOOL)connectAutomatically __PUSHER_DEPRECATED__; + + @end diff --git a/Library/PTPusherAPI.h b/Library/PTPusherAPI.h index ce98f1d8..04e0d274 100644 --- a/Library/PTPusherAPI.h +++ b/Library/PTPusherAPI.h @@ -13,11 +13,12 @@ This functionality used to be part of the main PTPusher library but has been extracted into a standalone component. - The PTPusher client has alpha support for channel-based event triggering - but for general event triggering the API can be used. + The PTPusher client has support for client-sent events but if your account does not + support these you can use this class to send events using the standard Pusher REST API. As well as your Pusher API key, you will also need your app ID and secret key - for signing requests. + for signing requests. You should take care not to expose these in your application's + header files. */ @interface PTPusherAPI : NSObject @@ -25,6 +26,14 @@ /// @name Initialisation ///------------------------------------------------------------------------------------/ +/** Designated initializer + + You will need your account credentials which can be located on your account dashboard. + + @param aKey Your Pusher API key + @param anAppID Your Pusher app ID + @param aSecretKey Your Pusher app secret. + */ - (id)initWithKey:(NSString *)aKey appID:(NSString *)anAppID secretKey:(NSString *)aSecretKey; ///------------------------------------------------------------------------------------/ diff --git a/Library/PTPusherChannel.h b/Library/PTPusherChannel.h index 15511ee2..2c21dac3 100644 --- a/Library/PTPusherChannel.h +++ b/Library/PTPusherChannel.h @@ -35,6 +35,13 @@ Channels can be subscribed to or unsubscribed to at any time, even before the initial Pusher connection has been established. + + Generally, channel objects will exist from the point of creation until you explicitly unsubscribe + from them, unless you maintain your own strong references to the channel object. Channels become + implicitly unsubscribed when the connection is lost but will be re-subscribed once connection + is re-established. This means you can use the same channel object across connections. + + See the README for more information on channel object lifetime. */ @interface PTPusherChannel : NSObject @@ -51,39 +58,36 @@ Whilst public channels are subscribed to immediately, presence and private channels require authorization first. This property will be set to YES once an internal Pusher event has been received indicating that the channel subscription has been registered. + + You can bind to events on a channel without waiting for it to become subscribed and any + event bindings will be kept if the channel becomes unsubscribed due to a loss of connection. */ @property (nonatomic, readonly, getter=isSubscribed) BOOL subscribed; /** Indicates whether or not this is a private channel. - - The value of this property will be YES for private and presence channels. */ @property (nonatomic, readonly) BOOL isPrivate; /** Indicates whether or not this is a presence channel. - - The value of this property will be YES for presence channels only. */ @property (nonatomic, readonly) BOOL isPresence; -///------------------------------------------------------------------------------------/ -/// @name Initialisation -///------------------------------------------------------------------------------------/ - + (id)channelWithName:(NSString *)name pusher:(PTPusher *)pusher; - (id)initWithName:(NSString *)channelName pusher:(PTPusher *)pusher; - -///------------------------------------------------------------------------------------/ -/// @name Authorization -///------------------------------------------------------------------------------------/ - - (void)authorizeWithCompletionHandler:(void(^)(BOOL, NSDictionary *, NSError *))completionHandler; ///------------------------------------------------------------------------------------/ /// @name Unsubscribing ///------------------------------------------------------------------------------------/ -/** Unsubscribes from the channel. +/** Unsubscribes from the channel. + + PTPusher will remove any strong references to the channel when you unsusbcribe. If you + do not have any strong references to the channel object, it will be deallocated after + unsubscribing. + + If there is an active connection when this is called, an unsubscribe event will be + ssent to the server. */ - (void)unsubscribe; @@ -96,7 +100,7 @@ Private channel names always have the prefix of "private-". - Only private and presence channels support the triggering client events. + Only private and presence channels support client triggered events. */ @interface PTPusherPrivateChannel : PTPusherChannel @@ -158,6 +162,10 @@ */ @property (nonatomic, readonly) PTPusherChannelMembers *members; +///------------------------------------------------------------------------------------/ +/// @name Deprecated methods +///------------------------------------------------------------------------------------/ + /** Returns a dictionary of member metadata (email, name etc.) for the given member ID. * * @deprecated Use the members object. @@ -184,9 +192,17 @@ */ @interface PTPusherChannelMember : NSObject +/** The user's ID. + */ @property (nonatomic, readonly) NSString *userID; + +/** A dictionary of user info - this is normally application specific. + * + */ @property (nonatomic, readonly) NSDictionary *userInfo; +/** Provides object subscripting access to userInfo data. + */ - (id)objectForKeyedSubscript:(id )key; @end @@ -203,12 +219,33 @@ */ @interface PTPusherChannelMembers : NSObject +/** The number of members in the channel. + */ @property (nonatomic, readonly) NSInteger count; + +/** The ID of the client's member. + */ @property (nonatomic, copy, readonly) NSString *myID; + +/** The client member. + */ @property (nonatomic, readonly) PTPusherChannelMember *me; +/** Can be used to look up a channel member by ID. + + @return The member with the given ID, or nil if it does not exist. + */ - (PTPusherChannelMember *)memberWithID:(NSString *)userID; + +/** Can be used to iterate over each member in the channel. + */ - (void)enumerateObjectsUsingBlock:(void (^)(id obj, BOOL *stop))block; + +/** Provides object subscripting access to members by key. + + @param key The member ID + @returns The member with the specified ID, or nil if it does not exist. + */ - (id)objectForKeyedSubscript:(id )key; @end diff --git a/Library/PTPusherConnection.h b/Library/PTPusherConnection.h index 175efb48..fa9768e1 100644 --- a/Library/PTPusherConnection.h +++ b/Library/PTPusherConnection.h @@ -35,16 +35,37 @@ typedef enum { @interface PTPusherConnection : NSObject @property (nonatomic, weak) id delegate; + +/** Indicates if the connection is connected to the Pusher service. + + @return YES, if the socket has connected and a handshake has been received from the server, otherwise NO. + */ @property (nonatomic, readonly, getter=isConnected) BOOL connected; + +/** The unique socket ID for this connection. + + Every time the connection connects to the service, a new socket ID is received on handshake. + + This is normally used when authorizing private and presence channel subscriptions. + */ @property (nonatomic, copy, readonly) NSString *socketID; + +/** The Pusher service URL. + */ @property (nonatomic, readonly) NSURL *URL; /* If the connection does not receive any new data within the time specified, - * a ping event will be sent. + a ping event will be sent. + + Defaults to 120s as recommended by the Pusher protocol documentation. You should not + normally need to change this. */ @property (nonatomic, assign) NSTimeInterval activityTimeout; /* The amount of time to wait for a pong in response to a ping before disconnecting. + + Defaults to 30s as recommended by the Pusher protocol documentation. You should not + normally need to change this. */ @property (nonatomic, assign) NSTimeInterval pongTimeout; @@ -61,19 +82,6 @@ typedef enum { */ - (id)initWithURL:(NSURL *)aURL; -/** Creates a new PTPusherConnection instance. - - Connections are not opened immediately; an explicit call to connect is required. - - DEPRECATED IN VERSION 1.2. The secure parameter is now ignored; secure mode will be - enabled automatically when the URL protocol is wss. - - @param aURL The websocket endpoint - @param delegate The delegate for this connection - @param secure Whether this connection should be secure (TLS) - */ -- (id)initWithURL:(NSURL *)aURL secure:(BOOL)secure __PUSHER_DEPRECATED__; - ///------------------------------------------------------------------------------------/ /// @name Managing connections ///------------------------------------------------------------------------------------/ @@ -82,10 +90,15 @@ typedef enum { The delegate will only be sent a didConnect message when the web socket receives a 'connection_established' event from Pusher, regardless of the web socket's connection state. + + Calling this does nothing if already connected. */ - (void)connect; -/** Closes the web socket connection */ +/** Closes the web socket connection + + Calling this does nothing if already disconnected. + */ - (void)disconnect; ///------------------------------------------------------------------------------------/ @@ -99,4 +112,21 @@ typedef enum { */ - (void)send:(id)object; +///------------------------------------------------------------------------------------/ +/// @name Deprecated methods +///------------------------------------------------------------------------------------/ + +/** Creates a new PTPusherConnection instance. + + Connections are not opened immediately; an explicit call to connect is required. + + DEPRECATED IN VERSION 1.2. The secure parameter is now ignored; secure mode will be + enabled automatically when the URL protocol is wss. + + @param aURL The websocket endpoint + @param delegate The delegate for this connection + @param secure Whether this connection should be secure (TLS) + */ +- (id)initWithURL:(NSURL *)aURL secure:(BOOL)secure __PUSHER_DEPRECATED__; + @end diff --git a/Library/PTPusherDelegate.h b/Library/PTPusherDelegate.h index 807be631..d495e1d5 100644 --- a/Library/PTPusherDelegate.h +++ b/Library/PTPusherDelegate.h @@ -14,7 +14,8 @@ @class PTPusherEvent; @class PTPusherErrorEvent; -/** The PTPusherDelegate protocol can be implemented to receive important events in a PTPusher object's lifetime. +/** Implementing the PTPusherDelegate protocol lets you react to important events in the Pusher client's + lifetime, such as connection and disconnection, channel subscription and errors. All of the delegate methods are optional; you only need to implement what is required for your app. @@ -25,6 +26,10 @@ @optional +///------------------------------------------------------------------------------------/ +/// @name Connection handling +///------------------------------------------------------------------------------------/ + /** Notifies the delegate that the PTPusher instance is about to connect to the Pusher service. @param pusher The PTPusher instance that is connecting. @@ -40,23 +45,6 @@ */ - (void)pusher:(PTPusher *)pusher connectionDidConnect:(PTPusherConnection *)connection; -/** Notifies the delegate that the PTPusher instance has disconnected from the Pusher service. - - @deprecated Use pusher:connection:didDisconnectWithError:willAttemptReconnect: - @param pusher The PTPusher instance that has connected. - @param connection The connection for the pusher instance. - */ -- (void)pusher:(PTPusher *)pusher connectionDidDisconnect:(PTPusherConnection *)connection __PUSHER_DEPRECATED__; - -/** Notifies the delegate that the PTPusher instance has disconnected from the Pusher service. - - @deprecated Use pusher:connection:didDisconnectWithError:willAttemptReconnect: - @param pusher The PTPusher instance that has connected. - @param connection The connection for the pusher instance. - @param error If the connection disconnected abnormally, error will be non-nil. - */ -- (void)pusher:(PTPusher *)pusher connection:(PTPusherConnection *)connection didDisconnectWithError:(NSError *)error __PUSHER_DEPRECATED__; - /** Notifies the delegate that the PTPusher instance has disconnected from the Pusher service. Clients should check the value of the willAttemptReconnect parameter before trying to reconnect manually. @@ -67,6 +55,9 @@ immediately following this one. Clients can return NO from that delegate method to cancel the automatic reconnection attempt. + If the client has disconnected due to a fatal Pusher error (as indicated by the error code), + willAttemptReconnect will be NO and the error domain will be `PTPusherFatalErrorDomain`. + @param pusher The PTPusher instance that has connected. @param connection The connection for the pusher instance. @param error If the connection disconnected abnormally, error will be non-nil. @@ -96,19 +87,9 @@ */ - (BOOL)pusher:(PTPusher *)pusher connectionWillAutomaticallyReconnect:(PTPusherConnection *)connection afterDelay:(NSTimeInterval)delay; -/** Notifies the delegate of the request that will be used to authorize access to a channel. - - When using the Pusher Javascript client, authorization typically relies on an existing session cookie - on the server; when the Javascript client makes an AJAX POST to the server, the server can return - the user's credentials based on their current session. - - When using libPusher, there will likely be no existing server-side session; authorization will - need to happen by some other means (e.g. an authorization token or HTTP basic auth). - - By implementing this delegate method, you will be able to set any credentials as necessary by - modifying the request as required (such as setting POST parameters or headers). - */ -- (void)pusher:(PTPusher *)pusher willAuthorizeChannelWithRequest:(NSMutableURLRequest *)request __PUSHER_DEPRECATED__; +///------------------------------------------------------------------------------------/ +/// @name Channel subscription and authorization +///------------------------------------------------------------------------------------/ /** Notifies the delegate of the request that will be used to authorize access to a channel. @@ -121,6 +102,10 @@ By implementing this delegate method, you will be able to set any credentials as necessary by modifying the request as required (such as setting POST parameters or headers). + + @param pusher The PTPusher instance that is requesting authorization + @param channel The channel that requires authorizing + @param request A mutable URL request that will be POSTed to the configured `authorizationURL` */ - (void)pusher:(PTPusher *)pusher willAuthorizeChannel:(PTPusherChannel *)channel withRequest:(NSMutableURLRequest *)request; @@ -152,6 +137,10 @@ */ - (void)pusher:(PTPusher *)pusher didFailToSubscribeToChannel:(PTPusherChannel *)channel withError:(NSError *)error; +///------------------------------------------------------------------------------------/ +/// @name Errors +///------------------------------------------------------------------------------------/ + /** Notifies the delegate that an error event has been received. If a client is binding to all events, either through the client or using NSNotificationCentre, they will also @@ -161,4 +150,41 @@ @param errorEvent The error event. */ - (void)pusher:(PTPusher *)pusher didReceiveErrorEvent:(PTPusherErrorEvent *)errorEvent; + + +///------------------------------------------------------------------------------------/ +/// @name Deprecated methods +///------------------------------------------------------------------------------------/ + +/** Notifies the delegate that the PTPusher instance has disconnected from the Pusher service. + + @deprecated Use pusher:connection:didDisconnectWithError:willAttemptReconnect: + @param pusher The PTPusher instance that has connected. + @param connection The connection for the pusher instance. + */ +- (void)pusher:(PTPusher *)pusher connectionDidDisconnect:(PTPusherConnection *)connection __PUSHER_DEPRECATED__; + +/** Notifies the delegate that the PTPusher instance has disconnected from the Pusher service. + + @deprecated Use pusher:connection:didDisconnectWithError:willAttemptReconnect: + @param pusher The PTPusher instance that has connected. + @param connection The connection for the pusher instance. + @param error If the connection disconnected abnormally, error will be non-nil. + */ +- (void)pusher:(PTPusher *)pusher connection:(PTPusherConnection *)connection didDisconnectWithError:(NSError *)error __PUSHER_DEPRECATED__; + +/** Notifies the delegate of the request that will be used to authorize access to a channel. + + When using the Pusher Javascript client, authorization typically relies on an existing session cookie + on the server; when the Javascript client makes an AJAX POST to the server, the server can return + the user's credentials based on their current session. + + When using libPusher, there will likely be no existing server-side session; authorization will + need to happen by some other means (e.g. an authorization token or HTTP basic auth). + + By implementing this delegate method, you will be able to set any credentials as necessary by + modifying the request as required (such as setting POST parameters or headers). + */ +- (void)pusher:(PTPusher *)pusher willAuthorizeChannelWithRequest:(NSMutableURLRequest *)request __PUSHER_DEPRECATED__; + @end diff --git a/Library/PTPusherEvent.h b/Library/PTPusherEvent.h index 5dd6e895..dd1d4f44 100644 --- a/Library/PTPusherEvent.h +++ b/Library/PTPusherEvent.h @@ -44,6 +44,7 @@ extern NSString *const PTPusherChannelKey; - (id)initWithEventName:(NSString *)name channel:(NSString *)channel data:(id)data; + (id)eventFromMessageDictionary:(NSDictionary *)dictionary; + @end typedef enum { @@ -64,11 +65,7 @@ typedef enum { /** A textual description of the error. */ -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_5_0 @property (weak, nonatomic, readonly) NSString *message; -#else -@property (unsafe_unretained, nonatomic, readonly) NSString *message; -#endif /** The error code. See PTPusherServerErrorCodes for available errors. */ diff --git a/Library/PTPusherEventDispatcher.h b/Library/PTPusherEventDispatcher.h index 922d6781..0355acaf 100644 --- a/Library/PTPusherEventDispatcher.h +++ b/Library/PTPusherEventDispatcher.h @@ -20,9 +20,17 @@ - (void)removeAllBindings; @end +/** Represents an event binding created when calling one of the binding methods defined + in the PTPusherEventBindings protocol. + + You should keep a reference to binding objects if you need to remove them later. + + For more information on managing event bindings, see the README. + */ @interface PTPusherEventBinding : NSObject -/** The event this binding binds to. */ +/** The event name this binding is bound to. + */ @property (nonatomic, readonly) NSString *eventName; /** Returns YES if this binding is still attached to its event publisher. diff --git a/Rakefile b/Rakefile index a5992c07..cbed89ec 100644 --- a/Rakefile +++ b/Rakefile @@ -38,10 +38,9 @@ task :docs => "docs:generate" namespace :docs do def appledoc_cmd(output_dir) "appledoc \ - -t /usr/local/Cellar/appledoc/2.0.4/Templates \ + -t /usr/local/Cellar/appledoc/2.0.5/Templates \ --no-search-undocumented-doc \ --keep-intermediate-files \ - --verbose 1 \ --docset-feed-url http://lukeredpath.github.com/libPusher/%DOCSETATOMFILENAME \ --docset-package-url http://lukeredpath.github.com/libPusher/%DOCSETPACKAGEFILENAME \ --publish-docset \